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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Управление IAcadEntity объектом (выноска СПДС) через LISP

Управление IAcadEntity объектом (выноска СПДС) через LISP

Ответ
Поиск в этой теме
Непрочитано 24.10.2018, 11:11 #1
Управление IAcadEntity объектом (выноска СПДС) через LISP
OKJI
 
AutoLISP
 
Харьков
Регистрация: 19.06.2018
Сообщений: 101

Здравствуйте дорогие коллеги!!!
Есть мультивыноска СПДС:

там вроде и свойства и атрибуты есть... а добраться к ним с помощью vlax-get- и vlax-put- или vla-Get и vla-Set способов не могу....
помогите пожалуйста добраться до управления этой выноской...
Если:
Код:
[Выделить все]
 (SETQ obj (ENTLAST))
(SETQ vla_obj (VLAX-ENAME->VLA-OBJECT obj))
(vlax-dump-Object vla_obj t)
>>>
<Имя объекта: 7fffd2e9db0> 
#<VLA-OBJECT IAcadEntity 00000000a7360738> 
; IAcadEntity: Интерфейс AutoCAD для работы со своими объектами.
; Значения свойств:
;   Application (RO) = #<VLA-OBJECT IAcadApplication 000000013fffd910>
;   Document (RO) = #<VLA-OBJECT IAcadDocument 0000000042a71308>
;   EntityTransparency = "ПоСлою"
;   Handle (RO) = "1A5E223"
;   HasExtensionDictionary (RO) = 0
;   Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 00000000d1cb6d98>
;   Layer = "0"
;   Linetype = "Continuous"
;   LinetypeScale = 1.0
;   Lineweight = 9
;   Material = "ByLayer"
;   ObjectID (RO) = 132560
;   ObjectID32 (RO) = 132560
;   ObjectName (RO) = "mcsDbObjectNotePosition"
;   OwnerID (RO) = 47363
;   OwnerID32 (RO) = 47363
;   PlotStyleName = "ByLayer"
;   TrueColor = #<VLA-OBJECT IAcadAcCmColor 00000000d1cb6730>
;   Visible = -1
; Поддерживаемые методы:
;   ArrayPolar (3)
;   ArrayRectangular (6)
;   Copy ()
;   Delete ()
;   GetBoundingBox (2)
;   GetExtensionDictionary ()
;   GetXData (3)
;   Highlight (1)
;   IntersectWith (2)
;   Mirror (2)
;   Mirror3D (3)
;   Move (2)
;   Rotate (2)
;   Rotate3D (3)
;   ScaleEntity (2)
;   SetXData (2)
;   TransformBy (1)
;   Update ()

T 
_$
__________________
Вечность это:
 (while T)

Последний раз редактировалось Кулик Алексей aka kpblc, 24.10.2018 в 11:30.
Просмотров: 4043
 
Непрочитано 24.10.2018, 11:31
#2
Кулик Алексей aka kpblc
Moderator

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


vlax-get-property obj property
vlax-put-property obj property value
vlax-invoke obj methodname
vlax-invode-method obj methodname

----- добавлено через 34 сек. -----
И то, не всегда и не для всего. И при условии подгруженного ObjectEnabler'a (как минимум)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.10.2018, 11:47
#3
frostmourn


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


И через entget. Но тоже ограниченно.
frostmourn вне форума  
 
Автор темы   Непрочитано 24.10.2018, 11:50
#4
OKJI

AutoLISP
 
Регистрация: 19.06.2018
Харьков
Сообщений: 101
Отправить сообщение для OKJI с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
vlax-get-property obj property
vlax-put-property obj property value
vlax-invoke obj methodname
vlax-invode-method obj methodname
Код:
[Выделить все]
 (SETQ property   "WindowTop"
      methodname "SetXData"
)
(vlax-get-property vla_obj property)
(vlax-invoke-method vla_obj methodname)
>>>
; ошибка: ActiveX Server возвратил ошибку: неизвестное имя: WindowTop
_$ 
; ошибка: слишком мало фактических параметров
_$ 
что-то ни сходится...

----- добавлено через ~11 мин. -----
небольшое уточнение, мне нужно менять 2 строки на выноске и возможно ручку наклона...
__________________
Вечность это:
 (while T)
OKJI вне форума  
 
Непрочитано 24.10.2018, 12:34
#5
Кулик Алексей aka kpblc
Moderator

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


А что за vla-obj? У него вообще подобные свойства есть?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 24.10.2018, 12:51
#6
OKJI

AutoLISP
 
Регистрация: 19.06.2018
Харьков
Сообщений: 101
Отправить сообщение для OKJI с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А что за vla-obj? У него вообще подобные свойства есть?
Я незнаю чего оно на форуме подсвечивается синим... это обычный вла объект (если правильно понял вопрос)

А если неправильно понял...
То это спдс выноска spnotep ее читаемые совйства и методы я выводил с помощью
Код:
[Выделить все]
 (vlax-dump-Object vla_obj t)
в шапке этой темы, но может это не всё... может есть еще какието операнты чтобы управлять этой выноской...
__________________
Вечность это:
 (while T)
OKJI вне форума  
 
Непрочитано 24.10.2018, 12:55
#7
Кулик Алексей aka kpblc
Moderator

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


У объекта spnotep есть свойство "WindowTop"? Че-т мне кажется, что нет такого свойства у этого объекта.

----- добавлено через 55 сек. -----
А для того, чтобы назначать XData, сначала надо эти данные сформировать (за подробностями добро пожаловать в справку)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.10.2018, 12:56
#8
RrRR


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


Помнится, для подобных объектов нужно отдельно зарегистрировать COM-сервер (mcCom2.dll).
Вот тут обсуждалось http://forum.dwg.ru/showthread.php?t=32516
и есть хелп, как этим пользоваться https://dwg.ru/dnl/8746
RrRR вне форума  
 
Автор темы   Непрочитано 24.10.2018, 13:14
#9
OKJI

AutoLISP
 
Регистрация: 19.06.2018
Харьков
Сообщений: 101
Отправить сообщение для OKJI с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
У объекта spnotep есть свойство "WindowTop"? Че-т мне кажется, что нет такого свойства у этого объекта.

----- добавлено через 55 сек. -----
А для того, чтобы назначать XData, сначала надо эти данные сформировать (за подробностями добро пожаловать в справку)
Да точно.. сорри что ввел в заблуждение
Код:
[Выделить все]
 
(SETQ property   "ObjectName"
      methodname "SetXData"
)
(vlax-get-property vla_obj property)
(vlax-invoke-method vla_obj methodname)
>>>
"SetXData" 
"mcsDbObjectNotePosition" 
_$ 
; ошибка: слишком мало фактических параметров
_$ 
__________________
Вечность это:
 (while T)
OKJI вне форума  
 
Непрочитано 24.10.2018, 13:25
#10
Сергей812


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


Насколько понимаю, это продолжение темы Как в выноску вставить атрибут ? Сделайте через события и обыкновенную мультивыноску:
1. В расширенные данные мультивыноски прописывается хэндл вставки блока.
1. В событии изменения объекта, если объектом является вставка атрибута (AttributeReference) - получаете владельца (вставку блока BlockReference) и заносите в список.
2. В событии простоя приложения Idle - если этот список не пустой, то по в цикле по хэндлу блока находите все связанные выноски, и сформировав из атрибутов блока нужную комбинацию данных, обновляете содержимое выносок.
Сергей812 вне форума  
 
Автор темы   Непрочитано 24.10.2018, 14:06
#11
OKJI

AutoLISP
 
Регистрация: 19.06.2018
Харьков
Сообщений: 101
Отправить сообщение для OKJI с помощью Skype™


Цитата:
Сообщение от RrRR Посмотреть сообщение
Помнится, для подобных объектов нужно отдельно зарегистрировать COM-сервер (mcCom2.dll).
Вот тут обсуждалось http://forum.dwg.ru/showthread.php?t=32516
и есть хелп, как этим пользоваться https://dwg.ru/dnl/8746
Спасибо Вам, вроде все нашел...


Но вот как "достучаться" до этого поля я не могу найти...

----- добавлено через ~3 мин. -----
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Насколько понимаю, это продолжение темы Как в выноску вставить атрибут ? Сделайте через события и обыкновенную мультивыноску:
1. В расширенные данные мультивыноски прописывается хэндл вставки блока.
1. В событии изменения объекта, если объектом является вставка атрибута (AttributeReference) - получаете владельца (вставку блока BlockReference) и заносите в список.
2. В событии простоя приложения Idle - если этот список не пустой, то по в цикле по хэндлу блока находите все связанные выноски, и сформировав из атрибутов блока нужную комбинацию данных, обновляете содержимое выносок.
Я отказался от этой затеи... таким методом полка не следует за шириной текста, а это вне нормах оформления документа...((((

----- добавлено через ~16 мин. -----
Цитата:
Сообщение от RrRR Посмотреть сообщение
Вот тут обсуждалось http://forum.dwg.ru/showthread.php?t=32516
Вникаю я в эту тему и понимаю что реч идет о ВБА... а я на ЛИСПЕ работаю... что делать!?!?!? СПДС с Лиспом неработает?
__________________
Вечность это:
 (while T)
OKJI вне форума  
 
Непрочитано 24.10.2018, 14:23
1 | #12
Сергей812


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


Цитата:
Сообщение от OKJI Посмотреть сообщение
Я отказался от этой затеи... таким методом полка не следует за шириной текста, а это вне нормах оформления документа...((((
смотрите с 2.05 за шириной полки - она определяется исключительно настройками стиля выноски, количество выносок может быть любым на блок, даже можно сделать для каждой из присоединенных выносок к вставке блока свой формат вывода при некоторой модернизации кода.

p.s. На медленность реагирования на изменения атрибутов не обращайте внимания - программа захвата видео неплохо акад подтормаживает)
Вложения
Тип файла: zip Пример_зависимой_выноски.zip (2.40 Мб, 18 просмотров)
Сергей812 вне форума  
 
Автор темы   Непрочитано 24.10.2018, 15:10
#13
OKJI

AutoLISP
 
Регистрация: 19.06.2018
Харьков
Сообщений: 101
Отправить сообщение для OKJI с помощью Skype™


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
смотрите с 2.05 за шириной полки - она определяется исключительно настройками стиля выноски, количество выносок может быть любым на блок, даже можно сделать для каждой из присоединенных выносок к вставке блока свой формат вывода при некоторой модернизации кода.

p.s. На медленность реагирования на изменения атрибутов не обращайте внимания - программа захвата видео неплохо акад подтормаживает)
Точно!!))) А где такие выноски живут!?!?) можно этот модуль скинуть сюда?)
__________________
Вечность это:
 (while T)
OKJI вне форума  
 
Непрочитано 24.10.2018, 15:29
#14
Сергей812


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


Это не выноски, это код на .Net (поэтому он вам не поможет), который делает две вещи:
1. Связывает выноску и вставку блока - отдельная команда рисования выноски с текущим стилем с ее заполнением и XData.
2. По алгоритму, описанному в посте №10 - отслеживает изменения в атрибутах (неважно, через свойства, редактор атрибутов, думаю - что и всякие программные нумеровалки блоков отследит) через события изменения объектов БД чертежа и когда чертеж переходит в состояние покоя (ожидание ввода пользователя) - быстренько приводит содержимое выносок в соответствие.

А выноски и блоки абсолютно стандартные, поэтому все проблемы оформления автоматически ложатся на "плечи" акада.

Помимо этого (просто не реализовал в коде) - можно отслеживать событиями удаление и восстановление (Undo) блоков и автоматически переносить связанные выноски на анонимный скрытый слой и обратно (имхо, это самый простой вариант). Для этого в выноске еще надо прописывать имя слоя, где она была изначально расположена. Ну и логичным продолжением будет реализация команды по проверке - нет ли бесхозных выносок без источника данных - вставки блока (вместо того, чтобы вручную проверять валидность чертежа) и команда обновления всех связей блок-выноска. На .Net это все реализуемо, на лиспе - пробуйте, если хотите)
Сергей812 вне форума  
 
Автор темы   Непрочитано 24.10.2018, 15:38
#15
OKJI

AutoLISP
 
Регистрация: 19.06.2018
Харьков
Сообщений: 101
Отправить сообщение для OKJI с помощью Skype™


У меня что-то ничего не получается...

Поля в выноске не меняют свои значения в зависимости от значений атрибута блока(((

----- добавлено через 42 сек. -----
только значения по умолчанию стоят...
__________________
Вечность это:
 (while T)
OKJI вне форума  
 
Непрочитано 24.10.2018, 15:59
#16
Сергей812


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


даже после регенерации чертежа?
Сергей812 вне форума  
 
Автор темы   Непрочитано 24.10.2018, 16:14
#17
OKJI

AutoLISP
 
Регистрация: 19.06.2018
Харьков
Сообщений: 101
Отправить сообщение для OKJI с помощью Skype™


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
даже после регенерации чертежа?
да вот пример
Вложения
Тип файла: dwg
DWG 2013
поле не работает.dwg (49.4 Кб, 11 просмотров)
__________________
Вечность это:
 (while T)
OKJI вне форума  
 
Непрочитано 24.10.2018, 16:18
#18
RrRR


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


Цитата:
Сообщение от OKJI Посмотреть сообщение

Вникаю я в эту тему и понимаю что реч идет о ВБА... а я на ЛИСПЕ работаю... что делать!?!?!? СПДС с Лиспом неработает?
Работает
RrRR вне форума  
 
Автор темы   Непрочитано 24.10.2018, 16:20
#19
OKJI

AutoLISP
 
Регистрация: 19.06.2018
Харьков
Сообщений: 101
Отправить сообщение для OKJI с помощью Skype™


Цитата:
Сообщение от RrRR Посмотреть сообщение
Работает
И как через лисп добраться до СПДСа?)
__________________
Вечность это:
 (while T)
OKJI вне форума  
 
Непрочитано 24.10.2018, 16:29
#20
Сергей812


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


Цитата:
Сообщение от OKJI Посмотреть сообщение
да вот пример
логично - если выноска внутри блока то)

Цитата:
Сообщение от OKJI Посмотреть сообщение
И как через лисп добраться до СПДСа?)
надеюсь, что СПДС у вас уже куплен и используется не только для выносок..
Сергей812 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Управление IAcadEntity объектом (выноска СПДС) через LISP

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
СПДС Graphics. Интеграция с AutoCAD. Нет панелек СПДС Sn4ke ПО от CSoft 40 31.07.2020 11:52
LISP. Как в ActiveX выдернуть координаты полилинии? Как задавать атребуты блока через LISP? wpww LISP 31 16.08.2016 14:17
СПДС 10 CS, при простановке размеров через ВЭ, чертеж не проходит аудит doctorraz ПО от CSoft 20 25.04.2016 12:30
LISP: возможно ли выбрать через ssget рамкой объекты разных типов? cj_lex LISP 5 20.04.2012 10:54
Управление параметром видимости дин. блока через sheetset custom properties Red Nova AutoCAD 12 25.06.2008 13:44