WEB开发网
开发学院网站运营SEO推广 如何用C#在AutoCAD2007或更老的版本中获取线的长度... 阅读

如何用C#在AutoCAD2007或更老的版本中获取线的长度

 2009-11-03 16:44:36 来源:WEB开发网   
核心提示:最近有人提到他用.NET在2008版上开发了一款软件,其中使用了获取直线长度的功能(就是利用Line.Length属性),如何用C#在AutoCAD2007或更老的版本中获取线的长度,现在想在2007版本下也使用该软件,但是2007版本中.NET编程接口不支持Line.Length属性,获取这个Length属性, 我用
最近有人提到他用.NET在2008版上开发了一款软件,其中使用了获取直线长度的功能(就是利用Line.Length属性),现在想在2007版本下也使用该软件,但是2007版本中.NET编程接口不支持Line.Length属性,如果他自己来实现该方法,觉得工作量比较大,想知道有没有好的解决方法。

AutoCAD ActiveX API里面的AcadLine对象支持Length属性,所以最简单的解决方法就是从.NET程序中调用ActiveX API,将.NET中的Line对象转化成AcadLine对象,获取这个Length属性。

我用C#写了个范例,主要代码如下:

注:你需要在工程中增加对AutoCAD/ObjectDBX Common 17.0 Type Library的参考。

using Autodesk.AutoCAD.Runtime;

using Autodesk.AutoCAD.DatabaseServices;

using Autodesk.AutoCAD.applicationServices;

using Autodesk.AutoCAD.EditorInput;

using Autodesk.AutoCAD.Interop.Common;

// Define Command "getLine"

[CommandMethod("getLine")]

static public void EntityTest()

{

Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;

PRomptEntityOptions entopts = new PromptEntityOptions("Pick a line of your choice from the drawing");

entopts.Message = "Pick a line of your choice from the drawing";

PromptEntityResult ent = null;

try

{

ent = ed.GetEntity(entopts);

}

catch

{

ed.WriteMessage("You did not select a valid entity");

return;

}

if (ent.Status != PromptStatus.Error)

{

ObjectId entid = ent.ObjectId;

Database db = Application.DocumentManager.MdiActiveDocument.Database;

Autodesk.AutoCAD.DatabaseServices.TransactionManager tm = db.TransactionManager;

using (Transaction myT = tm.StartTransaction())

{

Entity entity = (Entity)tm.GetObject(entid, OpenMode.ForRead, true);

if (entity.GetType().FullName=="Autodesk.AutoCAD.DatabaseServices.Line")

{

AcadLine myL = entity.AcadObject as AcadLine;

ed.WriteMessage("length of the line is:" + myL.Length);

}

myT.Commit();

}

}

}

从我的资源下载中心可以下载完整的源代码:http://barbarahan.download.csdn.net 

Tags:如何 AutoCAD

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接