今天正式開始畢業設計程式的編寫工作,因為程式中會大量用到繪制直線、圓弧等各種實體的操作,是以先将ObjectArx中提供的建立實體的函數封裝到自己定義的類(CBaseElement)中,這次先封裝建立直線的函數,随着畢設作業的繼續,在後續的工作中會繼續擴充這個類,将程式所要用到的各種實體的操作都封裝到其中。
在ObjectArx中,建立一個實體對象大緻要經過以下幾步:
1、确定建立對象的圖形資料庫;
2、獲得圖形資料庫的塊表;
3、獲得一個存儲實體的塊表記錄,所有模型空間中的實體都要存儲在模型空間的特定記錄中;
4、建立實體類對象,将該對象附加到塊表記錄中。
CBaseElement的頭檔案
#ifndef BASEELEMENT_H_
#define BASEELEMENT_H_
class CBaseElement
{
public:
CBaseElement(void);
// 建立直線
static AcDbObjectId GreateLine(AcGePoint3d ptStart, AcGePoint3d ptEnd);
// 将實體添加到圖形資料庫的模型空間
static AcDbObjectId PostToModalSpace(AcDbEntity* pEnt);
public:
~CBaseElement(void);
};
#endif
CBaseElement的源檔案
#include "StdAfx.h"
#include "BaseElement.h"
CBaseElement::CBaseElement(void)
{
}
CBaseElement::~CBaseElement(void)
{
}
AcDbObjectId CBaseElement::GreateLine(AcGePoint3d ptStart, AcGePoint3d ptEnd)
{
// 建立直線
AcDbLine* pLine = new AcDbLine(ptStart,ptEnd);
AcDbObjectId lineId;
lineId = CBaseElement::PostToModalSpace(pLine);
return lineId;
}
AcDbObjectId CBaseElement::PostToModalSpace(AcDbEntity *pEnt)
{
//獲得圖形資料庫塊表
AcDbBlockTable* pBlockTable;
acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable,AcDb::kForRead);
//獲得存儲實體的塊表記錄
AcDbBlockTableRecord* pBlockTableRecord;
pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);
//将實體類對象附加到塊表中
AcDbObjectId entId;
pBlockTableRecord->appendAcDbEntity(entId,pEnt);
pBlockTable->close();
pBlockTableRecord->close();
pEnt->close();
return entId;
}