自定义实体
1、 说明
控件支持自定义实体功能,可以从McDbEntity继承自己的实体,在自定体实体类中,实现相关虚函数来实现实体的自定义功能。
2、 类的类型信息
(1)使用MCRX_DECLARE_MEMBERS宏定义类的类型信息函数,宏的第一个参数是类的类名。使用例如:
MCRX_DECLARE_MEMBERS(CLinkLine);
(2)使用 ACRX_DXF_DEFINE_MEMBERS 宏实现类的类型信息函数。宏定义参数使用如下:
ACRX_DXF_DEFINE_MEMBERS(CLinkLine, McDbEntity,
AcDb::kDHL_CURRENT, AcDb::kMReleaseCurrent,
AcDbProxyEntity::kAllAllowedBits, _T("LinkLine"),
_T("MxDrawObj Test Custom Entity") );
CLinkLine 自定义实体的类名
McDbEnity 自定义实体的基类
AcDb::kDHL_CURRENT 当前文件版本
AcDb::kMReleaseCurrent 当前控件版本
AcDbProxyEntity::kAllAllowedBits 代理实体处理标志
_T("LinkLine") Dfx0组码对应值
_T("MxDrawObj Test Custom Entity") 类说明
(3)在程序启动的时候,调用rxInit函数,自定义实体的类型信息注册到系统中,使用例如:
3、 worldDraw
重载该虚函数,绘制自定义实体的显示效果
(1)VC接口:
Adesk::Boolean worldDraw (AcGiWorldDraw
(2)参数:
Wd 显示绘制的上下文对象
(3)参考例程:
4 、getGripPoints
重载该虚函数,返回自定义的编辑夹点
(1)VC接口:
virtual Acad::ErrorStatus getGripPoints(
AcGePoint3dArray& gripPoints,
AcGeIntArray& osnapModes,
AcGeIntArray& geomIds) const;
(2)参数:
gripPoints 返回夹点
osnapModes 暂没有使用
geomIds 暂没有使用
(3)参考例程:
5、moveGriPointsAt
重载该虚函数,处理夹点编辑结果。
(1)VC接口:
virtual Acad::ErrorStatus moveGripPointsAt(
const AcGeIntArray& indices,
const AcGeVector3d& offset);
(2)参数:
indices indices [0]参数是传入被编辑的夹点索引, 其它数组元素暂没有使用。
offset 夹点编辑的偏移量
(3)参考例程:
6 、getGeomExtents
重载该虚函数,返回自定义实体的外包矩形框
(1)VC接口:
virtual Acad::ErrorStatus getGeomExtents(
AcDbExtents& extents) const;
(2)参数:
extents
(3)参考例程:
7、 getOsnapPoints
重载该虚函数,返回自定义实体的捕捉点
(1)VC接口:
virtual Acad::ErrorStatus getOsnapPoints(
AcDb::OsnapMode osnapMode,
int gsSelectionMark,
const AcGePoint3d& pickPoint,
const AcGePoint3d& lastPoint,
const AcGeMatrix3d& viewXform,
AcGePoint3dArray& snapPoints,
AcDbIntArray& geomIds) const;
(2)参数:
osnapMode
gsSelectionMark 暂没有使用
pickPoint 当前输入点
lastPoint 上一次的输入点
viewXform 暂没有使用
snapPoints 返回捕捉点
geomIds 暂没有使用
(3)参考例程:
8、explode
重载该虚函数,返回自定义实体打碎后的实体,在控件中,自定义实体保存在到dwg图中时,使用是块引用来保存,控件使用该函数得到自定义实体在块引用中的实体数据。
(1)VC接口:
virtual Acad::ErrorStatus explode(
AcDbVoidPtrArray& entitySet) const;
(2)参数:
entitySet 返回打碎后的基本实体。实体指针内存控件释放。
(3)参考例程:
9、dwgInFields
重载该虚函数,响应控件系统,读取自定义实体数据,在从文件读取实体,复制实体等地方都会调用该函数。
(1)VC接口:
virtual Acad::ErrorStatus dwgInFields (AcDbDwgFiler* pFiler);
(2)参数:
pFiler 数据归档对象,在这个函数,使用该对象读取数据。
(3)参考例程:
10、 dwgOutFields
重载该虚函数,响应控件系统,写入自定义实体数据,在把实体写入文件时,复制实体等地方都会调用该函数。
(1)VC接口:
virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler* pFiler) const;
(2)参数:
pFiler 数据归档对象,在这个函数,使用该对象写入数据。
(3)参考例程:
11 、控件例程说明
在控件安装目录下的samples\CustomEntity\ CustomEntity.sln例程,演示了自定义实体现。在例程实现连接块CLinkBlock自定义实体,CLinkLine自定义实体,
CLinkBlock类显示通过块引用显示,绘图捕捉点通过块记录中的块属性定义文本来确定,当该实体被编辑后,会自动移动与该实体连接的连接线,实现个连动效果。
CLinkLine 类实现一个线段实体功能,并带有长度标注功能。