Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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.");
                    }
                }
            }
        }