Slic3r.pm 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. package Slic3r;
  2. # Copyright holder: Alessandro Ranellucci
  3. # This application is licensed under the GNU Affero General Public License, version 3
  4. use strict;
  5. use warnings;
  6. require v5.10;
  7. our $VERSION = "0.8.5-dev";
  8. our $debug = 0;
  9. sub debugf {
  10. printf @_ if $debug;
  11. }
  12. # load threads before Moo as required by it
  13. our $have_threads;
  14. BEGIN {
  15. use Config;
  16. $have_threads = $Config{useithreads} && eval "use threads; use Thread::Queue; 1";
  17. }
  18. use FindBin;
  19. our $var = "$FindBin::Bin/var";
  20. use Moo 0.091009;
  21. use Slic3r::Config;
  22. use Slic3r::ExPolygon;
  23. use Slic3r::Extruder;
  24. use Slic3r::ExtrusionLoop;
  25. use Slic3r::ExtrusionPath;
  26. use Slic3r::ExtrusionPath::Arc;
  27. use Slic3r::ExtrusionPath::Collection;
  28. use Slic3r::Fill;
  29. use Slic3r::Flow;
  30. use Slic3r::Format::AMF;
  31. use Slic3r::Format::OBJ;
  32. use Slic3r::Format::STL;
  33. use Slic3r::GCode;
  34. use Slic3r::Geometry qw(PI);
  35. use Slic3r::Layer;
  36. use Slic3r::Line;
  37. use Slic3r::Point;
  38. use Slic3r::Polygon;
  39. use Slic3r::Polyline;
  40. use Slic3r::Print;
  41. use Slic3r::Print::Object;
  42. use Slic3r::Surface;
  43. use Slic3r::TriangleMesh;
  44. eval "use Slic3r::Build";
  45. our $threads = $have_threads ? 2 : 1;
  46. # miscellaneous options
  47. our $notes = '';
  48. # output options
  49. our $output_filename_format = '[input_filename_base].gcode';
  50. our $post_process = [];
  51. # printer options
  52. our $print_center = [100,100]; # object will be centered around this point
  53. our $z_offset = 0;
  54. our $gcode_flavor = 'reprap';
  55. our $use_relative_e_distances = 0;
  56. our $extrusion_axis = 'E';
  57. our $gcode_arcs = 0;
  58. our $g0 = 0;
  59. our $gcode_comments = 0;
  60. # filament options
  61. our $bed_temperature = 0;
  62. our $first_layer_bed_temperature;
  63. # extruders
  64. our $extruders = [];
  65. our $nozzle_diameter = [0.5];
  66. our $filament_diameter = [3]; # mm
  67. our $extrusion_multiplier = [1];
  68. our $temperature = [200];
  69. our $first_layer_temperature= [];
  70. # extruder mapping (1-based indexes)
  71. our $perimeters_extruder = 1;
  72. our $infill_extruder = 1;
  73. our $support_material_extruder = 1;
  74. # speed options
  75. our $travel_speed = 130; # mm/s
  76. our $perimeter_speed = 30; # mm/s
  77. our $small_perimeter_speed = 30; # mm/s or %
  78. our $external_perimeter_speed = '100%'; # mm/s or %
  79. our $infill_speed = 60; # mm/s
  80. our $solid_infill_speed = 60; # mm/s or %
  81. our $top_solid_infill_speed = 50; # mm/s or %
  82. our $bridge_speed = 60; # mm/s
  83. our $first_layer_speed = '30%'; # mm/s or %
  84. # acceleration options
  85. our $acceleration = 0;
  86. our $perimeter_acceleration = 25; # mm/s^2
  87. our $infill_acceleration = 50; # mm/s^2
  88. # accuracy options
  89. our $scaling_factor = 0.000001;
  90. our $resolution = 0.01;
  91. our $small_perimeter_length = (6.5 / $scaling_factor)*2*PI;
  92. our $layer_height = 0.4;
  93. our $first_layer_height = '100%'; # mm or %
  94. our $_first_layer_height = undef; # mm (computed)
  95. our $infill_every_layers = 1;
  96. # flow options
  97. our $extrusion_width = 0;
  98. our $first_layer_extrusion_width = 0;
  99. our $perimeters_extrusion_width = 0;
  100. our $infill_extrusion_width = 0;
  101. our $support_material_extrusion_width = 0;
  102. our $bridge_flow_ratio = 1;
  103. our $overlap_factor = 0.5;
  104. our $flow;
  105. our $first_layer_flow;
  106. our $perimeters_flow;
  107. our $infill_flow;
  108. our $support_material_flow;
  109. # print options
  110. our $perimeters = 3;
  111. our $solid_layers = 3;
  112. our $fill_pattern = 'rectilinear';
  113. our $solid_fill_pattern = 'rectilinear';
  114. our $fill_density = 0.4; # 1 = 100%
  115. our $fill_angle = 45;
  116. our $extra_perimeters = 1;
  117. our $randomize_start = 1;
  118. our $support_material = 0;
  119. our $support_material_threshold = 45;
  120. our $support_material_pattern = 'rectilinear';
  121. our $support_material_spacing = 2.5;
  122. our $support_material_angle = 0;
  123. our $start_gcode = "G28 ; home all axes";
  124. our $end_gcode = <<"END";
  125. M104 S0 ; turn off temperature
  126. G28 X0 ; home X axis
  127. M84 ; disable motors
  128. END
  129. our $layer_gcode = '';
  130. # retraction options
  131. our $retract_length = 1; # mm
  132. our $retract_restart_extra = 0; # mm
  133. our $retract_speed = 30; # mm/s
  134. our $retract_before_travel = 2; # mm
  135. our $retract_lift = 0; # mm
  136. # cooling options
  137. our $cooling = 0;
  138. our $min_fan_speed = 35;
  139. our $max_fan_speed = 100;
  140. our $bridge_fan_speed = 100;
  141. our $fan_below_layer_time = 60;
  142. our $slowdown_below_layer_time = 15;
  143. our $min_print_speed = 10;
  144. our $disable_fan_first_layers = 1;
  145. our $fan_always_on = 0;
  146. # skirt/brim options
  147. our $skirts = 1;
  148. our $skirt_distance = 6; # mm
  149. our $skirt_height = 1; # layers
  150. our $brim_width = 0; # mm
  151. # transform options
  152. our $scale = 1;
  153. our $rotate = 0;
  154. our $duplicate_mode = 'no';
  155. our $duplicate = 1;
  156. our $bed_size = [200,200];
  157. our $duplicate_grid = [1,1];
  158. our $duplicate_distance = 6; # mm
  159. # sequential printing
  160. our $complete_objects = 0;
  161. our $extruder_clearance_radius = 20; # mm
  162. our $extruder_clearance_height = 20; # mm
  163. sub parallelize {
  164. my %params = @_;
  165. if (!$params{disable} && $Slic3r::have_threads && $Slic3r::threads > 1) {
  166. my $q = Thread::Queue->new;
  167. $q->enqueue(@{ $params{items} }, (map undef, 1..$Slic3r::threads));
  168. my $thread_cb = sub { $params{thread_cb}->($q) };
  169. foreach my $th (map threads->create($thread_cb), 1..$Slic3r::threads) {
  170. $params{collect_cb}->($th->join);
  171. }
  172. } else {
  173. $params{no_threads_cb}->();
  174. }
  175. }
  176. 1;