public static ITurtleMesh ImportRhinoMesh(Mesh m) { var t = new TurtleMesh(); var mv = m.Vertices; for (int i = 0; i < mv.Count; i++) { var v = mv[i]; t.AddVertex(new TurtleVertex(v.X, v.Y, v.Z)); } var mf = m.Faces; for (int i = 0; i < mf.Count; i++) { var f = mf[i]; if (f.IsTriangle) { t.AddFace(new TurtleFace(f.A, f.B, f.C)); } else { t.AddFace(new TurtleFace(f.A, f.B, f.C, f.D)); } } return(t); }
public static TurtleMesh ExtractTMesh(Curve c) { var m = new TurtleMesh(); Polyline pl; c.TryGetPolyline(out pl); TurtleFace f = new TurtleFace(pl.Count - 1); for (int j = 0; j < pl.Count - 1; j++) { var v = pl[j]; f.Add(m.VertexCount); m.AddVertex(new TurtleVertex((float)v.X, (float)v.Y, (float)v.Z)); } m.AddFace(f); return(m); }
public static ITurtleMesh Read(TextReader sr) { TurtleMesh m = new TurtleMesh(); var ci = System.Globalization.CultureInfo.InvariantCulture; int linecount = 0; string line; while ((line = sr.ReadLine()) != null) { linecount++; if (line.TrimStart(_separators).StartsWith("#", StringComparison.InvariantCultureIgnoreCase)) { continue; } var tokens = line.Split(_separators, StringSplitOptions.RemoveEmptyEntries); if (tokens.Length < 2) { continue; } var token0 = tokens[0].ToLowerInvariant(); if (token0 == "v") { if (tokens.Length < 4 || tokens.Length > 5) { throw new ArgumentOutOfRangeException(string.Format("Line {0} contains a vertex with number of coordinates different than 3 or 4.", linecount.ToString(ci))); } float x; if (!float.TryParse(tokens[1], System.Globalization.NumberStyles.Any, ci, out x)) { throw new ArgumentException(string.Format("Line {0} contains an invalid X coordinate.", linecount.ToString(ci))); } float y; if (!float.TryParse(tokens[2], System.Globalization.NumberStyles.Any, ci, out y)) { throw new ArgumentException(string.Format("Line {0} contains an invalid Y coordinate.", linecount.ToString(ci))); } float z; if (!float.TryParse(tokens[3], System.Globalization.NumberStyles.Any, ci, out z)) { throw new ArgumentException(string.Format("Line {0} contains an invalid Z coordinate.", linecount.ToString(ci))); } TurtleVertex v = new TurtleVertex(x, y, z); m.AddVertex(v); } else if (token0 == "f") { if (tokens.Length < 3) { throw new ArgumentOutOfRangeException(string.Format("Line {0} contains a face with less than three indices.", linecount.ToString(ci))); } var f = new TurtleFace(); for (int i = 1; i < tokens.Length; i++) { int loc; if (!int.TryParse(tokens[i], System.Globalization.NumberStyles.Integer, ci, out loc)) { throw new ArgumentException(string.Format("Line {0} contains an invalid face number in token {1}.", linecount.ToString(ci), (i - 1).ToString(ci))); } f.Add(loc - 1); } m.AddFace(f); } //else texture, else normal } return(m); }
public static ITurtleMesh Read(TextReader sr) { TurtleMesh m = new TurtleMesh(); var ci = System.Globalization.CultureInfo.InvariantCulture; int linecount = 0; string line; while ((line = sr.ReadLine()) != null) { linecount++; if (line.TrimStart(_separators).StartsWith("#", StringComparison.InvariantCultureIgnoreCase)) continue; var tokens = line.Split(_separators, StringSplitOptions.RemoveEmptyEntries); if (tokens.Length < 2) continue; var token0 = tokens[0].ToLowerInvariant(); if (token0 == "v") { if (tokens.Length < 4 || tokens.Length > 5) throw new ArgumentOutOfRangeException(string.Format("Line {0} contains a vertex with number of coordinates different than 3 or 4.", linecount.ToString(ci))); float x; if(!float.TryParse(tokens[1], System.Globalization.NumberStyles.Any, ci, out x)) throw new ArgumentException(string.Format("Line {0} contains an invalid X coordinate.", linecount.ToString(ci))); float y; if (!float.TryParse(tokens[2], System.Globalization.NumberStyles.Any, ci, out y)) throw new ArgumentException(string.Format("Line {0} contains an invalid Y coordinate.", linecount.ToString(ci))); float z; if (!float.TryParse(tokens[3], System.Globalization.NumberStyles.Any, ci, out z)) throw new ArgumentException(string.Format("Line {0} contains an invalid Z coordinate.", linecount.ToString(ci))); TurtleVertex v = new TurtleVertex(x, y, z); m.AddVertex(v); } else if (token0 == "f") { if (tokens.Length < 3) throw new ArgumentOutOfRangeException(string.Format("Line {0} contains a face with less than three indices.", linecount.ToString(ci))); var f = new TurtleFace(); for (int i = 1; i < tokens.Length; i++) { int loc; if (!int.TryParse(tokens[i], System.Globalization.NumberStyles.Integer, ci, out loc)) throw new ArgumentException(string.Format("Line {0} contains an invalid face number in token {1}.", linecount.ToString(ci), (i - 1).ToString(ci))); f.Add(loc - 1); } m.AddFace(f); } //else texture, else normal } return m; }