自定义实体的实现

1 、       自定义实体... 3

1.1      说明... 3

1.2      类的类型信息... 3

1.3      worldDraw.. 4

1.4      getGripPoints 4

1.5      moveGripPointsAt 5

1.6      getGeomExtents 6

1.7      getOsnapPoints 6

1.8      explode. 7

1.9      dwgInFields 8

1.10    dwgOutFields 9

1.11     控件例程说明... 9

1 、         
自定义实体

1.1                 
说明

控件支持自定义实体功能,可以从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  显示绘制的上下文对象

参考例程:

Adesk::Boolean 
CLinkLine::worldDraw      
(AcGiWorldDraw * wd)

{

assertReadEnabled();

wd->geometry().line(m_start,m_end);

std::auto_ptr<AcDbText>
spText(GetDimText() );

spText->worldDraw(wd);

return
Adesk::kTrue;

}

1.4                 
getGripPoints

重载该虚函数,返回自定义的编辑夹点

VC接口:

virtual
Acad::ErrorStatus
  getGripPoints(

       AcGePoint3dArray&
 gripPoints,

       AcGeIntArray&  osnapModes,

       AcGeIntArray&  geomIds) const;

参数:

gripPoints 
         返回夹点

osnapModes   
暂没有使用

geomIds    
      暂没有使用

参考例程:

Acad::ErrorStatus  
CLinkLine::getGripPoints(

AcGePoint3dArray&  gripPoints,

AcGeIntArray&  osnapModes,

AcGeIntArray&  geomIds) const

{

assertReadEnabled();

gripPoints.append(m_start);            // 返回开始点夹点

gripPoints.append(m_end);                    // 返回结束点夹点

gripPoints.append(m_start
+ (m_end - m_start) / 2.0);    // 返回中点夹点。

return
Acad::eOk;

}

1.5                 
moveGripPointsAt

重载该虚函数,处理夹点编辑结果。

VC接口:

virtualAcad::ErrorStatusmoveGripPointsAt(

constAcGeIntArray& indices,

       constAcGeVector3d& offset);

参数:

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

offset 
       夹点编辑的偏移量

参考例程:

Acad::ErrorStatus
CLinkLine::moveGripPointsAt(const AcGeIntArray& indices,

const AcGeVector3d& offset)

{

assertWriteEnabled();

int iIndex =
indices[0];

switch(iIndex)

{

case 0:

m_start
= m_start + offset;            // 开始点被编辑

break;

case 1:

m_end
= m_end + offset;                     // 结束点被编辑

break;

case 2:

m_start
= m_start + offset;            // 中点被编辑

m_end
= m_end + offset;                     // 中点被编辑

break;

}

return
Mcad::eOk;

}

1.6                 
getGeomExtents

重载该虚函数,返回自定义实体的外包矩形框

VC接口:

virtualAcad::ErrorStatus   getGeomExtents(

AcDbExtents& extents) const;

参数:

extents           返回自定义实体外包矩形框。

参考例程:

Acad::ErrorStatus  
CLinkLine::getGeomExtents(AcDbExtents& extents) const

{

assertReadEnabled();

extents.set(m_start,m_end);

return
Mcad::eOk;

}

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              暂没有使用

参考例程:

Acad::ErrorStatus  
CLinkLine::getOsnapPoints(

AcDb::OsnapMode     osnapMode,

int                 gsSelectionMark,

const
AcGePoint3d&  pickPoint,

const
AcGePoint3d&  lastPoint,

const
AcGeMatrix3d& viewXform,

AcGePoint3dArray&   snapPoints,

AcDbIntArray&       geomIds) const

{

assertReadEnabled();

if(osnapMode
== McDb::kOsModeEnd)

{

// 返端点。

snapPoints.append(m_start);

snapPoints.append(m_end);

}

else
if(osnapMode == McDb::kOsModeMid)

{

// 返回的是中点。

snapPoints.append(m_start
+ (m_end - m_start) / 2.0);

}

return
Mcad::eOk;

}

1.8                 
explode

重载该虚函数,返回自定义实体打碎后的实体,在控件中,自定义实体保存在到dwg图中时,使用是块引用来保存,控件使用该函数得到自定义实体在块引用中的实体数据。

VC接口:

virtualAcad::ErrorStatus   explode(

AcDbVoidPtrArray& entitySet) const;

参数:

entitySet            返回打碎后的基本实体。实体指针内存控件释放。

参考例程:

Acad::ErrorStatus  
CLinkLine::explode(AcDbVoidPtrArray& entitySet) const

{

assertReadEnabled();

AcDbLine*
pLine = new AcDbLine(m_start,m_end);

entitySet.append(pLine);

entitySet.append(GetDimText()
);

return
Acad::eOk;

}

1.9                 
dwgInFields

重载该虚函数,响应控件系统,读取自定义实体数据,在从文件读取实体,复制实体等地方都会调用该函数。

VC接口:

virtual
Acad::ErrorStatus
dwgInFields(AcDbDwgFiler* pFiler);

参数:

pFiler           数据归档对象,在这个函数,使用该对象读取数据。

参考例程:

Acad::ErrorStatus CLinkLine::dwgInFields
(AcDbDwgFiler* pFiler)

{

assertWriteEnabled();

if(pFiler->filerType()
!= McDb::kCustomEntityFileFiler)

{

Mcad::ErrorStatus
es;

if
((es = McDbEntity::dwgInFields(pFiler)) != Mcad::eOk)

{

return
es;

}

}

int lVar =
1;

pFiler->readInt(&lVar);

pFiler->readPoint3d(&m_start);

pFiler->readPoint3d(&m_end);

return
Mcad::eOk;

}

1.10             
dwgOutFields

重载该虚函数,响应控件系统,写入自定义实体数据,在把实体写入文件时,复制实体等地方都会调用该函数。

VC接口:

virtual
Acad::ErrorStatus
dwgOutFields(AcDbDwgFiler* pFiler) const;

参数:

pFiler           数据归档对象,在这个函数,使用该对象写入数据。

参考例程:

Acad::ErrorStatus
CLinkLine::dwgOutFields(AcDbDwgFiler* pFiler) const

{

assertReadEnabled();

if(pFiler->filerType()
!= McDb::kCustomEntityFileFiler)

{

Mcad::ErrorStatus
es;

if
((es = McDbEntity::dwgOutFields(pFiler)) != Mcad::eOk)

{

return
es;

}

}

pFiler->writeInt(LINKLINE_VERSION);

pFiler->writePoint3d(m_start);

pFiler->writePoint3d(m_end);

return
Mcad::eOk;

}

1.11             
控件例程说明

在控件安装目录下的samples\CustomEntity\
CustomEntity.sln例程,演示了自定义实体现。在例程实现连接块CLinkBlock自定义实体,CLinkLine自定义实体,

CLinkBlock类显示通过块引用显示,绘图捕捉点通过块记录中的块属性定义文本来确定,当该实体被编辑后,会自动移动与该实体连接的连接线,实现个连动效果。

CLinkLine 类实现一个线段实体功能,并带有长度标注功能。

CAD控件使用教程 自定义实体的实现的更多相关文章

  1. 梦想CAD控件COM接口自定义命令

    在CAD软件操作中,为方便使用者,使用自定义命令发出命令,完成CAD绘图,修改,保存等操作.点击此处下载演示实例. _DMxDrawX::RegistUserCustomCommand 向CAD控件注 ...

  2. 梦想CAD控件网页版关于自定义命令

    在CAD控件操作中,为方便使用者,使用自定义命令发出命令,完成CAD绘图,修改,保存等操作.点击此处在线演示. _DMxDrawX::RegistUserCustomCommand 向CAD控件注册一 ...

  3. CAD控件,CAD插件使用教程:Android开发使用控件--开发环境的搭建

    Android开发使用控件入门--环境搭建 2014-12-24 09:57     14人阅读     评论(0)     收藏         编辑     删除 CAD控件.CAD三维控件,手机 ...

  4. 如何在网页中浏览和编辑DWG文件 梦想CAD控件

    如何在网页中浏览和编辑DWG文件 梦想CAD控件 www.mxdraw.com 梦想绘图控件5.2  是国内最强,最专业的CAD开发组件(控件),不需要AutoCAD就能独立运行.控件使用VC 201 ...

  5. CAD控件:网上打开dwg文件时,对dwg文件路径加密的功能

    梦想CAD控件2015.03.12最新更新  1. 增加控件状态栏文字,自定义功能,        C++接口为 :   CStatusBarInformationReactor::CreatePro ...

  6. 梦想CAD控件关于比较问题

    全图比较 怎么比较两个CAD图纸文件修改前后的不同部分呢?在工程图纸设计中,我们更多情况下可能需要对同一张工程图的前后修改部分进行对比,以确定工程图纸的改动部分及追溯原因,本教程演示了几种常见的比较方 ...

  7. 梦想CAD控件图块COM接口知识点

    梦想CAD控件图块COM接口知识点 图块是将多个实体组合成一个整体,并给这个整体命名保存,在以后的图形编辑中图块就被视为一个实体.一个图块包括可见的实体如线.圆.圆弧以及可见或不可见的属性数据.图块的 ...

  8. 梦想CAD控件图层COM接口知识点

    梦想CAD控件图层COM接口知识点 一.新建图层 主要用到函数说明: _DMxDrawX::AddLayer 增加新的图层.详细说明如下: 参数 说明 BSTR pszName 图层名 c#中实现代码 ...

  9. CAD控件的鼠标事件(网页版)

    _DMxDrawXEvents::MouseEvent CAD控件中的鼠标事件. 参数 说明 LONG lType 事件类型,1鼠标移动,2是鼠标左键按下,3是鼠标右键按下,4是鼠标左键双击 5是鼠标 ...

随机推荐

  1. plink 与 ssh 远程登录问题

    plink 是一种 putty-tools,ubuntu 环境下,如果没有安装 plink,可通过如下方法进行安装: $ echo y | sudo apt-get install plink 1. ...

  2. BZOJ_1307_玩具_单调栈+双指针

    BZOJ_1307_玩具_单调栈+双指针 Description 小球球是个可爱的孩子,他喜欢玩具,另外小球球有个大大的柜子,里面放满了玩具,由于柜子太高了,每天小球球都会让妈妈从柜子上拿一些玩具放在 ...

  3. vue 使用过程中自己遇到的bug

    需要安装npm git(windows系统需要安装) npm 是node的包管理工具 npm 国内的网站比较慢,推荐使用cnpm(淘宝的镜像) cnpm(npm) install 创建依赖-----因 ...

  4. 修复win7的启动引导

    自己的电脑上本身是win7,为了试验openstack,决定装个ubuntu server,过程也不太懂,一直卡在分区不敢贸然前进,反复了几次,终于导致我进不了原来的win7,原因不明! 当时就慌了, ...

  5. Linux系统挂载NTFS文件系统(转载)

    转自:http://hermesbox.blogbus.com/logs/47386987.html 今天尝试并成功的将一块500G的移动硬盘挂载到了RHEL5的系统上,甚感欣慰.想到也许以后自己或其 ...

  6. linux 安装和远程连接

    准备工作: 1.请安装好vmware 软件 2.linux 镜像包 3.putty 远程连接工具 任务: 设置好root 账号和普通账号 及设置网络 连接最简单使用桥接 只能ping 通 本机 nat ...

  7. 【牛客-14602】xinjun与阴阳师(01背包)

    xinjun与阴阳师 题目描述 xinjun是各类手游的狂热粉丝,因随手一氪.一氪上千而威震工大,现在他迷上了阴阳师.xinjun玩手游有一个习惯,就是经过层层计算制定出一套方案来使操作利益最大化(因 ...

  8. javascript 截取url参数

    var url="http://127.0.0.1:8080/photo/list.jsp?page=2&user=hongchen"; var params_arr = ...

  9. [BZOJ1382]Mars Maps

    Description In the year 2051, several Mars expeditions have explored different areas of the red plan ...

  10. 人工智能(七)逻辑Agent

    一.逻辑 逻辑是一种可以从中找出结论的形式化语言. 句法(规则)用语言定义句子. 语义定义句子的含义.定义一个句子的真假性. 二.蕴含 即一个事情逻辑上是另一个事情的必然结果:KB ╞ α 知识库KB ...