C#,CAD二次开发,基于参考面参考点计算一个点的坐标

   /// <summary>
    /// 计算坐标,返回List
    /// </summary>
    /// <param name="startPoint">参考坐标点</param>
    /// <param name="bottomLeft">参考面的左下角坐标点</param>
    /// <param name="point">要计算的点</param>
    /// <param name="angle">参考面的角度(角度)</param>
    /// <returns></returns>
    private List<double> PointLoc(Point3d startPoint, Point3d bottomLeft, Point3d point, double angle, EntityPmkModel pmkModel)
    {
        List<double> pointLoc = new List<double>();

        if (startPoint.X == 0 || startPoint.Y == 0)
        {
            _doc.PrintMessage("起点的水平和垂直坐标至少有一个为0");
        }

        if (point.X == 0 || point.Y == 0)
        {
            _doc.PrintMessage("特征点的水平和垂直坐标至少有一个为0");
        }

        //得到相对的水平距离
        double length = point.X - bottomLeft.X;
        _doc.PrintMessage("顶高的水平距离是:" + length.ToString("F2"));

        //计算三角函数使用的是弧度制,
        angle = angle * Math.PI / 180;

        double x2 = 0.0;
        double y2 = 0.0;

        //起点X大于终点X,起点Y小于终点Y,(90,180)
        if (pmkModel.PmStartPointX > pmkModel.PmEndPointX && pmkModel.PmStartPointY < pmkModel.PmEndPointY)
        {
            //根据给的起点计算坐标,CAD中坐标与现实中坐标是相反的
            x2 = startPoint.Y - length * Math.Sin(angle);
            y2 = startPoint.X - length * Math.Cos(angle);
        }
        //起点X小于等于终点X,起点Y小于等于终点Y,[0,90]
        else if (pmkModel.PmStartPointX <= pmkModel.PmEndPointX && pmkModel.PmStartPointY <= pmkModel.PmEndPointY)
        {
            //根据给的起点计算坐标,CAD中坐标与现实中坐标是相反的
            x2 = startPoint.Y + length * Math.Sin(angle);
            y2 = startPoint.X + length * Math.Cos(angle);
        }
        //起点X小于等于终点X,起点Y大于等于终点Y,[270,360)
        else if (pmkModel.PmStartPointX <= pmkModel.PmEndPointX && pmkModel.PmStartPointY >= pmkModel.PmEndPointY)
        {
            //根据给的起点计算坐标,CAD中坐标与现实中坐标是相反的
            x2 = startPoint.Y + length * Math.Sin(angle);
            y2 = startPoint.X + length * Math.Cos(angle);
        }
        //起点X大于终点X,起点Y大于终点Y,(180,270)
        else if (pmkModel.PmStartPointX > pmkModel.PmEndPointX && pmkModel.PmStartPointY > pmkModel.PmEndPointY)
        {
            //根据给的起点计算坐标,CAD中坐标与现实中坐标是相反的
            x2 = startPoint.Y - length * Math.Sin(angle);
            y2 = startPoint.X - length * Math.Cos(angle);
        }
        //起点X大于终点X,起点Y等于终点Y,180
        else if (pmkModel.PmStartPointX > pmkModel.PmEndPointX && pmkModel.PmStartPointY > pmkModel.PmEndPointY)
        {
            //根据给的起点计算坐标,CAD中坐标与现实中坐标是相反的
            x2 = startPoint.Y + length * Math.Sin(angle);
            y2 = startPoint.X + length * Math.Cos(angle);
        }

        //依次将点添加到List里面
        pointLoc.Add(x2);
        pointLoc.Add(y2);

        return pointLoc;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值