HI All!
I Have this file we received from a client and I can’t get rid of these blocks:
Is there a safe way to get rid of them via python script without deleting also the Blocks instaces in the scene?
Thanks in advance!
HI All!
I Have this file we received from a client and I can’t get rid of these blocks:
Is there a safe way to get rid of them via python script without deleting also the Blocks instaces in the scene?
Thanks in advance!
I’m not sure what you mean - can you send the file to tech@mcneel.com, to my attention, with a link back here in your comments?
-Pascal
File sent!
I’ll try to explain further:
In the file you will find only a few block instances.
If you open the block manager you will see that there are several blocks in addition to those present in the scene, and these blocks I can not delete them from the block manager with the classic purge.
I would like to delete all the blocks in the block manager list that are not present in the file.
Hi Andrea - in your file, delete the dwg file in BlockManager
first, then the others can be deleted.
-Pascal
Hi Pascal, Good to know.
though, I would like to clean the file from unnecessary blocks via python because I have some errors in a script I am running automatically at startup.
Until now I used the purge command throught rs.command, but in this case it doesn’t work.
Hi Andrea - I guess one way would be to do this in stages in your script - make a pass (however you are doing that in the script0 , if any blocks are removed make another pass, etc. until none are removed… something like that.
-Pascal
Hey @pascal , sorry to go back to this after so long, But I could only get my hands on it now.
What I did in the end is Compare the list of selectable Blocks and the list of Block definition in the file, delete the resulting difference:
It seem to work on the files I tested so far
def Diff(li1, li2):
li_dif = [i for i in li1 + li2 if i not in li1 or i not in li2]
return li_dif
if rs.ObjectsByType(4096):
rs.Command("_SelBlockInstance")
li1 = rs.ObjectsByType(4096)
li2 = rs.SelectedObjects()
li3 = Diff(li1, li2)
rs.DeleteObjects(li3)
rs.Command("_-Purge _BlockDefinitions=_Yes _AnnotationStyles=_No _Groups=_No _HatchPatterns=_No _Layers=_No _Linetypes=_No _Materials=_No _Enter")