So i have been trying to use some Revit API to extract ElementIds from elements. Here’s the code:
import clr
 clr.AddReference(‘ProtoGeometry’)
 from Autodesk.DesignScript.Geometry import *
 # Import RevitAPI
 clr.AddReference(“RevitAPI”)
 import Autodesk
 from Autodesk.Revit.DB import *
 # Import ToDSType(bool) extension method
 clr.AddReference(“RevitNodes”)
 import Revit
 clr.ImportExtensions(Revit.Elements)
 #The inputs to this node will be stored as a list in the IN variable.
 dataEnteringNode = IN
 elements = []
 for i in IN[0]:
     elements.append(UnwrapElement(i))
 elementIds, idString, guid = [], [], []
 for i in elements:
     elementIds = i.Id.ToDSType(true) 
     idString = i.Id.ToString().ToDSType(true)
     guid = i.UniqueId.ToDSType(true)
 #Assign your output to the OUT variable
 OUT = elementIds, idString, guid
Here’s the error that i keep getting.
Warning: IronPythonEvaluator.EvaluateIronPythonScript operation failed. 
‘ElementId’ object has no attribute ‘ToDSType’
Any ideas?
Thank you,
Konrad
             
            
              
              
              
            
            
           
          
            
            
              hi konrad, i published a package called guid tools
it consists of three nodes
- 
extract guids 
- 
extract Ids 
- 
extract both 
hope that helps and the code works
peter

             
            
              
              
              
            
            
           
          
            
            
              Hey Konrad,
An ElementId is not an Element, so the extension method ToDSType() is not present.  You can return the integer just by doing:
eleId.IntegerValue
~Peter
             
            
              
              
              
            
            
           
          
            
            
              Peter B,
I see now. Only do i need to wrap it if i am creating an actual Element like a point, curve, view or annotation tag but not when I am just pulling out their properties. This makes more sense now. Thank you,
Peter K,
Thank you for the link. I didn’t see your nodes before, but then again I wrapped it all up into one Python node called Element Id that can get you anything you need. Here’s the code:
import clr
clr.AddReference(‘ProtoGeometry’)
from Autodesk.DesignScript.Geometry import *
Import RevitAPI
clr.AddReference(‘RevitAPI’)
import Autodesk
#The inputs to this node will be stored as a list in the IN variable.
dataEnteringNode = IN
elements = []
for i in IN[0]:
elements.append(UnwrapElement(i))
elementIds, idString, guid = [], [], []
for i in elements:
elementIds.append(i.Id)
idString.append(i.Id.ToString())
guid.append(i.UniqueId)
#Assign your output to the OUT variable
OUT = elementIds, idString, guid
Thank you,