Сообщество программистов Autodesk в СНГ
ADN Club => AutoCAD .NET API => Тема начата: Volody1983 от 09-04-2014, 17:06:07
-
Добрый день!
Нахожу пересечение блока и выноски с помощью метода IntersectWith.
Почему-то если блок допустим круглой формы то метод находит точку пересечения, как буд-то блок описан квадратом.
Это нормально? Если так, то может есть варианты как это обойти. Задача программно выноску перенести к краю блока.
Картинка с визуализацией ниже:
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fs21.postimg.org%2Fr8bjx6jxf%2Fscreen3.jpg&hash=8346c1cb68191c3fb883394838713fb2) (http://postimg.org/image/r8bjx6jxf/)
Заранее спасибо!
-
Это нормально?
Да. Так задумано. Если один из примитивов блок, то пересечение ищется не с самим блоком, а с BoundingBox (или GeomExtents - окаймляющим параллелепипедом) для этого блока. Чтобы найти реальные точки пересечения необходимо или находить пересечения с примитивами расчлененного блока, или находить пересечения с элементами составляющими блок с учетом системы координат самого блока, точки вставки блока, углов поворота и масштабирования, что часто не очень просто. Особенно если есть вложенные блоки.
Есть статья, которую я еще не переводил: http://adndevblog.typepad.com/autocad/2012/12/intersecting-any-entity-with-a-blockreference-and-retrieving-the-intersection-points.html (это ObjectARX, но реализовать на .NET API можно аналогично)
-
Александр воспользовался методом explode. Это помогло найти правильную точку. Вложенных блоков у меня нет, но обратил внимание, что если в блоке есть HATCH то IntersectWith не отрабатывает и вываливается ошибка. Вообщем убрал из обработки HATCH помогло. Может у Вас в голову еще что приходит кроме HATCH?
-
Может у Вас в голову еще что приходит кроме HATCH?
В мою голову ( :D ) приходят еще тексты, мультитексты, атрибуты и определения атрибутов - для них тоже самое, что и для вставки блока. Если нужно получить точку пересечения со штриховкой, то можно найти её контуры(ы) и соотвественно точку пересечения с ними.