十五年专注于
液压缸筒生产

全国咨询热线:
400-086-9833

   热门关键词修理 加工 活塞杆 缸筒 不锈钢

无标题文档

天圆液压产品中心

当前位置:主页 > 行业资讯 >

基于.NET平珩磨管台的AutoCAD二次开拓

时间:2016-11-18 11:07来源:天圆网站 作者:admin 点击:
当前AutoCAD的二次开拓器材首要有:VisualLisp、VBA和ObjectARX等。个中,VisualLisp与VBA较为简朴,出格是VBA,行使利便且开拓速率较快,但其成果对比ObjectARX有所不敷,尤其是扑面向工具的成果支持欠好。而ObjectARX基于VC平台,在C++的支持下,其成果

}

using Autodesk.AutoCAD.DatabaseServices;
BlockTableRecord btr = (BlockTableRecord)bt[BlockTableRecord.ModelSpace].Open(OpenMode.ForWrite); //得到模子空间的块表记录
//破除操纵

3.行使.NET API

}
public class MyARX : IExtensionApplication {

.NET API与传统ObjectARX的区别首要源于在.NET情形下开拓应用措施与在VC情形下开拓应用措施的区别。起首,在VC情形下,措施员必要本身打点内存的申请和开释,而.NET回收了垃圾接纳机制,活塞杆,由.NET框架自行判定内存接纳的机缘并实施接纳,从而办理了令C++措施员头痛的内存走漏题目。也正是因为这个特点,在.NET情形下不能象在C++情形下那样操作析构函数开释其他的资源,必要措施员在措施中显式地开释。在.NET API中,首要通过Dispose来函数举办资源的开释。

}
finally {

2..NET API与传统ObjectARX的首要区别

BlockTableRecord btr = (BlockTableRecord)bt[BlockTableRecord.ModelSpace].Open(OpenMode.ForWrite);
}
AcadObject obj;
obj.Modified += new IAcadObjectEvents_ModifiedEventHandler(obj_Modified);
}

在ObjectARX中,“acrxEntryPoint”函数是ARX措施的载入点,措施的初始化和破除均可在该函数中举办。而在.NET API中则起首必要将初始化代码封装在一个类中,同时该类必要压制实现

其次,ObjectARX中的各类回响器(Reactor)在.NET API中由外包类映射为各类变乱(Event),可通过界说这些变乱的相应函数来相应AutoCAD的各类操纵。同时对付错误信息的处理赏罚也从函数返回值改变为凡是非常来处理赏罚,使其更好地兼容.NET。因为VB.NET、C#等说话都是完全面向工具的,没有全局函数的观念,以是.NET API将ObjectARX下的全局函数封装为.NET API下的某些工具或工具的属性,如ObjectARX下与用户交互的系列全局函数被封装为CommandLinePrompt类。

1..NET API简介

}
using Autodesk.AutoCAD.Runtime;
btr.AppendEntity(line);//将直线添加到模子空间中

namespace ARXExample {
try {

这样在加载措施时AutoCAD将直接通过MyARX中的Initialize语句举办初始化,同时注册MyARX中的呼吁。不然,AutoCAD将搜刮dll中全部的类以找到实现IExtensionApplication接口的类举办初始化,如找不到则不举办初始化。同样,通过CommandClass属性,AutoCAD也会直接到MyARX类中搜刮要注册的呼吁。当措施中包括的类数量较多时,通过ExtensionApplication和CommandClass这两个属性可明显地加速措施的加载速率。

finally {

[CommandMethod ("AddLine")]
obj = (AcadObject)((AcadDatabase)db.AcadDatabase).ObjectIdToObject(objId.OldId);
public void Terminate() {

4..NET API的初始化与破除

}

……

下面以C#为例,在Microsoft Visual C# 2005 Express Edition Beta平台上,先新建一个Class Library项目,液压油缸,再将AutoCAD2005安装目次下的acdbmgb.dll与acmgb.dll作为引用添加进项目中。这两个文件包括了.NET API中全部的外包类。

然后在要行使.NET API的类中添加以下语句以引用.NET API的定名空间。必要添加的语句如下:

public static void obj_Modified(AcadObject obj) {
line.Close();//封锁该直线

Line line = new Line(new Point3d(0, 0, 0), new Point3d(200, 200, 0));//建设一条直线

当前AutoCAD的二次开拓器材首要有:VisualLisp、VBA和ObjectARX等。个中,VisualLisp与VBA较为简朴,出格是VBA,行使利便且开拓速率较快,但其成果对比ObjectARX有所不敷,尤其是扑面向工具的成果支持欠好。而ObjectARX基于VC平台,在C++的支持下,其成果很是强盛,可以很好地运用各类面向工具技能,但其弱点是发开速率较量慢,同时对开拓职员的手段要求较高。

.NET是微软新推出的开拓平台,具有浩瀚利益。基于.NET平台对AutoCAD举办二次开拓,可充实操作.NET的各类上风,在担保成果强盛的条件下大大进步开拓速率。

IExtensionApplication接口。该接口包括Initialize与Terminate两个函数。个中Initialize认真加载措施时的初始化操纵,Terminate则认真举办卸载措施时的破除操纵。代码如下:

}
foreach (ObjectId objId in btr) {

由此可见,上述语句与在VC下的开拓很是相同,其进程都是先获得数据库,然后依次打开块表、块表记录,接着添加实体,最后封锁块表、块表记录。值得留意的是finally语句,无论try块中的语句是否产生非常,finally块中的语句城市被执行,从而确保封锁块表和块表记录的操纵会被执行。

bt.Close();//封锁块表

这样就可以操作.NET API举办开拓了。以下代码可在AutoCAD注册为一个呼吁“AddLine”,该呼吁可在当前事变空间中添加一条出发点为(0,0,0),终点(200,200,0)的直线。代码如下:

同时,为加速加载速率,可在MyARX.cs的文件头插手以下语句:

一、基于.NET的开拓

Database db = HostApplicationServices.WorkingDatabase;//获适合前事变空间的数据库
btr.Close();
CommandLinePrompts.Message("object modified!" + obj.ObjectID + "\n");
using Autodesk.AutoCAD.Geometry;

}
{
public static void AddLineCmd()
//遍历块表记录
……
//为obj添加相应Modified变乱
//由ObjectId获得ActiveX中的AcadObject工具
public void Initialize() {

在今朝的.NET API中,其成果与传统的ObjectARX对比有所不及,有相等的ObjectARX函数今朝还没有封装到.NET API中,如GetPoint等。但可以通过COM方法行使ActiveX来补充.NET API的不敷。

在新推出的AutoCAD 2006中,Autodesk为其开拓增进了.NET API。.NET API提供了一系列托管的外包类(Managed Wrapper Class),使开拓职员可在.NET框架下,行使任何支持.NET的说话,如VB.NET、C# 和Managed C++等对AutoCAD举办二次开拓。其利益是完全面向工具,在拥有与C++相匹配的强盛成果的同时,具有利便易用的特点,是较抱负的AutoCAD二次开拓器材。

个中变乱相应函数obj_Modified的暗示如下所示:
bt.Close();
[assembly: CommandClass (typeof (ARXExample.MyARX) ) ]

using Autodesk.AutoCAD.ApplicationServices;
btr.Close();//封锁块表记录
增进了COM引用后,措施就可以行使很多VBA中的成果了。以AutoCAD ActiveX中的变乱为例,以下代码可觉适当前事变空间中全部的图元添加Modified变乱:

(责任编辑:admin)
分享按钮
------分隔线----------------------------