⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dxfellipse.cs

📁 导出dxf的原码类库,根据国外一个反编译的
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Drawing;

namespace DXFFile
{
    public class DXFEllipse:DXFFigure
    {
        // Fields
        private bool ellipse;

        // Methods
        public DXFEllipse()
        {
            this.ellipse = false;
        }

        public DXFEllipse(DXFData aData, bool aEllipse)
            : base(aData)
        {
            this.ellipse = false;
            this.ellipse = aEllipse;
        }

        public override void ExportAsDXF(DXFExport ADXFExport)
        {
            if (!this.ellipse)
            {
                ADXFExport.AddName("CIRCLE", "AcDbCircle");
                ADXFExport.AddColor(base.data);
                ADXFExport.AddThickness(base.data);
                ADXFExport.Add3DPoint(10, base.data.point);
                ADXFExport.AddFloat(40, ADXFExport.MM(base.data.radius));
            }
            else
            {
                ADXFExport.AddName("ELLIPSE", "AcDbEllipse");
                ADXFExport.AddColor(base.data);
                ADXFExport.AddThickness(base.data);
                ADXFExport.Add3DPoint(10, base.data.point);
                ADXFExport.Add3DPoint(11, base.data.point1);
                ADXFExport.AddFloat(40, base.data.radius);
            }
        }

        public override bool IntersecRect(Rect aRect)
        {
            float radius;
            float num2;
            if (!this.ellipse)
            {
                radius = base.data.radius;
                num2 = radius;
            }
            else
            {
                radius = Math.Abs((float)(base.data.point1.X - base.data.point.X));
                num2 = Math.Abs((float)(base.data.point1.Y - base.data.point.Y));
                if (radius == 0f)
                {
                    radius = num2 * base.data.radius;
                }
                if (num2 == 0f)
                {
                    num2 = radius * base.data.radius;
                }
            }
            Rectangle rectangle = new Rectangle(0, 0, 0, 0);
            rectangle = Rectangle.Intersect(new Rectangle(aRect.X1, aRect.Y1, aRect.X2, aRect.Y2), new Rectangle((int)Math.Round((double)(base.data.point.X - radius)), (int)Math.Round((double)(base.data.point.Y - num2)), (int)Math.Round((double)(base.data.point.X + radius)), (int)Math.Round((double)(base.data.point.Y + num2))));
            if (((rectangle.X <= 0) && (rectangle.Y <= 0)) && ((rectangle.Width <= 0) && (rectangle.Height <= 0)))
            {
                return false;
            }
            return true;
        }

        public override void ParseToLines(ArrayList NewElemes)
        {
            float radius;
            float num4;
            DXFPoint point = new DXFPoint();
            DXFLine line = new DXFLine();
            float x = base.data.point.X;
            float y = base.data.point.Y;
            if (!this.ellipse)
            {
                radius = base.data.radius;
                num4 = radius;
            }
            else
            {
                radius = Math.Abs(base.data.point1.X);
                num4 = Math.Abs(base.data.point1.Y);
                if (radius == 0f)
                {
                    radius = num4 * base.data.radius;
                }
                if (num4 == 0f)
                {
                    num4 = radius * base.data.radius;
                }
            }
            float num5 = (base.data.startAngle * 3.141593f) / 180f;
            float num6 = (base.data.endAngle * 3.141593f) / 180f;
            int num11 = (int)Math.Round((double)(((num6 - num5) / 3.141593f) * 16f));
            if (num11 < 4)
            {
                num11 = 4;
            }
            float num7 = (num6 - num5) / ((float)(num11 - 1));
            for (int i = 0; i < (num11 - 2); i++)
            {
                line.Layer = base.Layer;
                float num8 = (float)Math.Sin((double)num5);
                float num9 = (float)Math.Cos((double)num5);
                point.X = x + (radius * num9);
                point.Y = y + (num4 * num8);
                line.StartPoint = (DXFPoint)point.Clone();
                num5 += num7;
                num8 = (float)Math.Sin((double)num5);
                num9 = (float)Math.Cos((double)num5);
                point.X = x + (radius * num9);
                point.Y = y + (num4 * num8);
                line.EndPoint = (DXFPoint)point.Clone();
                NewElemes.Add(line.Clone());
            }
        }

        public void SetEllipse()
        {
            if (base.data.point1.X > base.data.point1.Y)
            {
                base.data.point1.X = base.data.radius;
                base.data.radius = base.data.point1.Y;
                base.data.point1.Y = 0f;
            }
            else
            {
                base.data.point1.Y = base.data.radius;
                base.data.radius = base.data.point1.X;
                base.data.point1.X = 0f;
            }
        }

        // Properties
        public DXFPoint LeftTop
        {
            get
            {
                if (this.ellipse)
                {
                    return (DXFPoint)base.data.point.Clone();
                }
                return new DXFPoint(base.data.point.X - base.data.radius, base.data.point.Y - base.data.radius, 0f);
            }
        }

        public DXFPoint PCenter
        {
            get
            {
                return (DXFPoint)base.data.point.Clone();
            }
            set
            {
                base.data.point = (DXFPoint)value.Clone();
            }
        }

        public DXFPoint RightBottom
        {
            get
            {
                if (this.ellipse)
                {
                    return new DXFPoint(base.data.point.X + (base.data.scale.X * 10f), base.data.point.Y - (base.data.scale.Y * 10f), 0f);
                }
                return new DXFPoint(base.data.point.X + base.data.radius, base.data.point.Y + base.data.radius, 0f);
            }
        }

    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -