mirror of
https://gitgud.io/AbstractConcept/rimworld-animation-studio.git
synced 2024-08-15 00:43:27 +00:00
Initial commit
This commit is contained in:
commit
3c7cc0c973
8391 changed files with 704313 additions and 0 deletions
|
@ -0,0 +1,129 @@
|
|||
// -----------------------------------------------------------------------
|
||||
// <copyright file="Triangle.cs" company="">
|
||||
// Original Triangle code by Jonathan Richard Shewchuk, http://www.cs.cmu.edu/~quake/triangle.html
|
||||
// Triangle.NET code by Christian Woltering, http://triangle.codeplex.com/
|
||||
// </copyright>
|
||||
// -----------------------------------------------------------------------
|
||||
|
||||
namespace UnityEngine.U2D.Animation.TriangleNet
|
||||
.Topology
|
||||
{
|
||||
using System;
|
||||
using Animation.TriangleNet.Geometry;
|
||||
|
||||
/// <summary>
|
||||
/// The triangle data structure.
|
||||
/// </summary>
|
||||
internal class Triangle : ITriangle
|
||||
{
|
||||
// Hash for dictionary. Will be set by mesh instance.
|
||||
internal int hash;
|
||||
|
||||
// The ID is only used for mesh output.
|
||||
internal int id;
|
||||
|
||||
internal Otri[] neighbors;
|
||||
internal Vertex[] vertices;
|
||||
internal Osub[] subsegs;
|
||||
internal int label;
|
||||
internal double area;
|
||||
internal bool infected;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="Triangle" /> class.
|
||||
/// </summary>
|
||||
public Triangle()
|
||||
{
|
||||
// Three NULL vertices.
|
||||
vertices = new Vertex[3];
|
||||
|
||||
// Initialize the three adjoining subsegments to be the omnipresent subsegment.
|
||||
subsegs = new Osub[3];
|
||||
|
||||
// Initialize the three adjoining triangles to be "outer space".
|
||||
neighbors = new Otri[3];
|
||||
|
||||
// area = -1.0;
|
||||
}
|
||||
|
||||
#region Public properties
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the triangle id.
|
||||
/// </summary>
|
||||
public int ID
|
||||
{
|
||||
get { return this.id; }
|
||||
set { this.id = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Region ID the triangle belongs to.
|
||||
/// </summary>
|
||||
public int Label
|
||||
{
|
||||
get { return this.label; }
|
||||
set { this.label = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the triangle area constraint.
|
||||
/// </summary>
|
||||
public double Area
|
||||
{
|
||||
get { return this.area; }
|
||||
set { this.area = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the specified corners vertex.
|
||||
/// </summary>
|
||||
public Vertex GetVertex(int index)
|
||||
{
|
||||
return this.vertices[index]; // TODO: Check range?
|
||||
}
|
||||
|
||||
public int GetVertexID(int index)
|
||||
{
|
||||
return this.vertices[index].id;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a triangles' neighbor.
|
||||
/// </summary>
|
||||
/// <param name="index">The neighbor index (0, 1 or 2).</param>
|
||||
/// <returns>The neigbbor opposite of vertex with given index.</returns>
|
||||
public ITriangle GetNeighbor(int index)
|
||||
{
|
||||
return neighbors[index].tri.hash == Mesh.DUMMY ? null : neighbors[index].tri;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public int GetNeighborID(int index)
|
||||
{
|
||||
return neighbors[index].tri.hash == Mesh.DUMMY ? -1 : neighbors[index].tri.id;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a triangles segment.
|
||||
/// </summary>
|
||||
/// <param name="index">The vertex index (0, 1 or 2).</param>
|
||||
/// <returns>The segment opposite of vertex with given index.</returns>
|
||||
public ISegment GetSegment(int index)
|
||||
{
|
||||
return subsegs[index].seg.hash == Mesh.DUMMY ? null : subsegs[index].seg;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return this.hash;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return String.Format("TID {0}", hash);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue