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

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

редактирование атрибута в блоке

Ответ
Поиск в этой теме
Непрочитано 15.07.2008, 14:59 #1
редактирование атрибута в блоке
Victorovich
 
Регистрация: 10.04.2008
Сообщений: 43

Здравствуйте Знатоки Автокада !

Подскажите, пожалуйста, как организовать программно редактирование атрибута с тагом REF1 блока с названием OTV_4. При этом программа должна спрашивать "Укажите блок: ".

На странице посвященной редактированию блоков
http://dwg.ru/f/showthread.php?t=142...EB%EE%EA%EE%E2
я нашел функцию get-all-atts .

Но Как мне ее правильно использовать чтобы отредактировать значение атрибута REF1 в указанном блоке я не разобрался:

(defun att08 ()
(setq CBlock (car (entsel "Выберите блок:")))
(setq test1 (vlax-ename->vla-object cblock))
(get-all-atts test1)
;;; что сюда нужно добавить ???
)



Заранее Всем Спасибо.
Просмотров: 3264
 
Непрочитано 15.07.2008, 15:05
#2
Кулик Алексей aka kpblc
Moderator

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


Вообще-то по приведенной ссылке явно не то
Жалко, времни нет совсем собирать кубики - в DwgRuLispLib все необходимое есть...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 15.07.2008, 15:09
#3
Victorovich


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


сори, ссылка настоящая такая
http://dwg.ru/f/showthread.php?t=142...E1%EB%EE%EA%E0

а функция в ней

(defun get-all-atts (obj)

(if (and obj
(eq :vlax-true (vla-get-HasAttributes obj))
(vlax-property-available-p obj 'Hasattributes)

)
(vl-catch-all-apply
(function
(lambda ()
(mapcar (function (lambda (x)
(cons (vla-get-TagString x)
(vla-get-TextString x)
)
)
)
(append (vlax-invoke obj 'Getattributes)
(vlax-invoke obj 'Getconstantattributes)
)
)
)
)
)
)
)
Victorovich вне форума  
 
Непрочитано 15.07.2008, 15:24
#4
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Попробуй такой вариант

Код:
[Выделить все]
;Начало программы
(defun c:catt (/ ent i next next_data sset tag val)
(if
  (and (setq sset (ssget (list (cons 0 "INSERT")(cons 66 1)))); Выбор блоков только с атрибутами
       (setq tag (strcase (getstring "\n >> Введите тэг атрибута : \n")))
       (setq val (getstring "\n >> Новое значение атрибута : \n")))
  (progn
  (setq i (- 1))
  (repeat (sslength sset)
    (setq ent (ssname sset (setq i (1+ i))))
    (setq next ent)
      (while (setq next (entnext next))
	(setq next_data (entget next))
	(if (= tag (cdr (assoc 2 next_data)))
	  (progn
	    (entmod (subst (cons 1 val) (assoc 1 next_data) next_data))
	    (entupd ent)))))))
(princ)
)
(prompt "\nВ командной строке набери CATT\n")
(princ)
~'J'~
fixo вне форума  
 
Автор темы   Непрочитано 15.07.2008, 16:18
#5
Victorovich


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


Спасибо fixo за программу. Все работает.
Не мог бы ты прокоментировать ее между строками включительно
(progn
(setq i (- 1))

и

(entupd ent)))))))

И можно ли как-то сделать так, чтобы юзер не щелкал дополнительно ввод (или прав кнопку мышки) после указания блока ???
(хотелось бы один раз указать на блок и все, без лишнего ввода)
Victorovich вне форума  
 
Автор темы   Непрочитано 15.07.2008, 18:10
#6
Victorovich


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


и еще тут загвоздка

если скопировать один и тот же блок с атрибутом, то при запуске программы и при указании на одну из копий, получается что атрибуты меняются во всех копиях, а нужно только в указанной юзером копии
Victorovich вне форума  
 
Непрочитано 15.07.2008, 18:10
#7
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Во-первых функция ssget после выбора примитивов
требует ввода Enter как подтверждение окончания этого
выбора, поэтому ты можешь выбирать любое количество
блоков сразу, а не по-одному

небольшой комментарий:

Код:
[Выделить все]
  (progn ; предполагает выполнение нескольких действий
  (setq i (- 1)); задаем начальное значение счетчика
  (repeat (sslength sset); повтор действий соответственно количеству выбранных примитивов (блоков)
    (setq ent (ssname sset (setq i (1+ i)))); определяем конкретный блок по соответствующему индексу
    (setq next ent); сохраняем указатель на блок для регенерации в конце каждого цикла
      (while (setq next (entnext next); начало цикла - вводим условие что цикл продолжается до тех пор пока у блока существует субпримитив
	(setq next_data (entget next)); определяем список субпримитива (нас интересует атрибут)
	(if (= tag (cdr (assoc 2 next_data))); сраниваем значение тэга атрибута и заданного тэга
	  (progn
	    (entmod (subst (cons 1 val) (assoc 1 next_data) next_data)); модифицируем список атрибута
	    (entupd ent); модифицируем блок (по сохраненному ранее указателю)
))))))
(princ); завершение программы без эхо (тихий выход из программы)
)
(prompt "\nВ командной строке набери CATT\n")
(princ)
~'J'~
fixo вне форума  
 
Автор темы   Непрочитано 16.07.2008, 18:29
#8
Victorovich


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


спасибо за разъяснения

а как быть если скопировать один и тот же блок с атрибутом, то при запуске программы и при указании на одну из копий, получается что атрибуты меняются во всех копиях, а нужно только в указанной юзером копии
Victorovich вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > редактирование атрибута в блоке

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема при использовании в динамическом блоке атрибута Даниил Динамические блоки 13 31.05.2013 09:16
Многострчный текст атрибута gizmo_zx AutoCAD 4 05.06.2008 14:41
Динамический блок и значение атрибута _Andre_ Динамические блоки 15 08.12.2006 23:55
Почему нельзя двигать текст атрибута в блоке? TheMaster AutoCAD 16 13.03.2006 09:49
Редактирование атрибутов/внешней ссылки. Alan AutoCAD 2 09.03.2006 17:09