diff --git a/src/libslic3r/ExtrusionEntity.cpp b/src/libslic3r/ExtrusionEntity.cpp index d93620e05..e6957e968 100644 --- a/src/libslic3r/ExtrusionEntity.cpp +++ b/src/libslic3r/ExtrusionEntity.cpp @@ -287,8 +287,10 @@ std::string ExtrusionEntity::role_to_string(ExtrusionRole role) } return ""; -}void ExtrusionPrinter::use(const ExtrusionPath &path) { - ss << "ExtrusionPath{"; +} + +void ExtrusionPrinter::use(const ExtrusionPath &path) { + ss << "ExtrusionPath:" << (uint16_t)path.role() << "{"; for (int i = 0; i < path.polyline.points.size(); i++) { if (i != 0) ss << ","; double x = (mult * (path.polyline.points[i].x())); @@ -298,7 +300,7 @@ std::string ExtrusionEntity::role_to_string(ExtrusionRole role) ss << "}"; } void ExtrusionPrinter::use(const ExtrusionPath3D &path3D) { - ss << "ExtrusionPath3D{"; + ss << "ExtrusionPath3D:" << (uint16_t)path3D.role() << "{"; for (int i = 0; i < path3D.polyline.points.size();i++){ if (i != 0) ss << ","; double x = (mult * (path3D.polyline.points[i].x())); @@ -309,7 +311,7 @@ void ExtrusionPrinter::use(const ExtrusionPath3D &path3D) { ss << "}"; } void ExtrusionPrinter::use(const ExtrusionMultiPath &multipath) { - ss << "ExtrusionMultiPath{"; + ss << "ExtrusionMultiPath:" << (uint16_t)multipath.role() << "{"; for (int i = 0; i < multipath.paths.size(); i++) { if (i != 0) ss << ","; multipath.paths[i].visit(*this); @@ -317,7 +319,7 @@ void ExtrusionPrinter::use(const ExtrusionMultiPath &multipath) { ss << "}"; } void ExtrusionPrinter::use(const ExtrusionMultiPath3D &multipath3D) { - ss << "multipath3D{"; + ss << "multipath3D:" << (uint16_t)multipath3D.role() << "{"; for (int i = 0; i < multipath3D.paths.size(); i++) { if (i != 0) ss << ","; multipath3D.paths[i].visit(*this); @@ -325,7 +327,7 @@ void ExtrusionPrinter::use(const ExtrusionMultiPath3D &multipath3D) { ss << "}"; } void ExtrusionPrinter::use(const ExtrusionLoop &loop) { - ss << "ExtrusionLoop{"; + ss << "ExtrusionLoop:" << (uint16_t)loop.role()<<":" <<(uint16_t)loop.loop_role()<<"{"; for (int i = 0; i < loop.paths.size(); i++) { if (i != 0) ss << ","; loop.paths[i].visit(*this); @@ -333,7 +335,7 @@ void ExtrusionPrinter::use(const ExtrusionLoop &loop) { ss << "}"; } void ExtrusionPrinter::use(const ExtrusionEntityCollection &collection) { - ss << "ExtrusionEntityCollection{"; + ss << "ExtrusionEntityCollection:" << (uint16_t)collection.role() << "{"; for (int i = 0; i < collection.entities.size(); i++) { if (i != 0) ss << ","; collection.entities[i]->visit(*this); diff --git a/src/libslic3r/ExtrusionEntity.hpp b/src/libslic3r/ExtrusionEntity.hpp index 3ef577a9a..b8714a64b 100644 --- a/src/libslic3r/ExtrusionEntity.hpp +++ b/src/libslic3r/ExtrusionEntity.hpp @@ -46,9 +46,9 @@ enum ExtrusionLoopRole : uint16_t { elrInternal = 1 << 1, //2 elrSkirt = 1 << 2, //4 //it's a modifier that indicate that the loop is around a hole, not around the infill - elrHole = 1 << 3, // 16 + elrHole = 1 << 3, // 8 //it's a modifier that indicate that the loop should be printed as vase - elrVase = 1 << 4, //32 + elrVase = 1 << 4, //16 }; diff --git a/tests/fff_print/test_data.cpp b/tests/fff_print/test_data.cpp index dcf2a6553..efc4579f4 100644 --- a/tests/fff_print/test_data.cpp +++ b/tests/fff_print/test_data.cpp @@ -167,7 +167,6 @@ void init_print(std::vector &&meshes, Slic3r::Print &print, Slic3r object->add_volume(std::move(t)); object->add_instance(); } - model.arrange_objects(PrintConfig::min_object_distance(&config)); model.center_instances_around_point(Slic3r::Vec2d(100, 100)); for (ModelObject *mo : model.objects) { mo->ensure_on_bed(); @@ -175,6 +174,8 @@ void init_print(std::vector &&meshes, Slic3r::Print &print, Slic3r } print.apply(model, config); + model.arrange_objects(print); + print.apply(model, config); print.validate(); print.set_status_silent(); } diff --git a/tests/fff_print/test_model.cpp b/tests/fff_print/test_model.cpp index 3378a8363..71fbd1699 100644 --- a/tests/fff_print/test_model.cpp +++ b/tests/fff_print/test_model.cpp @@ -41,7 +41,8 @@ SCENARIO("Model construction", "[Model]") { } } model_object->add_instance(); - model.arrange_objects(PrintConfig::min_object_distance(&config)); + print.apply(model, config); // apply config for arrange_objects + model.arrange_objects(print); model.center_instances_around_point(Slic3r::Vec2d(100, 100)); model_object->ensure_on_bed(); print.auto_assign_extruders(model_object); diff --git a/tests/superslicerlibslic3r/test_complete_objects.cpp b/tests/superslicerlibslic3r/test_complete_objects.cpp index 3d9419975..28ba64a28 100644 --- a/tests/superslicerlibslic3r/test_complete_objects.cpp +++ b/tests/superslicerlibslic3r/test_complete_objects.cpp @@ -75,19 +75,19 @@ SCENARIO("Complete objects separatly") { THEN("complete objects") { config.set_key_value("complete_objects", new ConfigOptionBool(true)); result = init_print_with_dist(config, 22)->validate(); - REQUIRE(result.first == PrintBase::PrintValidationError::WrongPosition); + REQUIRE(result.first == PrintBase::PrintValidationError::pveWrongPosition); } } WHEN("at the limit (~30 mm)") { config.set_key_value("complete_objects", new ConfigOptionBool(true)); THEN("(too near)") { result = init_print_with_dist(config, 29.9)->validate(); - REQUIRE(result.first == PrintBase::PrintValidationError::WrongPosition); + REQUIRE(result.first == PrintBase::PrintValidationError::pveWrongPosition); } THEN("(ok far)") { result = init_print_with_dist(config, 30.1)->validate(); REQUIRE(result.second == ""); - REQUIRE(result.first == PrintBase::PrintValidationError::None); + REQUIRE(result.first == PrintBase::PrintValidationError::pveNone); } } WHEN("with a 10 mm brim, so the dist should be 40mm ") { @@ -95,12 +95,12 @@ SCENARIO("Complete objects separatly") { config.set_deserialize("brim_width", "10"); THEN("(too near)") { result = init_print_with_dist(config, 39.9)->validate(); - REQUIRE(result.first == PrintBase::PrintValidationError::WrongPosition); + REQUIRE(result.first == PrintBase::PrintValidationError::pveWrongPosition); } THEN("(ok far)") { result = init_print_with_dist(config, 40.1)->validate(); REQUIRE(result.second == ""); - REQUIRE(result.first == PrintBase::PrintValidationError::None); + REQUIRE(result.first == PrintBase::PrintValidationError::pveNone); } } WHEN("with a 10 mm dist short skirt, so the dist should be 40mm +extrusionwidth") { @@ -112,12 +112,12 @@ SCENARIO("Complete objects separatly") { THEN("(too near)") { result = init_print_with_dist(config, 40)->validate(); - REQUIRE(result.first == PrintBase::PrintValidationError::WrongPosition); + REQUIRE(result.first == PrintBase::PrintValidationError::pveWrongPosition); } THEN("(ok far)") { result = init_print_with_dist(config, 40.8)->validate(); REQUIRE(result.second == ""); - REQUIRE(result.first == PrintBase::PrintValidationError::None); + REQUIRE(result.first == PrintBase::PrintValidationError::pveNone); } } } diff --git a/tests/superslicerlibslic3r/test_data.cpp b/tests/superslicerlibslic3r/test_data.cpp index ac908c322..c697fb76e 100644 --- a/tests/superslicerlibslic3r/test_data.cpp +++ b/tests/superslicerlibslic3r/test_data.cpp @@ -286,6 +286,7 @@ void init_print(Print& print, std::initializer_list meshes, Slic3r::Mo inst->set_scaling_factor(Vec3d(1, 1, 1)); } + print.apply(model, config); // apply config for the arrange_objects model.arrange_objects(print); model.center_instances_around_point(Slic3r::Vec2d(100,100)); for (auto* mo : model.objects) { @@ -298,7 +299,8 @@ void init_print(Print& print, std::initializer_list meshes, Slic3r::Mo //std::cout << "validate result : " << err << ", mempty print? " << print.empty() << "\n"; } -void init_print(Print& print, std::initializer_list meshes, Slic3r::Model& model, DynamicPrintConfig* _config, bool comments) { + +void init_print(Print& print, std::vector meshes, Slic3r::Model& model, DynamicPrintConfig* _config, bool comments) { DynamicPrintConfig &config = Slic3r::DynamicPrintConfig::full_print_config(); config.apply(*_config); @@ -308,7 +310,9 @@ void init_print(Print& print, std::initializer_list meshes, Slic3r //if (tests_gcode != ""s) //config->set_key_value("gcode_comments", new ConfigOptionBool(true)); - for (const TriangleMesh& t : meshes) { + for (TriangleMesh& t : meshes) { + if(!t.repaired) + t.repair(); ModelObject* object {model.add_object()}; object->name += "object.stl"s; object->add_volume(t); @@ -318,6 +322,7 @@ void init_print(Print& print, std::initializer_list meshes, Slic3r inst->set_scaling_factor(Vec3d(1, 1, 1)); } + print.apply(model, config); // apply config for the arrange_objects model.arrange_objects(print); model.center_instances_around_point(Slic3r::Vec2d(100,100)); print.apply(model, config); diff --git a/tests/superslicerlibslic3r/test_data.hpp b/tests/superslicerlibslic3r/test_data.hpp index 32cb26eb1..64ed55a90 100644 --- a/tests/superslicerlibslic3r/test_data.hpp +++ b/tests/superslicerlibslic3r/test_data.hpp @@ -69,7 +69,7 @@ bool _equiv(const T& a, const T& b, double epsilon) { return abs(a - b) < epsilo Slic3r::Model model(const std::string& model_name, TriangleMesh&& _mesh); void init_print(Print& print, std::initializer_list meshes, Slic3r::Model& model, DynamicPrintConfig* _config, bool comments = false); -void init_print(Print& print, std::initializer_list meshes, Slic3r::Model& model, DynamicPrintConfig* _config, bool comments = false); +void init_print(Print& print, std::vector meshes, Slic3r::Model& model, DynamicPrintConfig* _config, bool comments = false); void gcode(std::string& gcode, Print& print);