明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3660|回复: 5

CAD.NET API一日一练(3)图层控制

  [复制链接]
发表于 2011-10-25 00:15:09 | 显示全部楼层 |阅读模式

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections;
  4. using System.Linq;
  5. using System.Text;
  6. using Autodesk.AutoCAD.Runtime;
  7. using Autodesk.AutoCAD.ApplicationServices;
  8. using Autodesk.AutoCAD.DatabaseServices;
  9. using Autodesk.AutoCAD.Geometry;
  10. using Autodesk.AutoCAD.EditorInput;

  11. namespace Base
  12. {
  13.     public class Class1
  14.     {
  15.               //图层控制
  16.         #region layercontral
  17.         //关闭所选择实体所在图层
  18.         [CommandMethod("layeroff")]
  19.         public static void layeroff()
  20.         {
  21.             Document doc = Application.DocumentManager.MdiActiveDocument;
  22.             Editor ed = doc.Editor;
  23.             Database db = doc.Database;
  24.          
  25.             PromptSelectionOptions options = new PromptSelectionOptions();
  26.             options.MessageForAdding = "\n请选择要关闭的图层";
  27.             PromptSelectionResult result = ed.GetSelection(options);
  28.             if (result.Status == PromptStatus.OK)
  29.             {
  30.                 using (Transaction trans = db.TransactionManager.StartTransaction())
  31.                 {
  32.                     LayerTable lt = (LayerTable)trans.GetObject(db.LayerTableId, OpenMode.ForWrite);
  33.                     foreach (SelectedObject obj in result.Value)
  34.                     {
  35.                         Entity ent = trans.GetObject(obj.ObjectId, OpenMode.ForRead)as Entity;
  36.                         LayerTableRecord ltr = trans.GetObject(ent.LayerId, OpenMode.ForWrite) as LayerTableRecord;                           
  37.                         ltr.IsOff = true;                        
  38.                     }                                                        
  39.                     trans.Commit();
  40.                 }                                               
  41.             }                    
  42.         }
  43.         //仅显示所选择实体所在图层
  44.         [CommandMethod("layeron")]
  45.         public static void layeron()
  46.         {
  47.             Document doc = Application.DocumentManager.MdiActiveDocument;
  48.             Editor ed = doc.Editor;
  49.             Database db = doc.Database;
  50.          
  51.             PromptSelectionOptions options = new PromptSelectionOptions();
  52.             options.MessageForAdding = "\n请选择要显示的图层";
  53.             PromptSelectionResult result = ed.GetSelection(options);
  54.             if (result.Status == PromptStatus.OK)
  55.             {
  56.                 using (Transaction trans = db.TransactionManager.StartTransaction())
  57.                 {
  58.                     LayerTable lt = (LayerTable)trans.GetObject(db.LayerTableId, OpenMode.ForRead);
  59.                     foreach (ObjectId id in lt)
  60.                     {
  61.                         LayerTableRecord ltr2 = trans.GetObject(id, OpenMode.ForRead) as LayerTableRecord;
  62.                         if (ltr2.IsOff == false)
  63.                         {
  64.                             ltr2.UpgradeOpen();
  65.                             ltr2.IsOff = true;
  66.                         }
  67.                     }
  68.                     foreach (SelectedObject obj in result.Value)
  69.                     {
  70.                         Entity ent = trans.GetObject(obj.ObjectId, OpenMode.ForRead) as Entity;                       
  71.                         LayerTableRecord ltr = trans.GetObject(ent.LayerId, OpenMode.ForWrite) as LayerTableRecord;
  72.                         ltr.IsOff = false;
  73.                        
  74.                      
  75.                     }
  76.                     trans.Commit();
  77.                 }
  78.             }
  79.         }
  80.          //显示所有图层
  81.         [CommandMethod("layerall")]
  82.         public static void layerall()
  83.         {
  84.             Document doc = Application.DocumentManager.MdiActiveDocument;
  85.             Database db = doc.Database;
  86.             using (Transaction trans = db.TransactionManager.StartTransaction())
  87.             {
  88.                 LayerTable lt = (LayerTable)trans.GetObject(db.LayerTableId, OpenMode.ForWrite);
  89.                 foreach (ObjectId id in lt)
  90.                 {
  91.                     LayerTableRecord ltr = id.GetObject(OpenMode.ForRead) as LayerTableRecord;
  92.                     if (ltr.IsOff == true)
  93.                     {
  94.                         ltr.UpgradeOpen();
  95.                         ltr.IsOff = false;
  96.                     }                           
  97.                 }
  98.                 trans.Commit();
  99.             }
  100.         }        
  101.          //若图层不存在则新建并置为当前,存在则置为当前
  102.         [CommandMethod("newlayer")]
  103.         public static void newlayer()
  104.         {
  105.             Document doc = Application.DocumentManager.MdiActiveDocument;
  106.             Database db = doc.Database;
  107.             Editor ed = doc.Editor;
  108.             string name;
  109.             PromptResult result = ed.GetString("\n请输入图层名");
  110.             if (result.Status == PromptStatus.OK)
  111.             {
  112.                 name = result.StringResult;
  113.                 using (Transaction trans = db.TransactionManager.StartTransaction())
  114.                 {
  115.                     LayerTable lt = (LayerTable)trans.GetObject(db.LayerTableId, OpenMode.ForWrite);
  116.                     LayerTableRecord ltr = new LayerTableRecord();
  117.                     if (lt.Has(name)==true)
  118.                     {
  119.                        db.Clayer=lt[name];
  120.                     }
  121.                     else
  122.                     {
  123.                         ltr.Name = name;                       
  124.                         lt.Add(ltr);                        
  125.                         trans.AddNewlyCreatedDBObject(ltr, true );
  126.                         db.Clayer = ltr.ObjectId;                       
  127.                     }
  128.                     trans.Commit();
  129.                 }
  130.             }
  131.            
  132.         }        
  133.         #endregion
  134.     }
  135. }

评分

参与人数 2明经币 +2 收起 理由
飞诗(fsxm) + 1 很给力!
xgr + 1 赞一个!

查看全部评分

发表于 2011-11-4 19:52:22 | 显示全部楼层
来学习了,多谢分享代码
发表于 2011-11-8 09:51:31 | 显示全部楼层
感谢分享代码
发表于 2013-5-22 21:14:01 | 显示全部楼层
感谢分享代码
发表于 2013-6-7 15:18:59 | 显示全部楼层
好贴,一定支持。
发表于 2013-6-9 16:08:37 | 显示全部楼层
感谢分享代码。学习了。对初学者十分有用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 15:55 , Processed in 0.192698 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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