std::string FffProcessor::getAllSettingsString(MeshGroup& meshgroup, bool first_meshgroup) { std::stringstream sstream; if (first_meshgroup) { sstream << getAllLocalSettingsString(); // global settings sstream << " -g"; } else { sstream << " --next"; } sstream << meshgroup.getAllLocalSettingsString(); for (int extruder_nr = 0; extruder_nr < meshgroup.getExtruderCount(); extruder_nr++) { ExtruderTrain* train = meshgroup.getExtruderTrain(extruder_nr); sstream << " -e" << extruder_nr << train->getAllLocalSettingsString(); } for (unsigned int mesh_idx = 0; mesh_idx < meshgroup.meshes.size(); mesh_idx++) { Mesh& mesh = meshgroup.meshes[mesh_idx]; sstream << " -e" << mesh.getSettingAsIndex("extruder_nr") << " -l \"" << mesh_idx << "\"" << mesh.getAllLocalSettingsString(); } sstream << "\n"; return sstream.str(); }
void GCodeExport::setInitialTemps(const MeshGroup& settings) { for (unsigned int extr_nr = 0; extr_nr < extruder_count; extr_nr++) { const ExtruderTrain* extr_train = settings.getExtruderTrain(extr_nr); assert(extr_train); double temp = extr_train->getSettingInDegreeCelsius((extr_nr == 0)? "material_print_temperature" : "material_standby_temperature"); setInitialTemp(extr_nr, temp); } initial_bed_temp = settings.getSettingInDegreeCelsius("material_bed_temperature"); }
void CommandSocket::handleObjectList(cura::proto::ObjectList* list) { if (list->objects_size() <= 0) { return; } FMatrix3x3 matrix; //private_data->object_count = 0; //private_data->object_ids.clear(); private_data->objects_to_slice.push_back(std::make_shared<MeshGroup>(FffProcessor::getInstance())); MeshGroup* meshgroup = private_data->objects_to_slice.back().get(); for (auto setting : list->settings()) { meshgroup->setSetting(setting.name(), setting.value()); } for (int extruder_nr = 0; extruder_nr < FffProcessor::getInstance()->getSettingAsCount("machine_extruder_count"); extruder_nr++) { // initialize remaining extruder trains and load the defaults ExtruderTrain* train = meshgroup->createExtruderTrain(extruder_nr); // create new extruder train objects or use already existing ones SettingRegistry::getInstance()->loadExtruderJSONsettings(extruder_nr, train); } for (auto object : list->objects()) { int bytes_per_face = BYTES_PER_FLOAT * FLOATS_PER_VECTOR * VECTORS_PER_FACE; int face_count = object.vertices().size() / bytes_per_face; if (face_count <= 0) { logWarning("Got an empty mesh, ignoring it!"); continue; } DEBUG_OUTPUT_OBJECT_STL_THROUGH_CERR("solid Cura_out\n"); int extruder_train_nr = 0; // TODO: make primary extruder configurable! for (auto setting : object.settings()) { if (setting.name() == "extruder_nr") { extruder_train_nr = std::stoi(setting.value()); break; } } SettingsBase* extruder_train = meshgroup->getExtruderTrain(extruder_train_nr); meshgroup->meshes.push_back(extruder_train); //Construct a new mesh (with the corresponding extruder train as settings parent object) and put it into MeshGroup's mesh list. Mesh& mesh = meshgroup->meshes.back(); for (int i = 0; i < face_count; ++i) { //TODO: Apply matrix std::string data = object.vertices().substr(i * bytes_per_face, bytes_per_face); const FPoint3* float_vertices = reinterpret_cast<const FPoint3*>(data.data()); Point3 verts[3]; verts[0] = matrix.apply(float_vertices[0]); verts[1] = matrix.apply(float_vertices[1]); verts[2] = matrix.apply(float_vertices[2]); mesh.addFace(verts[0], verts[1], verts[2]); DEBUG_OUTPUT_OBJECT_STL_THROUGH_CERR(" facet normal -1 0 0\n"); DEBUG_OUTPUT_OBJECT_STL_THROUGH_CERR(" outer loop\n"); DEBUG_OUTPUT_OBJECT_STL_THROUGH_CERR(" vertex "<<INT2MM(verts[0].x) <<" " << INT2MM(verts[0].y) <<" " << INT2MM(verts[0].z) << "\n"); DEBUG_OUTPUT_OBJECT_STL_THROUGH_CERR(" vertex "<<INT2MM(verts[1].x) <<" " << INT2MM(verts[1].y) <<" " << INT2MM(verts[1].z) << "\n"); DEBUG_OUTPUT_OBJECT_STL_THROUGH_CERR(" vertex "<<INT2MM(verts[2].x) <<" " << INT2MM(verts[2].y) <<" " << INT2MM(verts[2].z) << "\n"); DEBUG_OUTPUT_OBJECT_STL_THROUGH_CERR(" endloop\n"); DEBUG_OUTPUT_OBJECT_STL_THROUGH_CERR(" endfacet\n"); } DEBUG_OUTPUT_OBJECT_STL_THROUGH_CERR("endsolid Cura_out\n"); for (auto setting : object.settings()) { mesh.setSetting(setting.name(), setting.value()); } mesh.finish(); } private_data->object_count++; meshgroup->finalize(); }