как получить в net значение пары dxf

Автор Тема: как получить в net значение пары dxf  (Прочитано 4501 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн andrey_maАвтор темы

  • ADN OPEN
  • Сообщений: 1
  • Карма: 0
К примеру есть ObjId и хочу получить чтото в виде:
Цитировать
Command: (setq ACAD_EVALUATION_GRAPH (entget (cdr (assoc 360 dictionary ))))
((-1 . <Entity name: 7ee74610>) (0 . "ACAD_EVALUATION_GRAPH") (5 . "54A") (102
. "{ACAD_REACTORS") (330 . <Entity name: 7ee74608>) (102 . "}") (330 . <Entity
name: 7ee74608>) (100 . "AcDbEvalGraph") (96 . 183) (97 . 183) (91 . 0) (93 .
32) (95 . 175) (360 . <Entity name: 7ee74680>) (92 . 2) (92 . 5) (92 . 0) (92 .
7) (91 . 1) (93 . 32) (95 . 176) (360 . <Entity name: 7ee74688>) (92 . -1) (92
. -1) (92 . 2) (92 . 2) (91 . 2) (93 . 32) (95 . 177) (360 . <Entity name:
7ee74690>) (92 . 0) (92 . 0) (92 . -1) (92 . -1) (91 . 3) (93 . 32) (95 . 178)
(360 . <Entity name: 7ee74698>) (92 . 1) (92 . 1) (92 . -1) (92 . -1) (91 . 4)
(93 . 32) (95 . 179) (360 . <Entity name: 7ee746a8>) (92 . -1) (92 . -1) (92 .
5) (92 . 5) (91 . 5) (93 . 32) (95 . 180) (360 . <Entity name: 7ee746b0>) (92 .
3) (92 . 3) (92 . -1) (92 . -1) (91 . 6) (93 . 32) (95 . 181) (360 . <Entity
name: 7ee746b8>) (92 . 4) (92 . 4) (92 . -1) (92 . -1) (91 . 7) (93 . 32) (95 .
182) (360 . <Entity name: 7ee746d0>) (92 . 6) (92 . 6) (92 . -1) (92 . -1) (91
. 8) (93 . 32) (95 . 183) (360 . <Entity name: 7ee746e0>) (92 . 7) (92 . 7) (92
. -1) (92 . -1) (92 . 0) (93 . 0) (94 . 1) (91 . 0) (91 . 2) (92 . -1) (92 .
-1) (92 . -1) (92 . 1) (92 . -1) (92 . 1) (93 . 0) (94 . 1) (91 . 0) (91 . 3)
(92 . -1) (92 . -1) (92 . 0) (92 . 3) (92 . -1) (92 . 2) (93 . 0) (94 . 2) (91
. 1) (91 . 0) (92 . -1) (92 . 5) (92 . -1) (92 . -1) (92 . -1) (92 . 3) (93 .
0) (94 . 1) (91 . 0) (91 . 5) (92 . -1) (92 . -1) (92 . 1) (92 . 4) (92 . -1)
(92 . 4) (93 . 0) (94 . 1) (91 . 0) (91 . 6) (92 . -1) (92 . -1) (92 . 3) (92 .
6) (92 . -1) (92 . 5) (93 . 0) (94 . 2) (91 . 4) (91 . 0) (92 . 2) (92 . -1)
(92 . -1) (92 . -1) (92 . -1) (92 . 6) (93 . 0) (94 . 2) (91 . 0) (91 . 7) (92
. -1) (92 . -1) (92 . 4) (92 . 7) (92 . -1) (92 . 7) (93 . 0) (94 . 2) (91 . 0)
(91 . 8) (92 . -1) (92 . -1) (92 . 6) (92 . -1) (92 . -1))
Command: (setq c (entget (cdr (assoc 360 ACAD_EVALUATION_GRAPH ))))
((-1 . <Entity name: 7ee74680>) (0 . "BLOCKLINEARPARAMETER") (330 . <Entity
name: 7ee74610>) (5 . "5F8") (100 . "AcDbEvalExpr") (90 . 175) (98 . 31) (99 .
8) (100 . "AcDbBlockElement") (300 . "Linear") (98 . 31) (99 . 8) (1071 . 0)
(100 . "AcDbBlockParameter") (280 . 1) (281 . 0) (100 .
"AcDbBlock2PtParameter") (1010 -466.407 107.957 0.0) (1011 -368.502 58.2298
0.0) (170 . 4) (91 . 179) (91 . 176) (91 . 0) (91 . 0) (171 . 1) (92 . 179)
(301 . "DisplacementX") (172 . 1) (93 . 179) (302 . "DisplacementY") (173 . 1)
(94 . 176) (303 . "DisplacementX") (174 . 1) (95 . 176) (304 . "DisplacementY")
(177 . 0) (100 . "AcDbBlockLinearParameter") (305 . "Distance1") (306 . "")
(140 . -13.0145) (307 . "") (96 . 1) (141 . 0.0) (142 . 0.0) (143 . 0.0) (175 .
0))

Command: (cdr (assoc 305 c))
"Distance1"

Command: (cdr (assoc 300 c))
"Linear"

Command: (cdr (assoc 90 c))
175

Написал прогу в c# но остановился на проблеме считывания свойств объекта.
Метод:
Цитировать
PropertyInfo[] piArr = ACAD_EVALUATION_GRAPH.GetType().GetProperties();
не дает всех параметров которые есть в dxf:
IsPersistent
Id
AcadObject
ClassID
ObjectBirthVersion
HasSaveVersionOverride
IsObjectIdsInFlux
UndoFiler
IsAProxy
IsTransactionResident
IsReallyClosing
IsCancelling
IsUndoing
IsNotifying
IsNewObject
IsModifiedGraphics
IsModifiedXData
IsModified
IsNotifyEnabled
IsWriteEnabled
IsReadEnabled
IsErased
IsEraseStatusToggled
XData
MergeStyle
ExtensionDictionary
Drawable
Database
Handle
OwnerId
ObjectId
DrawableType
Bounds
AutoDelete
IsDisposed
UnmanagedObject
Особенно нужны коды 95 индексами свойств динамического блока.
Может это скрывается в параметре Database но не знаю как его заполучить в каком-то приемлемом для обработки варианте.
« Последнее редактирование: 11-11-2014, 01:18:01 от Александр Ривилис »

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: как получить в net значение пары dxf
« Ответ #1 : 10-11-2014, 22:11:01 »
Если ты хочешь получить значения всех свойств, то что тебе мешает воспользоваться Reflection?

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: как получить в net значение пары dxf
« Ответ #2 : 10-11-2014, 22:31:39 »
так Вам надо способ получения DXF из .Net, или как получить значение параметра вхождения дин. блока?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13880
  • Карма: 1786
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: как получить в net значение пары dxf
« Ответ #3 : 10-11-2014, 23:03:48 »
Дима_, правильный вопрос! Получить параметры вхождения динамического блока в AutoCAD .NET API значительно проще, чем получить DXF-пары. Чтобы получить DXF-пары необходимо выполнить P/Invoke для acdbEntGet. Как это делать я приводил здесь: http://adn-cis.org/forum/index.php?topic=1029.msg4743#msg4743 (зависит от версии AutoCAD и его разрядности).
« Последнее редактирование: 11-11-2014, 00:36:45 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение