找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 230|回复: 0

实现类似CAD中的Block创建块义命令程序

[复制链接]

0

主题

0

回帖

26

积分

管理员

积分
26
发表于 2024-3-9 11:08:23 | 显示全部楼层 |阅读模式
  1. [CommandMethod("CreateBlock")]
  2. public void CreateBlock()
  3. {
  4.     Database db = HostApplicationServices.WorkingDatabase;
  5.     Editor ed = Autodesk.<a href="http://bbs.mjtd.com/forum-41-1.html" target="采用blank" class="relatedlink">AutoCAD</a>.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
  6.     using (DocumentLock docLock = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.LockDocument())
  7.     {
  8.         ObjectId blockId = ObjectId.Null;                   //用于返回所创建的块的对象Id
  9.         BlockTableRecord record = new BlockTableRecord();   //创建一个BlockTableRecord类的对象,表示所要创建的块
  10.         record.Name = "MyBlock";                            //设置块名  
  11.         record.Origin = new Point3d(0, 0, 0);               //设置块的基点
  12.         using (Transaction trans = db.TransactionManager.StartTransaction())
  13.         {
  14.             BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForWrite);//以写的方式打开块表
  15.             if (!bt.Has(record.Name))
  16.             {
  17.                 //选择对象
  18.                 PromptSelectionResult res = ed.GetSelection();
  19.                 if (res.Status == PromptStatus.OK)
  20.                 {
  21.                     foreach (ObjectId id in res.Value.GetObjectIds())
  22.                     {
  23.                         Entity ent = trans.GetObject(id, OpenMode.ForWrite) as Entity;
  24.                         Entity NewEnt = (Entity)ent.Clone();
  25.                         record.AppendEntity(NewEnt);
  26.                     }
  27.                 }
  28.                 bt.Add(record);                             //在块表中加入块
  29.                 trans.AddNewlyCreatedDBObject(record, true);//通知事务处理
  30.             }
  31.             else
  32.             {
  33.                 ed.WriteMessage("此图块名已存在,请检查!");
  34.             }
  35.             trans.Commit();
  36.         }
  37.     }
  38. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-27 06:06 , Processed in 0.118964 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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