1、virtual Acad::ErrorStatus dwgOutFields (AcDbDwgFiler *pFiler) const ; 保存数据
2、virtual Acad::ErrorStatus dwgInFields (AcDbDwgFiler *pFiler) ; 读取数据
3、virtual Adesk::Boolean subWorldDraw (AcGiWorldDraw *mode) ; 绘制图形
4、virtual Adesk::UInt32 subSetAttributes (AcGiDrawableTraits *traits) ; 设置属性
5、virtual void subViewportDraw(AcGiViewportDraw* mode); 视图绘制图形
6、virtual Acad::ErrorStatus subErase(Adesk::Boolean erasing); 删除实体
7、virtual Acad::ErrorStatus subGetOsnapPoints(
AcDb::OsnapMode osnapMode,
Adesk::GsMarker gsSelectionMark,
const AcGePoint3d& pickPoint,
const AcGePoint3d& lastPoint,
const AcGeMatrix3d& viewXform,
AcGePoint3dArray& snapPoints,
AcDbIntArray & geomIds) const; 设置捕捉点
8、virtual Acad::ErrorStatus subGetGripPoints (AcGePoint3dArray &gripPoints, AcDbIntArray &osnapModes, AcDbIntArray &geomIds) const ; 设置编辑节点
9、virtual Acad::ErrorStatus subMoveGripPointsAt (const AcDbIntArray &indices, const AcGeVector3d &offset) ; 移动节点
10、virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform); 矩阵变换
11、virtual Acad::ErrorStatus subIntersectWith(
const AcDbEntity* ent,
AcDb::Intersect intType,
AcGePoint3dArray& points,
Adesk::GsMarker thisGsMarker = 0,
Adesk::GsMarker otherGsMarker = 0)
const;
virtual Acad::ErrorStatus subIntersectWith(
const AcDbEntity* ent,
AcDb::Intersect intType,
const AcGePlane& projPlane,
AcGePoint3dArray& points,
Adesk::GsMarker thisGsMarker = 0,
Adesk::GsMarker otherGsMarker = 0)
const; 相交计算
12、virtual Acad::ErrorStatus subGetClassID(CLSID* pClsid) const; 实体CLSID
13、virtual Acad::ErrorStatus subExplode(AcDbVoidPtrArray& entitySet) const; 实体炸开
14、virtual Acad::ErrorStatus subDeepClone(AcDbObject* pOwnerObject,
AcDbObject*& pClonedObject,
AcDbIdMapping& idMap,
Adesk::Boolean isPrimary = true) const; 深度克隆
15、virtual Acad::ErrorStatus subWblockClone(AcRxObject* pOwnerObject,
AcDbObject*& pClonedObject,
AcDbIdMapping& idMap,
Adesk::Boolean isPrimary = true) const; 外部克隆
完整的自定义实体需要注意以下几种情况
(1)数据版本
每个自定义实体设置小版本,根据实体版本,实现功能数据添加;
(2)内部图形绘制
使用geometry里面的绘制接口,而不用geometry()->draw,在视图预览中发现显示有误
(3)静态OPM和动态OPM结合
任何一个实体应该实现静态OPM,才能更好兼容CAD的特性面板
(4)字符串的储存
//保存数据
if (m_text == NULL)
{
pFiler->writeString(_T(""));
}else
{
pFiler->writeString(m_text);
}
//读取数据
if (m_text == NULL)
{
pFiler->readString(&m_text);
}else
{
acutDelString(m_text);
m_text = NULL;
pFiler->readString(&m_text);
}
使用ARX的字符串处理,解决字符内存问题