- 积分
- 3266
- 明经币
- 个
- 注册时间
- 2002-7-5
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
发表于 2002-12-27 11:34:00
|
显示全部楼层
类初始化宏和类实现宏调用
根据我的经验,可能您从AcDbEntity派生类时,未能正确使用自定义类的实现宏。AsdkCAreaLine::rxInit();仅仅只是类初始化。
在类定义class DLLIMPEXP AsdkCAreaLine : public AcDbEntity中首先要做类声明,可调用宏ACRX_DECLARE_MEMBERS(weltopMyclassObj);
这您已做好。
然后,实现自定义类时,要使用下列三个宏之一:
ACRX_NO_CONS_DEFINE_MEMBERS() 该宏用于抽象类和不能实例化的类。
ACRX_CONS_DEFINE_MEMBERS() 该宏用于瞬态类,可以实例化,但不能保存到文件中
ACRX_DXF_DEFINE_MEMBERS() 该宏用于能进行DWG和DXF文件读写操作的类。
其中最后一个宏最常用,也是容易出错的宏。
在2000和2002中该宏定义为:
ACRX_DXF_DEFINE_MEMBERS(CLASS_NAME, PARENT_CLASS, DWG_VERSION, MAINTENANCE_VERSION, PROXY_FLAGS, DXF_NAME, APP)
其中,参数定义如下:
CLASS_NAME:自定义类名,此例为weltopMyclassObj
PARENT_NAME:派生父类名,此例为AcDbObject
PROXY_FLAGS:类对象代理标志,你若不使用代理,此参数为0
DXF_NAME:DXF文件名,可任意指定,据AUTODESK技术支持人员说要用大写字母,不过我写过一个程序用了大小写混和,好象没出问题
APP:应用程序名,注意:一个应用程序中有多个自定义类时,DXF_NAME和APP参数应该保持一致。
DWG_VERSION, MAINTENANCE_VERSION:分别指类适用的ACAD最高和最低版本,在ARX 2000和2002中必须填写这两个参数,我不知道这两个参数具体如何使用,我在程序中分别指定为AcDb::kDHL_CURRENT和AcDb::kMReleaseCurrent |
|