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

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

удаление всех одинаковых блоков при выборе одного? ищу способ

Ответ
Поиск в этой теме
Непрочитано 04.04.2009, 20:47 #1
удаление всех одинаковых блоков при выборе одного? ищу способ
LAmyk
 
Регистрация: 05.02.2009
Сообщений: 37

раньше с помощью експресс тулз делал подмену блоков на контрольный, котрый потом выбирал фильтром и удалял все
может есть лисп который будет удалть одинаковые блоки тыком на 1 из них?
Просмотров: 3984
 
Непрочитано 04.04.2009, 21:08
#2
Dym


 
Регистрация: 27.09.2005
Двинскъ
Сообщений: 586
Отправить сообщение для Dym с помощью Skype™


поищи selsim, поможет за два тыка
Dym вне форума  
 
Непрочитано 05.04.2009, 00:08
#3
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,692


Небольшой макрос (писал для других целей, просто кнопку добавил). Ткнув мышью в @, "> Х", получите: все вхождения блока из файла чертежа делетнутся..
Вложения
Тип файла: rar Chng_Atr.rar (13.4 Кб, 125 просмотров)
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
 
Непрочитано 09.06.2010, 02:17 удаление дублирующихся блоков
#4
Бася


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


Добрый день! Помогите пожалуйста решить проблему: на чертеже есть вхождения блока. В некоторых местах, блоки скопипастены дважды, а то и трижды (т.е. имеюют одинаковые координаты). Как можно удалить дублирующиеся блоки?
Пс. _OVERKILL резальтатов не дала.
Бася вне форума  
 
Непрочитано 09.06.2010, 12:15
#5
Дима_

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


Код:
[Выделить все]
(vl-load-com)
(defun c:delete-over ( / xcod ss)
(setq	xcod '(2 410 10 8 41 42 43 50 210)
	ss (sstolist (ssget "_a" (list (cons 0 "insert")))))
(vla-startundomark (vlax-get-property (vlax-get-acad-object) 'ActiveDocument))
(delete-over ss)
(vla-endundomark (vlax-get-property (vlax-get-acad-object) 'ActiveDocument))
(princ))
		
(defun delete-over (lst)
(if lst (delete-over (del-dubl (car lst) (cdr lst)))))

(defun del-dubl (blk lst)
(setq blk (mapcar '(lambda (p) (cod p blk)) xcod))
(vl-remove nil (mapcar '(lambda (obj)
			(if (apply 'and (mapcar '(lambda (p1 p2) (equal p1 p2 1e-6))
					blk
					(mapcar '(lambda (p) (cod p obj)) xcod)))
						(progn (entdel obj) nil)
						obj))
			lst)))
			
(defun cod (cd obj) ; возращает код cd примитива obj.
(if (and obj (= (type obj) 'ename))
(cdr (assoc cd (entget obj)))));end of cod

(defun sstolist (ss / i lst); конвертирует набор в список
(setq i 0)
(if ss
(repeat (sslength ss)
(setq lst (append lst (list (ssname ss i))) i (1+ i))
));end of repeat & if
lst);end of sstolist
запускать delete-over
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 09.06.2010, 13:38
#6
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,425


А что с атрибутами (например) делать? Или (бррр!) с аннотативностью?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.06.2010, 14:05
#7
Бася


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


Прошу прощения, не указала - блоки не имеют ни атрибутов, ни аннотативности.
To Дима_, спасибо огромное за код, НО:
в данном конкретном чертеже функция не работает
Т.е. она подгружается, но когда я нажимаю "delete-over", машина задумывается ...и все.Причем, это не зависит от количества выбираемых блоков (1000 или 3). И нет индикации того, что процесс идет.
Ради эксперимента подождала полчаса - эффекта нет. Пришлось Esc.
При этом на пустом чертеже все проходит нормально (для примера создала простейший блок).
Что скажете?

Последний раз редактировалось Бася, 09.06.2010 в 14:28.
Бася вне форума  
 
Непрочитано 09.06.2010, 15:53
#8
Дима_

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


Он "каждый к каждому" проверяет, если на большое количество блоков - то надо чуть по другому написать - что-то типа берет вхождение блока, берет его границы, смотрит - нет ли там аналогичных. Сейчас к сожалению времени нет; если по быстрому исправь строку:
ss (sstolist (ssget "_a" (list (cons 0 "insert")))))
на
ss (sstolist (ssget (list (cons 0 "insert")))))
тогда можно будет "кусками" в ручную обрабатывать (он вначале предложит выбрать) - попробуй понемножку.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 09.06.2010, 17:34
#9
Бася


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


Дима_, теперь программа просто "летает".
Просто супер!!!
Есть косяк, вернее КОСЯЧИЩЕ, файл чужой, оказалось, что блоки разнесены по Z. И дублирующиеся (на виде сверху), но разные ко координатам Z, он не удаляет.
Не откажите в помощи, скажите, как их в ноль привести? Сам блок в нулевом уровне, Flatten их не хочет понижать, а через свойства тоже не получается.
Бася вне форума  
 
Непрочитано 09.06.2010, 18:22
#10
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от Бася Посмотреть сообщение
Не откажите в помощи, скажите, как их в ноль привести?
LISP. Обнуление координаты Z (аналог FLATTEN ) Пост #1 и #2
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 10.06.2010, 11:07
#11
Бася


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


VVA, Дима_, Спасибо огромное! Все работает, задача решена успешно
Сэкономлено огромное количество нервов и времени))
Бася вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > удаление всех одинаковых блоков при выборе одного? ищу способ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сейсмозащита и сейсмоизоляция существующих, построенных зд. IANationalInformAgentstvo Прочее. Архитектура и строительство 216 20.01.2015 16:51
Мониторы LCD CRT Разное 94 17.06.2008 10:51
БРЕД СИВОЙ КОБЫЛЫ Kryaker Разное 1876 29.12.2006 23:41
Удаление HASP драйвера от Компаса и всех его хвостов ki Прочее. Программное обеспечение 10 14.09.2006 14:15
Тормоза при выборе слоев в АКАДЕ 2005 boban AutoCAD 4 20.04.2005 20:13