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

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

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

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

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

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

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

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

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


Замечания примешь?
  1. Не обрабатывается ситуация, если в ответ на "Введите наименование тэга" пользователь нажмет Esc
  2. Очень странно - в одной команде запросы русские, в другой - английские. Ты уж определись...
  3. Не учтены варианты локализаций (в русском ACAD'e работать не будет)
  4. Нет меток начала и конца отмены
  5. Не учитываются многострочные атрибуты
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 31.08.2016, 05:21
#3
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для 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
Санкт-Петербург
Сообщений: 887


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
С.-Петербург
Сообщений: 39,772


По отмене: http://autolisp.ru/2009/09/20/howto_undo/
Если в ответ на запрос "Введите наименование тэга" я нажму Esc, в ком.строку будет выведено сообщение об ошибке. Как минимум напрягает.
По локализации: попробуй в русском ACAD выполнить (Ssget "X") и посмотри, что тебе ACAD вывалит в результате.
Остальное позже, сейчас не могу выделить время
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.02.2017, 12:18
#6
ViktorSPB


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


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

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

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

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

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


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

ГИП
 
Регистрация: 07.06.2015
Сообщений: 1,254


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


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


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

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

Есть чертеж дома, деревянного, из бруса. Каждое бревно в нем - отдельный блок со своим названием. В этом блоке ряд атрибутов - ID, длина и прочее. Ну и само бревно нарисованное отрезками. Проблема в том, что все они на одном слое. А я хочу скрывать текстовую часть - много её, загромождает. Получается, надо внутри этих блоков-бревен все атрибуты вынести на отдельный слой. Имена атрибутов одинаковые. Отличное только значение.
Вот и хочу выделить блоки и внутри выделенных атрибуты с тегом "ID" отправить на специально обученный слой.
ViktorSPB вне форума  
 
Непрочитано 20.09.2019, 19:15
#10
Кондратий Тихонович


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


Цитата:
Сообщение от Red Nova Посмотреть сообщение
Изменяет значения атрибутов с введенным тегом
А можно с этого места попо дробнее?
Автокадовские атрибуты можно пометить тегами?
Кондратий Тихонович вне форума  
 
Непрочитано 20.09.2019, 19:25
#11
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 10,959


Цитата:
Сообщение от Кондратий Тихонович Посмотреть сообщение
Автокадовские атрибуты можно пометить тегами?
Завязывайте с тем, что употребляете.. Что у атрибута есть тег, он же его имя - легко заметить в редакторе блоков при создании атрибута.
Сергей812 вне форума  
 
Непрочитано 20.09.2019, 19:48
| 2 #12
Кулик Алексей aka kpblc
Moderator

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


Offtop: Не, Сергей812, пускай прежде чем завяжет, скажет, где берет и как называется! Я тоже иногда хочу, чтоб меня так нахлобучивало!
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.09.2019, 15:35
#13
Кондратий Тихонович


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Завязывайте с тем, что употребляете.. Что у атрибута есть тег, он же его имя - легко заметить в редакторе блоков при создании атрибута.
"Имя" атрибута не есть "тег".
Поэтому использование термина тег здесь не корректно.
Поэтому я и удивился: неужели атрибуты можно помечать тегами?

Это было бы здорово, если бы атрибуты и слои можно было помечать тегами.

Например "Токовые характеристики", "конструкционные характеристики".

Щёлкнул мышкой по тегу и все блоки, у которых атрибут или слой помечен заданным тегом сразу высветились
Кондратий Тихонович вне форума  
 
Непрочитано 21.09.2019, 17:57
#14
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,587


Цитата:
Сообщение от Кондратий Тихонович Посмотреть сообщение
"Имя" атрибута не есть "тег".
Поэтому использование термина тег здесь не корректно.
Об этом, Вы можете подискутировать с представителями компании AutoDesk, но и в английской и в русской версиях нет имени атрибута, есть Тег.

Цитата:
Сообщение от Кондратий Тихонович Посмотреть сообщение
Щёлкнул мышкой по тегу и все блоки, у которых атрибут или слой помечен заданным тегом сразу высветились
Этого нет в базовом автокаде и не будет, по причине наличия "вертикалок", иначе их покупать не будут, но это не так сложно как кажется.... пишите.
Boxa вне форума  
 
Непрочитано 21.09.2019, 21:50
#15
Кондратий Тихонович


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


Цитата:
Сообщение от Boxa Посмотреть сообщение
но и в английской и в русской версиях нет имени атрибута, есть Тег
Это всё погрешности корявого перевода.
Идиоты переводчики переводят дословно.
А надо переводить смысл.
А смысл "tag of atribute" есть "имя(название) атрибута"
Кондратий Тихонович вне форума  
 
Непрочитано 22.09.2019, 17:13
1 | 1 #16
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,405
Отправить сообщение для Александр Ривилис с помощью Skype™


Кондратий Тихонович,
tag - это "ярлык", "бирка", "этикетка", но не имя и не название. Так что поаккуратнее с навешиванием ярлыков переводчикам...
Александр Ривилис вне форума  
Ответ
Вернуться   Форум 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