Logstash 自承式光缆 gps Flutter acm CK css function pdf permissions xampp vue原理 php抽奖源码 ubuntu更改文件夹权限 python连接mysql python或运算 python文件操作 python使用正则表达式 python的re模块 java开发 java类与对象 java的继承 java最新框架 randomjava java面向对象 java方法调用 java抛出自定义异常 java删除数组中的某个元素 超级煎蛋卷 kms神龙 狮子狗皮肤 R语言初学者指南 中维高清监控系统安装 xflow 游戏linux正则表达式 asp程序下载 php随机数 python编辑器 下载声卡驱动 linux解压rar
当前位置: 首页 > 学习教程  > 编程学习

cad对图层的一些操作

2021/1/9 1:53:29 文章标签: cad图层无法删除

在一些书上看见的方法&#xff0c;自己编译尝试了一下&#xff0c;全部有效&#xff0c;希望对大家有所帮助&#xff1a; public class CadLayerBasicOp { /// <summary> /// 取得图层下的所有对象id /// </summary> /// <para…

在一些书上看见的方法,自己编译尝试了一下,全部有效,希望对大家有所帮助:
    public class CadLayerBasicOp
    {

        /// <summary>
        /// 取得图层下的所有对象id
        /// </summary>
        /// <param name="name">图层名称</param>
        /// <returns>id集合</returns>
        public static ObjectIdCollection GetObjectIdsAtLayer(string name)
        {
            ObjectIdCollection ids = new ObjectIdCollection();

            PromptSelectionResult ProSset = null;
            TypedValue[] filList = new TypedValue[1] { new TypedValue((int)DxfCode.LayerName, name) };
            SelectionFilter sfilter = new SelectionFilter(filList);

            Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
            ProSset = ed.SelectAll(sfilter);
            if (ProSset.Status == PromptStatus.OK)
            {

                SelectionSet sst = ProSset.Value;

                ObjectId[] oids = sst.GetObjectIds();

                for (int i = 0; i < oids.Length; i++)
                {
                    ids.Add(oids[i]);
                }
            }

            return ids;
        }

        /// <summary>
        /// 获取图层
        /// </summary>
        /// <param name="name"></param>
        /// <param name="db"></param>
        /// <returns></returns>
        public LayerTableRecord GetLayer(string name,Database db)
        {
            LayerTableRecord layer = new LayerTableRecord();
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                LayerTableRecord layer0 = new LayerTableRecord();
                LayerTable lt = (LayerTable)trans.GetObject(db.LayerTableId, OpenMode.ForRead);
                if (lt.Has(name))
                {
                    layer0 = trans.GetObject(lt[name], OpenMode.ForRead) as LayerTableRecord;

                    if (!layer0.IsErased)
                    {
                        layer = layer0;
                    }
                }
                trans.Commit();
            }
                return null;
        }

        /// <summary>
        /// 获取当前图层
        /// </summary>
        /// <param name="db"></param>
        /// <returns></returns>
        public LayerTableRecord GetCurLayer(Database db)
        {
            LayerTableRecord layer = new LayerTableRecord();
            using (Transaction tr = db.TransactionManager.StartTransaction())
            {
                layer = tr.GetObject(db.Clayer, OpenMode.ForRead) as LayerTableRecord;
            }
            return layer;
        }


        /// <summary>
        /// 增加图层并设置,当前图层
        /// </summary>
        /// <param name="strLayerName"></param>
        /// <param name="nColIndex"></param>
        public void AddLayer(string strLayerName,short nColIndex)
        {
            short colIndex = (short)(nColIndex % 256);
            Document acDoc = Application.DocumentManager.MdiActiveDocument;
            using (Transaction tr = acDoc.TransactionManager.StartTransaction())
            {
                //指定点图层
                LayerTable lt = (LayerTable)tr.GetObject(acDoc.Database.LayerTableId, OpenMode.ForRead);
                if (!lt.Has(strLayerName))//判断是否存在
                {
                    var LayerID = ObjectId.Null;
                    LayerTableRecord ltr = new LayerTableRecord();
                    ltr.Name = strLayerName;
                    ltr.Color = Autodesk.AutoCAD.Colors.Color.FromColorIndex(
                        Autodesk.AutoCAD.Colors.ColorMethod.ByColor, colIndex);
                    lt.UpgradeOpen();
                    LayerID = lt.Add(ltr);
                    tr.AddNewlyCreatedDBObject(ltr, true);

                    acDoc.Database.Clayer = ltr.ObjectId;
                }
                else
                {
                    WriteLine("\n此图层已经曾在");
                }
                tr.Commit();
            }
        }
        /// <summary>
        /// 删除图层
        /// </summary>
        /// <param name="strName"></param>
        /// <param name="db"></param>
        public void RemoveLayer(string strName,Database db)
        {
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                LayerTable lt = (LayerTable)trans.GetObject(db.LayerTableId, OpenMode.ForWrite);
                LayerTableRecord curLayer = (LayerTableRecord)trans.GetObject(db.Clayer,OpenMode.ForRead);

                if(curLayer.Name.ToLower() == strName.ToLower())
                {
                    WriteLine("\n不能删除当前图层");
                }
                else
                {
                    LayerTableRecord ltr = new LayerTableRecord();
                    if(lt.Has(strName))
                    {
                        ltr = trans.GetObject(lt[strName], OpenMode.ForWrite) as LayerTableRecord;
                        if(ltr.IsErased)
                        {
                            WriteLine("\n此图层已经被删除");
                        }
                        else
                        {
                            ObjectIdCollection idCol = new ObjectIdCollection();
                            idCol.Add(ltr.ObjectId);
                            db.Purge(idCol);
                            if(idCol.Count==0)
                            {
                                WriteLine("\n不能删除有对象的图层");
                            }
                            else
                            {
                                ltr.Erase();
                            }
                        }
                    }
                    else
                    {
                        WriteLine("\n没有此图层");
                    }
                }

                trans.Commit();
            }
        }

        /// <summary>
        /// 删除图层的所有实体
        /// </summary>
        /// <param name="layer"></param>
        /// <param name="db"></param>
        public void RemoveAllEntOfLayer(LayerTableRecord layer,Database db)
        {
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForWrite);
                foreach(ObjectId btrid in bt)
                {
                    BlockTableRecord btr = (BlockTableRecord)trans.GetObject(btrid, OpenMode.ForWrite);
                    foreach(ObjectId eid in btr)
                    {
                        Entity ent = trans.GetObject(eid, OpenMode.ForWrite) as Entity;
                        if(ent != null)
                        {
                            if (ent.LayerId == layer.ObjectId)
                            {
                                ent.Erase();
                            }
                        }
                    }
                }
                trans.Commit();
            }
        }


        public static void LayerOff(string strLayerName)
        {
            var doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            using (Transaction trs = db.TransactionManager.StartTransaction())
            {
                LayerTable lt = trs.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable;
                var layer = trs.GetObject(lt[strLayerName], OpenMode.ForWrite) as LayerTableRecord;
                layer.IsOff = true;
                trs.Commit();
            }
        }

        public static void LayerOn(string strLayerName)
        {
            var doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            using (Transaction trs = db.TransactionManager.StartTransaction())
            {
                LayerTable lt = trs.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable;
                var layer = trs.GetObject(lt[strLayerName], OpenMode.ForWrite) as LayerTableRecord;
                layer.IsOff = false;
                trs.Commit();
            }
        }

        public void LayerEnable(string strLayerName)
        {
            var doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            using (Transaction trs = db.TransactionManager.StartTransaction())
            {
                LayerTable lt = trs.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable;
                var layer = trs.GetObject(lt[strLayerName], OpenMode.ForWrite) as LayerTableRecord;
                layer.IsOff = layer.IsOff ? false : true;
                trs.Commit();
            }
        }
        
        private void WriteLine(string strCon)
        {
            Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage(strCon);//输出字符串 
        }


    }


本文链接: http://www.dtmao.cc/news_show_1100050.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?