Element (ID) from surfaces

Hello everbody

I would like return which elements are from some surfaces. I use as a example this topic:

But, it’s just for one surface… I made something like that:

However, it’s return a error:

image

This a correct way for return all elements from surfaces or there other way?

Thanks

Hi @brenofilipe,
Looping to get the “i” in the range is not going to help you unless you use that “i” to retrieve the element from ref.

Try this:

import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *

clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *

clr.AddReference('RevitAPIUI')
from Autodesk.Revit.UI import *
from Autodesk.Revit.UI.Selection import *

clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager

doc = DocumentManager.Instance.CurrentDBDocument
uidoc = DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument

clr.AddReference("RevitNodes")
import Revit
# Import ToProtoType, ToRevitType geometry conversion extension methods
clr.ImportExtensions(Revit.GeometryConversion)

TaskDialog.Show('Selection','Select the face(s)')
refs = uidoc.Selection.PickObjects(ObjectType.Face, 'Select the face(s)')
output = []

for ref in refs:
	out = []
	elemId = ref.ElementId
	element = doc.GetElement(ref.ElementId)
	dynSurface = doc.GetElement(ref).GetGeometryObjectFromReference(ref).ToProtoType()
	out.append(elemId)
	out.append(element)	
	out.append(dynSurface)
	output.append(out)

OUT = output

2 Likes

This is exacly that I needed.

Thank you very much @AmolShah !

1 Like