Тема: MFC - доступ к DWG файлу чертежа

Прошу помощи в следующем:
есть приложение MFC которое должно доступаться к чертежу, базе чертежа, применение к примитивам разл. команд (имеется ввиду интерактивное изменение чертежа посредством моей программы), при этом также чтобы не терялась возможность редактирования этого чертежа и с помощью мыши.
Может ли кто поделится рабочими примерами, исходниками как это сделать. Я просто только начинаю копаться в этом вопросе.
Если что не так сказал или назвал - заранее прошу извинить.
Заранее спасибо.

Re: MFC - доступ к DWG файлу чертежа

Lanter пишет:

Если что не так сказал или назвал — заранее прошу извинить.

Ага. Именно это. Т.е. совершенно не понятно что ты хочешь получить.
1) В каком смысле MFC-приложение? Отдельный exe-файл или ObjectARX-приложение? Тут совершенно разные подходы.
2) Если это отдельное exe-приложение, то ищи по форуму на предмет использования ActiveX - несколько примеров здесь есть.
3) Если это ObjectARX-приложение, то весь форум этому посвящен. Кроме того в самом ObjectARX SDK есть масса примеров.
Уточни что именно тебе нужно сделать, тогда может и получишь конкретную помощь.

Re: MFC - доступ к DWG файлу чертежа

Речь идет об ObjectARX-приложении.

Re: MFC - доступ к DWG файлу чертежа

> Lanter
Первый вопрос снят. Теперь второй - что конкретно программа должна делать и при чем здесь MFC? Т.е. в ObjectARX приложении можно использовать MFC, но зачем было делать уточнение, что это приложение должно быть MFC-приложением?
P.S.: В ObjectARX SDK в каталоге samples\editor\mfcsamps имеется ряд примеров приложений, использующих MFC.

Re: MFC - доступ к DWG файлу чертежа

ОК, рассказываю далее:
мое приложение достает из своей БД (неважно какой именно) набор примитивов. То есть я выбираю примитив в БД и после напимер "клика" на определенном пункте какого-то перечня БД - примитив прорисовывается в текущем окне.
Ну или же я из БД возму примитив, из своего приложения задам его параметры (например параметры передаются из немодального диалога) и при нажатии на кнопочке этого окошка заданный примитив прорисовывается.
Это первая часть моей проблемы - я не знаю как сделать то что произойдет после клика на кнопочке. :) (простите объясняю дилетантским языком в надежде, что будет понятнее что я хочу сказать)
Другая часть "Марлезонского Балета" следующая:
я имею на чертеже набор уже прорисованных примитивов и хочу их так сказать "интерактивно менять".
Как именно: я выбираю кликом мыши примитив из хочу его допустим повернуть на опр. кол-во градусов. На какое именно кол-во градусов я хочу указать например в EditBox-е окошка. Ну а далее напрмер снова кнопочка и вижу повернутый прмитив.
Возможно ли это сделать так как я сейчас попытался объяснить или на данный момент "повернутым примитивом" являюсь я сам?
Если да до интересен сам код, "после нажатия кнопочки".
И еще один момент:
Если кто встречался с пакетом SolidWorks, то я видел и щупал реализацию того что я объяснил в примитивном варианте выше. Но в том варианте к самим файлам чертежей доступалась библиотека, написанная на Delphi. Но SolidWorks и Delphi мне далеки в отличие от любимой студии и када, в котором делаю работы не один год.
Конечно можно было по частям реализовать все что я только что написал выше на Lisp, и там у меня вопросов гораздо меньше, но о нем речь пока не идет.

Re: MFC - доступ к DWG файлу чертежа

Конечно можно было по частям реализовать все что я только что написал выше на Lisp, и там у меня вопросов гораздо меньше, но о нем речь пока не идет.

На ObjectARX все вышеописанное реализуется аналогично тому, как это делается на Lisp'е. А именно вставить примитив из базы можно несколькими способами:
1) Используя команду AutoCAD, которая создает такие примитивы и вызвав её с использованием acedCommand(...) (аналог lisp'овской (command ...)).
2) Используя функцию acdbEntMake() (аналог в lisp'е (entmake))
3) Создав примитив используя соответствующий класс (например, AcDbLine для отрезка, AcDbPolyline для полилинии и т.д.) и добавив его в базу чертежа) - примеры есть в документации ObjectARX SDK.

Как именно: я выбираю кликом мыши примитив из хочу его допустим повернуть на опр. кол-во градусов. На какое именно кол-во градусов я хочу указать например в EditBox-е окошка. Ну а далее например снова кнопочка и вижу повернутый примитив.

Точно так же, как ты бы это сделал в lisp'е при помощи функции (entsel) в ObjectARX есть ее аналог acedEntsel(), которая позволяет выбрать примитив. Далее создаешь диалоговое окошко, вводишь значение угла, открываешь примитив на запись, формируешь матрицу преобразования (по аналогии с https://www.caduser.ru/forum/topic27242.html) и выполняешь для примитива transformBy().
Хотя можно воспользоваться и acedCommand(RTSTR,"_.ROTATE",...)
P.S.: Видимо ты еще не скачал ObjectARX SDK или просто его не смотрел. В примерах и документации все это есть.

Re: MFC - доступ к DWG файлу чертежа

P.S.: Видимо ты еще не скачал ObjectARX SDK или просто его не смотрел. В примерах и документации все это есть.

Создав примитив используя соответствующий класс (например, AcDbLine для отрезка, AcDbPolyline для полилинии и т.д.) и добавив его в базу чертежа) — примеры есть в документации ObjectARX SDK.

- судя по всему плохо смотрел.
Спасибо, пока что-то проясняется но вопросы еще будут. :)

Re: MFC - доступ к DWG файлу чертежа

Я непосредственно являюсь учасником всего описаного камрадом Lanter и у меня есть тоже вопрос по существу.
1) А именно, как хранить во внешней БД необходимые обьекты-несовсем примитивы (к примеру клапан прорисованый мною)?
2) И как делать вставку этих же обьектов на чертеж.
К базе можно подсоединится как с С++ (проект ObjectARX по средству ADO) так и dbconnect самого АКАДА. Как правильно, как лучше, как проще.
3) И вопрос по КАДУ. Как делать группы приметивов (несколько примитивов как один обьект)?
4) Как в ARX приложении перебрать все обьекты чертежа для поиска и управления своими вставлеными с внешней БД (тоесть я должен при вставке в чертеж дать сам им имена)?
5) Как связать несколько обьектов линией (потом будет трубопроводом в 2d и в 3d графике) с эффектом резинки. Тяну один обьект линия/трубопровод тянется за этим обьектом. Второй же связаный обьект остается на месте.????
Подскажите плиз, как это разрулить.

Re: MFC - доступ к DWG файлу чертежа

1) Хранить описание (набор характеристик) этого примитива в том виде, в котором тебе удобно, но так, чтобы ты потом имел возможность по информации из базы отрисовать такой примитив.
2) По поводу работы с базами - ничего не скажу, но думаю, что dbconnect использовать не стоит.
3) Что подразумевается под группой примитивов? В AutoCAD'е есть понятие группа (GROUP), которая объединяет примитивы, с которыми можно работать и по отдельности. Одни и теже примитивы могут входить в разные группы. Фактически они связаны между собой реакторами. Еще в AutoCAD'е есть понятие блок (BLOCK) - это набор примитивов, с которыми можно работать только со всеми вместе, и если изменить(или удалить/добавить) один из примитивов из блока, то он будет изменен сразу из всех присутствующих на чертеже вставках. Похоже, что имеется ввиду именно это.
4) Нужно как-то идентифицировать свои объекты, чтобы их можно было перебрать. Все зависит от того, что будет находится во внешней базе. Можно, например, хранить метки (Handle) своих примитивов, можно в самим примитивам дописывать расширенные данные (Xdata), можно помещать информацию в Xrecord и т.д.
5) Создать свой собственный примитив. ObjectARX это позволяет сделать. Только нужно очень тщательно подойти к постановке задачи.
P.S. В общем-то многое из того, что я написал, это азы AutoCAD не имеющие к ObjectARX практически никакого отношения. Мое мнение - сначала нужно изучить хотя бы в общих чертах AutoCAD и его возможности, перед тем как начать программировать, иначе вопросы начнут появляться лавинообразно, а многое придется вообще передылывать...
Так что "рулить" придется долго!

Re: MFC - доступ к DWG файлу чертежа

Александр, большое спасибо за пояснения