0.引言

我们首先来康康在CAD中填充创建的一个过程(图有点吃藕,凑合看==)

搞清楚这个以后,我们在把之前那张出镜率很高的CAD类继承关系图拿出来

可以看到的是Hatch(填充)类继承于Entity

​我们F12来看看具体细节

再来看看Hatch类中的一些方法和属性

捋清楚大致的框架后就可以开始了

1. 图案填充封装

先来看看如何进行图案填充,然后再进行封装

2. 无颜色图形填充方法封装

这里新建了一个HatchTools类用来封装填充方法

无填充颜色的填充方法封装

        /// <summary>/// 图案填充 无颜色/// </summary>/// <param name="db">图形数据库</param>/// <param name="patternName">图案名称</param>/// <param name="scale">填充比例</param>/// <param name="degree">旋转角度</param>/// <param name="entid">边界图形的ObjectId</param>/// <returns></returns>public static ObjectId HatchEnity(this Database db, string patternName, double scale, double degree, ObjectId entid){ObjectId hatchId = ObjectId.Null;using (Transaction trans = db.TransactionManager.StartTransaction()){// 声明一个图案填充对象Hatch hatch = new Hatch();// 设置填充比例hatch.PatternScale = scale;// 设置填充类型和图案名称hatch.SetHatchPattern(HatchPatternType.PreDefined, "ANGLE");// 加入图形数据库BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);hatchId = btr.AppendEntity(hatch);trans.AddNewlyCreatedDBObject(hatch, true);// 设置填充角度hatch.PatternAngle = degree;// 设置关联hatch.Associative = true;// 设置边界图形和填充方式ObjectIdCollection obIds = new ObjectIdCollection();obIds.Add(entid);hatch.AppendLoop(HatchLoopTypes.Outermost, obIds);// 计算填充并显示hatch.EvaluateHatch(true);// 提交事务trans.Commit();}return hatchId;}

将填充图案类型也进行封装,填充的时候调用就行,封装为struct类型

        /// <summary>/// 填充图案名称/// </summary>public struct HatchPatternName{public static readonly string solid = "SOLID";public static readonly string angle = "ANGLE";public static readonly string ansi31 = "ANSI31";public static readonly string ansi32 = "ANSI32";public static readonly string ansi33 = "ANSI33";public static readonly string ansi34 = "ANSI34";public static readonly string ansi35 = "ANSI35";public static readonly string ansi36 = "ANSI36";public static readonly string ansi37 = "ANSI37";public static readonly string ansi38 = "ANSI38";public static readonly string arb816 = "AR-B816";public static readonly string arb816C = "AR-B816C";public static readonly string arb88 = "AR-B88";public static readonly string arbrelm = "AR-BRELM";public static readonly string arbrstd = "AR-BRSTD";public static readonly string arbconc = "AR-CONC";}

3. 带填充颜色的填充方法封装

        /// <summary>/// 图案填充 有填充颜色/// </summary>/// <param name="db">图形数据库</param>/// <param name="patternName">图案名称</param>/// <param name="scale">填充比例</param>/// <param name="degree">旋转角度</param>/// <param name="bkColor">背景色</param>/// <param name="hatchColorIndex">填充图案的颜色</param>/// <param name="entid">边界图形的ObjectId</param>/// <returns></returns>public static ObjectId HatchEnity(this Database db, string patternName, double scale, double degree, Color bkColor, int hatchColorIndex, ObjectId entid){ObjectId hatchId = ObjectId.Null;using (Transaction trans = db.TransactionManager.StartTransaction()){// 声明一个图案填充对象Hatch hatch = new Hatch();// 设置填充比例hatch.PatternScale = scale;// 设置背景色hatch.BackgroundColor = bkColor;// 设置填充图案颜色hatch.ColorIndex = hatchColorIndex;// 设置填充类型和图案名称hatch.SetHatchPattern(HatchPatternType.PreDefined, "ANGLE");// 加入图形数据库BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);hatchId = btr.AppendEntity(hatch);trans.AddNewlyCreatedDBObject(hatch, true);// 设置填充角度hatch.PatternAngle = degree;// 设置关联hatch.Associative = true;// 设置边界图形和填充方式ObjectIdCollection obIds = new ObjectIdCollection();obIds.Add(entid);hatch.AppendLoop(HatchLoopTypes.Outermost, obIds);// 计算填充并显示hatch.EvaluateHatch(true);// 提交事务trans.Commit();}return hatchId;}

4. 多个图形的填充

        /// <summary>/// 图案填充/// </summary>/// <param name="db">图形数据库</param>/// <param name="loopTypes"></param>/// <param name="patternName">图案名称</param>/// <param name="scale">填充比例</param>/// <param name="degree">旋转角度</param>/// <param name="entid">边界图形的ObjectId</param>/// <returns></returns>public static ObjectId HatchEnity(this Database db, List<HatchLoopTypes> loopTypes, string patternName, double scale, double degree, params ObjectId[] entid) // 一个方法只能传递一个可变参数 且需要放在最后{ObjectId hatchId = ObjectId.Null;using (Transaction trans = db.TransactionManager.StartTransaction()){// 声明一个图案填充对象Hatch hatch = new Hatch();// 设置填充比例hatch.PatternScale = scale;// 设置填充类型和图案名称hatch.SetHatchPattern(HatchPatternType.PreDefined, "ANGLE");// 加入图形数据库BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);hatchId = btr.AppendEntity(hatch);trans.AddNewlyCreatedDBObject(hatch, true);// 设置填充角度hatch.PatternAngle = degree;// 设置关联hatch.Associative = true;// 设置边界图形和填充方式ObjectIdCollection obIds = new ObjectIdCollection();// 依次添加图形填充样式for (int i = 0; i < entid.Length; i++){obIds.Clear();obIds.Add(entid[i]);hatch.AppendLoop(loopTypes[i], obIds);}// 计算填充并显示hatch.EvaluateHatch(true);// 提交事务trans.Commit();}return hatc

5. 测试代码

实验结果

上述结果分别为测试代码中的几种填充方式

更多细节请关注公众号:数据智能笔记

发布于 2020-03-21

C#之CAD二次开发(5) CAD图形填充封装相关推荐

  1. c# CAD二次开发 模拟CAD移动图形, 通过圆现在注记,改变图形颜色

    c# CAD二次开发 模拟CAD移动图形, 通过圆现在注记,改变图形颜色 using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD ...

  2. c# cad 二次开发 类库 CAD表格的操作,给CAD添加一个表格

    c# cad 二次开发 类库 CAD表格的操作,给CAD添加一个表格 using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCA ...

  3. C# CAD二次开发之基本图形

    autoCAD二次开发之基本图形(二) 文章目录 autoCAD二次开发之基本图形(二) 图形数据库 直线 进一步封装 圆和圆弧 多段线 凸度 面域 文字 总结 本文章基础知识: C# 基础 面向对象 ...

  4. 【CAD二次开发】CAD选择集的问题集合

    var result = ed.SelectCrossingWindow();获取指定范围内的对象,类似从右下角到左上角框选: 注意框选对象要在CAD的窗体范围内,否则会返回错误结果.

  5. CAD二次开发获取CAD内所有的大字体SHX字体

    using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.Runtime; using Microsoft.Win32; u ...

  6. CAD 二次开发WblockCloneObjects跨图形复制数据

  7. 【CAD二次开发】获取HATCH填充边界

    [CommandMethod("tcxx")]public void TQXX(){Document doc = Application.DocumentManager

  8. [CAD二次开发]获取CAD内3D块参照的欧拉旋转角,Matrix3d矩阵转欧拉角。

    根据选择块参照生成新的欧拉角相同的块参照 [CommandMethod("ttt")]public void rr(){Document doc = Application.Doc ...

  9. cad二次开发程序的绿色安装

    此问题的引入是因为一个cad二次开发软件,客户要求做成绿色安装.何为绿色安装呢?软件包copy到一台电脑上(已安装CAD),双击exe,打开的界面包含自定义的菜单.菜单的图标能正确显示.每个功能能使用 ...

最新文章

  1. unity 2d 游戏优化之路 遇坑记录
  2. 立志打破日企垄断,ISP要被取代了吗?
  3. Zulip 2.0.3 发布,功能强大的群组聊天软件
  4. Python 实现有道翻译命令行版
  5. Tomcat - 源码构建Tomcat 8.5.55 启动
  6. linux mysql 数据目录迁移后不生效_Linux中更改转移mysql数据库目录的步骤
  7. CAsyncSocket及CSocket的区别和用法
  8. c++ 重载 重写_关于C/C++中的++i和i++实现机制的探讨
  9. 分布式面试 - 为什么要进行系统拆分?
  10. bios文件查看工具_“主板BIOS教程”手把手教你刷bios,多种bios教程
  11. 如何在Python脚本中调用外部命令(就像在linux shell或Windows命令提示符下输入一样)
  12. spark学习-Spark算子Transformations和Action使用大全(Transformations章(二))
  13. ln命令:软链接建立与删除
  14. 商城项目测试用例设计实战
  15. scMRA:一种健壮的深度学习方法,可以用多个参考数据集注释scRNA-seq数据
  16. excel身份证号提取出生日期
  17. canvas卡通兔子萝卜飞行动画
  18. Lattice开发工具 diamond总结
  19. 新手怎么做一个小程序?
  20. 2019-2020年度第2学期课程回顾总结

热门文章

  1. 360董事长周鸿祎:元宇宙代表着人类的没落
  2. 唤醒手腕 - 微信小程序、QQ小程序、抖音小程序学习笔记(更新中)
  3. 网格参数化Least Squares Conformal Maps实现(3D网格映射到2D平面)
  4. Spring Boot系列(三)、Spring Boot视图技术(Jsp、FreeMarker、Thymeleaf)
  5. ppt录屏+Qt打包成exe
  6. VBA关于声音的多种实现方法
  7. Solidworks如何显示装饰螺纹线
  8. 不知道TikTok创作者基金怎么提取?
  9. 关于DirectX中的三角形拾取的的另一种方法
  10. Ubuntu18.04 配置orbslam2环境+小觅相机测试(零基础)