From f2206be78b5540f185328618c84a1c34d9273613 Mon Sep 17 00:00:00 2001 From: Joseph Lenox Date: Sat, 21 Jul 2018 08:40:00 -0500 Subject: [PATCH] Fixed a typo spotted by @thethirdone --- src/test/test_data.cpp | 54 +++++++++++++++++++++++++++++++-- src/test/test_data.hpp | 2 ++ xs/src/libslic3r/PrintGCode.cpp | 2 +- 3 files changed, 55 insertions(+), 3 deletions(-) diff --git a/src/test/test_data.cpp b/src/test/test_data.cpp index cac02515d..43de785af 100644 --- a/src/test/test_data.cpp +++ b/src/test/test_data.cpp @@ -17,6 +17,7 @@ const std::unordered_map mesh_names { std::make_pair(TestMesh::L,"L"), std::make_pair(TestMesh::V,"V"), std::make_pair(TestMesh::_40x10,"40x10"), + std::make_pair(TestMesh::cube_20x20x20,"cube_20x20x20"), std::make_pair(TestMesh::bridge,"bridge"), std::make_pair(TestMesh::bridge_with_hole,"bridge_with_hole"), std::make_pair(TestMesh::cube_with_concave_hole,"cube_with_concave_hole"), @@ -186,7 +187,15 @@ TriangleMesh mesh(TestMesh m, Pointf3 translate, double scale) { return mesh(m, translate, Pointf3(scale, scale, scale)); } TriangleMesh mesh(TestMesh m, Pointf3 translate, Pointf3 scale) { - TriangleMesh _mesh {mesh(m)}; + TriangleMesh _mesh; + switch(TestMesh) { + case TestMesh::cube_20x20x20: + _mesh = Slic3r::TriangleMesh::make_cube(20, 20, 20); + break; + default: + _mesh = mesh(m); + } + _mesh.scale(scale); _mesh.translate(translate); return _mesh; @@ -196,7 +205,34 @@ Slic3r::Model model(const std::string& model_name, TestMesh m, Pointf3 translate return model(model_name, m, translate, Pointf3(scale, scale, scale)); } */ +Slic3r::Test::Print init_print(std::initializer_list meshes, config_ptr _config) { + auto config {Slic3r::Config::new_from_defaults()}; + config->apply(_config); + const char* v {std::getenv("SLIC3R_TESTS_GCODE")}; + auto tests_gcode {(v == nullptr ? ""s : std::string(v))}; + + if (tests_gcode != ""s) + config->set("gcode_comments", 1); + + std::shared_ptr print = std::make_shared(); + print->apply_config(config); + + auto model {Slic3r::Test::model(s.str(), Slic3r::TriangleMesh::make_cube(get<0>(cube), get<1>(cube), get<1>(cube))) }; + + model.arrange_objects(print->config.min_object_distance()); + model.center_instances_around_point(Slic3r::Pointf(100,100)); + for (auto* mo : model.objects) { + print->auto_assign_extruders(mo); + print->add_model_object(mo); + } + + print->validate(); + + std::vector models {}; + models.emplace_back(model); + return Slic3r::Test::Print(print, models); +} Slic3r::Test::Print init_print(std::tuple cube, config_ptr _config) { std::stringstream s; s << "cube_" << get<0>(cube) << "x" << get<1>(cube) << "x" << get<2>(cube); @@ -212,8 +248,11 @@ Slic3r::Test::Print init_print(std::tuple cube, config_ptr _config) std::shared_ptr print = std::make_shared(); print->apply_config(config); + Slic3r::Model model; - auto model {Slic3r::Test::model(s.str(), Slic3r::TriangleMesh::make_cube(get<0>(cube), get<1>(cube), get<1>(cube))) }; + for (const auto& testm : meshes) { + add_testmesh_to_model(model, mesh_names[testm], mesh(testm, Pointf3(0,0,0), 1.0)); + } model.arrange_objects(print->config.min_object_distance()); model.center_instances_around_point(Slic3r::Pointf(100,100)); @@ -247,5 +286,16 @@ Slic3r::Model model(const std::string& model_name, TriangleMesh&& _mesh) { return result; } +void add_testmesh_to_model(Slic3r::Model& result, const std::string& model_name, TriangleMesh&& _mesh) { + auto* object {result.add_object()}; + object->name += model_name + ".stl"s; + object->add_volume(_mesh); + + auto* inst {object->add_instance()}; + inst->rotation = 0; + inst->scaling_factor = 1.0; + + return result; +} } } // namespace Slic3r::Test diff --git a/src/test/test_data.hpp b/src/test/test_data.hpp index 4ad4eb93b..c560082ad 100644 --- a/src/test/test_data.hpp +++ b/src/test/test_data.hpp @@ -16,6 +16,7 @@ enum class TestMesh { L, V, _40x10, + cube_20x20x20, bridge, bridge_with_hole, cube_with_concave_hole, @@ -67,6 +68,7 @@ bool _equiv(const T& a, const U& b, double epsilon) { return abs(a - b) < epsilo Slic3r::Model model(const std::string& model_name, TriangleMesh&& _mesh); Slic3r::Test::Print init_print(std::tuple cube, config_ptr _config = Slic3r::Config::new_from_defaults()); +Slic3r::Test::Print init_print(std::initializer_list meshes, config_ptr _config = Slic3r::Config::new_from_defaults()); void gcode(std::stringstream& gcode, Slic3r::Test::Print& print); diff --git a/xs/src/libslic3r/PrintGCode.cpp b/xs/src/libslic3r/PrintGCode.cpp index 16ab38340..6ed37b45a 100644 --- a/xs/src/libslic3r/PrintGCode.cpp +++ b/xs/src/libslic3r/PrintGCode.cpp @@ -405,7 +405,7 @@ PrintGCode::process_layer(size_t idx, const Layer* layer, const Points& copies) // when printing layers > 0 ignore 'min_skirt_length' and // just use the 'skirts' setting; also just use the current extruder if (layer->id() > 0 && i >= static_cast(print.config.skirts)) break; - const auto extruder_id { extruder_ids.at((i / extruder_ids.size()) & extruder_ids.size()) }; + const auto extruder_id { extruder_ids.at((i / extruder_ids.size()) % extruder_ids.size()) }; if (layer->id() == 0) gcode += gcodegen.set_extruder(extruder_id);