找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3629|回复: 20

[每日一码] ObjectARX 操作图层代码

[复制链接]

已领礼包: 13个

财富等级: 恭喜发财

发表于 2016-11-1 08:05:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
//添加图层  
static void TESTaddlayercmd(){  
        CString strLayerName;  
        if(acedGetString(Adesk::kFalse,_T("\n输入层名称"),strLayerName.GetBuffer()) != RTNORM){  
                return;  
        }  

        ////获得当前图形的层表  
        AcDbLayerTable* pLayerTbl;  
        acdbHostApplicationServices()->workingDatabase()->getLayerTable(pLayerTbl,AcDb::kForWrite);  

        ////是否已经包含制定的层表记录  
        if(pLayerTbl->has(strLayerName)){  
                pLayerTbl->close();  
                return;  
        }  

        ////创建新的层表记录  
        AcDbLayerTableRecord* pLayerTblRcd;  
        pLayerTblRcd = new AcDbLayerTableRecord();  
        pLayerTblRcd->setName(strLayerName);  

        ////将新创建的层表记录添加到层表中  
        AcDbObjectId layerTblRcdId;  
        pLayerTbl->add(layerTblRcdId,pLayerTblRcd);  
        acdbHostApplicationServices()->workingDatabase()->setClayer(layerTblRcdId);  
        pLayerTblRcd->close();  
        pLayerTbl->close();  
}  

//修改图层颜色============================  

static void TESTlayercolorcmd(){  
        CString strLayerName;  
        if(acedGetString(Adesk::kFalse,_T("\n输入图层的名称:"),strLayerName.GetBuffer()) != RTNORM){  
                return;  
        }  
        ////获得当前的图层列表  
        AcDbLayerTable* pLayerTbl;  
        acdbHostApplicationServices()->workingDatabase()->getLayerTable(pLayerTbl,AcDb::kForRead);  
        ////判断是否包含指定名称的层表记录  
        if(!pLayerTbl->has(strLayerName)){  
                pLayerTbl->close();  
                return;  
        }  

        ////获得制定层表记录的指针  
        AcDbLayerTableRecord* pLayerTblRcd;  
        pLayerTbl->getAt(strLayerName,pLayerTblRcd,AcDb::kForWrite);  

        ////弹出颜色对话框  
        AcCmColor oldColor = pLayerTblRcd->color();  
        int nCurColor = oldColor.colorIndex();//旧的颜色  
        int nNewColor = oldColor.colorIndex();//用户选择的颜色  
        if(acedSetColorDialog(nNewColor,Adesk::kFalse,nCurColor)){  

                AcCmColor color;  
                color.setColorIndex(nNewColor);  
                pLayerTblRcd->setColor(color);  
        }  
        pLayerTblRcd->close();  
        pLayerTbl->close();  
}  

//删除图层  
static void TESTdellayercmd(){  
        CString strLayerName;  
        if(acedGetString(Adesk::kFalse,_T("\n输入图层名称"),strLayerName.GetBuffer()) != RTNORM){  
                return;  
        }  

        ////获得当前的图层列表  
        AcDbLayerTable* pLayerTbl;  
        acdbHostApplicationServices()->workingDatabase()->getLayerTable(pLayerTbl,AcDb::kForRead);  
        ////判断是否包含指定名称的层表记录  
        if(!pLayerTbl->has(strLayerName)){  
                pLayerTbl->close();  
                return;  
        }  
        ////获得制定层表记录的指针  
        AcDbLayerTableRecord* pLayerTblRcd;  
        pLayerTbl->getAt(strLayerName,pLayerTblRcd,AcDb::kForWrite);  
        pLayerTblRcd->erase();  


        pLayerTblRcd->close();  
        pLayerTbl->close();  
}  


////导出层的信息到文本文件中  
[it618postdisplay>0]
static void TESTexportlayercmd(){  
        //创建要导出的文本文件  
        CStdioFile f;  
        CFileException e;  
        CString pFileName;  
        pFileName = _T("D:\\layer.txt");  
        if(!f.Open(pFileName.GetString(),CFile::modeCreate|CFile::modeWrite,&e)){  
                acutPrintf(_T("\n创建文件失败"));  
                return;  
        }  

        ////获得层表指针  
        AcDbLayerTable *pLayerTbl;  
        AcDbLayerTableRecord* pLayerTblRcd;  
        acdbHostApplicationServices()->workingDatabase()->getLayerTable(pLayerTbl,AcDb::kForRead);  
        ////使用遍历器访问每条层表记录  
        AcDbLayerTableIterator* pItr;  
        pLayerTbl->newIterator(pItr);  
        for(pItr->start();!pItr->done();pItr->step()){  
                pItr->getRecord(pLayerTblRcd,AcDb::kForRead);  
                ////输出图层的信息  
                CString strLayerInfo;  
                TCHAR* layerName;  
                pLayerTblRcd->getName(layerName);  

                ////名称  
                strLayerInfo = layerName;  
                free(layerName);  
                strLayerInfo.Append(_T(","));  
                ////颜  
                CString strColor;  
                AcCmColor color = pLayerTblRcd->color();  
                strColor.Format(_T("%d"),color.colorIndex());  
                strLayerInfo.Append(strColor);  
                ////线型  
                CString strLineType;  
                AcDbLinetypeTableRecord* pLinetypeTblRcd;  
                acdbOpenObject(pLinetypeTblRcd,pLayerTblRcd->linetypeObjectId(),AcDb::kForRead);  
                TCHAR* linetypeName;  
                pLinetypeTblRcd->getName(linetypeName);  
                pLinetypeTblRcd->close();  
                strLineType = linetypeName;  
                free(linetypeName);  

                strLayerInfo.Append(strLineType);  
                strLayerInfo.Append(_T(","));  

                ////线宽  
                CString strLineWeight;  
                AcDb::LineWeight lineWeight = pLayerTblRcd->lineWeight();  
                strLineWeight.Format(_T("%d"),lineWeight);  
                strLayerInfo.Append(strLineWeight);  

                /////写文件  
                f.WriteString(strLayerInfo);  
                f.WriteString(_T("\n"));  
                pLayerTblRcd->close();  
        }  

        delete pItr;  
        pLayerTbl->close();  
}  

[/it618postdisplay]

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 194个

财富等级: 日进斗金

发表于 2016-11-1 11:18:54 | 显示全部楼层
看下功能如何!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2477个

财富等级: 金玉满堂

发表于 2016-11-1 16:41:51 | 显示全部楼层
学习!!!!!!!!!!!!!!!!!!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 60个

财富等级: 招财进宝

发表于 2016-11-5 21:32:58 | 显示全部楼层
啥也不说了,感谢楼主分享哇!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8个

财富等级: 恭喜发财

发表于 2016-11-12 20:53:25 | 显示全部楼层
谢谢楼主 学习学习

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 35个

财富等级: 招财进宝

发表于 2016-11-16 15:11:37 | 显示全部楼层
我来测试一下,行不行,看看到底怎么样
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2016-11-20 00:27:22 | 显示全部楼层
11111111111111111
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1742个

财富等级: 堆金积玉

发表于 2016-12-21 14:13:52 | 显示全部楼层
看看思路
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 271个

财富等级: 日进斗金

发表于 2016-12-22 15:55:44 | 显示全部楼层
学习大师的代码,谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 69个

财富等级: 招财进宝

发表于 2017-1-8 14:33:24 | 显示全部楼层
啥也不说了,感谢楼主分享哇!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 271个

财富等级: 日进斗金

发表于 2017-1-9 14:21:09 | 显示全部楼层
图层的导入/导出,在不同设计单位交流时,很有价值。稍用修改,就可在进行不同图层替换。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2017-2-27 18:19:33 | 显示全部楼层
我来学习学习怎么样?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 30个

财富等级: 恭喜发财

发表于 2017-3-20 00:39:27 | 显示全部楼层
新手来看一下。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2017-7-5 10:49:27 | 显示全部楼层
谢谢楼主的代码分享
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2017-7-19 10:59:37 | 显示全部楼层
非常值得学习
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-22 16:44 , Processed in 0.322390 second(s), 55 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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