Highlight opening when it is cut, how?

Hello,

i try to highlight my openings to “green” when they are cut! But it works just for true not for false, why?
2023-04-14_21h01_12



for any reason the “not cut” opening remains also in true… i use spring nodes…

this is the code… is it possible to simplify that… to a for loop where i just ask “IsCut” (?) and i get a list of all my openings …

import clr

clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
doc = DocumentManager.Instance.CurrentDBDocument

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

clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)

def tolist(obj1):
	if hasattr(obj1,"__iter__"): return obj1
	else: return [obj1]

elements = UnwrapElement(tolist(IN[0]))
out1 = []
cut_el = []

cutU = InstanceVoidCutUtils
for i in xrange(len(elements)):
	try:
		if cutU.IsVoidInstanceCuttingElement(elements[i]):
			cut1 = cutU.GetElementsBeingCut(elements[i])
			if cut1.Count != 0:
				cut1 = [doc.GetElement(id).ToDSType(True) for id in cut1]
			out1.append(True)
			cut_el.append(cut1)
		else:
			out1.append(False)
			cut_el.append([])
	except:
		out1.append(False)
		cut_el.append([])		

OUT = out1, cut_el

i tried this… i think i have to involve geometry, but i just need booleans!

import clr

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

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

clr.AddReference('System')
from System.Collections.Generic import List

clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)

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

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


openings = UnwrapElement(IN[0])

output = []

for i in openings:
	output.append(i.IsVoidInstanceCuttingElement)
	
	
OUT = output

KR

Andreas

i think i solved it (?)

is this correct ? changed the “else” so i think get correct values…

can i comprehense this script ?

import clr

clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
doc = DocumentManager.Instance.CurrentDBDocument

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

clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)

def tolist(obj1):
	if hasattr(obj1,"__iter__"): return obj1
	else: return [obj1]

elements = UnwrapElement(tolist(IN[0]))
out1 = []
cut_el = []

cutU = InstanceVoidCutUtils
for i in xrange(len(elements)):
	try:
		if cutU.IsVoidInstanceCuttingElement(elements[i]):
			cut1 = cutU.GetElementsBeingCut(elements[i])
			cut1 = [doc.GetElement(id).ToDSType(True) for id in cut1]
			if cut1.Count != 0:				
				out1.append(True)
				cut_el.append(cut1)
			else:
				out1.append(False)
				cut_el.append(None)
	except:
		out1.append(False)
		cut_el.append(None)		

OUT = out1, cut_el

KR

Andreas

1 Like