test_model.cpp 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #include <catch2/catch.hpp>
  2. #include "libslic3r/libslic3r.h"
  3. #include "libslic3r/Model.hpp"
  4. #include <boost/nowide/cstdio.hpp>
  5. #include <boost/filesystem.hpp>
  6. #include "test_data.hpp"
  7. using namespace Slic3r;
  8. using namespace Slic3r::Test;
  9. SCENARIO("Model construction", "[Model]") {
  10. GIVEN("A Slic3r Model") {
  11. Slic3r::Model model;
  12. Slic3r::TriangleMesh sample_mesh = Slic3r::make_cube(20,20,20);
  13. Slic3r::DynamicPrintConfig config = Slic3r::DynamicPrintConfig::full_print_config();
  14. Slic3r::Print print;
  15. WHEN("Model object is added") {
  16. Slic3r::ModelObject *model_object = model.add_object();
  17. THEN("Model object list == 1") {
  18. REQUIRE(model.objects.size() == 1);
  19. }
  20. model_object->add_volume(sample_mesh);
  21. THEN("Model volume list == 1") {
  22. REQUIRE(model_object->volumes.size() == 1);
  23. }
  24. THEN("Model volume is a part") {
  25. REQUIRE(model_object->volumes.front()->is_model_part());
  26. }
  27. THEN("Mesh is equivalent to input mesh.") {
  28. REQUIRE(! sample_mesh.its.vertices.empty());
  29. const std::vector<Vec3f>& mesh_vertices = model_object->volumes.front()->mesh().its.vertices;
  30. Vec3f mesh_offset = model_object->volumes.front()->source.mesh_offset.cast<float>();
  31. for (size_t i = 0; i < sample_mesh.its.vertices.size(); ++ i) {
  32. const Vec3f &p1 = sample_mesh.its.vertices[i];
  33. const Vec3f p2 = mesh_vertices[i] + mesh_offset;
  34. REQUIRE((p2 - p1).norm() < EPSILON);
  35. }
  36. }
  37. model_object->add_instance();
  38. model.arrange_objects(PrintConfig::min_object_distance(&config));
  39. model.center_instances_around_point(Slic3r::Vec2d(100, 100));
  40. model_object->ensure_on_bed();
  41. print.auto_assign_extruders(model_object);
  42. THEN("Print works?") {
  43. print.set_status_silent();
  44. print.apply(model, config);
  45. print.process();
  46. boost::filesystem::path temp = boost::filesystem::unique_path();
  47. print.export_gcode(temp.string(), nullptr);
  48. REQUIRE(boost::filesystem::exists(temp));
  49. REQUIRE(boost::filesystem::is_regular_file(temp));
  50. REQUIRE(boost::filesystem::file_size(temp) > 0);
  51. boost::nowide::remove(temp.string().c_str());
  52. }
  53. }
  54. }
  55. }