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

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

Есть много блоков с аттрибутами. Надо добавить во все блоки

Ответ
Поиск в этой теме
Непрочитано 09.06.2006, 13:37 #1
Есть много блоков с аттрибутами. Надо добавить во все блоки
Pave1
 
электроснабжение и автоматика
 
г. Пермь
Регистрация: 21.06.2005
Сообщений: 329

Есть файл, в котором хранатся блоки с аттрибутами. Хочу добавить во все блоки еще один скрытый непостоянный аттрибут. Как это сделать стандактними средствами не редактируя каждый блок?
Или напишите пожалуйста лисп, который сделает это за меня.
__________________
хочу все знать
Просмотров: 4632
 
Непрочитано 09.06.2006, 14:45
#2
Vova

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


Refedit, Battman, Attsync
Vova вне форума  
 
Автор темы   Непрочитано 09.06.2006, 15:15
#3
Pave1

электроснабжение и автоматика
 
Регистрация: 21.06.2005
г. Пермь
Сообщений: 329


Vova
Как-то мне ни одна из этих функций не подошла.
Мне бы такое:
- добывить во все блоки?
- да!
- что добавить?
- вот это!
- добавленно :)
__________________
хочу все знать
Pave1 вне форума  
 
Непрочитано 09.06.2006, 19:18
#4
fixo

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


Может такое подойдет:
Код:
[Выделить все]
  (defun att_to_block (new_data / adoc att blk blk_obj blocks)
  (vl-load-com)
  (setq	adoc (vla-get-activedocument
	       (vlax-get-acad-object)
	     )
  )

  (setq blocks (vla-get-blocks adoc))
  (vla-startundomark adoc)
  (vlax-for blk_obj blocks
  (setq	att (vla-AddAttribute
	      blk_obj
	      (getvar "dimtxt")
	      3 
	      (car new_data)
	      (vla-get-origin blk_obj)
	      (cadr new_data)
	      (caddr new_data)
	    )
  )

  (vlax-release-object blocks))
  (vla-endundomark adoc)
  (princ)
)

(defun C:test()
  (setq new_data '("NEW_TAG" "NEW_PROMPT" "NEW_VALUE"))
  (att_to_block new_data)
  (princ)
  )
;TesT:(C:test)
~'J'~
fixo вне форума  
 
Автор темы   Непрочитано 13.06.2006, 08:53
#5
Pave1

электроснабжение и автоматика
 
Регистрация: 21.06.2005
г. Пермь
Сообщений: 329


Fatty
не работает, вот что пишет:
Команда: test
; ошибка: нулевой указатель интерфейса: #<VLA-OBJECT 00000000>
__________________
хочу все знать
Pave1 вне форума  
 
Непрочитано 13.06.2006, 09:53
#6
fixo

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


Цитата:
Сообщение от Pave1
Fatty
не работает, вот что пишет:
Команда: test
; ошибка: нулевой указатель интерфейса: #<VLA-OBJECT 00000000>
Согласен, не там скобу поставил:
Код:
[Выделить все]
  (defun att_to_block (new_data / adoc att blk blk_obj blocks) 
  (vl-load-com) 
  (setq   adoc (vla-get-activedocument 
          (vlax-get-acad-object) 
        ) 
  ) 

  (setq blocks (vla-get-blocks adoc)) 
  (vla-startundomark adoc) 
  (vlax-for blk_obj blocks 
  (setq   att (vla-AddAttribute 
         blk_obj 
         (getvar "dimtxt") 
         3 
         (car new_data) 
         (vla-get-origin blk_obj) 
         (cadr new_data) 
         (caddr new_data) 
       ) 
  ) 
)
  (vlax-release-object blocks) 
  (vla-endundomark adoc) 
  (princ) 
) 

(defun C:test() 
  (setq new_data '("NEW_TAG" "NEW_PROMPT" "NEW_VALUE")) 
  (att_to_block new_data) 
  (princ) 
  ) 
;TesT:(C:test) 

~'J'~
fixo вне форума  
 
Автор темы   Непрочитано 13.06.2006, 10:03
#7
Pave1

электроснабжение и автоматика
 
Регистрация: 21.06.2005
г. Пермь
Сообщений: 329


:)
работает.
Спасибо.
__________________
хочу все знать
Pave1 вне форума  
 
Автор темы   Непрочитано 14.06.2006, 13:58
#8
Pave1

электроснабжение и автоматика
 
Регистрация: 21.06.2005
г. Пермь
Сообщений: 329


Fatty :

и другие липс-умельцы.
Вышеприведенный лисп выполняет нужную функцию, но аттрибут, который он добавляет является скрытым и постоянным
А мне хотелось бы скрытый, но не постоянный
чтобы кликнув на блок менять значения аттрибута можно было
__________________
хочу все знать
Pave1 вне форума  
 
Автор темы   Непрочитано 14.06.2006, 15:41
#9
Pave1

электроснабжение и автоматика
 
Регистрация: 21.06.2005
г. Пермь
Сообщений: 329


или еще вот как можно перевернуть эту проблеммы:
Есть аттрибут, один и тот де (ну т.е. название аттрибута в блоках совподает) . Как его (этот аттрибут) сделать из постоянного непостоянным?
__________________
хочу все знать
Pave1 вне форума  
 
Непрочитано 14.06.2006, 20:33
#10
fixo

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


Цитата:
Сообщение от Pave1
Fatty :

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

замени на следующее
Код:
[Выделить все]
(setq   att (vla-AddAttribute 
         blk_obj 
         (getvar "dimtxt") 
         ( + acAttributeModeInvisible acAttributeModeVerify);или 5
         (car new_data) 
         (vla-get-origin blk_obj) 
         (cadr new_data) 
         (caddr new_data) 
       ) 
  )
~'J'~
fixo вне форума  
 
Непрочитано 14.06.2006, 21:57
#11
fixo

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


Цитата:
Сообщение от Pave1
или еще вот как можно перевернуть эту проблеммы:
Есть аттрибут, один и тот де (ну т.е. название аттрибута в блоках совподает) . Как его (этот аттрибут) сделать из постоянного непостоянным?
Попробуй для этого случая такой вариант
Таг измени на свой или вводи интерактивно
Код:
[Выделить все]
  (defun rev_constatt (/ adoc blocks) 
  (vl-load-com) 
  (setq   adoc (vla-get-activedocument 
          (vlax-get-acad-object) 
        ) 
  ) 

  (setq blocks (vla-get-blocks adoc)) 
  (vla-startundomark adoc)
  (vlax-for blk_obj blocks
  (vlax-for item blk_obj
    (if (and (eq "AcDbAttributeDefinition" (vla-get-objectname item))
	     (eq :vlax-true (vla-get-constant item))
	     (eq "CONST" (vla-get-tagstring item)); => таг "CONST"
	     (vlax-property-available-p item 'Constant T))
      (vl-catch-all-apply (function (lambda()
      (progn     
      (vla-put-constant item :vlax-false)
      (vla-put-mode item ( + acAttributeModeInvisible acAttributeModeVerify))
      (vla-update item))))))))
   
  (vlax-release-object blocks)
  (vla-regen adoc acallviewports)
  (vla-endundomark adoc) 
  (princ) 
  ) 
;;==================;;
  (defun C:test2() 
  (rev_constatt) 
  (princ) 
  )
~'J'~
fixo вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Есть много блоков с аттрибутами. Надо добавить во все блоки

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

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