|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Не работает команда _overkill с определенным динамическим блоком
Регистрация: 10.10.2022
Сообщений: 10
|
||
Просмотров: 2341
|
|
||||
Регистрация: 10.10.2022
Сообщений: 10
|
Требуется удалить скопированные дубликаты. Может всё-таки есть какое-то решение. Вручную очень долго. Причем это было замечено совершенно случайно. Дело в том, что из этих блоков формируется спецификация на производство. И заказчик может тупо вернуть все лишнее.
|
|||
![]() |
|
||||
Регистрация: 27.12.2011
Сообщений: 1,456
|
Цитата:
: (entget (car (entsel))) Укажите объект: ((-1 . <Entity name: 7758f860>) (0 . "INSERT") (2 . "*U480") : (entget (car (entsel))) Укажите объект: ((-1 . <Entity name: 7758f860>) (0 . "INSERT") (2 . "*U455") Это происходит после каких-либо действий, произведенных с динблоком (изменение размеров, например). До этих действий имя блоков (2 . "Panel") не меняется и команда отрабатывает нормально |
|||
![]() |
|
||||
Регистрация: 10.10.2022
Сообщений: 10
|
У меня теперь работает команда. Лишние блоки удаляются. Как Вы это сделали? Гиперссылку редактировали? Точно также копирую в одну и туже точку и все лишнее удаляется.
Oleg T, как Вы это сделали? Теперь работает команда. Вы что-то с гиперссылкой сделали? Последний раз редактировалось Кулик Алексей aka kpblc, 10.10.2022 в 15:56. |
|||
![]() |
|
||||
Регистрация: 27.12.2011
Сообщений: 1,456
|
Цитата:
Когда меняем длину в параметрах, блок становится анонимным. Программно его имя определяется как *U480 *U481 и т.п. Теперь его нужно использовать только копированием, чтобы не менялось это имя, и в случае чего команда overkill сработает. Если же поменяем длину (выставим такую же) у другого блока, то при их наложении overkill уже бесполезен. Так что в случае с динблоками, насколько я понимаю, нужно или работать максимально аккуратно, или искать другой надёжный способ удаления дубликатов. Последний раз редактировалось Oleg T, 10.10.2022 в 16:49. |
|||
![]() |
|
||||
Регистрация: 10.10.2022
Сообщений: 10
|
Нет. Всё-таки не работает. Когда один блок копируется на другой такой же, то дубликат не удаляется. Если копировать один блок на него же, то удаляется. Я кажется понял: это команда NDB переименовывает все блоки даже с одинаковыми параметрами. Получается нужно пользоваться командой удаления дубликатов до команды NDB. Так что ли?
|
|||
![]() |
|
||||
Регистрация: 10.10.2022
Сообщений: 10
|
|
|||
![]() |
|
||||
Регистрация: 27.12.2011
Сообщений: 1,456
|
Кстати, вполне можно написать плагин для удаления таких блоков через сравнение их списков. Они отличаются всего 4-мя элементами:
1-й блок из исходного файла ((-1 . <Entity name: 4539b820>) (0 . "INSERT") (5 . "19D267") (102 . "{ACAD_XDICTIONARY") (360 . <Entity name: 4539b8a0>) (102 . "}") (330 . <Entity name: 4538fe60>) (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "динблок") (48 . 100.0) (100 . "AcDbBlockReference") (66 . 1) (2 . "*U480") (10 3430214.77210817 -187272.916133985 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0)) 2-й блок ((-1 . <Entity name: 4539b760>) (0 . "INSERT") (5 . "19D225") (102 . "{ACAD_XDICTIONARY") (360 . <Entity name: 4539bbe0>) (102 . "}") (330 . <Entity name: 4538fe60>) (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "динблок") (48 . 100.0) (100 . "AcDbBlockReference") (66 . 1) (2 . "*U455") (10 3430214.77210817 -187272.916133985 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0)) Последний раз редактировалось Oleg T, 11.10.2022 в 08:36. |
|||
![]() |
|
||||
Регистрация: 27.12.2011
Сообщений: 1,456
|
Не знаю. Я для раскладки прямоугольников использую разномасштабные по осям блоки с автоматической нормализацией атрибутов, там Overkill все находит. Насчет неторопливости соглашусь.
|
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Даже на том же .Net навскидку алгоритм:
1. Выбрать фильтром вставки блоков; 2. Собрать в список List записи вида { имя блока (эффективное), координаты точки вставки, ObjectID вставки блока либо ссылка на сам объект (если требования к памяти не критичны), признак необходимости удаления блока}; 3. Отсортировать по имени блока. 4. Находить диапазоны каждого имени блока в списке. 5. Внутри каждого диапазона сравнить элементы по точке вставки по определенному "зазору". Если найдены совпадающие по точке вставки блоки с одинаковыми эффективными именами - сравнить атрибуты и динапараметры. Если и это совпало - поставить признак необходимости удаления блока в соответствующей записи списка. 6. Пройтись по списку и удалить необходимые блоки. т.е. до фига кода с явными или скрытыми вложенными циклами ![]() |
|||
![]() |
|
||||
Регистрация: 27.12.2011
Сообщений: 1,456
|
Вообще то для данного конкретного случая всё вообще очень просто, и списки сравнивать не нужно. Вспомнил про свой очень давний лиспик
удаления дублирующихся текстов и блоков по точке вставки. Изолируем блоки по слою и вперед, всё сработает. Код:
|
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
и писать свой вариант для каждого конкретного случая?) И сильно сомневаюсь, что ТС будет этим заниматься... Ему, имхо, проще научиться не пользоваться копированием - если не хотят попадать на деньги за лишние элементы. А здесь одновременно и хотят быстрый результат (копирование элементов группами с появляющимися при этом дубликатами) и чтобы еще без ошибок.
|
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Не работает команда block edit в autocad | hha | AutoCAD | 0 | 21.02.2017 09:13 |
Проблема с динамическим блоком при регенерации модели | Scorpio_1986 | Динамические блоки | 4 | 26.11.2012 08:21 |
При включенном F8 (орто) не работает команда "перенести" по горизонтали. ПОчему?? | sizhik | AutoCAD | 7 | 23.04.2012 13:57 |
Не работает команда SHELL | Torino | AutoCAD | 3 | 12.02.2009 21:08 |
не работает команда mtedit | Nikolays | AutoCAD | 8 | 21.11.2007 09:46 |