1. /// <summary>
  2. /// 插入一个块参照到CAD图形中
  3. /// </summary>
  4. /// <param name="spaceId">模型空间Id</param>
  5. /// <param name="layer">要插入的图层名</param>
  6. /// <param name="blockName">块名</param>
  7. /// <param name="postion">插入点</param>
  8. /// <param name="scale">缩放比例</param>
  9. /// <param name="rotateAngle">旋转角度</param>
  10. /// <returns></returns>
  11. public static ObjectId InsertBlockTableRecord(this ObjectId spaceId, string layer, string blockName, Point3d postion, Scale3d scale, double rotateAngle)
  12. {
  13.  
  14. ObjectId blockRefId;//存储要插入的块参照的Id
  15.  
  16. Database db = spaceId.Database;//获取数据库对象
  17.  
  18. BlockTable bt = db.BlockTableId.GetObject(OpenMode.ForRead) as BlockTable;
  19.  
  20. if (!bt.Has(blockName))
  21.  
  22. return ObjectId.Null;//如果没有blockName的块,程序返回
  23.  
  24. //以写的方式打开空间
  25. BlockTableRecord space = spaceId.GetObject(OpenMode.ForWrite) as BlockTableRecord;
  26. //创建块参照的插入点
  27. BlockReference br = new BlockReference(postion, bt[blockName]);
  28. br.ScaleFactors = scale;
  29.  
  30. br.Layer = layer;
  31.  
  32. br.Rotation = rotateAngle;
  33. blockRefId = space.AppendEntity(br);
  34.  
  35. db.TransactionManager.AddNewlyCreatedDBObject(br, true);
  36.  
  37. space.DowngradeOpen();
  38.  
  39. return blockRefId;//返回添加的块参照的ID
  40.  
  41. }

  

  1. /// <summary>
  2. /// 插入一个块参照到CAD图形中
  3. /// </summary>
  4. /// <param name="spaceId">模型空间Id</param>
  5. /// <param name="layer">要插入的图层名</param>
  6. /// <param name="blockName">块名</param>
  7. /// <param name="postion">插入点</param>
  8. /// <param name="scale">缩放比例</param>
  9. /// <param name="rotateAngle">旋转角度</param>
  10. /// <returns></returns>
  11. public static ObjectId InsertBlockTableRecord(this ObjectId spaceId, string layer, string blockName, Point3d postion, Scale3d scale, double rotateAngle)
  12. {
  13.  
  14. ObjectId blockRefId;//存储要插入的块参照的Id
  15.  
  16. Database db = spaceId.Database;//获取数据库对象
  17.  
  18. BlockTable bt = db.BlockTableId.GetObject(OpenMode.ForRead) as BlockTable;
  19.  
  20. if (!bt.Has(blockName))
  21.  
  22. return ObjectId.Null;//如果没有blockName的块,程序返回
  23.  
  24. //以写的方式打开空间
  25. BlockTableRecord space = spaceId.GetObject(OpenMode.ForWrite) as BlockTableRecord;
  26. //创建块参照的插入点
  27. BlockReference br = new BlockReference(postion, bt[blockName]);
  28. br.ScaleFactors = scale;
  29.  
  30. br.Layer = layer;
  31.  
  32. br.Rotation = rotateAngle;
  33. blockRefId = space.AppendEntity(br);
  34.  
  35. db.TransactionManager.AddNewlyCreatedDBObject(br, true);
  36.  
  37. space.DowngradeOpen();
  38.  
  39. return blockRefId;//返回添加的块参照的ID
  40.  
  41. }
  42.  
  43. CAD中插入一个块参照
  44.  
  45. /// <summary>
  46. /// 创建一个块,添加到数据库中
  47. /// </summary>
  48. /// <param name="db"></param>
  49. /// <param name="blockName"></param>
  50. /// <param name="ents"></param>
  51. /// <returns></returns>
  52. public static ObjectId AddBlockTableRecord(this Database db, string blockName, List<Entity> ents)
  53. {
  54. BlockTable bt = (BlockTable)db.BlockTableId.GetObject(OpenMode.ForRead);
  55.  
  56. if (!bt.Has(blockName))
  57. {
  58. BlockTableRecord btr = new BlockTableRecord();
  59.  
  60. btr.Name = blockName;
  61. //将列表中的实体加入到新建的BlockTableRecord
  62. ents.ForEach(ent => btr.AppendEntity(ent));
  63.  
  64. bt.UpgradeOpen();//切换块为写的状态
  65.  
  66. bt.Add(btr);
  67.  
  68. db.TransactionManager.AddNewlyCreatedDBObject(btr, true);
  69.  
  70. bt.DowngradeOpen();//切换块为读的状态
  71.  
  72. }
  73.  
  74. return bt[blockName];
  75. }

  

CAD 二次开发----- 块的更多相关文章

  1. CAD 二次开发----- 块(一)

    1.块定义与块参照两个概念 块定义类似于模具,而块参照类似于模具浇筑出来的模型,在图形中只需用块定义来保存块的实际几何组成,而仅用插入点和比例因子来存储块定义,因为块参照的几何形状与快参照完全一样,仅 ...

  2. Cad 二次开发关于SelectCrossingPolygon和SelectFence返回结果Status为error的小测试

    CAD2008的二次开发,有个很奇怪的现象,只要你选择的点集不在当前视图上SelectCrossingPolygon和SelectFence返回结果Status就会为error,所以要获取正确的结果, ...

  3. CAD二次开发

    用C#有一段时间了,由于单位需要,开始接触CAD二次开发,网上一搜,加入CAD开发的群,零零碎碎看了一些文章和博客,没有系统地的知识,能解决一些小问题.最近开始系统学习,再次推荐两本书,一本事纸质版的 ...

  4. 推荐两个不错的CAD二次开发(.Net)手册

    推荐两个不错的CAD二次开发(.Net)手册 http://www.mjtd.com/helpcenter/netguide/index.html http://www.ceesky.com/book ...

  5. CAD 二次开发 -- 自动加载开发的DLL

    CAD二次开发可以采用写扩展DLL的方式实现.该DLL的函数可以被CAD调用. 但是调用前,必须用命令netload 将该dll加载到CAD. 其实可以修改注册表,当CAD软件启动后,自动加载扩展DL ...

  6. C#进行CAD二次开发环境配置

    最近被公司分配到了做CAD二次开发.也是初次接触这方面的东西,其实是有些无从下手的感觉.因为公司这边也没有人有时间带我,只能是自己看书,然后再写一些Demo,再结合实际的应用来一点点的学习.废话不多说 ...

  7. CAD二次开发中浮动面板不浮动的问题

    CAD二次开发中创建了一个浮动面板,想让它创建出来后以浮动状态显示, 但是DockSides.None设置完后,面板还是不浮动.搞了很久,最后原来是 需要先设置Visible,再设置DockSides ...

  8. CAD二次开发起步

    1 环境搭建(VS 2017 + CAD 2019) CAD版本一般要比VS版本晚两年以上,比如我现在使用VS2017,则CAD要用2019版,至于CAD2018能不能用没试验过,有兴趣的小伙伴可以试 ...

  9. CAD二次开发控件,dwg控件,网页DWG控件,手机浏览编辑DWG控件

    梦想绘图插件5.2(MxDraw5.2) 是国内最强,最专业的CAD开发插件(控件),不需要AutoCAD就能独立运行. 控件使用VC 2010开发,具有30万行代码规模,最早从2007年第一个版本完 ...

随机推荐

  1. 【cl】工程导入

    File>Open 导入成功

  2. 单片机小白学步系列(十四) 点亮第一个LED的程序分析

    本篇我们将分析上一篇所写的程序代码.未来学习单片机的大部分精力,我们也将放在程序代码的编写上. 可是不用操心.我会很具体的介绍每一个程序的编写思路和各种注意事项等. 之前我们写的程序例如以下: #in ...

  3. UVA - 10061 How many zero&#39;s and how many digits ?

    n!=x*b^y, 当x为正整数时,最大的y就是n!末尾0的个数了, 把n,b分别拆成素因子相乘的形式: 比如, n=5,b=16 n=5,b=2^4, 非常明显,末尾0的个数为0 10进制时,n!= ...

  4. AWS之VPC、Subnet与CIDR

    什么是CIDR? CIDR是英文Classless Inter-Domain Routing的缩写,中文是无类别域间路由,是一个在Internet上创建附加地址的方法,这些地址提供给服务提供商(ISP ...

  5. Android开机动画、logo、字样的定制过程【转】

    本文转载自:http://blog.csdn.net/yinhaide/article/details/43668401 Android开机画面总共有三屏 一.第一屏:开机logo 1.选张png格式 ...

  6. C语言 - 头文件使用案例

    源代码分门别类管理,通过头文件. 放置一些函数声明,变量声明,常量定义,宏定义. hotel.h #ifndef HOTEL_H_INCLUDED #define HOTEL_H_INCLUDED # ...

  7. php和nodejs

    整个故事正如好莱坞大片的经典剧情走向:两位昔日好友如今分道扬镳,甚至被迫陷入了你死我活的斗争当中.刚开始的分歧并不严重,无非是一位老友对于另一位伙伴长久以来占据.但又绝口不提的业务领域产生了点兴趣.而 ...

  8. O - Masha and Bears

    Problem description A family consisting of father bear, mother bear and son bear owns three cars. Fa ...

  9. guice基本使用,guice整合guice-servlet,web scope注解(六)

    guice servlet提供了几个比较有用的web scope,类似与传统servlet 的session,request这些提供的范围等. guice servlet 提供的web scope 如 ...

  10. Java I/O streams

    I/O Streams Byte Streams 输入输出以字节为单位,所有的使用字节流的类都继承自 InputStream 和 OutputStream. Byte Streams 属于 low-l ...