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

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

Как получить формулу поля атрибута блока посредством lisp?

Ответ
Поиск в этой теме
Непрочитано 22.03.2021, 18:31 #1
Как получить формулу поля атрибута блока посредством lisp?
Bamka70
 
Инженер-проектировщик ОВиК
 
Томск
Регистрация: 11.03.2020
Сообщений: 7

Привет всем! Месяц назад начал знакомиться с Lisp и пока что я совсем зеленый в данном направлении. Но имеется дикая необходиомасть создания мультивыноски, которая способна вытащить атрибут из блока в виде поля, чтобы содержимое выноски изменялось с изменением абрибута в блоке.
На данный момент, на просторах интрнета нашел такое решение
Код:
[Выделить все]
 
(defun c:мв_атриб (/)
(setq obj (car (entsel "\nВыбирете блок: "))) ;выбираем блок
(setq at1 (entget (entnext obj))) ;извлекаем список первого атрибута
(setq at1_text (cdr (assoc 1 at1))) ;читаем значения атрибута
  

(setq po (getpoint "\nУкажите местоположение стрелки выноски: "))
(setq p1 (getpoint po "\nПоложение полки выноски: "))    
	
(command "_.mleader" po p1 at1_text)
  )
выноска вытигивает первый артибут блока и вставляет его в выноску в виде простого текста. Кто подскажет, как вставить не просто занчение атрибута, а поле атрибута? Может есть какая-либо функция, способная вытащить информацию о формуле поля атрибута?
Просмотров: 5688
 
Непрочитано 22.03.2021, 22:37
#2
Кулик Алексей aka kpblc
Moderator

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


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

Инженер-проектировщик ОВиК
 
Регистрация: 11.03.2020
Томск
Сообщений: 7


Кулик Алексей aka kpblc, Да я прекрасно понимаю, что хочу вытащить, а именно идентификатор атрибута, если его можно так назвать, некий порядковый номер.
Например, есть блок, шаровой кран и у него есть атрибут "Позиция", формула для поля данного атрибута выглядит следующим образом "%<\AcObjProp Object(%<\_ObjId 4591463040>%).TextString>%", исхидя из формулы, я понимаю, что мне необходимо получить индетификатор 4591463040, вот каким образом его получить, не могу понять, сначала думал, что поможет метод FieldCode, но что-то не получилось, как я понял, он вытягивает поля только из текстовых элементов... пробовал через методы ActiveX, но знаний, видимо, пока не хватает...тоже не вышло получить данную информацию. Методы и функции разбираю по Полещуку.
Bamka70 вне форума  
 
Непрочитано 23.03.2021, 09:34
#4
AndruxaZ


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


вот тут у Алексея почитайте, может поможет - https://autolisp.ru/2010/05/30/field-proceed-2/
AndruxaZ вне форума  
 
Непрочитано 23.03.2021, 10:00
#5
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


ух какая веселая задачка.

Код:
[Выделить все]
 (defun c:atr-ml ( / obj att_lst att_def fild_str obj_ml pt_base pt_ins)
	(defun get-ObjectId ( x / )
		(if (> (vl-string-search "x64" (getvar "platform")) 0)
			(vla-GetObjectIdString (vla-get-utility (vla-get-activeDocument (vlax-get-acad-object))) x :vlax-false)
			(rtos (vla-get-objectId x) 2 0)
		)
    )
	
 (setq obj  (car (entsel)) ;; select insert
	
 )
(if 
	(and 
		(not (null obj)) 		                                    ;;not empty select
		(= (vla-get-ObjectName (vlax-ename->vla-object obj)) "AcDbBlockReference")		;;is insert
		(= (vla-get-HasAttributes (vlax-ename->vla-object obj)) :vlax-true)				;;has attributes
	 )
	(progn
		(setq 
			att_lst (vlax-safearray->list (vlax-variant-value (vla-GetAttributes (vlax-ename->vla-object obj)))) ;;lst of attr
			att_def (car att_lst)  ;;тут осуществить поиск нужного атрибута если их несколько 
			pt_base (vlax-safearray->list (vlax-variant-value (vla-get-InsertionPoint (vlax-ename->vla-object obj))))
			pt_ins (polar pt_base 10 10.3)
			fild_str (strcat "%<\\AcObjProp Object(%<\\_ObjId " (get-ObjectId att_def) ">%).TextString>%")
			obj_ml (sad-addMleader nil (list pt_base pt_ins) 	(list (list "TextString" fild_str)) )
		)
		(vla-regen (vla-get-activeDocument (vlax-get-acad-object)) acActiveViewport) ;;for regen filed value
		(sad-parse-ml-line obj_ml)
	)
	(princ "\nIncorrect input")
)
 
 
 (princ)
) 
(defun sad-addMleader (owner pt_list draw_opt / doc index obj pt_variant) ;|Отрисовка мультивыноски ActivX
	(sad-addMleader  nil (list (getpoint) (getpoint)) '( ("TextString" "Text1") ("TextRotation" 0.785) ))
	Аргументы 
	*  Указатель на владельца или nil
	*  Список из точек (не менее двух)
	*  Список кривизны
	*  Cписок опций. По умолчанию - активные настройки (поддерживаются все свойства размера, кроме RO) 
		'("Layer" "Размеры ЭН")
		'("" "")	
	Возвращаемое значение
	*  Указатель на созданный объект
	|;
(if (not owner) (setq owner (sad-get-CurrentSpace))) ;;если не указано другого - активное пространство активного документа	
(if (not index) (setq index 1))
(setq pt_variant 
	(vlax-make-variant
		(vlax-safearray-fill 
			(vlax-make-safearray 
				vlax-vbDouble 
				'(0 . 5) 
			) 
			(append (car pt_list) (cadr pt_list) 	)	
		) 	
	) 
)
(setq obj (vla-addMleader owner pt_variant index))
(sad-change-property obj draw_opt)
)  ;;sad-addLightWeightPolyline  
(defun sad-change-property (obj draw_opt) ;|внутрення функция
	присовение примитиву свойств ActivX
	Аргументы:
	* указатель на объект - vla-object
	* список опций
	Возвращаемое значение 
	* указатель на объект - vla-object
	|;
	(foreach opt draw_opt
		(vl-catch-all-apply 
			'(lambda ()
				(vlax-put-property obj (car opt) (cadr opt))
			)
		)
	)
	;;(vla-update obj)
	obj
);;
(defun sad-get-CurrentSpace ( ) ;|получение активного пространства в активном документе
	*аргументов нет
	*возвращаемое значение указатель на модель или лист
	|;
	(if
		(= (vla-get-ActiveSpace (vla-get-activedocument (vlax-get-acad-object))) 1)
		(vla-get-ModelSpace (vla-get-activedocument (vlax-get-acad-object)))
		(if 
			(= (vla-get-MSpace (vla-get-activedocument (vlax-get-acad-object))) :vlax-false)
			(vla-get-PaperSpace (vla-get-activedocument (vlax-get-acad-object)))
			(vla-get-ModelSpace (vla-get-activedocument (vlax-get-acad-object)))
		)
	) 
);  

(defun sad-parse-ml-line ( mlObj / temp originPt originDl mlBasePt mlDestPoint pt_variant fl) ;|двигаем выноску
	*аргумент - vla-object мультивыноски
	*возвращет - vla-object мультивыноски или nil при нажатии esc
	|;
	(defun dir2pt (ang / ) (list (cos ang) (sin ang) 0)) 
	(defun pt2dir (pt / ang)
	;;; input - 2d vector
	;;; return - direction in rad
		(setq ang (atan (/ (cadr pt) (car pt)))	)
		(cond 
			((< (car pt) 0) (setq ang (+ ang (* pi 1))))
			((and (>= (car pt) 0) (< (cadr pt) 0)) (setq ang (+ ang (* pi 2)))) 
		)
		ang
	)
	(defun 2ptVariant (pt1 pt2 /  )
	;;;input - 2 points
	;;;output - vla-variant
		(vlax-make-variant
			(vlax-safearray-fill 
				(vlax-make-safearray 
					vlax-vbDouble 
					'(0 . 5) 
				) 
				(append pt1 pt2)
			) 	
		) 
	)
	(defun dlDir (obj ptBase ptEnd / dlVec txtVec rez alf)
	;;;
	;;;return - vla-variant - DogLeg's vector
		(setq 
			txtVec (vla-get-TextRotation obj) ;; dirction text
			dlVec (angle ptEnd ptBase)
		)
		(if ;;angle betveen vecs
			(> 	(setq alf (abs (- txtVec dlVec) )) pi	) 
			(setq alf (abs (- dlVec txtVec) )) 
		)
		(if (> alf pi) (setq alf (- (* pi 2) alf)))
		(if (< alf (* pi 0.5 ) )
			(setq rez (dir2pt (+ txtVec pi)))
			(setq rez (dir2pt txtVec))
		)
		(vlax-3d-point rez)
	)
	(setq 
		temp (vlax-safearray->list (vlax-variant-value (vla-GetLeaderLineVertices mlObj 0)))
		mlBasePt (list (car temp) (cadr temp) (caddr temp))
		temp (cdr (cdr (cdr temp)))
		originPt (list (car temp) (cadr temp) (caddr temp))
		originDl (vla-GetDoglegDirection mlObj 0)
		fl t
	)
	(while fl
		(if (vl-catch-all-error-p (setq temp (vl-catch-all-apply 'grread '(t 12 0))))
			(progn ;;ESC
				(vla-SetDoglegDirection mlObj 0 originDl)
				(vla-SetLeaderLineVertices mlObj 0 (2ptVariant mlBasePt originPt))
				(setq fl nil mlObj nil)
			) 
			(progn 
				(if (or (= (car temp) 5) (= (car temp) 3)) 
					(progn
						(vla-SetLeaderLineVertices mlObj 0 (2ptVariant mlBasePt (cadr temp))) 
						(vla-SetDoglegDirection mlObj 0 (dlDir mlObj mlBasePt (cadr temp)))
				))
				(if (or (= (car temp) 3) (= (car temp) 25)) (setq fl nil))
			)
		)
	) ;;while
	mlObj
)

AndruxaZ, жуть какая, век бы сам копал
В целом задача решена, в частностях: надо переписывать указание объекта и прочие взаимодействия с пользователем и проверки корректности ввода.

з.ы. переписал что бы повеселей выглядело, но над обработкой ESC еще нужно поколдовать.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...

Последний раз редактировалось Vladimir_Sergeevich, 23.03.2021 в 12:09.
Vladimir_Sergeevich вне форума  
 
Автор темы   Непрочитано 24.03.2021, 05:14
#6
Bamka70

Инженер-проектировщик ОВиК
 
Регистрация: 11.03.2020
Томск
Сообщений: 7


AndruxaZ, Спасибо! Посмотрел, но при попытке реализовать у себя рассмотренные коды ActiveX выдает ошибку "ошибка: ActiveX Server возвратил ошибку: неизвестное имя: FieldCode", такое же было, когда пытался применить методы...пробовал примеры из учебника Полещука и из справочной документации по AciveX...но скорее всего я что-то делаю не так...

----- добавлено через ~1 мин. -----
Vladimir_Sergeevich, Спасибо за код, почти то что надо, буду его рабирать, чтобы понять, как это работает. Может добавлю возможность указывать конкретную точку вставки выноски и полочки.
Bamka70 вне форума  
 
Непрочитано 24.03.2021, 06:28
#7
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


Цитата:
Сообщение от Bamka70 Посмотреть сообщение
Может добавлю возможность указывать конкретную точку вставки выноски и полочки.
Ну собственно переписывай указание pt_base (строка 22) на интерактивный ввод, а полка сажается и так ручками, что реализуется в строке 28 (sad-parse-ml-line obj_ml). В моем варианте pt_ins высчитывается жестко только потому, что она нужна для создания самой выноски.
По хорошему, надо бы обернуть строку 28 в (if (sad-parse-ml-line... и на ветку else повесить удаление созданной мультивыноски.
Совсем в идеале, надо крепко переписать sad-parse-ml-line что бы она корректно обрабатывала в ПСК.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Автор темы   Непрочитано 24.03.2021, 16:56 Вопрос решен!
#8
Bamka70

Инженер-проектировщик ОВиК
 
Регистрация: 11.03.2020
Томск
Сообщений: 7


Спасибо всем, кто ответил в теме и давал полезные материалы! Особая балгодарность Vladimir_Sergeevich
С кодом более менее разобрался, для моих целей решение оказалось чуть короче, может конечно я что-то упустил, но вроде как все работает, всего навсего соединил два кода и получил результат.
код оставлю здесь, вдруг кому пригодится...или может опытные пользователи ткнут меня в неверное решение или какое-либо упущение.

Код:
[Выделить все]
 
 (defun c:мва ( / obj att_lst att_def fild_str obj_ml pt_base pt_ins)
	(defun get-ObjectId ( x / )
		(if (> (vl-string-search "x64" (getvar "platform")) 0)
			(vla-GetObjectIdString (vla-get-utility (vla-get-activeDocument (vlax-get-acad-object))) x :vlax-false)
			(rtos (vla-get-objectId x) 2 0)
		)
    )
	
 (setq obj  (car (entsel)) ;; select insert
	
 )
(if 
	(and 
		(not (null obj)) 		                                    ;;not empty select
		(= (vla-get-ObjectName (vlax-ename->vla-object obj)) "AcDbBlockReference")		;;is insert
		(= (vla-get-HasAttributes (vlax-ename->vla-object obj)) :vlax-true)				;;has attributes
	 )
	(progn
		(setq 
			att_lst (vlax-safearray->list (vlax-variant-value (vla-GetAttributes (vlax-ename->vla-object obj)))) ;;lst of attr
			att_def (car att_lst) 
			fild_str (strcat "%<\\AcObjProp Object(%<\\_ObjId " (get-ObjectId att_def) ">%).TextString>%")
			po (getpoint "\nУкажите местоположение стрелки выноски: ")
			p1 (getpoint po "\nПоложение полки выноски: ")
		)

	  (command "_.mleader" po p1 fild_str)
	)
	(princ "\nIncorrect input")
)
 
 
 (princ)
   
)
Bamka70 вне форума  
 
Непрочитано 25.03.2021, 06:39
#9
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


Bamka70, код может и короче (по сути вырезаны функции рисовки и интерактивного редактирования реализованные через VisualLisp) и вся красота заменена на (command "_.mleader"...
В своей практике я сталкивался с тем, что быстродействие командных методов оставляет желать лучшего (вот прям до выбешивания). В результате у меня развилось религиозное неприятие командных методов программирования.
С одной стороны понято, что command кушает в более понятном для инженера-непрограммиста виде, с другой моя sad-addMleader не намного сложнее.
До кучи, есть лишний тычок мышкой и не видно как сядет выноска.

з.ы. а где короче? как было 35 строк, так 35 строк и осталось

Код:
[Выделить все]
 (defun c:atr-ml ( / obj att_lst att_def fild_str obj_ml pt_base pt_ins)
	(defun get-ObjectId ( x / )
		(if (> (vl-string-search "x64" (getvar "platform")) 0)
			(vla-GetObjectIdString (vla-get-utility (vla-get-activeDocument (vlax-get-acad-object))) x :vlax-false)
			(rtos (vla-get-objectId x) 2 0)
		)
    )
(setq obj  (entsel) ;; select insert
	pt_base (trans (cadr obj) 1 0)
	obj (car obj)
	) 
(if 
	(and 
		(not (null obj)) 		                                    ;;not empty select
		(= (vla-get-ObjectName (vlax-ename->vla-object obj)) "AcDbBlockReference")		;;is insert
		(= (vla-get-HasAttributes (vlax-ename->vla-object obj)) :vlax-true)				;;has attributes
	 )
	(progn
		(setq 
			att_lst (vlax-safearray->list (vlax-variant-value (vla-GetAttributes (vlax-ename->vla-object obj)))) ;;lst of attr
			att_def (car att_lst)  ;;тут осуществить поиск нужного атрибута если их несколько 
			pt_ins (polar pt_base 10 0.3)
			fild_str (strcat "%<\\AcObjProp Object(%<\\_ObjId " (get-ObjectId att_def) ">%).TextString>%")
			obj_ml (sad-addMleader nil (list pt_base pt_ins) 	(list (list "TextString" fild_str)) )
		)
		(vla-regen (vla-get-activeDocument (vlax-get-acad-object)) acActiveViewport) ;;for regen filed value
		(if (sad-parse-ml-line obj_ml) t (vla-delete obj_ml))
	)
	(princ "\nIncorrect input")
)
(princ)
) 
Может все таки так (библиотечные функции с предыдущего поста с кодом)
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 25.03.2021, 10:05
#10
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Цитата:
Сообщение от Bamka70 Посмотреть сообщение
ткнут меня в неверное решение или какое-либо упущение
Bamka70,
зачем вообще циклиться на выборе блока, первом атрибуте... атрибут ведь видимый - почему не тыкнуть сразу в него?

Код:
[Выделить все]
 (defun c:first_attrib_mleader ( / entsel_data field_value mleader_basepoint block_entity)
	(while (and                   
				(or (null (setq entsel_data (vl-catch-all-apply 'entsel (list "\nУкажите блок: ")))) t)
				(cond
					(
						(null entsel_data)
							t
					)
	 
				(
						(vl-catch-all-error-p entsel_data)
							(setq block_entity nil)
					)
					(
						(and
							 (= "INSERT" (cdr (assoc 0 (entget (setq block_entity (car entsel_data))))))
							 (minusp (vlax-get (vlax-ename->vla-object block_entity) 'hasattributes))
						)
							nil
					)
					(
						t
							t
					)
				)
			)
	)
	(if block_entity
		(progn
			(setq field_value (strcat "%<\\AcObjProp Object(%<\\_ObjId "
									   (itoa (vla-get-objectid (car (vlax-safearray->list (vlax-variant-value (vla-getattributes (vlax-ename->vla-object block_entity)))))))
									   ">%).TextString>%"
							  )
			)
			(command "_.mleader" (setq mleader_basepoint (getpoint "\nУкажите местоположение стрелки выноски: "))
								 (getpoint mleader_basepoint "\nПоложение полки выноски: ")
								 field_value
			)
		)
		(princ "\nОтмена")
	)
	(princ)
)

Последний раз редактировалось koMon, 25.03.2021 в 12:23.
koMon вне форума  
 
Автор темы   Непрочитано 25.03.2021, 10:20
#11
Bamka70

Инженер-проектировщик ОВиК
 
Регистрация: 11.03.2020
Томск
Сообщений: 7


koMon, в моем случае атрибуты скрыты и несут лишь информационную ценность, видеть их не надо...а вот вытаскивать в выноски или таблицы переодически надо.
Bamka70 вне форума  
 
Непрочитано 25.03.2021, 12:21
#12
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Bamka70,
ну если скрытые, то ↑
koMon вне форума  
 
Непрочитано 25.03.2021, 12:30
#13
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


Цитата:
Сообщение от koMon Посмотреть сообщение
(itoa (vla-get-objectid
koMon, посмотри ссылку из поста #4 и описание функции get-ObjectId из #5 или #9
на современной оси vla-get-objectid вернет не то значение, и надо стучаться через vla-GetObjectIdString
я сначала тоже долго думал, почему же оно не хочет работать, пока AndruxaZ не подсказал где списать
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 25.03.2021, 16:18
#14
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Цитата:
Сообщение от Vladimir_Sergeevich Посмотреть сообщение
на современной оси vla-get-objectid вернет не то значение
Vladimir_Sergeevich, я бы наверное озадачился 100% этой проблемой если бы она, например, у меня возникла) но пока на воду не дую. попробуй загрузить лисп и проверить и напиши что, да как.
koMon вне форума  
 
Непрочитано 26.03.2021, 07:03
#15
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


koMon, грузить не буду, так отвечу.
vla-GetObjectIdString возвращает 1007938000 и поле нормально работает,
vla-get-ObjectId возвращает 37 и поле не понимает что от него хотят.
з.ы.
Цитата:
Команда: (getvar "platform")
"Microsoft Windows NT Version 6.1 (x64)"
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 26.03.2021, 09:30
#16
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Vladimir_Sergeevich,
ну на нет и суда нет!
но как говорится, почувствуй разницу

Код:
[Выделить все]
Command: (vla-get-objectid (vlax-ename->vla-object (car (nentsel))))
Select object: 2372

Command: (itoa (vla-get-objectid (vlax-ename->vla-object (car (nentsel)))))
Select object: "2187135409696"
koMon вне форума  
 
Непрочитано 26.03.2021, 09:37
#17
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


очешуеть
я, что бы не думать, пытался скормить через vl-princ-to-string... какого-ж лешего itoa работает не как все
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 26.03.2021, 09:44
#18
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


думать это полезно, читать мануалы полезней вдвойне

----- добавлено через ~8 мин. -----
Цитата:
Сообщение от Vladimir_Sergeevich Посмотреть сообщение
какого-ж лешего itoa работает не как все
да потому что vla-get-objectid возвращает не десятичное число а Long_PTR

Последний раз редактировалось koMon, 26.03.2021 в 09:52.
koMon вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как получить формулу поля атрибута блока посредством lisp?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Создание поля (field), ссылающегося на текстовое значение ячейки таблицы. skkkk Готовые программы 141 24.11.2023 15:49
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
LISP. Получение значения ID пользовательского атрибута динамического блока modest-bp LISP 23 03.09.2020 11:40
Использование Поля в Атрибуте Блока 128500 AutoCAD 3 02.11.2012 18:42
Как с помощью lisp получить список всех состояний видимости динамического блока crosandr LISP 4 11.04.2012 22:33