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