自定义实体的基类
自定义实体可以从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,否则会出现“无法复制到剪切板”的错误;