Esempio n. 1
0
        private List <double>[] Divide_Range_by_Count(FD_Range range, double count)
        {
            double volume      = range.Width * range.Deepth * range.Height / count;
            double unit_length = Math.Pow(volume, 1.0 / 3.0);
            double dis         = Math.Round(unit_length, 2);

            return(Divide_Range_by_Dis(range, dis));
        }
Esempio n. 2
0
        private List <double>[] Divide_Range_by_Dis(FD_Range range, double dis)
        {
            List <double>[] Analysis_mesh = new List <double> [3];
            Analysis_mesh[0] = Divide_Axis_by_Dis(range.Offset_X, range.Width, dis);
            Analysis_mesh[1] = Divide_Axis_by_Dis(range.Offset_Y, range.Deepth, dis);
            Analysis_mesh[2] = Divide_Axis_by_Dis(range.Offset_Z, range.Height, dis);

            return(Analysis_mesh);
        }
Esempio n. 3
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            int  unit = 0;
            Box  box  = new Box();
            bool run  = false;

            DA.GetData(0, ref unit);
            DA.GetData(1, ref box);
            DA.GetData(2, ref run);

            Point3d[] verices = box.GetCorners();
            Point3d   min     = verices[0];
            Point3d   max     = verices[0];

            foreach (Point3d item in verices)
            {
                if (item.X < min.X || item.Y < min.Y || item.Z < min.Z)
                {
                    min = item;
                }
                if (item.X > max.X || item.Y > max.Y || item.Z > max.Z)
                {
                    max = item;
                }
            }

            FD_Range range = new FD_Range(unit, max.X - min.X, max.Y - min.Y, max.Z - min.Z, min.X, min.Y, min.Z);

            string values = "Unit: " + range.Unit.ToString() + Environment.NewLine;

            values += "Width: " + range.Width.ToString() + Environment.NewLine;
            values += "Deepth: " + range.Deepth.ToString() + Environment.NewLine;
            values += "Height: " + range.Height.ToString() + Environment.NewLine;
            values += "Offset_X: " + range.Offset_X.ToString() + Environment.NewLine;
            values += "Offset_Y: " + range.Offset_Y.ToString() + Environment.NewLine;
            values += "Offset_Z: " + range.Offset_Z.ToString();

            DA.SetData(0, range);
            DA.SetData(1, values);

            if (run)
            {
                range.Update();
            }
        }
Esempio n. 4
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            int    unit     = 0;
            double width    = 0;
            double deepth   = 0;
            double height   = 0;
            double offset_x = 0;
            double offset_y = 0;
            double offset_z = 0;
            bool   run      = false;

            DA.GetData(0, ref unit);
            DA.GetData(1, ref width);
            DA.GetData(2, ref deepth);
            DA.GetData(3, ref height);
            DA.GetData(4, ref offset_x);
            DA.GetData(5, ref offset_y);
            DA.GetData(6, ref offset_z);
            DA.GetData(7, ref run);

            FD_Range range;
            Box      range_box;

            if (width != 0 && deepth != 0 && height != 0)
            {
                range = new FD_Range(unit, width, deepth, height, offset_x, offset_y, offset_z);
            }
            else
            {
                range = new FD_Range();
            }

            Plane baseplane = new Plane(new Point3d(range.Offset_X, range.Offset_Y, range.Offset_Z), new Vector3d(0, 0, 1));

            range_box = new Box(baseplane, new Interval(0, range.Width), new Interval(0, range.Deepth), new Interval(0, range.Height));

            DA.SetData(0, range);
            DA.SetData(1, range_box);

            if (run)
            {
                range.Update();
            }
        }
Esempio n. 5
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            FD_Range range = new FD_Range(1, 1, 1);
            int      mode  = 0;
            double   cd    = 0;
            List <FD_Mesh.FD_Sub_Division> sbs = new List <FD_Mesh.FD_Sub_Division>();
            bool me  = true;
            bool run = false;

            DA.GetData(0, ref range);
            DA.GetData(1, ref mode);
            DA.GetData(2, ref cd);
            DA.GetDataList(3, sbs);
            DA.GetData(4, ref me);
            DA.GetData(5, ref run);

            List <double>[] meshes = new List <double> [0];

            if (mode == 0)
            {
                meshes = Divide_Range_by_Count(range, cd);
            }
            if (mode == 1)
            {
                meshes = Divide_Range_by_Dis(range, cd);
            }


            FD_Mesh analysis_mesh = new FD_Mesh(meshes[0], meshes[1], meshes[2]);

            analysis_mesh.Sub_Divisions = sbs;

            analysis_mesh.Add_Model_Edge = me;

            List <Line> mesh_line = new List <Line>();

            foreach (double item in meshes[0])
            {
                Point3d from = new Point3d(item, range.Offset_Y + range.Deepth, range.Offset_Z);
                Point3d to1  = new Point3d(item, range.Offset_Y, range.Offset_Z);
                Point3d to2  = new Point3d(item, range.Offset_Y + range.Deepth, range.Offset_Z + range.Height);
                mesh_line.Add(new Line(from, to1));
                mesh_line.Add(new Line(from, to2));
            }

            foreach (double item in meshes[1])
            {
                Point3d from = new Point3d(range.Offset_X + range.Width, item, range.Offset_Z);
                Point3d to1  = new Point3d(range.Offset_X, item, range.Offset_Z);
                Point3d to2  = new Point3d(range.Offset_X + range.Width, item, range.Offset_Z + range.Height);
                mesh_line.Add(new Line(from, to1));
                mesh_line.Add(new Line(from, to2));
            }

            foreach (double item in meshes[2])
            {
                Point3d from = new Point3d(range.Offset_X + range.Width, range.Offset_Y + range.Deepth, item);
                Point3d to1  = new Point3d(range.Offset_X, range.Offset_Y + range.Deepth, item);
                Point3d to2  = new Point3d(range.Offset_X + range.Width, range.Offset_Y, item);
                mesh_line.Add(new Line(from, to1));
                mesh_line.Add(new Line(from, to2));
            }

            foreach (FD_Mesh.FD_Sub_Division sd in sbs)
            {
                if (sd.sub_x)
                {
                    List <double> sb_mesh_x = new List <double>();

                    double space = 0;

                    if (sd.Scheme == 0 && sd.Mode == 1)
                    {
                        space = sd.X_Count_or_Distance;
                    }
                    else
                    {
                        space = (sd.X1 - sd.X0) / sd.X_Count_or_Distance;
                    }

                    double sub_div_x = sd.X0 + space;
                    while (sub_div_x < sd.X1)
                    {
                        sb_mesh_x.Add(sub_div_x);
                        sub_div_x += space;
                    }

                    foreach (double item in sb_mesh_x)
                    {
                        Point3d from = new Point3d(item, range.Offset_Y + range.Deepth, range.Offset_Z);
                        Point3d to1  = new Point3d(item, range.Offset_Y, range.Offset_Z);
                        Point3d to2  = new Point3d(item, range.Offset_Y + range.Deepth, range.Offset_Z + range.Height);
                        mesh_line.Add(new Line(from, to1));
                        mesh_line.Add(new Line(from, to2));
                    }
                }

                if (sd.sub_y)
                {
                    List <double> sb_mesh_y = new List <double>();

                    double space = 0;

                    if (sd.Scheme == 0 && sd.Mode == 1)
                    {
                        space = sd.Y_Count_or_Distance;
                    }
                    else
                    {
                        space = (sd.Y1 - sd.Y0) / sd.Y_Count_or_Distance;
                    }

                    double sub_div_y = sd.Y0 + space;
                    while (sub_div_y < sd.Y1)
                    {
                        sb_mesh_y.Add(sub_div_y);
                        sub_div_y += space;
                    }

                    foreach (double item in sb_mesh_y)
                    {
                        Point3d from = new Point3d(range.Offset_X + range.Width, item, range.Offset_Z);
                        Point3d to1  = new Point3d(range.Offset_X, item, range.Offset_Z);
                        Point3d to2  = new Point3d(range.Offset_X + range.Width, item, range.Offset_Z + range.Height);
                        mesh_line.Add(new Line(from, to1));
                        mesh_line.Add(new Line(from, to2));
                    }
                }

                if (sd.sub_z)
                {
                    List <double> sb_mesh_z = new List <double>();

                    double space = 0;

                    if (sd.Scheme == 0 && sd.Mode == 1)
                    {
                        space = sd.Z_Count_or_Distance;
                    }
                    else
                    {
                        space = (sd.Z1 - sd.Z0) / sd.Z_Count_or_Distance;
                    }

                    double sub_div_z = sd.Z0 + space;
                    while (sub_div_z < sd.Z1)
                    {
                        sb_mesh_z.Add(sub_div_z);
                        sub_div_z += space;
                    }

                    foreach (double item in sb_mesh_z)
                    {
                        Point3d from = new Point3d(range.Offset_X + range.Width, range.Offset_Y + range.Deepth, item);
                        Point3d to1  = new Point3d(range.Offset_X, range.Offset_Y + range.Deepth, item);
                        Point3d to2  = new Point3d(range.Offset_X + range.Width, range.Offset_Y, item);
                        mesh_line.Add(new Line(from, to1));
                        mesh_line.Add(new Line(from, to2));
                    }
                }
            }

            DA.SetData(0, analysis_mesh);
            DA.SetDataList(1, mesh_line);

            if (run)
            {
                analysis_mesh.Update();
            }
        }