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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp/ActiveX. Объект AECS_MEMBER. Как получить данные о примитиве?

Lisp/ActiveX. Объект AECS_MEMBER. Как получить данные о примитиве?

Ответ
Поиск в этой теме
Непрочитано 26.04.2013, 15:09 #1
Lisp/ActiveX. Объект AECS_MEMBER. Как получить данные о примитиве?
Kirill_Ja
 
Мурманск
Регистрация: 28.07.2008
Сообщений: 208

Есть примитивы типа AECS_MEMBER.

((-1 . <Имя объекта: 7ed43778>) (0 . "AECS_MEMBER") (330 . <Имя объекта: 7ed23cf8>) (5 . "1EB48F") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 .СКЛАД_СТЕНЫ"))

Как получить данные о примитиве? Я искал в расширенных данных. Там нет. Где еще их можно упрятать?



Код:
[Выделить все]
 (defun get_apps (/ app res)
(setq app (tblnext "APPID" T))
  (while app
     (setq res (append res (list (cdar (vl-remove-if-not (function (lambda (x) (= (car x) 2 ))) app)))))
    (setq app (tblnext "APPID"))
  );end while
res
);end defun

(setq aa (get_apps))
(entget (car (entsel)) aa)

((-1 . <Имя объекта: 7ed43778>) (0 . "AECS_MEMBER") (330 . <Имя объекта: 7ed23cf8>) (5 . "1EB48F") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "СКЛАД_СТЕНЫ"))
_$

Вложения
Тип файла: dwg
DWG 2004
aecs member.dwg (191.6 Кб, 1029 просмотров)

Просмотров: 2218
 
Непрочитано 26.04.2013, 15:30
#2
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Kirill_Ja Посмотреть сообщение
Я искал в расширенных данных. Там нет. Где еще их можно упрятать?
Смотри словари.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.04.2013, 16:19
#3
Kirill_Ja


 
Регистрация: 28.07.2008
Мурманск
Сообщений: 208
<phrase 1=


В словарях нет тоже нет.
Я прочитал все словари и искал в них по имени примитива и его метке (код 5).
Нету что-то

Я знаю, что эти объекты созданы AutoCad'ом Arhitecture. Где еще может быть?
Kirill_Ja вне форума  
 
Непрочитано 26.04.2013, 17:12
#4
Кулик Алексей aka kpblc
Moderator

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


Никогда при работе в вертикалках не следует устанавливать сохранение в предыдущих версиях. Ни к чему хорошему это не приводит - можешь поверить моему опыту. У меня на работе только АА2009, так что посмотреть состав примитива не могу.
Попробовал на 2009, поставив стандартную колонну:
Код:
[Выделить все]
(vl-load-com)

(defun test (/ ent)
  (setq ent (ssname (ssget "_+.:S:E" '((0 . "AECS_MEMBER"))) 0)
        ent (vlax-ename->vla-object ent)
        ) ;_ end of setq
  (foreach item
                '("Application"      "BoundSpaces"      "ComponentsExtents"                   "ConnectionNodes"
                  "CrossSectionExtents"                 "Description"      "Document"         "EndOffset"
                  "EndPoint"         "Handle"           "HasExtensionDictionary"              "Hyperlinks"
                  "Justify"          "Layer"            "Length"           "Linetype"         "LinetypeScale"
                  "Lineweight"       "Location"         "Material"         "Normal"           "ObjectID"
                  "ObjectID32"       "ObjectName"       "OwnerID"          "OwnerID32"        "PlotStyleName"
                  "Radius"           "Roll"             "Rotation"         "ShadowDisplay"    "StartOffset"
                  "StartPoint"       "Style"            "StyleName"        "TrueColor"        "Type"
                  "Visible"
                  )
    (if (and (vlax-property-available-p ent item)
             (not (vl-catch-all-error-p (vl-catch-all-apply
                                          (function
                                            (lambda ()
                                              (vlax-get-property ent item)
                                              ) ;_ end of lambda
                                            ) ;_ end of function
                                          ) ;_ end of vl-catch-all-apply
                                        ) ;_ end of vl-catch-all-error-p
                  ) ;_ end of not
             ) ;_ end of and
      (princ (strcat "\n" item "\t : " (vl-prin1-to-string (vlax-get-property ent item))))
      ) ;_ end of if
    ) ;_ end of foreach
  (princ)
  ) ;_ end of defun
Теперь собственно вопрос - какие данные хочется получить-то?

Далее. Если ent - vla-указатель на примитив, то, например, можно и такое сделать:
Код:
[Выделить все]
$ (vlax-dump-Object (vla-GetExtensionDictionary ent))
; IAcadDictionary: A container object for storing and retrieving objects
; Property values:
;   Application (RO) = #<VLA-OBJECT IAcadApplication 0000000140d28e28>
;   Count (RO) = 1
;   Document (RO) = #<VLA-OBJECT IAcadDocument 000000002d1bfbf0>
;   Handle (RO) = "2776"
;   HasExtensionDictionary (RO) = 0
;   Name = AutoCAD.Application: Not applicable
;   ObjectID (RO) = 44
;   ObjectID32 (RO) = 44
;   ObjectName (RO) = "AcDbDictionary"
;   OwnerID (RO) = 42
;   OwnerID32 (RO) = 42
T
_$ 
_$ (vlax-dump-Object (vla-item (vla-GetExtensionDictionary ent) 0))
; IAcadXRecord: XRecord objects are used to store and manage arbitrary data
; Property values:
;   Application (RO) = #<VLA-OBJECT IAcadApplication 0000000140d28e28>
;   Document (RO) = #<VLA-OBJECT IAcadDocument 000000002d1bfbf0>
;   Handle (RO) = "2777"
;   HasExtensionDictionary (RO) = 0
;   Name = "AEC_OBJECT_GEOMETRY_CHANGE_VERSION"
;   ObjectID (RO) = 45
;   ObjectID32 (RO) = 45
;   ObjectName (RO) = "AcDbXrecord"
;   OwnerID (RO) = 44
;   OwnerID32 (RO) = 44
;   TranslateIDs = -1
А уж что с этим делать - решай самостоятельно
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 26.04.2013 в 17:28.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.04.2013, 17:21
#5
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Ну, начнем с того, что это не голый автокад. Через LISP с объектами "вертикалок" работать можно, но только через ActiveX и COM. "В лоб" он может определить только некоторые "автокадовские" свойства объекта: что за тип объекта, слой, пространство... Ну, собственно, ты уже это увидел
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Никогда при работе в вертикалках не следует устанавливать сохранение в предыдущих версиях. Ни к чему хорошему это не приводит - можешь поверить моему опыту.
+1
Do$ вне форума  
 
Автор темы   Непрочитано 26.04.2013, 17:24
#6
Kirill_Ja


 
Регистрация: 28.07.2008
Мурманск
Сообщений: 208
<phrase 1=


Уже что-то проясняется.
Не смог на вскидку найти свойства Active X, которые могли бы относиться к такому объекту.
С чего начать?
Убрал автоматическое сохранение в 2013.
Kirill_Ja вне форума  
 
Непрочитано 26.04.2013, 17:28
#7
Кулик Алексей aka kpblc
Moderator

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


Я дополнил свой пост 4
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.04.2013, 17:44
#8
Kirill_Ja


 
Регистрация: 28.07.2008
Мурманск
Сообщений: 208
<phrase 1=


Что-то да) Работать работает, а конкретики не прибавилось.
А AutoCad Arhitecture может выдавать данные иначе, чем голый?
Может из него быть доступ к свойствам объектов проще?
Kirill_Ja вне форума  
 
Непрочитано 26.04.2013, 17:46
#9
Кулик Алексей aka kpblc
Moderator

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


Я еще раз говорю - я запустил АА2009, и из-под него все смотрел. И я еще раз спрашиваю - какие данные надо получить? Данные об объекте - точка вставки? Поворот? Высота? Имя стиля? Или данные о стиле? Или еще что-то?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.04.2013, 17:55
#10
Kirill_Ja


 
Регистрация: 28.07.2008
Мурманск
Сообщений: 208
<phrase 1=


Все вышеперечисленное, но начать с геометрии: Точка вставки, высота, углы поворота по осям, какой-нибудь идентификатор, стиль (материал).
Стиль(материал) - имеется в виде не материал для визуализации, продольная геометрия объекта. Я так понимаю, в Arhitecture они могут соответствовать разным видам сортового проката например.
Kirill_Ja вне форума  
 
Непрочитано 26.04.2013, 21:44
1 | #11
Кулик Алексей aka kpblc
Moderator

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


Точка вставки: (vlax-variant-value (vlax-safearray->list (vlax-get-property ent 'startpoint)
Поворот: (vlax-get-property ent 'rotation)
Ну и так далее. На ноуте АА не установлен, так что пишу всухую.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.04.2013, 14:59
#12
Kirill_Ja


 
Регистрация: 28.07.2008
Мурманск
Сообщений: 208
<phrase 1=


Супер!!! Работает! Спасибо))))
Kirill_Ja вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp/ActiveX. Объект AECS_MEMBER. Как получить данные о примитиве?

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объединение дуг, линий в единый объект, Как объединить? Vladimir.P AutoCAD 41 25.01.2015 08:03
Как из отрезков в AutoCAD 2009 получить объект meola AutoCAD 9 24.04.2011 20:15
Как зная точку выбрать объект и получить его свойства? Zaghim Программирование 6 13.09.2010 09:07
Как получить данные из диалога DCL. mmax Программирование 4 11.02.2006 22:14