由于元素创建的顺序,无法找到实体和直线的交点

时间:2019-02-15 04:23:58

标签: c# revit-api revit

我试图获得垂直圆柱实体和梁中心线的相交线,但是当这些元素的创建顺序改变时,结果却改变了。

案例1:当我创建2根垂直柱然后在它们之间添加梁时,我收到了正确的结果。

案例2:当我首先创建梁时,然后在梁的任一端添加2个垂直列,结果是荒谬的:

  1. 默认连接顺序(列优先):未找到交集

  2. 第一次切换加入顺序(光束优先):找不到交叉点

  3. 第2次切换连接顺序(列再次优先):正确的结果

元素创建的顺序如何影响我的代码?该如何解决?

private static double GetIntersectionLength ( Solid solid, Line line )
    {
        SolidCurveIntersectionOptions opntions = new SolidCurveIntersectionOptions ();
        SolidCurveIntersection intersection = solid.IntersectWithCurve ( line, opntions );
        for ( int index = 0; index < intersection.SegmentCount; index++ )
        {
            Curve segment = intersection.GetCurveSegment ( index );

            if ( segment.Length > 0 )
                return ( segment as Line ).Length;
        }
        return 0;
    }

期望结果:intersection.SegmentCount = 1并获取相交线段的长度,但当调试交点时为I。SegmentCount= 0。

1 个答案:

答案 0 :(得分:0)

我刚刚在SolidCurveIntersection cannot find intersection segment curve的Revit API论坛中回答了您的相同问题。我也在这里重复一遍:

我建议使用射线投射功能沿光束定位线发射射线,而不要使用SolidCurveIntersection.IntersectWithCurve。查看三个FindReferencesByDirection SDK示例,尤其是FindColumns。

这里是blog post discussing that sample and the FindReferencesByDirection method,在以后引入ReferenceIntersector class之前,它提供了对Revit API光线跟踪功能的访问。