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();
运行结果
图片:
注意
在重写dwgOutFields这个函数的时候,一定要加const,否则会出现“无法复制到剪切板”的错误;
转载地址:https://blog.csdn.net/yangfahe1/article/details/123599717 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年03月17日 20时54分55秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
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 密钥 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 指定字段中的字符串
2019-04-21
mysql concat 整数型_MySQL 数字类型转换函数(concat/cast)
2019-04-21
mysql单元格函数是_MySQL常用内置函数
2019-04-21
mysql 怎么字段分裂_你可以分裂/爆炸MySQL查询中的字段吗?
2019-04-21