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

Auto CAD二次开发——镜像图形对象

学如逆水行舟,不进则退。 愿自己不忘初心,坚持积累。感谢大家的支持。本篇博客主要是学习镜像图形对象。

目录

1、基础知识储备

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

2.1 镜像图形对象函数封装

2.2 镜像图形对象函数调用

2.3 镜像图形对象运行结果


1、基础知识储备

在 CAD 官方的镜像图形命令中,存在是否删除源对象的选项。在我们自主编写代码时需注意:无论是否删除源对象,都不影响获取新生成的镜像实体(Entity entR)。具体来说,若选择删除源对象,只需将原对象的实体引用清空即可;若不删除源对象,则直接保留新生成的镜像实体引用。这里需要明确的是,不能写成 “不删除源对象时返回新复制的实体,删除时却返回原实体” 的逻辑。

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

2.1 镜像图形对象函数封装

        /// <summary>/// 镜像图形/// </summary>/// <param name="entId">图形对象的ObjectId</param>/// <param name="point1">第一个镜像点</param>/// <param name="point2">第二个镜像点</param>/// <param name="isEraseSoruce">是否删除原图</param>/// <returns>返回新的图形对象,没有加入图形数据库</returns>public static Entity MirrorEntity(this ObjectId entId, Point3d point1, Point3d point2, bool isEraseSoruce){//声明一个图形对象,用于返回Entity entR;//计算镜像的变换矩阵Matrix3d mt = Matrix3d.Mirroring(new Line3d(point1, point2));//打开事务处理using (Transaction trans = entId.Database.TransactionManager.StartTransaction()){//打开原对象Entity ent = (Entity)trans.GetObject(entId, OpenMode.ForWrite);//这里得到的图形的IsNewlyObject = trueentR = ent.GetTransformedCopy(mt);//判断是否删除对象if (isEraseSoruce){ent.Erase();}trans.Commit();}return entR;}/// <summary>/// 镜像图形/// </summary>/// <param name="entId">图形对象</param>/// <param name="point1">第一个镜像点</param>/// <param name="point2">第二个镜像点</param>/// <param name="isEraseSoruce">是否删除原图</param>/// <returns>返回新的图形对象,没有加入图形数据库</returns>public static Entity MirrorEntity(this Entity ent, Point3d point1, Point3d point2, bool isEraseSoruce){//声明一个图形对象,用于返回Entity entR;if (ent.IsNewObject == true){//计算镜像的变换矩阵Matrix3d mt = Matrix3d.Mirroring(new Line3d(point1, point2));entR = ent.GetTransformedCopy(mt);}else{entR = ent.ObjectId.MirrorEntity(point1, point2, isEraseSoruce);}return entR;}

2.2 镜像图形对象函数调用

        //镜像函数对象[CommandMethod("MirrorEntity")]public void MirrorDemo1(){Database db = HostApplicationServices.WorkingDatabase;Circle c1 = new Circle(new Point3d(100, 100, 0), Vector3d.ZAxis, 50);ObjectId cId = db.AddEntityToModelSpace(c1);Entity Ent = cId.MirrorEntity(new Point3d(200, 100, 0), new Point3d(200, 300, 0), true);db.AddEntityToModelSpace(Ent);Circle c2 = new Circle(new Point3d(100, 200, 0), Vector3d.ZAxis, 50);Entity ent2 = c2.MirrorEntity(new Point3d(200, 100, 0), new Point3d(200, 300, 0), true);//Entity ent3 = c2.MirrorEntity(new Point3d(200, 100, 0), new Point3d(200, 300, 0), false);db.AddEntityToModelSpace(c2, ent2);}

2.3 镜像图形对象运行结果

注意:在镜像图形对象是需要注意,如果没有加载到图形数据库着设置bool isEraseSoruce失效,在实际的操作中一般都会加载到图形数据库,不然如何选中对象实现镜像,这里只是为了保证创建流程的完整性。

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

相关文章:

  • 软考 关于23种设计模式
  • golang 网站开发 教程网站建设公司如何规避风险
  • 建设电子商务网站论文网站开发核心技术
  • nestjs集成grpc服务
  • Milvus:标量索引详解(十三)
  • 【仓颉纪元】仓颉学习深度实践:30 天从零基础到独立开发
  • RocketMQ【入门实践】
  • Harmony鸿蒙开发0基础入门到精通Day11--TypeScript篇
  • 网站做广告的好处软件定制开发平台
  • 从智能手表拆解看硬件与软件的魔法融合 -嵌入式开发
  • 【java基础语法】---- 综合训练
  • BKA-Transformer-LSTM多变量时间序列预测Matlab实现
  • 如何自己创造一个网站平台搬瓦工装WordPress
  • 数式Oinone亮相GOTC 2025开源集市,企业级产品化引擎冲击Gitee当日热门项目
  • 【产品研究】生物力学软件 SIMM 4.0 for Windows 用户手册总结
  • 更新公司网站内容需要山东住房和城乡建设局网站首页
  • Unity与Android原生交互开发入门篇 - 打开Android的设置
  • 如何查看Linux系统版本?
  • Python类和对象--生命周期方法(对象生命周期,内存管理机制-存储,垃圾回收)
  • PAIMON+STARROCKS 学习
  • *曲速引擎的核心思想
  • AI时代下医药项目管理效能提升与知识管理案例分享︱奥锐特药业研发中心主任庄守群
  • 路由器构建园区网
  • 陕西建设网站如何建立免费网站
  • 设计网站账号品牌策划公司广告语
  • 二十一、kubernetes 1.29 之 运维 03
  • 【论文精读】CMD:迈向高效视频生成的新范式
  • 技术实践 | 延趣游戏用户分层体系:基于TE系统实现精细化运营与流水增长
  • 【硬件SDK项目】uniapp框架设计与业务开发
  • 做推广必须知道的网站淮南网络建站公司