-
-
Notifications
You must be signed in to change notification settings - Fork 522
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Exclude speed ranges (beta release) #4381
base: master
Are you sure you want to change the base?
Exclude speed ranges (beta release) #4381
Conversation
By default, the speed is modified to the low end of the excluded range.
Multiple ranges are allowed, with no overlaps between them.
- Throw exception if input is invalid - Show exception to user on GUI
Great work! One thing that comes to my mind after looking at this: Could other print moves be included as well? Maybe for an advanced version this might be user configurable or a drop down like "only adjust external perimeters / all perimeters / only infill / all print moves"? |
Thanks a lot. Yes we can apply this to other moves as well. It’s up to us users to decide where this would be beneficial. |
Just for reference, the full version of this, with minimum layer time taking into account this filter, is being worked on. Not much left but it took some time because I had to rewrite some existing stuff due to technical reasons. |
Great work, thank you for the effort, looking forward to test it! |
cosmetic change:
now you don't need the split_user_input_ranges_to_individual_strings, just get the first and second value (after verifying they exists) |
Yes, I think also it should be applied to all moves. What is your strategy for the minimum layer time? As it's a post-processing, i guess if it slow something down into the forbidden band, it slow it down to the min? |
Hey Meril. |
Alright. Here is the diff, branch is this one. I rewrote the cooling algorithm. Modifying the existing one does not make sense as it hardly extendable and not easy to maintain at all. The new algorithm (NewCoolingBuffer) treats all lines as a collection. It sums their length and calculates the speed they ALL should have in order to reach the minimum layer time. That's what the existing one does as well. If we want to apply the filter in more extrusion types we have to rewrite the algorithm, but that's not too difficult due to my code structure. We have to touch but one function. With a day of thinking I can go through some ideas I had on this. But my idea for now was to do shorter releases to get feedback from users and developers. External perimeters only could be one such release. Alternatively, we can apply a stupid easy filter after the original algorithm. This would work for all extrusion types with ~10 lines of effort. Check revision b449e6e which does just that. Working examples.
Notes:
|
I'll look this week-end.
note: if you move/update your branch |
I'm not doing that yet because we might decide to not include those changes, so I'm keeping this branch clean. I will squash those commits anyways, that was my original plan. Let me know what you think about the new algorithm. |
Hello, fellow 3D printing people
I have implemented the first version of the feature requested in #4105. This version allows the slicer to detect speeds for external perimeters and overhang perimeters which fall into user specified excluded speed ranges, and adjust them according to one of the following options in the dropdown menu:
Since this is the first version, the only speeds checked are the ones entered by the user in the "speed" section. Those are
The minimum layer time feature is applied after this feature takes place, and still works as it should. The next version of this feature will work alongside the minimum layer time. I am working on another project in parallel and have really under-powered equipment at the moment, so I would need about a week to start working on the next version.
Now that the GUI and backend frameworks are in place, the changes would be minimal for the next version. I mostly know what needs to be done already. I hope the code is clean enough, I also made the initialization only run once per slice to avoid parsing the input all the time.
An open question for the readers since I cannot print at the moment:
The user can enter as many ranges as they wish, and the order of said ranges matters not. The ranges' format is checked, as well as their correctness. The second bound must be higher than the first bound, and the ranges must not overlap. An error is displayed on each case, with an example shown below.
My apologies in advance if anything is out of place, my current equipment is too dodgy to allow me to get any more work done at the moment.