CAD自定义实体
发布日期:2022-05-22 10:05:34 浏览次数:2 分类:技术文章

本文共 6519 字,大约阅读时间需要 21 分钟。

CAD自定义实体

自定义实体的基类

自定义实体可以从AcDb实体类的任何一个类进行继承,如果想扩展AcDbPolyline类,那么我们可以从AcDbPolyline进行继承。但是本文是从AcDbEntity进行继承,下文也是按照ACDBEntity进行讲解;

重写函数

/* @接口     * @类名 [DoxPolyline]     * @邮箱 575814050@qq.com     * @时间 2022年3月8号     */    virtual Adesk::Boolean subWorldDraw(AcGiWorldDraw *);    /* @接口     * @类名 [DoxPolyline]     * @邮箱 575814050@qq.com     * @时间 2022年2月26号     */    virtual Acad::ErrorStatus dwgInFields(AcDbDwgFiler *);    /* @接口     * @类名 [DoxPolyline]     * @邮箱 575814050@qq.com     * @时间 2022年2月26号     */    virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler *) const;    /* @接口     * @类名 [DoxPolyline]     * @邮箱 575814050@qq.com     * @时间 2022年3月8号     */    virtual Acad::ErrorStatus setOutPlineId(const AcDbObjectId &);    /* @接口     * @类名 [DoxPolyline]     * @邮箱 575814050@qq.com     * @时间 2022年2月26号     */    virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d &);    /* @接口     * @类名 [DoxPolyline]     * @邮箱 575814050@qq.com     * @时间 2022年2月26号     */    virtual Acad::ErrorStatus subExplode(AcDbVoidPtrArray &) const;    /* @接口     * @类名 [DoxPolyline]     * @邮箱 575814050@qq.com     * @时间 2022年2月26号     */    virtual Acad::ErrorStatus subGetGeomExtents(AcDbExtents &) const;    /* @接口     * @返回     * @类名 [DoxPolyline]     * @邮箱 575814050@qq.com     * @时间 2022年2月26号     */    virtual Acad::ErrorStatus subGetStretchPoints(AcGePoint3dArray &) const;    /* @接口     * @类名 [DoxPolyline]     * @邮箱 575814050@qq.com     * @时间 2022年2月26号     */    virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbIntArray &, const AcGeVector3d &);    /* @接口     * @类名 [DoxPolyline]     * @邮箱 575814050@qq.com     * @时间 2022年2月26号     */    virtual Acad::ErrorStatus subMoveStretchPointsAt(const AcDbIntArray &, const AcGeVector3d &);    /* @接口     * @类名 [DoxPolyline]     * @邮箱 575814050@qq.com     * @时间 2022年2月26号     */    virtual Acad::ErrorStatus subGetGripPoints(AcGePoint3dArray &, AcDbIntArray &, AcDbIntArray &) const;    /* @接口     * @类名 [DoxPolyline]     * @邮箱 575814050@qq.com     * @时间 2022年2月26号     */    virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbVoidPtrArray &, const AcGeVector3d &, const int );    /* @接口     * @类名 [DoxPolyline]     * @邮箱 575814050@qq.com     * @时间 2022年2月26号     */    virtual Acad::ErrorStatus subGetGripPoints(AcDbGripDataPtrArray &, const double , const int , const AcGeVector3d &, const int ) const;    /* @接口     * @类名 [DoxPolyline]     * @邮箱 575814050@qq.com     * @时间 2022年2月26号     */    virtual Acad::ErrorStatus subGetOsnapPoints(AcDb::OsnapMode , Adesk::GsMarker , const AcGePoint3d &, const AcGePoint3d &, const AcGeMatrix3d &, AcGePoint3dArray &, AcDbIntArray &) const;

具体实现

Adesk::Boolean DoxPolyline::subWorldDraw(AcGiWorldDraw *pWd){
assertReadEnabled(); if(!ENTDATA m_pPline) return Adesk::kTrue; CGiWorldDrawPush worldDraw(pWd, this); return ENTDATA m_pPline->worldDraw(pWd);}Acad::ErrorStatus DoxPolyline::dwgInFields(AcDbDwgFiler *pFiler){
assertWriteEnabled(); Acad::ErrorStatus es = Acad::eOk; if((es = AcDbEntity::dwgInFields(pFiler)) != Acad::eOk) return es; if((es = AcDbEntityDwgInFields(this, pFiler)) != Acad::eOk) return es; if((es = AcDbPolylineDwgInFields(pFiler)) != Acad::eOk) return es; return Acad::eOk;}Acad::ErrorStatus DoxPolyline::dwgOutFields(AcDbDwgFiler *pFiler) const{
assertReadEnabled(); Acad::ErrorStatus es = Acad::eOk; if((es = AcDbEntity::dwgOutFields(pFiler)) != Acad::eOk) return es; if((es = AcDbEntityDwgOutFields(pFiler, this)) != Acad::eOk) return es; if((es = AcDbPolylineDwgOutFields(pFiler)) != Acad::eOk) return es; return Acad::eOk;}Acad::ErrorStatus DoxPolyline::subTransformBy(const AcGeMatrix3d &xform){
return ENTDATA m_pPline->transformBy(xform);}Acad::ErrorStatus DoxPolyline::subGetGeomExtents(AcDbExtents &extents) const{
return ENTDATA m_pPline->getGeomExtents(extents);}Acad::ErrorStatus DoxPolyline::subExplode(AcDbVoidPtrArray &entitySet) const{
entitySet.append(ENTDATA m_pPline); return Acad::eOk;}Acad::ErrorStatus DoxPolyline::subGetStretchPoints(AcGePoint3dArray &stretchPoints) const{
return ENTDATA m_pPline->getStretchPoints(stretchPoints);}Acad::ErrorStatus DoxPolyline::AcDbEntityDwgInFields(AcDbEntity *pEnt, AcDbDwgFiler *pFiler){
Adesk::UInt16 colorIndex = 0; pFiler->readUInt16(&colorIndex); pEnt->setColorIndex(colorIndex); Adesk::Int16 lineWeight = 0;; pFiler->readInt16(&lineWeight); pEnt->setLineWeight((AcDb::LineWeight)lineWeight); return pFiler->filerStatus();}Acad::ErrorStatus DoxPolyline::AcDbEntityDwgOutFields(AcDbDwgFiler *pFiler, const AcDbEntity *pEnt) const{
pFiler->writeUInt16(pEnt->colorIndex()); pFiler->writeInt16((Adesk::Int16)pEnt->lineWeight()); return pFiler->filerStatus();}Acad::ErrorStatus DoxPolyline::subMoveGripPointsAt(const AcDbIntArray &indices, const AcGeVector3d &offset){
return ENTDATA m_pPline->moveGripPointsAt(indices, offset);}Acad::ErrorStatus DoxPolyline::subMoveStretchPointsAt(const AcDbIntArray &indices, const AcGeVector3d &offset){
return ENTDATA m_pPline->moveStretchPointsAt(indices, offset);}Acad::ErrorStatus DoxPolyline::subGetGripPoints(AcGePoint3dArray &gripPoints, AcDbIntArray &osnapModes, AcDbIntArray &geomIds) const{
return ENTDATA m_pPline->getGripPoints(gripPoints, osnapModes, geomIds);}Acad::ErrorStatus DoxPolyline::subMoveGripPointsAt(const AcDbVoidPtrArray &gripAppData, const AcGeVector3d &offset, const int bitflags){
return ENTDATA m_pPline->moveGripPointsAt(gripAppData, offset, bitflags);}Acad::ErrorStatus DoxPolyline::subGetGripPoints(AcDbGripDataPtrArray &grips, const double curViewUnitSize, const int gripSize, const AcGeVector3d &curViewDir, const int bitflags) const{
return ENTDATA m_pPline->getGripPoints(grips, curViewUnitSize, gripSize, curViewDir, bitflags);}Acad::ErrorStatus DoxPolyline::subGetOsnapPoints(AcDb::OsnapMode osnapMode, Adesk::GsMarker gsSelectionMark, const AcGePoint3d &pickPoint, const AcGePoint3d &lastPoint, const AcGeMatrix3d &viewXform, AcGePoint3dArray &snapPoints, AcDbIntArray &geomIds) const{
return ENTDATA m_pPline->getOsnapPoints(osnapMode, gsSelectionMark, pickPoint, lastPoint, viewXform, snapPoints, geomIds);}

添加宏信息

ACRX_DXF_DEFINE_MEMBERS(DoxPolyline, AcDbEntity, AcDb::kDHL_CURRENT, AcDb::kMReleaseCurrent, AcDbProxyEntity::kNoOperation, DOXPOLYLINE, DoxCAD);

注册

DoxPolyline::rxInit();    acrxBuildClassHierarchy();

运行结果

图片: 属性面板中可以看到实体名称:DOXPOLYLINE

注意

在重写dwgOutFields这个函数的时候,一定要加const,否则会出现“无法复制到剪切板”的错误;

转载地址:https://blog.csdn.net/yangfahe1/article/details/123599717 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:CAD软件中如何统一文字字高?
下一篇:CAD电气原理图,60多套主流PLC电气图纸,有三菱,欧姆龙,西门子,基恩士,大量实践成功应用案例,图库,变频器

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年03月17日 20时54分55秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

python房价数据分析波士顿代码数据_python数据分析-波士顿房价预测-Go语言中文社区... 2019-04-21
redis线程阻塞原因排插_Redis阻塞原因详解 2019-04-21
labview自动保存报表_基于LabVIEW的Excel报表的自动生成功能 2019-04-21
geotool 导出shp_Java 读取shape文件 2019-04-21
mysql 关联更新_MySQL UPDATE多表关联更新 2019-04-21
mysql call_mysql的call用法 call调用函数的例子 2019-04-21
python参数验证_参数验证,Python中的最佳实践 2019-04-21
python画多层网络_在pymn中修改多层网络图 2019-04-21
java net 安卓_android -------- java.net.UnknownServiceException 2019-04-21
java 密钥 aes 解密_Java中AES加密解密以及签名校验 2019-04-21
java树转化成图_Java 转换一组数据为树型数据 2019-04-21
java 底层ppt_Java 如何设置 PPT 中的形状排列方式 具体内容 2019-04-21
mysql更新第5条记录_MYSQL中添加、更新、删除数据 2019-04-21
mysql service5.7_Mysql5.7服务下载安装 2019-04-21
mysql查看线程完整执行命令_MySQL-查看运行的线程-SHOW PROCESSLIST 2019-04-21
mysql 更新数据 字符串_批量替换 MySQL 指定字段中的字符串 2019-04-21
web开发 mysql安装_mysqlinstallerwebcommunity5.7.21.0.msi安装图文教程 2019-04-21
mysql concat 整数型_MySQL 数字类型转换函数(concat/cast) 2019-04-21
mysql单元格函数是_MySQL常用内置函数 2019-04-21
mysql 怎么字段分裂_你可以分裂/爆炸MySQL查询中的字段吗? 2019-04-21