Пример #1
0
AcDbObjectId CArxHelper::SetLayer(TCHAR* layerName)
{
	AcDbObjectId layerId = NULL;
	AcDbLayerTable *pLayerTbl;
	acdbCurDwg()->getLayerTable(pLayerTbl,AcDb::kForWrite);

	AcDbLayerTableIterator *pItr;
	pLayerTbl->newIterator(pItr);

	for(;!pItr->done();pItr->step())
	{
		AcDbLayerTableRecord *pLayer;
		pItr->getRecord(pLayer,AcDb::kForRead);

		TCHAR *str=NULL;
		pLayer->getName(str);
		if(_tcscmp(layerName,str)==0)
			layerId=pLayer->id();
		if(str!=NULL) delete []str;

		pLayer->close();

		if(layerId!=NULL)
			break;
	}

	delete pItr;
	pItr = NULL;

	if(layerId==NULL)
	{
		AcDbLayerTableRecord *pLayerTblRcd=new AcDbLayerTableRecord();
		Acad::ErrorStatus es = pLayerTblRcd->setName(layerName);
		if (es != Acad::eOk)
			pLayerTblRcd->setName(_T("0"));

		pLayerTbl->add(layerId,pLayerTblRcd);

		pLayerTblRcd->close();
	}

	pLayerTbl->close();

	acdbCurDwg() ->setClayer(layerId);

	return layerId;
}
Пример #2
0
void Additional_Class::SetCurLayler( CString LaylerName )
{
	AcDbDatabase *pCurDb = NULL;
	pCurDb = acdbHostApplicationServices()->workingDatabase();
	/*pCurDb->setClayer()*/

	int n = 0;//判断是否找到图层
	//////////////////////////////////////////////////////////////////////////
	AcDbLayerTable *pLayerTbl;
	acdbHostApplicationServices()->workingDatabase()
		->getSymbolTable(pLayerTbl, AcDb::kForWrite);

	// 建立图层遍历器
	AcDbLayerTableIterator *pLayerIterator;
	pLayerTbl->newIterator(pLayerIterator);
	//
	AcDbLayerTableRecord *pLayerTableRcd;
	
	ACHAR *pLtName;
	ACHAR *pLtNameTT;
	CString pLtNameStr;
	for (; !pLayerIterator->done(); pLayerIterator->step()) 
	{
		pLayerIterator->getRecord(pLayerTableRcd, AcDb::kForWrite);
		pLayerTableRcd->getName(pLtName);
		pLayerTableRcd->close();
		pLtNameStr = pLtName;
		if (pLtNameStr == LaylerName)
		{
			pCurDb->setClayer(pLayerTableRcd->id());
			free(pLtName);
			n = 1;//如果图层找到,则将n赋值为1
			delete pLayerIterator;
			pLayerTbl->close();
			return;
		}
		else
		{
			free(pLtName);
		}
	}

	if (n == 0)
	{
		// 新建图层
		AcDbLayerTableRecord *pLayerTableRecordTT = new AcDbLayerTableRecord;
		pLayerTableRecordTT->setName(LaylerName);
		AcDbObjectId pLayerId;
		pLayerTbl->add(pLayerId, pLayerTableRecordTT);
		pLayerTableRecordTT->getName(pLtNameTT);
		pLayerTableRecordTT->close();
		//struct resbuf pResult;
		//::acedGetVar(_T("CLAYER"),&pResult);//取得当前图层
		//char *p = (LPSTR)(LPCTSTR)LaylerName;
		//pResult.resval.rstring = pLtNameTT;
		//int s=acedSetVar(_T("CLAYER"), &pResult);//将输入的图层设为当前层
		//相当于命令 CLAYER LAYERNAME
		//acutPrintf(_T("\nLinetype name is:  %s"), pResult.resval.rstring);
		//acutPrintf(_T("\nLinetype name is:  %d"), s);
		
		n = 1;//如果图层找到,则将n赋值为1
		delete pLayerIterator;
		pLayerTbl->close();
		struct resbuf pResults;
		::acedGetVar(_T("CLAYER"),&pResults);//取得当前图层
		//pLtNameTT = "0";
		pResults.resval.rstring = pLtNameTT;
		::acedSetVar(_T("CLAYER"), &pResults);//将输入的图层设为当前层
		free(pLtNameTT);
	}
	
	// acutPrintf(_T("\nLinetype name"));
	// acutPrintf(_T("\nLinetype name is:  %s"), pResult.resval.rstring);
}