请问如何用C#控制AutoCAD?(200分)

  • 主题发起人 主题发起人 pharaoh
  • 开始时间 开始时间
P

pharaoh

Unregistered / Unconfirmed
GUEST, unregistred user!
请问如何用C#控制AutoCAD?
下面的是一段Delphi代码,主要是打开AutoCAD,绘制一些直线和圆弧等,请问如何在
C#中实现?
代码:
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;
 
我自己在C#中实现了Delphi的相同内容。过程如下:
在VC#选择菜单“项目|添加引用...”,在COM选项卡添加“AutoCAD 2000 Object Library”。
using AutoCAD;
代码:
AcadApplication autoCADApp = new AcadApplicationClass();
autoCADApp.Visible=true;
AcadModelSpace mSpace= autoCADApp.ActiveDocument.ModelSpace;
Double[] p1=newdo
uble[3];
p1[0]=2.0;
p1[1]=4.0;p1[2]=0.0;
Double[] p2=newdo
uble[3];
p2[0]=12.0;
p2[1]=14.0;p2[2]=0.0;
Double[] p3=newdo
uble[3];
p3[0]=7.0;
p3[1]=8.0;p3[2]=0.0;
mSpace.AddLine(p1,p2).Update();
mSpace.AddCircle(p1,1.5).Update();
mSpace.AddCircle(p1,1).Update();
mSpace.AddCircle(p2,2).Update();
mSpace.AddArc(p3,1.2,1,2).Update();
mSpace.AddBox(p2,5,3,2).Update();
mSpace.AddCone(p1,1.3,2).Update();
mSpace.AddCylinder(p3,1.7,1.5).Update();
mSpace.AddMText(p3,10,"My Add Texe");
存在问题:
只能新打开一个AutoCAD,不能利用已经打开的AutoCAD,有谁知道如何解决,请告知,谢谢。
 
我在网上找到了解决的方法,代码如下:
代码:
AcadApplication autoCADApp;
try{
  autoCADApp = (AutoCAD.AcadApplication)System.Runtime.InteropServices.Marshal.GetActiveObject("AutoCAD.Application");
}
catch{
  autoCADApp = new AcadApplicationClass();
}
现在我可以参照AutoCAD的帮助进行试验了。
 
又学了一点东西
 
接受答案了.
 
后退
顶部