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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Динамические блоки > Можно-ли периименовать блок?

Можно-ли периименовать блок?

Ответ
Поиск в этой теме
Непрочитано 21.02.2006, 17:36
Можно-ли периименовать блок?
Dante
 
Николаев
Регистрация: 01.12.2005
Сообщений: 76

Не кто не знает есть ли в Автокаде возможность переименовать созданный блок (в смысле одинаковых блоков блоков на чертеже много, т.е. один блок вставлен кучу раз из буфера с дурным именем, а потом размножен командой copy и нужно (т.е. из) назвать нормально).
Просмотров: 8406
 
Непрочитано 15.03.2006, 16:48
#21
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,890
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Опечаточка
Цитата:
(while (and (setq ent (entsel "\nУкажите блок <Выход> : "))
(= (cdr (assoc 0 (entget (car ent)))))
) ;_ end of and
Наверно надо
Цитата:
(while (and (setq ent (entsel "\nУкажите блок <Выход> : "))
(= (cdr (assoc 0 (entget (car ent)))) "INSERT")
) ;_ end of and
VVA вне форума  
 
Непрочитано 15.03.2006, 16:56
#22
Кулик Алексей aka kpblc
Moderator

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


Ну да, конечно. Однако запарка, пальцы заплетаются. Сорри. Исправленный вариант (чтоб не париться):
Код:
[Выделить все]
(defun c:mren2 (/ adoc ent block new_name)
  (vl-load-com)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  (vla-startundomark adoc)
  (while (and (setq ent (entsel "\nУкажите блок <Выход> : "))
	      (= (cdr (assoc 0 (entget (car ent)))) "INSERT")
	      ) ;_ end of and
    (setq block
	   (vla-item (vla-get-blocks adoc) (cdr (assoc 2 (entget (car ent)))))
	  ) ;_ end of setq
    (if	(= (setq
	     new_name (getstring (strcat "\nНовое имя <"
					 (vla-get-name block)
					 "> : "
					 ) ;_ end of strcat
				 ) ;_ end of getstring
	     ) ;_ end of setq
	   ""
	   ) ;_ end of =
      (setq new_name (vla-get-name block))
      ) ;_ end of if
    (vla-put-name block new_name)
    ) ;_ end of while
  (vla-endundomark adoc)
  ) ;_ end of defun
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.03.2006, 17:27
#23
*Voland*

Инженер-технолог
 
Регистрация: 02.12.2004
Сообщений: 31


2 крЫс
И этот вариант работает, только я не ощутил разницы. Ну кроме длинны кода. А так супер, добавлено в мемориз, спасибо.
_____
P.S. Надо учить Lisp. :?
*Voland* вне форума  
 
Непрочитано 15.03.2006, 17:40
#24
Кулик Алексей aka kpblc
Moderator

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


Второй вариант - он просто "чуть более программерский", работа идет напрямую с описанием блока. Первый - более "инженерный", использовалась (command).
Вот и все. Результат в принципе один и тот же. Если надо, то второй можно (при минимальной доработке) использовать для пакетного переименования блоков. Например, есть перечень имен блоков "кривых", и имен блоков "нормальных". Сделать перебор и всего делов
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.03.2006, 19:34
#25
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,663


Для *Voland* из сообщения 18.
Вот-вот, а каково тогда мне?
Profan вне форума  
 
Непрочитано 15.03.2006, 19:50
#26
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,663


Иногда достаточно расчленить этот "анонимный" блок и вдруг видишь, что появился блок по имени "Дверь-01".
Для Vova
В русском AutoCAD'е команде "_rename" соответствует команда "новоеимя". Вот эту команду и надо искать в Справке. Также много информации на слово "переименование".
Profan вне форума  
 
Непрочитано 15.03.2006, 21:12
#27
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,286


> kpblc,
Когда вы, наконец, уже прекратите поганить ActiveX коды всякими entsel'ами и entget'ами [sm1212]? "Утилем" надо пользоваться, как это делают все приличные люди - я, например [sm2001]:
Код:
[Выделить все]
(defun c:mren2 (/ adoc util ent block new_name) 
  (vl-load-com) 
  (setq adoc (vla-get-activedocument (vlax-get-acad-object))
	        util (vla-get-utility adoc))
  (vla-startundomark adoc) 
  (while (and (vla-getEntity util 'ent nil  "\nУкажите блок <Выход> : ")
         (= (vla-get-ObjectName ent) "AcDbBlockReference")) ;_ end of and
    (setq block (vla-item (vla-get-blocks adoc) (vla-get-Name ent))) ;_ end of setq 
    (if (= (setq new_name (getstring (strcat "\nНовое имя <" 
                (vla-get-name block) 
                "> : " 
                ) ;_ end of strcat 
             ) ;_ end of getstring 
        ) ;_ end of setq 
      "" 
      ) ;_ end of = 
      (setq new_name (vla-get-name block)) 
      ) ;_ end of if 
    (vla-put-name block new_name) 
    ) ;_ end of while 
  (vla-endundomark adoc) 
  ) ;_ end of defun
Оставляю ваше многоэтажное форматирование в неприкисновенности
Лентяй вне форума  
 
Непрочитано 16.03.2006, 11:21
#28
Apelsinov

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


Лентяй
Цитата:
Когда вы, наконец, уже прекратите поганить ActiveX
наверное тогда, когда ты ,наконец , бедешь вставлять проверки в методы , а если промахнется чувак - будет ошибка с вылетом, и че это нормальнно, да?
Apelsinov вне форума  
 
Непрочитано 16.03.2006, 12:13
#29
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,286


Цитата:
Сообщение от Apelsinov
наверное тогда, когда ты ,наконец , бедешь вставлять проверки в методы , а если промахнется чувак - будет ошибка с вылетом, и че это нормальнно, да?
А нехай целится лучшее ! А ваще-то мы тута типа того, идеями обмениваемся, и на всякие мелочи размениваться - ну, жу-у-утко не хотца. Впрочем. исключительно, что бы сделать вам приятное:
Код:
[Выделить все]
(defun c:mren2 (/ adoc util ent block new_name) 
  (vl-load-com) 
  (setq adoc (vla-get-activedocument (vlax-get-acad-object))
        util (vla-get-utility adoc)) 
  (vla-startundomark adoc)
  (if (not (vl-catch-all-error-p (vl-catch-all-apply
         '(lambda () (vla-getentity util 'ent nil  "\nУкажите блок <Выход> : ")))));not
    (if (and ent (= (vla-get-ObjectName ent) "AcDbBlockReference")) ;_ end of and
      (progn (setq block (vla-item (vla-get-blocks adoc) (vla-get-Name ent)));setq
        (if (= (setq new_name (getstring (strcat "\nНовое имя <" (vla-get-name block) "> : "))) "");=
          (setq new_name (vla-get-name block)));if
        (vla-put-name block new_name));progn
      (alert "Это не блок, дубина!"));if
    (alert "Целься точнее, мазила!"));if
  (vla-endundomark adoc)
);end
Лентяй вне форума  
 
Непрочитано 16.03.2006, 12:53
#30
*Voland*

Инженер-технолог
 
Регистрация: 02.12.2004
Сообщений: 31


Код:
[Выделить все]
 (alert "Это не блок, дубина!"));if
Почему то у меня это не выскакивает, а выскакивает сразу
Целься точнее, мазила!

А если я хочу переименовать несколько блоков (не все сразу, а пошагово). Впринципе можно перед вводом команды набрать multiple, но ведь как-то же это можно сделать с помощью кода, хотя я уже сделал кнопочку с макросом ^C^C_multiple mren, только выход из команды приходится делать кнопочкой Esc.
Последний код Лентяя мне не понравился, напрягает вылетающее окошко.
*Voland* вне форума  
 
Непрочитано 16.03.2006, 13:00
#31
IgorSYS

ПГС
 
Регистрация: 09.03.2006
Москва
Сообщений: 199
<phrase 1=


из меню Format>rename, из команды List имя блока копируешь
и пишешь новое.
IgorSYS вне форума  
 
Непрочитано 16.03.2006, 13:11
#32
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,286


Вы хочите списков? Их есть у меня!
Код:
[Выделить все]
(defun c:mren2 (/ adoc ass block new_name) 
  (vl-load-com) 
  (setq adoc (vla-get-activedocument (vlax-get-acad-object)) 
        ass (vla-get-ActiveSelectionSet adoc))
  (if (> (vla-get-count ass) 0) (vla-clear ass))
  (vla-startundomark adoc)
  (vla-SelectOnScreen ass (vlax-safearray-fill (vlax-make-safearray vlax-vbinteger '(0 . 0)) '(0)) 
    (vlax-safearray-fill (vlax-make-safearray vlax-vbvariant '(0 . 0)) (list "*Insert")))
  (vlax-for block ass
    (if (= (setq new_name (getstring (strcat "\nÍîâîå èìÿ <" (vla-get-name block) "> : "))) "");=
      (setq new_name (vla-get-name block)));if
    (vla-put-name block new_name));vlax-for
  (vla-endundomark adoc) 
);end
Заметьте, что при "списочном" подходе никакие проверки не нужны, потому как режим выбора будет продолжаться, пока в наборе не окажется хотя бы один блок.
Лентяй вне форума  
 
Непрочитано 16.03.2006, 13:29
#33
*Voland*

Инженер-технолог
 
Регистрация: 02.12.2004
Сообщений: 31


> Лентяй.
Отличный код, все выделенные блоки переименовываются поочереди.
По окончанию автоматом "выход", то что доктор прописал.
Спасибо.
*Voland* вне форума  
 
Непрочитано 16.03.2006, 13:46 Привет
#34
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 13,043


ХМ странно но у меня они не переименовываются
хотя диалог идет.
__________________
Работаю за еду.
Working for food.
Für Essen arbeiten.
العمل من أجل الغذاء
Працую за їжу.
DEM вне форума  
 
Непрочитано 16.03.2006, 14:15
#35
Apelsinov

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


DEM
и не будут переименовываться, если в чертеже нет блока с таким именем (и будет ошибка с вылетом), а если есть, то блок будет заменен на блок с введенным именем. Прикольно, если в указуемом блоке есть атрибут - он останется и в замененном блоке...хотя описания с таким атрибутом нет, и этот атрибут даже отредактировать можно будет.
Apelsinov вне форума  
 
Непрочитано 16.03.2006, 15:53
#36
Apelsinov

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


Пока Лентяй спит [sm2305] , новая поделка:
(между прочим getstring - это не ActiveX [sm2004] )
Код:
[Выделить все]
(defun c:test (/	      adoc	     ass
	       new_name	      new_block_obj  obj_lst
	       sf_obj	      old_block_ref  old_block_name
	       old_block_obj  block_adoc
	      )
  (vl-load-com)
  (setq	adoc (vla-get-activedocument (vlax-get-acad-object))
	ass  (vla-get-ActiveSelectionSet adoc)
  )
  (if (> (vla-get-count ass) 0)
    (vla-clear ass)
  )
  (vla-startundomark adoc)
  (vla-SelectOnScreen
    ass
    (vlax-safearray-fill
      (vlax-make-safearray vlax-vbinteger '(0 . 0))
      '(0)
    )
    (vlax-safearray-fill
      (vlax-make-safearray vlax-vbvariant '(0 . 0))
      (list "*Insert")
    )
  )
  (vlax-for old_block_ref ass
    (if	(= (setq new_name (vla-GetString
			    (vla-get-Utility adoc)
			    :vlax-false
			    (strcat "\nНовое имя <"
				    (setq old_block_name
					   (vla-get-name old_block_ref)
				    )
				    "> : "
			    )
			  )
	   )
	   ""
	)
      (princ "\nНифига не переименовал!")
      (if (null	(VL-CATCH-ALL-ERROR-P
		  (setq	new_block_obj
			 (VL-CATCH-ALL-APPLY
			   'vla-item
			   (list (setq block_adoc (vla-get-Blocks adoc))
				 new_name
			   )
			 )
		  )
		)
	  )
	(vla-put-name old_block_ref new_name)
	(if (VL-CATCH-ALL-ERROR-P
	      (setq old_block_obj
		     (VL-CATCH-ALL-APPLY
		       'vla-item
		       (list block_adoc old_block_name)
		     )
	      )
	    )
	  (princ "\nБезымянный блок?!!")
	  (progn
	    (setq new_block
		   (vla-add block_adoc
			    (vlax-3d-point '(0 0 0))
			    new_name
		   )
	    )
	    (vlax-for i	old_block_obj
	      (setq obj_lst (cons i obj_lst))
	    )
	    (vlax-safearray-fill
	      (setq sf_obj (vlax-make-safearray
			     vlax-vbobject
			     (cons 0 (1- (length obj_lst)))
			   )
	      )
	      obj_lst
	    )
	    (setq obj_lst nil)
	    (vla-CopyObjects
	      adoc
	      sf_obj
	      new_block
	    )
	    (vla-put-name old_block_ref new_name)
	  )
	)
      )
    )
  )
  (vla-endundomark adoc)
  (princ)
)
[quote]  [/quote]
Apelsinov вне форума  
 
Непрочитано 17.03.2006, 00:21
#37
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,286


[quote="Apelsinov"](между прочим getstring - это не ActiveX [sm2004] )quote]
Ух и стерва, ты, Стеха, в смысле Apelsinov [sm1212]! Вы что, думаете, я в 2 часа ночи буду в силах чистоту идеи блюсти? Как бы не так! В следуюший раз я вам
Код:
[Выделить все]
(setq obj (vlax-enename->vla-object (car (entsel))))
куда-нить всуну :twisted:. Гусары, молчать!
Лентяй вне форума  
 
Непрочитано 17.03.2006, 07:23
#38
v_alex


 
Регистрация: 24.10.2005
Новокузнецк
Сообщений: 1,121
<phrase 1=


у меня другой вопрос... тоже с переименованием... у меня есть блок "номер1"... я его копирую в корыстных целях и хочу сделать из него блок "номер2", но разбивать и создавать новый ой как нехочется... можно его как нибудь переименовать, но так чтобы блок "номер1" остался нетронутым...
v_alex вне форума  
 
Непрочитано 17.03.2006, 07:46
#39
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Вполне.
_.wblock + _.insert
vk вне форума  
 
Непрочитано 17.03.2006, 07:59
#40
v_alex


 
Регистрация: 24.10.2005
Новокузнецк
Сообщений: 1,121
<phrase 1=


Цитата:
Сообщение от vk
Вполне.
_.wblock + _.insert
спасибо... тоже выход... ...
v_alex вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Динамические блоки > Можно-ли периименовать блок?

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

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