Нахождение конечных точек оси цилиндрического твердого тела

Автор Тема: Нахождение конечных точек оси цилиндрического твердого тела  (Прочитано 7453 раз)

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


Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Тема в общем не раз поднималась на двг.ру с обширным обсуждением.
По данной теме - а разрезанный пополам тор это цилиндр?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
По данной теме - а разрезанный пополам тор это цилиндр?
Чего вдруг?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Ну это такой тонкий намек, что вышепреведенный код анализа геометрии его так посчитает - это первое из простых тел которое мне пришло в голову которое не подойдет под данный алгоритм. В то-же время цилиндр полученный сдвигом окружности вдоль полилинии из двух и более сегментов лежащих на одной прямой - у него НЕ будет опознан как цилиндр - хоть таковым и является - в общем алгоритм годится для частных случаев.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Дима_, в задаче четко указано, что на вход подаётся цилиндр. Это контракт для этой задачи. Что касается косого цилиндра, то в контракте это не оговорено и поэтому могут быть разночтения. Развить алгоритм на цилиндр с тремя и более образующими не представляет проблемы.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Дима_, в задаче четко указано, что на вход подаётся цилиндр.
Если цилиндр это только тот объект который создан соотв. командой - то ИХМО не нужно лезть в Brep геометрию - я несколько лет назад показывал как вытащить данную информацию и на лиспе и на .Net. Если мы решаем обнаружить цилиндр - в произвольном 3Д теле - то данный алгоритм имеет "двухсторонние" ошибки (как может не верно посчитать цилиндром тело которое им не является - разрезанный тор, так и не увидеть цилиндра в корректном цилиндрическом теле).

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Если цилиндр это только тот объект который создан соотв. командой - то ИХМО не нужно лезть в Brep геометрию - я несколько лет назад показывал как вытащить данную информацию и на лиспе и на .Net.
Если ты имеешь в виду вытащить эту информацию через свойства 3DSolid (пример как это сделать на C++ при помощи COM: http://adndevblog.typepad.com/autocad/2012/05/how-to-obtain-acdb3dsolid-opm-properties-in-autocad-using-objectarxc.html), то к большому сожалению эта информация очень легко теряется и без BREP до неё не добраться:

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

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Это да - но все еще проще - если мы знаем что это цилиндры (не важно как сделеанные и есть ли в них "история") - нам достаточно получить GetGripPoints - вот пример с ящиками - с цилиндрами еще проще - ничего преобразовывать не нужно.
http://forum.dwg.ru/showpost.php?p=954670&postcount=8

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
нам достаточно получить GetGripPoints
Да. Этот способ выглядит наиболее оптимальным. Интересно, что если AutoCAD показывает только одну ручку, тем не менее GetGripPoints возвращает две (я это получил объединив два цилиндра с одинаковой осью, но разными радиусами):



« Последнее редактирование: 23-09-2015, 16:42:55 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Интересно, что если AutoCAD показывает только одну ручку, тем не менее GetGripPoints возвращает две
На box'ы так-же не зависимо от количества ручек автокад тем не менее находит 8 точек - остается только понять как в них "повернут" примитив (порядок у них - по крайней мере в той версии, насколько я помню, "скакал") - на видео по вышеуказанной ссылке это показано.
з.ы. иногда мне кажется, что к части функционала как-будто сознательно не дают доступа разработчикам.