Тема: AutoCAD & Delphi - Launch Automatization

Здравтвуйте, товарищи!

ВОПРОС ИКЛЮЧИТЕЛЬНО ДЛЯ ТЕХ, КТО ЗАНИМАЕТСЯ СОЗДАНИЕМ ПРИЛОЖЕНИЙ ДЛЯ AUTOCAD НА DELPHI!!

Хотелось бы знать, занимался ли кто-нибудь автоматизацией запуска AutoCAD'a на Delphi. Т.е. вы из своего приложения запускали AutoCAD как внешнее приложение.
Очень интересно как вы организовывали процесс автоматической настройки AutoCAD'a (например, выбор метрической системы единиц) и делали все так, чтобы обращения к AutoCAD?у (GetActiveOleApplication и т. д.) отправлялись без последующего возникновения ошибки EOleSysError ?Операция не доступна?.
Я пробовал ч/з CreateProcess, но к сожалению так и не сумел заставить свое приложение ждать очередной подгрузки после завершения работы со стартовым диалогом.

Если вы попытаетесь мне помочь, то примеры  желательно привести для AutoCAD 2000-2002. B если это необходимо, то у меня Delphi6, WinME

Re: AutoCAD & Delphi - Launch Automatization

Автокад прекрасно запускается из программ, написанных на Delphi. Только не надо на Delphi-программу возлагать слишком много, например полное управление Автокадом и "рисование" из Delphi. Можно, но проблем слишком много.

Для запуска Автокада как внешнего Windows-приложения необходимо:

1. Программно найти нужный (из возможно многих) Автокадов.
2. Сформировать для него командную строку, возможно включив в нее требуемые параметры (профиль и т.п.)
3. Сформировать программно, при необходимости, файл типа INI с требуемыми параметрами для Автокада.
4. Программно написать требуемый файл автозагрузки (acad.lsp, acaddoc.lsp) и положить в нужное место.
5. Запустить Автокад так, чтобы он загружал автозагрузчик. А в нем уже должны быть предусмотрены все требуемые настройки. Переменные параметры могут браться из INI

См. серию статей " Как писать программы для Автокада на Delphi " на
http://www.gis.kurgan.ru/datacad/messages.htm

В этом году должна выйти новая книга Полещука "AutoCAD 2002 в подлиннике", в ней будет и моя глава по работе из Delphi с Автокдаом.

Re: AutoCAD & Delphi - Launch Automatization

Все зависит от задачи. Но простейший вариант такой. Экспортируем acad.tlb и начинаем переводить примеры из руководства с бейсика на паскаль. Никаких особых хитростей не требуется.
Только следует помнить что если в VBA пишется
Dim centerPoint(0 To 2) As Double
На паскаль переводится
Var Center:OleVariant;
Center:=VarArrayCreate([0,2],varDouble);
И в нужных местах типы приводятся примерно так
Var Obj:IAcadObject;
Var Color:Integer;
Color:=(Obj as IAcadEntity).Color;

Re: AutoCAD & Delphi - Launch Automatization

А зачем так сложно?

Я сделал проще, в АКАДе настроил все нужные переменные и сохранил чертеж как Шаблон(DWT), назвал его по своему. При запуске внешнего приложения указал следующее:
winexec('acad.exe /p MyTemplate');

Запускается Акад с текущим, установленным профилем и по шаблону MyTemplate. Он должен находиться в папке шаблонов!!

Re: AutoCAD & Delphi - Launch Automatization

Сложно делается для того, чтобы программы работали не только на компьютере автора и не только в его присутствии. То есть в профессиональных разработках.

Например, использование шаблонов удобно для любителей. Чтобы не заниматься программированием. Но должна быть гарантия, что есть именно такой шаблон, с именно такими настройками. И не факт, что если он "должен" где-то находиться, то он там и находится. На своей машине этого можно добиться. Да и то не всегда. И, конечно, профессионал не будет использовать WinExec, а сделает "сложно", с использованием CreateProcess.

В общем, имеется много ситуаций, которые разработчик должен учитывать. Разные (или несколько) Автокады, OS и прочее. Этим и отличается программирование.

Например, у нас в в системе, после того как пользователь установил два основных параметра рисунка (масштаб копии и наименование единицы рисунка) программно устанавливаются требуемые значения ВСЕХ системных переменных. Это уже на уровне Лисп. То есть чертеж не зависит от шаблонов (хотя пользователь может его применять)

Re: AutoCAD & Delphi - Launch Automatization

А кто-нибудь пробовал использовать СOmOBj