Some fixes after the recent Model refactoring

This commit is contained in:
Alessandro Ranellucci 2014-05-10 16:59:17 +02:00
parent 65b7d27def
commit 27c73f5983
6 changed files with 37 additions and 9 deletions

View File

@ -403,7 +403,7 @@ sub load_model_objects {
); );
push @obj_idx, $#{ $self->{objects} }; push @obj_idx, $#{ $self->{objects} };
if (!defined $model_object->instances) { if ($model_object->instances_count == 0) {
# if object has no defined position(s) we need to rearrange everything after loading # if object has no defined position(s) we need to rearrange everything after loading
$need_arrange = 1; $need_arrange = 1;

View File

@ -104,8 +104,9 @@ sub apply_config {
if ($rearrange_regions) { if ($rearrange_regions) {
# the current subdivision of regions does not make sense anymore. # the current subdivision of regions does not make sense anymore.
# we need to remove all objects and re-add them # we need to remove all objects and re-add them
my @model_objects = map $_->model_object, @{$self->objects};
$self->clear_objects; $self->clear_objects;
$self->add_model_object($_->model_object) for @{$self->objects}; $self->add_model_object($_) for @model_objects;
} }
} }
@ -137,7 +138,7 @@ sub add_model_object {
$config->apply_dynamic($object_config); $config->apply_dynamic($object_config);
if (defined $volume->material_id) { if (defined $volume->material_id) {
my $material_config = $object->model->get_material($volume->material_id)->config->clone; my $material_config = $volume->material->config->clone;
$material_config->normalize; $material_config->normalize;
$config->apply_dynamic($material_config); $config->apply_dynamic($material_config);
} }

View File

@ -321,8 +321,31 @@ ModelVolume::ModelVolume(ModelObject* object, const TriangleMesh &mesh)
{} {}
ModelVolume::ModelVolume(ModelObject* object, const ModelVolume &other) ModelVolume::ModelVolume(ModelObject* object, const ModelVolume &other)
: object(object), material_id(other.material_id), mesh(other.mesh), modifier(other.modifier) : object(object), mesh(other.mesh), modifier(other.modifier)
{} {
this->material_id(other.material_id());
}
t_model_material_id
ModelVolume::material_id() const
{
return this->_material_id;
}
void
ModelVolume::material_id(t_model_material_id material_id)
{
this->_material_id = material_id;
// ensure this->_material_id references an existing material
(void)this->object->get_model()->add_material(material_id);
}
ModelMaterial*
ModelVolume::material() const
{
return this->object->get_model()->get_material(this->_material_id);
}
#ifdef SLIC3RXS #ifdef SLIC3RXS
REGISTER_CLASS(ModelVolume, "Model::Volume"); REGISTER_CLASS(ModelVolume, "Model::Volume");

View File

@ -138,14 +138,17 @@ class ModelVolume
{ {
friend class ModelObject; friend class ModelObject;
public: public:
t_model_material_id material_id;
TriangleMesh mesh; TriangleMesh mesh;
bool modifier; bool modifier;
ModelObject* get_object() const { return this->object; }; ModelObject* get_object() const { return this->object; };
t_model_material_id material_id() const;
void material_id(t_model_material_id material_id);
ModelMaterial* material() const;
private: private:
ModelObject* object; ModelObject* object;
t_model_material_id _material_id;
ModelVolume(ModelObject *object, const TriangleMesh &mesh); ModelVolume(ModelObject *object, const TriangleMesh &mesh);
ModelVolume(ModelObject *object, const ModelVolume &other); ModelVolume(ModelObject *object, const ModelVolume &other);

View File

@ -162,10 +162,10 @@ ModelMaterial::attributes()
Ref<ModelObject> object() Ref<ModelObject> object()
%code%{ RETVAL = THIS->get_object(); %}; %code%{ RETVAL = THIS->get_object(); %};
t_model_material_id material_id() t_model_material_id material_id();
%code%{ RETVAL = THIS->material_id; %};
void set_material_id(t_model_material_id material_id) void set_material_id(t_model_material_id material_id)
%code%{ THIS->material_id = material_id; %}; %code%{ THIS->material_id(material_id); %};
Ref<ModelMaterial> material();
Ref<TriangleMesh> mesh() Ref<TriangleMesh> mesh()
%code%{ RETVAL = &THIS->mesh; %}; %code%{ RETVAL = &THIS->mesh; %};

View File

@ -64,6 +64,7 @@ Point::coincides_with(point_sv)
%code{% RETVAL = THIS->x; %}; %code{% RETVAL = THIS->x; %};
double y() double y()
%code{% RETVAL = THIS->y; %}; %code{% RETVAL = THIS->y; %};
void translate(double x, double y);
}; };
%name{Slic3r::Pointf3} class Pointf3 { %name{Slic3r::Pointf3} class Pointf3 {