Форум: "Corba";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];
Внизподключение клиента на 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 вся ветка
Форум: "Corba";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.039 c