| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP для поиска групп (наборов) одинаковых примитивов и замена их блоком

LISP для поиска групп (наборов) одинаковых примитивов и замена их блоком

Ответ
Поиск в этой теме
Непрочитано 28.05.2009, 11:23 #1
LISP для поиска групп (наборов) одинаковых примитивов и замена их блоком
ElectroBOG
 
Инженегр
 
Регистрация: 05.05.2009
Сообщений: 11

Идея в том что бы создать LISP, который будет искать наборы одинаковых примитивов и заменять их соотвытствующим блоком.
К примеру есть чертеж, на котором изображены конструкции состоящие из болтов гаек и тд, а кто то взорвал все блоки, и тепери чертеж состоит из 10-100 тысяч примитивов.
Последовательность примерно такая:
-выбирается опорный примитив (либо блок)
-выбирается контрольный примитив
-выбираются остальные нужные примитивы (блоки)
-объединяются в один блок
-идет поиск примитивов идентичных опорному, с установленной погрешностью
-проверяется наличие соответствующего контрольного примитива, относительно найденного опорного
-проверяется наличие соответствующей группы примитивов относительно наиденых опорных, с установленной погрешностью
-в случае совпадения набор примитивов, заменяется блоком

Сложней но вероятно реализуемо, поиск потенциальных блоков (наборов примитивов) повернутых на определенный угол относительно исходного

Вложения
Тип файла: rar replace.rar (21.9 Кб, 1014 просмотров)


Последний раз редактировалось ElectroBOG, 28.05.2009 в 12:57. Причина: Уточнение
Просмотров: 20983
 
Непрочитано 04.06.2009, 13:57
#2
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Давно я пялюсь на твой пост и решил таки помочь.
1. Скажем, выбрали несколько элементов для объединения в блок. Создали набор из них и первый элемент в наборе определили ка опорный элемент в блоке.
2. Создали из набора блок.
3. Относительно опорного элемента в блоке описали приращения координат точек вставки (начал и окончаний линий) элементов блока.
4. Выбрали в модели все элементы, схожие с опорным элементом блока (создали набор).
5. Поочередно к каждому элементу набора применили поиск элементов, тип которых, координаты точек вставки (начало и окончание отрезков) совпадают с данными, полученными после пересчета приращений к координатам элемента из набора. (надеюсь меня поняли).
6. Проверили количество совпавших значений и если количество совпадает, то заменили указанные элементы на блок, заранее пересчитав его новое вхождение.

Задача вполне реализуема. Только мне влом это делать.

Повороты объектов не влияют на результат. Как бы их не повернули, приращения описаны ао трем точкам - по трем и поиск ведется.
Supermax вне форума  
 
Непрочитано 04.06.2009, 14:22
#3
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Ихмо как я все это вижу - задача вполне реализуема для (от простого к сложному) кругов, дуг, линий, полилиний, сплайнов. То есть берем объект записываем его "пространственно независимые" характеристики - то есть для кругов все просто - радиус, для дуг еще и угол, для линий - длинна, для полилиний координаты точек относительно первой + признак замкнутости, для сплайнов в общем аналогично. Ищем с такими же характеристиками и если они есть определяем как блок и углы наклона для каждого вхождения. Но как это сделать с областями и солидами? Допустим в полуавтоматическом режиме мы можем отсеять все с разным объемом и площадью поверхности (контрольное подтверждение юзером для уверенности), но как их правильно соориентировать в трех плоскостях - крутить с шагом х (по всем 3) и проверять момент - очень долго. А для двухмерки - в принципе ничего сложного.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 04.06.2009, 14:25
#4
ElectroBOG

Инженегр
 
Регистрация: 05.05.2009
Сообщений: 11


ДА! Вероятно тут надо попыхтеть, даже тем кто шарит в LISP.
А народ, занятой, да "ЛОМОВОЙ"!
Одно подтверждается возможность реализации.
ElectroBOG вне форума  
 
Непрочитано 05.06.2009, 14:16
#5
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Да, казалось бы простая задача, найти в модели 3Dсолид по образцу.
Сравнивать площади и объемы бессмысленно. Вот файл с примером. 3 совершенно разные фигуры, но с абсолютно одинаковым объемом и площадью поверхности. Если 3D солид где-то в африке и повернут, координаты центра массы ничего не дают. Этот центр дал бы толк, если бы был относительно каких-то координат на теле солида, но их-то нет.
Забавная задачка, однако.

Может у кого есть на сей счет идеи?

Region и Surface тоже не поддаются идентификации. Так что разваливать на части солид безтолку.
Вложения
Тип файла: dwg
DWG 2004
разные тела.dwg (36.1 Кб, 8546 просмотров)

Последний раз редактировалось Supermax, 05.06.2009 в 14:41.
Supermax вне форума  
 
Непрочитано 05.06.2009, 14:47
#6
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Еще для солидов можно поряться в истории - но это только с 2007 формата, да и все равно получить 100% гарантию идентичности можно только для самых простых - ящиков, цилиндров, шаров, конусов - в общем сделанных спец. командами.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 05.06.2009, 14:58
#7
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


Supermax
Не понимаю зачем тебе солиды? в задаче про них ни слова))
солид в автокаде штука чужеродная. я бы избегал с ним связываться
zamtmn вне форума  
 
Непрочитано 05.06.2009, 15:04
#8
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


zamtmn

А я, на половину хохол. Мне все надо, "Щоб було".
И штриховки надо и регионы и сало с прослойкой мяса, тоже НАДО.

Мысль одна есть, но корявая.
- Измеряем объем тела.
- Создаем шар с таким же объемом
- Помещаем шар, в частности точку центра массы в центр массы объекта и вычитаем из объекта шар.
- Запоминаем массу и площадь поверхности полученного уродца.

Можно процедуру повторить несколько раз, перемещая шар в центр массы остатка солида и вычитая этот шар из остатка. Все показатели сохраняются и сравниваются для такой же процедуры с каждым подопытным.

Принцип прост. как бы ни был повернут объект, если из него вычесть шар той же массой, что и он сам, должен получится идентичный остаток, как и у образца.

Но, сей способ мне напоминает лечение гланд через ... ну вы меня поняли.

Последний раз редактировалось Supermax, 05.06.2009 в 15:15.
Supermax вне форума  
 
Непрочитано 05.06.2009, 15:10
#9
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


Supermax
с солидами задача лиспом не решаема. провозишся с ними потеряешь время и программу не напишешь.
Задача в общем случае (с учетом поворотов-масштабирований) сложна, есть над чем голову ломать и баз солидов
zamtmn вне форума  
 
Непрочитано 05.06.2009, 15:28
#10
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Э...! Ты опоздал. Я ее уже решил.

Солид просто взрываем до тех пор, пока от него не останутся одни примитивы. Линии, дуги и круги. Со штриховками, регионами и пр. объектами тоже самое делаем.

Сохраняем в блок и солид и тот мусор, на который он распался. все приращения делаем по мусору, поскольку это грани бывшего солида или линии штриховки. На каждый сложный объект получаем бездну координат его точек. Весь муор после убиваем.

Функцию взрывания объекта с выдачей указателей на полученные составные части уже VVA написал. Даже с сохранением образца.
Осталось их осмыслить и дальше уже рутинная работа по написанию проги.

Такая интересная была задача! Что сейчас решать? Опять скука начинается.

Кстати эта задача очень полезная. Мне вот к примеру очень надо заменять в некоторых моделях гайки, сделанные 3D солидами на вхождение блока "Гайка" с установленными параметрами. Я постепенно создаю "виртуальные изделия" и заменяю ими в моделях простую графику. Но поскольку все охватить мне пока не под силу, приходится довольствоваться 3Dсолидами.

Последний раз редактировалось Supermax, 05.06.2009 в 15:46.
Supermax вне форума  
 
Непрочитано 05.06.2009, 15:52
#11
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Тут периодически появляется автор Adanaliz-а так у него, как раз решена задача поиска одинаковых солидов и замены повторений на блоки, как хз - возможно там и юзается объем, там прога с прокатом и фасонками работает.
Sleekka вне форума  
 
Непрочитано 05.06.2009, 18:30
#12
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


>>Осталось их осмыслить и дальше уже рутинная работа по написанию проги.

осталось самое малое. сделать))
10-100 тысяч примитивов. в 3д с расчетом трансформаций сравнить с другдружкой? если не применять никаких оптимизаций, когда напишешь придется очень долго ждать пока программа отработает.
Еще нужно учесть как будут разбиваться солиды, будет ли эта процедура однозначной вне зависимости от размера и поворота. что пока не факт.

Последний раз редактировалось zamtmn, 05.06.2009 в 18:38.
zamtmn вне форума  
 
Непрочитано 05.06.2009, 23:01
#13
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от Supermax Посмотреть сообщение
...Солид просто взрываем до тех пор, пока от него не останутся одни примитивы. Линии, дуги и круги...
.
Ну вобще еще сплайны - но к сожалению не все солиды могут довзырваться до такого состояния - самый простой пример - стандартный тор - тот самый командой _torus - а уж сложных их бесчисленное множество - чуть посложнее и привет, да и пример разных солидов с одинаковым конечным результом взрыва:
Вложения
Тип файла: dwg
DWG 2007
пример.dwg (187.6 Кб, 8541 просмотров)
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 05.06.2009, 23:11
#14
noiseless


 
Регистрация: 15.04.2009
Сообщений: 17


Сперва бы для 2D задачу решили, а уж потом в 3D лезть. Очень нужно(работаю с файлами в которых блоки разбиты на полилинии, при этом размер файлов просто зашкаливает...)
Хотелось бы реализовать не только замену набора путем объединения в блок, но и замену набора на любой другой объект.

Последний раз редактировалось noiseless, 05.06.2009 в 23:35.
noiseless вне форума  
 
Непрочитано 05.06.2009, 23:16
#15
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Да с 2д все пока ясно - просто быть может в обсуждении родиться принципиально иной подход который "и то, и это" - а мне лично без 3д блокировть - ну совсем не интересно - весь объем как раз солиды жрут с ними практической пользы больше.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 06.06.2009, 12:16
#16
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


в 2д действительно все ясно похожая задача решена в overkill который есть в исх кодах, это чтобы меньше писать было =)
Sleekka вне форума  
 
Непрочитано 06.06.2009, 12:42
#17
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


>>в 2д действительно все ясно похожая задача решена в overkill который есть в исх кодах, это чтобы меньше писать было =)

Чем 2Д отличается от 3Д? если не рассматривать солиды - ничем
zamtmn вне форума  
 
Автор темы   Непрочитано 06.06.2009, 15:00
#18
ElectroBOG

Инженегр
 
Регистрация: 05.05.2009
Сообщений: 11


Цитата:
Сообщение от Дима_ Посмотреть сообщение
просто быть может в обсуждении родиться принципиально иной подход который "и то, и это"
А в это время отлавливались бы косяки на 2D
Цитата:
Сообщение от Sleekka Посмотреть сообщение
в 2д действительно все ясно похожая задача решена в overkill
Задача так скажем, очень не подобна,
а _overkill порой творит такие "чудеса", короче по моему мнению опасная вещь!
ElectroBOG вне форума  
 
Непрочитано 22.07.2010, 19:14
#19
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,186
<phrase 1=


очень было бы интересно увидеть решение подобной задачи....если оно есть
Apelsinov вне форума  
 
Непрочитано 23.07.2010, 08:53
#20
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Sleekka Посмотреть сообщение
в 2д действительно все ясно похожая задача решена в overkill который есть в исх кодах, это чтобы меньше писать было =)
В overkill задача решена только для полностью совпадающих примитивов...

Я, решил эту задачу для полилиний, но в более общем варианте. В моем случае, в чертеже ищутся все одинаковые полилинии, которые не только могут иметь разное местоположение, быть повернуты на различный угол, но и быть нарисованы различными методами. Другими словами, в полилиниях могут быть разные направления обхода, различные начальные точки, различное количество вершин. Дополнительно, находятся все зеркальные исполнения...
Сразу скажу - взрывать не стоит, иначе для средненького чертежа будет необходимо слишком много времени и оперативной памяти. Все действия необходимо производить математическими и аналитическими методами. По поводу твердых тел, вы действительно думаете, что сравнение только вершин, даст достаточную точность?
Для решение этой задачи, необходимо проработать следующие алгоритмы:
1. сравнение тел по площади и объему - для последующего более точного сравнения тел, которые действительно могут быть одинаковыми.
2. в каждом теле есть центроид, он не зависит от ориентации тела в пространстве, необходимо разработать программу, меняющую ориентацию вокруг этой точки и выбрать вторую или несколько вторых для каждого тела. Если второй точкой будет вершина, то для куба это уже восемь точек, а для цилиндра ни одной. Думаю, удобнее всего использовать центральные точки граней - они описаны в телах для каждой грани.
3. Сравнение совпадающих тел. Для простоты, после доворота, можно перетащить тела до совпадения центроидов и проанализировать результат булевой операции двух тел, например на объем...

ps. Для быстрой работы, лучше все это делать аналитически, без перемещений, вращений, вычитаний реальных тел. Все можно выполнить математически, но на это нужно больше сил времени и знаний...
Елпанов Евгений вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP для поиска групп (наборов) одинаковых примитивов и замена их блоком

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сейсмозащита и сейсмоизоляция существующих, построенных зд. 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