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

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

Назначение свойств атрибутов блока без attsync

Ответ
Поиск в этой теме
Непрочитано 15.02.2006, 10:16 #1
Назначение свойств атрибутов блока без attsync
Кулик Алексей aka kpblc
Moderator
 
LISP, C# (ACAD 200[9,12,13,14])
 
С.-Петербург
Регистрация: 25.08.2003
Сообщений: 39,787

Суть проблемы в следующем: программно создается новый блок примерно следующим кодом (нового блока гарантированно в чертеже нет ни в каком виде; исходный блок есть только в описании - вообще работа идет только через описания блоков):
Код:
[Выделить все]
(defun _kpblc-block-mod	(block-dest-name  block-dest-point block-src-name
			 /		  adoc		   block_dest
			 att_list	  obj_list	   att_dest
			 att_align	  att_inspoint	   att_textalignpoint
			 )
  (setq	adoc	   (vla-get-activedocument (vlax-get-acad-object))
	block_dest (vla-add (vla-get-blocks adoc (vlax-3d-point block-dest-point))
			    block-dest-name
			    ) ;_ end of vla-add
	) ;_ end of setq
  (vlax-for item (vla-item (vla-get-blocks adoc) block-src-name)
    (if	(= (vla-get-objectname item) "AcDbAttributeReference")
      (setq att_list (append att_list (list item)))
      (setq obj_list (append obj_list (list item)))
      ) ;_ end of if
    ) ;_ end of vlax-for
  ;; Тут неинтересные действия типа рисования полилиний в блок
  ;; и передачи obj_list в block
  (foreach item	att_list
    (setq att_dest     (vla-addattribute
			 block_dest
			 (vla-get-height item)
			 (vla-get-mode item)
			 (vla-get-promptstring item)
			 (vlax-3d-point
			   (mapcar '-
				   (vlax-safearray->list
				     (vlax-variant-value
				       (vla-get-insertionpoint item)
				       ) ;_ end of vlax-variant-value
				     ) ;_ end of vlax-safearray->list
				   block-dest-point
				   ) ;_ end of mapcar
			   ) ;_ end of vlax-3d-point
			 (vla-get-tagstring item)
			 (vla-get-textstring item)
			 ) ;_ end of vla-AddAttribute
	  att_inspoint (vlax-safearray->list
			 (vlax-variant-value (vla-get-insertionpoint item))
			 ) ;_ end of vlax-safearray->list
	  ) ;_ end of setq
    (vla-put-alignment att_dest (vla-get-alignment item))
    (vla-put-textalignmentpoint att_dest (vlax-3d-point att_inspoint))
    ) ;_ end of foreach
  ) ;_ end of defun
Функцией потом возвращается vla-указатель на созданный блок. Так вот, проблема в 2005 такая: назначение выравнивания и точек вставки атрибутов выполняется, но после вставки требуется синхронизировать атрибуты. При этом программное выполнение
Код:
[Выделить все]
(command "_.attsync" "_n" block-dest-name)
сразу же после вставки блока (атрибуты не имеют еще значений) эффекта не дает - надо заполнять атрибуты, потом выполнять синхронизацию... В общем, не гуд.
На блок потом вешается реактор командный, так что применять _.attsync после заполнения атрибутов невозможно. (vla-regen(vla-Regen (vla-get-ActiveDocument (vlax-get-acad-object) acActiveViewport) ожидаемого эффекта тоже не приносит (что в принципе предсказуемо).
Использовать (entmake) и функции на их основе (примерно как это сделано в ruCAD 1.0 при вставке блоков) не очень хотелось бы - vla-функции позволяют напрямую работать в блок, не создавая отдельно примитивы и потом не удаляя их.
Эдуард подсказал функцию (acet-attsync <ИмяБлока>), но это завязка на ET (которые не всегда можно поставить). Тем не менее - если кто скажет, в каком arx болтается эта команда, скажите - попробую этот arx грузить (предложения грузить vlx- и fas- приложения заранее не прокатят - функция должна работать и под LT Extender, который эти приложения не понимает).
Поиск по dwg.ru и autocad.ru привел только к одному (вроде как) рабочему приложению - Attribute Style Editor V1.12 от {Smirnoff}, которым я воспользоваться не могу, увы мне, увы...
Вопрос такой - что и где мне еще надо сделать, чтоб добиться нормального отображения атрибутов во вставке блока?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Просмотров: 11712
 
Непрочитано 15.02.2006, 17:50
1 | #2
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Тем не менее - если кто скажет, в каком arx болтается эта команда, скажите - попробую этот arx грузить
(arxload "battman")
(acet-attsync "blockname")

http://discussion.autodesk.com/threa...hreadID=403747

Цитата:
Attsync bug when used like this (command "attsync" "n" "revtext1") might affect other attributes on the drawing by having them mirrored or restoring the rotation to the rotation in the block definition if the rotation of the attribute on specific blocks (not the block definition) has been changed by code. A workaround is to use (arxload "battman") (acet-attsync "blockname"). Battman command also messes up with attributes like this. (Fixed in AutoCAD 2006)
http://www.jtbworld.com/autocad2005.htm
VVA вне форума  
 
Непрочитано 28.01.2013, 20:59
#3
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


VVA Спасибо)
sdv79 вне форума  
 
Непрочитано 29.01.2013, 09:56
#4
bargool


 
Регистрация: 16.08.2006
Санкт-Петербург
Сообщений: 508
<phrase 1=


Некромантия на форуме процветает
__________________
Алексей
bargool вне форума  
 
Непрочитано 29.01.2013, 18:42
#5
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Кто знает как (arxload "battman") (acet-attsync "blockname") данный результат можно применить к каждому элементу набору (ssget '((0 . "INSERT"))), а не ко всей модели
sdv79 вне форума  
 
Непрочитано 27.08.2015, 12:58
#6
Nike

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


Цитата:
Сообщение от bargool Посмотреть сообщение
Некромантия на форуме процветает


Повторю позапрошлогодний вопрос - как сделать attsync (или как-то по другому вернуть атрибуты на свои места) не для всех повально, а для выбранного (выбранных) блоков?
Спасибо!
Nike вне форума  
 
Автор темы   Непрочитано 27.08.2015, 13:23
#7
Кулик Алексей aka kpblc
Moderator

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


Штатными средствами - никак. Придется писать отдельную команду, обрабатывающую выделенные блоки. Головняк тот еще, я полагаю...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.08.2015, 15:03
#8
Boxa

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


Если язык не принципиален, то ИМХО,можно творчески переработать код Андрея Бушмана ссылочка
Boxa вне форума  
 
Непрочитано 15.08.2017, 04:16
#9
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,030


Если правильно понял (не программист), то вопрос у меня близкий (дабы темы не плодить).
Вставляем программно (ObjectARX) блоки, в т.ч. с атрибутами. В файле уже могут быть сотни и тысячи вхождений. Если блок нужно вставлять с масштабированием, то ATTSYNC делается слишком долго.
А ручная команда INSERT прекрасно быстро вставляет блоки, масштабируя и атрибуты. Без всякого, как понимаю, ATTSYNC.
Как это воспроизвести известно?
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 15.08.2017, 06:32
#10
Boxa

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


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Как это воспроизвести известно?
Угу, известно. Самому, назначать свойства атрибута.
Boxa вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Назначение свойств атрибутов блока без attsync

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

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