/// <summary> /// Convert <see cref="BeginMode"/> to <see cref="GeometryTypes"/>. /// </summary> /// <param name="mode"></param> /// <returns></returns> public static GeometryTypes ToGeometryType(this SharpGL.Enumerations.BeginMode mode) { GeometryTypes result = GeometryTypes.Point; switch (mode) { case SharpGL.Enumerations.BeginMode.Points: result = GeometryTypes.Point; break; case SharpGL.Enumerations.BeginMode.Lines: result = GeometryTypes.Line; break; case SharpGL.Enumerations.BeginMode.LineLoop: result = GeometryTypes.Line; break; case SharpGL.Enumerations.BeginMode.LineStrip: result = GeometryTypes.Line; break; case SharpGL.Enumerations.BeginMode.Triangles: result = GeometryTypes.Triangle; break; case SharpGL.Enumerations.BeginMode.TriangleString: result = GeometryTypes.Triangle; break; case SharpGL.Enumerations.BeginMode.TriangleFan: result = GeometryTypes.Triangle; break; case SharpGL.Enumerations.BeginMode.Quads: result = GeometryTypes.Quad; break; case SharpGL.Enumerations.BeginMode.QuadStrip: result = GeometryTypes.Quad; break; case SharpGL.Enumerations.BeginMode.Polygon: result = GeometryTypes.Polygon; break; default: throw new NotImplementedException(); } return(result); }
protected PointModel(int pointCount, SharpGL.Enumerations.BeginMode mode) : base(pointCount, mode) { }
/// <summary> /// Get geometry's count according to specified <paramref name="mode"/>. /// <para>Returns false if the <paramref name="element"/> is null.</para> /// </summary> /// <param name="element"></param> /// <param name="mode"></param> /// <param name="count"></param> /// <returns></returns> public static bool GetGeometryCount(this IColorCodedPicking element, SharpGL.Enumerations.BeginMode mode, out uint count) { bool result = false; count = uint.MaxValue; if (element != null) { uint vertexCount = element.GetVertexCount(); switch (mode) { case SharpGL.Enumerations.BeginMode.Points: count = vertexCount; break; case SharpGL.Enumerations.BeginMode.Lines: count = vertexCount / 2; break; case SharpGL.Enumerations.BeginMode.LineLoop: count = vertexCount; break; case SharpGL.Enumerations.BeginMode.LineStrip: count = vertexCount - 1; break; case SharpGL.Enumerations.BeginMode.Triangles: count = vertexCount / 3; break; case SharpGL.Enumerations.BeginMode.TriangleString: count = vertexCount - 2; break; case SharpGL.Enumerations.BeginMode.TriangleFan: count = vertexCount - 2; break; case SharpGL.Enumerations.BeginMode.Quads: count = vertexCount / 4; break; case SharpGL.Enumerations.BeginMode.QuadStrip: count = vertexCount / 2 - 1; break; case SharpGL.Enumerations.BeginMode.Polygon: count = 1; break; default: throw new NotImplementedException(); } result = true; } return(result); }
/// <summary> /// Get geometry's index(start from 0) according to <paramref name="lastVertexID"/> and <paramref name="mode"/>. /// <para>Returns false if failed.</para> /// </summary> /// <param name="element"></param> /// <param name="mode"></param> /// <param name="lastVertexID">Refers to the last vertex that constructs the primitive. /// <para>Ranges from 0 to (<paramref name="element"/>'s vertices' count - 1).</para></param> /// <param name="index"></param> /// <returns></returns> public static bool GetGeometryIndex(this IColorCodedPicking element, SharpGL.Enumerations.BeginMode mode, uint lastVertexID, out uint index) { index = uint.MaxValue; if (element == null) { return(false); } uint vertexCount = element.GetVertexCount(); if (lastVertexID < vertexCount) { switch (mode) { case SharpGL.Enumerations.BeginMode.Points: // vertexID should range from 0 to vertexCount - 1. index = lastVertexID; break; case SharpGL.Enumerations.BeginMode.Lines: // vertexID should range from 0 to vertexCount - 1. index = lastVertexID / 2; break; case SharpGL.Enumerations.BeginMode.LineLoop: // vertexID should range from 0 to vertexCount. if (lastVertexID == 0) // This is the last primitive. { index = vertexCount - 1; } else { index = lastVertexID - 1; } break; case SharpGL.Enumerations.BeginMode.LineStrip: index = lastVertexID - 1; // If lastVertexID is 0, this returns -1. break; case SharpGL.Enumerations.BeginMode.Triangles: index = lastVertexID / 3; break; case SharpGL.Enumerations.BeginMode.TriangleString: index = lastVertexID - 2; // if lastVertexID is 0 or 1, this returns -2 or -1. break; case SharpGL.Enumerations.BeginMode.TriangleFan: index = lastVertexID - 2; // if lastVertexID is 0 or 1, this returns -2 or -1. break; case SharpGL.Enumerations.BeginMode.Quads: index = lastVertexID / 4; break; case SharpGL.Enumerations.BeginMode.QuadStrip: index = lastVertexID / 2 - 1; // If lastVertexID is 0 or 1, this returns -1. break; case SharpGL.Enumerations.BeginMode.Polygon: index = 0; break; default: throw new NotImplementedException(); } } return(true); }