/// <summary> /// This is the method that actually does the work. /// </summary> /// <param name="DA">The DA object is used to retrieve from inputs and store in outputs.</param> protected override void SolveInstance(IGH_DataAccess DA) { Rhino.Geometry.Mesh inputMesh = null; DroidVolume vol = null; double x = new double(); double y = new double(); if (!DA.GetData(0, ref inputMesh)) { return; } if (!DA.GetData(1, ref vol)) { return; } if (!DA.GetData(2, ref x)) { return; } if (!DA.GetData(3, ref y)) { return; } Vector3d normal = new Vector3d(0, 0, 1); Plane worldXY = new Plane(Point3d.Origin, normal); Vector3d trans = new Vector3d(x, y, 0); Rhino.Geometry.Mesh _inputMesh = new Rhino.Geometry.Mesh(); if (vol.volumeOutline.Length == 2) { _inputMesh = inputMesh; BoundingBox bbx = _inputMesh.GetBoundingBox(worldXY); Point3d cnr = bbx.Corner(true, true, true); Point3d center = bbx.Center; center.Z = cnr.Z; Vector3d toMiddle = new Vector3d((Point3d.Origin - center + trans)); _inputMesh.Transform(Transform.Translation(toMiddle)); } if (vol.volumeOutline.Length == 6) { _inputMesh = inputMesh; BoundingBox bbx = _inputMesh.GetBoundingBox(worldXY); Point3d cnr = bbx.Corner(true, true, true); Point3d center = bbx.Center; center.Z = cnr.Z; Point3d middle = new Point3d((vol.size[0] / 2), (vol.size[1] / 2), 0); Vector3d toMiddle = new Vector3d((middle - center + trans)); _inputMesh.Transform(Transform.Translation(toMiddle)); } DroidMesh dMesh = new DroidMesh(_inputMesh); DA.SetData(0, dMesh); DA.SetData(1, _inputMesh); }
/// <summary> /// This is the method that actually does the work. /// </summary> /// <param name="DA">The DA object is used to retrieve from inputs and store in outputs.</param> protected override void SolveInstance(IGH_DataAccess DA) { // INPUT // declaration List <Rhino.Geometry.Mesh> meshes = new List <Rhino.Geometry.Mesh>(); int num = 0; bool runIt = false; bool showIt = false; bool writeObj = false; string path = null; DA.GetDataList <Rhino.Geometry.Mesh>(0, meshes); DA.GetData(1, ref num); DA.GetData(2, ref runIt); DA.GetData(3, ref showIt); DA.GetData(4, ref writeObj); DA.GetData(5, ref path); // run if (runIt) { Rhino.Geometry.Mesh mesh = MeshMorphoLib.MeshIntegration.UnionMesh(meshes); List <g3.Vector3f> vertici; int[] triangoli; var vettori = MeshMorphoLib.MeshIntegration.DecomposeRhinoMesh(mesh, out triangoli, out vertici); var g3mesh = MeshMorphoLib.MeshClassIO.CreaMesh(vertici, triangoli, vettori); double scalefactor; var newMesh = MeshMorphoLib.MeshClassFnc.MineCraft(g3mesh, num, out scalefactor); var scale = Rhino.Geometry.Transform.Scale(new Point3d(0, 0, 0), scalefactor); if (showIt) { Rhino.Geometry.Mesh resultMesh = MeshMorphoLib.MeshIntegration.ConvertToRhinoMesh(newMesh); resultMesh.Transform(scale); DA.SetData(0, resultMesh); } if (writeObj) { try { string fullFolder = System.IO.Path.Combine(path, "MorphoModel.obj"); MeshClassIO.WriteMesh(newMesh, fullFolder); DA.SetData(1, fullFolder); } catch { this.AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "Please provide a valid path."); } } } }