/// <summary> /// solid /// facet normal -1.000000 -0.000000 -0.000000 /// outer loop /// vertex -12.000000 -12.000000 0.000000 /// vertex -12.000000 -12.000000 24.000000 /// vertex -12.000000 12.000000 0.000000 /// endloop /// endfacet /// </summary> /// <param name="file"></param> private void LoadText(string file) { string text = System.IO.File.ReadAllText(file); int lastP = 0, p, pend, normal, outer, vertex, vertex2; while ((p = text.IndexOf("facet", lastP)) > 0) { pend = text.IndexOf("endfacet", p + 5); normal = text.IndexOf("normal", p) + 6; outer = text.IndexOf("outer loop", normal); STLTriangle tri = new STLTriangle(); tri.normal = extractVector(text.Substring(normal, outer - normal)); outer += 10; vertex = text.IndexOf("vertex", outer) + 6; vertex2 = text.IndexOf("vertex", vertex); tri.p1 = extractVector(text.Substring(vertex, vertex2 - vertex)); vertex2 += 7; vertex = text.IndexOf("vertex", vertex2); tri.p2 = extractVector(text.Substring(vertex2, vertex - vertex2)); vertex += 7; vertex2 = text.IndexOf("endloop", vertex); tri.p3 = extractVector(text.Substring(vertex, vertex2 - vertex)); lastP = pend + 8; list.AddLast(tri); } }
public void Load(string file) { list = new LinkedList <STLTriangle>(); filename = file; try { DateTime lastModified2 = File.GetLastWriteTime(filename); lastModified = lastModified2.Ticks; FileStream f = File.OpenRead(file); byte[] header = new byte[80]; ReadArray(f, header); /* if (header[0] == 's' && header[1] == 'o' && header[2] == 'l' && header[3] == 'i' && header[4] == 'd') * { * f.Close(); * LoadText(file); * } * else * {*/ BinaryReader r = new BinaryReader(f); int nTri = r.ReadInt32(); if (f.Length != 84 + nTri * 50) { f.Close(); LoadText(file); } else { for (int i = 0; i < nTri; i++) { STLTriangle tri = new STLTriangle(); tri.normal = new Vector3(r.ReadSingle(), r.ReadSingle(), r.ReadSingle()); tri.p1 = new Vector3(r.ReadSingle(), r.ReadSingle(), r.ReadSingle()); tri.p2 = new Vector3(r.ReadSingle(), r.ReadSingle(), r.ReadSingle()); tri.p3 = new Vector3(r.ReadSingle(), r.ReadSingle(), r.ReadSingle()); list.AddLast(tri); r.ReadUInt16(); } r.Close(); f.Close(); } //} FileInfo info = new FileInfo(file); name = info.Name; } catch (Exception e) { MessageBox.Show(e.ToString(), "Error reading STL file", MessageBoxButtons.OK, MessageBoxIcon.Error); } }