I’m trying to get the opposite surfaces of columns that are intersected by a beam. I got stuck in how to filter the surfaces that i want, as you can see in the image below:
Update. I’ve managed to make some progress but it’s not the right answer. Some columns don’t have the right surfaces.
can you please post the DYN here or at least the Python code? It will be helpful for those that can help if they had these things
a solution with Python
import clr clr.AddReference('ProtoGeometry') from Autodesk.DesignScript.Geometry import * #import Revit API clr.AddReference('RevitAPI') import Autodesk from Autodesk.Revit.DB import * clr.AddReference('RevitNodes') import Revit clr.ImportExtensions(Revit.GeometryConversion) def findOpposite(lstFaces, curveBeamOffset): for idxA, faceA in enumerate(lstFaces): if faceA.Intersect(curveBeamOffset) == SetComparisonResult.Overlap: normalA = faceA.FaceNormal for idxB, faceB in enumerate(lstFaces): normalB = faceB.FaceNormal if idxA != idxB : if normalA.IsAlmostEqualTo(normalB) or normalA.IsAlmostEqualTo(normalB.Negate()): return faceB lstBeam = UnwrapElement(IN) lstColum = UnwrapElement(IN) lstOpositeFaces =  opt = Options() for beam in lstBeam: curveBeam = beam.Location.Curve curveBeamOffset = Line.CreateBound(curveBeam.GetEndPoint(0) + XYZ(0,0,-1), curveBeam.GetEndPoint(1) + XYZ(0,0,-1)) for col in lstColum: geometryLst = col.get_Geometry(opt) for geo in geometryLst: if isinstance(geo, Solid): oppositeFace = findOpposite(geo.Faces, curveBeamOffset) if oppositeFace is not None: lstOpositeFaces.extend(oppositeFace.ToProtoType()) OUT = lstOpositeFaces
Thank you so much. This really solved my problem!