天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 6|回复: 0

OBJECTARX编程之圆弧

[复制链接]
  • TA的每日心情
    开心
    昨天 15:23
  • 签到天数: 69 天

    [LV.6]常住居民II

    410

    主题

    167

    回帖

    2704

    积分

    管理员

    积分
    2704
    发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
    AcGePoint3d CCalculation::Pt2dTo3d(AcGePoint2d pt)
    {
        AcGePoint3d ptTemp(pt.x,pt.y,0);
        return ptTemp;
    }
    #include <math.h>
    double CCalculation::PI()
    {
        return* atan(1.0);
    }



    //创建圆弧
    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);
    }




    #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编程之圆弧
    中国膜结构网打造全中国最好的膜结构综合平台 ,统一协调膜结构设计,膜结构施工,膜材采购,膜材定制,膜结构预算全方位服务。 中国空间膜结构协会合作单位。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|

    GMT+8, 2024-7-1 05:28 , Processed in 0.059692 second(s), 23 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表