Max count of auto assigned extruders when splitting object set as dependent of current printer

This commit is contained in:
Enrico Turri 2018-05-07 16:13:58 +02:00
parent c579ec7f5f
commit 8eb9ddc2eb
5 changed files with 19 additions and 18 deletions

View file

@ -700,7 +700,7 @@ sub load_files {
. "Instead of considering them as multiple objects, should I consider\n" . "Instead of considering them as multiple objects, should I consider\n"
. "this file as a single object having multiple parts?\n"), . "this file as a single object having multiple parts?\n"),
L('Multi-part object detected'), wxICON_WARNING | wxYES | wxNO); L('Multi-part object detected'), wxICON_WARNING | wxYES | wxNO);
$model->convert_multipart_object if $dialog->ShowModal() == wxID_YES; $model->convert_multipart_object if $dialog->ShowModal(scalar(@$nozzle_dmrs)) == wxID_YES;
} }
if ($one_by_one) { if ($one_by_one) {
@ -717,7 +717,7 @@ sub load_files {
. "Instead of considering them as multiple objects, should I consider\n" . "Instead of considering them as multiple objects, should I consider\n"
. "these files to represent a single object having multiple parts?\n"), . "these files to represent a single object having multiple parts?\n"),
L('Multi-part object detected'), wxICON_WARNING | wxYES | wxNO); L('Multi-part object detected'), wxICON_WARNING | wxYES | wxNO);
$new_model->convert_multipart_object if $dialog->ShowModal() == wxID_YES; $new_model->convert_multipart_object if $dialog->ShowModal(scalar(@$nozzle_dmrs)) == wxID_YES;
push @obj_idx, $self->load_model_objects(@{$new_model->objects}); push @obj_idx, $self->load_model_objects(@{$new_model->objects});
} }

View file

@ -475,7 +475,8 @@ sub on_btn_split {
my $itemData = $self->get_selection; my $itemData = $self->get_selection;
if ($itemData && $itemData->{type} eq 'volume') { if ($itemData && $itemData->{type} eq 'volume') {
my $volume = $self->{model_object}->volumes->[$itemData->{volume_id}]; my $volume = $self->{model_object}->volumes->[$itemData->{volume_id}];
$self->{parts_changed} = 1 if $volume->split > 1; my $nozzle_dmrs = $self->GetParent->GetParent->GetParent->{config}->get('nozzle_diameter');
$self->{parts_changed} = 1 if $volume->split(scalar(@$nozzle_dmrs)) > 1;
} }
$self->_parts_changed; $self->_parts_changed;

View file

@ -404,7 +404,7 @@ bool Model::looks_like_multipart_object() const
return false; return false;
} }
void Model::convert_multipart_object() void Model::convert_multipart_object(unsigned int max_extruders)
{ {
if (this->objects.empty()) if (this->objects.empty())
return; return;
@ -421,7 +421,7 @@ void Model::convert_multipart_object()
if (new_v != nullptr) if (new_v != nullptr)
{ {
new_v->name = o->name; new_v->name = o->name;
new_v->config.set_deserialize("extruder", get_auto_extruder_id_as_string()); new_v->config.set_deserialize("extruder", get_auto_extruder_id_as_string(max_extruders));
} }
} }
@ -481,20 +481,20 @@ bool Model::fits_print_volume(const FullPrintConfig &config) const
return print_volume.contains(transformed_bounding_box()); return print_volume.contains(transformed_bounding_box());
} }
unsigned int Model::get_auto_extruder_id() unsigned int Model::get_auto_extruder_id(unsigned int max_extruders)
{ {
unsigned int id = s_auto_extruder_id; unsigned int id = s_auto_extruder_id;
if (++s_auto_extruder_id > 4) if (++s_auto_extruder_id > max_extruders)
reset_auto_extruder_id(); reset_auto_extruder_id();
return id; return id;
} }
std::string Model::get_auto_extruder_id_as_string() std::string Model::get_auto_extruder_id_as_string(unsigned int max_extruders)
{ {
char str_extruder[64]; char str_extruder[64];
sprintf(str_extruder, "%ud", get_auto_extruder_id()); sprintf(str_extruder, "%ud", get_auto_extruder_id(max_extruders));
return str_extruder; return str_extruder;
} }
@ -996,7 +996,7 @@ ModelMaterial* ModelVolume::assign_unique_material()
// Split this volume, append the result to the object owning this volume. // Split this volume, append the result to the object owning this volume.
// Return the number of volumes created from this one. // Return the number of volumes created from this one.
// This is useful to assign different materials to different volumes of an object. // This is useful to assign different materials to different volumes of an object.
size_t ModelVolume::split() size_t ModelVolume::split(unsigned int max_extruders)
{ {
TriangleMeshPtrs meshptrs = this->mesh.split(); TriangleMeshPtrs meshptrs = this->mesh.split();
if (meshptrs.size() <= 1) { if (meshptrs.size() <= 1) {
@ -1019,7 +1019,7 @@ size_t ModelVolume::split()
char str_idx[64]; char str_idx[64];
sprintf(str_idx, "_%d", idx + 1); sprintf(str_idx, "_%d", idx + 1);
this->object->volumes[ivolume]->name = name + str_idx; this->object->volumes[ivolume]->name = name + str_idx;
this->object->volumes[ivolume]->config.set_deserialize("extruder", Model::get_auto_extruder_id_as_string()); this->object->volumes[ivolume]->config.set_deserialize("extruder", Model::get_auto_extruder_id_as_string(max_extruders));
delete mesh; delete mesh;
++ idx; ++ idx;
} }

View file

@ -173,8 +173,8 @@ public:
// Split this volume, append the result to the object owning this volume. // Split this volume, append the result to the object owning this volume.
// Return the number of volumes created from this one. // Return the number of volumes created from this one.
// This is useful to assign different materials to different volumes of an object. // This is useful to assign different materials to different volumes of an object.
size_t split(); size_t split(unsigned int max_extruders);
ModelMaterial* assign_unique_material(); ModelMaterial* assign_unique_material();
private: private:
@ -280,7 +280,7 @@ public:
void duplicate_objects_grid(size_t x, size_t y, coordf_t dist); void duplicate_objects_grid(size_t x, size_t y, coordf_t dist);
bool looks_like_multipart_object() const; bool looks_like_multipart_object() const;
void convert_multipart_object(); void convert_multipart_object(unsigned int max_extruders);
// Ensures that the min z of the model is not negative // Ensures that the min z of the model is not negative
void adjust_min_z(); void adjust_min_z();
@ -291,8 +291,8 @@ public:
void print_info() const { for (const ModelObject *o : this->objects) o->print_info(); } void print_info() const { for (const ModelObject *o : this->objects) o->print_info(); }
static unsigned int get_auto_extruder_id(); static unsigned int get_auto_extruder_id(unsigned int max_extruders);
static std::string get_auto_extruder_id_as_string(); static std::string get_auto_extruder_id_as_string(unsigned int max_extruders);
static void reset_auto_extruder_id(); static void reset_auto_extruder_id();
}; };

View file

@ -95,7 +95,7 @@
void duplicate_objects_grid(unsigned int x, unsigned int y, double dist); void duplicate_objects_grid(unsigned int x, unsigned int y, double dist);
bool looks_like_multipart_object() const; bool looks_like_multipart_object() const;
void convert_multipart_object(); void convert_multipart_object(unsigned int max_extruders);
void print_info() const; void print_info() const;
@ -346,7 +346,7 @@ ModelMaterial::attributes()
void set_modifier(bool modifier) void set_modifier(bool modifier)
%code%{ THIS->modifier = modifier; %}; %code%{ THIS->modifier = modifier; %};
size_t split(); size_t split(unsigned int max_extruders);
ModelMaterial* assign_unique_material(); ModelMaterial* assign_unique_material();
}; };