I am making a pyqt widget tool which should operate with data in AutoCAD. Basically it allow user to select color and fill it in selected hatch objects in AutoCAD. It actually can be done directly in AutoCAD but sometimes it's time consuming task to open custom palette and manually select color.
My current tool is based on pyautocad
and pyqt
modules. This is how it looks like:
While widget is opened, user can select hatches and then select type in widget and then press Fill type
button and finally we got repainted hatches.
This is how it looks like in Python code:
red, green, blue = 146, 32, 6
acad = Autocad() # initializing AutoCAD connection
list_to_upd = []
curr_sset = acad.doc.PickfirstSelectionSet # get a list of selected entities
new_color = None
for obj in curr_sset:
if obj.ObjectName == 'AcDbHatch': # check if entity is hatch type
if not new_color:
tcolor = obj.TrueColor
tcolor.SetRGB(red, green, blue)
new_color = tcolor
obj.TrueColor = new_color # set a new background color for hatch
It works fine but on a small amount of hatches. When the number of selected features is larger, it works significantly longer. For example, when even 50 hatches are selected, it can take 10-15 seconds to fill new colors.
I was looking for solutions. Module's author tells about using Cache but I cannot figure out how to implement it in my code. Also tried using multiprocessing but looks like it's unable to use ActiveX objects with that. Also thought there would be a solution in passing prompts like in LISP or regular commands but I'm not familiar with AutoCAD syntax so far. Any ideas?
source https://stackoverflow.com/questions/77691809/batch-update-entity-property-in-pyautocad
Comments
Post a Comment