// This function creates a new AcDbLayerTableRecord, fills // it in, and adds it to the layer table // // THE FOLLOWING CODE APPEARS IN THE SDK DOCUMENT. // void addLayer() { AcDbLayerTable *pLayerTbl; acdbHostApplicationServices()->workingDatabase() ->getSymbolTable(pLayerTbl, AcDb::kForWrite); if (!pLayerTbl->has(_T("ASDK_TESTLAYER"))) { AcDbLayerTableRecord *pLayerTblRcd = new AcDbLayerTableRecord; pLayerTblRcd->setName(_T("ASDK_TESTLAYER")); pLayerTblRcd->setIsFrozen(0);// layer to THAWED pLayerTblRcd->setIsOff(0); // layer to ON pLayerTblRcd->setVPDFLT(0); // viewport default pLayerTblRcd->setIsLocked(0);// un-locked AcCmColor color; color.setColorIndex(1); // set color to red pLayerTblRcd->setColor(color); // For linetype, we need to provide the object ID of // the linetype record for the linetype we want to // use. First, we need to get the object ID. // AcDbLinetypeTable *pLinetypeTbl; AcDbObjectId ltId; acdbHostApplicationServices()->workingDatabase() ->getSymbolTable(pLinetypeTbl, AcDb::kForRead); if ((pLinetypeTbl->getAt(_T("DASHED"), ltId)) != Acad::eOk) { acutPrintf(_T("\nUnable to find DASHED") _T(" linetype. Using CONTINUOUS")); // CONTINUOUS is in every drawing, so use it. // pLinetypeTbl->getAt(_T("CONTINUOUS"), ltId); } pLinetypeTbl->close(); pLayerTblRcd->setLinetypeObjectId(ltId); pLayerTbl->add(pLayerTblRcd); pLayerTblRcd->close(); pLayerTbl->close(); } else { pLayerTbl->close(); acutPrintf(_T("\nlayer already exists")); } }
void CreateLayer() { Acad::ErrorStatus es; ACHAR szNewName[255]; _tcscpy(szNewName, _T("NewLayer")); AcDbDatabase* pCurDb = acdbHostApplicationServices()->workingDatabase(); if (pCurDb == NULL) { acutPrintf(_T("\nError:Current database is NULL!")); return; } AcDbLayerTableRecord* pNewLayer = new AcDbLayerTableRecord; es = pNewLayer->setName(szNewName); if (es != Acad::eOk) { acutPrintf(_T("\nFailed setName of the layer!")); delete pNewLayer; return; } AcCmColor cmColor; cmColor.setColorIndex(1); pNewLayer->setColor(cmColor); pNewLayer->setIsFrozen(false); pNewLayer->setIsOff(false); pNewLayer->setVPDFLT(false); pNewLayer->setIsLocked(false); bool bStat = false; AcDbLayerTable* pLayerTbl = NULL; es = pCurDb->getLayerTable(pLayerTbl, AcDb::kForWrite); if (es == Acad::eOk) { if (pLayerTbl->has(szNewName)) { acutPrintf(_T("\nThe Layer \"%s\" has existed!"), szNewName); delete pNewLayer; } else { es = pLayerTbl->add(pNewLayer); if (es == Acad::eOk) { bStat = true; pNewLayer->close(); } else { acutPrintf(_T("\nFailed to add a new layer in LayerTable!")); delete pNewLayer; } } pLayerTbl->close(); } if (bStat) { acutPrintf(_T("\nCreated the new layer: \"%s\" successfully!"), szNewName); } else { acutPrintf(_T("\nFailed to create the layer: \"%s\""), szNewName); } }