replace GetSymbolGeometry() method to GetInstanceGeometry()
check that your family is clearly visible in the active view when launching the script
Its working Poupin thanks a lot
a small update to process a list of input elements instead of a single element
import clr clr.AddReference('ProtoGeometry') from Autodesk.DesignScript.Geometry import * clr.AddReference('RevitAPI') import Autodesk from Autodesk.Revit.DB import * clr.AddReference('RevitNodes') import Revit clr.ImportExtensions(Revit.Elements) clr.ImportExtensions(Revit.GeometryConversion) clr.AddReference('RevitServices') import RevitServices from RevitServices.Persistence import DocumentManager from RevitServices.Transactions import TransactionManager doc = DocumentManager.Instance.CurrentDBDocument def getgeometryDS(geo): surfaces =  edges =  lines =  if isinstance(geo, Solid): for face in geo.Faces: surfaces.extend(face.ToProtoType()) for edge in geo.Edges: edges.append(edge.AsCurve().ToProtoType()) if isinstance(geo, Line): lines.append(geo.ToProtoType()) return surfaces, edges, lines elemlist = UnwrapElement(IN) #get the actual view with the Detail Element is Visible view = doc.ActiveView if not hasattr(elemlist, "__iter__"): elemlist = [elemlist] geofam =  op = Options() op.View = view for elem in elemlist: geoms = elem.get_Geometry(op) for geoinst in geoms: if isinstance(geoinst, GeometryInstance): geosymbs = geoinst.GetInstanceGeometry() for geoelem in geosymbs: surfaces, edges, lines = getgeometryDS(geoelem) #check if geoelem is a valid Solid if all([ x.Count != 0 for x in [surfaces, edges]]): geofam.append([surfaces, edges, lines]) if isinstance(geoinst, Solid): surfaces, edges, lines = getgeometryDS(geoinst) #check if geoinst is a valid Solid if all([ x.Count != 0 for x in [surfaces, edges]]): geofam.append([surfaces, edges, lines]) outsurface = [ x for x in geofam] outedges = [ x for x in geofam] outdetailLines = [ x for x in geofam] OUT = outsurface, outedges, outdetailLines
hello @Alban_de_Chasteigner is possible to get the goemetry of the family types stored in the project file without the need of placing element instances of those family types? many thanks
hello @Alban_de_Chasteigner , I supposed that the Element.Geometry node shows you the geometry but it is not true majority of times. For example I got a revit file with a library of many different revit families of model categories as generic models, site, equipment, furniture and I got more 900 family types and only 16 had a result of geometry, then I would like to know how to interrogate the families to get exactly the geometry embedded wether if it is solid, surface, mesh, lines, regions, symbols, points, inserted cad files, faces, whatever…if you think -I can open anew thread for this topic.
For example have a look to that family and see how it goes:
BIMINONE_Large-14WheelsFlatbedTrailer.rfa (3.5 MB)
This is what I get:
It is known the Element.Geometry node have a lot of issues, especially read complex geometry, there are some workarounds like Grasshopper.
any sample to follow? Speckle for Dynamo working for this?