乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 36|回复: 1

使用梦想绘图控件做自定义实体

[复制链接]

13

主题

31

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
83
发表于 2009-9-23 21:36:00 | 显示全部楼层 |阅读模式
说明
     控件支持自定义实体功能,可以从McDbEntity继承自己的实体,在自定体实体类中,实现相关虚函数来实现实体的自定义功能。
1.2
       类的类型信息
       使用MCRX_DECLARE_MEMBERS宏定义类的类型信息函数,宏的第一个参数是类的类名。使用例如:
MCRX_DECLARE_MEMBERS(CLinkLine);
    使用 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") 类说明
     在程序启动的时候,调用rxInit函数,自定义实体的类型信息注册到系统中,使用例如:
   BOOL CCustomEntityApp::InitInstance()
  {
   …..
   // 注册自定义实体类信息。
   CLinkBlock::rxInit();
   CLinkLine::rxInit();

1.3
      worldDraw重载该虚函数,绘制自定义实体的显示效果
VC接口:
  Adesk::Boolean  worldDraw
                               
    (AcGiWorldDraw * wd);;
参数:
   Wd  显示绘制的上下文对象
参考例程:

1.4
       getGripPoints重载该虚函数,返回自定义的编辑夹点
VC接口:
virtual Acad::ErrorStatus
getGripPoints(
AcGePoint3dArray&
gripPoints,
AcGeIntArray&
osnapModes,
AcGeIntArray&
                                       
geomIds) const;
参数:
   gripPoints   返回夹点
   osnapModes   暂没有使用
   geomIds      暂没有使用
参考例程:
1.5
       moveGripPointsAt重载该虚函数,处理夹点编辑结果。
VC接口:
virtual
Acad::ErrorStatusmoveGripPointsAt(
constAcGeIntArray& indices,
constAcGeVector3d& offset);
参数:
indices

indices [0]参数是传入被编辑的夹点索引, 其它数组元素暂没有使用。
offset    夹点编辑的偏移量

参考例程:
1.6
     getGeomExtents重载该虚函数,返回自定义实体的外包矩形框
VC接口:
virtual
Acad::ErrorStatus
getGeomExtents(
AcDbExtents& extents) const;
参数:
extents    返回自定义实体外包矩形框。
参考例程:

1.7
     getOsnapPoints重载该虚函数,返回自定义实体的捕捉点
VC接口:
virtual Acad::ErrorStatus
getOsnapPoints(
AcDb::OsnapMode
osnapMode,
int
gsSelectionMark,
const AcGePoint3d&
pickPoint,
const AcGePoint3d&
lastPoint,
const AcGeMatrix3d& viewXform,
AcGePoint3dArray&
snapPoints,
AcDbIntArray&
geomIds) const;
参数:
osnapMode    捕捉点类型,通过该变量可以确定需要返回什么类型的捕捉点
gsSelectionMark   暂没有使用
pickPoint         当前输入点
lastPoint         上一次的输入点
viewXform         暂没有使用
snapPoints        返回捕捉点
geomIds           暂没有使用
参考例程:
1.8
           explode重载该虚函数,返回自定义实体打碎后的实体,在控件中,自定义实体保存在到dwg图中时,使用是块引用来保存,控件使用该函数得到自定义实体在块引用中的实体数据。
VC接口:
virtual
Acad::ErrorStatus
explode(
AcDbVoidPtrArray& entitySet) const;
参数:
entitySet    返回打碎后的基本实体。实体指针内存控件释放。
参考例程:
1.9
         dwgInFields重载该虚函数,响应控件系统,读取自定义实体数据,在从文件读取实体,复制实体等地方都会调用该函数。
VC接口:
virtual Acad::ErrorStatusdwgInFields(AcDbDwgFiler* pFiler);
参数:
pFiler   数据归档对象,在这个函数,使用该对象读取数据。
参考例程:
1.10
      dwgOutFields重载该虚函数,响应控件系统,写入自定义实体数据,在把实体写入文件时,复制实体等地方都会调用该函数。
VC接口:
   virtual Acad::ErrorStatusdwgOutFields(AcDbDwgFiler* pFiler) const;
参数:
   pFiler   数据归档对象,在这个函数,使用该对象写入数据。
参考例程:
1.11
控件例程说明
        在控件安装目录下的samples\CustomEntity\ CustomEntity.sln例程,演示了自定义实体现。在例程实现连接块CLinkBlock自定义实体,CLinkLine自定义实体,
     CLinkBlock类显示通过块引用显示,绘图捕捉点通过块记录中的块属性定义文本来确定,当该实体被编辑后,会自动移动与该实体连接的连接线,实现个连动效果。
     CLinkLine 类实现一个线段实体功能,并带有长度标注功能。

cuepbhepd2c.gif

cuepbhepd2c.gif

回复

使用道具 举报

2

主题

165

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
173
发表于 2009-9-25 20:24:00 | 显示全部楼层
太佩服了,虽然自定义实体还不是很懂,但能研究到这里真是厉害阿~~~
貌似有些代码完全抄arx的~~
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-5-1 17:50 , Processed in 0.880094 second(s), 59 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表