public static PackedGeometry Pack(IndexedFaceSet ifs) { PackedGeometry packed; TextureCoordinate texCoordinate; Coordinate coordinate; Color colorNode; ColorRGBA colorRGBANode; packed = new PackedGeometry(); //packed.Texturing = ifs.texCoordinate != null;// || parentShape.texturingEnabled; texCoordinate = (TextureCoordinate)ifs.ChildrenWithAppliedReferences.FirstOrDefault(n => n.GetType() == typeof(TextureCoordinate)); coordinate = (Coordinate)ifs.ChildrenWithAppliedReferences.FirstOrDefault(n => n.GetType() == typeof(Coordinate)); colorNode = (Color)ifs.ChildrenWithAppliedReferences.FirstOrDefault(n => n.GetType() == typeof(Color)); colorRGBANode = (ColorRGBA)ifs.ChildrenWithAppliedReferences.FirstOrDefault(n => n.GetType() == typeof(ColorRGBA)); packed.RGBA = colorRGBANode != null; packed.RGB = colorNode != null; packed.Coloring = packed.RGBA || packed.RGB; packed.generateColorMap = packed.Coloring; if (packed.RGB && !packed.RGBA) { packed.color = X3DTypeConverters.Floats(colorNode.color); } else if (packed.RGBA && !packed.RGB) { packed.color = X3DTypeConverters.Floats(colorRGBANode.color); } if (texCoordinate != null && !string.IsNullOrEmpty(ifs.texCoordIndex)) { packed._texIndices = X3DTypeConverters.ParseIndicies(ifs.texCoordIndex); packed._texCoords = X3DTypeConverters.MFVec2f(texCoordinate.point); packed.Texturing = true; } if (coordinate != null && !string.IsNullOrEmpty(ifs.coordIndex)) { packed._indices = X3DTypeConverters.ParseIndicies(ifs.coordIndex); packed._coords = X3DTypeConverters.MFVec3f(coordinate.point); if (!string.IsNullOrEmpty(ifs.colorIndex)) { packed._colorIndicies = X3DTypeConverters.ParseIndicies(ifs.colorIndex); } if (ifs.coordIndex.Contains(RESTART_INDEX.ToString())) { packed.restartIndex = RESTART_INDEX; } packed.Interleave(); } return(packed); }
/// <summary> /// QL4BIM GeometryOperation Function /// </summary> /// <param name="elements"></param> /// <param name="xModelContext"></param> /// <returns></returns> public static List <TriangleMesh> CreateTriangleMeshes(List <IIfcProduct> elements, Xbim3DModelContext xModelContext) { var resList = new List <TriangleMesh>(); foreach (var item in elements) { // var mesh = GeometryHandler.WriteTriangles(item, xModelContext, new XbimMatrix3D()) var mesh = GeometryHandler.WriteAllTriangles(item, xModelContext, new XbimMatrix3D()); // Transformation // var vertices = jObject.SelectToken("vertices").ToList().Select(value => value.Value<double>()).ToArray(); // var indices = jObject.SelectToken("faces").ToList().Select(value => value.Value<int>()).ToArray(); // var faceSet = new IndexedFaceSet(item.Id.ToString(), indices, vertices); var vertices = new List <Tuple <double, double, double> >(); // var posList = new List<double>(); foreach (var pos in mesh.Positions) { vertices.Add(new Tuple <double, double, double>(pos.X, pos.Y, pos.Z)); // posList.Add(pos.X); // posList.Add(pos.Y); // posList.Add(pos.Z); } var indices = new List <Tuple <int, int, int> >(); for (int i = 0; i < mesh.TriangleIndices.Count; i = i + 3) { indices.Add(new Tuple <int, int, int>(mesh.TriangleIndices[i], mesh.TriangleIndices[i + 1], mesh.TriangleIndices[i + 2])); } if (vertices.Count == 0 || indices.Count == 0) { continue; } var faceSet = new IndexedFaceSet(vertices.ToArray(), indices.ToArray(), item.GlobalId.ToString(), 1); // var faceSet = new IndexedFaceSet(item.GlobalId.ToString(), mesh.TriangleIndices.ToArray(), posList.ToArray()); resList.Add(faceSet.CreateMesh()); } return(resList); }
private List <TriangleMesh> CreateTriangleMeshes(ModelInfo modelInfo) { var elements1 = modelInfo.GetCurrentElements(); var resList = new List <TriangleMesh>(); foreach (var item in elements1) { var jObject = item.AttributeGroups["geometry"]["threejs"] as JObject; if (jObject == null) { continue; } // Transformation var vertices = jObject.SelectToken("vertices").ToList().Select(value => value.Value <double>()).ToArray(); var indices = jObject.SelectToken("faces").ToList().Select(value => value.Value <int>()).ToArray(); // var faceSet = new IndexedFaceSet(item.Id.ToString(), indices, vertices); var faceSet = new IndexedFaceSet(item.Id.ToString(), indices, vertices); resList.Add(faceSet.CreateMesh()); } return(resList); }
public static void AddShape(IndexedFaceSet ifs) { Shapes.Add(ifs); MarkAsDirty(RedrawTypeRequired.RecalculateViewPrimitives); }
private List<TriangleMesh> CreateTriangleMeshes(ModelInfo modelInfo) { var elements1 = modelInfo.GetCurrentElements(); var resList = new List<TriangleMesh>(); foreach (var item in elements1) { var jObject = item.AttributeGroups["geometry"]["threejs"] as JObject; if (jObject == null) continue; // var vertices = jObject.SelectToken("vertices").ToList().Select(value => value.Value<double>()).ToArray(); // Transformation var vertices = jObject.SelectToken("vertices").ToList().Select(value => value.Value<double>()).ToArray(); var indices = jObject.SelectToken("faces").ToList().Select(value => value.Value<int>()).ToArray(); // var faceSet = new IndexedFaceSet(item.Id.ToString(), indices, vertices); var faceSet = new IndexedFaceSet(item.Id.ToString(), indices, vertices); resList.Add(faceSet.CreateMesh()); } return resList; }
/// <summary>Parses the x3d file that this X3dFile represents and extracts the IndexedFaces and CameraPosition.</summary> public void Parse(double scale) { IndexedFaces = new List <IndexedFaceSet>(); StreamReader sr = new StreamReader(FullPath); string s = ""; while (s != "</head>" && !sr.EndOfStream) { s = sr.ReadLine(); } //while (f.CanRead) //{ // f.read //} XmlTextReader reader = new XmlTextReader(sr); string name = ""; string coordIndices = ""; string points = ""; while (reader.Read()) { //Console.WriteLine(reader.Name); switch (reader.NodeType) { case XmlNodeType.Element: // The node is an element. if (reader.Name == "Transform") { name = reader["DEF"]; } else if (reader.Name == "IndexedFaceSet") { coordIndices = reader["coordIndex"]; } else if (reader.Name == "Coordinate") { points = reader["point"]; } else if (reader.Name == "Viewpoint") { string[] camera = reader["position"].Split(' '); CameraPosition = new Coord(double.Parse(camera[1]) * scale, double.Parse(camera[2]) * scale, -double.Parse(camera[0]) * scale); //CameraPosition = new Coord(double.Parse(camera[0]) * scale, double.Parse(camera[1]) * scale, double.Parse(camera[2]) * scale); } break; } if (reader.NodeType == XmlNodeType.EndElement && reader.Name == "IndexedFaceSet") { IndexedFaceSet ifs = new IndexedFaceSet(name, coordIndices, points, scale); IndexedFaces.Add(ifs); } if (reader.NodeType == XmlNodeType.EndElement && reader.Name == "Scene") { break; } } }
public void AddShape(IndexedFaceSet ifs) { Drawing.AddShape(ifs); }
private static TriangleMesh CreateTriangleMeshes(string id, double[] vertices, int[] indices) { var faceSet = new IndexedFaceSet(id, indices, vertices); return(faceSet.CreateMesh()); }