31using System.ComponentModel;
33using Microsoft.Xna.Framework.Graphics;
39using System.Collections.Generic;
123 for (
int i = 0; i < vertices.Count; i++)
127 vertices[i] -=
new Vector((
float)0.5, (
float)0.5);
128 vertices[i] =
new Vector(vertices[i].
X , -vertices[i].
Y);
132 for (
int i = 0; i < vertices.Count; i++)
133 polygonVertices[i] =
new Vector(vertices[i].
X, vertices[i].
Y);
146 return typeof(
Shape ).GetTypeInfo().GetDeclaredField( shapeStr ).GetValue(
null ) as
Shape;
148 Type shapeClass = typeof(
Shape );
149 BindingFlags flags = BindingFlags.GetField | BindingFlags.Public | BindingFlags.Static;
150 FieldInfo selectedShape = shapeClass.GetField( shapeStr, flags );
151 return (
Shape)selectedShape.GetValue(
null );
162 if ( vertexCount < 3 )
throw new ArgumentException(
"You need at least 3 vertices to create a polygon!" );
168 double angleStep = 2 * Math.PI / vertexCount;
169 Int16 centerIndex = (Int16)vertexCount;
173 Int16[] outlineIndices =
new Int16[vertexCount];
175 for (
int i = 0; i < vertexCount; i++ )
177 double a = i * angleStep;
178 vertices[i] =
new Vector( 0.5 * Math.Cos( a ), 0.5 * Math.Sin( a ) );
179 outlineIndices[i] = (Int16)i;
183 for (
int i = 0; i < vertexCount - 1; i++ )
185 triangles[i] =
new IndexTriangle( (Int16)i, centerIndex, (Int16)( i + 1 ) );
187 triangles[vertexCount - 1] =
new IndexTriangle( (Int16)( vertexCount - 1 ), centerIndex, (Int16)0 );
189 return new ShapeCache( vertices, triangles, outlineIndices );
192#pragma warning disable CS1591
197 return cp1 * cp2 >= 0;
214 double invDenom = 1 / ( dot00 * dot11 - dot01 * dot01 );
215 double u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;
216 double v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;
218 return ( u >= 0 ) && ( v >= 0 ) && ( u + v < 1 );
261 return x * x + y * y <= r;
263#pragma warning restore CS1591
312 public override bool IsInside(
double x,
double y )
353 public override bool IsInside(
double x,
double y )
355 return ( Math.Abs( x ) <= 1 && Math.Abs( y ) <= 1 );
432 2, 9, 8, 7, 6, 5, 4, 3, 1, 0
479 public override bool IsInside(
double x,
double y )
525 this.Origin = origin;
526 this.Direction = direction;
527 this.Length = length;
561 : this( cache, true )
596 [EditorBrowsable( EditorBrowsableState.Never )]
618 : this( (Int16)
i1, (Int16)
i2, (Int16)
i3 )
626 [EditorBrowsable( EditorBrowsableState.Never )]
656 this.Vertices = this.OutlineVertices = outlineVertices;
667 this.Vertices = this.OutlineVertices = outlineVertices;
668 this.Triangles =
null;
683 for (
int i = 0; i < outlineIndices.Length; i++ )
711 bitmap =
new bool[texture.Width, texture.Height];
713 for (
int i = 0; i < texture.Height; i++ )
717 texture.GetData<
XnaColor>( 0, srcRect, scanline, 0, texture.Width );
719 for (
int j = 0; j < texture.Width; j++ )
723 bitmap[j, texture.Height - i - 1] = isOpaque( scanline[j] );
743 get {
return bitmap.GetLength( 0 ); }
751 get {
return bitmap.GetLength( 1 ); }
757 public bool this[
int x,
int y]
761 if ( x < 0 || y < 0 || x >=
Width || y >=
Height ) {
return false; }
774 return ( c.A >= 127 );
Microsoft.Xna.Framework.Rectangle XnaRectangle
Microsoft.Xna.Framework.Rectangle XnaRectangle
Microsoft.Xna.Framework.Color XnaColor
override ShapeCache Cache
override bool IsInside(double x, double y)
Onko piste muodon sisällä. Pisteen koordinaatiston origo on muodon keskellä. Muoto on kokoa 1x1 jos I...
static readonly ShapeCache _cache
static readonly Vector[] vertices
override ShapeCache Cache
static readonly IndexTriangle[] triangles
uint[,] GetDataUInt(int ox=0, int oy=0, int w=int.MaxValue, int h=int.MaxValue)
Palalutetaan kuvan pikselit ARGB-uint[,] -taulukkona
int Width
Leveys pikseleinä.
int Height
Korkeus pikseleinä.
override bool IsUnitSize
If true, the shape must be scaled by the size of the object that has the shape. Typically,...
Polygon(ShapeCache cache, bool isUnitSize)
Monikulmio. Muodostamiseen kannattaa mielummin käyttää Shape.CreateRegularPolygon -metodia.
override ShapeCache Cache
Polygon(ShapeCache cache)
Monikulmio. Muodostamiseen kannattaa mielummin käyttää Shape.CreateRegularPolygon -metodia.
override ShapeCache Cache
RaySegment(Vector origin, Vector direction, double length)
Säde
static readonly ShapeCache _cache
static readonly Vector[] vertices
override bool IsInside(double x, double y)
Onko piste muodon sisällä. Pisteen koordinaatiston origo on muodon keskellä. Muoto on kokoa 1x1 jos I...
static readonly IndexTriangle[] triangles
override ShapeCache Cache
static readonly Int16[] outlineIndices
RegularPolygon(int vertexCount)
Sisältää valmiiksi lasketut kolmiot, joiden avulla piirtäminen on suoraviivaista.
readonly Vector[] OutlineVertices
Ulkoreunan verteksit, lueteltuna vastapäivään.
readonly IndexTriangle[] Triangles
Kolmiot, joiden avulla kuvio voidaan täyttää värillä.
ShapeCache(Vector[] outlineVertices, IndexTriangle[] triangles)
Luo kuvion kolmioilla, joiden avulla kuvio voidaan täyttää värillä. Kaikkien verteksien tulee olla ku...
ShapeCache(Vector[] outlineVertices)
Luo kuvion pelkillä reuna-vertekseillä. Kuviolle ei tule tietoa kolmioista, näin ollen sitä ei voi tä...
readonly Vector[] Vertices
Kaikki verteksit, ml. kolmioiden kulmapisteet.
ShapeCache(Vector[] vertices, IndexTriangle[] triangles, Int16[] outlineIndices)
Luo kuvion, joka voidaan piirtää täytettynä värillä.
static readonly Rectangle Rectangle
Suorakulmio.
static readonly Ellipse Circle
Ympyrä tai ellipsi.
static Shape CreateRegularPolygon(int vertexCount)
Luo säännöllisen monikulmion (polygonin)
abstract bool IsUnitSize
If true, the shape must be scaled by the size of the object that has the shape. Typically,...
static readonly Triangle Triangle
Tasasivuinen kolmio.
abstract ShapeCache Cache
Muodon verteksit sisällään pitävä olio.
bool IsInsideCircle(double x, double y, double r)
static readonly Ellipse Ellipse
Ellipsi tai ympyrä.
virtual bool IsInside(double x, double y)
Onko piste muodon sisällä. Pisteen koordinaatiston origo on muodon keskellä. Muoto on kokoa 1x1 jos I...
static readonly Shape Octagon
Oktagoni eli kahdeksankulmio.
static Shape FromString(string shapeStr)
Luo muodon merkkijonosta, esim. "Circle"
static readonly Star Star
Tähti.
static bool IsInsideTriangle(Vector p, Vector a, Vector b, Vector c)
static readonly Shape Diamond
Timantti- / salmiakkikuvio
static readonly Shape Hexagon
Heksagoni eli kuusikulmio.
static Shape FromImage(Image image)
Luo kuvion annetusta kuvasta. Kuvassa tulee olla vain yksi yhtenäinen muoto (toisin sanoen kuvio ei v...
static readonly Heart Heart
Sydän.
static ShapeCache CreateRegularPolygonCache(int vertexCount)
bool IsInsideTriangles(Vector p)
bool IsInsideOutlines(Vector p)
static bool SameSide(Vector a, Vector b, Vector p1, Vector p2)
static readonly Shape Pentagon
Pentagoni eli viisikulmio.
static readonly IndexTriangle[] triangles
static readonly Int16[] outlineIndices
static readonly ShapeCache _cache
override ShapeCache Cache
static readonly Vector[] vertices
Tekstuuribittikartta muotojen luomiseen tekstuureista. Sisältää tekstuurin tiedot väritaulukkona.
int Height
Bittikartan korkeus pikseleinä.
int Width
Bittikartan leveys pikseleinä.
bool[,] bitmap
Bittikarttadata.
TextureBitmap(Texture2D texture)
Luo uuden bittikartan tekstuurin pohjalta oletusläpinäkyvyysehdoilla. Ks. IsOpaqueColor
TextureBitmap(Texture2D texture, Predicate< XnaColor > isOpaque)
Luo uuden bittikartan tekstuurin pohjalta.
static bool IsOpaqueColor(XnaColor c)
Päättelee pikselin läpinäkyvyyden sen värin perusteella. Tässä tapauksessa alfa-arvon tulee olla suur...
Muuttaa tekstuurin yhdeksi tai useammaksi listaksi verteksejä. Mahdollistaa myös reikien sisällyttämi...
static List< Vector > DetectVertices(uint[] data, int width)
Detects the vertices of the supplied texture data. (PolygonDetectionType.Integrated)
static readonly IndexTriangle[] triangles
override ShapeCache Cache
static readonly Int16[] outlineIndices
override bool IsInside(double x, double y)
Onko piste muodon sisällä. Pisteen koordinaatiston origo on muodon keskellä. Muoto on kokoa 1x1 jos I...
static readonly Vector[] vertices
static readonly ShapeCache _cache
Muotojen määrityksessä käytettävä kolmio.
IndexTriangle(int i1, int i2, int i3)
Luo uuden kolmion. Parametreina kulmapisteiden indeksit lueteltuna myötäpäivään.
IndexTriangle(Int16 i1, Int16 i2, Int16 i3)
Luo uuden kolmion. Parametreina kulmapisteiden indeksit lueteltuna myötäpäivään.
static readonly Vector Zero
Nollavektori.
static double DotProduct(Vector left, Vector right)
Pistetulo.
static double CrossProduct(Vector left, Vector right)
Ristitulo. Palauttaa kohtisuoraan vektoreita vastaan olevan uuden vektorin pituuden....