/// <summary>
 ///
 /// </summary>
 /// <typeparam name="V"></typeparam>
 /// <typeparam name="E"></typeparam>
 /// <typeparam name="F"></typeparam>
 /// <param name="strip"></param>
 /// <param name="getPosition"></param>
 /// <param name="getNormal"></param>
 /// <param name="getTexture"></param>
 /// <param name="getColor"></param>
 /// <returns></returns>
 public static Mesh ToMesh <V, E, F>(this HeQuadStrip <V, E, F> strip, Func <V, Point3f> getPosition, Func <V, Vector3f> getNormal = null, Func <V, Point2f> getTexture = null, Func <V, Color> getColor = null)
     where V : HeMesh <V, E, F> .Vertex
     where E : HeMesh <V, E, F> .Halfedge
     where F : HeMesh <V, E, F> .Face
 {
     return(RhinoFactory.Mesh.CreateFromQuadStrip(strip, getPosition, getNormal, getTexture, getColor));
 }
Example #2
0
            /// <summary>
            ///
            /// </summary>
            /// <typeparam name="V"></typeparam>
            /// <typeparam name="E"></typeparam>
            /// <typeparam name="F"></typeparam>
            /// <param name="strip"></param>
            /// <param name="getPosition"></param>
            /// <param name="getNormal"></param>
            /// <param name="getTexture"></param>
            /// <param name="getColor"></param>
            /// <returns></returns>
            public static T CreateFromQuadStrip <V, E, F>(HeQuadStrip <V, E, F> strip, Func <V, Point3f> getPosition, Func <V, Vector3f> getNormal = null, Func <V, Point2f> getTexture = null, Func <V, Color> getColor = null)
                where V : HeMesh <V, E, F> .Vertex
                where E : HeMesh <V, E, F> .Halfedge
                where F : HeMesh <V, E, F> .Face
            {
                var mesh = new T();

                var verts = mesh.Vertices;
                var faces = mesh.Faces;

                var norms     = mesh.Normals;
                var texCoords = mesh.TextureCoordinates;
                var colors    = mesh.VertexColors;

                int skip = strip.IsPeriodic ? 1 : 0;

                // add verts
                foreach (var he in strip.SkipLast(skip))
                {
                    var v0 = he.Start;
                    var v1 = he.End;

                    verts.Add(getPosition(v0));
                    verts.Add(getPosition(v1));

                    if (getNormal != null)
                    {
                        norms.Add(getNormal(v0));
                        norms.Add(getNormal(v1));
                    }

                    if (getTexture != null)
                    {
                        texCoords.Add(getTexture(v0));
                        texCoords.Add(getTexture(v1));
                    }

                    if (getColor != null)
                    {
                        colors.Add(getColor(v0));
                        colors.Add(getColor(v1));
                    }
                }

                // add faces
                var n = verts.Count - 2;

                for (int i = 0; i < n; i += 2)
                {
                    faces.AddFace(i, i + 1, i + 3, i + 2);
                }

                // add last face
                if (strip.IsPeriodic)
                {
                    faces.AddFace(n, n + 1, 1, 0);
                }

                return(mesh);
            }
 /// <summary>
 ///
 /// </summary>
 /// <typeparam name="V"></typeparam>
 /// <typeparam name="E"></typeparam>
 /// <typeparam name="F"></typeparam>
 /// <param name="strip"></param>
 /// <returns></returns>
 public static Mesh ToMesh <V, E, F>(this HeQuadStrip <V, E, F> strip)
     where V : HeMesh <V, E, F> .Vertex, IPosition3d
     where E : HeMesh <V, E, F> .Halfedge
     where F : HeMesh <V, E, F> .Face
 {
     return(ToMesh(strip, v => (Point3f)v.Position));
 }
Example #4
0
 /// <summary>
 ///
 /// </summary>
 /// <typeparam name="V"></typeparam>
 /// <typeparam name="E"></typeparam>
 /// <typeparam name="F"></typeparam>
 /// <param name="strip"></param>
 /// <returns></returns>
 public static Mesh ToMesh <V, E, F>(this HeQuadStrip <V, E, F> strip)
     where V : HeVertex <V, E, F>, IVertex3d
     where E : Halfedge <V, E, F>
     where F : HeFace <V, E, F>
 {
     return(ToMesh(strip,
                   v => v.Position.ToPoint3f(),
                   v => v.Normal.ToVector3f(),
                   v => v.Texture.ToPoint2f(),
                   null
                   ));
 }