Get all the geometry embedded on a Revit family Type with Dynamo

hello all,

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.

Therefore, 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.

For example I had a deeper look to this truck modelled 100% with Revit family geometry, with empty geometry results in Dynamo, and I was expecting to get a list of all solids geometry modelled, if the geometry would be an imported 3d mesh I would understand there is no result, but this is properly modelled.

Family attached here for your test:
BIMINONE_Large-14WheelsFlatbedTrailer.rfa (3.5 MB)

This is the result that I get for this family example:
image

1 Like

Probably there are also a lot of nodes that can do that. My first with node from BimorphNodes v.3.0.3.

Thanks Nenad Kovacevic, I don’t want to get only solids, that example was like ideal solid made model, quite rare. Usually you find many combinations of geometry.

I would like to get any geometry from a project file and from a family type stored on a project revit family library, but not placed instance

@ziyun.shang do you have any thoughts on this one :slight_smile: ?

Perhaps post an example containing the less rare content? Geometry failing in masse like this is actually extremely rare, and I have found often has to do with geometries which throw one or more suppressed warnings under the hood in Revit (slowing down models but allowing things to work - check your journal for more info).

there is no bounding box output in the majority of Revit families downloaded from BIMObject.com

@RubenVivancos , well I just use your file here BIMINONE_Large-14WheelsFlatbedTrailer.rfa, it seems work well with Element.Geometry.
I saw your screenshot has a warning on “Element.Geometry” node, what is that?

1 Like

Hello @ziyun.shang,

I repeated same than your screenshot for that family only, I get empty results, I tested it in Revit 2018 and Revit 2021 with different Dynamo versions, same results.

Warning: One or more geometries have failed to convert due to this error: Unable to trim surface as the input loop geometry could be illegal

I tried the node script of Clockwork called Elemen.Geometry+ and I get one family type more with geometry

Also I tried with a new python script to get the geometry as well, 15 family types had output and 889 failed to get geometry.

Nothing works by now as expected and each test had different number of families with geometry output: 15,16,17 :scream_cat:

The only freak solution I get geometry is searching a revit family file but the output is not complete, some geometry disappeared because warning: Warning: One or more geometries have failed to convert due to this error: Unable to compute edge from curve : IG_CURVE_BS3_COI_VERTS – Curve or its approximation have coincident control points

try resetting your geometry scaling settings are set to medium, if you have modified them.

You are right, scaling was Extra large but I only get geometry of 5 family types more with scaling Medium.

Same result with Large, and Small indicates on element. Geometry node with a warning that scaling has to be increased.

And the geometry appeared with the last trick! :face_with_monocle:, but I do not consider that option for my workflow

Hello,

In your test, was the element placed in the projej before asking the geometry of the Family Type?
I noticed that if an element of a family type is placed in the project, I can get the geometry of it, but I was expecting to get the geometry of a family type without the need of placing elements on a project.

no instances at any point here:

Perhaps you’ve put your model in a bad state? Can you post an RVT reproducing the issue since the RFA doesn’t? This way we an confirm if it’s a system setting on your CPU.

hello all
i’m newbie member

I can see Dynamo can get the geometry of the family type if the family has been ever placed in the project and deleted it afterwards, but this is not my goal.

In this project file that I share you cannot get the geometry because the family has not been ever placed is my conclusion of that behaviour test.

When family is ever placed and deleted, this is the result

Revit 2021 File Version
GetFamilyTypeGeometryTest.rvt (3.8 MB)
Dynamo script used:
Get Geometry of a single family type.dyn (3.5 KB)

Oh think I see what the issue is… looks like you may be trying to get the geometry from an inactive family symbol - that is the project hasn’t computed what is in it just yet. If this is the case, there may be some options, or there may not.

How are you loading the family into the file?

Let me think on this today and see if I can come up with some things to try.

with this python node:

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

clr.AddReference(“RevitNodes”)
import Revit
clr.ImportExtensions(Revit.Elements)

clr.AddReference(“RevitServices”)
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

doc = DocumentManager.Instance.CurrentDBDocument
fampaths = IN[0]
famnames = IN[1]
elementlist =
booleans =

TransactionManager.Instance.EnsureInTransaction(doc)
for fampath in fampaths:
try:
doc.LoadFamily(fampath)
booleans.append(True)
except: booleans.append(False)
TransactionManager.Instance.TransactionTaskDone()

collector = FilteredElementCollector(doc)
collector.OfClass(Family)
for item in collector.ToElements():
if item.Name in famnames:
typelist = list()
for famtypeid in item.GetFamilySymbolIds():
typelist.append(doc.GetElement(famtypeid).ToDSType(True))
elementlist.append(typelist)
OUT = (elementlist,booleans)

Yeah it looks like the inactive load may be at play. Been awhile since I have run into this though so I may be off base. Let me poke around for a bit next week, but if this pans out nothing would produce that geometry without first generating the geometry in the document. You can’t fetch what doesn’t yet exist. As a test, try opening the model with audit before attempting to fetch the geometry - this might put the geometry in place by performing the full regen on the DB and the missing geometry lines could be resolved that way.

the script is the same of Clockwork, Load.Family. How can I audit a file that is not saved yet? if so, is that possible to add to the python code?

You must add the Activate method to your script or in another python node.

1 Like