AABB3D BlockType::getBoundingBox(const Block &block) const { if (blockTypeSpec[block.getType()].type == Type_Cube) return AABB3D(0, 0, 0, 1, 1, 1); else return AABB3D(0, 0, 0, 0, 0, 0); }
void SetUp() { output << std::fixed; gcode.output_stream = &output; //Since GCodeExport doesn't support copying, we have to reset everything in-place. gcode.currentPosition = Point3(0, 0, MM2INT(20)); gcode.layer_nr = 0; gcode.current_e_value = 0; gcode.current_e_offset = 0; gcode.current_extruder = 0; gcode.current_fan_speed = -1; gcode.total_print_times = std::vector<Duration>(static_cast<unsigned char>(PrintFeatureType::NumPrintFeatureTypes), 0.0); gcode.currentSpeed = 1; gcode.current_print_acceleration = -1; gcode.current_travel_acceleration = -1; gcode.current_jerk = -1; gcode.current_max_z_feedrate = -1; gcode.is_z_hopped = 0; gcode.setFlavor(EGCodeFlavor::MARLIN); gcode.initial_bed_temp = 0; gcode.fan_number = 0; gcode.total_bounding_box = AABB3D(); gcode.current_layer_z = 0; gcode.relative_extrusion = false; gcode.new_line = "\n"; //Not BFB flavour by default. gcode.machine_name = "Your favourite 3D printer"; gcode.machine_buildplate_type = "Your favourite build plate"; //Set up a scene so that we may request settings. Application::getInstance().current_slice = new Slice(1); mock_communication = new MockCommunication(); Application::getInstance().communication = mock_communication; }
TEST_F(GCodeExportTest, HeaderMarlinVolumetric) { Application::getInstance().current_slice->scene.current_mesh_group->settings.add("layer_height", "0.123"); gcode.flavor = EGCodeFlavor::MARLIN_VOLUMATRIC; constexpr size_t num_extruders = 2; const std::vector<bool> extruder_is_used(num_extruders, true); constexpr Duration print_time = 1337; const std::vector<double> filament_used = {100, 200}; gcode.total_bounding_box = AABB3D(Point3(0, 0, 0), Point3(1000, 1000, 1000)); std::string result = gcode.getFileHeader(extruder_is_used, &print_time, filament_used); EXPECT_EQ(result, ";FLAVOR:Marlin(Volumetric)\n;TIME:1337\n;Filament used: 100mm3, 200mm3\n;Layer height: 0.123\n;MINX:0\n;MINY:0\n;MINZ:0\n;MAXX:1\n;MAXY:1\n;MAXZ:1\n"); }
TEST_F(GCodeExportTest, HeaderRepRap) { Application::getInstance().current_slice->scene.current_mesh_group->settings.add("layer_height", "0.123"); gcode.flavor = EGCodeFlavor::REPRAP; gcode.extruder_attr[0].filament_area = 5.0; gcode.extruder_attr[1].filament_area = 4.0; constexpr size_t num_extruders = 2; const std::vector<bool> extruder_is_used(num_extruders, true); constexpr Duration print_time = 1337; const std::vector<double> filament_used = {100, 200}; gcode.total_bounding_box = AABB3D(Point3(0, 0, 0), Point3(1000, 1000, 1000)); std::string result = gcode.getFileHeader(extruder_is_used, &print_time, filament_used); EXPECT_EQ(result, ";FLAVOR:RepRap\n;TIME:1337\n;Filament used: 0.02m, 0.05m\n;Layer height: 0.123\n;MINX:0\n;MINY:0\n;MINZ:0\n;MAXX:1\n;MAXY:1\n;MAXZ:1\n"); }
/* * Test the default header generation. */ TEST_F(GCodeExportTest, HeaderUltiGCode) { gcode.flavor = EGCodeFlavor::ULTIGCODE; constexpr size_t num_extruders = 2; const std::vector<bool> extruder_is_used(num_extruders, true); constexpr Duration print_time = 1337; const std::vector<double> filament_used = {100, 200}; for (size_t extruder_index = 0; extruder_index < num_extruders; extruder_index++) { Application::getInstance().current_slice->scene.extruders.emplace_back(extruder_index, nullptr); ExtruderTrain& train = Application::getInstance().current_slice->scene.extruders.back(); train.settings.add("machine_nozzle_size", "0.4"); } gcode.total_bounding_box = AABB3D(Point3(0, 0, 0), Point3(1000, 1000, 1000)); std::string result = gcode.getFileHeader(extruder_is_used, &print_time, filament_used); EXPECT_EQ(result, ";FLAVOR:UltiGCode\n;TIME:1337\n;MATERIAL:100\n;MATERIAL2:200\n;NOZZLE_DIAMETER:0.4\n;MINX:0\n;MINY:0\n;MINZ:0\n;MAXX:1\n;MAXY:1\n;MAXZ:1\n"); }