Сообщество программистов Autodesk в СНГ
Статьи => Опубликованные статьи => Тема начата: ADSK от 22-09-2015, 21:30:09
-
Нахождение конечных точек оси цилиндрического твердого тела (http://adn-cis.org/naxozhdenie-konechnyix-tochek-osi-czilindricheskogo-tverdogo-tela.html)
-
Тема в общем не раз поднималась на двг.ру с обширным обсуждением.
По данной теме - а разрезанный пополам тор это цилиндр?
-
По данной теме - а разрезанный пополам тор это цилиндр?
Чего вдруг?
-
Ну это такой тонкий намек, что вышепреведенный код анализа геометрии его так посчитает - это первое из простых тел которое мне пришло в голову которое не подойдет под данный алгоритм. В то-же время цилиндр полученный сдвигом окружности вдоль полилинии из двух и более сегментов лежащих на одной прямой - у него НЕ будет опознан как цилиндр - хоть таковым и является - в общем алгоритм годится для частных случаев.
-
Дима_, в задаче четко указано, что на вход подаётся цилиндр. Это контракт для этой задачи. Что касается косого цилиндра, то в контракте это не оговорено и поэтому могут быть разночтения. Развить алгоритм на цилиндр с тремя и более образующими не представляет проблемы.
-
Дима_, в задаче четко указано, что на вход подаётся цилиндр.
Если цилиндр это только тот объект который создан соотв. командой - то ИХМО не нужно лезть в Brep геометрию - я несколько лет назад показывал как вытащить данную информацию и на лиспе и на .Net. Если мы решаем обнаружить цилиндр - в произвольном 3Д теле - то данный алгоритм имеет "двухсторонние" ошибки (как может не верно посчитать цилиндром тело которое им не является - разрезанный тор, так и не увидеть цилиндра в корректном цилиндрическом теле).
-
Если цилиндр это только тот объект который создан соотв. командой - то ИХМО не нужно лезть в Brep геометрию - я несколько лет назад показывал как вытащить данную информацию и на лиспе и на .Net.
Если ты имеешь в виду вытащить эту информацию через свойства 3DSolid (пример как это сделать на C++ при помощи COM: http://adndevblog.typepad.com/autocad/2012/05/how-to-obtain-acdb3dsolid-opm-properties-in-autocad-using-objectarxc.html), то к большому сожалению эта информация очень легко теряется и без BREP до неё не добраться:
-
Это да - но все еще проще - если мы знаем что это цилиндры (не важно как сделеанные и есть ли в них "история") - нам достаточно получить GetGripPoints - вот пример с ящиками - с цилиндрами еще проще - ничего преобразовывать не нужно.
http://forum.dwg.ru/showpost.php?p=954670&postcount=8 (http://forum.dwg.ru/showpost.php?p=954670&postcount=8)
-
нам достаточно получить GetGripPoints
Да. Этот способ выглядит наиболее оптимальным. Интересно, что если AutoCAD показывает только одну ручку, тем не менее GetGripPoints возвращает две (я это получил объединив два цилиндра с одинаковой осью, но разными радиусами):
-
Интересно, что если AutoCAD показывает только одну ручку, тем не менее GetGripPoints возвращает две
На box'ы так-же не зависимо от количества ручек автокад тем не менее находит 8 точек - остается только понять как в них "повернут" примитив (порядок у них - по крайней мере в той версии, насколько я помню, "скакал") - на видео по вышеуказанной ссылке это показано.
з.ы. иногда мне кажется, что к части функционала как-будто сознательно не дают доступа разработчикам.