Replies: 7 comments 9 replies
-
I'm not the maintainer, but Klipper Adaptive Meshing and Purging has something similar for it's pre-print purge/draw macro, as well as something for probe positions. Having tried both KAMP and this, I've never had any issues with this, but KAMP gave me a few problems, mainly causing errors when the purge line attempted to go off the bed if I set the purge line too long. Plus, I prefer this setup's back-and-forth purge block over KAMP's one big thick line approach, and KAMP's voron logo purge seemed too complicated to set up. In fact, I was astonished by how well klipper-macro's purge blocks were at detaching PETG strings that had oozed out when my nozzle was heating up. It reliably leaves those nasty strings in the purge block. The traditional "line purge" often couldn't do that, skirts often couldn't do that, and KAMP's purges often couldn't do that. That said, it probably wouldn't be impossible to add a bit of randomness to the purge location. Unless the purge block is already close to the edge of the bed, Or are you also suggesting that you randomly move the print area for the whole print? Is that kind of thing even possible? |
Beta Was this translation helpful? Give feedback.
-
Yes randomly move the print area for the whole print, I'm already using this system for months and it's really nice as the bed is wearing uniformly.
area_min is coming from a parameter like your MESH_MIN and MESH_MAX
then after macro triggered the bed mesh routine it set a gcode offset
Obviously you have to handle this offset when you do a pause or filament change otherwise you can go out of bonds. |
Beta Was this translation helpful? Give feedback.
-
It's an interesting idea and I had been thinking about it, but the first hurdle is that MESH_MIN and MESH_MAX won't work, since they bound only the first layer. That means that any other layer can end up printing outside those bounds. What you need is a union of MESH_MIN and MESH_MAX with the bounding box for the full height of the model. There is the preprocess_cancellation script for object bounds, so you can trivially extract a bounding box from the exclude_object.objects entries. However, in my experience it doesn't generate a bounding box that's accurate enough for this kind of use (it's really intended only for graphical presentation). I do have a Prusa Slicer patch I've been meaning to clean up and post as a PR for exclude_object. Since it uses Prusa Slicer's internal layer representation it generates an accurate bounding polygon for each object. I hadn't bothered to post a PR before because Prusa Slicer didn't explicitly support Klipper, but now that they have a Klipper gcode mode I could just make EXCLUDE_OBJECT_DEFINE just work automatically when "Label objects" is enabled. It's not a difficult PR; probably only a few hours of work to polish off. But, even assuming Prusa Slicer accepts the PR, it would be at least a full release out, which means 6-12 months before it's available. And honestly, I haven't had great luck with Prusa Slicer accepting PRs. Sorry, this is a bit rambly, but I've been thinking about this for a while and it seemed like a good place to collect my thoughts. |
Beta Was this translation helpful? Give feedback.
-
I was looking at your code for implementing this function but I don't understand if the purge routine is checking if it can go out of the bed if the print size is nearly equal or bigger the platform. |
Beta Was this translation helpful? Give feedback.
-
I decided to implement the whole thing over the weekend. I have it up on the dev branch, and it seems to work correctly. You can try it out if you like. |
Beta Was this translation helpful? Give feedback.
-
I pushed the implementation to main this morning. The config variables are here: Lines 82 to 85 in a7c928a The documentation for the two configuration options explains the additional configuration that's needed to make it work. |
Beta Was this translation helpful? Give feedback.
-
Hello Justin, However when i encounter a power loss or other issue causing a firmware reset, i am not able to resume the print after this forced firmware resume since no info is saved on the applied offset. I would like to be able to combine your work with the power loss recovery described in the macro of Travis90x : https://travis90x.altervista.org/klipper-power-loss-recovery-3d-print-resume/ . Would it be possible that your macro saves the offset in the start macro and clears it in the end macro and before applying the offset checks if an offset was saved. If an offset was saved and not cleared it would reuse the saved offset Thanks in advance. |
Beta Was this translation helpful? Give feedback.
-
When you print many identical pieces in the same bed position, the bed can wear very fast.
I added to my klipper START_PRINT macro a system for randomly move the print area so it's not always printed in the same place.
As I'm interested in using also this set of Macros, I need to rewrite the whole thing to make it compatible with your code.
If it's interesting I can share the code I'm using now as a base for implementing the function.
Beta Was this translation helpful? Give feedback.
All reactions