提供给想学习和刚接触的同学一些参考。
写好后就没用过,一般都是在当前图层新建图元
//头文件及实现文件如下
#pragma once
#ifndef _Cad_Lay_h_
#define _Cad_Lay_h_
#include "..\Cad_BlockTableRecord_template\Cad_BlockTableRecord_template.h"
using namespace xtcow;
namespace xtcow
{
#define _Cad_Lay_template template<typename DATA_for_handle,typename Containor>//
#define _Cad_Lay_template_QUAL Cad_Lay< DATA_for_handle,Containor>//
template<typename DATA_for_handle=std::wstring,typename Containor=std::vector<DATA_for_handle> >
class Cad_Lay//
{
public:
public:
Cad_Lay(void){};
~Cad_Lay(void){};
static Acad::ErrorStatus set_curLayer( AcDbObjectId &ObjectId,const wchar_t * inputLyName, AcDbDatabase * pDb= acdbHostApplicationServices()->workingDatabase() ,AcCmColor LayerColor=LayerColor,std::wstring Linetype=_T("CONTINUOUS"));
static Acad::ErrorStatus get_all_layer_name(Containor &layerArray,AcDbDatabase *pDb= acdbHostApplicationServices()->workingDatabase());
};
// Function name : set_curLayer
// Description : 设置当前层
_Cad_Lay_template
Acad::ErrorStatus _Cad_Lay_template_QUAL::set_curLayer( AcDbObjectId &ObjectId,const wchar_t * inputLyName, AcDbDatabase * pDb ,AcCmColor LayerColor,std::wstring Linetype)
{
AcDbDatabase * pCurDb = pDb;
if (pCurDb == NULL)
pCurDb = acdbHostApplicationServices() -> workingDatabase();
creat_new_layer(ObjectId,inputLyName,LayerColor,Linetype.c_str(),pDb);
AcDbLayerTableRecordPointer spRecord(inputLyName, pCurDb, AcDb::kForRead);
Acad::ErrorStatus es = spRecord.openStatus();
if (es == Acad::eOk)
{
es = pCurDb -> setClayer(spRecord -> objectId());
}
return es;
}
//
_Cad_Lay_template
Acad::ErrorStatus _Cad_Lay_template_QUAL::get_all_layer_name(Containor &layerArray,AcDbDatabase *pDb)
{
Acad::ErrorStatus es=Acad::eOk;
if(pDb==NULL)
return Acad::eInvalidInput;
layerArray.clear();
AcDbLayerTable *pLayerTable=NULL;//建立图层表指针
if((es=pDb->getSymbolTable(pLayerTable,AcDb::kForRead))!=Acad::eOk)//以只读的形式获得
{
pLayerTable->close();
return es;
}
AcDbLayerTableIterator *pLayerTableIterator;//创建一个图层表迭代器
pLayerTable->newIterator(pLayerTableIterator);//图层表迭代器获得资源
pLayerTable->close();//释放图层表指针获得的资源
wchar_t *pLayerName=NULL;
std::wstring name;
for(int i=0;!pLayerTableIterator->done();pLayerTableIterator->step(),i++)
{
AcDbLayerTableRecord *pLayerTableRecord=NULL;//建立AcDbLayerTableRecord指针
pLayerTableIterator->getRecord(pLayerTableRecord,AcDb::kForRead);//AcDbLayerTableRecord指针获得资源
pLayerTableRecord->getName(pLayerName);//使用AcDbLayerTableRecord
name.assign(pLayerName);//这里获得一个字符串资源
layerArray.push_back(name);
delete[] pLayerName;//释放一个字符串资源
pLayerName=NULL;
pLayerTableRecord->close();//释放AcDbLayerTableRecord指针获得资源
}
delete pLayerTableIterator;//释放图层表迭代器
pLayerTableIterator=NULL;
return es;
}
}
#endif