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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как обновить атрибуты блока не смещая их в начальную точку?

Как обновить атрибуты блока не смещая их в начальную точку?

Ответ
Поиск в этой теме
Непрочитано 02.07.2018, 16:42 #1
Как обновить атрибуты блока не смещая их в начальную точку?
Tregart
 
Регистрация: 10.04.2011
Сообщений: 250

Приветствую всех!

Имеется чертеж с ~300 вхождениями блока. У блока есть атрибуты, в т.ч. один видимый атрибут (номер блока). Я через редактор блоков добавил еще один скрытый атрибут (потребляемая мощность), и теперь мне нужно всем блокам присвоить значение этого атрибута. Проблема в том, что если я выбираю вхождение блока, то в панели свойств новый атрибут не отображается. И, как следствие, я не могу присвоить ему значение. Если же я синхронизирую атрибуты у вхождений блока с его описанием (атробновить), то все видимые атрибуты смещаются в свою начальную точку, что в данном случае недопустимо - чертеж превращается в кашу и нужно заново растягивать видимые атрибуты.

Как сделать так, чтобы у всех вхождений блока появился этот дополнительный атрибут, но не смещались все видимые атрибуты?

Пример - во вложении. Добавлен атрибут "10_МОЩНОСТЬ", но не виден в свойствах блока.

Вложения
Тип файла: dwg
DWG 2018
Пример.dwg (94.6 Кб, 28 просмотров)

Просмотров: 3850
 
Непрочитано 02.07.2018, 18:41
#2
Сергей812


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


А чего вы хотите
Цитата:
Команда АТРОБНОВИТЬ не изменяет никаких значений, присвоенных атрибутам существующих блоков.
Цитата:
Команда АТРОБНОВИТЬ удаляет любое, внесенное командами АТРЕД или АТРЕДАКТ изменение формата или свойства. Она также удаляет любые дополнительные данные, связанные с блоком, и может повлиять на динамические блоки или блоки, созданные в приложениях сторонних разработчиков
Сергей812 вне форума  
 
Автор темы   Непрочитано 02.07.2018, 19:01
#3
Tregart


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


а как добавить атрибут во вхождения?
Tregart вне форума  
 
Непрочитано 02.07.2018, 19:21
#4
Сергей812


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


добавляете то правильно, просто в _Attsync сделана такая реализация судя по результатам - запоминание только значений атрибутов. Смириться или искать иные реализации (например) данной команды. Это же для извлечения данных у вас?

----- добавлено через ~5 мин. -----
Offtop: это как раз иллюстрация подходов к привязке данных к примитивам акада, о чем тут уже не раз говорилось и спорилось - хранение всей информации в примитиве либо хранение одного идентификатора ID + данные во внешнем хранилище. Но это все уже относиться к программированию - другая ветка)
Сергей812 вне форума  
 
Автор темы   Непрочитано 02.07.2018, 19:53
#5
Tregart


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


То, что по ссылке - не понял совсем. Правильно ли я понимаю, что штатными средствами мою задачу не выполнить?
Tregart вне форума  
 
Непрочитано 02.07.2018, 20:47
#6
Кулик Алексей aka kpblc
Moderator

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


Штатными - никак.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 02.07.2018, 20:56
#7
Tregart


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


Грусть-печаль-беда-тоска!
Кому ж в голову-то пришло такое?
Tregart вне форума  
 
Непрочитано 03.07.2018, 14:13
#8
Nike

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


Код:
[Выделить все]
 
;;; 
;;; http://cadxp.com/topic/40143-rotation-dattribut-dun-bloc/page__pid__224216#entry224216
;;; Cette version traite AUSSI (en principe) les Blocs DYNAMIQUES ... 
;;; 


;;;=================================================================
;;;
;;; SYN.LSP V1.41
;;;
;;; Synchroniser en conservant ou pas la valeur, la position et l'angle des attributs.
;;;
;;; Copyright (C) Patrick_35
;;;
;;;=================================================================

(vl-load-com) 

(defun patrick:synchro_att(cmd / ang att blo boite_dialogue choix def doc ent lst lstbl msg nombl
				 oui-non pos question rep s sel str sty val *errret*)

  (defun *errret* (msg)
    (or (member (strcase msg) '("FUNCTION CANCELLED" ""QUIT / EXIT ABORT"" "FONCTION ANNULEE" "QUITTER / SORTIR ABANDON"))
      (princ (strcat "\nErreur : " msg))
    )
    (vla-endundomark doc)
    (setq *error* s)
    (princ)
  )

  (defun nombl(bl)
    (if (vlax-property-available-p bl 'effectivename)
      (vla-get-effectivename bl)
      (vla-get-name bl)
    )
  )

  (defun msg(js)
    (if js
      (princ (strcat "\nSelection actuel : " js))
      (princ "\nSelection actuel : Tout")
    )
  )

  (defun choix(chx cmd / bl js lst nom sel)
    (princ "\nSelect the block(s) : ")
    (and (ssget (list (cons 0 "insert") (cons 66 1)))
      (progn
	(vlax-for bl (setq sel (vla-get-activeselectionset doc))
	  (or (member (setq nom (nombl bl)) lst)
	    (setq lst (cons nom lst))
	  )
	  (redraw (vlax-vla-object->ename bl) 4)
	)
	(foreach nom lst
	  (and (eq (vla-get-isxref (vla-item (vla-get-blocks doc) nom)) :vlax-false)
	    (if js
	      (setq js (strcat js "," nom))
	      (setq js nom)
	    )
	  )
	)
	(vla-delete sel)
      )
    )
    (or js (setq js chx))
    (and cmd (msg js))
    js
  )

  (defun boite_dialogue(titre / blo choix_aucun choix_lst choix_tout chx dcl fil js liste_bl
				loc rech rep res sel str tmp vao)

    (defun choix_lst(val / pos lst)
      (while (setq pos (read val))
	(if lst
	  (setq lst (strcat lst "," (nth pos liste_bl)))
	  (setq lst (nth pos liste_bl))
	)
	(setq val (substr val (+ 2 (strlen (itoa pos)))))
      )
      (setq js lst
	    chx "Nom"
      )
    )

    (defun choix_tout(/ pos val str)
      (setq pos 0)
      (while (setq val (nth pos liste_bl))
	(if str
	  (setq str (strcat str " " (itoa pos)))
	  (setq str (itoa pos))
	)
	(setq pos (1+ pos))
      )
      (setq js nil
	    chx "Tout"
	    sel str
      )
      (set_tile "lst" sel)
    )

    (defun choix_aucun()
      (setq js nil
	    chx nil
	    sel ""
      )
      (set_tile "lst" sel)
    )

    (defun rech()
      (and (member (substr str 1 loc) liste_bl)
	   (setq vao (itoa (- (length liste_bl) (length (member (substr str 1 loc) liste_bl)))))
	(if sel
	  (setq sel (strcat sel " " vao))
	  (setq sel vao)
	)
      )
    )

    (setq tmp (vl-filename-mktemp "ret" nil ".dcl")
	  fil (open tmp "w")
    )
    (foreach txt '(	"ret : dialog {"
			"  key = titre;"
			"  is_cancel = true;"
			"  fixed_width = true;"
			"  alignment = centered;"
			"  : list_box {label = \"Blocs\"; key = \"lst\"; multiple_select = true; width = 40; height = 20;}"
			"  : boxed_column {"
			"    label = \"Keep into Attributes\";"
			"    : row {"
			"      : column {"
			"	: toggle {label = \"Values\";   key = \"val\";}"
			"	: toggle {label = \"Styles\";    key = \"sty\";}"
			"      }"
			"      : column {"
			"	: toggle {label = \"Positions\"; key = \"pos\";}"
			"	: toggle {label = \"Angles\";    key = \"ang\";}"
			"      }"
			"    }"
			"    spacer;"
			"  }"
			"  spacer;"
			"  : row {"
			"    : button {label = \"Tout (all)\";  key = \"tout\";}"
			"    : button {label = \"Aucun (none)\"; key = \"aucun\";}"
			"    : button {label = \">>\";    key = \"sel\";}"
			"    ok_cancel;"
			"  }"
			"}"
		 )
      (write-line txt fil)
    )
    (close fil)
    (vlax-for blo (vla-get-blocks doc)
      (or (wcmatch (vla-get-name blo) "`**,*|*")
	  (eq (vla-get-isxref blo) :vlax-true)
	(vlax-for ent blo
	  (and	(eq (vla-get-objectname ent) "AcDbAttributeDefinition")
		(not (member (vla-get-name blo) liste_bl))
	    (setq liste_bl (cons (vla-get-name blo) liste_bl))
	  )
	)
      )
    )
    (setq liste_bl (acad_strlsort liste_bl)
	  dcl (load_dialog tmp)
	  sel ""
    )
    (while (not (member res '(0 1)))
      (new_dialog "ret" dcl "")
      (start_list "lst")
        (mapcar 'add_list liste_bl)
      (end_list)
      (set_tile "titre" titre)
      (set_tile "lst" sel)
      (set_tile "val" val)
      (set_tile "pos" pos)
      (set_tile "ang" ang)
      (set_tile "sty" sty)
      (action_tile "lst"    "(choix_lst $value)")
      (action_tile "tout"   "(choix_tout)")
      (action_tile "aucun"  "(choix_aucun)")
      (action_tile "val"    "(setq val $value)")
      (action_tile "pos"    "(setq pos $value)")
      (action_tile "ang"    "(setq ang $value)")
      (action_tile "sty"    "(setq sty $value)")
      (action_tile "sel"    "(done_dialog 2)")
      (action_tile "accept" "(done_dialog 1)")
      (action_tile "cancel" "(done_dialog 0)")
      (setq res (start_dialog))
      (cond
	((eq res 1)
	  (setq rep (list chx js val pos ang sty))
	)
	((eq res 2)
	  (and (setq js (choix js nil))
	    (progn
	      (setq str js
		    sel nil
		    chx "Nom"
	      )
	      (while (setq loc (vl-string-search "," str))
		(rech)
		(setq str (substr str (+ 2 loc)))
	      )
	      (rech)
	      (or sel (setq sel ""))
	    )
	  )
	)
	(T
	  (setq rep (list nil nil val pos ang sty))
	)
      )
    )
    (unload_dialog dcl)
    (vl-file-delete tmp)
    rep
  )

  (defun question(/ choixbl lst rep sel)

    (defun choixbl(chx / js nom pos sel)
      (defun nom(txt / str)
	(setq txt (vl-string-left-trim  " " txt)
	      txt (vl-string-right-trim " " txt)
	)
	(if (tblsearch "block" txt)
	  (setq str txt)
	  (princ (strcat "\nThe block \"" txt "\" does not exist "))
	)
	(and str
	  (if (and js (wcmatch (strcase js) (strcase (strcat str "," str "`,*" ",*`," str "`,*,*`," str))))
	    (princ (strcat "\nThe block \"" str "\" is already selected "))
	    (if js
	      (setq js (strcat js "," str))
	      (setq js str)
	    )
	  )
	)
      )

      (setq js chx)
      (while (/= (setq sel (getstring t "\nGive the name(s) of block(s) : ")) "")
	(while (setq pos (vl-string-search "," sel))
	  (nom (substr sel 1 pos))
	  (setq sel (substr sel (+ 2 pos)))
	)
	(nom sel)
	(msg js)
      )
      (and (eq js chx) (msg js))
      js
    )

    (setq sel "Tout" rep sel)
    (while (/= sel "Fin")
      (initget "Tout Selection Nom Fin")
      (or (setq sel (getkword (strcat "\nChoice of the blocks [Tout (all)/ Selection / Nom (name) / Fin (end)] <" sel "> : ")))
	(progn
	  (setq sel rep)
	  (and (eq rep "Tout")
	    (setq sel "Fin")
	  )
	)
      )
      (cond
	((eq sel "Tout")
	  (setq rep sel)
	)
	((eq sel "Selection")
	  (setq rep sel
		lst (choix lst T) 
	  )
	)
	((eq sel "Nom")
	  (setq rep sel
		lst (choixbl lst) 
	  )
	)
      )
    )
    (list rep lst)
  )

  (defun oui-non(que o-n / rep)
    (initget "Oui Non")
    (setq rep (getkword (strcat "\n" que " [Oui/Non] <" (if (eq o-n "0") "Non" "Oui") "> : ")))
    (cond
      ((eq rep "Oui")
	(setq rep "1")
      )
      ((eq rep "Non")
	(setq rep "0")
      )
      (T
	(setq rep o-n)
      )
    )
  )

  (vl-load-com)
  (setq doc (vla-get-activedocument (vlax-get-acad-object))
	s *error*
	*error* *errret*
  )
  (vla-startundomark doc)
  (or (setq val (getenv "Patrick_35_syn_val"))
    (setq val "1")
  )
  (or (setq pos (getenv "Patrick_35_syn_pos"))
    (setq pos "0")
  )
  (or (setq ang (getenv "Patrick_35_syn_ang"))
    (setq ang "0")
  )
  (or (setq sty (getenv "Patrick_35_syn_sty"))
    (setq sty "0")
  )
  (if (and (or
	     (and (eq cmd 0)
		  (setq rep (boite_dialogue "SYN V1.41")
			val (nth 2 rep)
			pos (nth 3 rep)
			ang (nth 4 rep)
			sty (nth 5 rep)
			rep (list (nth 0 rep) (nth 1 rep))
		  )
	     )
	     (and (eq cmd 1)
		  (setq rep (question))
		  (setq val (oui-non "Keep values of attributes"   val))
		  (setq pos (oui-non "Keep position of attributes" pos))
		  (setq ang (oui-non "Keep angle of attributes" ang))
		  (setq sty (oui-non "Keep style of attributes" sty))
	     )
	   )
	   (car rep)
      )
    (progn
      (or (eq (car rep) "Tout")
	  (cadr rep)
	(setq rep (list "Tout" nil))
      )
      (and 
	(if (cadr rep)
	  (ssget "x" (list (cons 0 "insert") (cons 2 (strcat "`**," (cadr rep))) (cons 66 1)))
	  (ssget "x" (list (cons 0 "insert") (cons 66 1)))
	)
	(progn
	  (vlax-for blo (setq sel (vla-get-activeselectionset doc))
	    (setq str (nombl blo)
		  att nil
	    )
	    (and (or (eq (car rep) "Tout")
		     (and
		       (cadr rep)
		       (wcmatch (strcase (cadr rep)) (strcase (strcat str "," str "`,*" ",*`," str "`,*,*`," str)))
		     )
		 )
	      (progn
		(foreach ent (vlax-invoke blo 'getattributes)
		  (setq att (cons (list ent
					(vlax-get ent 'textstring)
					(vlax-get ent 'insertionpoint)
					(vlax-get ent 'textalignmentpoint)
					(vlax-get ent 'alignment)
					(vlax-get ent 'rotation)
					(vlax-get ent 'stylename)
					(vlax-get ent 'height)
					(vlax-get ent 'scalefactor)
				  )
				  att
			    )
		  )
		)
		(setq lst (cons (cons blo att) lst))
		(or (member (nombl blo) lstbl)
		  (setq lstbl (cons (nombl blo) lstbl))
		)
	      )
	    )
	  )
	  (vla-delete sel)
	  (and lst
	    (progn
	      (setq def (getvar "cmdecho"))
	      (setvar "cmdecho" 0)
	      (vlax-for blo (vla-get-blocks doc)
		(and (eq (vla-get-islayout blo) :vlax-false)
		     (setq str (vla-get-name blo))
		     (member str lstbl)
		  (progn
		    (vl-cmdf "_.attsync" "_name" str)
		    (princ (strcat (chr 8) " pour le bloc " str "."))
		  )
	        )
	      )
	      (setvar "cmdecho" def)
	      (and (or (eq val "1") (eq pos "1") (eq ang "1") (eq sty "1"))
		(foreach blo lst
		  (mapcar '(lambda(a)
			    (and (eq val "1")
			      (vl-catch-all-apply 'vlax-put (list (nth 0 a) 'textstring (nth 1 a)))
			    )
			    (and (eq sty "1")
			      (progn
				(vl-catch-all-apply 'vlax-put (list (nth 0 a) 'stylename   (nth 6 a)))
				(vl-catch-all-apply 'vlax-put (list (nth 0 a) 'height      (nth 7 a)))
				(vl-catch-all-apply 'vlax-put (list (nth 0 a) 'scalefactor (nth 8 a)))
			      )
			    )
			    (and (eq pos "1")
			      (vl-catch-all-apply 'vla-move (list (nth 0 a) (vla-get-insertionpoint (nth 0 a)) (vlax-3d-point (nth 2 a))))
			    )
			    (and (eq ang "1")
			      (vl-catch-all-apply 'vlax-put (list (nth 0 a) 'rotation (nth 5 a)))
			    )
			  )
			  (reverse (cdr blo))
		  )
		)
	      )
	      (setenv "Patrick_35_syn_val" val)
	      (setenv "Patrick_35_syn_pos" pos)
	      (setenv "Patrick_35_syn_ang" ang)
	      (setenv "Patrick_35_syn_sty" sty)
	    )
	  )
	)
      )
    )
  )
  (vla-endundomark doc)
  (setq *error* s)
  (princ)
)

(defun c:syn()
  (if (zerop (getvar "cmdactive"))
    (patrick:synchro_att 0)
    (patrick:synchro_att 1)
  )
)

(defun c:-syn()
  (patrick:synchro_att 1)
)

(setq nom_lisp "SYN")
(if app
  (if (= (strcase (substr app (1+ (- (strlen app) (strlen nom_lisp))) (strlen nom_lisp))) nom_lisp)
    (princ (strcat "..." nom_lisp " loaded."))
    (princ (strcat "\n" nom_lisp ".LSP loaded.... On keyboard: " nom_lisp " to run.")))
  (princ   (strcat "\n" nom_lisp ".LSP loaded.... On keyboard: " nom_lisp " to run.")))
(setq nom_lisp nil)
(princ)

После добавления атрибутов:

Цитата:
Команда: -syn
Choice of the blocks [Tout (all)/ Selection / Nom (name) / Fin (end)] <Tout> :

Keep values of attributes [Oui/Non] <Oui> :

Keep position of attributes [Oui/Non] <Oui> :

Keep angle of attributes [Oui/Non] <Oui> :

Keep style of attributes [Oui/Non] <Oui> :

Команда АТРОБНОВИТЬ выполнена pour le bloc Block.
или
Миниатюры
Нажмите на изображение для увеличения
Название: 2018-07-03_13-18-32.png
Просмотров: 50
Размер:	6.3 Кб
ID:	204142  
Вложения
Тип файла: lsp Syn_v141__Synchro_Blocs_US_P35.lsp (11.5 Кб, 34 просмотров)

Последний раз редактировалось Nike, 03.07.2018 в 15:17. Причина: Сорри за мой плохой хранцузский
Nike вне форума  
 
Непрочитано 03.07.2018, 14:57
#9
Boxa

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


Tregart, а что там такого уникального внутри файла, что это потребовало сохранять его исключительно в 2018 версии?
Boxa вне форума  
 
Автор темы   Непрочитано 03.07.2018, 17:20
#10
Tregart


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


Цитата:
Сообщение от Boxa Посмотреть сообщение
Tregart, а что там такого уникального внутри файла, что это потребовало сохранять его исключительно в 2018 версии?
По умолчанию сохранился, сорян.

Nike

Осталось осмыслить ваш пост и понять как работает. Этим сейчас и займусь.

А ведь серьезная недоработка, верно? Если примитив добавляешь - все вхождения меняются, а если атрибут - то нет. Вы или крестик снимите... (с)

----- добавлено через ~6 мин. -----
Спасибо, получилось!
Tregart вне форума  
 
Непрочитано 03.07.2018, 17:32
#11
Nike

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


Цитата:
Сообщение от Tregart Посмотреть сообщение
Осталось осмыслить ваш пост и понять как работает. Этим сейчас и займусь
Загружашь лисп, вводишь "syn" (команда с диалогом в окне) или "-syn" (диалог в командной строке), на все запросы "Oui" (по хранцузски "Да") - то бишь обновить атрибуты с сохранением значения, позиции, угла поворота и стиля и ОК.
Nike вне форума  
 
Непрочитано 03.07.2018, 19:07
#12
Сергей812


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


Цитата:
Сообщение от Tregart Посмотреть сообщение
Если примитив добавляешь - все вхождения меняются, а если атрибут - то нет.
Такая реализация Аутодеска - есть определение блока и определения атрибутов данного блока, и есть вставка блока и вставки его атрибутов. Вставка блока ссылается на его определение, а вставки атрибутов живут "своей жизнью" уже - иначе бы отсутствовала возможность задавать разные значения для атрибутов разных вставок блоков.
Сергей812 вне форума  
 
Непрочитано 03.07.2018, 20:05
#13
Кулик Алексей aka kpblc
Moderator

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


Насколько я помню, Alaspher реализовывал принудительное добавление вхождения атрибута во вхождение блока. Правда, шло все через ename.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 03.07.2018, 20:23
#14
Tregart


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Такая реализация Аутодеска - есть определение блока и определения атрибутов данного блока, и есть вставка блока и вставки его атрибутов. Вставка блока ссылается на его определение, а вставки атрибутов живут "своей жизнью" уже - иначе бы отсутствовала возможность задавать разные значения для атрибутов разных вставок блоков.
Это нормально. Зачем смещать видимые атрибуты в начальную точку? Я ж об этом не просил! Команда называется АТРОБНОВИТЬ, а не АТРИСПОРТИТЬ.
Tregart вне форума  
 
Непрочитано 03.07.2018, 21:39
#15
Сергей812


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


Цитата:
Сообщение от Tregart Посмотреть сообщение
Команда называется АТРОБНОВИТЬ, а не АТРИСПОРТИТЬ.
Испортить - если бы и значения атрибутов сносила бы напрочь) Привыкайте к подобным нюансам - если хотите пользоваться лишь штатными средствами акада типа извлечение данных.
Сергей812 вне форума  
 
Непрочитано 04.07.2018, 07:52
#16
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Tregart Посмотреть сообщение
Это нормально. Зачем смещать видимые атрибуты в начальную точку? Я ж об этом не просил! Команда называется АТРОБНОВИТЬ, а не АТРИСПОРТИТЬ.
Для ради приколу - возьми и в описании атрибута поменяй используемый стиль. А потом вызови _.attsync
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как обновить атрибуты блока не смещая их в начальную точку?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пропадают атрибуты из блока Rijik-pijik AutoCAD 8 08.12.2017 21:24
Lisp. авто-нумерация атрибута блока. DonJad LISP 10 26.10.2014 02:04
Как извлечь из блока константные атрибуты (на AutoLISP)? Matt LISP 5 19.04.2007 21:12
Как изменять, добавлять атрибуты у блока Алексей К. AutoCAD 2 29.01.2007 10:59
Как добавить атрибуты в динамический блок? Archeo Динамические блоки 20 17.11.2006 11:30