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); } }
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]); } }
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); }
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); } }