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

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

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

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

Не кто не знает есть ли в Автокаде возможность переименовать созданный блок (в смысле одинаковых блоков блоков на чертеже много, т.е. один блок вставлен кучу раз из буфера с дурным именем, а потом размножен командой copy и нужно (т.е. из) назвать нормально).
Просмотров: 9318
 
Непрочитано 21.02.2006, 17:38
#2
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,337


команда
Код:
Хмурый вне форума  
 
Непрочитано 21.02.2006, 17:39
#3
Кулик Алексей aka kpblc
Moderator

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


_.rename опробуй
---
Опередили.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 21.02.2006, 17:47
#4
Dante


 
Регистрация: 01.12.2005
Николаев
Сообщений: 76


Прикольно. Спасибо.
Dante вне форума  
 
Непрочитано 21.02.2006, 18:12
#5
VVA

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


Цитата:
Прикольно. Спасибо.
Пора объявлять соревнование на самый быстрый забег (ответ на вопрос), почти Турин 2006.
VVA вне форума  
 
Непрочитано 21.02.2006, 21:20
#6
vk

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


Цитата:
Сообщение от VVA
Пора объявлять соревнование на самый быстрый забег (ответ на вопрос), почти Турин 2006.
Не... Пора делать автоответчик. Но это уже вопрос к админу ))
vk вне форума  
 
Непрочитано 21.02.2006, 23:03
#7
Perezz!!
Moderator

архитектор
 
Регистрация: 21.08.2003
Москва
Сообщений: 3,587


Цитата:
Не... Пора делать автоответчик.
Perezz!! вне форума  
 
Непрочитано 22.02.2006, 05:33
#8
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Интересно, если посмотреть в Хелпе на русском языке на слово Переименовать, можно-ли там найти ответ? А если хелп английский, то в словаре можно найти, что это есть Rename....
Скоро юбилейная двухсотая страница перелистнется на форуме, отделять мух от котлет становится все труднее
Vova вне форума  
 
Автор темы   Непрочитано 15.03.2006, 12:39 А если усложнить задачу.
#9
Dante


 
Регистрация: 01.12.2005
Николаев
Сообщений: 76


Команда rename - это конечно интересно, но есть нюансы. Например Вы хотите преименовать блок, который был вставлен из буфера обмена он как известно имеет имя типа A#546$#$@$#%#45645, а команда rename предпологает, что вы знаете имя этого блока, т.е. перед тем как переименовывать нужно это имя как-то найти, записать на листик (или в буфер) корче лая катавасия, а вот так, чтобы переименовать просто клацаньем на этом блоке? Неужно писать скрипт?
Dante вне форума  
 
Непрочитано 15.03.2006, 12:47
#10
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,337


Вызываешь команду _list
Тыкаешь в блок
Жмешь Enter
Раскрывается текстовое окно, если нет - то жми F2
Среди информации увидишь запись

Block Name: "A#546$#$@$#%#45645"

Скопируй содержимое кавычек в буфер....
Хмурый вне форума  
 
Непрочитано 15.03.2006, 12:51
#11
seaniv


 
Регистрация: 14.03.2006
Петергоф
Сообщений: 8


Можно через кнопку "редактирование атрибута" которая на панели Редактирования-2. Еще быстрее и конкретнее.
seaniv вне форума  
 
Автор темы   Непрочитано 15.03.2006, 12:53
#12
Dante


 
Регистрация: 01.12.2005
Николаев
Сообщений: 76


Да я в общем то так и делаю...
Но дело в том, что есть в природе люди которые натыкают кучу блоков и нужно по ним спецификацию сделать... Т.е. я хочу сказать один-два блока так нормально а если сто...
Dante вне форума  
 
Автор темы   Непрочитано 15.03.2006, 12:58
#13
Dante


 
Регистрация: 01.12.2005
Николаев
Сообщений: 76


Цитата:
Сообщение от seaniv
Можно через кнопку "редактирование атрибута" которая на панели Редактирования-2. Еще быстрее и конкретнее.
Очень интересно...
Откуда во всталеном из буфера обмена блоке атрибут (вставляется не блок, а часть рисунка, вставленная командой "ваставиить как блок")
Dante вне форума  
 
Непрочитано 15.03.2006, 13:14
#14
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,337


Цитата:
Сообщение от Dante
... Т.е. я хочу сказать один-два блока так нормально а если сто...
Для выполнения рутинных операций программа нужна
Хмурый вне форума  
 
Непрочитано 15.03.2006, 15:15
#15
*Voland*

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


Цитата:
Сообщение от seaniv
Можно через кнопку "редактирование атрибута" которая на панели Редактирования-2. Еще быстрее и конкретнее.
Тут вроде блок редактируется, или я чего не понял. :?:
Мне кажется без лиспика не обойтись, чтобы методика была как предложил Хмурый. Только как реализовать, увы я не знаю, не владею.
*Voland* вне форума  
 
Непрочитано 15.03.2006, 15:43
#16
Кулик Алексей aka kpblc
Moderator

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


Попробуй такое (код не проверял):
Код:
[Выделить все]
(defun c:mren (/ ent new_name old_name _cmdecho_ *error*)
  (defun *error* (msg)
    (if	_cmdecho_
      (setvar "cmdecho" _cmdecho)
      ) ;_ end of if
    (vla-endundomark
      (vla-get-activedocument (vlax-get-acad-object))
      ) ;_ end of vla-endundomark
    (princ msg)
    (princ)
    ) ;_ end of defun
  (vl-load-com)
  (vla-startundomark
    (vla-get-activedocument (vlax-get-acad-object))
    ) ;_ end of vla-startundomark
  (while (and (setq ent (entsel "\nУкажите блок"))
	      (= (cdr (assoc 0 (entget (car ent)))) "INSERT")
	      ) ;_ end of and
    (setq old_name  (cdr (assoc 2 (entget (car ent))))
	  _cmdecho_ (getvar "cmdecho")
	  ) ;_ end of setq
    (if	(= (setq
	     new_name (getstring
			(strcat "\nНовое имя блока <" old_name "> : ")
			) ;_ end of getstring
	     ) ;_ end of setq
	   ""
	   ) ;_ end of =
      (setq new_name old_name)
      ) ;_ end of if
    (setvar "cmdecho" 0)
    (command "_.-rename" "_block" old_name new_name)
    (setvar "cmdecho" _cmdecho_)
    ) ;_ end of while
  (vla-endundomark
    (vla-get-activedocument (vlax-get-acad-object))
    ) ;_ end of vla-endundomark
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.03.2006, 15:53
#17
Кочетков Андрей

Java/Kotlin backend
 
Регистрация: 03.02.2006
Сообщений: 5,740


Постоянно пользуюсь этим лиспом:

Автор Эдуард:

Код:
[Выделить все]
(defun C:Insert_rename
       (/ block_adoc ins new_name_block old_block obj sf_obj)
  (setq	block_adoc
	 (vla-get-blocks
	   (vla-get-ActiveDocument (vlax-get-acad-object))
	 ) ;_  end of_vla-get-blocks
  ) ;_  end of_setq
  (if
    (and
      (setq ins (car (entsel "\n Select insert for rename:")))
      (= (cdr (assoc 0 (entget ins))) "INSERT")
      (setq new_name_block (getstring "\nNew block name:"))
      (snvalid new_name_block)
      (not (tblsearch "block" new_name_block))
    ) ;_  end of_and
     (progn
       (setq
	 old_block (vla-item block_adoc (cdr (assoc 2 (entget ins))))
       ) ;_  end of_setq
       (vlax-for item old_block
	 (setq obj (cons item obj))
       ) ;_  end of_vlax-for
       (setq sf_obj (vlax-make-safearray
		      vlax-vbobject
		      (cons 0 (1- (length obj)))
		    ) ;_  end of_vlax-make-safearray
       ) ;_  end of_setq
       (vlax-safearray-fill sf_obj obj)
       (setq new_block
	      (vla-add block_adoc
		       (vlax-3d-point '(0 0 0))
		       new_name_block
	      ) ;_  end of_vla-add
       ) ;_  end of_setq
       (vla-CopyObjects
	 (vla-get-ActiveDocument (vlax-get-acad-object))
	 sf_obj
	 new_block
       ) ;_  end of_vla-CopyObjects
       (vla-put-name (vlax-ename->vla-object ins) new_name_block)
     ) ;_  end of_progn
  ) ;_  end of_if
) ;_  end of_defun
Кочетков Андрей вне форума  
 
Непрочитано 15.03.2006, 15:59
#18
*Voland*

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


2 kpblc
Блин, класно, работает :P :!:
Откуда вы такие умные?
У нас на работе я Автокад знаю лучше всех, чуть у кого вопрос, сразу ко мне, но тут я чувствую себя не только чайником, но и полным профаном. :?
*Voland* вне форума  
 
Непрочитано 15.03.2006, 16:06
#19
Кулик Алексей aka kpblc
Moderator

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


А вот еще один вариант - получче будет имхо:
Код:
[Выделить все]
(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)))))
	      ) ;_ 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
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.03.2006, 16:26
#20
Кулик Алексей aka kpblc
Moderator

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


> *Voland* : Ты второй вариант попробуй - он получше работает, да и обрабатывает все варианты (по-моему).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.03.2006, 16:48
#21
VVA

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


Опечаточка
Цитата:
(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
С.-Петербург
Сообщений: 39,848


Ну да, конечно. Однако запарка, пальцы заплетаются. Сорри. Исправленный вариант (чтоб не париться):
Код:
[Выделить все]
(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
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей 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
С.-Петербург
Сообщений: 39,848


Второй вариант - он просто "чуть более программерский", работа идет напрямую с описанием блока. Первый - более "инженерный", использовалась (command).
Вот и все. Результат в принципе один и тот же. Если надо, то второй можно (при минимальной доработке) использовать для пакетного переименования блоков. Например, есть перечень имен блоков "кривых", и имен блоков "нормальных". Сделать перебор и всего делов
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.03.2006, 19:34
#25
Profan


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


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


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


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

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


> 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,192
<phrase 1=


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

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


Цитата:
Сообщение от 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,392


Вы хочите списков? Их есть у меня!
Код:
[Выделить все]
(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
СПб
Сообщений: 12,968


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

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


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

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,192
<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,392


[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,124
<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,124
<phrase 1=


Цитата:
Сообщение от vk
Вполне.
_.wblock + _.insert
спасибо... тоже выход... ...
v_alex вне форума  
 
Непрочитано 17.03.2006, 10:14
#41
Apelsinov

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


Цитата:
Сообщение от v_alex
у меня другой вопрос... тоже с переименованием... у меня есть блок "номер1"... я его копирую в корыстных целях и хочу сделать из него блок "номер2", но разбивать и создавать новый ой как нехочется... можно его как нибудь переименовать, но так чтобы блок "номер1" остался нетронутым...
Между прочим, приведенный выше мной лисп как-раз для этого и может быть предназначен. Если в чертеже нет описания блока с введенным на запрос именем, то будет создано такое описание, идентичное тому к которому принадлежала указанная вставка блока, и этой вставке будет присвоено ее имя. То есть в Вашем случае - Вы копируете блок и обрабатываете его этой прогой - в результате имеете блок с новым именем, идентичный старому, оставшемуся нетронутым.
А вот как раз для изначально поставленной задачи - переименования описания блока - эта прога не предназначена.
Кстати, в express есть команда blockreplace - которая заменяет вставке блока описание.
Apelsinov вне форума  
 
Непрочитано 17.03.2006, 20:36
#42
Vaidas


 
Регистрация: 11.03.2006
LT
Сообщений: 11


Добавлю к переименованию группы блоков примитивный способ: если в чертеже есть блок "a", заменить его на "b.dwg" можно при помощи
Command: -Insert -> a=b ...
(Путь к "b.dwg" должен быть прописан в Support File Search Path)
Vaidas вне форума  
 
Непрочитано 21.03.2006, 11:21
#43
ытя


 
Регистрация: 23.09.2005
СПб
Сообщений: 425


Цитата:
Сообщение от v_alex
у меня другой вопрос... тоже с переименованием... у меня есть блок "номер1"... я его копирую в корыстных целях и хочу сделать из него блок "номер2", но разбивать и создавать новый ой как нехочется... можно его как нибудь переименовать, но так чтобы блок "номер1" остался нетронутым...
1. Копируем блок в буфер
2. Переименовываем блок в чертеже
3. Вставляем из буфера блок со старым именем

Acad2006: в редакторе блоков - save as
ытя вне форума  
 
Непрочитано 21.03.2006, 14:39
#44
v_alex


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


Цитата:
Сообщение от ытя
1. Копируем блок в буфер
2. Переименовываем блок в чертеже
3. Вставляем из буфера блок со старым именем
Acad2006: в редакторе блоков - save as
утомительная процедура... ИМХО... особенно если из 40 блоков надо всего лишь 20 переименовать, а 20 оставить с прежним именем... причем блоки уже давно вставлены...
v_alex вне форума  
 
Непрочитано 22.03.2006, 10:24
#45
ытя


 
Регистрация: 23.09.2005
СПб
Сообщений: 425


Если эти 40, это один и тот же блок, ничто не мешает ВЫРЕЗАТЬ в буфер эти
Цитата:
20 оставить с прежним именем
и после переименования оставшихся вставить из буфера в Original coordinates.
Всё это прекрасно загоняется в макрос.
ытя вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Динамические блоки > Можно-ли периименовать блок?

Размещение рекламы