EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

萧闫子 发表于 2014-1-8 16:47:32

[实体对象] 添加块参照

块参照就是AutoCAD中的图块,它引用于块定义(即添加到块表的块表记录)。而块定义有两种形式:1、引用外部DWG图纸。2、种是图纸中添加在块表中的块表记录。
      以下是块定义引用为块参照的例子。

[*]using System;
[*]
[*]using Autodesk.AutoCAD.DatabaseServices;
[*]using Autodesk.AutoCAD.Geometry;
[*]using Autodesk.AutoCAD.Runtime;
[*]
[*]
[*]namespace Sample
[*]{
[*]    class AddBlock
[*]    {
[*]      /// <summary>
[*]      /// 引用外部文件为块参照插入
[*]      /// </summary>
[*]      
[*]      public void Add1()
[*]      {
[*]            Database db = HostApplicationServices.WorkingDatabase;
[*]            using (Transaction trans = db.TransactionManager.StartTransaction())
[*]            {
[*]                BlockTable bt = trans.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
[*]                BlockTableRecord btr = trans.GetObject(bt, OpenMode.ForWrite) as BlockTableRecord;
[*]                ObjectId refid = db.OverlayXref(@"c:\drwing.dwg", "name");// 通过外部文件获取图块定义的ObjectId
[*]                BlockReference br = new BlockReference(Point3d.Origin, refid); // 通过块定义添加块参照
[*]                btr.AppendEntity(br); //把块参照添加到块表记录
[*]                trans.AddNewlyCreatedDBObject(br, true); // 通过事务添加块参照到数据库
[*]                trans.Commit();
[*]            }
[*]      }
[*]
[*]      /// <summary>
[*]      /// 把块定义变为块参照插入
[*]      /// </summary>
[*]      
[*]      public void Add2()
[*]      {
[*]            Database db = HostApplicationServices.WorkingDatabase;
[*]            ObjectId blkid;
[*]
[*]            //创建块定义
[*]            using (Transaction trans = db.TransactionManager.StartTransaction())
[*]            {
[*]                BlockTable bt = trans.GetObject(db.BlockTableId, OpenMode.ForWrite) as BlockTable;
[*]                BlockTableRecord blk = new BlockTableRecord();
[*]                blk.Name = "BLK";
[*]                Line L = new Line(Point3d.Origin, new Point3d(1000, 1000, 0));
[*]                Circle C = new Circle(Point3d.Origin, Vector3d.ZAxis, 500);
[*]                blk.AppendEntity(L);
[*]                blk.AppendEntity(C);
[*]                blkid = bt.Add(blk);
[*]                trans.AddNewlyCreatedDBObject(blk, true);
[*]                trans.Commit();
[*]            }
[*]
[*]            using (Transaction tr = db.TransactionManager.StartTransaction())
[*]            {
[*]                BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
[*]                BlockTableRecord btr = tr.GetObject(bt, OpenMode.ForWrite) as BlockTableRecord;
[*]                BlockReference br = new BlockReference(new Point3d(0,0, 0), blkid); // 通过块定义创建块参照
[*]                btr.AppendEntity(br); //把块参照添加到块表记录
[*]                tr.AddNewlyCreatedDBObject(br, true); // 通过事务添加块参照到数据库
[*]                tr.Commit();
[*]            }
[*]      }
[*]    }
[*]}

复制代码
在AutoCAD中加载运行” AddBlock”命令后得到如下结果:
查看块表中的块定义得到如下结果:

在AutoCAD中加载运行” AddRefBlock”命令后得到如下结果:

pagudu 发表于 2016-10-28 17:40:46

hoooma 发表于 2016-9-17 01:34
谢谢你把好的资料分享给大家

不错

冰雨 发表于 2014-3-10 13:30:37

路过!!!
不发表意见……

等你回来 发表于 2014-5-20 14:32:05

路过!!!
不发表意见……

茶神idg 发表于 2014-2-18 12:09:28

顶......
楼下跟上.....

看看侃侃 发表于 2014-2-27 15:36:47

顶起来…………

audigy 发表于 2014-3-10 13:14:24

顶......
楼下跟上.....

猫猫girl 发表于 2014-3-11 11:06:06

非常感谢!!

秦惑 发表于 2014-3-11 11:08:52

顶起来…………

入樽 发表于 2014-3-11 11:18:30

谢谢老师…

AK47 发表于 2014-3-11 11:20:09

楼主辛苦……

dison 发表于 2014-3-14 11:19:17

顶......
楼下跟上.....

宇航员 发表于 2014-3-14 11:23:14

路过!!!
帮顶……

猫猫girl 发表于 2014-3-14 11:29:22

顶!!!!!!!!!!!!!!!!!!!!!!!!!

妮可 发表于 2014-3-14 11:33:55

顶!!!!!!!!!!

冰山 发表于 2014-5-13 10:21:03

(*^__^*) 嘻嘻……

leowave 发表于 2014-5-13 10:26:24

顶!!!!!!!!!!!!!!!!!!!!!!!!!
页: [1] 2
查看完整版本: [实体对象] 添加块参照