GetOffsetCurves для полилинии. Когда возвращается несколько кривых?

Автор Тема: GetOffsetCurves для полилинии. Когда возвращается несколько кривых?  (Прочитано 9064 раз)

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

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Из описания (https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2015/ENU/AutoCAD-NET/files/GUID-80D106A9-A16F-4F32-BDE2-5C5B1F7C2C84-htm.html):
Цитировать
In some cases it may be necessary for the offset result to be several curves.
Я никак не могу представить, что это могут быть за случаи. Больше всего интересует, возможен ли хотя бы в теории такой вариант для полилинии, которая AcDbPolyline (DXF: LWPOLYLINE)?

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Ответ нашёлся сам собой при тестировании. Если полилиния сама себя пересекает образуя петли, то оффсет "вовнутрь" выдаст внутри петель замкнутые контуры, которые будут отдельными объектами. Возможно, могут быть и другие варианты. Придётся предусматривать, прохалявить не получилось в этот раз  :D

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Если полилиния сама себя пересекает образуя петли...
Эти "self-intersecting curves" часто являются причинами порождения всевозможных глюков в работе. Наиболее отчётливо это заметно при попытках осуществить экструзию, револвинг и т.п. операции. На мой взгляд для таких примитивов необходимо выполнять предварительную оптимизацию.
« Последнее редактирование: 15-09-2017, 22:32:19 от Debalance »

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
В моём случае полилиния - это трасса трубопроводной сети. Для неё самопересечение допустимо (хотя встречается крайне редко).

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
В моём случае полилиния - это трасса трубопроводной сети...
А как на счёт такого "ломаного" оффсета в данном случае? ДопустИм ли он?

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Да, допустим. Оффсет нужен для получения контура вокруг участка сети. Контур нужен для визуальной идентификации участка сети. Это дальнейшее развитие вот этой темы: http://adn-cis.org/forum/index.php?topic=8011.0
Получается вполне симпатично:

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Контур нужен для визуальной идентификации участка сети
Ну теперь понятно.....

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Ответ нашёлся сам собой при тестировании. Если полилиния сама себя пересекает образуя петли, то оффсет "вовнутрь" выдаст внутри петель замкнутые контуры, которые будут отдельными объектами. Возможно, могут быть и другие варианты. Придётся предусматривать, прохалявить не получилось в этот раз  :D
Интересно. Я у себя проверил на нескольких примерах и получал по одной петле для таких полилиний. Правда проверял в какой-то из старых версий AutoCAD.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Хм. А это интересно. Я проверял только в 2016. Надо будет проверить в версиях постарше.

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Правда проверял в какой-то из старых версий AutoCAD
Тестировал на 2012. Итог: оффсет "ломает" результирующую полилинию (сплайн). Впрочем термин "старая версия" несколько пространен. Интересно, что Вы подразумеваете под ним?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Впрочем термин "старая версия" несколько пространен. Интересно, что Вы подразумеваете под ним?
2008-ую. Причем проверял при помощи ARXDBG - там есть Curve test. Впрочем я не посмотрел её код. Может она рисует только первую из добавленных в массив кривых.
P.S.: Код пересмотрел - добавляет все полученные кривые.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
2008-ую...
У меня нет возможности проверить на этой версии, но что-то подсказывает, что:
... она рисует только первую из добавленных в массив кривых ...

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
P.S.: Код пересмотрел - добавляет все полученные кривые.
А каков результат работы команды _OFFSET на данной версии AutoCAD? Тот же?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
А каков результат работы команды _OFFSET на данной версии AutoCAD? Тот же?
Вот результат команды _OFFSET:



GetOffsetCurves даёт в точности такой же результат.

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Тестовая кривая во вложении.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение