1 using System;
 2 
 3 using Autodesk.AutoCAD.DatabaseServices;
 4 using Autodesk.AutoCAD.Geometry;
 5 using Autodesk.AutoCAD.Runtime;
 6 
 7 [assembly: CommandClass(typeof(Sample.AddBlock))]
 8 namespace Sample
 9 {
10     class AddBlock
11     {
12         /// <summary>
13         /// 引用外部文件为块参照插入
14         /// </summary>
15         [CommandMethod("AddRefBlock")]
16         public void Add1()
17         {
18             Database db = HostApplicationServices.WorkingDatabase;
19             using (Transaction trans = db.TransactionManager.StartTransaction())
20             {
21                 BlockTable bt = trans.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
22                 BlockTableRecord btr = trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
23                 ObjectId refid = db.OverlayXref(@"c:\drwing.dwg", "name");// 通过外部文件获取图块定义的ObjectId
24                 BlockReference br = new BlockReference(Point3d.Origin, refid); // 通过块定义添加块参照
25                 btr.AppendEntity(br); //把块参照添加到块表记录
26                 trans.AddNewlyCreatedDBObject(br, true); // 通过事务添加块参照到数据库
27                 trans.Commit();
28             }
29         }
30 
31         /// <summary>
32         /// 把块定义变为块参照插入
33         /// </summary>
34         [CommandMethod("AddBlock")]
35         public void Add2()
36         {
37             Database db = HostApplicationServices.WorkingDatabase;
38             ObjectId blkid;
39 
40             //创建块定义
41             using (Transaction trans = db.TransactionManager.StartTransaction())
42             {
43                 BlockTable bt = trans.GetObject(db.BlockTableId, OpenMode.ForWrite) as BlockTable;
44                 BlockTableRecord blk = new BlockTableRecord();
45                 blk.Name = "BLK";
46                 Line L = new Line(Point3d.Origin, new Point3d(1000, 1000, 0));
47                 Circle C = new Circle(Point3d.Origin, Vector3d.ZAxis, 500);
48                 blk.AppendEntity(L);
49                 blk.AppendEntity(C);
50                 blkid = bt.Add(blk);
51                 trans.AddNewlyCreatedDBObject(blk, true);
52                 trans.Commit();
53             }
54 
55             using (Transaction tr = db.TransactionManager.StartTransaction())
56             {
57                 BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
58                 BlockTableRecord btr = tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
59                 BlockReference br = new BlockReference(new Point3d(0,0, 0), blkid); // 通过块定义创建块参照
60                 btr.AppendEntity(br); //把块参照添加到块表记录
61                 tr.AddNewlyCreatedDBObject(br, true); // 通过事务添加块参照到数据库
62                 tr.Commit();
63             }
64         }
65     }
66 }
67 --------------------- 
68 作者:whuruby 
69 来源:CSDN 
70 原文:https://blog.csdn.net/liupeng_qwert/article/details/45557195 
71 版权声明:本文为博主原创文章,转载请附上博文链接!

 

posted on 2019-01-22 15:54  Lionever  阅读(1093)  评论(0)    收藏  举报