最近在ARX中需要创建一个新图层,这本是一个简单的步骤,但却经过了不少折腾,现记录如下。 我原本的做法是在堆上创建一个AcDbLayerTableRecord,然后设置这个层表记录的各项参数,最后才添加到层表中,但是在调试时发现,有些参数设置不上去(例如图层透明度、图层说明等等)。后来经过一些尝试,发现需要先将层表记录添加到层表和数据库中(利用add方法),然后才能设置这些参数。 代码如下。
void CreateNewLayer()
{
CString sLayerName = _T("NewCreate");
AcDbLayerTable* pLayerTbl = NULL;
if (Acad::eOk == acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pLayerTbl, AcDb::kForWrite))
{
if (!pLayerTbl->has(sLayerName))
{
AcDbLayerTableRecord* pLayerRec = new AcDbLayerTableRecord;
if (Acad::eOk == pLayerTbl->add(pLayerRec))
{
pLayerRec->setName(sLayerName);
pLayerRec->setIsFrozen(0);
pLayerRec->setIsOff(0);
pLayerRec->setVPDFLT(0);
pLayerRec->setIsLocked(0);
AcCmTransparency trans;
trans.setAlpha(50);
pLayerRec->setTransparency(trans);
AcCmColor cColor;
cColor.setRGB(255, 0, 0);
pLayerRec->setColor(cColor);
pLayerRec->setDescription(_T("这是一个新创建的图层"));
pLayerRec->close();
}
else
delete pLayerRec;
}
pLayerTbl->close();
}
}
|