//先将DXF文件中的Ellipse 解析到elpList 中
foreach (Ellipse ellipse in elpList)
{ //定义一个矩形 RectangleF rect = new RectangleF(); //长轴 float r1 = Convert.ToSingle(ellipse.MajorAxis) * m_fratio; //短轴 float r2 = Convert.ToSingle(ellipse.MinorAxis) * m_fratio; //旋转角度 float rotAg = Convert.ToSingle(ellipse.Rotation); //中心点 显示坐标转换 PointF pf = DisplayCoordinateConversion(ellipse.Center); GraphicsContainer state = graphics.BeginContainer();// 建一个新绘图状态 graphics.TranslateTransform(pf.X, pf.Y);//坐标系移动到椭圆中心 rect.X = r1 / -2; rect.Y = r2 / -2; rect.Width = r1; rect.Height = r2; graphics.RotateTransform(Math.Abs(rotAg - 180f)); //坐标旋转一定角度 graphics.DrawEllipse(pen1, rect);//绘制椭圆 graphics.EndContainer(state);// 关闭绘图状态 }
显示坐标转换方法:
/// <summary> /// 显示坐标转换 /// 把DXF文件的三维坐标点转换成PictureBox显示的坐标点 /// </summary> /// <param name="vector3">输入的三维坐标点</param> /// <returns>返回转换完成的显示坐标点</returns> public PointF DisplayCoordinateConversion(Vector3 vector3) { PointF pf = new PointF { X = Convert.ToSingle(vector3.X - viewcCenterX) * m_fratio * m11 + m13, Y = Convert.ToSingle(vector3.Y - viewcCenterY) * m_fratio * m22 + m23 }; return pf; }
用到变量:
/// <summary> /// 显示比例 /// </summary> static float m_fratio; /// <summary> /// 起始角度 /// </summary> static float starAg; /// <summary> /// 范围角度 /// </summary> static float sweepAg; /// <summary> /// X 坐标偏移比例 /// </summary> static float m11; /// <summary> /// Y 坐标偏移比例 /// </summary> static float m22; /// <summary> /// 坐标偏移量 X /// </summary> static float m13; /// <summary> /// 坐标偏移量 Y /// </summary> static float m23; /// <summary> /// DXF文件视窗中点X坐标 /// </summary> static double viewcCenterX; /// <summary> /// DXF文件视窗中点Y坐标 /// </summary> static double viewcCenterY; /// <summary> /// DXF文件视窗高度 /// </summary> static double viewcCenterH; m11 = 1f; m22 = -1f; m13 = 0f; m23 = 0f; //视窗中心坐标 viewcCenterX = dxf.Viewport.ViewCenter.X; viewcCenterY = dxf.Viewport.ViewCenter.Y; //视窗高度 viewcCenterH = dxf.Viewport.ViewHeight; //根据视窗高度和显示框高度调整图形显示比例 m_fratio = (float)(MainPic.Size.Height / viewcCenterH);
浙公网安备 33010602011771号