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

📄 dxfarc.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 DXFArc:DXFFigure
    {
        // Fields
        private ArcType type;

        // Methods
        public DXFArc()
        {
        }

        public DXFArc(DXFData aData)
            : base(aData)
        {
            this.type = (ArcType)aData.selfType;
        }

        public override void ExportAsDXF(DXFExport ADXFExport)
        {
            switch (this.type)
            {
                case ArcType.atCircle:
                    ADXFExport.AddName("ARC", "AcDbCircle");
                    ADXFExport.AddColor(base.data);
                    ADXFExport.AddThickness(base.data);
                    ADXFExport.Add3DPoint(10, base.data.point);
                    ADXFExport.AddFloat(40, ADXFExport.MM(base.data.radius));
                    ADXFExport.current.Add("100");
                    ADXFExport.current.Add("AcDbArc");
                    ADXFExport.AddFloat(50, base.data.startAngle);
                    ADXFExport.AddFloat(0x33, base.data.endAngle);
                    return;

                case ArcType.atEllipse:
                    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);
                    if (Math.Abs((float)(base.data.startAngle - base.data.endAngle)) > DXFExport.accuracy)
                    {
                        ADXFExport.AddFloat(0x29, base.data.startAngle);
                        ADXFExport.AddFloat(0x2a, base.data.endAngle);
                    }
                    return;
            }
        }

        public override bool IntersecRect(Rect aRect)
        {
            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 - base.data.radius)), (int)Math.Round((double)(base.data.point.Y - base.data.radius)), (int)Math.Round((double)(base.data.point.X + base.data.radius)), (int)Math.Round((double)(base.data.point.Y + base.data.radius))));
            if (((rectangle.X <= 0) && (rectangle.Y <= 0)) && ((rectangle.Width <= 0) && (rectangle.Height <= 0)))
            {
                return false;
            }
            return true;
        }

        public override void ParseToLines(ArrayList NewElemes)
        {
            DXFLine line = new DXFLine(base.data);
            DXFPoint point = new DXFPoint();
            float x = base.data.point.X;
            float y = base.data.point.Y;
            float radius = base.data.radius;
            float num4 = radius;
            float num5 = (base.data.startAngle * 3.141593f) / 180f;
            float num6 = (base.data.endAngle * 3.141593f) / 180f;
            if (num6 <= num5)
            {
                num6 += 6.283185f;
            }
            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;
                NewElemes.Add(line.Clone());
                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();
            }
        }

        // Properties
        public float EndAngle
        {
            get
            {
                return base.data.endAngle;
            }
            set
            {
                base.data.endAngle = value;
            }
        }

        public DXFPoint Point
        {
            get
            {
                return base.data.point;
            }
            set
            {
                base.data.point = value;
            }
        }

        public float Radius
        {
            get
            {
                return base.data.radius;
            }
            set
            {
                base.data.radius = value;
            }
        }

        public float StartAngle
        {
            get
            {
                return base.data.startAngle;
            }
            set
            {
                base.data.startAngle = value;
            }
        }

    }
}

⌨️ 快捷键说明

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