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

最新文章

  1. 玩转Windows服务系列——命令行管理Windows服务
  2. ld: framework not found AGCommon 关于三方库到入 问题解决方案!!
  3. 一款好用的杀毒软件-pchunter64
  4. JSON Web Token - 在Web应用间安全地传递信息(zhuan)
  5. 【linux】之安装mysql常用配置
  6. bash学习之变量的显示和设置
  7. ASP.NET和支付宝合作开发第三方接口的注意事项
  8. Ajax基础知识(一)
  9. java开发环境配置——IntelliJ IDEA
  10. Firefox控制台日志转入文件
  11. 用不到 50 行的 Python 代码构建最小的区块链
  12. ZooKeeper系列(5):ZooKeeper的日志和快照
  13. checkbox操作判断 Jquery选择器
  14. python-Django-01基础配置
  15. HDUOJ----4501小明系列故事——买年货(三维背包)
  16. 用 S5PV210 学习 Linux (一) 刷机(一)
  17. WP8持续集成之通过命令行跑单元测试
  18. 全文检索及ElasticSearch框架学习
  19. 竞赛题解 - CF Round #524 Div.2
  20. 【历史】- .NET之父 - Anders Hejlsberg

热门文章

  1. 工程师突击:SAP ABAP实用程序开发攻略.pdf
  2. vvvvvv异步组件儿
  3. 公式b-(a-b)
  4. pytorch 独热编码报错的解决办法:one_hot is only applicable to index tensor
  5. 33. Java对异常处理的两种方式
  6. antd DatePicker限制日期的选择
  7. ORACLE备份脚本(4-RMAN1级增量备份)
  8. Python3之并发(七)---线程同步队列(queue)
  9. mongoDB日常操作01
  10. 学习lua-01,遍历集合,多入参循环处理,类型判断,数字运算