Is there a Dynamo way to select all objects in a family (including those in groups) and change the Family Element Visibility Setting so all elements Detail Levels Coarse is unchecked?
I have made several nested families (very large and complex) and need to change all objects in each one so that only the base places will show up in Coarse view. A dynamo solution would save me days.
I realize its been over a year since you posted this but I came across your question while dealing with a similar issue. I also couldn’t find a solution here so I got someone at my firm who’s more proficient in python than me to help make a node for this. I thought I’de share the code here to help anyone else struggling with the same issue.
It will update the visibility/graphic settings of any elements in a family that contain the Visibility/Graphics Override parameter including view specific elements and nested families. I have not tested it with groups.
import clr
clr.AddReference('ProtoGeometry')
clr.AddReference('RevitServices')
clr.AddReference('RevitAPI')
import sys
from Autodesk.DesignScript.Geometry import *
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
from Autodesk.Revit.DB import *
doc = DocumentManager.Instance.CurrentDBDocument
# The inputs to this node will be stored as a list in the IN variables.
dataEnteringNode = IN
# Place your code below this line
def tolist(obj):
if isinstance(obj, list):
return obj
else:
return [obj]
#ModelCurve = UnwrapElement(IN[0])
out = []
for m in IN[0]:
TransactionManager.Instance.EnsureInTransaction(doc)
try:
curr_element = UnwrapElement(m)
fev = FamilyElementVisibility(FamilyElementVisibilityType.Model)
fev.IsShownInCoarse = False
curr_element.SetVisibility(fev)
out.append("ModelCurve")
except:
# At this point we have a nested Family Instance
curr_element = UnwrapElement(m)
param = curr_element.LookupParameter("Visibility/Graphics Overrides")
# This is the integer value for setting the Graphics to "Coarse"
# Was found by using Revit Lookup Add-in
param.Set(49214)
out.append("Family Instance")
continue
TransactionManager.Instance.TransactionTaskDone()
OUT = out
The code is set up to hide elements at coarse detail level. for family geometry and detail lines its pretty easy to modify the code to change what visibility settings are on or off. for nested families, you can use the Revit Lookup add-in to find the integers you need to change the visibility. This blog post from The Building Coder explains more: