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

代码片断:GDI绘制带一定角度的椭圆的更多相关文章

  1. C# GDI绘制仪表盘(纯代码实现)

    纯代码实现GDI绘制仪表盘,效果在代码下面. public partial class HalfDashboardUc : UserControl { /// <summary> /// ...

  2. C#利用GDI+绘制旋转文字等效果

    C#中利用GDI+绘制旋转文本的文字,网上有很多资料,基本都使用矩阵旋转的方式实现.但基本都只提及按点旋转,若要实现在矩形范围内旋转文本,资料较少.经过琢磨,可以将矩形内旋转转化为按点旋转,不过需要经 ...

  3. GDI绘制时钟效果,与系统时间保持同步,基于Winform

    2018年工作之余,想起来捡起GDI方面的技术,特意在RichCodeBox项目中做了两个示例程序,其中一个就是时钟效果,纯C#开发.这个CSharpQuartz是今天上午抽出一些时间,编写的,算是偷 ...

  4. Turtle绘制带颜色和字体的图形(Python3)

    转载自https://blog.csdn.net/wumenglu1018/article/details/78184930 在Python中有很多编写图形程序的方法,一个简单的启动图形化程序设计的方 ...

  5. 通过GDI+绘制 验证码

    只为了记录下自己的学习历程,方便日后查看 现在开始言归正传,以下为其完整代码附上 using System; using System.Collections.Generic; using Syste ...

  6. C# 使用GDI+绘制漂亮的MenuStrip和ContextMenuStrip皮肤

    通过上面的效果截图可以看到,重绘后的MenuStrip和ContextMenuStrip可以添加自己的LOGO信息,实现了类似OFFICE2007的菜单显示效果. .NET对菜单控件的绘制提供了一个抽 ...

  7. MFC 用gdi绘制填充多边形区域

    MFC 用gdi绘制填充多边形区域 这里的代码是实现一个三角形的绘制,并用刷子填充颜色 在OnPaint()函数里面 运用的是给定的三角形的三个点,很多个点可以绘制多边形 CBrush br(RGB( ...

  8. 『备注』GDI+ 绘制文本有锯齿,透明背景文本绘制

    背景: GDI+ 绘制文本 时,如果 背景是透明的 —— 则会出现 锯齿. //其实,我不用这三个 属性 好多年了 //而且,这三个属性 在关键时刻还有可能 帮倒忙 //关键是:这三个属性,鸟用都没有 ...

  9. C#GDI+ 绘制线段(实线或虚线)、矩形、字符串、圆、椭圆

    C#GDI+ 绘制线段(实线或虚线).矩形.字符串.圆.椭圆 绘制基本线条和图形 比较简单,直接看代码. Graphics graphics = e.Graphics; //绘制实线 )) { pen ...

  10. 使用 Win2D 绘制带图片纹理的圆(或椭圆)

    使用 Win2D 绘制图片和绘制椭圆都非常容易,可是如何使用 Win2D 绘制图片纹理的椭圆呢? 本文内容 重力迷宫小球 Win2D 实现 关于 CanvasCommandList 重力迷宫小球 ▲ ...

随机推荐

  1. Java 01-Java常用类 System

    System类:系统类,主要用于获取系统的属性和方法,没有构造方法 System的属性都是静态属性,方法都是静态方法 方法: 获取当前系统时间 currentTimeMillis()  返回的是毫秒值 ...

  2. msvc去除控制台窗口的编译指令

    #pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")

  3. Docker-Compose实战<上篇>

    1 什么是 docker-compose? Compose 是用于定义和运行多容器 Docker 应用程序的工具.通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务.然后,使用 ...

  4. python max()用法

    起因是看到一道面试题 "统计字符串中出现次数最多的字符,并返回出现次数" 问题很简单,刚开始没思路,只想到了循环统计,但是觉得太蠢了,直到我发现了max()的key用法,果然还是我 ...

  5. hashMap 获取里面value最大的值得key

    public static void main(String[] args) { Map<String, Integer> map = new HashMap(); map.put(&qu ...

  6. Kubernetes 中审计策略--事件处理

    一.审计日志的策略 1.日志记录阶段 kube-apiserver 是负责接收及相应用户请求的一个组件,每一个请求都会有几个阶段,每个阶段都有对应的日志,当前支持的阶段有: RequestReceiv ...

  7. Linux-centos7 下开放某个端口

    方式一 1.开启防火墙 systemctl start firewalld  2.开放指定端口 firewall-cmd --zone=public --add-port=1935/tcp --per ...

  8. C# 读取Xml文件中的中文

    这是.xml中的内容 <?xml version="1.0" encoding="utf-8"?> <resources> <!- ...

  9. 法拉第未来任命新CFO!贾跃亭激动发声

    近段时间以来,贾跃亭旗下的的法拉第未来(Faraday Future,简称 FF)可谓是动作频频. 一天前,有媒体报道称,FF 任命 Zvi Glasman 为其首席财务官.其将负责公司财务.投资者关 ...

  10. 某星球存在两种生物,A种生物有1个头6条腿,B种生物有3个头4条腿。来自地球的太空船刚刚在该星球降落, 突然发现一大群这两种生物组成的队伍,由于时间紧,只数了头的数量和腿的数量,请帮助宇航员分析A、B两种生物各有多少个。

    package competition;import java.util.Scanner;/*        某星球存在两种生物,A种生物有1个头6条腿,B种生物有3个头4条腿.来自地球的太空船刚刚在 ...