设为首页收藏本站

中国膜结构网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

膜结构车棚
膜结构车棚膜结构资质国产膜材 膜结构网中国膜结构协会
查看: 209|回复: 0

ObjectARX编程--圆弧

[复制链接]
  • TA的每日心情
    开心
    2021-6-19 14:40
  • 签到天数: 1539 天

    [LV.Master]伴坛终老

    发表于 2020-12-29 15:22 | 显示全部楼层 |阅读模式
    1. 创建圆弧
    2. CCalculation.cpp
    3. AcGePoint3d CCalculation::Pt2dTo3d(AcGePoint2d pt)
    4. {
    5.     AcGePoint3d ptTemp(pt.x,pt.y,0);
    6.     return ptTemp;
    7. }
    8. #include <math.h>
    9. double CCalculation::PI()
    10. {
    11.     return* atan(1.0);
    12. }
    13. 1
    14. 2
    15. 3
    16. 4
    17. 5
    18. 6
    19. 7
    20. 8
    21. 9
    22. 10
    23. CreateEnt.cpp
    24. //创建圆弧
    25. AcDbObjectId CCreateEnt::CreateArc(AcGePoint3d ptCenter, AcGeVector3d vec, double radius, double starAngle, double endAngle)
    26. {
    27.     AcDbArc *pArc = new AcDbArc(ptCenter, vec, radius, startAngle, endAngle);
    28.     //(圆心,平面,半径,起点角度,终点角度)
    29.     /*StartAngle和EndAngle并不是起终点的角度,StartAngle可以认为是个参考角,
    30.     默认是0,如果将圆弧绕圆心旋转10度,那这个StartAngle就是10度,EndAngle始终不变,是圆弧的圆心角。*/
    31.     AcDbObjectId arcId;
    32.     arcId = CCreate::PostToModelSpace(pArc);
    33.     return arcId;
    34. }

    35. //创建位于XOY平面上的圆弧的函数
    36. AcDbObjectId CCreateEnt::CreateArc(AcGePoint2d ptCenter, double radius, double startAngle, double endAngle)
    37. {
    38.     AcGeVector3d vec(0,0,1);
    39.     return CCreateEnt::CreateArc(CCalculation::Pt2dTo3d(ptCenter),vec,radius,startAngle,endAngle);
    40. }

    41. //三点法创建圆弧
    42. AcDbObjectId CCreateEnt::CreateArc(AcGePoint2d ptStart, AcGePoint2d ptOnArc, AcGePoint2d ptEnd)
    43. {
    44.     //使用几何类获得圆心,半径
    45.     AcGeCircArc2d geArc(ptStart, ptOnArc, ptEnd);
    46.     AcGePoint2d ptCenter = geArc.center();
    47.     double radius = geArc.radius();

    48.     //计算起始和终止角度
    49.     AcGeVector2d vecStart(ptStart.x - ptCenter.x, ptStart.y - ptCenter.y);
    50.     AcGeVector2d vecEnd(ptEnd.x - ptCenter.x, ptEnd.y - ptCenter.y);
    51.     double startAngle = vecStart.angle();
    52.     double endAngle = vecEnd.angle();       
    53.     /*AcGeVector2d 类用来表示一个二维空间中的矢量,
    54.     其成员函数 angle 返回该矢量和 X 轴正半轴的角度(用弧度来表示)。*/
    55.     return CCreateEnt::CreateArc(ptCenter, radius, startAngle, endAngle);
    56. }

    57. //"起点,圆心,终点"创建圆弧
    58. //这个函数的名称不再是 CreateArc,而是 CreateArcSCE,这是因为该函数的参数列表、返回值都与三点法的函数相同,无法实现函数的重载,就只能重新定义一个新的函数名称。
    59. AcDbObjectId CCreateEnt::CreateArcSCE(AcGePoint2d ptStart, AcGePoint2d ptCenter, AcGePoint2d ptEnd)
    60. {
    61.     //计算半径
    62.     double radius = ptCenter.distanceTo(ptStart);
    63.     //计算起,终点角度
    64.     AcGeVector2d vecStart(ptStart.x - ptCenter.x, ptStart.y - ptCenter.y);
    65.     AcGeVector2d vecEnd(ptEnd.x - ptCenter.x, ptEnd.y - ptCenter.y);
    66.     double startAngle = vecStart.angle();
    67.     double endAngle = vecEnd.angle();
    68.     //创建圆弧
    69.     return CCreateEnt::CreateArc(ptCenter, radius, startAngle, endAngle);
    70. }
    71. //"起点,圆心,圆弧角度"创建圆弧
    72. AcDbObjectId CCreateEnt::CreateArc(AcGePoint2d ptStart, AcGePoint2d ptCenter, double angle)
    73. {
    74.     //计算半径
    75.     double radius = ptCenter.distanceTo(ptStart);
    76.     //计算起点,终点角度
    77.     AcGeVector2d vecStart(ptStart.x - ptCenter.x, ptStart.y - ptCenter.y);
    78.     double startAngle = vecStart.angle();
    79.     double endAngle = startAngle + angle;

    80.     //创建圆弧
    81.     return CCreateEnt::CreateArc(ptCenter, radius, startAngle, endAngle);
    82. }
    83. 1
    84. 2
    85. 3
    86. 4
    87. 5
    88. 6
    89. 7
    90. 8
    91. 9
    92. 10
    93. 11
    94. 12
    95. 13
    96. 14
    97. 15
    98. 16
    99. 17
    100. 18
    101. 19
    102. 20
    103. 21
    104. 22
    105. 23
    106. 24
    107. 25
    108. 26
    109. 27
    110. 28
    111. 29
    112. 30
    113. 31
    114. 32
    115. 33
    116. 34
    117. 35
    118. 36
    119. 37
    120. 38
    121. 39
    122. 40
    123. 41
    124. 42
    125. 43
    126. 44
    127. 45
    128. 46
    129. 47
    130. 48
    131. 49
    132. 50
    133. 51
    134. 52
    135. 53
    136. 54
    137. 55
    138. 56
    139. 57
    140. 58
    141. 59
    142. 60
    143. 61
    144. 62
    145. 63
    146. 64
    147. acrxEntryPoint.cpp
    148. #include "Calculation.h"
    149. static void MLMyGroupAddArc()
    150. {
    151.     // 创建位于XOY平面上的圆弧-
    152.     AcGePoint2d ptCenter(50, 50);
    153.     CCreateEnt::CreateArc(ptCenter, 100 * sqrt((double)2) / 2, 5 * CCalculation::PI() / 4, 7 * CCalculation::PI() / 4);
    154.   
    155.     // 三点法创建圆弧-右
    156.     AcGePoint2d ptStart(100, 0);
    157.     AcGePoint2d ptOnArc(120, 50);
    158.     AcGePoint2d ptEnd(100, 100);
    159.     CCreateEnt::CreateArc(ptStart, ptOnArc, ptEnd);
    160.   
    161.     // “起点、圆心、终点”创建圆弧
    162.     ptStart.set(100, 100);
    163.     ptCenter.set(50, 50);
    164.     ptEnd.set(0, 100);
    165.     CCreateEnt::CreateArcSCE(ptStart, ptCenter, ptEnd);
    166.   
    167.     // “起点、圆心、圆弧角度”创建圆弧
    168.     ptStart.set(0, 100);
    169.     ptCenter.set(50, 50);
    170.     CCreateEnt::CreateArc(ptStart, ptCenter, CCalculation::PI() / 2);
    171. }
    复制代码
    回复


    http://www.mjgw.org/ 专业从事膜结构设计、制作加工、施工安装的膜结构工程服务,能够为客户提供专业的膜结构整体解决方案。做中国最好的膜结构综合服务平台。欢迎大家联系电话:198-7840-1958,QQ:463017170.
    相关关键词:膜结构车棚,膜结构车棚覆盖,膜结构车棚公司,膜结构车棚多少钱,膜结构车棚厂家,膜结构车棚价格,社区膜结构车棚,膜结构车棚膜布厂家 ,膜结构车棚哪家好,膜结构车棚多少钱一米,膜结构车棚报价,膜结构车棚哪里有,膜结构车棚定制,膜结构车棚安装,膜结构车棚设计,膜结构车棚电话,膜结构车棚加工,膜结构车棚膜布价格,膜结构车棚批发,膜结构车棚制造商,膜结构车棚生产厂家,膜结构车棚设计,膜结构车棚施工,膜结构车棚多少钱一平米,膜结构车棚订制,张拉膜车棚,张拉膜车棚覆盖,张拉膜车棚公司,张拉膜车棚多少钱,张拉膜车棚厂家,张拉膜车棚价格,社区张拉膜车棚,张拉膜车棚膜布厂家 ,张拉膜车棚哪家好,张拉膜车棚多少钱一米,张拉膜车棚报价,张拉膜车棚哪里有,张拉膜车棚定制,张拉膜车棚安装,张拉膜车棚设计,张拉膜车棚电话,张拉膜车棚加工,张拉膜车棚膜布价格,张拉膜车棚批发,张拉膜车棚制造商,张拉膜车棚生产厂家,张拉膜车棚设计,张拉膜车棚施工,张拉膜车棚多少钱一平米,张拉膜车棚订制,常用膜材品牌:德国杜肯、法国法拉利、德国海德斯、德国米乐、日本平岗、韩国秀博、比利时希运、美国赫虏伯、中国科宝、上海慧遥。

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    推荐膜材品牌上一条 /6 下一条

    进口膜材 国产膜材 pvdf膜材ptfe膜材ETFE膜材
    最好的膜结构公司 一级膜结构资质 膜结构一级资质
    膜结构设计-膜结构十大品牌-etfe设计-充气膜结构
    诺科膜结构
    遨都膜结构设计
    中国膜结构网
    中国空间膜结构

    QQ|申请友链|手机版|中国膜结构论坛