Git Product home page Git Product logo

autotowersgenerator's People

Contributors

5axes avatar aubsuk avatar crobertsbmw avatar hello1024 avatar hugonijmek avatar kartchnb avatar piotrberlowski avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

autotowersgenerator's Issues

Linear Advance KFactor Tower

Loving this plugin for easily producing calibration towers. One suggestion is to add support for a kfactor tower.

Similar to the temperature tower in shape, but increasing the linear advance kfactor from 0-2 at 0.2 increments. Similar to how the Marlin test pattern operates (https://marlinfw.org/tools/lin_advance/k-factor.html). There is also a document on doing this using the Calibration Shapes plugin: https://github.com/5axes/Calibration-Shapes/wiki/Linear-Pressure-Advance-Tower

This would have a requirement on the Linear Advance Settings extension in Cura though so I'm not sure if that's a deal breaker or not. https://marketplace.ultimaker.com/app/cura/plugins/fieldofview/LinearAdvanceSettingPlugin

Gcode extra period. Klipper Unable to parse move 'G1 F1015.2.4 ... changing speed

!! Unable to parse move 'G1 F1015.2.4 X116.392 Y122.899 E94.82338 ; AutoTowersGenerator changing speed from 42.3mm/s (2538.0mm/m) to 16.9mm/s (1015.2mm/m)'

Speed tower 20-100 stalls immediately when trying to change speed for the first time. Im guessing it has to do with the random extra period in F?

Ender 3 V2 with newest versions of Klipper and Fluidd.
Autotowersgenerator Version 2.4.0 and Cura 5.1.1
Cura.log, klippy.log and the offending .gcode here. Line 1017 in gcode.
https://github.com/jaakko000/Autotowersgenerror

Let me know what else you need. Works great other than this error occasionally. Thanks for the great plugin mate.

Doesn't work

Hello, thx for your plugin but doesn't work for me and other 2 my friends.

With Cura 5.1.0 and 5.1.1 doesn't work, for example the speed test or flow test doesn't change, i check in preview section and gcode, nothing change. Can you tell me if i do something wrong? thx

AutoTowersGenerator Leaves gcode residue in subsequent stl gcode

This has been confusing me for a few days as I see temperatures that are different than what I have set in cura.
This is the scenario.
Today I did a custom Temp Tower for PETG of 250 to 235 Celsius stepping -5 and then printed this temp tower.
Next after that was finished in Cura I select + D to clear the build plate.
I then added a new different stl and set the temp to 245.
I start the new print.
Later in looking at Octoprint I see that the temp is set to 250 in the printer.

So, I look at the gcode of this new print and find autotower gcode mixed in with my code and sure enough an M104 to set the temp to 250 vice 245.

I have noticed this before and kind of shrugged it off to operator error.
But I don't think so.
For some reason this extension is leaving code behind after clearing the build plate.

See attached for the stl with the autotemp tower code embedded in it.

CE3E3V2 Linear_Rail_Bracket_v1_3 Hodor PETG lw 0.36mm lh 0.2mm if 75% ext1 245C bed 80C.zip

No Change in the Towers between different Tasks

Hi

im Installed your Plugin and tried to use the Towers to Calibrate my ne Ender3-V2

I have found issues in the Plugin.

If i try Retract Distance, everything is fine, but if i want to do Retract Speed an i try maybe 10-60mm SPEED, it ALWAYS Changes the Distance.
Also if i try CustomTower and Select Speed, it always only change the distance, but dont touch the Retract-speed.

Same with Speed Tower.
Tower Speed 20- 100 works great, but other changes speed from up to 1000 in big steps
I don´t think the Printer is working at 1000mm/s ;)

i first assumed that is misbehavier and should be accelartion, but even with custom accelartion tower, it only changes the speed.
didn´t write or change acc in gcode.

Temp-Tower petg worked fine!

i also looked and tried to compared the gcode files, as i tried some custom towers in diff versions.
It always puts the same in gcode, only changes my values, but not all the Type´s.

i dont know if i´m the only with this issues... or if maybe is something wrong here?!

Cura is 5.2.1, Plugin Newly Installed in Cura
Also the Laptop is new, win11, only fusion, cura , prusa and office installed

i hope i explained it understandable (no native speaker) ;-)

i addded some of the gcode´s that cura had done.

AutoTowers.zip

And here some searched code snipes from notepad++

D:\3D` Objects\3D Objects\PETG\Neuer Ordner\PETG_MEINS02PETG_Preset_Speed_Tower_(Speed)_Speed_50-150.gcode (13 Treffer)
Zeile 12: ;Post-processed by the AutoTowersGenerator plugin
Zeile 675: M220 S50 ; AutoTowersGenerator setting speed to 50mm/s
Zeile 676: M117 SPD 50mm/s ; AutoTowersGenerator added
Zeile 5942: M220 S200 ; AutoTowersGenerator setting speed to 200mm/s
Zeile 5943: M117 SPD 200mm/s ; AutoTowersGenerator added
Zeile 10695: M220 S350 ; AutoTowersGenerator setting speed to 350mm/s
Zeile 10696: M117 SPD 350mm/s ; AutoTowersGenerator added
Zeile 16053: M220 S500 ; AutoTowersGenerator setting speed to 500mm/s
Zeile 16054: M117 SPD 500mm/s ; AutoTowersGenerator added
Zeile 20777: M220 S650 ; AutoTowersGenerator setting speed to 650mm/s
Zeile 20778: M117 SPD 650mm/s ; AutoTowersGenerator added
Zeile 24748: M220 S800 ; AutoTowersGenerator setting speed to 800mm/s
Zeile 24749: M117 SPD 800mm/s ; AutoTowersGenerator added

D:\3D Objects\3D Objects\PETG\Neuer Ordner\PETG_MEINS02PETG_Preset_Speed_Tower_(Speed)_Speed_20-100.gcode (11 Treffer)
Zeile 12: ;Post-processed by the AutoTowersGenerator plugin
Zeile 679: M220 S20 ; AutoTowersGenerator setting speed to 20mm/s
Zeile 680: M117 SPD 20mm/s ; AutoTowersGenerator added
Zeile 5956: M220 S40 ; AutoTowersGenerator setting speed to 40mm/s
Zeile 5957: M117 SPD 40mm/s ; AutoTowersGenerator added
Zeile 10840: M220 S60 ; AutoTowersGenerator setting speed to 60mm/s
Zeile 10841: M117 SPD 60mm/s ; AutoTowersGenerator added
Zeile 16178: M220 S80 ; AutoTowersGenerator setting speed to 80mm/s
Zeile 16179: M117 SPD 80mm/s ; AutoTowersGenerator added
Zeile 20872: M220 S100 ; AutoTowersGenerator setting speed to 100mm/s
Zeile 20873: M117 SPD 100mm/s ; AutoTowersGenerator added

Should be 100-200mm/s in 20 Steps BUT is up to 1100mm/s **
D:\3D Objects\3D Objects\PETG\Neuer Ordner\PETG_MEINS02PETG_Preset_Speed_Tower_(Speed)_
Speed_100-200**.gcode (13 Treffer)
Zeile 12: ;Post-processed by the AutoTowersGenerator plugin
Zeile 679: M220 S100 ; AutoTowersGenerator setting speed to 100mm/s
Zeile 680: M117 SPD 100mm/s ; AutoTowersGenerator added
Zeile 6222: M220 S300 ; AutoTowersGenerator setting speed to 300mm/s
Zeile 6223: M117 SPD 300mm/s ; AutoTowersGenerator added
Zeile 11267: M220 S500 ; AutoTowersGenerator setting speed to 500mm/s
Zeile 11268: M117 SPD 500mm/s ; AutoTowersGenerator added
Zeile 16758: M220 S700 ; AutoTowersGenerator setting speed to 700mm/s
Zeile 16759: M117 SPD 700mm/s ; AutoTowersGenerator added
Zeile 21626: M220 S900 ; AutoTowersGenerator setting speed to 900mm/s
Zeile 21627: M117 SPD 900mm/s ; AutoTowersGenerator added
Zeile 25647: M220 S1100 ; AutoTowersGenerator setting speed to 1100mm/s
Zeile 25648: M117 SPD 1100mm/s ; AutoTowersGenerator added

Should be Accel 100-1000mm/s in 150 Steps BUT is ALWAYS only Speed, not Accel **
D:\3D Objects\3D Objects\PETG\Neuer Ordner\PETG_MEINS02PETG_Auto-Generated_Speed_Tower__
(Acceleration)100.0-1000.0x150.0**.gcode (15 Treffer)
Zeile 12: ;Post-processed by the AutoTowersGenerator plugin
Zeile 680: M204 S100 ; AutoTowersGenerator setting acceleration to 100mm/s/s
Zeile 681: M117 ACC 100mm/s/s ; AutoTowersGenerator added
Zeile 6742: M204 S250 ; AutoTowersGenerator setting acceleration to 250mm/s/s
Zeile 6743: M117 ACC S250mm/s/s ; AutoTowersGenerator added
Zeile 12470: M204 S400 ; AutoTowersGenerator setting acceleration to 400mm/s/s
Zeile 12471: M117 ACC S400mm/s/s ; AutoTowersGenerator added
Zeile 18152: M204 S550 ; AutoTowersGenerator setting acceleration to 550mm/s/s
Zeile 18153: M117 ACC S550mm/s/s ; AutoTowersGenerator added
Zeile 22299: M204 S700 ; AutoTowersGenerator setting acceleration to 700mm/s/s
Zeile 22300: M117 ACC S700mm/s/s ; AutoTowersGenerator added
Zeile 26334: M204 S850 ; AutoTowersGenerator setting acceleration to 850mm/s/s
Zeile 26335: M117 ACC S850mm/s/s ; AutoTowersGenerator added
Zeile 30414: M204 S1000 ; AutoTowersGenerator setting acceleration to 1000mm/s/s
Zeile 30415: M117 ACC S1000mm/s/s ; AutoTowersGenerator added

Use Job instead of Thread

In this part of the plugin you spawn your own thread (

if os.path.isfile(stlFilePath) == False:
# Since it can take a while to generate the STL file, do it in a separate thread and allow the GUI to remain responsive
openScadThread = threading.Thread(target = lambda: self._openScadInterface.GenerateStl(openScadFilePath, openScadParameters, stlFilePath))
openScadThread.start()
while (openScadThread.isAlive()):
CuraApplication.getInstance().processEvents()
# Make sure the STL file was generated
if os.path.isfile(stlFilePath) == False:
Logger.log('e', f'Failed to generate {stlFilePath} from {openScadFilename}')
Message(f'Failed to run OpenSCAD - Make sure the OpenSCAD path is set correctly\nPath is "{self._openScadInterface.OpenScadPath}"', title = self._pluginName).show()
self._waitDialog.hide()
return
# While we're here, keep the STL cache at the requested size
self._cullCachedStls()
) that waits for the process of creating a temp tower to be completed.

In Uranium there is already a convenience class that handles all of this for you (https://github.com/Ultimaker/Uranium/blob/master/UM/Job.py). There are a few examples that show how to use jobs in various plugins. I use them in my own plugins as well; https://github.com/nallath/CuraOrientationPlugin/blob/master/CalculateOrientationJob.py

Your current solution is fine ofc, but you can save yourself some headaches by re-using what is already there :)

Speed tower (Travel Speed) speed units

image

At "80" the printer is printing at 240mm/s
Been calibrating my printer with the latest release and surprised how Speed Tower measured speed.

I expected the measurements to be in mm/s but what I am observing in real life is increase using percentages.
100% seems to be set at 300mm/s and because the increase seems to happen in percentages, it would be great to know that beforehand.
Maybe a simple FAQ for how towers function?

Retraction Speed Tower

Hi I have been trying to dial in my retraction but for some reason the speed script does not change speed for me but rather distance.

I have 10-50 so set starting value at 10 and value increments to 10 as I would like to increase it by 10mm/s every block.

What ends up happening is I have a very long retraction distance by the second block.

[bug] The generated stl can't be saved in the temporary location

image

Came across this bug when reviewing and testing your plugin from our contribution portal.

The issue occurs at least on Linux and it probably happens because you're not using tempfile.TemporaryDirectory() as a context.

self._temporaryFolder = tempfile.TemporaryDirectory()

See the description in the Python documentation https://docs.python.org/3/library/tempfile.html:

On completion of the context or destruction of the temporary directory object, the newly created temporary directory and all its contents are removed from the filesystem.

Custom flow and retract tower in reverse?

Is it possible that the custom retract and flow tower are not in line with the labels? When I do a custom retract tower from 1mm to 5mm I get more and more stringing towards the top, which would indicate too little retraction. Similar for the custom flow tower. When I do a custom flow tower from 100 - 85, the tower barely sticks to the bed and the lines are too thin.

Bed Level Missing settings field

Cura 5.2.1 Plugin release 2.5.0

In the options for the bed level type Concentric Circle type , The field for Number of rings is missing :
image

Seemingly random M104's in TempTower

Hello:
Attached is a sample temptower gcode i made for my machine, with layer height = 0.2mm

I can see that it prints the base of the temp tower with default temp settings, and on line 1174 it does it's first section with M104 S230. Wouldn't M109 be better so it waits until it is up to temp before it continues?

On Line 1376, it makes a random M104 back down to S220 for some reason

On Line 11400, it identifies the next section and does M104 S225

It seems like it does inner wall sections at 10 deg lower temp.. why? Is this a CURA setting to fix? Is M109 better so it waits to print before temp is good?
temptower.txt

Speed tests not changing speed

I just saw Chep video with your plugin.I thought it was a great idea. added the plugin via marketplace and tried the speed tower and it printed the same throughout. I then tried to use your model and manually set post processing change at height how I would historically and that's not working now either. idk if Cura has some conflict with your plugin on my Mac or what? I've tried to read the gcode and find the layer speed changes but that's not my background . from what I've see its not....

Temp and Retraction towers crash printhead outside of buildplate

Hi,

I'm using an unmodified Anycubic Predator (D), and Cura 5.2.1, Linux (Xubuntu 20.04 LTS).
Manually installed the plugin from github, Cura recognizes and uses it fine, and i generated both a PLA temp tower and a retraction tower (1-6).
Around 4.5mm high into the print (i think where the pause is), the print head goes all the way out to one side, then tries to go further down (below the build plate).
The retract tower code seemed not to have the pause in it, so that's why i tried it, but it behaved the same.
The only time i got the same behavior was when i accidentally put G-code sliced for an Ender 5 onto the Predator.

I'm guessing it might have something to do with the absolute/relative coordinates, or when the coordinate system is reset. (G92 ?)
I'm slicing and printing with Cura just fine, only the post processed towers give me this issue.

retraction.gcode.txt

Auto tower removed by Cura

Hi I installed your latest update and I am getting a bug after I load a auto tower and editing post process script.

The auto tower is deleted and a message pops up when trying to edit post processing script the message says "The auto tower has been removed because the Cura setting "none" has changed since the tower was generated"

This is on Cura 5.1 I have found a work around by slicing the tower and writing down the layer numbers I need then adding the post process script makes the changes and then reloading the auto tower to slice.

Flow Test (2.6.2)

Strange, In simulation , I don't see a big difference on the 'Spiral' Flow test , but it's looks like correct on the 'Tower' Test.

image

image

Is Linux support planned?

Hello! I'm using this plugin in Cura 5.3.0 for Linux. Works just fine, except the custom functions.
I can not specify the OpenSCAD location. There is always a message that the path is not correct.
I think you suggest a Windows path and executeable so linux paths were rejected. ("/bin/openscad" in my case)
i am not sure if a flatpack install of cura can even access this path.
but it would be nice to have this running under linux.

Retract Distance Tower script replaces End G-code

The script for the retract tower replaces an End G-Code G1 movement, right after a G92, which causes, well...

This would tell the printer Extruder position is E1.0, whereas the previous Extrude position was E1388.91381. Then it moves the extruder to position E-1.0, thus retracting by 2mm:

G92 E1
G1 E-1 F300

The retract distance script steps in and turns the above into this:

G92 E1
G1 F300 E1388.91381

Spitting out the entire length of material extruded so far (minus 1mm lol).


This is in Cura 5.1

My start G-Code is:

M92 E1388.36
G28 ;Home
G1 Z15.0 F6000 ;Move the platform down 15mm
;Prime the extruder
G92 E0
G1 F200 E3
G92 E0

My end G-Code is:

M104 S0
M140 S0
;Retract the filament
G92 E1
G1 E-1 F300
G28 X0 Y0
M84

I'm attaching g-code of a Retract Distance tower with this problem, and a Retract Speed tower that does not have this problem. (The g-code files have been renamed to *.txt because Github doesn't support uploading .gcode)
PET retract tower 1-6mm.txt
PETG retract speed 60-100mms.txt

retract distance towers

The tower closer to the viewer in the attached picture was printed with the problematic retract distance g-code I am uploading. (The second tower is a different Retract Distance going from 0.0mm to 1.4mm in 0.2mm steps.)

Anycubic Vyper towers skip straight to "finished" having done nothing.

When I try to print the calibration towers generated with this extension my printer brings up the printing screen and shows no indication that it is attempting to heat up. It waits about 9 seconds then shows the finished screen saying "Printing has finished, the total time is: 0 H 0 M"

I am using Cura 5.2.2 and my Anycubic Vyper is running firmware version 2.4.5.

I have attached the gcode from a speed tower and a temp tower. Please let me know if there is any other info I can provide.
TowerGCode.zip

Error when trying to save project

Using the marketplace version (v2.1.0) so not sure if it's already fixed.

When I go to File -> Save Project and save it, i get the following error message popup and i've also pasted the error log below

image

2022-11-01 12:09:00,101 - WARNING - [MainThread] UM.Qt.QtApplication.__onQmlWarning [444]: file:///D:/Program Files/Ultimaker Cura 5.2.1/share/cura/resources/qml/MainWindow/ApplicationMenu.qml:51:9: QML FileMenu: Binding loop detected for property "width"
2022-11-01 12:09:06,650 - DEBUG - [MainThread] LocalFileOutputDevice.LocalFileOutputDevice.requestWrite [133]: Writing to [F:/Downloads/Sliced Files/auto towers profile.3mf]...
2022-11-01 12:09:06,663 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]: Exception: Unable to write to file Untitled: list index out of range
2022-11-01 12:09:06,671 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]: Traceback (most recent call last):
2022-11-01 12:09:06,672 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:   File "UM\Qt\Bindings\OutputDeviceManagerProxy.py", line 150, in _writeToDevice
2022-11-01 12:09:06,672 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:     device.requestWrite(nodes, file_name, limit_mimetypes, file_handler, **kwargs)
2022-11-01 12:09:06,673 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:   File "D:\Program Files\Ultimaker Cura 5.2.1\share\uranium\plugins\LocalFileOutputDevice\LocalFileOutputDevice.py", line 148, in requestWrite
2022-11-01 12:09:06,673 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:     self.writeStarted.emit(self)
2022-11-01 12:09:06,674 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:   File "UM\Signal.py", line 216, in emit
2022-11-01 12:09:06,674 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:     self.__handleEmitIndirect(*args, **kwargs)
2022-11-01 12:09:06,675 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:   File "UM\Signal.py", line 323, in __handleEmitIndirect
2022-11-01 12:09:06,675 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:     self.__performEmit(*args, **kwargs)
2022-11-01 12:09:06,676 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:   File "UM\Signal.py", line 361, in __performEmit
2022-11-01 12:09:06,676 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:     signal.emit(*args, **kwargs)
2022-11-01 12:09:06,677 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:   File "UM\Signal.py", line 216, in emit
2022-11-01 12:09:06,677 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:     self.__handleEmitIndirect(*args, **kwargs)
2022-11-01 12:09:06,678 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:   File "UM\Signal.py", line 323, in __handleEmitIndirect
2022-11-01 12:09:06,678 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:     self.__performEmit(*args, **kwargs)
2022-11-01 12:09:06,679 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:   File "UM\Signal.py", line 357, in __performEmit
2022-11-01 12:09:06,679 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:     func(dest, *args, **kwargs)
2022-11-01 12:09:06,680 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:   File "C:\Users\Kevin\AppData\Roaming\cura\5.2\plugins\AutoTowersGenerator\AutoTowersGenerator\AutoTowersGenerator.py", line 583, in _postProcess
2022-11-01 12:09:06,680 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:     if self._gcodeProcessedMarker not in gcode[0]:
2022-11-01 12:09:06,681 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]: IndexError: list index out of range
2022-11-01 12:09:07,176 - INFO - [MainThread] SliceInfoPlugin.SliceInfo._onRequestFinished [295]: SliceInfo sent successfully
2022-11-01 12:09:09,635 - WARNING - [MainThread] UM.Qt.QtApplication.__onQmlWarning [444]: file:///D:/Program Files/Ultimaker Cura 5.2.1/share/cura/resources/qml/MainWindow/ApplicationMenu.qml:51:9: QML FileMenu: Binding loop detected for property "width"
2022-11-01 12:09:14,934 - DEBUG - [MainThread] LocalFileOutputDevice.LocalFileOutputDevice.requestWrite [133]: Writing to [F:/Downloads/Sliced Files/auto towers profile.3mf]...
2022-11-01 12:09:14,940 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]: Exception: Unable to write to file auto towers profile: list index out of range
2022-11-01 12:09:14,941 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]: Traceback (most recent call last):
2022-11-01 12:09:14,942 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:   File "UM\Qt\Bindings\OutputDeviceManagerProxy.py", line 150, in _writeToDevice
2022-11-01 12:09:14,942 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:     device.requestWrite(nodes, file_name, limit_mimetypes, file_handler, **kwargs)
2022-11-01 12:09:14,943 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:   File "D:\Program Files\Ultimaker Cura 5.2.1\share\uranium\plugins\LocalFileOutputDevice\LocalFileOutputDevice.py", line 148, in requestWrite
2022-11-01 12:09:14,943 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:     self.writeStarted.emit(self)
2022-11-01 12:09:14,944 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:   File "UM\Signal.py", line 216, in emit
2022-11-01 12:09:14,944 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:     self.__handleEmitIndirect(*args, **kwargs)
2022-11-01 12:09:14,945 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:   File "UM\Signal.py", line 323, in __handleEmitIndirect
2022-11-01 12:09:14,945 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:     self.__performEmit(*args, **kwargs)
2022-11-01 12:09:14,946 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:   File "UM\Signal.py", line 361, in __performEmit
2022-11-01 12:09:14,946 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:     signal.emit(*args, **kwargs)
2022-11-01 12:09:14,947 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:   File "UM\Signal.py", line 216, in emit
2022-11-01 12:09:14,947 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:     self.__handleEmitIndirect(*args, **kwargs)
2022-11-01 12:09:14,948 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:   File "UM\Signal.py", line 323, in __handleEmitIndirect
2022-11-01 12:09:14,949 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:     self.__performEmit(*args, **kwargs)
2022-11-01 12:09:14,949 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:   File "UM\Signal.py", line 357, in __performEmit
2022-11-01 12:09:14,950 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:     func(dest, *args, **kwargs)
2022-11-01 12:09:14,950 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:   File "C:\Users\Kevin\AppData\Roaming\cura\5.2\plugins\AutoTowersGenerator\AutoTowersGenerator\AutoTowersGenerator.py", line 583, in _postProcess
2022-11-01 12:09:14,951 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:     if self._gcodeProcessedMarker not in gcode[0]:
2022-11-01 12:09:14,951 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]: IndexError: list index out of range
2022-11-01 12:09:15,447 - INFO - [MainThread] SliceInfoPlugin.SliceInfo._onRequestFinished [295]: SliceInfo sent successfully
2022-11-01 12:09:16,717 - DEBUG - [MainThread] cura.AutoSave._onTimeout [64]: Autosaving preferences, instances and profiles took 0.028970718383789062 seconds
2022-11-01 12:09:17,738 - DEBUG - [MainThread] cura.Machines.MachineErrorChecker._rescheduleCheck [164]: New error check scheduled.
2022-11-01 12:09:17,740 - INFO - [MainThread] cura.Machines.MachineErrorChecker._setResult [221]: Error check finished, result = False, time = 0.00s
2022-11-01 12:09:18,126 - INFO - [MainThread] CuraEngineBackend.CuraEngineBackend._createSnapshot [275]: Creating thumbnail image (just before slice)...
2022-11-01 12:09:18,128 - DEBUG - [MainThread] UM.Scene.Camera._preferencesChanged [255]: Changing perspective mode to perspective.
2022-11-01 12:09:18,128 - WARNING - [MainThread] cura.Snapshot.snapshot [68]: Unable to create snapshot as we seem to have an empty buildplate
2022-11-01 12:09:18,129 - INFO - [MainThread] CuraEngineBackend.CuraEngineBackend.slice [290]: Starting to slice...
2022-11-01 12:09:18,130 - WARNING - [MainThread] CuraEngineBackend.CuraEngineBackend.slice [294]: Slice unnecessary, nothing has changed that needs reslicing.
2022-11-01 12:09:22,804 - DEBUG - [MainThread] LocalFileOutputDevice.LocalFileOutputDevice.requestWrite [133]: Writing to [F:/Downloads/Sliced Files/auto towers profile.3mf]...
2022-11-01 12:09:22,810 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]: Exception: Unable to write to file auto towers profile: list index out of range
2022-11-01 12:09:22,811 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]: Traceback (most recent call last):
2022-11-01 12:09:22,811 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:   File "UM\Qt\Bindings\OutputDeviceManagerProxy.py", line 150, in _writeToDevice
2022-11-01 12:09:22,812 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:     device.requestWrite(nodes, file_name, limit_mimetypes, file_handler, **kwargs)
2022-11-01 12:09:22,812 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:   File "D:\Program Files\Ultimaker Cura 5.2.1\share\uranium\plugins\LocalFileOutputDevice\LocalFileOutputDevice.py", line 148, in requestWrite
2022-11-01 12:09:22,813 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:     self.writeStarted.emit(self)
2022-11-01 12:09:22,813 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:   File "UM\Signal.py", line 216, in emit
2022-11-01 12:09:22,814 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:     self.__handleEmitIndirect(*args, **kwargs)
2022-11-01 12:09:22,814 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:   File "UM\Signal.py", line 323, in __handleEmitIndirect
2022-11-01 12:09:22,815 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:     self.__performEmit(*args, **kwargs)
2022-11-01 12:09:22,815 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:   File "UM\Signal.py", line 361, in __performEmit
2022-11-01 12:09:22,816 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:     signal.emit(*args, **kwargs)
2022-11-01 12:09:22,816 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:   File "UM\Signal.py", line 216, in emit
2022-11-01 12:09:22,817 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:     self.__handleEmitIndirect(*args, **kwargs)
2022-11-01 12:09:22,817 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:   File "UM\Signal.py", line 323, in __handleEmitIndirect
2022-11-01 12:09:22,818 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:     self.__performEmit(*args, **kwargs)
2022-11-01 12:09:22,818 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:   File "UM\Signal.py", line 357, in __performEmit
2022-11-01 12:09:22,819 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:     func(dest, *args, **kwargs)
2022-11-01 12:09:22,819 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:   File "C:\Users\Kevin\AppData\Roaming\cura\5.2\plugins\AutoTowersGenerator\AutoTowersGenerator\AutoTowersGenerator.py", line 583, in _postProcess
2022-11-01 12:09:22,820 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]:     if self._gcodeProcessedMarker not in gcode[0]:
2022-11-01 12:09:22,820 - ERROR - [MainThread] UM.Qt.Bindings.OutputDeviceManagerProxy._writeToDevice [163]: IndexError: list index out of range
2022-11-01 12:09:23,325 - INFO - [MainThread] SliceInfoPlugin.SliceInfo._onRequestFinished [295]: SliceInfo sent successfully

Not applying post processing on Cura 5.3.0

Steps:

  • Install Cura 5.3.0
  • Install plugin
  • Restart Cura
  • Extensions > Auto Towers > Temp Tower PETG

Expected: The model should be placed on the bed and the post-processing should be added related to the selected option
Actual: The model is placed, but the post-processing is missing.

image

Tried

  • v2.6.0 from the Marketplace
  • v2.6.1 from here
  • Cura 5.2.2

Here's the generated g-code, renamed .txt so I could paste it here:
Preset Temperature Tower - PETG.txt

2.1.0 General remarks

Love this new release, adding the STL in the plugin is a good solution to speed up the tower creation operation.

You should, as I do check some parameters in cura to avoid some further issues Like :

  • Adaptatative Layers

  • Set on the model the Remove All Holes depending on the line Width or the Nozzle Size

My scripts have been Updated recently due to some issue like special code present in the Header Gcode but in a commented line (G91/G90 M82/M83) Something you should also add in your integrated Script.

Any Way good Job !

Flow sections labeled incorrectly

The bottom of the default tower is labeled "85", but the first section is set to 115.
;LAYER:4 M221 S115 ; AutoTowersGenerator setting flow rate to 115 for first section
;LAYER:244 M221 S85 ; AutoTowersGenerator setting flow rate to 85 for next section
But generates a tower that looks like this.

image

Bug in Retraction type speed

Not sure if this has been fixed in plugin version 2.2 but in 2.1 that is available with Cura 5.1.0 where if you select to print a retraction speed tower, it instead does a traction distance with the values intended for speed.
This creates drastic results with an Ender 3 v2 with PLA filament as too much filament is retracted/extruded too fast causing temporary jams.

I found the flaw that caused this: differences in case for the retraction type.
In RetractTowerController, you use "Speed" (capital S) to differentiate between retraction type for speed vs distance.
But in RetractTower_PostProcessing, you test type and determine if it is set to 'speed' (all lower case) and if not, default to distance.
Since because of how type is set in RetractTowerController as "Speed", the type never equals "speed" and therefore generates a distance tower.

Outdated version of AutoTowersGenerator on Cura Marketplace

image

I realized that I'm using a very outdated version of AutoTowers when I compared the one on GitHub and the other on Marketplace.

On the MarketPlace it seems to be version 2.1.0 and the current one is 2.3.3 (or v8.2.0 not sure which version name I should use)

I think this is a wonderful plugin, but new users might get the wrong first impression of it if they use an outdated version.

If possible, update the MarketPlace plugin version
Thank you ^^

OpenScad Location

Would be nice to add an option to precify the location of OpenScad.

In My case it's not in : PROGRAMFILES(X86) nor PROGRAMFILES

Using a special location

G-code M117 ':' incompatible with Ender 3 Pro 1.1.6.2 LCD

This may be a minor issue, but I believe there are still many printers in this configuration in use. The 8-bit Ender 3 Pro is not an easy printer to update so perhaps adding an exception in this plugin is the simpler option.

My suggestion would be to add a checkbox to disable ':', completely remove ':' or let users enable custom strings while the old format is just the default dialog input value.

Here is should read Speed: 100.0% rather than just Speed
20220821_162709

It seems like ':' is interpreted as a control character. I believe at some point this behavior was removed in Marlin but did not make it into Creality's version of Marlin.

M106 S255 ; Setting fan speed to 100.0% for the first section
M117 Speed: 100.0%

20220821_173439

I downloaded the firmware source code from Creality here

':' seems to be parsed out here:
Marlin_main.cpp L1281-1284

if (card_eof || n == -1
          || sd_char == '\n' || sd_char == '\r'
          || ((sd_char == '#' || sd_char == ':') && !sd_comment_mode)
      )

or here

https://github.com/Creality3DPrinting/Ender-3/blob/88c7758cea9d0d00a54fdb238bedb3b33425f409/Ender-3%20Firmware%20(Marlin)/Ender-3%20(includes%20power%20failure%20resume-%20English)/Marlin/Marlin_main.cpp#L1281-L1284

Failure to generate STL files using OpenSCAD

When testing this plug-in, I'm encountering the following error after going into Extensions -> Auto Towers -> Fan Tower and then clicking the "Generate" button:

image

No model is generated. The same happens for any of the other options in the Auto Towers menu. In the log file, the following gets written:

2022-05-16 17:34:41,659 - DEBUG - [MainThread] AutoTowersGenerator.AutoTowersGenerator._modelCallback [297]: Running OpenSCAD in the background
2022-05-16 17:34:41,660 - DEBUG - [MainThread] AutoTowersGenerator.OpenScadInterface.GenerateStl [49]: Executing command: openscad -o/tmp/tmp0muw0ud4/caa4f3910af812d401d2cfdba3e4a4aafe6d1de5c83f3a6b22f18718ba8e9405.stl -DStarting_Value=100.0 -DEnding_Value=0.0 -DValue_Change=-10.0 -DBase_Height=0.8 -DSection_Height=8.0 -DTower_Label="" -DColumn_Label="FAN" /home/ghostkeeper/.local/share/cura/4.11/plugins/AutoTowersGenerator/AutoTowersGenerator/openscad/temptower.scad
2022-05-16 17:34:41,755 - DEBUG - [MainThread] AutoTowersGenerator.AutoTowersGenerator._modelCallback [307]: OpenSCAD finished
2022-05-16 17:34:41,755 - ERROR - [MainThread] AutoTowersGenerator.AutoTowersGenerator._modelCallback [311]: Failed to generate /tmp/tmp0muw0ud4/caa4f3910af812d401d2cfdba3e4a4aafe6d1de5c83f3a6b22f18718ba8e9405.stl from temptower.scad

Maybe the issue is that there is no space between the -o and the /tmp in the command that's executed for OpenSCAD?

I'm using Ubuntu 20.04 to test today, on release Cura 4.11 to start with (the oldest version you support). Openscad is installed. In a terminal it gives this output:

~$ openscad --version
OpenSCAD version 2021.01

Incompatible with Cura 5.1.0

image

Log File:

2022-08-21 14:38:46,410 - ERROR - [MainThread] UM.PluginRegistry._findPlugin [732]: Exception: Import error loading module AutoTowersGenerator
2022-08-21 14:38:46,411 - ERROR - [MainThread] UM.PluginRegistry._findPlugin [732]: Traceback (most recent call last):
2022-08-21 14:38:46,411 - ERROR - [MainThread] UM.PluginRegistry._findPlugin [732]:   File "UM\PluginRegistry.py", line 730, in _findPlugin
2022-08-21 14:38:46,412 - ERROR - [MainThread] UM.PluginRegistry._findPlugin [732]:     module = imp.load_module(plugin_id, file, path, desc)  # type: ignore #MyPy gets the wrong output type from imp.find_module for some reason.
2022-08-21 14:38:46,412 - ERROR - [MainThread] UM.PluginRegistry._findPlugin [732]:   File "imp.py", line 245, in load_module
2022-08-21 14:38:46,412 - ERROR - [MainThread] UM.PluginRegistry._findPlugin [732]:   File "imp.py", line 217, in load_package
2022-08-21 14:38:46,413 - ERROR - [MainThread] UM.PluginRegistry._findPlugin [732]:   File "<frozen importlib._bootstrap>", line 719, in _load
2022-08-21 14:38:46,413 - ERROR - [MainThread] UM.PluginRegistry._findPlugin [732]:   File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
2022-08-21 14:38:46,413 - ERROR - [MainThread] UM.PluginRegistry._findPlugin [732]:   File "<frozen importlib._bootstrap_external>", line 883, in exec_module
2022-08-21 14:38:46,413 - ERROR - [MainThread] UM.PluginRegistry._findPlugin [732]:   File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
2022-08-21 14:38:46,414 - ERROR - [MainThread] UM.PluginRegistry._findPlugin [732]:   File "C:\Users\ME\AppData\Roaming\cura\5.1\plugins\AutoTowersGenerator\AutoTowersGenerator\__init__.py", line 1, in <module>
2022-08-21 14:38:46,414 - ERROR - [MainThread] UM.PluginRegistry._findPlugin [732]:     from . import AutoTowersGenerator
2022-08-21 14:38:46,414 - ERROR - [MainThread] UM.PluginRegistry._findPlugin [732]:   File "C:\Users\ME\AppData\Roaming\cura\5.1\plugins\AutoTowersGenerator\AutoTowersGenerator\AutoTowersGenerator.py", line 7, in <module>
2022-08-21 14:38:46,415 - ERROR - [MainThread] UM.PluginRegistry._findPlugin [732]:     from PyQt5.QtCore import QObject, pyqtSlot, pyqtSignal, pyqtProperty
2022-08-21 14:38:46,415 - ERROR - [MainThread] UM.PluginRegistry._findPlugin [732]: ModuleNotFoundError: No module named 'PyQt5'
2022-08-21 14:38:46,415 - WARNING - [MainThread] UM.PluginRegistry._populateMetaData [824]: Could not find plugin AutoTowersGenerator
2022-08-21 14:38:46,419 - ERROR - [MainThread] UM.PluginRegistry._findPlugin [732]: Exception: Import error loading module AutoTowersGenerator
2022-08-21 14:38:46,419 - ERROR - [MainThread] UM.PluginRegistry._findPlugin [732]: Traceback (most recent call last):
2022-08-21 14:38:46,420 - ERROR - [MainThread] UM.PluginRegistry._findPlugin [732]:   File "UM\PluginRegistry.py", line 730, in _findPlugin
2022-08-21 14:38:46,420 - ERROR - [MainThread] UM.PluginRegistry._findPlugin [732]:     module = imp.load_module(plugin_id, file, path, desc)  # type: ignore #MyPy gets the wrong output type from imp.find_module for some reason.
2022-08-21 14:38:46,420 - ERROR - [MainThread] UM.PluginRegistry._findPlugin [732]:   File "imp.py", line 245, in load_module
2022-08-21 14:38:46,421 - ERROR - [MainThread] UM.PluginRegistry._findPlugin [732]:   File "imp.py", line 217, in load_package
2022-08-21 14:38:46,421 - ERROR - [MainThread] UM.PluginRegistry._findPlugin [732]:   File "<frozen importlib._bootstrap>", line 719, in _load
2022-08-21 14:38:46,421 - ERROR - [MainThread] UM.PluginRegistry._findPlugin [732]:   File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
2022-08-21 14:38:46,421 - ERROR - [MainThread] UM.PluginRegistry._findPlugin [732]:   File "<frozen importlib._bootstrap_external>", line 883, in exec_module
2022-08-21 14:38:46,422 - ERROR - [MainThread] UM.PluginRegistry._findPlugin [732]:   File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
2022-08-21 14:38:46,422 - ERROR - [MainThread] UM.PluginRegistry._findPlugin [732]:   File "C:\Users\ME\AppData\Roaming\cura\5.1\plugins\AutoTowersGenerator\AutoTowersGenerator\__init__.py", line 1, in <module>
2022-08-21 14:38:46,422 - ERROR - [MainThread] UM.PluginRegistry._findPlugin [732]:     from . import AutoTowersGenerator
2022-08-21 14:38:46,423 - ERROR - [MainThread] UM.PluginRegistry._findPlugin [732]:   File "C:\Users\ME\AppData\Roaming\cura\5.1\plugins\AutoTowersGenerator\AutoTowersGenerator\AutoTowersGenerator.py", line 7, in <module>
2022-08-21 14:38:46,423 - ERROR - [MainThread] UM.PluginRegistry._findPlugin [732]:     from PyQt5.QtCore import QObject, pyqtSlot, pyqtSignal, pyqtProperty
2022-08-21 14:38:46,423 - ERROR - [MainThread] UM.PluginRegistry._findPlugin [732]: ModuleNotFoundError: No module named 'PyQt5'
2022-08-21 14:38:46,425 - ERROR - [MainThread] UM.PluginRegistry.removeCorruptedPluginMessage [529]: Exception: Error loading plugin AutoTowersGenerator:
2022-08-21 14:38:46,425 - ERROR - [MainThread] UM.PluginRegistry.removeCorruptedPluginMessage [529]: NoneType: None

Seems like it cant load module PyQt5.
I assume Cura uses a newer QT version than 5.

2022-08-21 14:38:45,461 - INFO - [MainThread] UM.Qt.QtApplication.__init__ [88]: Adding QT6 plugin path: C:\Program Files\Ultimaker Cura 5.1.0\PyQt6\plugins

References PyQt6. I'm not sure if the newer version will work out of the box with proper backwards compatibility.

Calibration shapes seems to address this with a try except block:

https://github.com/5axes/Calibration-Shapes/blob/42a22fc1a5f761f06153329f9bb98de8dfeb120e/CalibrationShapes.py#L59-L66

It then loads a different qml based on version

https://github.com/5axes/Calibration-Shapes/blob/42a22fc1a5f761f06153329f9bb98de8dfeb120e/CalibrationShapes.py#L156-L159

Cura crashes when trying to save Gcode made from custom tower

I made a custom retraction tower 1-7mm with 1mm increments. When trying to export the gcode, Cura crashes.

Error Traceback

Traceback (most recent call last):
  File "C:\Users\Micha\AppData\Roaming\cura\5.0\plugins\OctoPrintPlugin\OctoPrintPlugin\UploadOptions.py", line 69, in acceptOptionsDialog
    self._proceed_callback()
  File "C:\Users\Micha\AppData\Roaming\cura\5.0\plugins\OctoPrintPlugin\OctoPrintPlugin\OctoPrintOutputDevice.py", line 560, in proceedRequestWrite
    self.writeStarted.emit(self)
  File "UM\Signal.py", line 216, in emit
    self.__handleEmitIndirect(*args, **kwargs)
  File "UM\Signal.py", line 323, in __handleEmitIndirect
    self.__performEmit(*args, **kwargs)
  File "UM\Signal.py", line 361, in __performEmit
    signal.emit(*args, **kwargs)
  File "UM\Signal.py", line 216, in emit
    self.__handleEmitIndirect(*args, **kwargs)
  File "UM\Signal.py", line 323, in __handleEmitIndirect
    self.__performEmit(*args, **kwargs)
  File "UM\Signal.py", line 357, in __performEmit
    func(dest, *args, **kwargs)
  File "C:\Users\Micha\AppData\Roaming\cura\5.0\plugins\AutoTowersGenerator\AutoTowersGenerator\AutoTowersGenerator.py", line 589, in _postProcess
    gcode = self._towerControllerPostProcessingCallback(gcode)
  File "C:\Users\Micha\AppData\Roaming\cura\5.0\plugins\AutoTowersGenerator\AutoTowersGenerator\Controllers\RetractTowerController.py", line 331, in postProcess
    gcode = RetractTower_PostProcessing.execute(gcode, self._startValue, self._valueChange, self._sectionLayers, self._baseLayers, self._towerType)
  File "C:\Users\Micha\AppData\Roaming\cura\5.0\plugins\AutoTowersGenerator\AutoTowersGenerator\Postprocessing\RetractTower_PostProcessing.py", line 142, in execute
    save_e=float(searchE.group(1))
ValueError: could not convert string to float: ''

Logs

Thread 0x00008ba0 (most recent call first):
  File "C:\Program Files\Ultimaker Cura 5.0.0\share\cura\plugins\USBPrinting\USBPrinterOutputDeviceManager.py", line 88 in _updateThread
  File "threading.py", line 946 in run
  File "threading.py", line 1009 in _bootstrap_inner
  File "threading.py", line 966 in _bootstrap

Thread 0x00005a7c (most recent call first):
  File "threading.py", line 324 in wait
  File "zeroconf\__init__.py", line 2534 in wait
  File "zeroconf\__init__.py", line 1715 in run
  File "threading.py", line 1009 in _bootstrap_inner
  File "threading.py", line 966 in _bootstrap

Thread 0x00008ae8 (most recent call first):
  File "threading.py", line 324 in wait
  File "threading.py", line 600 in wait
  File "C:\Program Files\Ultimaker Cura 5.0.0\share\cura\plugins\UM3NetworkPrinting\src\Network\ZeroConfClient.py", line 81 in _handleOnServiceChangedRequests
  File "threading.py", line 946 in run
  File "threading.py", line 1009 in _bootstrap_inner
  File "threading.py", line 966 in _bootstrap

Thread 0x0000c858 (most recent call first):
  File "zeroconf\__init__.py", line 1369 in run
  File "threading.py", line 1009 in _bootstrap_inner
  File "threading.py", line 966 in _bootstrap

Thread 0x0000a118 (most recent call first):
  File "C:\Program Files\Ultimaker Cura 5.0.0\share\cura\plugins\RemovableDriveOutputDevice\RemovableDrivePlugin.py", line 61 in _updateThread
  File "threading.py", line 946 in run
  File "threading.py", line 1009 in _bootstrap_inner
  File "threading.py", line 966 in _bootstrap

Thread 0x000066e8 (most recent call first):
  File "threading.py", line 320 in wait
  File "threading.py", line 460 in acquire
  File "UM\JobQueue.py", line 98 in _nextJob
  File "UM\JobQueue.py", line 124 in run
  File "threading.py", line 1009 in _bootstrap_inner
  File "threading.py", line 966 in _bootstrap

Thread 0x0000c310 (most recent call first):
  File "threading.py", line 320 in wait
  File "threading.py", line 460 in acquire
  File "UM\JobQueue.py", line 98 in _nextJob
  File "UM\JobQueue.py", line 124 in run
  File "threading.py", line 1009 in _bootstrap_inner
  File "threading.py", line 966 in _bootstrap

Thread 0x00000020 (most recent call first):
  File "threading.py", line 320 in wait
  File "threading.py", line 460 in acquire
  File "UM\JobQueue.py", line 98 in _nextJob
  File "UM\JobQueue.py", line 124 in run
  File "threading.py", line 1009 in _bootstrap_inner
  File "threading.py", line 966 in _bootstrap

Thread 0x000064e8 (most recent call first):
  File "threading.py", line 320 in wait
  File "threading.py", line 460 in acquire
  File "UM\JobQueue.py", line 98 in _nextJob
  File "UM\JobQueue.py", line 124 in run
  File "threading.py", line 1009 in _bootstrap_inner
  File "threading.py", line 966 in _bootstrap

Thread 0x000063a4 (most recent call first):
  File "threading.py", line 320 in wait
  File "threading.py", line 460 in acquire
  File "UM\JobQueue.py", line 98 in _nextJob
  File "UM\JobQueue.py", line 124 in run
  File "threading.py", line 1009 in _bootstrap_inner
  File "threading.py", line 966 in _bootstrap

Thread 0x0000181c (most recent call first):
  File "threading.py", line 320 in wait
  File "threading.py", line 460 in acquire
  File "UM\JobQueue.py", line 98 in _nextJob
  File "UM\JobQueue.py", line 124 in run
  File "threading.py", line 1009 in _bootstrap_inner
  File "threading.py", line 966 in _bootstrap

Thread 0x000031a0 (most recent call first):
  File "threading.py", line 320 in wait
  File "threading.py", line 460 in acquire
  File "UM\JobQueue.py", line 98 in _nextJob
  File "UM\JobQueue.py", line 124 in run
  File "threading.py", line 1009 in _bootstrap_inner
  File "threading.py", line 966 in _bootstrap

Thread 0x00007c60 (most recent call first):
  File "threading.py", line 320 in wait
  File "threading.py", line 460 in acquire
  File "UM\JobQueue.py", line 98 in _nextJob
  File "UM\JobQueue.py", line 124 in run
  File "threading.py", line 1009 in _bootstrap_inner
  File "threading.py", line 966 in _bootstrap

Current thread 0x0000b284 (most recent call first):
  File "cura\CrashHandler.py", line 396 in _logInfoWidget
  File "cura\CrashHandler.py", line 182 in _createDialog
  File "cura\CrashHandler.py", line 86 in __init__
  File "cura_app.py", line 164 in exceptHook
  File "UM\Qt\QtApplication.py", line 403 in exec
  File "cura\CuraApplication.py", line 879 in run
  File "cura_app.py", line 238 in <module>

Half speed on speed tower

Hey!

Just ran a speed tower generated on Cura 5.2.1. I used the 100-200 template. But the whole tower was running at half speed.
I was checking Klipper and the 100 mm/s layer was running at 50. This pattern kept repeating all the way until 100 mms/s for the 200 mms/s layers.

Best regards
Dan

Multi parameters tower

Hi Brad,
Great work, it helps to calibrate the printer a lot!

But what I struggle with is that for many detailed models where precision is essential you need to set several parameters to meet your quality requirements. So it would be great to have a model that could test temperature, flow and speed with different combinations of these. It could be a 3d model script where the temperature changes in the Z direction, speed changes in the Y direction and flow changes in the X direction.

Let me know if you think it is possible.
Cheers!

Linked Cura Settings (SymLink), Plugin not working

Hi,

unfortunately the plugin is not working when the directory for the cura settings is linked via a symlink.
I created the link to be able to sync the settings via OneDrive:
mklink /d C:\Users<Username>\AppData\Roaming\cura C:\Users<Username>\OneDrive\3DDruck\CuraSettings

With this setup i get the following error when i try to create a custom tower:

image

Temperature width speed tower

Hi, Thanks for the nice extension.
I think when you do a speed test, you must go up with the temperature to get a good flow, so higher speed higher temperature this for under extrusion.
This I find out when I saw that under extrusion came up, I go up 10 degrees and under extrusion went away. Did that every time the speed went up and that way I got a better result.
Good job anyway.

Kind regards, Tom

Autotowers (temp and retraction) adds duplicate command into cura end of print code - causes filament runout

gcode with E issue
The screenshot is from repetier host. The autotower code line in green is as expected (6mm retraction from the absoluteE value in row 25949). However this line is for some reason being repeated (red highlight) in my end of print GCODE...and comes after the G92 E1 command that is in my code (I use an end of print set of commands from recommendations last year). This causes the extruder to push the full print filament length again (it fails once the nozzle cools).

The red line should not be in the end of print code, as its a duplicate of the last correctly isssued command.

This is with v 2.4 and cura 5.2.1

openscad path

Hi. I am using Cura 5.2.1 on windows 11 and there is no way to configure a path to openscad.
Tried installing openscad autmatically, personally and even as a portable software.
Every path i put in the settings i obtain "Path is not valid". Also uninstalled and reinstalled more times the plugin and openscad itself.
I also tried to set an environment variable but, in any case openscad can be found.
atg

Flow Tower Bugs - Default Reversed and Custom Section Size

The default Flow Tower produces GCODE with the flow reversed from what is printed on the tower. Bottom Layers 115 and Top Layers 85.

The custom flow tower GCODE does not consider the section size and enters flow GCODE at the wrong layers.

Speed and flow towers not working properly

First of all thank you for the cool and very useful tool!!!
Retraction distance tower as well as temperature tower work properly - I see temperature changes with the temperature tower and I hear short and long retractions on the retraction distance tower.
As for the retraction speed tower, printing speed tower and flow tower - they seem not to work in my setup.
In retraction speed tower I don't hear the difference in extruder motor pitch at different levels, and I do not see any difference in stringing in all the levels
For printing speed tower I clearly see that all the levels are printed with the same speed
For flow tower I do not see any difference in print quality over levels.

It seems to me the Cura overides some of the settings. I can post sections of generated gcode here if needed.

Cura 5.0.0., Flyingbear ghost 5 printer

opensCAD path

I just can't seem to specify the opensCAD path. i've tried and tried again. But the plugin just won't recognize that openSCAD is installed.

Add a Coffee button

This plugin is the best thing since sliced bread. I was annoyed by the fixed size pre-made towers so many times, I couldn't image that this is possible. This is so much more efficient, thank you so much. I wish I was better at python and could help you with development, but maybe you could add a "buy me coffee" button somewhere, because I would like to show my gratitude somehow!

Typo in "Retraction tower (Disance 1-6)"

Capture

Noticed a typo in the settings.

Also I am curious:

  1. At what layer height do I need to print these tests?
  2. Does the script automatically adjust itself to other layer thicknesses? (0.10, 0.12, 0.16 etc)

Acceleration and Jerk calibration tower

Great plugin, and because I want to use it for all my printers, I thought I might ask or give a suggestion.

For printing fast, acceleration is just as important as speed due to constantly changing directions.
I know of speed tower, however I am unsure if it adjusts acceleration and jerk speeds.

Is there a possibility for such a calibration tower to be included in the plugin?

New flow tower model doesn't seem to be as useful at gauging flow

I recently printed a flow tower and noticed it uses a different model. I've inspected it thoroughly, but unfortunately each layer seemed to come out the same.

The old model used to give me very different results and always worked perfectly.

Perhaps I'm missing something, but this may need discussing.

Attempting to save fan tower to file results in error Cura 4.13.1

image
image

Error: float() argument must be a string or a number, not 'NoneType'

I have not tried every generated shape but I can not save the fan tower with default parameters.
I am not sure how to do a traceback to the core of this issue but I can if I have some instruction.

This is an issue in Cura 4.13.1 and I cant even run the plugin in 5.1.0 (perhaps I should make another issue for this? #8 )
Windows 10 Pro 21H2 19044.1889
image

Speed tower decimal replacement bug

Hi!

I've been using the plugin with great pleasure, however when trying to print a speed tower the generated gcode fails since the new speed has two decimals.

Example of a line found in my gcode;

G1 F670.6.3 X111.802 Y112.052 E233.29574 ; AutoTowersGenerator changing speed from 8.0mm/s (479.0mm/m) to 11.2mm/s (670.6mm/m)

Notably the F670.6.3 should have been F670.6, so I'm guessing somewhere either the regex or replacement is faulty somewhere at
https://github.com/kartchnb/AutoTowersGenerator/blob/main/Postprocessing/PrintSpeedTower_PostProcessing.py#L84-L95

I fixed my gcode by doing a regex replacement of G1 F(\d+\.\d+)\.\d+ to G1 F$1 but I guess solving it in the plugin would be better.

I'm a PHP programmer and have no clue how to properly test this for python otherwise I'd have tried to create an PR, but the problem with direct string replacement and digits/decimals/points I've come across once in a while so maybe there's some extra cases to check for or maybe an update of the regex to F(\d+(?:\.\d*)?)(\s|$) to detect whitespace/end of string?

Crash when attempting to run plugin

Exception in thread Thread-6:
Traceback (most recent call last):
  File "/usr/lib/python3.9/threading.py", line 954, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.9/threading.py", line 892, in run
    self._target(*self._args, **self._kwargs)
  File "/home/jvankessel/.local/share/cura/5.0/plugins/AutoTowersGenerator/AutoTowersGenerator/AutoTowersGenerator.py", line 278, in <lambda>
2022-03-30 13:24:12,831 - CRITICAL - [MainThread] cura.CrashHandler.__init__ [66]: An uncaught error has occurred!
    openScadThread = threading.Thread(target = lambda: self._openScadInterface.GenerateStl(openScadFilePath, openScadParameters, stlFilePath))
  File "/home/jvankessel/.local/share/cura/5.0/plugins/AutoTowersGenerator/AutoTowersGenerator/OpenScadInterface.py", line 65, in GenerateStl
    subprocess.run(command)
  File "/usr/lib/python3.9/subprocess.py", line 505, in run
2022-03-30 13:24:12,832 - CRITICAL - [MainThread] cura.CrashHandler.__init__ [69]: Traceback (most recent call last):
2022-03-30 13:24:12,833 - CRITICAL - [MainThread] cura.CrashHandler.__init__ [69]:   File "/home/jvankessel/.local/share/cura/5.0/plugins/AutoTowersGenerator/AutoTowersGenerator/FanTowerController.py", line 81, in dialogAccepted
    with Popen(*popenargs, **kwargs) as process:
  File "/usr/lib/python3.9/subprocess.py", line 951, in __init__
2022-03-30 13:24:12,833 - CRITICAL - [MainThread] cura.CrashHandler.__init__ [69]:     self._modelCallback(self._openScadFilename, openScadParameters, self._postProcess)
2022-03-30 13:24:12,834 - CRITICAL - [MainThread] cura.CrashHandler.__init__ [69]:   File "/home/jvankessel/.local/share/cura/5.0/plugins/AutoTowersGenerator/AutoTowersGenerator/AutoTowersGenerator.py", line 280, in _modelCallback
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/lib/python3.9/subprocess.py", line 1821, in _execute_child
2022-03-30 13:24:12,834 - CRITICAL - [MainThread] cura.CrashHandler.__init__ [69]:     while (openScadThread.isAlive()):
2022-03-30 13:24:12,834 - CRITICAL - [MainThread] cura.CrashHandler.__init__ [69]: AttributeError: 'Thread' object has no attribute 'isAlive'
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'openscad'

I think you should use is_alive() see: https://docs.python.org/3/library/threading.html#threading.Thread.is_alive. Alternatively look at the suggestion in #1

[enhancement] Re-Apply script on a saved project

First of all congratualtion for this new version of the plugin. The idea of the text engraved on the tower side for the tower description is a great Idea.

One enhancement possible would be a function to "Re-apply" the Script on a saved model.

Initial situation : The user decide to save the current project as a 3mf file, when he load again the file the geometry is there but he lost the script for the modification to generate again the G-code.

Solution create a special parameter used to store the script to be linked with this part.
Add an aditional function to recreate the link between the existing project and the initial script.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.