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

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

как извлечь информацию о свойствах примитива

Ответ
Поиск в этой теме
Непрочитано 24.10.2005, 17:35 #1
как извлечь информацию о свойствах примитива
Владимир В
 
машиностроение
 
Москва
Регистрация: 22.03.2005
Сообщений: 56

Подскажите, как получить значения некоторых полей свойст примитива. Допустим, у меня начерчена линия, дуга и окружность. Я хочу с помощью делфи подключится к этому чертежу и посмотреть, а что же там нарисовано-то и слить потом это все куда-нить в файлик. Как подключиться из программы, написаной в дельфи, я знаю. Как чертить с помощью нее тоже представляю. А вот как прицепиться к тому, что было начерчено обычной мышкой? хотелось бы просмотреть чертеж сначала и до конца. Задача, возможно, облегчается тем, что там будут только простые примитивы: окружность, отрезок, дуга. Буду признателен за консультацию
Просмотров: 4946
 
Непрочитано 24.10.2005, 19:08 Re: как извлечь информацию о свойствах примитива
1 | #2
Tech


 
Регистрация: 18.10.2004
Odessa
Сообщений: 226
<phrase 1=


Цитата:
Сообщение от Владимир В
Подскажите, как получить значения некоторых полей свойст примитива.
В окне Properties ... :wink:
Цитата:
... А вот как прицепиться к тому, что было начерчено обычной мышкой?
Сейчас очень многие пользуются оптическими мышками
Цитата:
.... там будут только простые примитивы: окружность, отрезок, дуга.
А могут быть еще и полилинии, и мультилинии, и шриховки и т.д. и т.п. не говоря уже о 3D объектах :wink:
Для начала, неплохо бы ознакомиться с AutoCAD DXF Reference
(DXF files are text or binary files that contain drawing information that can be read by other CAD programs.)
Tech вне форума  
 
Автор темы   Непрочитано 25.10.2005, 10:25
#3
Владимир В

машиностроение
 
Регистрация: 22.03.2005
Москва
Сообщений: 56


веселье через край
Ладно, допустим я начертил все это оптической мышкой. Окно пропиртесов меня мало интересует. Поставим вопрос уже: как получить значения координат концов отрезка с помощью программы, написаной на делфях, причем отрезок начерчен НЕ этой программой?
Владимир В вне форума  
 
Непрочитано 25.10.2005, 10:32
#4
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,373


>>Владимир В
Этот ворос из раздела "Программирование". Его лучше там задать...
Хмурый вне форума  
 
Автор темы   Непрочитано 25.10.2005, 10:33
#5
Владимир В

машиностроение
 
Регистрация: 22.03.2005
Москва
Сообщений: 56


да...
посмотрел я файлик dxf, который содержит описание трех линий
и как его понять?
как мне найти инфу, которая меня интересует?
Владимир В вне форума  
 
Непрочитано 25.10.2005, 10:51
#6
Кулик Алексей aka kpblc
Moderator

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


> Владиммр В:
Прежде чем получать данные о примитиве, до него надо добраться. Если через лисп, то, например, отрезок имеет следующий вид (пояснения насколько я сам понимаю):
Код:
[Выделить все]
(
(-1 . <Entity name: 7ec92c60>) - APP: entity name (changes each time a drawing is opened). Имя объекта. Формируется автоматически.
(0 . "LINE")  - Entity type. Тип объекта. В данном случае - отрезок. Для прямой будет "XLINE", для окружности - "CIRCLE" ну и т.д.
(330 . <Entity name: 7ef71cf8>) - Soft-pointer ID/handle to owner BLOCK_RECORD object. Т.н. "мягкий" указатель. Формируется автоматически.
(5 . "DA4") - Хендл объекта
(100 . "AcDbEntity") -  Subclass marker (AcDbEntity). Маркер класса.
(67 . 0) - Указывает, в каком пространстве находится объект. 0 - в модели. 1 - в пространстве листа. Может отсутствовать.
(410 . "Model") - Имя закладки, в котором лежит объект.
(8 . "0") - имя слоя, на котором лежит объект
(48 . 100.0) - значение celtscale
(100 . "AcDbLine") - Subclass marker (AcDbLine)
(10 -736.22 -1045.88 0.0) - начальная точка
(11 1491.83 672.885 0.0) - конечная точка
(210 0.0 0.0 1.0) - Направление вектора выдавливания (куда "пойдет" отрезок, если ему задать thickness > 0)
)
Остальные группы можно посмотреть в DXF Reference AutoCAD'a.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.10.2005, 11:18
#7
Владимир В

машиностроение
 
Регистрация: 22.03.2005
Москва
Сообщений: 56


ну вот я нашел что-то в dxf
Код:
[Выделить все]
CIRCLE
  5
43
330
1F
100
AcDbEntity
  8
0
100
AcDbCircle
 10
210.4543571180976
 20
141.4074624798374
 30
0.0
 40
262.6587209240359
  0
все то, что начинается после
Код:
мне вроде понятно. Я спокойно могу это прочесть и записать куда мне нужно. А что означают строкив начале, перед
Код:
?
Владимир В вне форума  
 
Непрочитано 25.10.2005, 11:43
#8
Кулик Алексей aka kpblc
Moderator

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


Сугубо ИМХО
Преобразуем это дело в пары ("CIRCLE" выбросим, она на данный момент не нужна):
5 43
330 1F
100 AcDbEntity
8 0
100 AcDbCircle
Т.е. 5 <-> 43 - Хендл объекта, он строковый, но может иметь вид в принципе любой.
330 <-> 1F - "Мягкий" указатель на объект.
100 <-> AcDbEntity - Subclass marker (AcDbEntity). Маркер класса общей базы данных
8 <-> 0 - имя слоя, на котором болтается объект
100 <-> AcDbCircle - Subclass marker (AcDbCircle) базы данных окружностей
10 - по-моему, координата х начальной точки, 20 - у и 30 - z, дальше не помню - смотреть надо.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.10.2005, 12:04
#9
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,202
<phrase 1=


>Владимир В
Я Delphi не знаю, но ,ИМХО, вы идете по не правильному пути.
Для работы со свойствами объектов, вам, скорее всего , нужно использовать объектную модель акада.
DXF коды используются в автолиспе, они, ИМХО, для него и предназначены.

Почитайте сдесь, должно помочь:
http://www.autocad.ru/cgi-bin/f1/board.cgi?p=42
Apelsinov вне форума  
 
Непрочитано 25.10.2005, 12:17
#10
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Сообщение от Владимир В
веселье через край
Ладно, допустим я начертил все это оптической мышкой. Окно пропиртесов меня мало интересует. Поставим вопрос уже: как получить значения координат концов отрезка с помощью программы, написаной на делфях, причем отрезок начерчен НЕ этой программой?
Прежде всего, зависит от того, как именно Вы получаете доступ из программы, написанной на Delphi к примитивам AutoCAD. Скорее всего только через объектную модель, при запущенном AutoCAD. Есть вариант чтения напрямую DWG-файла, например с использованием библиотек фирмы CAD Soft Gold, но его отклоним как маловероятный (тогда и вопросов бы не было).

Остается объектная модель. Тут не зависит ничего от того, какой программой был начерчен отрезок или хоть что. Есть объектная модель, описанная в acadauto.chm или, если больше нравится, в AutoCAD_TLB.PAS. Вот то, и только то, что там объявлено, доступно из Delphi-программы. Примеров там тьма, правда на каком-то VBA.

Для получения координат отрезка надо найти каким-то образом ("400 сравнительно честных способов") объект этого конкретного отрезка и координаты извлечь из его свойств. Для отрезка эти свойства называются StartPoint и EndPoint. Точно так, как работают с любыми объектами в Delphi. Но все это надо вытаскивать из Help.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 25.10.2005, 12:42
#11
Владимир В

машиностроение
 
Регистрация: 22.03.2005
Москва
Сообщений: 56


Цитата:
Остается объектная модель. Тут не зависит ничего от того, какой программой был начерчен отрезок или хоть что. Есть объектная модель, описанная в acadauto.chm или, если больше нравится, в AutoCAD_TLB.PAS. Вот то, и только то, что там объявлено, доступно из Delphi-программы. Примеров там тьма, правда на каком-то VBA.

Для получения координат отрезка надо найти каким-то образом ("400 сравнительно честных способов") объект этого конкретного отрезка и координаты извлечь из его свойств. Для отрезка эти свойства называются StartPoint и EndPoint. Точно так, как работают с любыми объектами в Delphi. Но все это надо вытаскивать из Help.
все это более-менее понятно. Когда я создавал объект при помощи своей проги я , соответственно, мог обратиться к нему по имени. И прочесть все, что мне нужно. Вопрос был в том, как мне обращаться к обхектам, начерченным кем-то другим, о которых моя программа представления не имела. Но, в принципе, мне подходит и способ чтения данных через DFX файл, тут уж и к автокаду не нужно подключаться, просто разобраться, как и что там описано. Координаты, радиусы, углы начала-конца дуги я нашел, остается написать код, который будет все остальное отфильтровывать и скидывать в базе все полезное. Вроде об этом меня просили. Хотя, честно признаюсь, зачем это нужно моему начальнику, понять я не могу. Ну да это и не важно, хочет - получит :-)
Владимир В вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > как извлечь информацию о свойствах примитива