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的字符串處理,解決字符內存問題