创建圆弧

CCalculation.cpp

AcGePoint3d CCalculation::Pt2dTo3d(AcGePoint2d pt)
{ AcGePoint3d ptTemp(pt.x,pt.y,0);return ptTemp;
}
#include <math.h>
double CCalculation::PI()
{return* atan(1.0);
}

CreateEnt.cpp

//创建圆弧
AcDbObjectId CCreateEnt::CreateArc(AcGePoint3d ptCenter, AcGeVector3d vec, double radius, double starAngle, double endAngle)
{ AcDbArc *pArc = new AcDbArc(ptCenter, vec, radius, startAngle, endAngle);//(圆心,平面,半径,起点角度,终点角度)/*StartAngle和EndAngle并不是起终点的角度,StartAngle可以认为是个参考角,默认是0,如果将圆弧绕圆心旋转10度,那这个StartAngle就是10度,EndAngle始终不变,是圆弧的圆心角。*/AcDbObjectId arcId;arcId = CCreate::PostToModelSpace(pArc); return arcId;
}//创建位于XOY平面上的圆弧的函数
AcDbObjectId CCreateEnt::CreateArc(AcGePoint2d ptCenter, double radius, double startAngle, double endAngle)
{AcGeVector3d vec(0,0,1);return CCreateEnt::CreateArc(CCalculation::Pt2dTo3d(ptCenter),vec,radius,startAngle,endAngle);
}//三点法创建圆弧
AcDbObjectId CCreateEnt::CreateArc(AcGePoint2d ptStart, AcGePoint2d ptOnArc, AcGePoint2d ptEnd)
{//使用几何类获得圆心,半径AcGeCircArc2d geArc(ptStart, ptOnArc, ptEnd);AcGePoint2d ptCenter = geArc.center();double radius = geArc.radius();//计算起始和终止角度AcGeVector2d vecStart(ptStart.x - ptCenter.x, ptStart.y - ptCenter.y);AcGeVector2d vecEnd(ptEnd.x - ptCenter.x, ptEnd.y - ptCenter.y);double startAngle = vecStart.angle();double endAngle = vecEnd.angle(); /*AcGeVector2d 类用来表示一个二维空间中的矢量,其成员函数 angle 返回该矢量和 X 轴正半轴的角度(用弧度来表示)。*/return CCreateEnt::CreateArc(ptCenter, radius, startAngle, endAngle);
}//"起点,圆心,终点"创建圆弧
//这个函数的名称不再是 CreateArc,而是 CreateArcSCE,这是因为该函数的参数列表、返回值都与三点法的函数相同,无法实现函数的重载,就只能重新定义一个新的函数名称。
AcDbObjectId CCreateEnt::CreateArcSCE(AcGePoint2d ptStart, AcGePoint2d ptCenter, AcGePoint2d ptEnd)
{//计算半径double radius = ptCenter.distanceTo(ptStart);//计算起,终点角度AcGeVector2d vecStart(ptStart.x - ptCenter.x, ptStart.y - ptCenter.y);AcGeVector2d vecEnd(ptEnd.x - ptCenter.x, ptEnd.y - ptCenter.y);double startAngle = vecStart.angle();double endAngle = vecEnd.angle();//创建圆弧return CCreateEnt::CreateArc(ptCenter, radius, startAngle, endAngle);
}
//"起点,圆心,圆弧角度"创建圆弧
AcDbObjectId CCreateEnt::CreateArc(AcGePoint2d ptStart, AcGePoint2d ptCenter, double angle)
{//计算半径double radius = ptCenter.distanceTo(ptStart);//计算起点,终点角度AcGeVector2d vecStart(ptStart.x - ptCenter.x, ptStart.y - ptCenter.y);double startAngle = vecStart.angle();double endAngle = startAngle + angle;//创建圆弧return CCreateEnt::CreateArc(ptCenter, radius, startAngle, endAngle);
}

acrxEntryPoint.cpp

#include "Calculation.h"
static void MLMyGroupAddArc()
{// 创建位于XOY平面上的圆弧-AcGePoint2d ptCenter(50, 50); CCreateEnt::CreateArc(ptCenter, 100 * sqrt((double)2) / 2, 5 * CCalculation::PI() / 4, 7 * CCalculation::PI() / 4); // 三点法创建圆弧-右AcGePoint2d ptStart(100, 0); AcGePoint2d ptOnArc(120, 50); AcGePoint2d ptEnd(100, 100); CCreateEnt::CreateArc(ptStart, ptOnArc, ptEnd); // “起点、圆心、终点”创建圆弧ptStart.set(100, 100); ptCenter.set(50, 50); ptEnd.set(0, 100); CCreateEnt::CreateArcSCE(ptStart, ptCenter, ptEnd); // “起点、圆心、圆弧角度”创建圆弧ptStart.set(0, 100); ptCenter.set(50, 50); CCreateEnt::CreateArc(ptStart, ptCenter, CCalculation::PI() / 2);
}

实现效果

ObjectARX编程--圆弧相关推荐

  1. 数控铣编程圆弧中心坐标l'j'k的区别

    圆弧中心坐标是指圆弧的中心在工件坐标系中的位置.'l'.'j'.'k'代表着圆弧中心在工件坐标系中的X.Y.Z轴上的坐标.在数控铣编程中,使用圆弧中心坐标可以更精确地控制加工过程,并使得加工的结果更加 ...

  2. ObjectARX编程(六) ------块和属性

    1. 块的新增 cstring blkname; //获取当前图形数据库 AcDbBlockTable* pBlkTbl = NULL; acdbHostApplicationServices()-& ...

  3. ObjectARX编程--直线

    最近在学习ObjectARX,于是想着把一些东西写到这里供个人和大家参考,博客中出现的问题我会尽快改正,全篇代码基于<[c++]ObjectARX开发实例教程>进行整理与扩展,至于能够做到 ...

  4. ObjectARX编程--圆

    最近在学习ObjectARX,于是想着把一些东西写到这里供个人和大家参考,博客中出现的问题我会尽快改正,全篇代码基于<[c++]ObjectARX开发实例教程>进行整理与扩展,至于能够做到 ...

  5. ObjectARX编程工具所有版本下载地址(最新含ObjectARX 2017)

    2015 (32位和64位版本)下载: http://download.autodesk.com/esd ... n_64_and_32_Bit.exe 2016 (32位和64位版本)下载: htt ...

  6. C++ CAD ObjectARX 2018介绍

    ObjectARX 2018目前最新的版本是ObjectARX2018.它是开发AutoCAD的核心,是最为高效的开发AutoCAD的工具.通过支持XML,为ObjectARX开发网络协作应用提供了有 ...

  7. VC6.0中ObjectARX应用程序的加载与运行

    使用  ObjectARX ,首先要确定你的目标平台,获得适当的开发环境.如果你是在 AutoCAD2002  平台上开发,你就需要具备下面的工具和软件: � AutoCAD 2002 中文版或英文版 ...

  8. (7)ObjectARX2015 + vs2012创建多段线以及实体的旋转移动放缩

    提示:看之前的博客(1)和(4),那里已经分析了创建一个图形对象的基本过程,在之前的基础上本节开始就要将着眼点放在创建实体的参数上. (1)ObjectARX2015 + vs2012创建直线_qq_ ...

  9. (18)ObjectARX2015 + vs2012插入块参照

    1. 说明         本例允许用户输入一个块参照的名称,指定块参照的插入点等参数,然后将块参照插 入到模型空间. 2. 思路         AutoCAD 有块定义和块参照两个概念.这两个概念 ...

最新文章

  1. 解决 python pip install安装速度慢| 版本低|跨过个别错误包
  2. Linux Centos7.x 安装部署Mysql5.7几种方式的操作手册
  3. Hihocoder-1135-Magic Box
  4. 【C++ Primer学习笔记】第2章:变量和基本类型
  5. 函数对象 函数嵌套 名称空间与作用域
  6. c程序在solaris与linux的不同,在Solaris上编译应用程序时,在Linux上使用Valgrind也会有所帮助吗?...
  7. 内核kconfig语法及原理
  8. pandas中dataframe的索引问题
  9. C# list使用方法
  10. SQLServer数据库备份与还原
  11. 天锐绿盾报税软件 银行软件 财务软件报错病毒解决
  12. 2021最新Node.js视频教程(基础+全栈项目)
  13. 树莓派29/100 - 树莓派接上Kindle的墨水屏是什么体验?
  14. 服务器安装固态硬盘的步骤,电脑安装固态硬盘及安装系统的详细教程
  15. 如何理解 图像傅里叶变换的频谱图
  16. 查询一整天的数据 0点0分0秒之后 23点59分59秒之前
  17. 密码疑云 (2)——RSA加密机制需要的数学知识
  18. java中设置基偶隔行换色_Excel2016中奇偶行填充不同颜色的方法
  19. 希尔排序(实现+总结)
  20. 微型计算机控制数字量输入输出,[工学]WX_微型计算机控制技术_第二章5.ppt

热门文章

  1. 关于android Window Leaked异常的解决方法
  2. 三年308%投资回报!IDC点评戴尔科技存储家族
  3. 各国黑客暗中较量网络战场 美国网络部队成型
  4. BZOJ 4244 邮戳拉力赛
  5. 我的第一个应用(二)
  6. 服务器cpu散热原理,游戏服务器需要怎样的CPU散热风扇
  7. UnityShader第六章学习笔记
  8. 保持忠贞是不容易的,需要持续付出努力
  9. 如何攻击网络中的计算机,计算机网络攻击的步骤
  10. 百度地图API 添加自定义标注 多点标注