CAD控件使用教程 自定义实体的实现
自定义实体的实现
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::ErrorStatusdwgInFields(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::ErrorStatusdwgOutFields(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控件使用教程 自定义实体的实现的更多相关文章
- 梦想CAD控件COM接口自定义命令
在CAD软件操作中,为方便使用者,使用自定义命令发出命令,完成CAD绘图,修改,保存等操作.点击此处下载演示实例. _DMxDrawX::RegistUserCustomCommand 向CAD控件注 ...
- 梦想CAD控件网页版关于自定义命令
在CAD控件操作中,为方便使用者,使用自定义命令发出命令,完成CAD绘图,修改,保存等操作.点击此处在线演示. _DMxDrawX::RegistUserCustomCommand 向CAD控件注册一 ...
- CAD控件,CAD插件使用教程:Android开发使用控件--开发环境的搭建
Android开发使用控件入门--环境搭建 2014-12-24 09:57 14人阅读 评论(0) 收藏 编辑 删除 CAD控件.CAD三维控件,手机 ...
- 如何在网页中浏览和编辑DWG文件 梦想CAD控件
如何在网页中浏览和编辑DWG文件 梦想CAD控件 www.mxdraw.com 梦想绘图控件5.2 是国内最强,最专业的CAD开发组件(控件),不需要AutoCAD就能独立运行.控件使用VC 201 ...
- CAD控件:网上打开dwg文件时,对dwg文件路径加密的功能
梦想CAD控件2015.03.12最新更新 1. 增加控件状态栏文字,自定义功能, C++接口为 : CStatusBarInformationReactor::CreatePro ...
- 梦想CAD控件关于比较问题
全图比较 怎么比较两个CAD图纸文件修改前后的不同部分呢?在工程图纸设计中,我们更多情况下可能需要对同一张工程图的前后修改部分进行对比,以确定工程图纸的改动部分及追溯原因,本教程演示了几种常见的比较方 ...
- 梦想CAD控件图块COM接口知识点
梦想CAD控件图块COM接口知识点 图块是将多个实体组合成一个整体,并给这个整体命名保存,在以后的图形编辑中图块就被视为一个实体.一个图块包括可见的实体如线.圆.圆弧以及可见或不可见的属性数据.图块的 ...
- 梦想CAD控件图层COM接口知识点
梦想CAD控件图层COM接口知识点 一.新建图层 主要用到函数说明: _DMxDrawX::AddLayer 增加新的图层.详细说明如下: 参数 说明 BSTR pszName 图层名 c#中实现代码 ...
- CAD控件的鼠标事件(网页版)
_DMxDrawXEvents::MouseEvent CAD控件中的鼠标事件. 参数 说明 LONG lType 事件类型,1鼠标移动,2是鼠标左键按下,3是鼠标右键按下,4是鼠标左键双击 5是鼠标 ...
随机推荐
- RabbitMQ(三)RabbitMQ消息过期时间(TTL)
在RabbitMQ(二)AMQP协议mandatory和immediate标志位区别中我们提到,在RabbitMQ3.0以后的版本里,去掉了immediate参数支持,要实现类似的确认功能要使用TTL ...
- Linux网络协议栈(三)——网络设备(2)
2.1.网络设备的注册与注销注册网络设备发生在下列情形: (1)加载网卡驱动程序 网卡驱动程序如果被编译进内核,则它在启动时被初始化,在运行时被作为模块加载.无论初始化是否发生,所以由驱动程序控制 ...
- 杂项-Java-百科:jar
ylbtech-杂项-Java-百科:jar 在软件领域,JAR文件(Java归档,英语:Java ARchive)是一种软件包文件格式,通常用于聚合大量的Java类文件.相关的元数据和资源(文本.图 ...
- 关于netty的简单实现
1. 新建两个maven项目, 分别为 netty-server: netty的服务端: 消息的消费者 netty-client: netty的客户端: 消息的生产者 2. 分别引入netty的mav ...
- Eclipse打开Android项目报Parsing Data for android-21 failed错误的解决办法(转载)
转载:http://segmentfault.com/blog/hongliang/1190000000739285 今天手贱,用android命令打开SDK Manager下载了最新的Android ...
- [App Store Connect帮助]七、在 App Store 上发行(3.3)提交至“App 审核”:解决 App 拒绝问题
如果“App 审核”或“Beta 版 App 审核”拒绝了您的 App,您可以与 Apple 沟通并在解决方案中心中解决问题. 来自 Apple 的通讯信息包含有关 App 拒绝的信息,其中包括该 A ...
- 基于ssh框架web示例
基于ssh框架web示例 介绍 Spring Boot Web 开发非常简单,该示例包括包括目前web开发基本都需要用到的内容 - 序列化(json)输出 - 过滤器(filters) - 监视器(l ...
- Lodash 方法库 原生实现 待完结。。。
'use strict' let _ = { // 将数组(array)拆分成多个 size 长度的区块,并将这些区块组成一个新数组. 如果array 无法被分割成全部等长的区块,那么最后剩余的元素将 ...
- 我的spring cloud项目历程(2018.3~2018.9)
前言 今天是9月17日,趁着山竹的临幸,得以在家里舒适的办公.项目从3月底开始,至今刚好半年.抽几十分钟,总结下半年的历程.对后面的项目,应该也有一点帮助吧. 学习前的七个问题 项目开始前,由于某些特 ...
- python系列1_travel
Python__copy copy模块用于对象的拷贝操作.该模块只提供了两个主要的方法:copy.copy与copy.deepcopy,分别表示浅复制与深复制. 浅拷贝(copy):拷贝父对象,不会拷 ...