Тема: AutoCad и Delphi

Добрый день...кто-нибудь пишет приложения на Delphi для AutoCad2000, 2002?

Re: AutoCad и Delphi

Добрый день. Да.

Re: AutoCad и Delphi

А то.

Re: AutoCad и Delphi

молодцы!

Re: AutoCad и Delphi

Может, кто нибуть опубликует небольшую статейку, как привязать Дельфи к Автокаду, и пару программ примеров работы с Автокадом.
PS: Мне, например, нужно только импортировать в автокад примитивы и наоборот. Теоритически это просто, практически нехватает опыта.
PP: Может кто укажет место где можно подсмотреть принципы?
Заранее спасиба.

Re: AutoCad и Delphi

<Олегу> Позвольте! Не Дельпфи к Автокаду, а Автокад к Дельфи. Принцип простой. В справочной дельфевой системе есть примеры программирования клиент-сервер. Там вызываются вордовые команды. Теперь в справочной системе Автокада надо найти, как выглядят объекты OLE, зарегистрированные в системе. И ВСЕ и пиши, что хочется.
Если нужно подробнее, могу примерчик кинуть мылом.
Да, забыл сказать, что все это проходит на VBA, встроенном в Автокад. Можно не нем, только оч противно.

Re: AutoCad и Delphi

О, Боже! Сколько путаницы!

"только импортировать в автокад примитивы и наоборот",
"клиент-сервер", "как выглядят объекты OLE, зарегистрированные в системе", "все это проходит на VBA, встроенном в Автокад"...

Делается так:
Вариант 1. Приложение написанное на Delphi (или чем угодно), обращается к Автокаду, как к COM-серверу, то есть управляет им. Для этого нада
а) импортровать  библиотеку типов Autocad.tlb в Delphi с единственной целью - получить модуль Autocad_TLB.pas, который надо ввести в uses
б) В своей программе

var
  AcadApplication: IAcadApplication;

Где-то, когда надо пользовать Автокад

  Try
//     Пытаемся найти активный AutoCAD
      AcadApplication := GetActiveOleObject('AutoCAD.Application') 
                         as IAcadApplication;
    except
//     Если работающий AutoCAD не найден
      try
//       Пытаемся запустить AutoCAD
        AcadApplication := CreateOleObject(AutoCAD.Application) 
                           as IAcadApplication;
      except
        MessageDlg('AutoCAD вообще не найден', mtError, [mbOK], 0);
      end;
    end;
    if AcadApplication = nil then
    begin
      MessageDlg('Ошибка соединения с AutoCAD', mtError, [mbOK], 0);
    end
    else
     // делать, что надо
    AcadApplication.ActiveDocument.Activate;
{
Послылаем макрос в командную строку, добавляя нажатие Enter
}
    AcadApplication.ActiveDocument.SendCommand('(alert "Привет от Delphi") + #13);
  end;

Вариант 2.  Делать из своего приложения COM-сервер, как описано в любой книге по Delphi и обращаться к нему (свойствам и методам) из Visual Lisp, наподобие

  (if (setq srv (vlax-get-or-create-object "MyApp.MyAppInt"))
    (progn
      (setq res_srv (vlax-invoke-method
                      srv
                      "MyMethod" ;; или ишо какой метод
                      param1
                       ...
                     paramX
                    ) ;_ end of vlax-invoke
      ) ;_ end of setq
      (if (= (vlax-variant-value res_srv) :vlax-true)
        (progn
          (alert "Сработало!")
          .... ;; обработка результатов
        )
    )
)

Много подробных примеров в книге С. Зуев, Н.Полещук "САПР на базе AutoCAD. Как это делается". Обзорно -  Н. Полещук. "AutoCAD 2002. В подлиннике", гл. 47 и в готовящейся "AutoCAD 2004. В подлиннике"

Re: AutoCad и Delphi

Я тут разобрался как под 2004 проги на дельфи писать...вот!

Re: AutoCad и Delphi

Мона страный вопрос, де взять мона?
Весь 2002 и 2004 автокад проглядел, ненашел!
PS: Скиньте плиз, на мыло.

Re: AutoCad и Delphi

Я про файл  Autocad.tlb
а так же  Acad.tlb

Re: AutoCad и Delphi

Product files and registry locations have changed; for example, for AutoCAD 2004, acdb15.dll is now acdb16.dll; acad.tlb is now acax16enu.tlb; and R15.0 is now R16.0. As a result, AutoCAD 2004 breaks binary compatibility for applications, and third-party applications for previous releases of AutoCAD software must be updated in order to run.

Re: AutoCad и Delphi

Воткнув опостров, в 1й Вариант, столкнулся с 2мя проблемами
1. Эт штука сама не запускает Автокад. Хотя при запущенном Алерт выдает.
2. Решив начертить приметив не смог переработать VBA код в Дельфи

    Dim lineObj As AcadLine
    Dim startPoint(0 To 2) As Double
    Dim endPoint(0 To 2) As Double
    
    ' Define the start and end points for the line
    startPoint(0) = 1#: startPoint(1) = 1#: startPoint(2) = 0#
    endPoint(0) = 5#: endPoint(1) = 5#: endPoint(2) = 0#
    
    ' Create the line in model space
    Set lineObj = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint)
    ZoomAll
 


Дельфи пишет что StartPoint OleVariant. =/

Re: AutoCad и Delphi

Олег пишет:

Воткнув опостров, в 1й Вариант

Автокадов может быть несколько
'AutoCAD.Application'
'AutoCAD.Application.15'
'AutoCAD.Application.16'
надо заранее выяснять, с каким работать
2. Объявлять

var
 { начальные и конечные точки отрезка}
 StartPoint, EndPoint: OleVariant;
 ModelSpace : OleVariant;
begin
  { Создаем массивы координат
    VT_R8 = 5;  8-байтовое действительное число определенное в
    ActiveX.Pas}
  StartPoint := VarArrayCreate([0, 2], VT_R8);
  EndPoint := VarArrayCreate([0, 2], VT_R8);
  { Присваиваем значения }
  StartPoint[0] := 1.0; // X
  StartPoint[1] := 1.0; // Y
  StartPoint[2] := 0.0; // Z
  EndPoint  [0] := 5.0;
  EndPoint  [1] := 5.0;
  EndPoint  [2] := 0.0;
После коннекта с Автокад
  ModelSpace := AcadApplication.ActiveDocument.ModelSpace;
  ModelSpace.AddLine(VarArrayRef(StartPoint), 
               VarArrayRef(EndPoint)).Update;
end;

Такие примеры показывают, что рисовать в Автокад из Delphi (VB, C++) очень неудобно. Delphi надо использовать не для рисования!
То же, на Лисп: (command "_.LINE" "1,1" "5,5" "").

Re: AutoCad и Delphi

Добавлю:

> Олег
Все TLB в 2004 живут там, где положено -
c:\Program Files\Common Files\Autodesk Shared\acax16enu.tlb

Re: AutoCad и Delphi

Ага это точно...я тоже долго искал...Ребята давайте сотрудничать.

Re: AutoCad и Delphi

Да, большое спасибо  ShaggyDoc, без него я б не разобрался!!!
Кстати, реально было бы сей факт вписать в FAQ. Потому что я сам обыскал почти все возможное, но достаточно подробные сведения "азов" так и не нашел.

Re: AutoCad и Delphi

> ShaggyDoc

> ShaggyDoc
Ваши ответы помещены в FAQ. Проверьте, если не сложно: https://www.caduser.ru/oldlink/faq/?id=35.