SuperSlicer icon indicating copy to clipboard operation
SuperSlicer copied to clipboard

Pressure advance calibration tool

Open legend069 opened this issue 1 year ago • 14 comments

new pressure advance calibration tool ! - yay :) i've read how orca does this, and i wanted it to do it differently. not a fan of the "custom gcode lines" per_objects_gcode i'm hoping to be a powerfull tool that can be used in later features / calibration tools example;

  • user configures it to add the 'camera snapshot macro' it would take a snapshot per that object
  • user configures it to make the printer 'beep' when it prints that object.
  • configures it to call a klipper macro to change toolhead.

theres a fair few areas where it can be used.

still alot of work to-do!

generates and slices model just fine. few bugs to workout, mainly with CalibrationPressureAdvDialog.cpp model sizing, handling default values, converting float/percent values, hard coding in where retraction/seams would be, having the values be use input choices(not combo boxes) per_objects_gcode later can be used to insert the smooth_time bits aswell.

can i please get help with inserting the per_objects_gcode where it's supposed to be ? 🙏 i'm not entirely sure how the Gcode generation works, and how to get it to process each object/volume and layers would also need to add the "first layer pa"first_pa for the first layer only too(i've noticed during all my PA prints the first layers PA value needs to get set for the first layer speed, otherwise it looks like it has bad layer squish. but it's actually PA doing that.)

-currently generates the model and only writes the PA values at the start of the file(helps verifying it's correct) note: cmake will throw a fit if you don't rebuild the deps 🙃

legend069 avatar Feb 10 '24 14:02 legend069

Thanks, i'll review it tomorrow. Do you want it to be merged on the 2.4, 2.5 or directly into the 2.7 branch? Currently the master is on the 2.4. and master_dev is on the 2.5. Maybe I should just rename them master_24 and master_25 like prusa does.

supermerill avatar Feb 10 '24 17:02 supermerill

Do you want it to be merged on the 2.4, 2.5 or directly into the 2.7 branch?

that's a good question! currently alot of users are just jumping from release to release. so i think 2.7 would be best, just to help with debugging and the devs jumping between versions.

legend069 avatar Feb 11 '24 04:02 legend069

another bug i've found is the models will need to be scaled correctly so the selected extrusion roles widths will work correctly(although this might be already fixed in the 2.7 merge) but then scaling the models will "skew" the model slightly so it will no longer be a "perfect" 90° bend

pretty pictures :) image

to add with the main calibration configure page i would like it to have a " dropdown" row so the user can select the extra calibration tools to make based on selection for "numbers of tests to create" i'm not at all familiar with wxWidgets 😢 Nxwz08Zfai

legend069 avatar Feb 17 '24 11:02 legend069

what do you mean by "dropdown row" ? something like the flow help/details in the width& flow tab in print settings?

supermerill avatar Feb 20 '24 12:02 supermerill

what do you mean by "dropdown row" ? something like the flow help/details in the width& flow tab in print settings?

theres been requests to be able to have several PA calibration tests on a single plate. easiest way i've found is to have the user select them on the main GUI (screenshot below). number of tests to create = 3 would create two separate rows for the user to adjust parameters for. clicking generate would then create 3 PA tests each model would have the parameters for the selected ER roles.

Nxwz08Zfai

legend069 avatar Feb 21 '24 05:02 legend069

what you can do: have a box were you select the number of items. set a callback on this box

    my_combo_box->Bind(wxEVT_COMBOBOX,  [this, my_combo_box](wxCommandEvent&) {
        this->redraw_bars(my_combo_box->GetSelection())
    }, my_combo_box->GetId());

and when the value change: . if more than before, add a row . if less than before, remove a row

I think the best is to create a wxFlexGridSizer to store your table. just set the number of cols. when you add a line, add all item of the row (same number of Add as the col number) when you remove a line, call Remove(GetItemCount()-1) the number of col you set. I think it could work.

supermerill avatar Feb 21 '24 09:02 supermerill

I think the best is to create a wxFlexGridSizer to store your table. just set the number of cols. when you add a line, add all item of the row (same number of Add as the col number) when you remove a line, call Remove(GetItemCount()-1) the number of col you set. I think it could work.

sorry for the delay, i haven't had much spare time recently. i'm not familiar with WxWidgets so this is a real challenge for me. I'm going to need to put aside some more time and mess around with wxFormBuilder to see what would work for the GUI

legend069 avatar Feb 28 '24 08:02 legend069

You can left it to me, but then you'll have to describe exactly the behaviour you need (input, output, drawing, etc..).

supermerill avatar Feb 28 '24 09:02 supermerill

can you make it work for both .4 and .6 noxxles? Orca currently has an issue with the .6 - looks to be a purely mechanical issue with proper line widths not being set in the generator properly.

FoldZero avatar Feb 29 '24 19:02 FoldZero

can you make it work for both .4 and .6 noxxles? Orca currently has an issue with the .6 - looks to be a purely mechanical issue with proper line widths not being set in the generator properly.

thanks for mentioning that. i've changed nozzle sizes and everything breaks 🙃 with my new changes, selecting a 0.4mm nozzle the wall count/ect is good using a 0.8mm nozzle the wall count gets calculated to 6(not my target of 4)the model itself doubles in size, not ideal i know..

but i'll keep messing around with the math to try keep the models the same size+scale for widths for regardless of nozzle_size

legend069 avatar Mar 02 '24 12:03 legend069

You can left it to me, but then you'll have to describe exactly the behaviour you need (input, output, drawing, etc..).

thank you, I should be able to figure out the math/scaling issue to get everything aligned up. due to the scaling/positioning issues, i think it would be 'easier' to create several models for each nozzle size. this way the models don't change size in xy, they will just have different 'thickness'

as for the GUI, it will just need to have that "dropdown box" so users can select other variables for the other PA test to run(so they can run several tests for 1 plate), how it 'looks' doesn't really matter that much. planning on including "smooth_time" with it too, but that's an easy enough change with a bool checkbox and some text changes.

legend069 avatar Mar 02 '24 12:03 legend069

working on it.

  • i'll rework object_gcode so it work, and add region_gcode.
  • i'll fix the acceleration (currently they won't split fills) and put the ironing one into the object. when it's finished, i'll retry your calibration.

supermerill avatar Jun 12 '24 15:06 supermerill

I've merged your latest changes into the /dev branch https://github.com/supermerill/SuperSlicer/commit/03906fa85a89e1eff76b243e0025d140dc081c58 I applied this path of mine:

  • move object & region-based config into the object, so the current main config won't change that much.
  • apply ensure_on_bed() so there isn't any sinking model
  • "update plater" only once. btw, on my win10, i didn't need to resize my window for the field to appear.

supermerill avatar Jul 08 '24 09:07 supermerill

thank you, i think this tool is almost finished, just need more feedback from the users now. i can't think of any other improvements for it.( until i get the PA injection per ER role completed that is. )

move object & region-based config into the object, so the current main config won't change that much.

i was planning on switching this over aswell, but wasn't sure what other configs might need to be changed. (still need more feedback from users)

apply ensure_on_bed() so there isn't any sinking model

might need to adjust the z scale/position for the numbers

btw, on my win10, i didn't need to resize my window for the field to appear.

that was fixed with the void CalibrationPressureAdvDialog::on_row_change() function, i don't think the flashing can be fixed though

legend069 avatar Jul 08 '24 10:07 legend069