/// <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;
}
C#,CAD二次开发,基于参考面参考点计算一个点的坐标
最新推荐文章于 2024-07-07 21:00:30 发布