Frix-x / klippain

Generic Klipper configuration for 3D printers
GNU General Public License v3.0
831 stars 219 forks source link

exclude_object seems not working in SuperSlicer #183

Closed coubi64 closed 1 year ago

coubi64 commented 1 year ago

I followed exclude_object documentation and used the "easy way" here: https://github.com/Frix-x/klippain/blob/main/docs/features/adaptive_bed_mesh.md

In OrcaSlicer, with "Label objects" checked (and "Exclude objects" also checked), ADAPTIVE_BED_MESH works perfectly

In SuperSlicer, in expert mode, I only have "Label objects" option (no "Exclude objects" option). When i launch a print, it does a full bed mesh. Adaptive bed mesh is not working.

I tried this start gcode (manually way):

PRINT_START EXTRUDER_TEMP={first_layer_temperature[0]} BED_TEMP={first_layer_bed_temperature[0]} SIZE={first_layer_print_min[0]}_{first_layer_print_min[1]}_{first_layer_print_max[0]}_{first_layer_print_max[1]}

but don't know how to declare for SIZE in macro. Here is my macro PRINT_START:

[gcode_macro PRINT_START] gcode: {% set BED = params.BED_TEMP|int %} {% set EXTRUDER = params.EXTRUDER_TEMP|int %} G90 ; use absolute coordinates M83 ; extruder relative mode M140 S{BED} ; set final bed temp M104 S150 ; set temporary nozzle temp to prevent oozing during homing G4 S10 ; allow partial nozzle warmup G28 ; home all axis ADAPTIVE_BED_MESH G1 Z50 F240 G1 X2 Y10 F3000 M104 S{EXTRUDER} ; set final nozzle temp M190 S{BED} ; wait for bed temp to stabilize M109 S{EXTRUDER} ; wait for nozzle temp to stabilize G1 Z0.28 F240 G92 E0 G1 Y140 E10 F1500 ; prime the nozzle G1 X2.3 F5000 G92 E0 G1 Y10 E10 F1200 ; prime the nozzle G92 E0

Surion79 commented 1 year ago

I don't have OrcaSlicer and for me the adaptive bed mesh works even when i checked label object without wanting it.

coubi64 commented 1 year ago

Solved by using this start gcode in SuperSlicer:

PRINT_START EXTRUDER_TEMP={first_layer_temperature[0]} BED_TEMP={first_layer_bed_temperature[0]} SIZE={first_layer_print_min[0]}_{first_layer_print_min[1]}_{first_layer_print_max[0]}_{first_layer_print_max[1]}

and in my PRINT_START macro in Klipper:

{% set FL_SIZE = params.SIZE|default("0_0_0_0")|string %} ADAPTIVE_BED_MESH SIZE={FL_SIZE}

Surion79 commented 1 year ago

are you using klippain or just the adaptive bed mesh?

coubi64 commented 1 year ago

I'm only using adaptive bed mesh that i discovered in this video: https://www.youtube.com/watch?v=fhfAhPH-y7M

But very interested in what else offers Klippain.

Surion79 commented 1 year ago

so what you want to describe is that the documentation of adaptive bed mesh is missing that info regarding FL_SIZE in print start?

Frix-x commented 1 year ago

Hello, good that you made it work. Honnnestly the SIZE parameter is better as it's more accurate than the extrapolation from the exclude object in many aspects.

However if you absolutely want to make it work with it. There could be a bug in SuperSlicer/Moonraker/Klipper happening when klipper is not seeing any object definitions because EXCLUDE_OBJECT_DEFINE is happening after START_PRINT is being called (directly in the gcode file generated and postprocessed). Indeed, currently, the exclude_object system injects the object definition code after the first line of gcode it sees.

A temporary solution before a proper fix is issued in Moonraker is to can add an M117 dummy gcode command in your slicer's start gcode section before the START_PRINT line.

coubi64 commented 1 year ago

so what you want to describe is that the documentation of adaptive bed mesh is missing that info regarding FL_SIZE in print start?

No. Just the easy way (without parameter FL_SIZE) doesn't work with SuperSlicer

Hello, good that you made it work. Honnnestly the SIZE parameter is better as it's more accurate than the extrapolation from the exclude object in many aspects.

However if you absolutely want to make it work with it. There could be a bug in SuperSlicer/Moonraker/Klipper happening when klipper is not seeing any object definitions because EXCLUDE_OBJECT_DEFINE is happening after START_PRINT is being called (directly in the gcode file generated and postprocessed). Indeed, currently, the exclude_object system injects the object definition code after the first line of gcode it sees.

A temporary solution before a proper fix is issued in Moonraker is to can add an M117 dummy gcode command in your slicer's start gcode section before the START_PRINT line.

I will now use SIZE parameter. Thank you for explanation.