Пример #1
0
        public static void PushMesh(Autodesk.Revit.DB.Mesh mesh, IRenderPackage package)
        {
            for (var i = 0; i < mesh.NumTriangles; i++)
            {
                var triangle = mesh.get_Triangle(i);
                for (var j = 0; j < 3; j++)
                {
                    var xyz = triangle.get_Vertex(j);
                    package.PushTriangleVertex(xyz.X, xyz.Y, xyz.Z);
                }

                var a    = mesh.get_Triangle(i).get_Vertex(1).Subtract(mesh.get_Triangle(i).get_Vertex(0)).Normalize();
                var b    = mesh.get_Triangle(i).get_Vertex(2).Subtract(mesh.get_Triangle(i).get_Vertex(0)).Normalize();
                var norm = a.CrossProduct(b);
                package.PushTriangleVertexNormal(norm.X, norm.Y, norm.Z);
                package.PushTriangleVertexNormal(norm.X, norm.Y, norm.Z);
                package.PushTriangleVertexNormal(norm.X, norm.Y, norm.Z);
            }
        }
Пример #2
0
        public static void PushMesh(Autodesk.Revit.DB.Mesh mesh, IRenderPackage package)
        {
            for (var i = 0; i < mesh.NumTriangles; i++)
            {
                var triangle = mesh.get_Triangle(i);
                for (var j = 0; j < 3; j++)
                {
                    var xyz = triangle.get_Vertex(j);
                    package.PushTriangleVertex(xyz.X, xyz.Y, xyz.Z);
                }

                var a = mesh.get_Triangle(i).get_Vertex(1).Subtract(mesh.get_Triangle(i).get_Vertex(0)).Normalize();
                var b = mesh.get_Triangle(i).get_Vertex(2).Subtract(mesh.get_Triangle(i).get_Vertex(0)).Normalize();
                var norm = a.CrossProduct(b);
                package.PushTriangleVertexNormal(norm.X, norm.Y, norm.Z);
                package.PushTriangleVertexNormal(norm.X, norm.Y, norm.Z);
                package.PushTriangleVertexNormal(norm.X, norm.Y, norm.Z);
            }
        }
Пример #3
0
        public void Tessellate(IRenderPackage package, double tol = -1, int maxGridLines = 512)
        {
            for (int i = 0; i < vertices.Count; i = i + 3)
            {
                package.PushTriangleVertex(
                    vertices[i], vertices[i + 1], vertices[i + 2]);
            }

            for (int i = 0; i < normals.Count; i = i + 3)
            {
                package.PushTriangleVertexNormal(
                    normals[i], normals[i + 1], normals[i + 2]);
            }

            for (int i = 0; i < colors.Count; i = i + 4)
            {
                package.PushTriangleVertexColor(
                    colors[i], colors[i + 1], colors[i + 2], colors[i + 3]);
            }
        }
Пример #4
0
 private void PushTriangleVertex(IRenderPackage package, Point p, Vector n)
 {
     package.PushTriangleVertex(p.X, p.Y, p.Z);
     package.PushTriangleVertexColor(255, 255, 0, 255);
     package.PushTriangleVertexNormal(n.X, n.Y, n.Z);
 }
Пример #5
0
        private static void DrawCS(CoordinateSystem cs, IRenderPackage package)
        {
            //ccw unit rect points
            var a = Point.ByCoordinates(-.25, -.25, 0);
            var b = Point.ByCoordinates(.25, -.25, 0);
            var c = Point.ByCoordinates(.25, .25, 0);
            var d = Point.ByCoordinates(-.25, .25, 0);

            var planes = new List<Plane>() {cs.XYPlane, cs.YZPlane, cs.ZXPlane};
            foreach (var p in planes)
            {
                var z = p.Normal.Normalized();
                var y = z.IsParallel(Vector.ByCoordinates(0,0,1)) ? Vector.ByCoordinates(0,1,0) :
                    z.Cross(Vector.ByCoordinates(0, 0, 1)).Normalized();
                var x = z.Cross(y).Normalized();

                var newCS = CoordinateSystem.ByOriginVectors(cs.Origin, x,y,z);

                var pA = (Point)a.Transform(CoordinateSystem.Identity(), newCS);
                var pB = (Point)b.Transform(CoordinateSystem.Identity(), newCS);
                var pC = (Point)c.Transform(CoordinateSystem.Identity(), newCS);
                var pD = (Point)d.Transform(CoordinateSystem.Identity(), newCS);

                package.PushTriangleVertex(pA.X, pA.Y, pA.Z);
                package.PushTriangleVertex(pB.X, pB.Y, pB.Z);
                package.PushTriangleVertex(pC.X, pC.Y, pC.Z);

                package.PushTriangleVertex(pC.X, pC.Y, pC.Z);
                package.PushTriangleVertex(pD.X, pD.Y, pD.Z);
                package.PushTriangleVertex(pA.X, pA.Y, pA.Z);
            }
        }