?? dxfpolyline.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 + -