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

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

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 видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Поставьте дистанцию смещения раз в 5 меньше. Картинка должна получиться веселей.

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Вот результат команды _OFFSET:
Мудрёная кривая на мой взгляд, да и шаг смещения велик. Более показательным был бы пример с видео Дмитрия Загорулькина.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
С меньшим шагом:



Т.е. оффсетится только одна из петель самопересекающейся кривой (с шагом еще в 10 раз меньше аналогично).

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

Оффлайн Debalance

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

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

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

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Ага. Кажется понял в чем проблема. Если кривая замкнутая (фактически), то получается одна петля, а если её разомкнуть, то вот так (три отдельных сегмента):



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

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

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

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
С замкнутыми самопересекающимися полилиниями офсет довольно весёлым получается...
Я раньше говорил что нужна предварительная оптимизация... а то возможна куча всяческих глючных вариантов.
Возможно, это какой-то баг
Это не баг, это фирменная "фича" от Autodesk  ;D

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Да и пусть. В моём случае вероятность появления объекта такой конфигурации нулевая. Это невероятно, чтобы трубопровод сам себя пересёк, да ещё и замкнулся  ;D

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Это не баг, это фирменная "фича" от Autodesk 
В качестве интереса протестировал тот же чертёж на BricsCAD вот что получается:

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Да и пусть...
Не могу согласиться.
В моём случае ...
Мне кажется полезнее смотреть дальше и шире, думая о насущных проблемах всего сообщества на этом сайте...

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
думая о насущных проблемах всего сообщества на этом сайте...
Думаю ненно и нощно. Ключевое слово: "насущных"  ;)
Есть подозрение, что можно по шапке получить за вопрос, но жутко интересно:
Цитировать
В качестве интереса протестировал тот же чертёж на BricsCAD вот что получается:
А при оффсете в другую сторону какой результат?
« Последнее редактирование: 17-09-2017, 18:37:13 от Дмитрий Загорулькин »

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Ну теперь понятно.....
Лучше один раз увидеть...

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
А при оффсете в другую сторону какой результат?
А вот такой - идеальный результат (кривая синего цвета):


Более того усложнил задачу, нарисовав сложную "лессажу" из сплайна. И тут отработка на пять баллов:

Всё строится в два клика как говорится без "проблем и без систем". В общем Автокаду такое и не снилось.

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Лучше один раз увидеть...
Поздравляю - весьма достойно!