天天看點

AutoCad二次開發1——實體的建立

    今天正式開始畢業設計程式的編寫工作,因為程式中會大量用到繪制直線、圓弧等各種實體的操作,是以先将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;
}
           

繼續閱讀