Получить объект Дуги из полилинии

Автор Тема: Получить объект Дуги из полилинии  (Прочитано 12361 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Подскажите как лучше всего из объекта
Polyline2d получить объект Arc.
Конечно же только в том
месте, где GetBulgeAt(index) не равно 0

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Получить объект Дуги из полилинии
« Ответ #1 : 11-09-2017, 21:52:32 »
У себя в коде нашел есть такая штука
Код - C# [Выбрать]
  1. CircularArc2d Arc2d = pl.GetArcSegment2dAt(i);
и из нее надо получить объект Arc


Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Получить объект Дуги из полилинии
« Ответ #2 : 11-09-2017, 21:54:23 »
Ну так осталось только создать дугу: https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2015/ENU/AutoCAD-NET/files/GUID-EF4D9742-F41F-48E1-BDDC-235069C52176-htm.html
Все нужные параметры - в объекте calc_2d

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Получить объект Дуги из полилинии
« Ответ #3 : 11-09-2017, 21:58:51 »
А ну все понятно вот это же просто

Код - C# [Выбрать]
  1. Polyline pl;
  2. ...
  3. CircularArc2d arc2d = pl.GetArcSegment2dAt(i);
  4. Arc arc = New Arc(new Point3d(arc.Center.X, arc.Center.Y, 0) ,
  5.                        arc.Radius,
  6.                        arc.StartAngle,
  7.                        arc.EndAngle);
  8.  


Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Получить объект Дуги из полилинии
« Ответ #4 : 11-09-2017, 22:17:20 »
А ну все понятно вот это же просто
Ну не так всё просто. Посмотри: http://adndevblog.typepad.com/autocad/2012/05/converting-polyline-arc-to-acdbarc-and-vice-versa.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Получить объект Дуги из полилинии
« Ответ #5 : 11-09-2017, 22:36:11 »
Кстати, самое смешное, что простейший способ получить все дуги и отрезки из полилинии - использовать метод Explode для неё. Ну а взять i-ый элемент из коллекции отрезков и дуг, на которые разваливается полилиния, совсем не проблема. Не забудь только для остальных примитивов, полученных в результате расчленения вызвать метод Dispose(). Думаю что этот метод будет не слишком быстрый и использовать его при массовых вычислениях не стоит.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Получить объект Дуги из полилинии
« Ответ #6 : 12-09-2017, 18:53:44 »
Все же через explode придется делать
т.к. через GetArcSegment2dAt
StartAngle возвращает ноль, а это ни как ни катит.
 

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Получить объект Дуги из полилинии
« Ответ #7 : 12-09-2017, 18:56:24 »
Еще вопрос.
Я надеюсь, что набор объектов через explode
вернется в нормальной последовательности?
Т.е. в той последовательноси, в которой
рисовали полилинию.

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Получить объект Дуги из полилинии
« Ответ #8 : 12-09-2017, 18:58:46 »
Думаю что этот метод будет не слишком быстрый и использовать его при массовых вычислениях не стоит.
В рельной работе полиниий может быть примерно 2 сотни штук
В среднем одна полилиния может содержать 60 отрезков.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Получить объект Дуги из полилинии
« Ответ #9 : 12-09-2017, 19:00:51 »
Т.е. в той последовательноси, в которой
рисовали полилинию.
Надеюсь. А тебе нужны все дуги из полилинии или только одна конкретная? Если одна, то я могу немного позже предложить другой алгоритм.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Получить объект Дуги из полилинии
« Ответ #10 : 12-09-2017, 19:01:32 »
В рельной работе полиниий может быть примерно 2 сотни штук
В среднем одна полилиния может содержать 60 отрезков.
Ну это немного для современных PC.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Получить объект Дуги из полилинии
« Ответ #11 : 12-09-2017, 19:04:34 »
А тебе нужны все дуги из полилинии или только одна конкретная?
Мне нужны все дуги.
Но вреальной работе их не так много
(десятки штук у одной полилинии).

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Получить объект Дуги из полилинии
« Ответ #12 : 12-09-2017, 19:09:05 »
Причем мне нужно еще немного по хитрому.
К примеру у полилинии я беру дугу.
Но для реальной задчи мне нужны две дуги
(две ее половинки: от начала до середины и от середины до конца)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Получить объект Дуги из полилинии
« Ответ #13 : 12-09-2017, 19:13:19 »
Но для реальной задчи мне нужны две дуги
(две ее половинки: от начала до середины и от середины до конца)
А вот это уже другая задача.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Получить объект Дуги из полилинии
« Ответ #14 : 12-09-2017, 19:19:20 »
У меня уже написана задача, которая возвращает массив из трёх точек

Код - vb.net [Выбрать]
  1. Dim arc As CAD_GEO.CircularArc2d = pl.GetArcSegment2dAt(indexNode)
  2. Dim Count As Integer = 3
  3. Dim p2d() = arc.GetSamplePoints(Count)

 (начало середина и конец). Осталось только по этим
трем точкам и точке центра окружности построить две дуги.