cooling.t 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. use Test::More;
  2. use strict;
  3. use warnings;
  4. plan tests => 8;
  5. BEGIN {
  6. use FindBin;
  7. use lib "$FindBin::Bin/../lib";
  8. }
  9. use Slic3r;
  10. sub buffer {
  11. my $config = shift || Slic3r::Config->new_from_defaults;
  12. my $buffer = Slic3r::GCode::CoolingBuffer->new(
  13. config => $config,
  14. gcodegen => Slic3r::GCode->new(config => $config, layer_count => 10, extruders => []),
  15. );
  16. return $buffer;
  17. }
  18. my $config = Slic3r::Config->new_from_defaults;
  19. $config->set('disable_fan_first_layers', 0);
  20. {
  21. my $buffer = buffer($config);
  22. $buffer->gcodegen->elapsed_time($buffer->config->slowdown_below_layer_time + 1);
  23. my $gcode = $buffer->append('G1 X100 E1 F3000', 0, 0, 0.4) . $buffer->flush;
  24. like $gcode, qr/F3000/, 'speed is not altered when elapsed time is greater than slowdown threshold';
  25. }
  26. {
  27. my $buffer = buffer($config);
  28. $buffer->gcodegen->elapsed_time($buffer->config->slowdown_below_layer_time - 1);
  29. my $gcode = $buffer->append("G1 X50 F2500\nG1 X100 E1 F3000\nG1 E4 F400", 0, 0, 0.4) . $buffer->flush;
  30. unlike $gcode, qr/F3000/, 'speed is altered when elapsed time is lower than slowdown threshold';
  31. like $gcode, qr/F2500/, 'speed is not altered for travel moves';
  32. like $gcode, qr/F400/, 'speed is not altered for extruder-only moves';
  33. }
  34. {
  35. my $buffer = buffer($config);
  36. $buffer->gcodegen->elapsed_time($buffer->config->fan_below_layer_time + 1);
  37. my $gcode = $buffer->append('G1 X100 E1 F3000', 0, 0, 0.4) . $buffer->flush;
  38. unlike $gcode, qr/M106/, 'fan is not activated when elapsed time is greater than fan threshold';
  39. }
  40. {
  41. my $buffer = buffer($config);
  42. my $gcode = "";
  43. for my $obj_id (0 .. 1) {
  44. # use an elapsed time which is < the slowdown threshold but greater than it when summed twice
  45. $buffer->gcodegen->elapsed_time($buffer->config->slowdown_below_layer_time - 1);
  46. $gcode .= $buffer->append("G1 X100 E1 F3000\n", $obj_id, 0, 0.4);
  47. }
  48. $gcode .= $buffer->flush;
  49. like $gcode, qr/F3000/, 'slowdown is computed on all objects printing at same Z';
  50. }
  51. {
  52. my $buffer = buffer($config);
  53. my $gcode = "";
  54. for my $layer_id (0 .. 1) {
  55. for my $obj_id (0 .. 1) {
  56. # use an elapsed time which is < the threshold but greater than it when summed twice
  57. $buffer->gcodegen->elapsed_time($buffer->config->fan_below_layer_time - 1);
  58. $gcode .= $buffer->append("G1 X100 E1 F3000\n", $obj_id, $layer_id, 0.4 + 0.4*$layer_id + 0.1*$obj_id); # print same layer at distinct heights
  59. }
  60. }
  61. $gcode .= $buffer->flush;
  62. unlike $gcode, qr/M106/, 'fan activation is computed on all objects printing at different Z';
  63. }
  64. {
  65. my $buffer = buffer($config);
  66. my $gcode = "";
  67. for my $layer_id (0 .. 1) {
  68. for my $obj_id (0 .. 1) {
  69. # use an elapsed time which is < the threshold even when summed twice
  70. $buffer->gcodegen->elapsed_time($buffer->config->fan_below_layer_time/2 - 1);
  71. $gcode .= $buffer->append("G1 X100 E1 F3000\n", $obj_id, $layer_id, 0.4 + 0.4*$layer_id + 0.1*$obj_id); # print same layer at distinct heights
  72. }
  73. }
  74. $gcode .= $buffer->flush;
  75. like $gcode, qr/M106/, 'fan activation is computed on all objects printing at different Z';
  76. }
  77. __END__