木子歌 发表于 2005-6-30 16:34:00

[求助]斑竹:请问用delphi开发cad怎么样?帮我分析下吧◎

无奈,请问用delphi开发cad怎么样啊?我查不多什么相关的帖子,书也没见到过,请高手指点下吧!现在挺急的!它与vb,lisp的比较,以及用delphi开发cad的优缺点呀什么的!非常感激!

fanny_6 发表于 2005-6-30 20:19:00

用delphi没什么意识的,还是转VBA好。


delphi可以实现的vb都可以。且delphi开发的资料太少


我delphi用过几天,如果需要的话可以把资料发上来。


我用delphi开发可实现的功能如下:打开已有CAD文档,画直线,写文本,画多线,选择图层。

王咣生 发表于 2005-6-30 22:21:00

reply

如果有delphi的资料,麻烦上传一些吧

fanny_6 发表于 2005-6-30 22:37:00

都是自己摸索的,也没弄几天,仅供参考


可实现的功能:打开已有CAD文档,画直线,写文本,画多线,选择图层。


因为我的工作中只需用到这些功能,所以其他功能我都没写。大家有兴趣可以补充。


版本说明:delphi必须7.0以上。否则不行。


                                                                                                                                               CAD我用的是2004


准备工作:打开DELPHI,project---〉import typelibrary                       点ADD,添加C:\Program Files\Common Files\Autodesk Shared\acax16chs.tlb。install。


下面是程序,都是基于VBA的,和VBA相似


       


unit Unit1;


interface


uses<BR>       Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<BR>       Dialogs, StdCtrls, ComObj, AutoCAD_TLB;


type<BR>       TForm1 = class(TForm)<BR>                       Button1: TButton;<BR>                       Edit1: TEdit;<BR>                       ComboBox1: TComboBox;<BR>                       procedure Button1Click(Sender: TObject);<BR>                       function drawline(a1,b1,a2,b2:Real;layers:string):Boolean;<BR>                       function drawtext(text:string;a,b:Real;high:Real;flag:Boolean;layers:string):Boolean;<BR>                       function drawwideline(a1,b1,a2,b2,a3,b3,a4,b4,a5,b5:Real;flag:boolean;layers:string):Boolean;<BR>                       function drawrectangle(a1,b1,a2,b2:Real;flag:boolean;layers:string):Boolean;<BR>       private


                       { Private declarations }<BR>       public<BR>                       { Public declarations }<BR>       end;


var<BR>       Form1: TForm1;line:Acadline;acad:AcadApplication;aPolygon: AcadLWPolyline;


implementation


{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);<BR>var fangxiangtxt:Boolean;<BR>begin<BR>       try<BR>                       acad:=GetActiveOleObject('AutoCAD.Application.16') as AcadApplication;<BR>       except<BR>                       acad:=CreateOleObject('AutoCAD.Application.16') as AcadApplication;<BR>       end;<BR>       Acad.Documents.Open('D:\1.dwg',false,false); //打开CAD;参数:(路径,是否只读,是否加密),没有这句就是新建CAD<BR>       acad.Visible:=True;<BR>       drawline(0,0,100,100,'SB');       //画直线;参数:(起点(x,y)、终点(x,y)、图层)<BR>       drawtext('asds//adas',100,100,20,false,'SB');//写文本;参数:(文本,坐标,高度,横/竖,图层)<BR>       drawrectangle(0,0,100,100,true,'SB')// 画矩形;参数:(对角两点的坐标,粗/细,图层)


end;


function TForm1.drawline(a1,b1,a2,b2:Real;layers:string):Boolean;<BR>var vpoint1,vpoint2:OleVariant;<BR>begin<BR>       vpoint1:=varArrayCreate(,varDouble);<BR>       vpoint2:=varArrayCreate(,varDouble);<BR>       vpoint1:=a1; vpoint1:=b1; vpoint1:=0;<BR>       vpoint2:=a2; vpoint2:=b2; vpoint2:=0;<BR>       line:=acad.ActiveDocument.ModelSpace.Addline(vpoint1,vpoint2);<BR>       line.Layer:=layers;<BR>       line.Update;<BR>end;


<BR>function TForm1.drawtext(text:string;a,b:Real;high:Real;flag:Boolean;layers:string):Boolean;<BR>var vpoint:OleVariant;cc:widestring;bb:wordbool;dd:wordbool;ee:integer;ff:integer;<BR>begin<BR>vpoint:=varArrayCreate(,varDouble);<BR>vpoint:=a; vpoint:=b; vpoint:=0;<BR>flag:=false;<BR>if flag then<BR>begin<BR>acad.ActiveDocument.ActiveTextStyle.setFont(cc,bb,dd,ee,ff);<BR>acad.ActiveDocument.ModelSpace.Addtext(text,vpoint,high).Layer:=layers;<BR>end<BR>else//       本来想用这段实现从上到下排列的单行文字但是未果,<BR>begin<BR>acad.ActiveDocument.ActiveTextStyle.FontFile:='C:\Program Files\AutoCAD 2004\Fonts\txt.shx';<BR>acad.ActiveDocument.ModelSpace.Addtext(text,vpoint,high).VerticalAlignment:=acVerticalAlignmentMiddle;<BR>end;<BR>//acad.ActiveDocument.ModelSpace.AddText()<BR>//<BR>//edit1.text:=cc;


end;


<BR>function Tform1.drawwideline(a1,b1,a2,b2,a3,b3,a4,b4,a5,b5:Real;flag:boolean;layers:string):Boolean;<BR>var                               pline:OleVariant ;<BR>begin<BR>                       pline:=varArrayCreate(,varDouble);<BR>                       pline:=a1; pline:=b1; pline:=a2; pline:=b2; pline:=a3; pline:=b3;<BR>                       pline:=a4; pline:=b4; pline:=a5; pline:=b5;<BR>                       if flag then<BR>                       begin<BR>                       aPolygon:=acad.ActiveDocument.ModelSpace.AddLightWeightPolyline(pline);<BR>                       aPolygon.ConstantWidth:=10;<BR>                       aPolygon.Layer:=layers;<BR>                       end<BR>                       else<BR>                       begin<BR>                       aPolygon:=acad.ActiveDocument.ModelSpace.AddLightWeightPolyline(pline);<BR>                       aPolygon.Layer:=layers;<BR>                       end;<BR>               // acad.ActiveDocument.ModelSpace.AddMLine(pline)//多线,两条平行的,只要指定2个点;<BR>end;


function Tform1.drawrectangle(a1,b1,a2,b2:Real;flag:boolean;layers:string):Boolean;<BR>begin<BR>drawwideline(a1,b1,a1,b2,a2,b2,a2,b1,a1,b1,flag,layers);<BR>end;


<BR>end.


       


以上程序调试,运行成功<BR>

木子歌 发表于 2005-7-1 11:11:00

我想知道delphi与其它语言开发cad的情况怎么样?比较下,大家用delphi开发cad很少吧?其实我也不想用,delphi,苦衷!

twosun 发表于 2005-7-5 16:30:00

我原来也使用delphi,后来要开发CAD的程序,查到DELPHI开发CAD的资料少,所以改用vb来做CAD了。用DELPHI倒底怎么样不知道,不过我觉得可以确定的是没有使用VB方便。

ttthhh_hb 发表于 2007-7-8 21:38:00

<p>&nbsp;&nbsp;&nbsp; 我觉得实现一般的功能,用lisp或vlisp就可以了。有些功能实现不了,而delphi比较容易实现的,就用delphi来实现。</p><p>可以用delphi写个dll文件实现该功能,然后用lisp调用。这样比较方便和快速。</p><p></p>

bird168 发表于 2007-7-8 23:25:00

我现在就是用delphi做cad二次开发呢。个人感觉问题多多,相关资料太少,都是自己摸索。绝对没有VB方便,不过可惜我也有自己的苦衷啊,不得不用delphi,有时间的话大家交流一下吧!
页: [1]
查看完整版本: [求助]斑竹:请问用delphi开发cad怎么样?帮我分析下吧◎