internal void grabUpperPlane_old() { Model3DGroup model = (Model3DGroup)this.Content; SmileObjReader obj = new SmileObjReader(); Model3DCollection childs = model.Children; int c = 0; int i = 1; foreach (GeometryModel3D gm in childs) { MeshGeometry3D mesh = (MeshGeometry3D)gm.Geometry; obj.AddGroup("mesh" + c); Console.WriteLine("Positions:" + mesh.Positions.Count); Console.WriteLine("Indices:" + mesh.TriangleIndices.Count); Point3DCollection positions = mesh.Positions; foreach (var pp in positions) { //Point3D pp = ToLocal(p); if (pp.Z >= 0) { obj.AddVertex(pp.X + " " + pp.Y + " " + pp.Z); if (i % 4 == 0) { obj.AddFace((i - 3) + " " + (i - 2) + " " + (i - 1)); obj.AddFace((i - 2) + " " + (i - 1) + " " + (i)); } i++; } else { //obj.AddVertex(p.X + " " + p.Y + " " + 0); } } /* for (int i = 0; i < mesh.TriangleIndices.Count; i = i + 3) { int index1 = mesh.TriangleIndices[i]; int index2 = mesh.TriangleIndices[i + 1]; int index3 = mesh.TriangleIndices[i + 2]; Point3D point1 = mesh.Positions[index1]; Point3D point2 = mesh.Positions[index2]; Point3D point3 = mesh.Positions[index3]; if (point1.Z >= 0) { obj.AddVertex(point1.X + " " + point1.Y + " " + point1.Z); } else { obj.AddVertex(point1.X + " " + point1.Y + " " + 0); } if (point2.Z >= 0) { obj.AddVertex(point2.X + " " + point2.Y + " " + point2.Z); } else { obj.AddVertex(point2.X + " " + point2.Y + " " + 0); } if (point3.Z >= 0) { obj.AddVertex(point3.X + " " + point3.Y + " " + point3.Z); } else { obj.AddVertex(point3.X + " " + point3.Y + " " + 0); } obj.AddFace(i + " " + (i + 1) + " " + (i + 2)); //obj.AddFace(index1 + " " + index2 + " " + index3); } */ c++; } ModelVisual3D v = new ModelVisual3D(); v.Content = obj.BuildModel(); parent.Children.Add(v); }