Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Алексей (IdeaSoft) от 18-11-2015, 23:44:50

Название: пересечение полилиний
Отправлено: Алексей (IdeaSoft) от 18-11-2015, 23:44:50
Подскажите, что ни так делаю?
Пересечение объектов. Пробовал в acad 2012 b 2014 не получается.
Коллекция точек Point3dCollection возвращается пустая 

Код - vb.net [Выбрать]
  1.  
  2. Imports CAD_DBS = Autodesk.AutoCAD.DatabaseServices
  3. Imports CAD_GEO = Autodesk.AutoCAD.Geometry
  4.          '  ...
  5.           dim obj1 As CAD_DBS.Entity ' как пример это у меня 2d-полилиния замкнутая
  6.           dim obj2 As CAD_DBS.Entity ' как пример это у меня 2d-полилиния разомкнутая
  7.           '  ...      
  8.          dim retPnts = New CAD_GEO.Point3dCollection
  9.          obj2.IntersectWith(obj1, CAD_DBS.Intersect.OnBothOperands, retPnts, IntPtr.Zero, IntPtr.Zero)
  10.  
  11.  
Название: Re: пересечение полилиний
Отправлено: Александр Ривилис от 19-11-2015, 00:00:38
Коллекция точек Point3dCollection возвращается пустая
1) Они реально пересекаются?
2) Они лежат в одной плоскости?
3) Может лучше проверить пересечение проекций на плоскость?
Код - C# [Выбрать]
  1. obj2.IntersectWith(obj1, CAD_DBS.Intersect.OnBothOperands, new Plane(), retPnts, IntPtr.Zero, IntPtr.Zero);
Название: Re: пересечение полилиний
Отправлено: Алексей (IdeaSoft) от 19-11-2015, 00:05:39
Может лучше проверить пересечение проекций на плоскость?
Саша, спасибо большое! Проекция new Plane() помогла и все заработало.
Только вот не понятно зачем делать проекцию, если полилинии двухмерные?
Название: Re: пересечение полилиний
Отправлено: Александр Ривилис от 19-11-2015, 00:08:05
Только вот не понятно зачем делать проекцию, если полилинии двухмерные?
Они в одной плоскости (на одном уровне)? Может есть отличие по Z скажем в 0.000001?
Название: Re: пересечение полилиний
Отправлено: Алексей (IdeaSoft) от 19-11-2015, 00:15:13
Z скажем в 0.000001
Не могу понять откуда  может взяться Z координата ведь объекты LWPOLYLINE плоские.
Может AutoCAD преобразует точки в point3d при расчете внутри библиотеки?
Или может класс Entity представляется по умолчанию - как трехмерный?
Название: Re: пересечение полилиний
Отправлено: Александр Ривилис от 19-11-2015, 00:26:10
Не могу понять откуда  может взяться Z координата ведь объекты LWPOLYLINE плоские.
Мне даже как-то стыдно объяснять, что у полилинии есть еще понятие Уровень, и есть понятие Нормаль, которые и определяют плоскость, в которой расположена полилиния. И что пересечение примитивов происходит в пространстве, а не на плоскости...
Название: Re: пересечение полилиний
Отправлено: Алексей (IdeaSoft) от 19-11-2015, 09:57:45
полилинии есть еще понятие Уровень
Я знаю что есть уровень. И этот уровень тоже =0.
Ну вообщем уже думаю не стоить на эту тему дальше говорить.
Мне все понятно. Все работает и хорошо!
Название: Re: пересечение полилиний
Отправлено: Александр Ривилис от 19-11-2015, 10:42:39
Ну вообщем уже думаю не стоить на эту тему дальше говорить.
Мне все понятно. Все работает и хорошо!
А зря. Выложи фрагмент чертежа с двумя полилиниями. Я проанализирую и скажу в чем причина.
Название: Re: пересечение полилиний
Отправлено: Алексей (IdeaSoft) от 19-11-2015, 11:33:44
Выложи фрагмент чертежа с двумя полилиниями
Хорошо, позднее выложу. Мне интересно в чем тут дело.