Hi, so the Element.ID node gives the Revit element ID as a string, how can that be fed into the Python script? Thanks
[Edit Moderation : post edited to avoid confusion ElementId() method does not accept Element as parameter ]
worked it out, just need to add: ID = Autodesk.Revit.DB.ElementId(walls) before doc.Delete(walls)
@egdivad Is it possible to share a screenshot of you code? I know I can use a springs node, but I am trying to replicate your end result in python and am getting the error: “Autodesk is not defined”
Here is a copy of my code:
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
viewstodel = UnwrapElement (IN)
for views in viewstodel:
ID = Autodesk.Revit.ElementID(views)
out = deleted
I am clearly missing something, I just don’t know what.
You’re missing required imports. Check the information on this page for more info: 3.2 Boilerplate Setup Code - Dynamo Python Primer
Note that this isn’t EVERY namespace and class you’ll need, but it covers most of the basics.
That’s a super helpful resource @jacob.small . This solved my initial error but now gives a new one: 'unexpected token " '. I don’t notice any irregularities or extra ’ " 's anywhere.
Here is a grab of the Code:
Manually retyping the whole code now instead gives the error:
“File “string”, line 36, in AttributeError:attribute ’ ElementID’ of ‘namespace#’ object is read-only”
so its clearly my Element ID line, I just don’t know why.
Since you manually retyped it, we’d have to see what you typed. Otherwise we’re guessing at what you might have retyped wrong. Might be that you’re trying to pull an element ID from an element ID when you really want to convert the ID to an element.
You may also find it’s easier to use a node to do this instead of Python. There is one out of the box in Revit 2021 and on, and one in Archi-Lab, Springs, and others.
Here is a screen grab of the code after retyping.
I suspect the issue is the latter of what you suggested.
I know I can do it with packages, but want to accomplish this OOTB for 2019.
Please post the DYN - too much guesswork here and me retyping your code is slowing us both down.
Sorry if I was making things difficult. Here is the dyn:
Dynamo-StripAllNonWorkingViews-OOTB-R19.dyn (22.0 KB)
the syntax for delete one Element
import clr import sys import System clr.AddReference('ProtoGeometry') from Autodesk.DesignScript.Geometry import * clr.AddReference('RevitAPI') import Autodesk from Autodesk.Revit.DB import * clr.AddReference('RevitServices') import RevitServices from RevitServices.Persistence import DocumentManager from RevitServices.Transactions import TransactionManager doc = DocumentManager.Instance.CurrentDBDocument element = UnwrapElement(IN) element_Id = element.Id TransactionManager.Instance.EnsureInTransaction(doc) doc.Delete(element_Id) TransactionManager.Instance.TransactionTaskDone() OUT = element_Id
the syntax for delete several Elements
import clr import sys import System clr.AddReference('ProtoGeometry') from Autodesk.DesignScript.Geometry import * clr.AddReference('RevitAPI') import Autodesk from Autodesk.Revit.DB import * from System.Collections.Generic import List clr.AddReference('RevitServices') import RevitServices from RevitServices.Persistence import DocumentManager from RevitServices.Transactions import TransactionManager doc = DocumentManager.Instance.CurrentDBDocument toList = lambda x : x if hasattr(x, '__iter__') else [x] lst_elements = toList(UnwrapElement(IN)) lst_elementIds = List[ElementId]([x.Id for x in lst_elements]) TransactionManager.Instance.EnsureInTransaction(doc) doc.Delete(lst_elementIds) TransactionManager.Instance.TransactionTaskDone() OUT = lst_elementIds
Thank you for helping with the syntax, I wasn’t aware there were different syntax for single v multiple elements. If I copy your code directly, I get a new error for line 22 of your code: List[object] object has no attribute ‘Id’. I am clearly missing something, but admittedly haven’t had time to dig very deeply at all into either python or the Revit API.
if your input data is a list (multiple items) you should use the second example
What is the entry structure of your list? Several nested list ?
Its a single list of Ids, I have tried as a normal list, output from the node ‘Element.Ids’, converting that node to string from object, and using list flatten on all above methods. Here is a screen grab:
Edited to get node names visible in grab. Apologies
Perfect! If you have time, could you explain why the original node configuration did not work? I would like to understand so I don’t make a similar mistake in the future
Here is a copy of the working dyn in case anyone needs it.
Dynamo-StripAllNonWorkingViews-OOTB-R19.dyn (33.8 KB)
the script need Elements at input (one or several), inside the Python script ElementId of each element is obtained by the property Id
then we delete them by Id
That makes sense. I took the syntax to mean it needed the raw id, not the element itself, in which it would pull its id.