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

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

LISP. Переименование блока

Ответ
Поиск в этой теме
Непрочитано 13.12.2017, 10:19 #1
LISP. Переименование блока
valerik88
 
Регистрация: 02.07.2016
Сообщений: 249

Удобное переименование блока
Демонстрация в gif файле
Команда RENAME

Миниатюры
Нажмите на изображение для увеличения
Название: 1.gif
Просмотров: 339
Размер:	360.5 Кб
ID:	196802  

Вложения
Тип файла: lsp rename.lsp (749 байт, 136 просмотров)

Просмотров: 6352
 
Непрочитано 13.12.2017, 11:08
#2
Кулик Алексей aka kpblc
Moderator

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


Не отслеживается вариант отмены выбора.
Не отслеживается выбор внешней ссылки.
Почему-то обрабатывается только один блок независимо от количества выбранных.

И гарантированно не сработает для анонимных блоков.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.12.2017, 11:26
#3
Nike

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


Не обрабатываются недопустимые символы / , * ? и т.п.
Nike вне форума  
 
Непрочитано 13.12.2017, 11:32
#4
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,825


Название команды неудачное.
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Непрочитано 13.12.2017, 11:58
#5
Nike

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


Альтернативный вариант (код Лентяя)

Код:
[Выделить все]
 (defun c:br (/ adoc util ent block new_name)
  (vl-load-com)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object))
        util (vla-get-utility adoc)
  ) ;_ end of setq
  (vla-startundomark adoc)
  (if (not (vl-catch-all-error-p
             (vl-catch-all-apply '(lambda () (vla-getentity util 'ent nil "\nУкажите блок <Выход> : ")))
           ) ;_ end of vl-catch-all-error-p
      ) ;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 T (strcat "\nНовое имя <" (vla-get-name block) "> : "))) "") ;= 
;;;             (if (= (setq new_name (dos_getstring "Enter new block name: " "Новое имя: " (vla-get-name block))) "") ;= 
               (setq new_name (vla-get-name block))
             ) ;if
             (setq new_name (vl-string-translate "/,*?\"" "-----" new_name)) ; заменить плохие символы тиреми
             (setq new_name (vl-string-right-trim " " new_name)) ; удальит пробелы в конце 

             (vla-put-name block new_name)
      ) ;progn 
      (alert "Это не блок, дубина!")
    ) ;if 
    (alert "Целься точнее, мазила!")
  ) ;if
  (princ "\n Новое имя:")
  (princ new_name)
  (vla-endundomark adoc)
)   ;end
Nike вне форума  
 
Автор темы   Непрочитано 13.12.2017, 12:03
#6
valerik88


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


Nike, вместо нормального имени выдаёт *U55. Оно переименовывается, но в свойствах выводится старое.
Вообще странно работает, gif прикладываю
Миниатюры
Нажмите на изображение для увеличения
Название: 1.gif
Просмотров: 68
Размер:	744.8 Кб
ID:	196809  

Последний раз редактировалось valerik88, 13.12.2017 в 12:12.
valerik88 вне форума  
 
Непрочитано 13.12.2017, 12:18
#7
Nike

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


valerik88, анонимный потому что
http://adn-cis.org/rename-anonymous-...sp-or-vba.html

----- добавлено через ~44 мин. -----
добавил проверку на анонимность

Код:
[Выделить все]
 (defun c:br (/ adoc util ent block new_name)
  (vl-load-com)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object))
        util (vla-get-utility adoc)
  ) ;_ end of setq
  (vla-startundomark adoc)
  (if (not (vl-catch-all-error-p
             (vl-catch-all-apply '(lambda () (vla-getentity util 'ent nil "\nУкажите блок <Выход> : ")))
           ) ;_ end of vl-catch-all-error-p
      ) ;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 (/= (substr (vla-get-name block) 1 2) "*U")
               (progn
                 (if (= (setq new_name (getstring t (strcat "\nНовое имя <" (vla-get-name block) "> : "))) "") ;= 
;;;             (if (= (setq new_name (dos_getstring "Enter new block name: " "Новое имя: " (vla-get-name block))) "") ;= 
                   (setq new_name (vla-get-name block))
                 ) ;if
                 (setq new_name (vl-string-translate "/,*?\"" "-----" new_name)) ; заменить плохие символы тиреми
                 (setq new_name (vl-string-right-trim " " new_name)) ; удальит пробелы в конце 
                 (vla-put-name block new_name)
               ) ;progn
               (alert (strcat "Переименование невозможно - анонимный блок: " (vla-get-name block)))
             ) ;if
      ) ;progn
             (alert "Это не блок, дубина!")
    ) ;if
    (alert "Целься точнее, мазила!")
  ) ;if
  (princ "\n Новое имя:")
  (princ new_name)
  (vla-endundomark adoc)
)   ;end
Nike вне форума  
 
Непрочитано 13.12.2017, 13:18
#8
kacugu

начинающий инженер-гидротехник
 
Регистрация: 18.04.2010
Санкт-Петербург
Сообщений: 893


так вроде всё уже придумано написано:
http://www.lee-mac.com/copyblock.html
kacugu вне форума  
 
Автор темы   Непрочитано 13.12.2017, 13:23
#9
valerik88


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


kacugu, протестировал. При переименовании какого-то фига сбрасываются атрибуты блока.
Миниатюры
Нажмите на изображение для увеличения
Название: 1.gif
Просмотров: 39
Размер:	746.9 Кб
ID:	196813  
valerik88 вне форума  
 
Непрочитано 13.12.2017, 13:49
#10
kacugu

начинающий инженер-гидротехник
 
Регистрация: 18.04.2010
Санкт-Петербург
Сообщений: 893


valerik88, красота. Надо будет автору отписаться.
Когда-то пользовался этой программой и отрабатывала нормально. Сейчас попробовал - у меня запускается, но не переименовывает блок. Пишет "Unable to interface with ObjectDBX."
kacugu вне форума  
 
Непрочитано 13.12.2017, 19:09
#11
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,825


При изменении динамического блока он превращается в анонимный.
Поменяйте (vla-get-name ent) на (vla-get-effectivename ent).
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Готовые программы > LISP. Переименование блока

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Копирование, сортировка, переименование листов (layout) VVA Готовые программы 96 08.12.2023 14:11
LISP. Вставка блока из чертежа исходя из двух параметров (длина и ширина) Kairat.iskakov LISP 6 17.05.2016 15:04
LISP: Переименование одного из вхождений блока Кочетков Андрей Готовые программы 23 13.02.2015 09:12
Lisp. авто-нумерация атрибута блока. DonJad LISP 10 26.10.2014 02:04
Доработка кодя для скрытия объектов блока (LISP) AndruxaZ LISP 2 22.09.2014 14:27