如何用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
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
更多精彩
赞助商链接