public Tile(InstanceDefinition definition, double density, RhinoDoc doc) { Index = definition.Index; var geometry = definition.GetObjects(); int renderIndex = doc.Layers.FindName("Render").Index; var renderMeshes = geometry .Where(g => g.Attributes.LayerIndex == renderIndex) .Select(g => g.Geometry as Mesh) .ToList(); Renderers = renderMeshes.Select(m => new MeshExport(m)).ToList(); int collisionsIndex = doc.Layers.FindName("Collision").Index; var meshColliders = geometry .Where(g => g.Attributes.LayerIndex == collisionsIndex) .Select(g => g.Geometry as Mesh) .ToList(); Colliders = meshColliders .Select(m => m.Offset(0.001)) .Select(m => new MeshExport(m)) .ToList(); Point3d centroid = Point3d.Origin; double mass = 0.0; foreach (var mesh in meshColliders) { var prop = VolumeMassProperties.Compute(mesh); double elementMass = prop.Volume * density; centroid += prop.Centroid * elementMass; mass += elementMass; } centroid /= mass; Centroid = new Vector3Export(centroid); Mass = (float)mass; int facesIndex = doc.Layers.FindName("Faces").Index; //Faces = geometry // .Where(g => g.Attributes.LayerIndex == facesIndex) // .Select(g => // { // Curve curve = g.Geometry as Curve; // curve.TryGetPolyline(out Polyline pl); // var plane = new Plane(pl[1], pl[2], pl[0]); // plane.Origin = (pl[0] * 0.5 + pl[2] * 0.5); // return new Orient(plane); // }).ToList(); Faces = geometry .Where(g => g.Attributes.LayerIndex == facesIndex) .Select(g => { var point = g.Geometry as Point; return(new Vector3Export(point.Location)); }).ToList(); }
public Pose(Plane plane) { position = new Vector3Export(plane.Origin); rotation = new QuaternionExport(plane); }