C# ObjectArx cad二次开发
作者:网络转载 发布时间:[ 2016/6/15 10:52:03 ] 推荐标签:测试开发技术 C#
1、环境搭建:安装CAD 和objectArx库,这里安装的是cad2012和objectArx2010 ,vs是2010
2、新建一个类库项目,引用objectArx安装目录下inc文件夹下的AcDbMgd.dll和AcMgd.dll,这里注意X86和X64系统的区别
3、添加两个类,一个继承IExtensionApplication接口,这个是dll的入口,cad会从这个类加载程序做一些初始化的操作;另外一个可以写自定义的一些cad命令
cad的引用:
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Windows;
using Autodesk.AutoCAD.Interop;
using Autodesk.AutoCAD.Interop.Common;
可以添加程序集目录,方便快速加载,其中两个类,第一个类标识为入口继承IExtensionApplication接口,第二个类为自定义的命令
[assembly: ExtensionApplication(typeof(cadObjArx.CADExetensionCls))]
[assembly: CommandClass(typeof(cadObjArx.CADCommandS))]
代码:
这里只做两个简单的例子,更加深入的需要看cad的开发手册。。。。。
namespace cadObjArx
{
public class CADExetensionCls : IExtensionApplication
{
public void Initialize()
{//加载dll的时候执行相关加载操作
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
ed.WriteMessage("
加载cadObjArx
");
load();
}
public void Terminate()
{//这个是推出时执行
Document doc = Application.DocumentManager.MdiActiveDocument;
doc.LockDocument(DocumentLockMode.NotLocked, "", "", false);
}
private void load()
{ //这里添加一个工具条,添加一个按钮绑定下面的InitT命令
//这个是通过引用cad的com组件实现的,需要引用cad的Autodesk.AutoCAD.Interop和Autodesk.AutoCAD.Interop.Common两个com组件,
AcadMenuGroups menugroups = (AcadMenuGroups)Application.MenuGroups;
AcadToolbar toolbar = menugroups.Item(0).Toolbars.Add("Test");
AcadToolbarItem item = toolbar.AddToolbarButton(toolbar.Count, "InitT", "测试", "InitT
");
item.SetBitmaps("设置16x16.bmp", "设置32x32.bmp");
toolbar.Dock(AcToolbarDockStatus.acToolbarDockTop);
}
}
public class CADCommandS
{
[CommandMethod("InitT",CommandFlags.Modal)]//特性标识,标识这个是cad命令
public void Init()
{//这里做个测试,命令行中输出一句话,按下上面添加的按钮或者在命令行中输入命令会被执行
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
ed.WriteMessage("测试init
");
}
[CommandMethod("ListEntities")]
public void ListEntities()
{//这个是遍历当前cad打开的文档中的对象//在命令行中写命令即可执行
Document acDoc = Application.DocumentManager.MdiActiveDocument;
Database acCurDb = acDoc.Database;
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{
BlockTable acBlkTbl;
acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as BlockTable;
BlockTableRecord acBlkTblRec;
acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForRead) as BlockTableRecord;
int nCnt = 0;
acDoc.Editor.WriteMessage("
Model space objects: ");
foreach (ObjectId acObjId in acBlkTblRec)
{
acDoc.Editor.WriteMessage("
" + acObjId.ObjectClass.DxfName +":"+ acObjId.Handle.Value.ToString());
nCnt = nCnt + 1;
}
if (nCnt == 0)
{
acDoc.Editor.WriteMessage("
No objects found.");
}
else
{
acDoc.Editor.WriteMessage("
Total {0} objects.", nCnt);
}
}
}
}
}
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11