|
最近在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();
}
}
————————————————
版权声明:本文为CSDN博主「_Santiago」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:[url]https://blog.csdn.net/mary288267/article/details/120718802[/url]
在cad图层管理器锁定图层以后,图层上的实体会按照系统变量LAYFADECTL的值变化,用代码解锁图层
pLayerTblRcd->setIsLocked(locked);
此时会发现图层虽然解锁了,但是还是半透明的状态,需要regen来刷新才能恢复
解决方案:设置一下IsOff
原理不太清楚,据说是setIsOff会触发强制重绘图层
pLayerTblRcd->setIsLocked(locked);
pLayerTblRcd->setIsOff(pLayerTblRcd->isOff());
参考
[url]https://www.keanw.com/2016/01/locking-and-unlocking-autocad-layers-visibly-using-net.html[/url]
————————————————
版权声明:本文为CSDN博主「Gienimer」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:[url]https://blog.csdn.net/xxxscxxxx/article/details/121778859[/url]
更改图层后,让实体刷新 除了regen命令,还有啥方法,acedUpdateDisplay不管用
actrTransactionManager->flushGraphics();
acedUpdateDisplay();
这个不行?那可太奇怪了
而且很奇怪,比如冻结,对象会隐藏,但是解冻就不会显示
疯狂青蛙 13:18:58
自带的-la命令可以即时刷新图层状态
疯狂青蛙 13:20:09
注意lsp参数长度限制,图层名称太多要分段
疯狂青蛙 15:15:25
没别的办法 这个我研究很久了
疯狂青蛙 15:15:34
除了用cad自带的-la
唯一 15:16:24
实在没办法 就用这个了
疯狂青蛙 15:16:55
还挺好 速度和效率兼顾 最好是找桌子问问-la那个怎么实现的 |
|