急!二次开发AutoCAD的问题 愿意以高分奉送(100分)

  • 主题发起人 主题发起人 xinun
  • 开始时间 开始时间
X

xinun

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在正在开发一个在Delphi中的调用Autocad区划一组封闭的直线,然后再将其拉伸(Extrude)成一个实体(solid),有关在Delphi程序中调出Auotcad以及画出这一组封闭的直线都是非常容易的,但是我不知道如何将这一组直线先形成一个域(region),我知道是先用函数Addregion,但是在运行程序之后,Autocad也被调出来区画了那组封闭直线,但等到运行到函数Addregion时,系统总是告诉我“程序发生致命性错误”,我不知道为什么,但我断定是很可能因为Addregion函数中的被调用参数的类型的错误。如果有那位高手知道如何调用这个Addregion函数也可以通过email:yunxin88@263.net告诉我,最好是能有程序代码。
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,comobj;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
p1, p2, p3: OleVariant; // start & end points of line
Mspace, regionObject ,Acad, AcadDocument1, lineObject , solidObject ,AcadDocument,lineobj : OleVariant;
begin
p1 := VarArrayCreate([0, 2], 5);
p2 := VarArrayCreate([0, 2], 5);
p3 := VarArrayCreate([0, 2], 5);
// 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;
lineObject:= VarArrayCreate([0, 11],varVariant) ;
Acad:= CreateOleObject('AutoCad.Application');
Acad.visible:= True ;
AcadDocument:=Acad.Documents;
AcadDocument1:=Acad.ActiveDocument;
Mspace := AcadDocument1.ModelSpace;

lineobj[1] := Mspace.AddLine(VarArrayRef(p1), VarArrayRef(p2));
lineobj[2] := Mspace.AddLine(VarArrayRef(p2), VarArrayRef(p3));
lineobj[3] := Mspace.AddLine(VarArrayRef(p3), VarArrayRef(p1));
regionObject:=Mspace.AddRegion(lineObject);
solidObject:=MSpace.AddExtrudedSolid(regionObject[0], solidlength, 0) ;
end


 
下面是很久以前我在AutoCAD 14上做过的一个试验,不知道现在版本的AutoCAD是否能用。
procedure TForm1.Button2Click(Sender: TObject);
var
i: integer;
a, b: double;
alpha: extended;
axisbgpt: Olevariant;
axisendpt: Olevariant;
sidebgpt: Olevariant;
sideendpt: Olevariant;
axisdir: Olevariant;
Lines: Olevariant;
equipObj: Olevariant;
Center : AcadPoint;
Curves : OleVariant;
Curve : OleVariant;
region : OleVariant;

begin
// sidebgpt sideendpt
// |--------------------|
// | |a alpha=0
// |--------------------|
// axisbgpt b axisendpt
InitAcad;
a := 20;
b := 40;
axisdir := VarArrayCreate([0,2], VT_R8);
axisbgpt := VarArrayCreate([0,2], VT_R8);

center.x:=0;
center.y:=100;
center.z:=0;

axisbgpt[0] := 0;
axisbgpt[1] := 0;
axisbgpt[2] := 0;

axisdir[0] := 1;
axisdir[1] := 0;
axisdir[2] := 0;
Lines := VarArrayCreate([0..0],VT_Dispatch);
Lines[0] := ACADLineXY(0,10,0,100,10,0);
Lines[1] := AcadLineXY
Curves := VarArrayCreate([0,0],VT_Variant);
Curves[0] := AcadCircle(Center,50);

//region:=VarArrayCreate([0,0],12);
region := mspace.addregion(Curves);
equipObj:=mspace.addrevolvedsolid(region,varArrayRef(axisbgpt),varArrayRef(axisdir), pi * 1.5);
acad.update;
end;
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
810
import
I
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
后退
顶部