Не удается найти пересечение для тела и линии из-за порядка создания элемента - PullRequest
0 голосов
/ 15 февраля 2019

Я пытался получить линию пересечения для вертикального столбца, сплошной и центральной линии балки, но результат менялся, когда менялся порядок создания этих элементов.

Случай 1: когда я создал 2 вертикалиЗатем в столбцы добавьте балку между ними, я получил правильный результат.

Случай 2: Когда я сначала создал их балку, а затем добавил 2 вертикальных столбца к каждому концу балки, результат был бы смешным:

  1. Порядок соединения по умолчанию (предпочтение отдается столбцам): пересечение не найдено

  2. переключение порядка соединения 1-й раз (предпочтение отдается лучам): пересечение не найдено

  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 и получить длину линии отрезка пересечения, но я при отладке intersection.SegmentCount = 0.

1 Ответ

0 голосов
/ 15 февраля 2019

Я только что ответил на ваш идентичный вопрос в дискуссионном форуме Revit API на SolidCurveIntersection Не могу найти кривую пересечения сегмента .Я повторяю это и здесь:

Я бы предложил использовать функцию приведения луча для съемки луча вдоль линии расположения луча, а не SolidCurveIntersection.IntersectWithCurve.Посмотрите на три примера FindReferencesByDirection SDK, особенно FindColumns.

Вот сообщение в блоге , в котором обсуждается этот пример и метод FindReferencesByDirection , предоставляющий доступ к функциональности трассировки лучей Revit API до более поздней версии.введение ReferenceIntersector класса .

...