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

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

Восстановить исходное положение атрибутов в блоке

Ответ
Поиск в этой теме
Непрочитано 20.06.2022, 12:05 #1
Восстановить исходное положение атрибутов в блоке
olga87
 
Регистрация: 28.05.2007
Сообщений: 208

Здравствуйте Уважаемые программисты!

Подскажите пожалуйста, как кодом выполнить следующее: открыть окно "Диспетчер атрибутов блоков", затем выбрать нужный блок, и далее для каждого атрибута в выбранном блоке выбрать "Редактировать" и сразу выход по "ОК". Т.е. как бы пройти по редактированию атрибутов без внесения изменений и сразу закрыть.

Это нужно для NanoCAD, в котором некорректно работает команда "атробновить". Если каждый атрибут через "Диспетчер атрибутов блоков" пройти по его редактированию и сразу выйти, то атрибуты встают на свое исходное правильное местоположение.

Заранее спасибо!
Просмотров: 1959
 
Непрочитано 20.06.2022, 12:18
#2
Boxa

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


ИМХО, правильным решением будет пересобрать вот этот код: https://web.archive.org/web/20190211...metki/attsynch под нанокад, но это не лисп....
Boxa на форуме  
 
Автор темы   Непрочитано 20.06.2022, 12:32
#3
olga87


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


NanoCAD вроде бы лишь лиспы поддерживает.
olga87 вне форума  
 
Непрочитано 20.06.2022, 12:39
#4
koMon


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


а разве нельзя передвинуть атрибуты на их положения в их описании программно?
koMon вне форума  
 
Автор темы   Непрочитано 20.06.2022, 13:02
#5
olga87


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


Не знаю как программно.
olga87 вне форума  
 
Непрочитано 20.06.2022, 13:27
#6
Boxa

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


Цитата:
Сообщение от olga87 Посмотреть сообщение
NanoCAD вроде бы лишь лиспы поддерживает.
Вас ввели в заблуждение. Я бы больше сказал, на сегодняшний день, если судить по количеству сообщений в разделах форума для разработчиков, лисп самый не популярный...
Boxa на форуме  
 
Непрочитано 20.06.2022, 14:22
#7
Сергей812


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


Цитата:
Сообщение от olga87 Посмотреть сообщение
NanoCAD вроде бы лишь лиспы поддерживает.
тыц.

Просто лисп, как и vba, обладает большей "цитируемостью", так как наработано огромное количество примеров кода за это время под него. Но у лиспа c VBA и общий недостаток - развитие этих ЯП остановилось десятки лет назад, в результате чего вместо готового функционала более современных языков там надо придумывать свои реализации элементарнейших вещей (а потом их еще и отлаживать). Поэтому было бы очень странно, что разработчики наноКада делали упор именно на лисп как основного средства автоматизации)
Сергей812 вне форума  
 
Непрочитано 20.06.2022, 17:52
#8
koMon


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


Цитата:
Сообщение от olga87 Посмотреть сообщение
программно
самый простейший случай
Код:
[Выделить все]
 (defun c:madp (/ insert_index ignore_empty_sset ignore_empty_sset command_terminated insert_sset insert_object insert_entity insert_attributes_list target_attribute)
	(repeat (sslength (setq insert_index -1
							ignore_empty_sset (and
												   (null command_terminated)
											  	   (while (null (setq insert_sset (vl-catch-all-apply 'ssget (list '((0 . "insert")))))))
											  )
							insert_sset (cond
											(
												(or
													(vl-catch-all-error-p insert_sset)
													command_terminated
												)
													(princ "\nОтмена команды")
													(ssadd)
											)
											(
												t
													insert_sset
											)
									  )
					   )
			)
			(if (minusp (vlax-get (setq insert_object (vlax-ename->vla-object (setq insert_entity (ssname insert_sset (setq insert_index (1+ insert_index)))))) 'hasattributes))
				(progn
				  	(setq insert_attributes_list (mapcar '(lambda (attribute) (cons (vla-get-tagstring attribute) attribute))
										   		  		  (vlax-invoke insert_object 'getattributes)
								  		 		 )
					)
		  			(vlax-for attribute_definition
							  (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (cdr (assoc 2 (entget insert_entity))))
							  (if (= "AcDbAttributeDefinition" (vla-get-objectname attribute_definition))

									(cond
										(
											(minusp (vlax-get (setq target_attribute (cdr (assoc (vla-get-tagstring attribute_definition) insert_attributes_list))) 'mtextattribute))
												(vla-move target_attribute
														  (vlax-3d-point (mapcar '- (vlax-get target_attribute 'textalignmentpoint) (vlax-get insert_object 'insertionpoint)))
														  (vla-get-textalignmentpoint attribute_definition)
												)
										)
										(
											t
												(vla-move target_attribute
														  (vlax-3d-point (mapcar '- (vlax-get target_attribute 'insertionpoint) (vlax-get insert_object 'insertionpoint)))
														  (vla-get-insertionpoint attribute_definition)
												)
										)
									)
							  )
					)
				)
			)
	)
)

Последний раз редактировалось koMon, 22.06.2022 в 12:31.
koMon вне форума  
 
Автор темы   Непрочитано 22.06.2022, 09:41
#9
olga87


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


После применения кода атрибуты разлетаются, т.е. не возвращаются на свое положение.
olga87 вне форума  
 
Непрочитано 22.06.2022, 10:17
#10
koMon


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


хорошо бы посмотреть пример блока
koMon вне форума  
 
Автор темы   Непрочитано 22.06.2022, 10:39
#11
olga87


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


Прикладываю блок.
Вложения
Тип файла: dwg
DWG 2010
атробновить.dwg (465.9 Кб, 8 просмотров)
olga87 вне форума  
 
Непрочитано 22.06.2022, 12:31
#12
koMon


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


многострочные атрибуты... по-быстро-простому коррекция в #8
koMon вне форума  
 
Автор темы   Непрочитано 22.06.2022, 12:43
#13
olga87


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


Спасибо Вам большое за помощь!
olga87 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Восстановить исходное положение атрибутов в блоке

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Произвольное смещение многострочных атрибутов в блоке. Makswell AutoCAD 187 23.12.2023 18:29
Как правильно производить смещение атрибутов в блоке? ACAD 2019 Artem.jkl Динамические блоки 4 15.11.2020 02:11
Autocad 2018. Атрибуты в блоке. Операции вычислений значений атрибутов. d1voq AutoCAD 1 12.03.2018 20:46
Как обновить значения атрибутов в блоке valrond AutoCAD 7 01.09.2014 11:25