CAD自定義實體結構

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章