コード例 #1
0
        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));
        }
コード例 #2
0
        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)}");
                }
            }
            /*******************************************************************************************************/
        }
コード例 #3
0
        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);

            /*******************************************************************************************************/
        }
コード例 #4
0
        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();
        }