|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
LISP для поиска групп (наборов) одинаковых примитивов и замена их блоком
Инженегр
Регистрация: 05.05.2009
Сообщений: 11
|
||
Просмотров: 20431
|
|
||||
Давно я пялюсь на твой пост и решил таки помочь.
1. Скажем, выбрали несколько элементов для объединения в блок. Создали набор из них и первый элемент в наборе определили ка опорный элемент в блоке. 2. Создали из набора блок. 3. Относительно опорного элемента в блоке описали приращения координат точек вставки (начал и окончаний линий) элементов блока. 4. Выбрали в модели все элементы, схожие с опорным элементом блока (создали набор). 5. Поочередно к каждому элементу набора применили поиск элементов, тип которых, координаты точек вставки (начало и окончание отрезков) совпадают с данными, полученными после пересчета приращений к координатам элемента из набора. (надеюсь меня поняли). 6. Проверили количество совпавших значений и если количество совпадает, то заменили указанные элементы на блок, заранее пересчитав его новое вхождение. Задача вполне реализуема. Только мне влом это делать. Повороты объектов не влияют на результат. Как бы их не повернули, приращения описаны ао трем точкам - по трем и поиск ведется. |
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,843
|
Ихмо как я все это вижу - задача вполне реализуема для (от простого к сложному) кругов, дуг, линий, полилиний, сплайнов. То есть берем объект записываем его "пространственно независимые" характеристики - то есть для кругов все просто - радиус, для дуг еще и угол, для линий - длинна, для полилиний координаты точек относительно первой + признак замкнутости, для сплайнов в общем аналогично. Ищем с такими же характеристиками и если они есть определяем как блок и углы наклона для каждого вхождения. Но как это сделать с областями и солидами? Допустим в полуавтоматическом режиме мы можем отсеять все с разным объемом и площадью поверхности (контрольное подтверждение юзером для уверенности), но как их правильно соориентировать в трех плоскостях - крутить с шагом х (по всем 3) и проверять момент - очень долго. А для двухмерки - в принципе ничего сложного.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Да, казалось бы простая задача, найти в модели 3Dсолид по образцу.
Сравнивать площади и объемы бессмысленно. Вот файл с примером. 3 совершенно разные фигуры, но с абсолютно одинаковым объемом и площадью поверхности. Если 3D солид где-то в африке и повернут, координаты центра массы ничего не дают. Этот центр дал бы толк, если бы был относительно каких-то координат на теле солида, но их-то нет. Забавная задачка, однако. Может у кого есть на сей счет идеи? Region и Surface тоже не поддаются идентификации. Так что разваливать на части солид безтолку. Последний раз редактировалось Supermax, 05.06.2009 в 14:41. |
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,843
|
Еще для солидов можно поряться в истории - но это только с 2007 формата, да и все равно получить 100% гарантию идентичности можно только для самых простых - ящиков, цилиндров, шаров, конусов - в общем сделанных спец. командами.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
zamtmn
А я, на половину хохол. Мне все надо, "Щоб було". И штриховки надо и регионы и сало с прослойкой мяса, тоже НАДО. Мысль одна есть, но корявая. - Измеряем объем тела. - Создаем шар с таким же объемом - Помещаем шар, в частности точку центра массы в центр массы объекта и вычитаем из объекта шар. - Запоминаем массу и площадь поверхности полученного уродца. Можно процедуру повторить несколько раз, перемещая шар в центр массы остатка солида и вычитая этот шар из остатка. Все показатели сохраняются и сравниваются для такой же процедуры с каждым подопытным. Принцип прост. как бы ни был повернут объект, если из него вычесть шар той же массой, что и он сам, должен получится идентичный остаток, как и у образца. Но, сей способ мне напоминает лечение гланд через ... ну вы меня поняли. Последний раз редактировалось Supermax, 05.06.2009 в 15:15. |
||||
![]() |
|
||||
Э...! Ты опоздал. Я ее уже решил.
Солид просто взрываем до тех пор, пока от него не останутся одни примитивы. Линии, дуги и круги. Со штриховками, регионами и пр. объектами тоже самое делаем. Сохраняем в блок и солид и тот мусор, на который он распался. все приращения делаем по мусору, поскольку это грани бывшего солида или линии штриховки. На каждый сложный объект получаем бездну координат его точек. Весь муор после убиваем. Функцию взрывания объекта с выдачей указателей на полученные составные части уже VVA написал. Даже с сохранением образца. Осталось их осмыслить и дальше уже рутинная работа по написанию проги. Такая интересная была задача! Что сейчас решать? Опять скука начинается. Кстати эта задача очень полезная. Мне вот к примеру очень надо заменять в некоторых моделях гайки, сделанные 3D солидами на вхождение блока "Гайка" с установленными параметрами. Я постепенно создаю "виртуальные изделия" и заменяю ими в моделях простую графику. Но поскольку все охватить мне пока не под силу, приходится довольствоваться 3Dсолидами. Последний раз редактировалось Supermax, 05.06.2009 в 15:46. |
||||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,542
![]() |
>>Осталось их осмыслить и дальше уже рутинная работа по написанию проги.
осталось самое малое. сделать)) 10-100 тысяч примитивов. в 3д с расчетом трансформаций сравнить с другдружкой? если не применять никаких оптимизаций, когда напишешь придется очень долго ждать пока программа отработает. Еще нужно учесть как будут разбиваться солиды, будет ли эта процедура однозначной вне зависимости от размера и поворота. что пока не факт. Последний раз редактировалось zamtmn, 05.06.2009 в 18:38. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,843
|
Ну вобще еще сплайны - но к сожалению не все солиды могут довзырваться до такого состояния - самый простой пример - стандартный тор - тот самый командой _torus - а уж сложных их бесчисленное множество - чуть посложнее и привет, да и пример разных солидов с одинаковым конечным результом взрыва:
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 15.04.2009
Сообщений: 17
|
Сперва бы для 2D задачу решили, а уж потом в 3D лезть. Очень нужно(работаю с файлами в которых блоки разбиты на полилинии, при этом размер файлов просто зашкаливает...)
Хотелось бы реализовать не только замену набора путем объединения в блок, но и замену набора на любой другой объект. Последний раз редактировалось noiseless, 05.06.2009 в 23:35. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,843
|
Да с 2д все пока ясно - просто быть может в обсуждении родиться принципиально иной подход который "и то, и это" - а мне лично без 3д блокировть - ну совсем не интересно - весь объем как раз солиды жрут с ними практической пользы больше.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Инженегр Регистрация: 05.05.2009
Сообщений: 11
|
Цитата:
Задача так скажем, очень не подобна, а _overkill порой творит такие "чудеса", короче по моему мнению опасная вещь! |
|||
![]() |
|
||||
Цитата:
Я, решил эту задачу для полилиний, но в более общем варианте. В моем случае, в чертеже ищутся все одинаковые полилинии, которые не только могут иметь разное местоположение, быть повернуты на различный угол, но и быть нарисованы различными методами. Другими словами, в полилиниях могут быть разные направления обхода, различные начальные точки, различное количество вершин. Дополнительно, находятся все зеркальные исполнения... Сразу скажу - взрывать не стоит, иначе для средненького чертежа будет необходимо слишком много времени и оперативной памяти. Все действия необходимо производить математическими и аналитическими методами. По поводу твердых тел, вы действительно думаете, что сравнение только вершин, даст достаточную точность? Для решение этой задачи, необходимо проработать следующие алгоритмы: 1. сравнение тел по площади и объему - для последующего более точного сравнения тел, которые действительно могут быть одинаковыми. 2. в каждом теле есть центроид, он не зависит от ориентации тела в пространстве, необходимо разработать программу, меняющую ориентацию вокруг этой точки и выбрать вторую или несколько вторых для каждого тела. Если второй точкой будет вершина, то для куба это уже восемь точек, а для цилиндра ни одной. Думаю, удобнее всего использовать центральные точки граней - они описаны в телах для каждой грани. 3. Сравнение совпадающих тел. Для простоты, после доворота, можно перетащить тела до совпадения центроидов и проанализировать результат булевой операции двух тел, например на объем... ps. Для быстрой работы, лучше все это делать аналитически, без перемещений, вращений, вычитаний реальных тел. Все можно выполнить математически, но на это нужно больше сил времени и знаний... |
||||
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Сейсмозащита и сейсмоизоляция существующих, построенных зд. | IANationalInformAgentstvo | Прочее. Архитектура и строительство | 216 | 20.01.2015 16:51 |
Закладные лифтовых приямков | винсент75 | Поиск литературы, чертежей, моделей и прочих материалов | 13 | 11.08.2009 10:16 |
Предложения по расчетным моделям сооружений | aldt | Расчетные программы | 8 | 06.07.2009 17:53 |
Юмор 2007 | Огурец | Разное | 1172 | 29.12.2007 11:16 |
Прога для поиска одинаковых папок | Artiznov | Разное | 2 | 08.05.2007 11:09 |