Space:=obj_Acad.ActiveDocument.ModelSpace;
pnt_Start:=VarArrayCreate([0,2],VT_R8);
pnt_Start[0]:=5.0;
pnt_Start[1]:=5.0;
pnt_Start[2]:=0.0;
obj_ModelSpace.AddCircle
(VarArrayRef(pnt_Start),2.5).Update;
end;
----在上面的程序中,我没有取ActiveDocument的实例句柄,而是直接取了ModelSpace的实例句柄。在生成一个三维的OleVariant双精度数组后,对它进行赋值,然后调用AddCircle方法绘制一个圆,并让它立即显示。
-- --在程序的最后第二行,用了AddCircle方法来绘制圆。在这里有一个技术点,即如何把OleVariant的数组以点的形式传递到 AutoCAD.Application。当把变量pnt_Start直接传给AddCircle方法时,系统在运行至这一方法时
报告说参数不匹配。后来发现在AutoCAD的Automation服务器中,所有的点都是以指针的方式存储的,把变量pnt_Start传给AddCircle方法时,必须以指针方式传变量。所以用VarArrayRef函数进行转换,以满足系统需求。
----3、获取和设置系统变量
----在AutoCAD 中,有很多的系统变量用来作为绘图的辅助设置,在AutoCADAutomationServer里,也提供了两个属于ActiveDocument的方法来进行读取和设置。这两个方法是:GetVariable和SetVariable。请看下例:
procedureTForm1.Button5Click
(Sender:TObject);
var
obj_ModelSpace: OleVariant;
obj_A
cad: OleVariant;
obj_ActiveDoc: OleVariant;
pnt_Start: OleVariant;
begin
try
obj_Acad:=GetActiveOleObject('AutoCAD.Application.14');
except
obj_Acad:=CreateOleObject('AutoCad.Application.14');
end;
obj_Acad.visible:=True;
obj_ActiveDoc:=obj_Acad.ActiveDocument;
obj_ModelSpace:=obj_Acad.ActiveDocument.ModelSpace;
pnt_Start:=VarArrayCreate([0,2],VT_R8);
pnt_Start[0]:=5.0;pnt_Start[1]:=5.0;pnt_Start[2]:=0.0;
Edit5.Text:=obj_ActiveDoc.GetVariable('CECOLOR');
obj_ActiveDoc.SetVariable('CECOLOR','RED');
obj_ModelSpace.AddCircle(VarArrayRef(pnt_Start),2.5).Update;
end;
----在上面的程序里,我从当前活动的
文档中取得当前的颜色值,把它送到一个编辑控件中显示出来,然后再把当前的颜色值设为红色,并用当前颜色画一个圆。
----4、Delphi处理AutoCAD中的中文文本显示。
----中文文本的显示一直是在AutoCAD制图中的一个重要
问题。AutoCAD从R14版以后开始支持Windows的TrueType字体,从而彻底解决了这个问题。
-- --用Delphi处理AutoCAD中的中文文本显示,其关键在于文本风格集(TextStyles)的设置。可以添加一个新的文本风格(TextStyle),然后把该文本风格的字体设为TrueType中文字体,再把这个新的文本风格置为当前活动的文本风格,即可在Delphi里对 AutoCAD发命令,写中文了。请看下例:
procedureTForm1.Button6Click(Sender:TObject);
var
obj_ModelSpace: OleVariant;
obj_Acad: OleVariant;
obj_ActiveDoc: OleVariant;
obj_TextStyles: OleVariant;
obj_AcadUtility: OleVariant;
obj_TestStyle: OleVariant;
Ole_Point: OleVariant;
Ole_Height: OleVariant;
Ole_Text: OleVariant;
begin
try
obj_Acad:=GetActiveOleObject('AutoCAD.Application.14');
except
obj_Acad:=CreateOleObject('AutoCad.Application.14');
end;
obj_Acad.visible:=True;
obj_ActiveDoc:=obj_Acad.ActiveDocument;
obj_ModelSpace:=obj_ActiveDoc.ModelSpace;
obj_TextStyles:=obj_ActiveDoc.TextStyles;
obj_AcadUtility:=obj_ActiveDoc.Utility;
obj_TestStyle:=obj_TextStyles.Add('TEST');
obj_TestStyle.FontFile:='simsun.ttf';
obj_ActiveDoc