public static XbimShapeTriangulation ReadShapeTriangulation(this BinaryReader br) { var version = br.ReadByte(); //stream format version var numVertices = br.ReadInt32(); var numTriangles = br.ReadInt32(); var vertices = new List <XbimPoint3D>(numVertices); for (var i = 0; i < numVertices; i++) { vertices.Add(br.ReadPointFloat3D()); } var numFaces = br.ReadInt32(); var faces = new List <XbimFaceTriangulation>(numFaces); for (var i = 0; i < numFaces; i++) { var numTrianglesInFace = br.ReadInt32(); if (numTrianglesInFace == 0) { continue; } var isPlanar = numTrianglesInFace > 0; numTrianglesInFace = Math.Abs(numTrianglesInFace); if (isPlanar) { var faceTriangulation = new XbimFaceTriangulation(numTrianglesInFace, 1); faceTriangulation.AddNormal(br.ReadPackedNormal()); for (var j = 0; j < numTrianglesInFace; j++) { faceTriangulation.AddIndex(br.ReadIndex(numVertices)); //a faceTriangulation.AddIndex(br.ReadIndex(numVertices)); //b faceTriangulation.AddIndex(br.ReadIndex(numVertices)); //c } faces.Add(faceTriangulation); } else { var faceTriangulation = new XbimFaceTriangulation(numTrianglesInFace, numTrianglesInFace * 3); for (var j = 0; j < numTrianglesInFace; j++) { faceTriangulation.AddIndex(br.ReadIndex(numVertices)); //a faceTriangulation.AddNormal(br.ReadPackedNormal()); faceTriangulation.AddIndex(br.ReadIndex(numVertices)); //b faceTriangulation.AddNormal(br.ReadPackedNormal()); faceTriangulation.AddIndex(br.ReadIndex(numVertices)); //c faceTriangulation.AddNormal(br.ReadPackedNormal()); } faces.Add(faceTriangulation); } } return(new XbimShapeTriangulation(vertices, faces, version)); }
private static void composetrianglesets(XbimFaceTriangulation face, XbimShapeTriangulation shapemesh) { Dictionary <string, List <int> > triangles = new Dictionary <string, List <int> >(); Dictionary <string, XbimPoint3D> vertices = new Dictionary <string, XbimPoint3D>(); List <XbimPoint3D> verts = shapemesh.Vertices.ToList(); //for (int i = 0; i < verts.Count(); i++) //{ // string name = "vertex_" + (i).ToString(); // vertices.Add(name, verts[i]); //} //foreach (var v in vertices) //{ // Console.WriteLine($"{GetIndent(15)}{v.Key + ": "}{v.Value.X + ", "}{v.Value.Y + ", "}{v.Value.Z}"); //} /*******************************************************************************************************/ for (int i = 0; i < face.TriangleCount; i++) { string name = "triangle_" + (i + 1).ToString(); triangles.Add(name, face.Indices.ToList().GetRange(i * 3, 3)); } foreach (var x in triangles) { var vert1 = x.Value[0]; var vert2 = x.Value[1]; var vert3 = x.Value[2]; Console.WriteLine($"{"\n"}{GetIndent(15)}{x.Key + ": "}{vert1 + ","}{vert2 + ","}{vert3}"); Console.WriteLine($"{GetIndent(15)}{"---------------------"}"); for (int y = 0; y < x.Value.Count(); y++) { Console.WriteLine($"{GetIndent(15)}{"vertex_"+ x.Value[y] + ": "}{Math.Round((double)verts[x.Value[y]].X, 2)}{"|"}{Math.Round((double)verts[x.Value[y]].Y, 2)}{"|"}{Math.Round((double)verts[x.Value[y]].Z, 2)}"); } } /*******************************************************************************************************/ }
private static void composetrianglesets(XbimFaceTriangulation face, XbimShapeTriangulation shapemesh, int entityLabel, int Number_Faces, int faceNum, int triangle_Count, int number_OF_Walls) { Dictionary <string, List <int> > triangles = new Dictionary <string, List <int> >(); Dictionary <string, XbimPoint3D> vertices = new Dictionary <string, XbimPoint3D>(); List <XbimPoint3D> verts = shapemesh.Vertices.ToList(); xmlWriter.WriteStartElement("Face"); xmlWriter.WriteAttributeString("ID", faceNum.ToString()); //for (int i = 0; i < verts.Count(); i++) //{ // string name = "vertex_" + (i).ToString(); // vertices.Add(name, verts[i]); //} //foreach (var v in vertices) //{ // Console.WriteLine($"{GetIndent(15)}{v.Key + ": "}{v.Value.X + ", "}{v.Value.Y + ", "}{v.Value.Z}"); //} /*******************************************************************************************************/ xmlWriter.WriteStartElement("Triangles"); xmlWriter.WriteAttributeString("Triangle_Number", triangle_Count.ToString()); for (int i = 0; i < face.TriangleCount; i++) { string name = "triangle_" + (i + 1).ToString(); triangles.Add(name, face.Indices.ToList().GetRange(i * 3, 3)); } int IDtriangle = 0; foreach (var x in triangles) { xmlWriter.WriteStartElement("Triangle"); xmlWriter.WriteAttributeString("ID", IDtriangle.ToString()); var vert1 = x.Value[0]; var vert2 = x.Value[1]; var vert3 = x.Value[2]; Console.WriteLine($"{"\n"}{GetIndent(15)}{x.Key + ": "}{vert1 + ","}{vert2 + ","}{vert3}"); Console.WriteLine($"{GetIndent(15)}{"---------------------"}"); xmlWriter.WriteStartElement("Vertices"); xmlWriter.WriteAttributeString("VerticeNum", "3"); for (int y = 0; y < x.Value.Count(); y++) { var VerticeID = "vertex_" + x.Value[y]; Console.WriteLine($"{GetIndent(15)}{VerticeID+": "}{Math.Round((double)verts[x.Value[y]].X, 2)}{"|"}{Math.Round((double)verts[x.Value[y]].Y, 2)}{"|"}{Math.Round((double)verts[x.Value[y]].Z, 2)}"); xmlWriter.WriteStartElement("Vertice"); xmlWriter.WriteAttributeString("ID", VerticeID); xmlWriter.WriteElementString("X", (Math.Round((double)verts[x.Value[y]].X, 2).ToString)()); //xmlWriter.WriteString((Math.Round((double)verts[x.Value[y]].X, 2).ToString)()); // xmlWriter.WriteEndElement(); // xmlWriter.WriteWhitespace("\n"); xmlWriter.WriteElementString("Y", (Math.Round((double)verts[x.Value[y]].Y, 2).ToString)()); // xmlWriter.WriteEndElement(); // xmlWriter.WriteWhitespace("\n"); xmlWriter.WriteElementString("Z", (Math.Round((double)verts[x.Value[y]].Z, 2).ToString)()); // xmlWriter.WriteString(( // xmlWriter.WriteEndElement(); // xmlWriter.WriteWhitespace("\n"); // Console.WriteLine("Wall_ID: " + entityLabel + " Face_Number :" + faceNum + " triangle_Count :" + triangle_Count + " triangle_index :" + x.Key + " Number_Vertices :" + x.Value.Count + $"{GetIndent(15)}{"vertex_" + x.Value[y] + ": "}{Math.Round((double)verts[x.Value[y]].X, 2)}{"|"}{Math.Round((double)verts[x.Value[y]].Y, 2)}{"|"}{Math.Round((double)verts[x.Value[y]].Z, 2)}"); //XmlWriter writer = XmlWriter.Create("C:\\Users\\aniru\\Desktop\\wall.xml"); //this is for the verticeID // xmlWriter.WriteEndElement(); // xmlWriter.WriteWhitespace("\n"); xmlWriter.WriteEndElement(); } //this is for the vertices xmlWriter.WriteEndElement(); // xmlWriter.WriteWhitespace("\n"); //this is for the triangle id xmlWriter.WriteEndElement(); // xmlWriter.WriteWhitespace("\n"); IDtriangle++; } //this is for the triangle Number xmlWriter.WriteEndElement(); // xmlWriter.WriteWhitespace("\n"); //this is for the face id xmlWriter.WriteEndElement(); // xmlWriter.WriteWhitespace("\n"); // XElement Walls = //new XElement("Walls", new XAttribute("NumWalls", number_OF_Walls), // new XElement("WallId", entityLabel.ToString(), // new XElement("Faces", new XAttribute("NumFaces", Number_Faces), // new XElement("FaceIndex", faceNum, // new XElement("Triangles", new XAttribute("NumTriangles", triangle_Count), // new XElement("TriangleIndex", x.Key, // new XElement("Vertices", new XAttribute("NumVertices", x.Value.Count), // new XElement("VerticeIndex", "vertex_" + x.Value[y], // new XElement("X", 2, // new XElement("Y", 3, // new XElement("Z", 4))))))))))); ////Console.WriteLine("_____________00000000______"+Walls.Element("WallId").ToString()); //Walls.Descendants("Faces").FirstOrDefault(el => el.Attribute("NumFaces") != null).Add("xii", 3); //Console.WriteLine("------------------------------------"+Walls.Element("WallId").ToString()); //Console.WriteLine("------------------------------------!" + Walls.Element("VerticeIndex")); //Console.WriteLine("------------------------------------!" + Walls.Descendants("Vertices")); // foreach (var ad in Walls.Descendants("VerticeIndex")) //{ // ad.Add(new XElement("xii", 2)); // Console.WriteLine("sdasdasdasd"); //} //// Walls.Element("VerticeIndex").Add("ass", 2); // Console.WriteLine(result.ToString()); // Walls.Element("Faces")..Add(new XElement("xaaa", 2)); //for (int j=0; j< x.Value.Count();j++) //{ // Walls.Element("VerticeIndex").Add(new XElement("x", Math.Round((double)verts[x.Value[y]].X, 2)), // new XElement("Y", Math.Round((double)verts[x.Value[y]].Y, 2)), // new XElement("Z", Math.Round((double)verts[x.Value[y]].Z, 2))); //} //String filename = "Walls.xml"; //var doc = new XDocument(); //if (File.Exists(filename)) //{ //// Console.WriteLine("======================================================the file existsssssss "); // //doc = XDocument.Load(filename); // //doc.Element("Walls").Add(Walls); // XDocument xdoc = XDocument.Load("Walls.xml"); // xdoc.Element("Walls").Add(Walls); //append after the last backup element // xdoc.Save("Walls.xml"); //} //else //{ // // Console.WriteLine("___________________________________________________the file doesntttttttttttttt 000000 existsssssss "); // Walls.Save("Walls.xml"); //} //Console.WriteLine(str); // XElement root = new XElement("Walls",new XAttribute("NumWalls",number_OF_Walls), //new XElement("WallID", "child content"), //new XElement("DASD","sdasda", // new XElement("asdweq","asdwqwe")) // root.Save("root.xml"); ////Console.WriteLine(str11); /*******************************************************************************************************/ }
private static void composetrianglesets(XbimFaceTriangulation face, XbimShapeTriangulation shapemesh, int entityLabel, int Number_Faces, int face_index, int triangle_Count, int number_of_shapes) { Dictionary <string, List <int> > triangles = new Dictionary <string, List <int> >(); Dictionary <string, XbimPoint3D> vertices = new Dictionary <string, XbimPoint3D>(); List <XbimPoint3D> verts = shapemesh.Vertices.ToList(); //write each face with its ID xmlWriter.WriteStartElement("Face"); xmlWriter.WriteAttributeString("ID", face_index.ToString()); //write the Triangles with its number for each face xmlWriter.WriteStartElement("Triangles"); xmlWriter.WriteAttributeString("NumTriangles", triangle_Count.ToString()); //for (int i = 0; i < verts.Count(); i++) //{ // string name = "vertex_" + (i).ToString(); // vertices.Add(name, verts[i]); //} //foreach (var v in vertices) //{ // Console.WriteLine($"{GetIndent(15)}{v.Key + ": "}{v.Value.X + ", "}{v.Value.Y + ", "}{v.Value.Z}"); //} /*******************************************************************************************************/ for (int i = 0; i < face.TriangleCount; i++) { string name = "triangle_" + (i + 1).ToString(); triangles.Add(name, face.Indices.ToList().GetRange(i * 3, 3)); } //for the id of the triangle int triangle_index = 0; foreach (var x in triangles) { //writing each triangle with his ID xmlWriter.WriteStartElement("Triangle"); xmlWriter.WriteAttributeString("ID", triangle_index.ToString()); var vert1 = x.Value[0]; var vert2 = x.Value[1]; var vert3 = x.Value[2]; Console.WriteLine($"{"\n"}{GetIndent(15)}{x.Key + ": "}{vert1 + ","}{vert2 + ","}{vert3}"); Console.WriteLine($"{GetIndent(15)}{"---------------------"}"); //writing the vertices element with its count xmlWriter.WriteStartElement("Vertices"); xmlWriter.WriteAttributeString("NumVertices", "3"); Double X; Double Y; Double Z; for (int y = 0; y < x.Value.Count(); y++) { //get the vertice index(ID) and its x,y,z var vertice_index = x.Value[y]; X = Math.Round((double)verts[x.Value[y]].X, 2); Y = Math.Round((double)verts[x.Value[y]].Y, 2); Z = Math.Round((double)verts[x.Value[y]].Z, 2); Console.WriteLine($"{GetIndent(15)}{vertice_index.ToString() + ": "}{X}{"|"}{Y}{"|"}{Z}"); //writing in the xml file xmlWriter.WriteStartElement("Vertice"); xmlWriter.WriteAttributeString("ID", vertice_index.ToString()); xmlWriter.WriteElementString("X", X.ToString()); xmlWriter.WriteElementString("Y", Y.ToString()); xmlWriter.WriteElementString("Z", Z.ToString()); //this is for the vertice_index xmlWriter.WriteEndElement(); } //this is for the vertices xmlWriter.WriteEndElement(); //this is for the triangle id xmlWriter.WriteEndElement(); triangle_index++; } //this is for the triangle Number xmlWriter.WriteEndElement(); //this is for the face id xmlWriter.WriteEndElement(); }