Solid Intersect |
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)

public SolidCurveIntersection IntersectWithCurve(
Curve curve,
SolidCurveIntersectionOptions options
)
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;
}
}
}
}
}
}
