在delphi下进行autocad二次开发真的很难吗?希望有这方面经验的富翁们一起讨论一下!(0分)

to 南宫:关键还是看看你针对那个CAD版本,它开放到什么地步?

引用楼上的“即凡是AutoCAD中每一个裸露的对象,如circle、line都可以用VB、Delphi等支持ActiveX的语言来控制。”
我觉得你想法可行。
 
谁懂delphi向automation变量传递?在传递参数时类型出错。
***-----------------------------------------------------
VBA selectOnScreen函数定义如下:(提示用户在屏幕上拾取的对象并将其添加到活动的选择集中)
object.SelectOnScreen [FilterType][, FilterData]

Object

SelectionSet
The object or objects this method applies to.

FilterType

Integer; input-only; optional
A DXF group code specifying the type of filter to use.

FilterData

Variant; input-only; optional
The value to filter on.
*---------------------------------------------------------------

VBA代码如下:

以下代码指定三个条件:对象必须是蓝色的,必须是 Circle,必须在图层 0 上。代码还将 FilterType 和 FilterData 声明为三个元素的数组,并将每个条件指定给一个元素:

Sub Ch4_FilterBlueCircleOnLayer0()
Dim sstext As AcadSelectionSet
Dim FilterType(2) As Integer
Dim FilterData(2) As Variant
Set sstext = ThisDrawing.SelectionSets.Add("SS4")

FilterType(0) = 0
FilterData(0) = "Circle"

FilterType(1) = 62
FilterData(1) = acBlue

FilterType(2) = 8
FilterData(2) = "0"

sstext.SelectOnScreen FilterType, FilterData

End Sub

转换成Delphi代码:
procedure TForm1.Ch4_FilterBlueCircleOnLayer0;
var
selectSet:OleVariant;
I:integer;
filtertype:array[0..2]of integer;
filterdata:Variant;
begin
for I:=0 to acadDoc.selectionSets.count-1 do //遍历选择集,如果ss4已经存在就不建了。
begin
if acadDoc.selectionSets.Item.name='ss4' then
selectSet:=acadDoc.selectionSets.Item
else
selectSet:=acadDoc.selectionSets.add('ss4');
end;
//创建过滤类型和过滤数据
// filtertype:=vararraycreate([0,2],VT_INT);
filterdata:=vararraycreate([0,2],VT_VARIANT);
filtertype[0]:= 0; filterdata[0]:='circle';//对象类型是圆
filtertype[1]:=62; filterdata[1]:=5;//颜色是蓝色
filtertype[2]:=8; filterdata[2]:='0';//图层为0

{以下代码指定三个条件:对象必须是蓝色的,必须是 Circle,必须在图层 0 上。
代码还将 FilterType 和 FilterData 声明为三个元素的数组,并将每个条件指定
给一个元素:}

selectSet.SelectOnScreen(filtertype,vararrayref(filterdata));

end;
 
filtertype:=vararraycreate([0,2],VT_I2);
selectSet.SelectOnScreen(filtertype,filterdata);
 
基本上掌握了delphi在autocad下的二次开发下的delphi脾气。
autocad_tlb.pas,comobj,activex两者相结合,出问题就看autocad_tlb.pas源码。
 
autocad的VBA开发的帮助用delphi转换出4-7章的例子,已经上传到源码空间。
 
请问用
CreateOleObject('AutoCAD.Application.14');
打开AutoCAD对象时,怎样同时让它打开一个指定的AutoCAD文件。
 
uses activex,comobj,autocad_tlb;
procedure TForm1.FormCreate(Sender: TObject);
begin
acadConnect(True);
acadApp.Documents.Open('D:/Program Files/AutoCAD 2004/Sample/wilhome.dwg',False,'');//open(filename,readonly,password);
end;

function TForm1.acadConnect(ft: boolean): Boolean;
var
falsetrue: boolean;
begin
result := true;
falsetrue := ft;
if falsetrue = true then
begin
try
acadApp := GetActiveOleObject('autocad.application') as acadApplication;
except
acadApp := CreateOleObject('autocad.application') as acadApplication;
end;
acadApp.Visible := true;
acadDoc := acadApp.ActiveDocument;
end
else
result := false;
end;
 
to mzr
你好!先谢谢你!不过我用下面的代码好象大不开,还提示找不到Document对象,请帮我看看,谢谢!
procedure TForm1.Button1Click(Sender: TObject);
var
obj_Acad ,obj_Doc: OleVariant;
begin
try
obj_Acad:=GetActiveOleObject('AutoCAD.Application.14');
except
obj_Acad:=CreateOleObject('AutoCAD.Application.14');
end;
//obj_Acad:=CreateOleObject('AutoCAD.Application.14');
obj_Acad.Visible:=True;
obj_Doc:=obj_Acad.ActiveDocument;
obj_Acad.Documents.Open('D:/1.dwg',False,'');
end;
 
请你把obj_Acad,obj_Doc类型变成acadapplication,acadDocument;
同时注意有没有uses activex,comobj,autocad_tlb
你仔细分析一下我的代码,你也可以到源码空间下载我上传有关于autocad二次开发的代码。
 
to mzr
感谢!autocad_tlb.dcu在哪找,我编译程序时提示找不到。
恕小弟愚昧,请再指点,谢谢!
 
在delphi的菜单里 工程-->导入类型库--->add ---->在CAD安装目录里查找tlb文件,每个版本都不一样,对于14可能是acad.tlb吧,2004的是acax16chs.tlb
 
to mzr
感恩不尽!我已经按你的方法做了,可编译的时候提示“undeclared identifier acadapplication”,我有把acad.tlb加进来了,为什么还不行?请再指点。
还有一个问题再请教你,如果autocad已经打开并最小化,怎样在我们自己写的程序中使它最大化?(我想放一个按钮,一点击就使autocad最大化)
谢谢!
 
我认为CAD二次开发最好是用objectARX,但若想将CAD变成MIS系统,就用DELPHI+MO(CAD ActiveX)+SQL(ORACLE)进行.
 
to jmfyx
MO(CAD ActiveX)是不是指导入的autocad的类型库,autocad_tlb.pas?
能不能谈详细点。
 
我是个菜鸟,真诚希望各位大富翁能为新手们提供点学习资料和思路,谢谢!
 
我已经将所有的autocad帮助下的实例用delphi进行了转换,并上传到了源码空间。
 
源码空间? 普通会员下载不了 [:(]
 
mzr 给我一份吧,小弟没钱了,lqx@72home.com
 
mzr大侠:
能否把你上传到源码空间的关于autocad二次开发代码发给我一份学习学习,不胜感谢!
我已按你上面教的做了,可打开一个指定的AutoCAD文件(auto2004)还不行。
e-mail:zhao6982118@yahoo.com.cn


 

Similar threads

S
回复
0
查看
962
SUNSTONE的Delphi笔记
S
S
回复
0
查看
784
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部