几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量  


返回   几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 » 仿射空间:CAX软件开发(三)二次开发与程序设计 » CAD二次开发 » AutoCAD二次开发 » ObjectARX(VB.NET/C#)
用户名
密码
注册 帮助 会员 日历 银行 搜索 今日新帖 标记论坛为已读


 
 
主题工具 搜索本主题 显示模式
旧 2009-04-19, 09:07 PM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 【转帖】.net 开发autocad,openmode.forwrite,false);

.net 开发autocad,openmode.forwrite,false);
//打开模型空间块表记录
btr.appendentity(ent);//在记录中加入实体
tm.addnewlycreateddbobject(ent,true);//
trans.commit();//提交事务
}
从上面的代码中可以看到,.net用事务处理代替了c++中的打开和关闭操作(当然你也可以像c++一样使用相应的open和close函数来进行打开和关闭的操作,但objectarx托管封装类已把这两个函数标记成了过时的函数,也就是说不建议用户使用它们)。
有一点要大家注意的是,对象没有被加入到autocad数据库之前,你可以对它进行直接的操作(如改变颜色,移动,设置实体的几何属性等)。但一旦对象被加入到autocad数据库中,你就必须使用事务处理来打开它然后进行相应的操作。比如说,你在autocad中加入了上面的直线,而你想改变这条直线的颜色,你不能直接调用直线的color或colorindex属性来进行设置,你必须首先用事务处理的getobject()函数打开这个直线对象,然后你才能调用color或colorindex属性来对直线设置颜色。
zhfarx库的作用正是为了简化以上这些操作,有了它你在autocad中加入对象的时候就不必再打开autocad数据库的表,也可以直接对已加入到数据库中的对象进行操作,它还包括了以下这些功能:更为方便地创建autocad实体的构造函数,遍历数据库表,添加组和扩展字典及其它一些常用的函数。
首先向大家介绍zhfarx库中的tools类。这个类是zhfarx库的主要类,上面介绍的zhfarx库的主要功能都是在这个库中实现的。下面介绍这个类中的主要成员(这个类的成员都是静态的):
l 属性
包括3个:database(获取当前数据库),editor(获取autocad命令行),transactinmanager(获取事务处理管理器)。通过这三个属性,你就不要再输入诸如application.documentmanager.mdiactivedocument.database这么长的代码了,而只要简单地写为tools.database。
l 函数
按照函数的功能可以分为以下几类:
1. 加入对象
包括以下几个:
? public static objectid addentity(entity ent);
这个函数向autocad数据库加入实体类对象(如直线、圆等),下面的代码向数据库加入一条直线:
line line;
…….
tools.addentity(line);
? public static objectid addsymboltablerecord(symboltablerecord str,objectid symboltableid)
这个函数向autocad数据库加入符号表记录,符号表是autocad数据库中的一系列表如层、线型等。函数的输入参数一个为要加入的符号表记录对象(str),另一个是符号表记录要加入的符号表的对象id(可以通过访问数据库的属性获得,如layertableid属性就表示数据库的层表)。下面的代码向数据库添加一个新层:
layertablerecord ltr;
……
tools.addsymboltablerecord(ltr,tools.database.layertableid);

? public static objectid adddictionaryobject(string searchkey)
加入字典对象。关于字典对象的有关介绍,请看我以后写的文章。
? public static objectid adddictionaryobject(string searchkey,dbobject newvalue,objectid ownerid)
加入字典类对象,如扩展对象、组等。
2. 设置或读取对象的通用属性
通用属性包括:颜色(color),颜色索引(colorindex),层(layer),线型(linetype),线型比例 (linetypescale),线宽(lineweight),打印样式名(plotstylename)和可见性(visible)。
设置通用属性的函数都以put开头再加上对应的通用属性名,如设置对象颜色的函数为putcolor。设置每一种通用属性的函数都有两种形式,下面以设置颜色的函数为例来进行说明。
第一种形式为putcolor(entity ent,color color),第一个参数为对象的实例,第二个参数则是要设置的值。
第二种形式为putcolor(objectid id,color color),第一个参数为对象实例的id,第二个参数则是要设置的值。
获取通用属性的函数都以get开头再加上对应的通用属性名,如获取对象颜色的函数为getcolor。也有两种形式,下面以获取颜色的函数为例来进行说明。
第一种形式为getcolor(entity ent),输入参数为对象的实例。
第二种形式为getcolor(objectid id),输入参数为对象实例的id。
3. 变换操作
令人非常不解的是在objectarx 托管封装类中,实体类(entity)没有诸如旋转、平移、缩放之类的函数,你只能通过实体类的transformby()函数来实现这些变化操作。而transformby()函数由于要使用到一个矩阵参数,用起来不是很方便。在zhfarx库中,已经给大家重新编写了用于变换操作的函数,你可以使用它们来方便地进行相关的变换操作。变换操作函数有两种形式,区别是第一个输入函数可以是实体对象的实例,也可以是实体对象的id,在下面的介绍中我只介绍输入参数是实体对象的实例的那一种,对于另一种形式,你只要把相应的输入参数改成实体对象的id就可以了。变换操作函数如下:
? public static void move(entity ent,point3d frompoint,point3d topoint)
把实体ent从点frompoint移动到点topoint
? public static void rotate(entity ent,point3d basepoint,double rotationangle)
以点basepoint为基准点,把实体ent旋转rotationangle角度(为弧度值)。
? public static void scale(entity ent,point3d basepoint,double scalefactor)
以点basepoint为基准点,把实体ent缩放scalefactor倍(>1为放大,<1为缩小)。
? public static objectid mirror(entity ent,point3d mirrorpoint1,point3d mirrorpoint2,bool erasesourceobject)
对实体ent以由点mirrorpoint1和点mirrorpoint2组成的直线线进行镜像拷贝,参数erasesourceobject表示是否删除源对象。
4. 其它一些常用的操作函数
? public static objectid copy(entity ent)
对实体ent进行复制,还有一个重载函数,输入参数为实体的id。
? public static void erase(entity ent)
删除实体ent,还有一个重载函数,输入参数为实体的id。
? public static entity getentity(objectid id)
通过对象id来获得实体对象(而获得实体的对象id,你只要访问它的objectid属性就可以了)。
? public static dbobject getdbobject(objectid id)
通过对象id来获得非实体类对象。
? public static dbobjectcollection getiteratorforsymboltable(objectid id)
获取用于遍历符号表(由id表示)的遍历器(对象集合)。
? public static objectidcollection getiteratorforsymboltableid(objectid id)
获取用于遍历符号表(由id表示)的遍历器(对象id集合)。
? public static point3d getmidpoint(point3d pt1,point3d pt2)
获取两点表示的线段的中点。(呵呵,本来还想写诸如求交点、判断是否平行、垂直等的数学函数,但objectarx托管封装类都有相关的函数,就没有写)。
终于介绍完了tools类的成员,再来介绍zhfarx库中其它的类。tools类外的其它类都是一些对autocad实体类如直线、圆等的改写,以方便.net程序的编写。到目前的zhfarx版本为止,我改写的实体类有:直线(line),圆(circle),圆弧(arc),椭圆(ellipse),多段线(polylines,这个多段线是二维的,也就轻量多段线),单行文本(dbtext,请大家注意,在objectarx托管封装类中单行文本所在的类不是text,而是dbtext),多行文本(mtext),表格(table),填充(hatch),各种标注(包括对齐标注aligneddimension、直径标注diametricdimension、角度标注lineangulardimension2、半径标注radialdimension和旋转标注rotateddimension)。改写的实体类都是由这些实体类派生的,实体类的所有函数和属性改写类都可以使用。改写类的名字为实体类原名后加上s,如改写的直线类就是lines,而改写的圆类就是circles。你可能要说了,改写这些类有什么用?呵呵,答案有两个。一个是为了方便创建实体,另外一个就是你可以方便地修改实体的属性,不管它有没有加入到数据库中。objectarx的托管封装类中创建autocad实体的函数,也就是构造函数,通常只有一种形式,如圆只能通过圆心、半径还有一个基本上不需要使用的法向量来创建。而我们知道在autocad中有许多种创建圆的方式,如通过三点、通过二点的直径来创建圆。在zhfarx库的circles类中就包含了这些创建圆的构造函数。下面的例子说明了通过三点来创建一个圆:
circles circle=new circles(pt1,pt2,pt3);
关于这些构造函数的说明,大家可以参考附件中的帮助文档,里面有详细的说明。
通过前面的介绍,你已经知道加入到数据库中的实体是不能直接访问的,而这些改写的类就可以。下面就以两段代码作比较来说明(以圆为例),首先来看一般的实体类:
circle circle=new circle (center,normal,radius);
circle.radius=1;//由于圆还没有加入到数据库中,改变圆的半径属性是允许的
tools.addentity(circle);//利用zhfarx库的简化函数把圆加入到数据库中
circle. radius =2;
//这句是错误的,因为圆已经加入到数据库中,你必须首先打开它,然后再进行相关
//的操作,不能这样直接访问圆

下面是改写类的代码:
circles circle =new circles (center, radius);//呵呵,连构造函数也比上面的简单了
circle. radius =1;//在圆没有加入到数据库之前,改变圆的半径属性
tools.addentity(circle);//利用zhfarx库的简化函数把圆加入到数据库中
circle. radius =2;// 圆虽然已加入到数据库中,但你仍然可以直接修改它的属性
还有一点大家要注意的是,对于诸如颜色、层等的通用属性,请使用tools类的get类和put类函数(关于这些函数,请大家参考前面的内容),这些函数对于一般类和改写类都是适用的。
最新版本的zhfarx库(版本1.1)
本帖包含附件
( 13.62 kb,已被下载 182 次 )
请使用winrar软件打开rar压缩文件。
zhfarx库函数的说明文档
本帖包含附件
( 164.22 kb,已被下载 59 次 )
请使用winrar软件打开rar压缩文件。
[此贴子已经被作者于
c#最适合开发autocad,因为它拥有vb容易的特点,却具有vc++的强大功能。
zhf7878斑竹,这个库是用c#封装的,还是用vc++。net封装的?如果是前者,能否给出一部分源代码,如circle类。另,帮助文件好象有点问题:\zhfarx帮助文档\zhfarx\zhfarx.htm和\zhfarx帮助文档\zhfcad\zhfcad.htm都是空文件!
帮助文档在解压后的根目录下,有个名字为zhfarx帮助文档的就是了。
这个库是用c#封装的。
c#最适合开发autocad,因为它拥有vb容易的特点,却具有vc++的强大功能。
以下是引用zhf7878在
请大家重新下载最新的帮助文档,为chm格式
c#最适合开发autocad,因为它拥有vb容易的特点,却具有vc++的强大功能。
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)
 


主题工具 搜索本主题
搜索本主题:

高级搜索
显示模式

发帖规则
不可以发表新主题
不可以回复主题
不可以上传附件
不可以编辑您的帖子

vB 代码开启
[IMG]代码开启
HTML代码关闭



所有的时间均为北京时间。 现在的时间是 06:04 AM.


于2004年创办,几何尺寸与公差论坛"致力于产品几何量公差标准GD&T | GPS研究/CAD设计/CAM加工/CMM测量"。免责声明:论坛严禁发布色情反动言论及有关违反国家法律法规内容!情节严重者提供其IP,并配合相关部门进行严厉查处,若內容有涉及侵权,请立即联系我们QQ:44671734。注:此论坛须管理员验证方可发帖。
沪ICP备06057009号-2
更多