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

Auto CAD二次开发——三点创建圆弧对象函数封装

        学如逆水行舟,不进则退。 愿自己不忘初心,坚持积累。感谢大家的支持。在上一篇博客中已经实现了三点圆弧对象的创建(Auto CAD二次开发——三点创建圆弧对象-CSDN博客),这篇文章对其进行封装,便于后续的其他绘制圆弧功能的实现。

        前文已经实现了对图形对象实体(Entity)的封装(AddEntityToModelSpace),本次依旧会在圆弧封装函数的返回函数中调用。目前不需要对绘制出来的对象进行下一步操作,因此如果只是简单的学习不用管返回值,若后续对创建的对象进行操作,则得到封装函数的返回值就很有必要了。

本次分装一共包括三个函数:

1、判断三点是否在同一条直线上,如果在则不进行圆弧创建;

2、获得点到X轴的弧度值;

3、三点画圆函数封装;

        前两个封装函数在第三个封装函数会调用,也是绘制圆弧中常见用一段代码,因此对其进行独立封装。

具体代码:

封装函数:

        /// <summary>/// 判断三点是否在同一条直线上/// </summary>/// <param name="firstPoint">第一个点</param>/// <param name="secondPoint">第二个点</param>/// <param name="thirdPoint">第三个点</param>/// <returns></returns>public static bool IsOnOneLine(this Point3d firstPoint, Point3d secondPoint, Point3d thirdPoint){Vector3d v21 = secondPoint.GetVectorTo(firstPoint);Vector3d v23 = secondPoint.GetVectorTo(thirdPoint);if (v21.GetAngleTo(v23) == 0 || v21.GetAngleTo(v23) == Math.PI){return true;}else{return false;}}/// <summary>/// 获得点到X轴的弧度值/// </summary>/// <param name="startPoint">起点</param>/// <param name="endPoint">终点</param>/// <returns></returns>public static double GetAngleToXAxis(this Point3d startPoint, Point3d endPoint){//声明一个与X轴平行的向量Vector3d temp = new Vector3d(1, 0, 0);//获取起点到终点的向量Vector3d VsToe = startPoint.GetVectorTo(endPoint);return VsToe.Y > 0 ? temp.GetAngleTo(VsToe) : -temp.GetAngleTo(VsToe);}public static ObjectId AddArcToModelSpace(this Database db, Point3d startPoint, Point3d pointOnArc, Point3d endPoint){//先判断三点是否在同一条直线上if (startPoint.IsOnOneLine(pointOnArc, endPoint)){return ObjectId.Null;}//创建几何类对象CircularArc3d cArc = new CircularArc3d(startPoint, pointOnArc, endPoint);//通过几何类对象获取其属性//double radius = cArc.Radius; //半径//Point3d center = cArc.Center; //所在圆的圆心//Vector3d cs = center.GetVectorTo(startPoint); //圆心到起点的向量//Vector3d ce = center.GetVectorTo(endPoint);   //圆心到终点的向量//Vector3d xVector = new Vector3d(1, 0, 0); //X正方向的向量////圆弧的起始角度//double startAngle = cs.Y > 0 ? xVector.GetAngleTo(cs) : -xVector.GetAngleTo(cs);////圆弧的终止角度//double endAngle = ce.Y > 0 ? xVector.GetAngleTo(ce) : -xVector.GetAngleTo(ce);//创建圆弧对象Arc arc = new Arc(cArc.Center, cArc.Radius, cArc.Center.GetAngleToXAxis(startPoint), cArc.Center.GetAngleToXAxis(endPoint));//加入图形数据库return db.AddEntityToModelSpace(arc);}

函数调用:

           //声明图形数据库Database db = HostApplicationServices.WorkingDatabase;Point3d startPoint = new Point3d(100, 100, 0);// 圆弧起点Point3d endPoint = new Point3d(200, 200, 0);// 圆弧终点Point3d pointOnArc = new Point3d(150, 100, 0);// 圆弧上的一个点db.AddArcToModelSpace(startPoint, pointOnArc, endPoint);startPoint = new Point3d(100, 100, 0);// 圆弧起点endPoint = new Point3d(200, 200, 0);// 圆弧终点pointOnArc = new Point3d(150, 150, 0);// 圆弧上的一个点db.AddArcToModelSpace(startPoint, pointOnArc, endPoint);

注意第一段代码三点不共线,可以绘制圆弧,第二段代码,三点共线不绘制圆弧。

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

相关文章:

  • 企业门户网站建设教程江苏建设官方网站
  • Spring Boot 项目标准目录结构
  • Flutter 框架设计与高效执行原理解析
  • 优秀门户网站欣赏泰安网站制作排行
  • jank实现C++无缝互操作的技术探索
  • 不允许做企业网站本地网站做不大
  • 企业网站需要在电信做哪些备案建设春秋龙卡信用卡网站
  • ArkTS 自定义组件与 @Builder 区别总结
  • Docker的主要功能及应用
  • 网站的构造前十强排名家装公司
  • 对上篇ipc 比较完美应用框架设计拓展
  • dede采集规则下载网站网站首页设计教程
  • AI+通信+多模态应用分类与核心内容总结
  • android kotlin语言中的协程
  • 1.4.5 大数据方法论与实践指南-安全合规
  • 分析 Linux 内核 TLS 子系统中的 1day 漏洞
  • 建站申请搜狗友链交换
  • ui设计 国外网站开个公司做购物网站
  • 东莞企业网站建设公司搜索引擎下载安装
  • 从传统SEO到GEO:杨建允在AI搜索优化领域的贡献和行业应用成果
  • 石家庄微信网站免费成品网站
  • gRPC over UDS 与 gRPC 一般模式深度技术分析:调用逻辑与资源限制全解析
  • 【1.1】基于FPGA的Costas环开发案例——前言/目录
  • 微网站 报价微信小程序 网站开发
  • UE5 蓝图-20:主 mainUI 界面蓝图,右边的颜色按钮的位置布局及其动画 colorsBtn_Animation,
  • 【图像算法 - 32】基于深度学习的风力发电设备缺陷检测系统:YOLOv12 + UI界面 + 数据集实现
  • 做网站学什么专业做淘客找单子的网站
  • 51单片机基础-红外遥控(NEC协议)
  • 响应式网站开发设计网站怎么做推广和宣传语
  • 大气网站背景图江苏建筑网站建设