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

📄 dxfpolyline.cs

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

namespace DXFFile
{
    public class DXFPolyline : DXFFigure
    {
        // Methods
        public DXFPolyline()
        {
        }

        public DXFPolyline(DXFData aData, int aIndex)
            : base(aData)
        {
            if ((aData.count > 0) && (aIndex < aData.count))
            {
                this.Clear();
                base.data.count = base.data.points.Count;
                new ArrayList();
                for (int i = 0; i < ((ArrayList)aData.points[aIndex]).Count; i++)
                {
                    DXFPoint point = (DXFPoint)((ArrayList)aData.points[aIndex])[i];
                    if (point.X < base.data.point.X)
                    {
                        base.data.point.X = point.X;
                    }
                    if (point.Y < base.data.point.Y)
                    {
                        base.data.point.Y = point.Y;
                    }
                    if (point.X > base.data.point1.X)
                    {
                        base.data.point1.X = point.X;
                    }
                    if (point.Y > base.data.point1.Y)
                    {
                        base.data.point1.Y = point.Y;
                    }
                    this.Points.Add(point);
                }
            }
        }

        public void AddRect(Rectangle aRect)
        {
            if (this.PointCount == 0)
            {
                this.Clear();
                ArrayList list = new ArrayList();
                DXFPoint point = new DXFPoint();
                point.X = aRect.Left;
                point.Y = aRect.Top;
                list.Add(point);
                point.X = aRect.Right;
                point.Y = aRect.Top;
                list.Add(point);
                point.X = aRect.Right;
                point.Y = aRect.Bottom;
                list.Add(point);
                point.X = aRect.Left;
                point.Y = aRect.Bottom;
                list.Add(point);
            }
            else
            {
                for (int i = 0; i < (this.PointCount - 2); i++)
                {
                    int num2;
                    for (int j = 1; j < 4; j++)
                    {
                        DXFPoint point2 = new DXFPoint();
                        this.Points.Add(point2);
                    }
                    if ((((((DXFPoint)this.Points[i]).X == aRect.Left) && (((DXFPoint)this.Points[i + 1]).X == aRect.Left)) && ((((DXFPoint)this.Points[i]).Y > aRect.Top) || (((DXFPoint)this.Points[i + 1]).Y > aRect.Bottom))) || ((((DXFPoint)this.Points[i]).Y >= aRect.Top) && (((DXFPoint)this.Points[i + 1]).Y >= aRect.Bottom)))
                    {
                        num2 = i + 1;
                        while (num2 < (this.PointCount - 1))
                        {
                            this.Points[((this.PointCount - 1) + 4) - ((num2 - i) - 1)] = (DXFPoint)this.Points[(this.PointCount - 1) - ((num2 - i) - 1)];
                            num2++;
                        }
                        ((DXFPoint)this.Points[i + 1]).X = aRect.Right;
                        ((DXFPoint)this.Points[i + 1]).Y = aRect.Bottom;
                        ((DXFPoint)this.Points[i + 2]).X = aRect.Left;
                        ((DXFPoint)this.Points[i + 2]).Y = aRect.Bottom;
                        ((DXFPoint)this.Points[i + 3]).X = aRect.Left;
                        ((DXFPoint)this.Points[i + 3]).Y = aRect.Top;
                        ((DXFPoint)this.Points[i + 4]).X = aRect.Right;
                        ((DXFPoint)this.Points[i + 4]).Y = aRect.Top;
                        return;
                    }
                    if ((((((DXFPoint)this.Points[i]).Y == aRect.Top) && (((DXFPoint)this.Points[i + 1]).Y == aRect.Top)) && ((((DXFPoint)this.Points[i]).X > aRect.Left) || (((DXFPoint)this.Points[i + 1]).X > aRect.Right))) || ((((DXFPoint)this.Points[i]).X >= aRect.Left) && (((DXFPoint)this.Points[i + 1]).X >= aRect.Right)))
                    {
                        num2 = i + 1;
                        while (num2 < (this.PointCount - 1))
                        {
                            this.Points[((this.PointCount - 1) + 4) - ((num2 - i) - 1)] = (DXFPoint)this.Points[(this.PointCount - 1) - ((num2 - i) - 1)];
                            num2++;
                        }
                        ((DXFPoint)this.Points[i + 1]).X = aRect.Right;
                        ((DXFPoint)this.Points[i + 1]).Y = aRect.Top;
                        ((DXFPoint)this.Points[i + 2]).X = aRect.Right;
                        ((DXFPoint)this.Points[i + 2]).Y = aRect.Bottom;
                        ((DXFPoint)this.Points[i + 3]).X = aRect.Left;
                        ((DXFPoint)this.Points[i + 3]).Y = aRect.Bottom;
                        ((DXFPoint)this.Points[i + 4]).X = aRect.Left;
                        ((DXFPoint)this.Points[i + 4]).Y = aRect.Top;
                        return;
                    }
                    if ((((((DXFPoint)this.Points[i]).X == aRect.Right) && (((DXFPoint)this.Points[i + 1]).X == aRect.Right)) && ((((DXFPoint)this.Points[i]).Y > aRect.Top) || (((DXFPoint)this.Points[i + 1]).Y > aRect.Bottom))) || ((((DXFPoint)this.Points[i]).Y >= aRect.Top) && (((DXFPoint)this.Points[i]).Y >= aRect.Bottom)))
                    {
                        num2 = i + 1;
                        while (num2 < (base.data.count - 1))
                        {
                            this.Points[((this.PointCount - 1) + 4) - ((num2 - i) - 1)] = (DXFPoint)this.Points[(this.PointCount - 1) - ((num2 - i) - 1)];
                            num2++;
                        }
                        ((DXFPoint)this.Points[i + 1]).X = aRect.Left;
                        ((DXFPoint)this.Points[i + 1]).Y = aRect.Top;
                        ((DXFPoint)this.Points[i + 2]).X = aRect.Right;
                        ((DXFPoint)this.Points[i + 2]).Y = aRect.Top;
                        ((DXFPoint)this.Points[i + 3]).X = aRect.Right;
                        ((DXFPoint)this.Points[i + 3]).Y = aRect.Bottom;
                        ((DXFPoint)this.Points[i + 4]).X = aRect.Left;
                        ((DXFPoint)this.Points[i + 4]).Y = aRect.Bottom;
                        return;
                    }
                    if ((((((DXFPoint)this.Points[i]).Y == aRect.Bottom) && (((DXFPoint)this.Points[i + 1]).Y == aRect.Bottom)) && ((this.min(((DXFPoint)this.Points[i]).X, ((DXFPoint)this.Points[i + 1]).X) > aRect.Left) || (this.min(((DXFPoint)this.Points[i]).X, ((DXFPoint)this.Points[i + 1]).X) < aRect.Right))) || ((this.max(((DXFPoint)this.Points[i]).X, ((DXFPoint)this.Points[i + 1]).X) <= aRect.Left) && (this.max(((DXFPoint)this.Points[i]).X, ((DXFPoint)this.Points[i + 1]).X) <= aRect.Right)))
                    {
                        for (num2 = i + 1; num2 < (this.PointCount - 1); num2++)
                        {
                            this.Points[((this.PointCount - 1) + 4) - ((num2 - i) - 1)] = (DXFPoint)this.Points[(this.PointCount - 1) - ((num2 - i) - 1)];
                        }
                        ((DXFPoint)this.Points[i + 1]).X = aRect.Left;
                        ((DXFPoint)this.Points[i + 1]).Y = aRect.Bottom;
                        ((DXFPoint)this.Points[i + 2]).X = aRect.Left;
                        ((DXFPoint)this.Points[i + 2]).Y = aRect.Top;
                        ((DXFPoint)this.Points[i + 3]).X = aRect.Right;
                        ((DXFPoint)this.Points[i + 3]).Y = aRect.Top;
                        ((DXFPoint)this.Points[i + 4]).X = aRect.Right;
                        ((DXFPoint)this.Points[i + 4]).Y = aRect.Bottom;
                        return;
                    }
                }
                if (this.Points != null)
                {
                    Rectangle rectangle = new Rectangle();
                    rectangle = aRect;
                    this.Points.Add(rectangle);
                }
            }
        }

        public void BeginPolygonFromRect()
        {
            new ArrayList();
        }

        public void Clear()
        {
            base.data.points.Clear();
        }

        public void EndPolygonFromRect()
        {
            if (this.Points != null)
            {
                for (int i = this.Points.Count - 1; i > 0; i--)
                {
                    this.AddRect((Rectangle)this.Points[i]);
                }
                this.Points.Clear();
            }
        }

        public override void ExportAsDXF(DXFExport ADXFExport)
        {
            ADXFExport.BeginPoly(base.data, base.data.points.Count);
            for (int i = 0; i < base.data.points.Count; i++)
            {
                ADXFExport.AddVertex((DXFPoint)base.data.points[i]);
            }
        }

        private DXFPoint GetPoint(int aIndex)
        {
            return (DXFPoint)base.data.points[aIndex];
        }

        public override bool IntersecRect(Rect aRect)
        {
            Rect rect = new Rect();
            rect.X1 = (int)Math.Round((double)base.data.point.X);
            rect.Y1 = (int)Math.Round((double)base.data.point.Y);
            rect.X2 = (int)Math.Round((double)base.data.point1.X);
            rect.Y2 = (int)Math.Round((double)base.data.point1.Y);
            if (rect.X2 < rect.X1)
            {
                int num = rect.X2;
                rect.X2 = rect.X1;
                rect.X1 = num;
            }
            if (rect.Y2 < rect.Y1)
            {
                int num2 = rect.Y2;
                rect.Y2 = rect.Y1;
                rect.Y1 = num2;
            }
            Rectangle rectangle = new Rectangle(0, 0, 0, 0);
            rectangle = Rectangle.Intersect(new Rectangle(aRect.X1, aRect.Y1, aRect.X2, aRect.Y2), new Rectangle(rect.X1, rect.Y1, rect.X2, rect.Y2));
            if (((rectangle.X <= 0) && (rectangle.Y <= 0)) && ((rectangle.Width <= 0) && (rectangle.Height <= 0)))
            {
                return false;
            }
            return true;
        }

        private float max(float aPar1, float aPar2)
        {
            if (aPar1 > aPar2)
            {
                return aPar1;
            }
            return aPar2;
        }

        private float min(float aPar1, float aPar2)
        {
            if (aPar1 > aPar2)
            {
                return aPar2;
            }
            return aPar1;
        }

        public override void ParseToLines(ArrayList NewElemes)
        {
            DXFLine line = new DXFLine(base.data);
            for (int i = 0; i < (this.PointCount - 1); i++)
            {
                line.Layer = base.Layer;
                line.StartPoint = (DXFPoint)this.GetPoint(i).Clone();
                if (i < (this.PointCount - 1))
                {
                    line.EndPoint = (DXFPoint)this.GetPoint(i + 1).Clone();
                }
                else
                {
                    line.EndPoint = (DXFPoint)this.GetPoint(0).Clone();
                }
                NewElemes.Add(line.Clone());
            }
        }

        // Properties
        public int PointCount
        {
            get
            {
                return base.data.count;
            }
        }

        public ArrayList Points
        {
            get
            {
                return base.data.points;
            }
            set
            {
                base.data.points = value;
            }
        }


    }
}

⌨️ 快捷键说明

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