C# AutoCAD NetApi xclip 删除 边界

不说了,直接上代码,参照kean的博客吗,这是添加边界的代码 https://www.keanw.com/2012/10/querying-for-xclip-information-inside-autocad-using-net.html

 1 using Autodesk.AutoCAD.ApplicationServices.Core;
 2 using Autodesk.AutoCAD.DatabaseServices;
 3 using Autodesk.AutoCAD.DatabaseServices.Filters;
 4 using Autodesk.AutoCAD.EditorInput;
 5 using Autodesk.AutoCAD.Runtime;
 6 using System;
 7 using System.Collections.Generic;
 8 using System.Linq;
 9 using System.Text;
10 using System.Threading.Tasks;
11 
12 namespace ClassLibrary1
13 {
14     public class Class1
15     {
16         const string filterDictName = "ACAD_FILTER";
17         const string spatialName = "SPATIAL";
18         [CommandMethod("DXC")]
19         static public void DetectXClip()
20         {
21             var doc = Application.DocumentManager.MdiActiveDocument;
22             var ed = doc.Editor;
23             // Ask for an xclipped xref to be selected
24             var peo =new PromptEntityOptions( "\nSelect xclipped block or xref" );
25             peo.SetRejectMessage("Must be a block or xref.");
26             peo.AddAllowedClass(typeof(BlockReference), false);
27             var per = ed.GetEntity(peo);
28             if (per.Status != PromptStatus.OK)return;
29             var tr = doc.TransactionManager.StartTransaction();
30             using (tr)
31             {
32                 // Open the selected BlockReference
33                 var br =  tr.GetObject(per.ObjectId, OpenMode.ForRead) as BlockReference;
34                 // To save multiple codepaths with the same message
35                 // ("No clipping information found"), we'll use a flag to
36                 // see whether we've found anything
37                 // It should always be a block reference, but it might
38                 // not have an extension dictionary
39                 if ( br != null && br.ExtensionDictionary != ObjectId.Null)
40                 {
41                     // The extension dictionary needs to contain a nested
42                     // dictionary called ACAD_FILTER
43                     var extdict =tr.GetObject(br.ExtensionDictionary, OpenMode.ForRead) as DBDictionary;
44                     if (extdict != null && extdict.Contains(filterDictName))
45                     {
46                         var fildict =tr.GetObject(extdict.GetAt(filterDictName), OpenMode.ForWrite ) as DBDictionary;
47                         if (fildict != null) fildict.Erase();
48                     }
49                 }
50                 tr.Commit();
51                 doc.Editor.Regen();
52             }
53 
54         }
55 
56     }
57 }

执行前

执行后,相当于执行命令, xclip,选择外部参照,delete

 

posted @ 2020-10-15 19:42  南胜NanSheng  阅读(587)  评论(0编辑  收藏  举报