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