|
最近在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); // layer to THAWED
pLayerRec->setIsOff(0); // layer to ON
pLayerRec->setVPDFLT(0); // viewport default
pLayerRec->setIsLocked(0); // un-locked
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();
}
}
[code]
原文链接:https://blog.csdn.net/mary288267/article/details/120718802[/code] |
|