135 lines
4.0 KiB
C#
135 lines
4.0 KiB
C#
using StgSharp.Controlling;
|
|
using StgSharp.Math;
|
|
using StgSharp.Math.Linear;
|
|
|
|
using System.Numerics;
|
|
|
|
namespace StgSharp.Geometries
|
|
{
|
|
public class Polygon6 : PlainGeometry
|
|
{
|
|
internal Point _refOrigin;
|
|
internal GetLocationHandler movVertex0Operation;
|
|
internal GetLocationHandler movVertex1Operation;
|
|
internal GetLocationHandler movVertex2Operation;
|
|
internal GetLocationHandler movVertex3Operation;
|
|
internal GetLocationHandler movVertex4Operation;
|
|
internal GetLocationHandler movVertex5Operation;
|
|
internal mat6 vertexMat;
|
|
|
|
public GetLocationHandler MovVertex0Operation { get => movVertex0Operation; }
|
|
public GetLocationHandler MovVertex1Operation { get => movVertex1Operation; }
|
|
public GetLocationHandler MovVertex2Operation { get => movVertex2Operation; }
|
|
public GetLocationHandler MovVertex3Operation { get => movVertex3Operation; }
|
|
public GetLocationHandler MovVertex4Operation { get => movVertex4Operation; }
|
|
public GetLocationHandler MovVertex5Operation { get => movVertex5Operation; }
|
|
|
|
internal override int[] Indices
|
|
{
|
|
get
|
|
{
|
|
return new int[12] {
|
|
0,1,2,
|
|
0,2,3,
|
|
0,3,4,
|
|
0,4,5};
|
|
}
|
|
}
|
|
|
|
public Point Vertex0
|
|
{
|
|
get => new Point(vertexMat.vec0);
|
|
set { vertexMat.vec0 = value.position.vec; }
|
|
}
|
|
|
|
public Point Vertex1
|
|
{
|
|
get => new Point(vertexMat.vec1);
|
|
set { vertexMat.vec1 = value.position.vec; }
|
|
}
|
|
|
|
public Point Vertex2
|
|
{
|
|
get => new Point(vertexMat.vec2);
|
|
set { vertexMat.vec2 = value.position.vec; }
|
|
}
|
|
|
|
public Point Vertex3
|
|
{
|
|
get => new Point(vertexMat.vec3);
|
|
set { vertexMat.vec3 = value.position.vec; }
|
|
}
|
|
|
|
public Point Vertex4
|
|
{
|
|
get => new Point(vertexMat.vec4);
|
|
set { vertexMat.vec4 = value.position.vec; }
|
|
}
|
|
|
|
public Point Vertex5
|
|
{
|
|
get => new Point(vertexMat.vec5);
|
|
set { vertexMat.vec5 = value.position.vec; }
|
|
}
|
|
|
|
public override Line[] GetAllSides()
|
|
{
|
|
return new Line[6]
|
|
{
|
|
new Line(Vertex0,Vertex1),
|
|
new Line(Vertex1,Vertex2),
|
|
new Line(Vertex2,Vertex3),
|
|
new Line(Vertex3,Vertex4),
|
|
new Line(Vertex4,Vertex5),
|
|
new Line(Vertex5,Vertex0)
|
|
};
|
|
}
|
|
|
|
public override Plain GetPlain()
|
|
{
|
|
return new Plain(Vertex0, Vertex1, Vertex2);
|
|
}
|
|
|
|
public virtual vec3d movVertex0(uint tick)
|
|
{
|
|
return movVertex0Operation.Invoke(time);
|
|
}
|
|
|
|
public virtual vec3d movVertex1(uint tick)
|
|
{
|
|
return movVertex1Operation.Invoke(time);
|
|
}
|
|
|
|
public virtual vec3d movVertex2(uint tick)
|
|
{
|
|
return movVertex2Operation.Invoke(time);
|
|
}
|
|
|
|
public virtual vec3d movVertex3(uint tick)
|
|
{
|
|
return movVertex3Operation.Invoke(time);
|
|
}
|
|
|
|
public virtual vec3d movVertex4(uint tick)
|
|
{
|
|
return movVertex4Operation.Invoke(time);
|
|
}
|
|
|
|
public virtual vec3d movVertex5(uint tick)
|
|
{
|
|
return movVertex5Operation.Invoke(time);
|
|
}
|
|
|
|
internal override void UpdateCoordinate(uint tick)
|
|
{
|
|
uint nowTick = tick - BornTime;
|
|
Vector4 origin = coordinate.origin.vec;
|
|
vertexMat.vec0 = origin + movVertex0(nowTick).vec;
|
|
vertexMat.vec1 = origin + movVertex1(nowTick).vec;
|
|
vertexMat.vec2 = origin + movVertex2(nowTick).vec;
|
|
vertexMat.vec3 = origin + movVertex3(nowTick).vec;
|
|
vertexMat.vec4 = origin + movVertex4(nowTick).vec;
|
|
vertexMat.vec5 = origin + movVertex5(nowTick).vec;
|
|
}
|
|
}
|
|
} |