dwg.ru forum rss xml
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму |

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

Изменение значения атрибутов с одинаковым тегом во множестве блоков

Версия для печати
 
Ответ
Опции темы Поиск в этой теме
Непрочитано 30.08.2016, 02:27 #1
Изменение значения атрибутов с одинаковым тегом во множестве блоков
Red Nova
 
ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Торонто
Регистрация: 23.10.2007
Сообщений: 1,949
Отправить сообщение для Red Nova с помощью Skype™

Red Nova вне форума Вставить имя

Исходный вариант для всего чертежа нашел на просторах англоязычного инета.
Добавил версию с выделением.

CHG_SELECTED_ATT Изменяет значения атрибутов с введенным тегом для блоков в выделенном.
CHG_EVERY_ATT Изменяет значения атрибутов с введенным тегом для блоков во всем файле.

Вложения
Тип файла: lsp изменение атрибутов.lsp (3.7 Кб, 40 просмотров)

Просмотров: 1431
 
Непрочитано 30.08.2016, 08:32
| 1 #2
Кулик Алексей aka kpblc
Moderator

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


Замечания примешь?
  1. Не обрабатывается ситуация, если в ответ на "Введите наименование тэга" пользователь нажмет Esc
  2. Очень странно - в одной команде запросы русские, в другой - английские. Ты уж определись...
  3. Не учтены варианты локализаций (в русском ACAD'e работать не будет)
  4. Нет меток начала и конца отмены
  5. Не учитываются многострочные атрибуты
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 31.08.2016, 05:21
#3
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,949
Отправить сообщение для Red Nova с помощью Skype™


Привет Маэстро!
Вижу ты как и прежде бдишь
А я вот спустя 8 лет опять в первый класс с лиспом

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Замечания примешь?
Как я могу не принять замечания от человека чьи золотые коленки сотворили для меня столько добра.

1. Напомни что именно нужно обработать? При escape команда отменяется, привязок и слоев в процессе не меняю. Что обработать?
2. Забыл нажать сохранить . Поменял.
3. Я верно помню что для учета локализации подчеркивание ставить нужно только перед командами? Тогда там только _REGENALL. Поменял. Что-то еще забыл?
4. Эммм.... Это ты про что?
5. Не умею .

Пока лисп с первого поста не обновляю, на случай последующих изменений.

Код:
[Выделить все]
 ;------------------------------------------------------------------------------
;CHG_SELECTED_ATT  Изменяет значения атрибутов с введенным Тегом для блоков в выделенном.
;Учитываются все аттрибуты с данным Тегом, при этом блоки могут быть разными!
;------------------------------------------------------------------------------
(defun C:CHG_SELECTED_ATT (/ ATTAG ATTBLKSS ATTTXT CDATE CNT MORE NAME TBENT TBNEXT
                       TXTYPOS)

  ;Производим выбор блоков
  (setq ATTBLKSS (ssget '((0 . "INSERT")(66 . 1)))
        CNT 0
    ) 
  (setq TAGNAME (getstring "\nВведите наименование Тега?")
    NEWATT (getstring "\nВведите новое значение атрибута?")
     )

  (while (< CNT (sslength ATTBLKSS))
    (setq TBENT (entnext (ssname ATTBLKSS CNT)))
    (setq MORE t
      )   
    (while MORE
      (setq TBNEXT (entget TBENT))
      (cond ((= (ENTVAL TBNEXT 0) "ATTRIB")
             (setq ATTAG (ENTVAL TBNEXT 2)
                   ATTTXT (ENTVAL TBNEXT 1)
                   TXTYPOS (cadr (ENTVAL TBNEXT 10))                  
               )
         ;The
             (cond
               ((= ATTAG TAGNAME) (ATTMOD NEWATT TBNEXT))
               ) ;cond
             (setq TBENT (entnext TBENT))
             )
            ((= (ENTVAL TBNEXT 0) "SEQEND") (setq MORE NIL))
            (t (setq TBENT (entnext TBENT)))
            ) ;cond
      ) ;while
    (setq CNT (1+ CNT))
    ) ;while
  (command "_REGENALL")
  (princ)
  )
;------------------------------------------------------------------------------


;------------------------------------------------------------------------------
;CHG_EVERY_ATT  Изменяет значения атрибутов с введенным Тегом для блоков во всем файле.
;Учитываются все аттрибуты с данным Тегом, при этом блоки могут быть разными!
;------------------------------------------------------------------------------
(defun C:CHG_EVERY_ATT (/ ATTAG ATTBLKSS ATTTXT CDATE CNT MORE NAME TBENT TBNEXT
                       TXTYPOS)
  (setq TAGNAME (getstring "\nВведите наименование Тега?")
    NEWATT (getstring "\nВведите новое значение атрибута?")
     )
  ;Выбераем все блоки
  (setq ATTBLKSS (ssget "X" '((0 . "INSERT")(66 . 1)))
        CNT 0
    )  
  (while (< CNT (sslength ATTBLKSS))
    (setq TBENT (entnext (ssname ATTBLKSS CNT)))
    (setq MORE t
      )    
    (while MORE
      (setq TBNEXT (entget TBENT))
      (cond ((= (ENTVAL TBNEXT 0) "ATTRIB")
             (setq ATTAG (ENTVAL TBNEXT 2)
                   ATTTXT (ENTVAL TBNEXT 1)
                   TXTYPOS (cadr (ENTVAL TBNEXT 10))                   
               )
         ;The
             (cond
               ((= ATTAG TAGNAME) (ATTMOD NEWATT TBNEXT))
               ) ;cond
             (setq TBENT (entnext TBENT))
             )
            ((= (ENTVAL TBNEXT 0) "SEQEND") (setq MORE NIL))
            (t (setq TBENT (entnext TBENT)))
            ) ;cond
      ) ;while
    (setq CNT (1+ CNT))
    ) ;while
  (command "_REGENALL")
  (princ)
  )
;------------------------------------------------------------------------------


;------------------------------------------------------------------------------
; ATTMOD
;------------------------------------------------------------------------------
(defun ATTMOD (ATT E_DAT)
  (setq E_DAT (subst (cons 1 ATT) (assoc 1 E_DAT) E_DAT))
  (entmod E_DAT)
  (princ)
  )
;------------------------------------------------------------------------------


;------------------------------------------------------------------------------
; ENTVAL
;------------------------------------------------------------------------------
(defun ENTVAL (E NUM)
  (cdr (assoc NUM E))
  ) 
;------------------------------------------------------------------------------
Red Nova вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 31.08.2016, 06:20
#4
kacugu

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


vla-StartUndoMark ставит начало блока операций для "отката",
vla-EndUndoMark помечает конец блока операций, начатого vla-StartUndoMark
kacugu вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 31.08.2016, 09:27
#5
Кулик Алексей aka kpblc
Moderator

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


По отмене: http://autolisp.ru/2009/09/20/howto_undo/
Если в ответ на запрос "Введите наименование тэга" я нажму Esc, в ком.строку будет выведено сообщение об ошибке. Как минимум напрягает.
По локализации: попробуй в русском ACAD выполнить (Ssget "X") и посмотри, что тебе ACAD вывалит в результате.
Остальное позже, сейчас не могу выделить время
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 24.02.2017, 12:18
#6
ViktorSPB


 
Регистрация: 18.10.2015
Санкт-Петербург
Сообщений: 17


Здравствуйте, коллеги!
Скажите, а на базе этого кода, который я так понимаю, может задать значение атрибута в выделенных блоках, можно сделать, чтобы изменились свойства этого атрибута?
А в идеале, чтобы можно было не только свойство атрибута задать, но и примитивов - отрезков, кругов, полилиний...

У меня задача возникла на разбревновке дома внести свои дополнения. Так вот там каждое бревно - отдельный блок. Но аттрибуты у них одинаковые (по имени) , способ прорисовки бревен тоже один - отрезки. Так как это экспорт и другой программы, то слоев куча, они внутри блоков, а я хотел все подписи на отдельный слой. Прорисовку - тоже на свой. По-человечески сделать.

Если можно, натолкните, как мне лучше поступить? Был бы признателен.

Последний раз редактировалось ViktorSPB, 24.02.2017 в 12:28.
ViktorSPB вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 25.02.2017, 06:57
#7
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,949
Отправить сообщение для Red Nova с помощью Skype™


Звучит очень обширно. Так маловероятно что кто-то ответит и даст дельный совет, это как гадать на кофейной гуще. Нужно больше конкретики, пример такого блока и подробное описанием требуемых изменений. В любом случае, это будет не на основе приведенного кода, так как требуемые действия имеют отличный характер, тут же редактирование атрибутов по тегу. Более логично создать новую тему в соответствующем разделе программирование.
__________________
Блог
Red Nova вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 25.02.2017, 07:55
#8
Enik


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


Я тоже толком не понял, что требуется. Но похоже, что нужно чохом причесать весь чертёж. Возможно, тут найдётся что-то полезное. Не нужно пугаться названия темы. Эта штука весьма универсальна.
Enik вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 25.02.2017, 21:54
#9
ViktorSPB


 
Регистрация: 18.10.2015
Санкт-Петербург
Сообщений: 17


Цитата:
Сообщение от Enik Посмотреть сообщение
Но похоже, что нужно чохом причесать весь чертёж. Возможно, тут найдётся что-то полезное. .
Да, спасибо, из этой утилиты, очень, на мой взгляд полезной (спасибо автору!) я использовал возможность разбить все блоки, атрибуты преобразовать в текст. Потом выдлелил все текстовые поля и закинул их на отдельный слой. Потом собрал всю графическую часть блоков и тоже на свой слой.
Таким образом задачу и решил - атрибуты - на одном слое, бревна на другом. Но это варварский метод.

Еще раз поясню задачу другими словами, может и не нужно тему создавать а надо только несколько строк добавить в коде..

Есть чертеж дома, деревянного, из бруса. Каждое бревно в нем - отдельный блок со своим названием. В этом блоке ряд атрибутов - ID, длина и прочее. Ну и само бревно нарисованное отрезками. Проблема в том, что все они на одном слое. А я хочу скрывать текстовую часть - много её, загромождает. Получается, надо внутри этих блоков-бревен все атрибуты вынести на отдельный слой. Имена атрибутов одинаковые. Отличное только значение.
Вот и хочу выделить блоки и внутри выделенных атрибуты с тегом "ID" отправить на специально обученный слой.
ViktorSPB вне форума вставить имя Обратить внимание модератора на это сообщение  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Готовые программы > Изменение значения атрибутов с одинаковым тегом во множестве блоков

Опции темы Поиск в этой теме
Поиск в этой теме:

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

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обновить значения атрибутов в блоке valrond AutoCAD 7 01.09.2014 11:25
Нужна программка для автоматического заполнения атрибутов блоков из таблицы ssn AutoCAD 8 07.06.2012 16:52
Перенос значения атрибутов из блока в блок wluk1958 Программирование 6 02.04.2012 22:09
значения атрибутов при разблокировании gool Прочее. Программное обеспечение 2 28.02.2012 08:44
Альтернатива нумерации атрибутов блоков Maxxwell Программирование 13 01.06.2010 17:13

|| Главная || Каталог САПР || Тендеры || Публикации || Объявления || Биржа труда || Download || Галерея ||
|| Библиотека || Кунсткамера || Каталог предприятий || Контакты || Файлообменник || Блоги ||


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