130 lines
1.9 KiB
C#
130 lines
1.9 KiB
C#
using TriangleNet.Geometry;
|
|
|
|
namespace TriangleNet.Topology
|
|
{
|
|
public struct Osub
|
|
{
|
|
internal SubSegment seg;
|
|
|
|
internal int orient;
|
|
|
|
public SubSegment Segment => seg;
|
|
|
|
public override string ToString()
|
|
{
|
|
if (seg == null)
|
|
{
|
|
return "O-TID [null]";
|
|
}
|
|
return $"O-SID {seg.hash}";
|
|
}
|
|
|
|
public void Sym(ref Osub os)
|
|
{
|
|
os.seg = seg;
|
|
os.orient = 1 - orient;
|
|
}
|
|
|
|
public void Sym()
|
|
{
|
|
orient = 1 - orient;
|
|
}
|
|
|
|
public void Pivot(ref Osub os)
|
|
{
|
|
os = seg.subsegs[orient];
|
|
}
|
|
|
|
internal void Pivot(ref Otri ot)
|
|
{
|
|
ot = seg.triangles[orient];
|
|
}
|
|
|
|
public void Next(ref Osub ot)
|
|
{
|
|
ot = seg.subsegs[1 - orient];
|
|
}
|
|
|
|
public void Next()
|
|
{
|
|
this = seg.subsegs[1 - orient];
|
|
}
|
|
|
|
public Vertex Org()
|
|
{
|
|
return seg.vertices[orient];
|
|
}
|
|
|
|
public Vertex Dest()
|
|
{
|
|
return seg.vertices[1 - orient];
|
|
}
|
|
|
|
internal void SetOrg(Vertex vertex)
|
|
{
|
|
seg.vertices[orient] = vertex;
|
|
}
|
|
|
|
internal void SetDest(Vertex vertex)
|
|
{
|
|
seg.vertices[1 - orient] = vertex;
|
|
}
|
|
|
|
internal Vertex SegOrg()
|
|
{
|
|
return seg.vertices[2 + orient];
|
|
}
|
|
|
|
internal Vertex SegDest()
|
|
{
|
|
return seg.vertices[3 - orient];
|
|
}
|
|
|
|
internal void SetSegOrg(Vertex vertex)
|
|
{
|
|
seg.vertices[2 + orient] = vertex;
|
|
}
|
|
|
|
internal void SetSegDest(Vertex vertex)
|
|
{
|
|
seg.vertices[3 - orient] = vertex;
|
|
}
|
|
|
|
internal void Bond(ref Osub os)
|
|
{
|
|
seg.subsegs[orient] = os;
|
|
os.seg.subsegs[os.orient] = this;
|
|
}
|
|
|
|
internal void Dissolve(SubSegment dummy)
|
|
{
|
|
seg.subsegs[orient].seg = dummy;
|
|
}
|
|
|
|
internal bool Equal(Osub os)
|
|
{
|
|
if (seg == os.seg)
|
|
{
|
|
return orient == os.orient;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
internal void TriDissolve(Triangle dummy)
|
|
{
|
|
seg.triangles[orient].tri = dummy;
|
|
}
|
|
|
|
internal static bool IsDead(SubSegment sub)
|
|
{
|
|
return sub.subsegs[0].seg == null;
|
|
}
|
|
|
|
internal static void Kill(SubSegment sub)
|
|
{
|
|
sub.subsegs[0].seg = null;
|
|
sub.subsegs[1].seg = null;
|
|
}
|
|
}
|
|
}
|