/// <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)); }
/// <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)); }
/// <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 )); }