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

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

Как заменить один блок другим с помощью лиспа

Ответ
Поиск в этой теме
Непрочитано 05.08.2011, 07:02 #1
Как заменить один блок другим с помощью лиспа
МИХАИЛCAD
 
Регистрация: 19.11.2009
Сообщений: 21

Вообще то я люблю скрипты (script) и пользуюсь им очень много.
Вот решил используя скрипт заменять на чертеже один блок другим
ничего подходящего найти не могу нигде!
Может кто нибудь знает простенькую программку
для применения в моём случае.
заранее благодарен.
Для чего: на чертежах стоит подпись в виде блока (изображает
реальную подпись) блок подписи вставлен в другой блок.
Нужно заменить эту подпись (блок) на другую подпись (тоже блок)
Просмотров: 4625
 
Непрочитано 05.08.2011, 09:27
#2
VVA

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


BlockReplace из ET
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 08.08.2011, 08:41
#3
МИХАИЛCAD


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


Нет не подходит совсем...
МИХАИЛCAD вне форума  
 
Непрочитано 08.08.2011, 09:55
#4
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Замена одного блока другим для AutoCAD 2006/2007 [VBA]
Замена одного блока другим [lisp]
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 08.08.2011, 10:36
#5
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,010


(defun c:blrevers (/ a b)
(and (setq a (car (entsel "\nВыберите исходный блок: ")))
(setq a (entget a))
(while (and (= (cdr (assoc 0 a)) "INSERT")
(setq b (car (entsel "\nВыберите изменяемый блок: ")))
(setq b (entget b))
(= (cdr (assoc 0 b)) "INSERT")
(entmod (vl-remove (assoc 330 b) (subst (assoc 2 a) (assoc 2 b) b)) ;_ vl-remove
) ;_ entmod
) ;_ and
) ;_ while
) ;_ and
(princ)
) ;_ defun
Nike вне форума  
 
Непрочитано 08.08.2011, 17:48
#6
Oliver_88

"ценный кадр"
 
Регистрация: 02.12.2010
Сообщений: 115
<phrase 1=


Если одна степень вложенности и устраивает переопределение непосредственно самого блока, то можно попробовать так:
Код:
[Выделить все]
 ;Пример вызова (sub_blk_in_blk "имя блока в котором нужно сделать замену" "имя старого блока" "имя нового блока")
;Имена блоков указывать с учетом регистра.
(defun sub_blk_in_blk (blk old_blk new_blk / it)
  (vl-load-com)
  (setq active_document (vla-get-ActiveDocument (vlax-get-acad-object)))
  (vlax-map-collection (setq it (vla-Item (vla-get-Blocks active_document) blk))
    (function
      (lambda (x)
	(if (vlax-property-available-p x 'EffectiveName)
	  (if (equal (vla-get-EffectiveName x) old_blk)
	    (progn
	      (vla-InsertBlock
		it
		(vla-get-InsertionPoint x) new_blk
		(vla-get-XScaleFactor x) (vla-get-YScaleFactor x) (vla-get-ZScaleFactor x)
		(vla-get-Rotation x)
		)
	      (vla-Delete x)
	      )
	    )
	  )
	)
      )
    )
  (vla-Regen active_document 0)
  )
Oliver_88 вне форума  
 
Автор темы   Непрочитано 09.08.2011, 04:18
#7
МИХАИЛCAD


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


Не то
МИХАИЛCAD вне форума  
 
Непрочитано 09.08.2011, 05:14
#8
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


Китокс тулсет http://dwg.ru/dnl/437
Yuzer вне форума  
 
Непрочитано 09.08.2011, 09:53
#9
Oliver_88

"ценный кадр"
 
Регистрация: 02.12.2010
Сообщений: 115
<phrase 1=


МИХАИЛCAD, нарисовали бы уж тогда.
Oliver_88 вне форума  
 
Непрочитано 09.08.2011, 11:01
#10
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,010


МИХАИЛCAD, на уровне идеи:
1 - заходишь в блок (штамп, наверное) и удаляешь все блоки подписей - (command "_.erase" (ssget "_x" (list '(0 . "INSERT")) "")
2 - вставляешь новые подписи - (command "_.insert" podpis1 '(координаты первой подписи) 1 1 "")
(command "_.insert" podpis2 '(координаты второй подписи) 1 1 "") и т.д. сколько нужно.
3 - выходишь из редактора блоков - (command "_BCLOSE" "")
Нужные подписи podpis1 podpis2 и т.д. хранишь в отдельных файлах.
Вешаешь нужный набор подписей на кнопку и радуешься..
Nike вне форума  
 
Непрочитано 09.08.2011, 15:58
#11
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Цитата:
Сообщение от МИХАИЛCAD Посмотреть сообщение
Для чего: на чертежах стоит подпись в виде блока (изображает
реальную подпись) блок подписи вставлен в другой блок.
Нужно заменить эту подпись (блок) на другую подпись (тоже блок)
1. Заменить на блок с другим именем?
2. Заменить на блок с тем же именем? Т.е. в блоке заменить саму подпись?
Если первое, то чем же не годятся предложенные выше варианты?
Если второе, то просто изменить подпись в редакторе блоков. Или создать новый образец блока и через Design Center сделать Redefine only.
АлексЮстасу на форуме  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как заменить один блок другим с помощью лиспа



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
изменение параметров размеров с помощью лиспа МИХАИЛCAD LISP 9 23.09.2022 14:47
Как заменить один блок другим? ilka_t Динамические блоки 34 21.09.2018 00:43
Как поменять visibility set c помощью лиспа Zaghim LISP 12 10.05.2011 16:33
Как с помощью Лиспа применить Oblique? Vovan4ik LISP 2 21.03.2009 22:23
Градиент с помощью лиспа mental LISP 4 16.01.2007 07:51