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; }
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); }