天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 69|回复: 0

ObjectARX创建新图层的注意事项 锁定解锁图层 刷新透明度

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
最近在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那个怎么实现的

 

 

 

 

ObjectARX创建新图层的注意事项 锁定解锁图层 刷新透明度
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 10:35 , Processed in 0.155672 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表