/// <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);
        }
예제 #2
0
 protected PointModel(int pointCount, SharpGL.Enumerations.BeginMode mode)
     : base(pointCount, mode)
 {
 }
예제 #3
0
        /// <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);
        }
예제 #4
0
        /// <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);
        }