RenderStack 11.06.1
Public Member Functions | Properties
RenderStack.Geometry.Polygon Class Reference

A shape defined by the Points that are connected to it through the Corners. More...

List of all members.

Public Member Functions

void Dispose ()
 Polygon ()
Corner NextCorner (Corner corner)
Corner PreviousCorner (Corner corner)
void CopyToCorners (Dictionary< Corner, Vector3 > cornerAttribute, Dictionary< Polygon, Vector3 > polygonAttribute)
void CopyToCorners (Dictionary< Corner, Vector4 > cornerAttribute, Dictionary< Polygon, Vector4 > polygonAttribute)
void ComputeNormal (Dictionary< Polygon, Vector3 > polygonNormals, Dictionary< Point, Vector3 > pointLocations)
bool DebugCheck (Dictionary< Point, Vector3 > pointLocations)
void ComputeCentroid (Dictionary< Polygon, Vector3 > polygonCentroids, Dictionary< Point, Vector3 > pointLocations)
void SmoothNormalize (Dictionary< Corner, Vector3 > cornerAttribute, Dictionary< Polygon, Vector3 > polygonAttribute, Dictionary< Polygon, Vector3 > polygonNormals, float cosMaxSmoothingAngle)
void SmoothAverage (Dictionary< Corner, Vector4 > newCornerAttribute, Dictionary< Corner, Vector4 > oldCornerAttribute, Dictionary< Corner, Vector3 > cornerNormals, Dictionary< Point, Vector3 > pointNormals)
Corner Corner (Point point)
Corner MakeCorner (Point point)
void ReplacePoints (Dictionary< Point, Point > oldToNew)
void RemoveCorner (Corner corner)
void Reverse ()

Properties

ReadOnlyCollection< CornerCorners [get]

Detailed Description

Note:
Mostly stable.

Definition at line 34 of file Polygon.cs.


Constructor & Destructor Documentation

RenderStack.Geometry.Polygon.Polygon ( )

Definition at line 58 of file Polygon.cs.

        {
            cornersReadOnly = new ReadOnlyCollection<Corner>(corners);
        }

Member Function Documentation

void RenderStack.Geometry.Polygon.Dispose ( )

Definition at line 50 of file Polygon.cs.

        {
            if(corners.Count != 0)
            {
                throw new Exception("Check");
            }
        }
Corner RenderStack.Geometry.Polygon.NextCorner ( Corner  corner)

Definition at line 63 of file Polygon.cs.

Referenced by RenderStack.Geometry.GeometryOperation.AddPointRing().

        {
            for(int i = 0; i < Corners.Count(); ++i)
            {
                Corner corner0 = Corners[i];
                if(corner0 == corner)
                {
                    return Corners[(i + 1) % Corners.Count];
                }
            }
            return null;
        }
Corner RenderStack.Geometry.Polygon.PreviousCorner ( Corner  corner)

Definition at line 76 of file Polygon.cs.

        {
            for(int i = 0; i < Corners.Count; ++i)
            {
                Corner corner0 = Corners[i];
                if(corner0 == corner)
                {
                    return Corners[(Corners.Count + i - 1) % Corners.Count];
                }
            }
            return null;
        }
void RenderStack.Geometry.Polygon.CopyToCorners ( Dictionary< Corner, Vector3 cornerAttribute,
Dictionary< Polygon, Vector3 polygonAttribute 
)

Definition at line 89 of file Polygon.cs.

Referenced by RenderStack.Geometry.Geometry.SmoothNormalize().

        {
            Vector3 polygonValue = polygonAttribute[this];
            foreach(Corner corner in Corners)
            {
                cornerAttribute[corner] = polygonValue;
            }
        }
void RenderStack.Geometry.Polygon.CopyToCorners ( Dictionary< Corner, Vector4 cornerAttribute,
Dictionary< Polygon, Vector4 polygonAttribute 
)

Definition at line 100 of file Polygon.cs.

        {
            Vector4 polygonValue = polygonAttribute[this];
            foreach(Corner corner in Corners)
            {
                cornerAttribute[corner] = polygonValue;
            }
        }
void RenderStack.Geometry.Polygon.ComputeNormal ( Dictionary< Polygon, Vector3 polygonNormals,
Dictionary< Point, Vector3 pointLocations 
)

Definition at line 111 of file Polygon.cs.

References RenderStack.Math.Vector3.Cross(), RenderStack.Math.Vector3.Normalize(), and RenderStack.Geometry.Corner.Point.

Referenced by RenderStack.Geometry.Geometry.ComputePolygonNormals().

        {
            if(Corners.Count > 2)
            {
                Corner c0 = Corners.First();    /*  first   NOTE: Linq extension to enumerable  */
                Corner c1 = Corners[1];         /*  second  */ 
                Corner c2 = Corners.Last();     /*  last    NOTE: Linq extension to enumerable  */
                Point p0 = c0.Point;
                Point p1 = c1.Point;
                Point p2 = c2.Point;

                /*  Make sure all points are unique from others  */ 
                if(
                    (p0 != p1) &&
                    (p0 != p2) &&
                    (p1 != p2)
                )
                {
                    Vector3 pos0   = pointLocations[p0];
                    Vector3 pos1   = pointLocations[p1];
                    Vector3 pos2   = pointLocations[p2];
                    Vector3 normal = Vector3.Cross((pos2 - pos0), (pos1 - pos0));
                    normal = Vector3.Normalize(normal);
                    polygonNormals[this] = normal;
                }
                else
                {
                    throw new System.Exception("polygons with duplicate points");
                }

            }

        }
bool RenderStack.Geometry.Polygon.DebugCheck ( Dictionary< Point, Vector3 pointLocations)

Definition at line 148 of file Polygon.cs.

References RenderStack.Math.Vector3.Cross(), RenderStack.Math.Vector3.Dot(), RenderStack.Math.Vector3.Normalize(), and RenderStack.Geometry.Corner.Point.

Referenced by RenderStack.Geometry.Geometry.MakePolygon().

        {
            if(corners.Count < 3)
            {
                return false;
            }

            Vector3 centroid = new Vector3(0.0f, 0.0f, 0.0f);
            {
                int count = 0;
                foreach(Corner corner in Corners)
                {
                    Point   point   = corner.Point;
                    Vector3 pos0    = pointLocations[point];
                    centroid += pos0;
                    ++count;
                }
                centroid /= (float)(count);
            }

            Corner c0 = Corners.First();
            Corner c1 = Corners[1];
            Corner c2 = Corners.Last();
            Point p0 = c0.Point;
            Point p1 = c1.Point;
            Point p2 = c2.Point;

            /*  Make sure all points are unique from others  */ 
            if(
                (p0 != p1) &&
                (p0 != p2) &&
                (p1 != p2)
            )
            {
                Vector3 pos0   = pointLocations[p0];
                Vector3 pos1   = pointLocations[p1];
                Vector3 pos2   = pointLocations[p2];
                Vector3 normal = Vector3.Cross((pos2 - pos0), (pos1 - pos0));
                normal = Vector3.Normalize(normal);
                Vector3 centroidDirection = Vector3.Normalize(centroid);
                float dot = Vector3.Dot(normal, centroidDirection);
                if(dot < 0.0f)
                {
                    return false;
                }
                return dot > 0.0f;
            }
            else
            {
                return false;
            }

        }
void RenderStack.Geometry.Polygon.ComputeCentroid ( Dictionary< Polygon, Vector3 polygonCentroids,
Dictionary< Point, Vector3 pointLocations 
)

Definition at line 202 of file Polygon.cs.

References RenderStack.Geometry.Corner.Point.

Referenced by RenderStack.Geometry.Geometry.ComputePolygonCentroids().

        {
            Vector3 centroid = new Vector3(0.0f, 0.0f, 0.0f);
            int count = 0;
            foreach(Corner corner in Corners)
            {
                Point   point   = corner.Point;
                Vector3 pos0    = pointLocations[point];
                centroid += pos0;
                ++count;
            }
            if(count > 0)
            {
                centroid /= (float)(count);
                polygonCentroids[this] = centroid;
            }
            else
            {
                polygonCentroids[this] = centroid;
            }
        }
void RenderStack.Geometry.Polygon.SmoothNormalize ( Dictionary< Corner, Vector3 cornerAttribute,
Dictionary< Polygon, Vector3 polygonAttribute,
Dictionary< Polygon, Vector3 polygonNormals,
float  cosMaxSmoothingAngle 
)

Definition at line 226 of file Polygon.cs.

References RenderStack.Geometry.Corner.SmoothNormalize().

Referenced by RenderStack.Geometry.Geometry.SmoothNormalize().

        {
            foreach(Corner corner in Corners)
            {
                corner.SmoothNormalize(
                    cornerAttribute,
                    polygonAttribute,
                    polygonNormals,
                    cosMaxSmoothingAngle
                );
            }
        }
void RenderStack.Geometry.Polygon.SmoothAverage ( Dictionary< Corner, Vector4 newCornerAttribute,
Dictionary< Corner, Vector4 oldCornerAttribute,
Dictionary< Corner, Vector3 cornerNormals,
Dictionary< Point, Vector3 pointNormals 
)

Definition at line 243 of file Polygon.cs.

References RenderStack.Geometry.Corner.SmoothAverage().

Referenced by RenderStack.Geometry.Geometry.SmoothAverage().

        {
            foreach(Corner corner in Corners)
            {
                corner.SmoothAverage(
                    newCornerAttribute,
                    oldCornerAttribute,
                    cornerNormals,
                    pointNormals
                );
            }
        }
Corner RenderStack.Geometry.Polygon.Corner ( Point  point)

Definition at line 260 of file Polygon.cs.

References RenderStack.Geometry.Corner.Point.

        {
            foreach(Corner corner in Corners)
            {
                if(corner.Point == point)
                {
                    return corner;
                }
            }
            throw new System.Collections.Generic.KeyNotFoundException();
        }
Corner RenderStack.Geometry.Polygon.MakeCorner ( Point  point)
void RenderStack.Geometry.Polygon.ReplacePoints ( Dictionary< Point, Point oldToNew)

Definition at line 278 of file Polygon.cs.

References RenderStack.Geometry.Point.Corners, and RenderStack.Geometry.Corner.Point.

        {
            for(int i = 0; i < corners.Count; ++i)
            {
                var oldCorner = corners[i];
                var oldPoint = oldCorner.Point;
                if(oldToNew.ContainsKey(oldPoint))
                {
                    oldPoint.Corners.Remove(oldCorner);
                    var newPoint = oldToNew[oldPoint];
                    var newCorner = new Corner(newPoint, this);
                    newPoint.Corners.Add(newCorner);
                    corners[i] = newCorner;
                }
            }
        }
void RenderStack.Geometry.Polygon.RemoveCorner ( Corner  corner)

Definition at line 294 of file Polygon.cs.

References RenderStack.Geometry.Point.Corners, and RenderStack.Geometry.Corner.Point.

        {
            corner.Point.Corners.Remove(corner);
            corners.Remove(corner);
        }
void RenderStack.Geometry.Polygon.Reverse ( )

Definition at line 299 of file Polygon.cs.

        {
            corners.Reverse();
        }

Property Documentation

ReadOnlyCollection<Corner> RenderStack.Geometry.Polygon.Corners [get]

The documentation for this class was generated from the following file: