首页 > Web开发 > 详细

AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层

时间:2019-11-13 14:06:24      阅读:76      评论:0      收藏:0      [点我收藏+]

AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层

AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层
我理解的图层的作用大概是把相同作用的功能聚集在一起,以便好选择。比如,把一副图块中的所有标注定义为一个图层,把编号定义为一个图层,把相同的块参照定义为一个图层。图层表的操作和块表的操作类似。

在这里我就分享一下自己从书《AUTOCAD VBA&VB.NET开发基础与实例教程(C#版) 第2版》学习到的关于图层的一些操作的代码,我觉得主要是图层的删除需要注意一下。

 

使用的成员变量:

Document Doc = Application.DocumentManager.MdiActiveDocument;
Editor Ed = Application.DocumentManager.MdiActiveDocument.Editor;
Database Db = Application.DocumentManager.MdiActiveDocument.Database;


一、图层的删除 代码:

        /// <summary>
        /// 图层0和图层Defpoints不能被删除,当前图层不能被删除,图层上有块参照,实体时不能被删除
        /// 删除前需刷新,使用LayerTableRecord.GenerateUsageData();
        /// </summary>
        public bool DeleteLayer(Database db, string layerName)
        {

            using (var trans = db.TransactionManager.StartTransaction())
            {

                var lyTbl = trans.GetObject(db.LayerTableId, OpenMode.ForWrite) as LayerTable;

                if (!lyTbl.Has(layerName)) return false;

                if (layerName == "0" || layerName == "Defpoints") return false;

                ObjectId oId = lyTbl[layerName];

                if (oId == db.Clayer) return false;

                var lyTblRec = trans.GetObject(lyTbl[layerName], OpenMode.ForRead) as LayerTableRecord;

                lyTbl.GenerateUsageData();

                if (lyTblRec.IsUsed) return false;

                lyTblRec.UpgradeOpen();

                lyTblRec.Erase(true);

                trans.Commit();

                return true;
            }
        }

二、图层的增加:

public ObjectId AddLayer(Database db, string layerName)
        {
            ObjectId oId = ObjectId.Null;

            using (var trans = db.TransactionManager.StartTransaction())
            {
                var lyerTbl = db.LayerTableId.GetObject(OpenMode.ForWrite) as LayerTable;

                if (lyerTbl.Has(layerName))
                {
                    trans.Commit();
                    return lyerTbl[layerName];
                }
                var lyerTblRec = new LayerTableRecord();
                lyerTblRec.Name = layerName;

                lyerTbl.Add(lyerTblRec);
                trans.AddNewlyCreatedDBObject(lyerTblRec, true);

                lyerTbl.DowngradeOpen();

                trans.Commit();

                return lyerTbl[layerName];
            }
        }

三、修改图层颜色:

 public bool SetLayerColor(Database db, string layerName, short colorIndexs)
        {

            using (var trans = db.TransactionManager.StartTransaction())
            {

                var lyTbl = db.LayerTableId.GetObject(OpenMode.ForRead) as LayerTable;

                if (lyTbl.Has(layerName))
                {
                    var lyTblRec = trans.GetObject(lyTbl[layerName], OpenMode.ForWrite) as LayerTableRecord;

                    if (colorIndexs < 0 || colorIndexs > 255)
                    {
                        colorIndexs = 1;
                    }
                    lyTblRec.Color = Color.FromColorIndex(ColorMethod.ByAci, colorIndexs);

                    lyTblRec.DowngradeOpen();

                    trans.Commit();
                    return true;

                }
                else
                {
                    return false;
                }
            }
        }

四、遍历图层:

public List<LayerTableRecord> GetAllLayer(Database db)
        {
            List<LayerTableRecord> listLyTblRec = new List<LayerTableRecord>();

            using (var trans = db.TransactionManager.StartTransaction())
            {

                var lyTbl = trans.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable;

                foreach (ObjectId oId in lyTbl)
                {

                    var lyTblRec = trans.GetObject(oId, OpenMode.ForRead) as LayerTableRecord;

                    listLyTblRec.Add(lyTblRec);

                }

                return listLyTblRec;
            }
        }

五、设置当前图层:

技术分享图片
Databse.Clayer表示当前图层
  public bool SetCurrentLayer(Database db, string layerName)
        {

            using (var trans = db.TransactionManager.StartTransaction())
            {

                var lyTbl = trans.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable;

                if (!lyTbl.Has(layerName)) return false;

                //var lyTblRec = trans.GetObject(lyTbl[layerName], OpenMode.ForRead) as LayerTableRecord;

                if (db.Clayer != lyTbl[layerName])
                {
                    db.Clayer = lyTbl[layerName];
                }
                return true;
            }

        }
View Code

 

AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层

原文:https://www.cnblogs.com/HelloQLQ/p/11848082.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!