mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-31 04:31:15 -06:00 
			
		
		
		
	Make quick_slice() work with new model handling
This commit is contained in:
		
							parent
							
								
									0e8a0ef1ca
								
							
						
					
					
						commit
						5470fbbebc
					
				
					 6 changed files with 32 additions and 25 deletions
				
			
		|  | @ -159,4 +159,8 @@ sub open { | ||||||
|     return CORE::open $$fh, $mode, encode_path($filename); |     return CORE::open $$fh, $mode, encode_path($filename); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | # this package declaration prevents an ugly fatal warning to be emitted when | ||||||
|  | # spawning a new thread | ||||||
|  | package GLUquadricObjPtr; | ||||||
|  | 
 | ||||||
| 1; | 1; | ||||||
|  |  | ||||||
|  | @ -638,7 +638,7 @@ sub export_gcode { | ||||||
|     # select output file |     # select output file | ||||||
|     $self->{output_file} = $main::opt{output}; |     $self->{output_file} = $main::opt{output}; | ||||||
|     { |     { | ||||||
|         $self->{output_file} = $self->skeinpanel->init_print->expanded_output_filepath($self->{output_file}, $self->{objects}[0]->input_file); |         $self->{output_file} = $self->skeinpanel->init_print->expanded_output_filepath($self->{output_file}, $self->{model}->objects->[0]->input_file); | ||||||
|         my $dlg = Wx::FileDialog->new($self, 'Save G-code file as:', Slic3r::GUI->output_path(dirname($self->{output_file})), |         my $dlg = Wx::FileDialog->new($self, 'Save G-code file as:', Slic3r::GUI->output_path(dirname($self->{output_file})), | ||||||
|             basename($self->{output_file}), &Slic3r::GUI::SkeinPanel::FILE_WILDCARDS->{gcode}, wxFD_SAVE); |             basename($self->{output_file}), &Slic3r::GUI::SkeinPanel::FILE_WILDCARDS->{gcode}, wxFD_SAVE); | ||||||
|         if ($dlg->ShowModal != wxID_OK) { |         if ($dlg->ShowModal != wxID_OK) { | ||||||
|  | @ -653,8 +653,6 @@ sub export_gcode { | ||||||
|      |      | ||||||
|     $self->statusbar->StartBusy; |     $self->statusbar->StartBusy; | ||||||
|      |      | ||||||
|     $_->free_model_object for @{$self->{objects}}; |  | ||||||
|      |  | ||||||
|     # It looks like declaring a local $SIG{__WARN__} prevents the ugly |     # It looks like declaring a local $SIG{__WARN__} prevents the ugly | ||||||
|     # "Attempt to free unreferenced scalar" warning... |     # "Attempt to free unreferenced scalar" warning... | ||||||
|     local $SIG{__WARN__} = Slic3r::GUI::warning_catcher($self); |     local $SIG{__WARN__} = Slic3r::GUI::warning_catcher($self); | ||||||
|  | @ -727,6 +725,7 @@ sub export_gcode2 { | ||||||
|         { |         { | ||||||
|             my @warnings = (); |             my @warnings = (); | ||||||
|             local $SIG{__WARN__} = sub { push @warnings, $_[0] }; |             local $SIG{__WARN__} = sub { push @warnings, $_[0] }; | ||||||
|  |              | ||||||
|             my %params = ( |             my %params = ( | ||||||
|                 output_file => $output_file, |                 output_file => $output_file, | ||||||
|                 status_cb   => sub { $params{progressbar}->(@_) }, |                 status_cb   => sub { $params{progressbar}->(@_) }, | ||||||
|  | @ -966,6 +965,7 @@ sub repaint { | ||||||
|         next unless defined $object->thumbnail; |         next unless defined $object->thumbnail; | ||||||
|         for my $instance_idx (0 .. $#{$model_object->instances}) { |         for my $instance_idx (0 .. $#{$model_object->instances}) { | ||||||
|             my $instance = $model_object->instances->[$instance_idx]; |             my $instance = $model_object->instances->[$instance_idx]; | ||||||
|  |             next if !defined $object->transformed_thumbnail; | ||||||
|              |              | ||||||
|             my $thumbnail = $object->transformed_thumbnail->clone;                  # in scaled coordinates |             my $thumbnail = $object->transformed_thumbnail->clone;                  # in scaled coordinates | ||||||
|             $thumbnail->scale(&Slic3r::SCALING_FACTOR * $parent->{scaling_factor}); # in unscaled pixels |             $thumbnail->scale(&Slic3r::SCALING_FACTOR * $parent->{scaling_factor}); # in unscaled pixels | ||||||
|  |  | ||||||
|  | @ -134,7 +134,17 @@ sub quick_slice { | ||||||
|         Slic3r::GUI->save_settings; |         Slic3r::GUI->save_settings; | ||||||
|          |          | ||||||
|         my $print = $self->init_print; |         my $print = $self->init_print; | ||||||
|         $print->add_model(Slic3r::Model->read_from_file($input_file)); |         my $model = Slic3r::Model->read_from_file($input_file); | ||||||
|  |          | ||||||
|  |         if ($model->has_objects_with_no_instances) { | ||||||
|  |             # apply a default position to all objects not having one | ||||||
|  |             foreach my $object (@{$model->objects}) { | ||||||
|  |                 $object->add_instance(offset => [0,0]) if !defined $object->instances; | ||||||
|  |             } | ||||||
|  |             $model->arrange_objects($config); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         $print->add_model_object($_) for @{ $model->objects }; | ||||||
|         $print->validate; |         $print->validate; | ||||||
| 
 | 
 | ||||||
|         # select output file |         # select output file | ||||||
|  |  | ||||||
|  | @ -110,15 +110,9 @@ sub add_model_object { | ||||||
|     my $bb1 = Slic3r::Geometry::BoundingBox->merge(map $_->bounding_box, values %meshes); |     my $bb1 = Slic3r::Geometry::BoundingBox->merge(map $_->bounding_box, values %meshes); | ||||||
|      |      | ||||||
|     foreach my $mesh (values %meshes) { |     foreach my $mesh (values %meshes) { | ||||||
|         # the order of these transformations must be the same as the one used in plater |  | ||||||
|         # to make the object positioning consistent with the visual preview |  | ||||||
|          |  | ||||||
|         # we ignore the per-instance transformations currently and only  |         # we ignore the per-instance transformations currently and only  | ||||||
|         # consider the first one |         # consider the first one | ||||||
|         if ($object->instances && @{$object->instances}) { |         $object->instances->[0]->transform_mesh($mesh); | ||||||
|             $mesh->rotate($object->instances->[0]->rotation, Slic3r::Point->new(0,0)); |  | ||||||
|             $mesh->scale($object->instances->[0]->scaling_factor); |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
|      |      | ||||||
|     # we align object also after transformations so that we only work with positive coordinates |     # we align object also after transformations so that we only work with positive coordinates | ||||||
|  | @ -133,15 +127,12 @@ sub add_model_object { | ||||||
|      |      | ||||||
|     # prepare copies |     # prepare copies | ||||||
|     my @copies = (); |     my @copies = (); | ||||||
|     if ($object->instances) { |  | ||||||
|     foreach my $instance (@{ $object->instances }) { |     foreach my $instance (@{ $object->instances }) { | ||||||
|         push @copies, Slic3r::Point->new( |         push @copies, Slic3r::Point->new( | ||||||
|                 scale($instance->offset->[X] - $bb1->extents->[X][MIN]) |             scale($instance->offset->[X] - $bb1->extents->[X][MIN]), | ||||||
|  |             scale($instance->offset->[Y] - $bb1->extents->[Y][MIN]), | ||||||
|         ); |         ); | ||||||
|     } |     } | ||||||
|     } else { |  | ||||||
|         push @copies, Slic3r::Point->new(0,0); |  | ||||||
|     } |  | ||||||
|      |      | ||||||
|     # initialize print object |     # initialize print object | ||||||
|     push @{$self->objects}, Slic3r::Print::Object->new( |     push @{$self->objects}, Slic3r::Print::Object->new( | ||||||
|  |  | ||||||
|  | @ -191,6 +191,8 @@ TriangleMesh::slice(const std::vector<double> &z, std::vector<Polygons> &layers) | ||||||
|         FUTURE: parallelize slice_facet() and make_loops() |         FUTURE: parallelize slice_facet() and make_loops() | ||||||
|     */ |     */ | ||||||
|      |      | ||||||
|  |     if (!this->repaired) this->repair(); | ||||||
|  |      | ||||||
|     // build a table to map a facet_idx to its three edge indices
 |     // build a table to map a facet_idx to its three edge indices
 | ||||||
|     if (this->stl.v_shared == NULL) stl_generate_shared_vertices(&(this->stl)); |     if (this->stl.v_shared == NULL) stl_generate_shared_vertices(&(this->stl)); | ||||||
|     typedef std::pair<int,int>              t_edge; |     typedef std::pair<int,int>              t_edge; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Alessandro Ranellucci
						Alessandro Ranellucci