Сообщество программистов Autodesk в СНГ
ADN Club => AutoCAD .NET API => Тема начата: avc от 29-08-2016, 11:01:40
-
Задачка такая. Мне нужно найти точки пересечения Curve и Plane. Но у плоскости метод IntersectWith принимает только линию. А у Curve IntersectWith требует другой Entity. Но у меня кривая может быть и дугой, и сплайном, а плоскость - это не Entity. Я в тупике. Единственное что нагуглил по схожей теме - там искали пересечение линии и поверхности. И даже для этого случая предлагалось создать солиды и искать их пересечение. Жуть. К моему случаю не подходит т.к. плоскость бесконечна, из нее солида не сделать. Мне даже не обязательно найти сами точки. Достаточно определиться сколько раз кривая пересекает плоскость - 1 или несколько.
На всякий случай обрисую зачем мне это надо. Я режу солид по нормали к касательной к одному из его ребер. Ребро солида - это та сама кривая, а плоскость строю для Slice. Но мне попадаются таки изогнуты солиды, что змея откусывает себе хвост - плоскость разреза пересекает тело несколько раз. Надо как-то это проверить. И сразу в голову приходит проверить плоскость на лишние пересечения с этим ребром.
Может я не нашел каких-то простых методов?
Заранее благодарен всем кто поможет.
-
Этот способ не подходит: Пересечение между плоскостью и кривой в .NET (http://adn-cis.org/peresechenie-mezhdu-ploskostyu-i-krivoj-v-.net.html) ?
-
Не понимаю, как я сам эту статью не нашел... ведь долго искал же...
Но результат не порадовал. Проецирование кривой на плоскость работает не верно. Проецируется бесконечно удлиненная кривая, а не тот ее кусок, что существует в реале. Соответственно точек пересечения всегда получается 2, вместо одной.
Посмотрите на картинке:
(https://s12.postimg.org/qacj0i7t5/image.png) (https://postimg.org/image/qacj0i7t5/)
я сделал три плоскости по радиусам большой дуги этого бублика и спроецировал на них дугу (зеленые линии). Средняя линия должна была закончится не доходя до центра, если б это была честная проекция.
-
Разобрался. Там ошибка в коде. IntersectWith нельзя писать с параметром Intersect.ExtendBoth. Значения Non у этого перечисления нет. Я попробовал невнятное значение Intersect.OnBothOperands. Это сработало! Теперь все хорошо.
-
Я попробовал невнятное значение Intersect.OnBothOperands
Чего же невнятное??? Очень даже внятное. Проверка пересечения при принадлежности точки пересечения обеим операндам пересечения (обеим кривым).
-
Проецируется бесконечно удлиненная кривая, а не тот ее кусок, что существует в реале
Я так понял, что с этим ты тоже уже разобрался - проецируется сама кривая без всякого удлинения. Это уже в процессе выполнения проверки пересечения возможны нюансы, связанные со значением параметра intersectType.
-
Да, вы правы, действительно уединение при поиске пересечения происходило. А про невнятный аргумент - в самом деле без вашего коментария нереально понять о чем речь. Теперь и остальные 2 варианта стали понятны. Спасибо!