|
RenderStack 11.06.1
|
A shape defined by the Points that are connected to it through the Corners. More...
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< Corner > | Corners [get] |
Definition at line 34 of file Polygon.cs.
| RenderStack.Geometry.Polygon.Polygon | ( | ) |
Definition at line 58 of file Polygon.cs.
{
cornersReadOnly = new ReadOnlyCollection<Corner>(corners);
}
| void RenderStack.Geometry.Polygon.Dispose | ( | ) |
Definition at line 50 of file Polygon.cs.
{
if(corners.Count != 0)
{
throw new Exception("Check");
}
}
Definition at line 63 of file Polygon.cs.
Referenced by RenderStack.Geometry.GeometryOperation.AddPointRing().
| 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().
| void RenderStack.Geometry.Polygon.CopyToCorners | ( | Dictionary< Corner, Vector4 > | cornerAttribute, |
| Dictionary< Polygon, Vector4 > | polygonAttribute | ||
| ) |
Definition at line 100 of file Polygon.cs.
| 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");
}
}
}
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().
| 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().
Definition at line 260 of file Polygon.cs.
References RenderStack.Geometry.Corner.Point.
Definition at line 271 of file Polygon.cs.
References RenderStack.Geometry.Point.Corners.
Referenced by RenderStack.Geometry.Shapes.Cylinder.Cylinder(), RenderStack.Geometry.GeometryOperation.MakeNewCornerFromCorner(), RenderStack.Geometry.SubdivideGeometryOperation.MakeNewCornerFromEdgeMidpoint(), RenderStack.Geometry.CatmullClarkGeometryOperation.MakeNewCornerFromEdgePoint(), RenderStack.Geometry.GeometryOperation.MakeNewCornerFromPolygonCentroid(), RenderStack.Geometry.Geometry.MakePolygon(), RenderStack.Geometry.TruncateGeometryOperation.TruncateGeometryOperation(), RenderStack.Geometry.Shapes.Tube.Tube(), and RenderStack.Geometry.TruncateGeometryOperation.UpdateTruncatedEdge().
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();
}
ReadOnlyCollection<Corner> RenderStack.Geometry.Polygon.Corners [get] |
Definition at line 41 of file Polygon.cs.
Referenced by RenderStack.Geometry.Geometry.BuildEdges(), RenderStack.Mesh.GeometryMesh.BuildMeshFromGeometry(), RenderStack.Geometry.CatmullClarkGeometryOperation.CatmullClarkGeometryOperation(), RenderStack.Geometry.Geometry.ClosestPolygonCorner(), RenderStack.Geometry.Geometry.Merge(), RenderStack.Geometry.Geometry.MergeFast(), RenderStack.Geometry.Geometry.PolygonCornerEdges(), RenderStack.Geometry.Geometry.RemovePolygon(), RenderStack.Geometry.Sqrt3GeometryOperation.Sqrt3GeometryOperation(), RenderStack.Geometry.SubdivideGeometryOperation.SubdivideGeometryOperation(), RenderStack.Geometry.TriangulateGeometryOperation.TriangulateGeometryOperation(), and RenderStack.Geometry.TruncateGeometryOperation.TruncateGeometryOperation().
1.7.4