Revit 2025 API
SolidIntersect |
Calculates and returns the intersection between a curve and this solid.
Namespace: Autodesk.Revit.DB
Assembly: RevitAPI (in RevitAPI.dll) Version: 25.0.0.0 (25.0.0.0)
Syntax
public SolidCurveIntersection IntersectWithCurve( Curve curve, SolidCurveIntersectionOptions options )
Public Function IntersectWithCurve ( curve As Curve, options As SolidCurveIntersectionOptions ) As SolidCurveIntersection
public: SolidCurveIntersection^ IntersectWithCurve( Curve^ curve, SolidCurveIntersectionOptions^ options )
member IntersectWithCurve : curve : Curve * options : SolidCurveIntersectionOptions -> SolidCurveIntersection
Parameters
- curve Curve
- The curve.
- options SolidCurveIntersectionOptions
- The options. If NULL, the default options will be used.
Return Value
SolidCurveIntersectionThe intersection results.

Exception | Condition |
---|---|
ArgumentException | The input curve is not bound. -or- The input solid is not a closed volume. |
ArgumentNullException | A non-optional argument was NULL |

private void FindColumnRebarIntersections(Document document, FamilyInstance column) { // We will be computing the total length of the rebar inside the column double totalRebarLengthInColumn = 0; // Find rebar hosted by this column RebarHostData rebarHostData = RebarHostData.GetRebarHostData(column); if (rebarHostData == null) { return; } IList<Rebar> rebars = rebarHostData.GetRebarsInHost(); if (rebars.Count == 0) { return; } // Retrieve geometry of the column Options geomOptions = new Options(); geomOptions.ComputeReferences = true; geomOptions.DetailLevel = ViewDetailLevel.Fine; GeometryElement elemGeometry = column.get_Geometry(geomOptions); // Examine all geometry primitives of the column foreach (GeometryObject elemPrimitive in elemGeometry) { // Skip objects that are not geometry instances GeometryInstance gInstance = elemPrimitive as GeometryInstance; if (gInstance == null) { continue; } // Retrieve geometry of each found geometry instance GeometryElement instGeometry = gInstance.GetInstanceGeometry(); foreach (GeometryObject instPrimitive in instGeometry) { // Skip non-solid sobject Solid solid = instPrimitive as Solid; if (solid == null) { continue; } SolidCurveIntersectionOptions intersectOptions = new SolidCurveIntersectionOptions(); foreach (Rebar rebar in rebars) { // Get the centerlines for the rebar to find their intersection with the column bool selfIntersection = false; bool suppresHooks = false; bool suppresBends = false; IList<Curve> curves = rebar.GetCenterlineCurves(selfIntersection, suppresHooks, suppresBends, MultiplanarOption.IncludeOnlyPlanarCurves, 0); // Examine every segment of every curve of the centerline foreach (Curve curve in curves) { SolidCurveIntersection intersection = solid.IntersectWithCurve(curve, intersectOptions); for (int segment = 0; segment <= intersection.SegmentCount - 1; segment++) { // Calculate length of the rebar that is inside the column Curve curveInside = intersection.GetCurveSegment(segment); double rebarLengthInColumn = curveInside.Length; totalRebarLengthInColumn = totalRebarLengthInColumn + rebarLengthInColumn; } } } } } }
Private Sub FindColumnRebarIntersections(document As Document, column As FamilyInstance) ' We will be computing the total length of the rebar inside the column Dim totalRebarLengthInColumn As Double = 0 ' Find rebar hosted by this column Dim rebarHostData__1 As RebarHostData = RebarHostData.GetRebarHostData(column) If rebarHostData__1 Is Nothing Then Return End If Dim rebars As IList(Of Rebar) = rebarHostData__1.GetRebarsInHost() If rebars.Count = 0 Then Return End If ' Retrieve geometry of the column Dim geomOptions As New Options() geomOptions.ComputeReferences = True geomOptions.DetailLevel = ViewDetailLevel.Fine Dim elemGeometry As GeometryElement = column.Geometry(geomOptions) ' Examine all geometry primitives of the column For Each elemPrimitive As GeometryObject In elemGeometry ' Skip objects that are not geometry instances Dim gInstance As GeometryInstance = TryCast(elemPrimitive, GeometryInstance) If gInstance Is Nothing Then Continue For End If ' Retrieve geometry of each found geometry instance Dim instGeometry As GeometryElement = gInstance.GetInstanceGeometry() For Each instPrimitive As GeometryObject In instGeometry ' Skip non-solid sobject Dim solid As Solid = TryCast(instPrimitive, Solid) If solid Is Nothing Then Continue For End If Dim intersectOptions As New SolidCurveIntersectionOptions() For Each rebar As Rebar In rebars ' Get the centerlines for the rebar to find their intersection with the column Dim selfIntersection As Boolean = False Dim suppresHooks As Boolean = False Dim suppresBends As Boolean = False Dim curves As IList(Of Curve) = rebar.GetCenterlineCurves(selfIntersection, suppresHooks, suppresBends, MultiplanarOption.IncludeOnlyPlanarCurves, 0) ' Examine every segment of every curve of the centerline For Each curve As Curve In curves Dim intersection As SolidCurveIntersection = solid.IntersectWithCurve(curve, intersectOptions) For segment As Integer = 0 To intersection.SegmentCount - 1 ' Calculate length of the rebar that is inside the column Dim curveInside As Curve = intersection.GetCurveSegment(segment) Dim rebarLengthInColumn As Double = curveInside.Length totalRebarLengthInColumn = totalRebarLengthInColumn + rebarLengthInColumn Next Next Next Next Next End Sub
No code example is currently available or this language may not be supported.
No code example is currently available or this language may not be supported.
See Also