当前位置: 首页 > news >正文

Auto CAD二次开发——图案填充(函数封装)

        学如逆水行舟,不进则退。 愿自己不忘初心,坚持积累。感谢大家的支持。本篇博客主要是学习图案填充。上一节已经学习过了图案填充,这一篇对其进行封装,便于后续的调用,同时封装背景色和前景色函数。

目录

1、基础知识储备

2、核心代码以及封装函数调用

2.1 封装函数(无背景色和图案填充前景色)

2.2 调用函数(无背景色和图案填充前景色)

2.3 运行结果(无背景色和图案填充前景色)

 2.4 封装函数(有背景色和图案填充前景色)

2.5 调用函数(有背景色和图案填充前景色)

2.6 运行结果(有背景色和图案填充前景色)


1、基础知识储备

参看帮助文档,Hatch也属于Entity。

填充图案类中补充颜色部分方法:

1、设置背景色

public Color BackgroundColor { get; set; }
2、设置填充图案的颜色
public virtual int ColorIndex { get; set; }

注意存在好多种设置颜色的方式:

以下是具体解释:

  1. public static Color DwgIn(DwgFiler inputFiler);从 DWG 文件过滤器(DwgFiler)中读取颜色数据,用于从 DWG 格式文件中解析并创建颜色对象,通常在文件加载或序列化时使用。

  2. public static Color DxfIn(DxfFiler inputFiler, int groupCodeOffset);从 DXF 文件过滤器(DxfFiler)中读取颜色数据,groupCodeOffset为组码偏移量,用于从 DXF 格式文件中解析颜色信息(DXF 文件通过 “组码 + 值” 存储数据)。

  3. public static Color FromColor(System.Drawing.Color value);将 GDI + 的System.Drawing.Color(WindowsForms 常用颜色类型)转换为 CAD 的Color对象,实现跨框架颜色类型适配。

  4. public static Color FromColor(System.Windows.Media.Color value);将 WPF 的System.Windows.Media.Color(WPF 框架常用颜色类型)转换为 CAD 的Color对象,适配 WPF 开发场景。

  5. public static Color FromColorIndex(ColorMethod colorMethod, short colorIndex);通过颜色索引创建颜色,colorMethod指定颜色模式(如索引色、真彩色等),colorIndex为颜色表中的索引值(对应 CAD 中的索引色设置)。

  6. public static Color FromDictionaryName(string name);从颜色字典中通过名称获取颜色,通常用于访问 CAD 中预定义的颜色字典(如标准颜色库)。

  7. public static Color FromEntityColor(EntityColor eclr);将实体颜色(EntityColor,CAD 中实体对象的颜色属性类型)转换为Color对象,用于实体颜色的提取和处理。

  8. public static Color FromNames(string colorName, string bookName);通过颜色名称和颜色簿(调色板)名称创建颜色,bookName指定调色板,colorName为该调色板中的具体颜色名。

  9. public static Color FromRgb(byte red, byte green, byte blue);通过 RGB 三原色值(0-255 范围的字节值)创建颜色,直接指定红、绿、蓝分量,对应真彩色模式(最常用的颜色创建方式之一)。

这些方法覆盖了从文件解析、跨框架转换、索引 / 名称 / RGB 值定义等多种颜色创建场景,方便在 CAD 开发中灵活处理颜色相关操作。后续会对颜色进行相关学习这次大概了解一下。

2、核心代码以及封装函数调用

2.1 封装函数(无背景色和图案填充前景色)

        /// <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 = "ANSI37";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 arconc = "AR-CONC";}/// <summary>/// 图案填充/// </summary>/// <param name="db">图形数据库</param>/// <param name="tatchName">图案名称</param>/// <param name="cId">边界图形的ObjectId</param>/// <param name="tatchScale">填充比例</param>/// <param name="tatchType">填充类型</param>/// <param name="tatchAngle">旋转角度</param>/// <returns></returns>public static ObjectId TatchEntity(this Database db, string tatchName, ObjectId cId, double tatchScale = 5, HatchPatternType tatchType = HatchPatternType.PreDefined, double tatchAngle = 45){ObjectId hatchId = ObjectId.Null;using (Transaction trans = db.TransactionManager.StartTransaction()){ObjectIdCollection obIds = new ObjectIdCollection();obIds.Add(cId);//声明图案填充对象Hatch hatch = new Hatch();//设置填充比例hatch.PatternScale = tatchScale;//设置填充类型和图案名hatch.SetHatchPattern(tatchType, tatchName);//加入图形数据库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 = tatchAngle.DegreeToAngle();//设置关联hatch.Associative = true;//设置边界图形和填充方式hatch.AppendLoop(HatchLoopTypes.Outermost, obIds);//计算填充并显示hatch.EvaluateHatch(true);//提交事务trans.Commit();}return hatchId;}

2.2 调用函数(无背景色和图案填充前景色)

 //图案填充            
Database db = HostApplicationServices.WorkingDatabase;ObjectId cId = db.AddCircleModelSpace(new Point3d(100, 100, 0), 100);
db.TatchEntity(TatchTool.HatchPatternName.angle, cId);

2.3 运行结果(无背景色和图案填充前景色)

 2.4 封装函数(有背景色和图案填充前景色)

        /// <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 = "ANSI37";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 arconc = "AR-CONC";}/// <summary>/// 图案填充/// </summary>/// <param name="db">图形数据库</param>/// <param name="tatchName">图案名称</param>/// <param name="cId">边界图形的ObjectId</param>/// <param name="tatchScale">填充比例</param>/// <param name="tatchType">填充类型</param>/// <param name="tatchAngle">旋转角度</param>/// <returns></returns>public static ObjectId TatchEntity(this Database db, string tatchName, ObjectId cId, double tatchScale = 5, HatchPatternType tatchType = HatchPatternType.PreDefined, double tatchAngle = 45){ObjectId hatchId = ObjectId.Null;using (Transaction trans = db.TransactionManager.StartTransaction()){ObjectIdCollection obIds = new ObjectIdCollection();obIds.Add(cId);//声明图案填充对象Hatch hatch = new Hatch();//设置填充比例hatch.PatternScale = tatchScale;//设置填充类型和图案名hatch.SetHatchPattern(tatchType, tatchName);//加入图形数据库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 = tatchAngle.DegreeToAngle();//设置关联hatch.Associative = true;//设置边界图形和填充方式hatch.AppendLoop(HatchLoopTypes.Outermost, obIds);//计算填充并显示hatch.EvaluateHatch(true);//提交事务trans.Commit();}return hatchId;}

2.5 调用函数(有背景色和图案填充前景色)

 //图案填充            
Database db = HostApplicationServices.WorkingDatabase;ObjectId cId = db.AddCircleModelSpace(new Point3d(100, 100, 0), 100);
db.TatchEntity(TatchTool.HatchPatternName.angle, cId);ObjectId cId1 = db.AddCircleModelSpace(new Point3d(300, 300, 0), 100);
db.TatchEntity(TatchTool.HatchPatternName.angle, cId1,Color.FromColorIndex(ColorMethod.ByColor,2),1);

2.6 运行结果(有背景色和图案填充前景色)

http://www.dtcms.com/a/562084.html

相关文章:

  • 【Android】Lottie - 实现炫酷的Android导航栏动画
  • 企业网站服务器租用wordpress 云解析视频教程
  • 【C++】Dev-C++安装步骤(V5.11和V6.3)
  • 阿里云网站用什么做的html在线记账网站模板
  • 企业建网站程序如何使用好单库选品库做网站
  • 深圳开发网站的公司哪家好免费一键网站
  • 如何使用 Ollama 在本地设置和运行 GPT-OSS
  • 合肥网站建设方案托管工业产品设计图片
  • p2p金融网站建设wordpress 适配 手机
  • 各类数据库如何仅授权用户访问元数据
  • 一级做A网站wordpress友情链接分类显示
  • Linux系统管理与常用命令详解
  • 计算机操作系统:用户层的I/O软件
  • 数据中心主机虚拟化
  • TCP/IP是什么?OSI又是什么?
  • wordpress企业网站主题一个网站上面有名优
  • 网站建设 php jsp .net网站内页百度不收录
  • 企业网络营销信息源类别及传递渠道调查东莞网站建设优化
  • [论文阅读] AI+ | GenAI重塑智慧图书馆:华东师大实践AI虚拟馆员,解放馆员聚焦高价值任务
  • 电子商务网站建设各项费用预算是多少wordpress 插件 摘要
  • 网站文章百度不收录福田网站设计公司哪家好
  • Java 中的 String、StringBuilder、StringBuffer 区别
  • 线性代数 - 奇异值分解(SVD Singular Value Decomposition)
  • 考研408——操作系统
  • 建设网站有哪些参考文献移动网络服务电话
  • 国内vps做网站要备案吗国家企业信息信用系统
  • 【AI基础篇】梯度提升机
  • 机器学习实践项目(二)- 房价预测 - 训练模型
  • dedecms做电商网站南昌短视频代运营公司
  • 【第38章】Spring Cloud之Quartz分布式任务调度