Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.23;
Скачать: CL | DM;

Вниз

подключение клиента на Delphi к AutoCAD   Найти похожие ветки 

 
white dove ©   (2004-04-15 20:20) [0]

Надо, чтобы клиент вызвал функцию AutoCAD рисования пирамиды. Туда требуется передавать массивы из трёх элементов - координаты вершин. В типы данных доступные по OLE Automation входит PSafaArray - указатель на массив. Как инициализировать массив и возможно ли его передать в AutoCAD?
То, что я пробую:

var
 acad:olevariant;
 a:psafearray;

procedure TForm1.Button1Click(Sender: TObject);
begin
acad:=createoleobject("Autocad.Application");
acad.visible:=true;
a:=SafeArrayCreateVector(1,0,3);

вопросы: смысл 1 0 3 и как задать значения массива?

acad.activedocument.activespace.addpoint(a); //рисование точки
почему Type not allowed in Variant Dispatch call


 
LeXX   (2004-04-16 23:50) [1]

Я точки в AutoCADe ставлю так:

uses  AutoCAD_TLB;

var
 Acad:IAcadApplication;
 adoc:IAcadDocument;
 l:IAcadLayer;
 p:IAcadPoint;
 X,Y,Z:Double;
 s :string;
 v:variant;

bbegin
  Acad:= CoAcadApplication.Create;
  adoc:= acad.ActiveDocument;

  s:= "Точки";
  l:= adoc.Layers.Add(s);
  l.Color:= acred;
  adoc.ActiveLayer:=l;

  v:= VararrayCreate([0,2],varDouble);
    v[0]:= x;
    v[1]:= y;
    v[2]:= Z;
  p:= adoc.ModelSpace.AddPoint(v);
end;

На http://community.borland.com/ (точный адрес страницы не сохранился) есть пример:

procedure TForm1.Button1Click(Sender: TObject);
var
p1, p2, p3: OleVariant; // start & end points of line
Mspace, Acad : OleVariant;
begin
 // Create variant arrays to hold coordinates
 // VT_R8 = 5; { 8 byte real defined in /Source/RTL/Win/ActiveX.Pas }
 p1 := VarArrayCreate([0, 2], VT_R8);
 p2 := VarArrayCreate([0, 2], VT_R8);
 p3 := VarArrayCreate([0, 2], VT_R8);
 // Assign values to array elements
 p1[0] := 2.0; p1[1] := 4.0; p1[2] := 0.0;// from 2,4,0
 p2[0] := 12.0; p2[1] := 14.0; p2[2] := 0.0; // to 12,14,0
 p3[0] := 7.0; p3[1] := 8.0; p3[2] := 0.0;
 // Get Application and ModelSpace objects:
 try
   // see if AutoCAD is already running
   Acad := GetActiveOleObject("AutoCAD.Application.14");
 except
   // if it is not running - start it up
   Acad:= CreateOleObject("AutoCad.Application.14");
 end;
 // bring AutoCAD to the windows desktop
 Acad.visible:= True;
 Mspace := Acad.ActiveDocument.ModelSpace;
 // use AutoCAD methods to draw a line and 3 circles
 Mspace.AddLine(VarArrayRef(p1), VarArrayRef(p2)).Update;
 MSpace.AddCircle(VarArrayRef(p1), 1.5).Update;
 MSpace.AddCircle(VarArrayRef(p2), 1).Update;
 MSpace.AddCircle(VarArrayRef(p3), 2.0).Update;
 // use AutoCAD methods to draw other shapes and text
 MSpace.AddArc(VarArrayRef(p3), 1.2, 1, 2).Update;
 MSpace.AddBox(VarArrayRef(p2), 5, 3, 2).Update;
 MSpace.AddCone(VarArrayRef(p1), 1.3, 2).Update;
 MSpace.AddCylinder(VarArrayRef(p3), 1.7, 1.5).Update;
 MSpace.AddMtext(VarArrayRef(p3), 10, "Delphi 3 Rocks!!!").update;
end;

Удачи!



Страницы: 1 вся ветка

Текущий архив: 2005.01.23;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.024 c
3-1103535806
Саша
2004-12-20 12:43
2005.01.23
Access и Delphi


3-1101745245
skovorodka
2004-11-29 19:20
2005.01.23
host, логин, пароль


3-1103223045
Flagman
2004-12-16 21:50
2005.01.23
TQuery + Paradox + CD ?


14-1104773042
Gero
2005-01-03 20:24
2005.01.23
Стишок


14-1105097859
Rule
2005-01-07 14:37
2005.01.23
Внимание, мне нужна срочно помощь за хорошую цену ...