//先将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);

posted on 2021-11-12 22:36  中华鲟3670  阅读(385)  评论(0)    收藏  举报

/* 看板娘 */