AutoCAD中添加块和块参照(转载)

本文详细介绍了在AutoCAD中如何操作块参照,包括引用外部DWG文件为块参照插入和将块定义转化为块参照插入。通过示例代码展示了如何使用Autodesk.AutoCAD数据库服务进行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

  1. using System;

  2. using Autodesk.AutoCAD.DatabaseServices;
  3. using Autodesk.AutoCAD.Geometry;
  4. using Autodesk.AutoCAD.Runtime;

  5. [assembly: CommandClass(typeof(Sample.AddBlock))]
  6. namespace Sample
  7. {
  8.     class AddBlock
  9.     {
  10.         /// <summary>
  11.         /// 引用外部文件为块参照插入
  12.         /// </summary>
  13.         [CommandMethod("AddRefBlock")]
  14.         public void Add1()
  15.         {
  16.             Database db = HostApplicationServices.WorkingDatabase;
  17.             using (Transaction trans = db.TransactionManager.StartTransaction())
  18.             {
  19.                 BlockTable bt = trans.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
  20.                 BlockTableRecord btr = trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
  21.                 ObjectId refid = db.OverlayXref(@"c:\drwing.dwg", "name");// 通过外部文件获取图块定义的ObjectId
  22.                 BlockReference br = new BlockReference(Point3d.Origin, refid); // 通过块定义添加块参照
  23.                 btr.AppendEntity(br); //把块参照添加到块表记录
  24.                 trans.AddNewlyCreatedDBObject(br, true); // 通过事务添加块参照到数据库
  25.                 trans.Commit();
  26.             }
  27.         }

  28.         /// <summary>
  29.         /// 把块定义变为块参照插入
  30.         /// </summary>
  31.         [CommandMethod("AddBlock")]
  32.         public void Add2()
  33.         {
  34.             Database db = HostApplicationServices.WorkingDatabase;
  35.             ObjectId blkid;

  36.             //创建块定义
  37.             using (Transaction trans = db.TransactionManager.StartTransaction())
  38.             {
  39.                 BlockTable bt = trans.GetObject(db.BlockTableId, OpenMode.ForWrite) as BlockTable;
  40.                 BlockTableRecord blk = new BlockTableRecord();
  41.                 blk.Name = "BLK";
  42.                 Line L = new Line(Point3d.Origin, new Point3d(1000, 1000, 0));
  43.                 Circle C = new Circle(Point3d.Origin, Vector3d.ZAxis, 500);
  44.                 blk.AppendEntity(L);
  45.                 blk.AppendEntity(C);
  46.                 blkid = bt.Add(blk);
  47.                 trans.AddNewlyCreatedDBObject(blk, true);
  48.                 trans.Commit();
  49.             }

  50.             using (Transaction tr = db.TransactionManager.StartTransaction())
  51.             {
  52.                 BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
  53.                 BlockTableRecord btr = tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
  54.                 BlockReference br = new BlockReference(new Point3d(0,0, 0), blkid); // 通过块定义创建块参照
  55.                 btr.AppendEntity(br); //把块参照添加到块表记录
  56.                 tr.AddNewlyCreatedDBObject(br, true); // 通过事务添加块参照到数据库
  57.                 tr.Commit();
  58.             }
  59.         }
  60.     }
  61. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值