示例#1
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            var tree = new GH_Structure <GH_Number>();

            if (!DA.GetDataTree(0, out tree))
            {
                return;
            }

            var X = new double[tree.Branches.Count][];

            for (int d = 0; d < tree.Branches.Count; d++)
            {
                X[d] = new double[tree.Branches[d].Count];
                for (int i = 0; i < tree.Branches[d].Count; i++)
                {
                    X[d][i] = tree.Branches[d][i].Value;
                }
            }

            var labels = new List <string>();

            if (!DA.GetDataList(1, labels))
            {
                ghGrid = new GH_Grid(X);
            }
            else
            {
                ghGrid = new GH_Grid(X, labels);
            }

            DA.SetData(0, ghGrid.Value.Info());
            DA.SetData(1, ghGrid);
        }
示例#2
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            ghGrid = new GH_Grid();

            if (!DA.GetData(0, ref ghGrid))
            {
                return;
            }

            if (GridHasChanged())
            {
                hasValidControls = false;
                point            = new IvyCore.Parametric.Point(ghGrid.Value);
                // cache a DeepCopy
                ghGridCache = ghGrid.DeepCopy();
                this.AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Grid Has Changed. Reset Controls via Menu.");
                this.Message = "Select Controls in Menu";
            }

            // If controls are valid, then compute the point
            if (hasValidControls)
            {
                UpdatePoint(DA);
                DA.SetDataList(1, point.Coord);
                DA.SetData(2, point.CellIndex());
            }
            else
            {
                this.AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Grid Has Changed. Reset Controls via Menu.");
                this.Message = "Select Controls in Menu";
            }

            DA.SetData(0, ghGrid.Value.Info());
        }
示例#3
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            if (!DA.GetData(0, ref ghGrid1))
            {
                return;
            }

            ghGrid2 = new GH_Grid(ghGrid1.Value.Normalize());

            DA.SetData(0, ghGrid2.Value.Info());
            DA.SetData(1, ghGrid2);
        }
示例#4
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            var ghGrid  = new GH_Grid();
            var address = new List <int>();

            if (!DA.GetData(0, ref ghGrid))
            {
                return;
            }
            if (!DA.GetDataList(1, address))
            {
                return;
            }


            var index = ghGrid.Value.NodeIndex(address);

            DA.SetData(0, index);
        }
示例#5
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            var ghGrid = new GH_Grid();
            var list   = new List <double>();

            if (!DA.GetData(0, ref ghGrid))
            {
                return;
            }
            if (!DA.GetDataList(1, list))
            {
                return;
            }

            point = new IvyCore.Parametric.Point(ghGrid.Value, list.ToArray());

            DA.SetDataList(0, point.Coord);
            DA.SetData(1, point.CellIndex());
        }
示例#6
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            var ghGrid = new GH_Grid();
            var list   = new List <double>();

            if (!DA.GetData(0, ref ghGrid))
            {
                return;
            }
            if (!DA.GetDataList(1, list))
            {
                return;
            }

            point = new IvyCore.Parametric.Point(ghGrid.Value, list.ToArray());
            var cellIndex = point.CellIndex();
            var LERP      = ghGrid.Value.Cells[cellIndex].GetInterpolant(point);

            DA.SetDataList(0, point.Coord);
            DA.SetDataList(1, point.Normalized());
            DA.SetData(2, cellIndex);
            DA.SetData(3, new GH_Interpolant(LERP));
        }
示例#7
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            var ghGrid = new GH_Grid();
            var index  = -1;

            if (!DA.GetData(0, ref ghGrid))
            {
                return;
            }

            var nodes = new List <GH_Node>();

            if (!DA.GetData(1, ref index))
            {
                for (int i = 0; i < ghGrid.Value.NodeCount; i++)
                {
                    nodes.Add(new GH_Node(ghGrid.Value.Nodes[i]));
                }
            }
            else
            {
                if (index < 0 || index >= ghGrid.Value.NodeCount)
                {
                    for (int i = 0; i < ghGrid.Value.NodeCount; i++)
                    {
                        nodes.Add(new GH_Node(ghGrid.Value.Nodes[i]));
                    }
                }
                else
                {
                    nodes.Add(new GH_Node(ghGrid.Value.Nodes[index]));
                }
            }

            DA.SetDataList(0, nodes);
        }
示例#8
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            var launch = false;

            if (!DA.GetData(8, ref launch))
            {
                return;
            }

            if (launch)
            {
                var path_wd = "";

                var ghActuationGrid = new GH_Grid();
                var ghShapeGrid     = new GH_Grid();

                var ghNode_list = new List <GH_Node>();
                var mesh_list   = new List <Mesh>();
                var A1_tree     = new GH_Structure <GH_Integer>();
                var A2_tree     = new GH_Structure <GH_Integer>();
                var BC_tree     = new GH_Structure <GH_Integer>();


                if (!DA.GetData(0, ref path_wd))
                {
                    return;
                }
                if (!DA.GetData(1, ref ghShapeGrid))
                {
                    return;
                }
                if (!DA.GetData(2, ref ghActuationGrid))
                {
                    return;
                }

                if (!DA.GetDataList(3, ghNode_list))
                {
                    return;
                }
                if (!DA.GetDataList(4, mesh_list))
                {
                    return;
                }

                if (!DA.GetDataTree(5, out A1_tree))
                {
                    return;
                }
                if (!DA.GetDataTree(6, out A2_tree))
                {
                    return;
                }
                if (!DA.GetDataTree(7, out BC_tree))
                {
                    return;
                }

                string workingDir = Path.GetDirectoryName(path_wd.ToString());
                string filename   = Path.GetFileName(path_wd.ToString());

                //CleanWorkingDir(workingDir);

                int n        = ghNode_list.Count;
                var inp_tree = new DataTree <string>();

                var    grid_actu   = ghActuationGrid.Value;
                var    grid_shape  = ghShapeGrid.Value;
                var    grid_global = grid_actu * grid_shape;
                var    culture     = new CultureInfo("en-GB");
                string filePath;

                for (int i = 0; i < n; i++)
                {
                    var node = ghNode_list[i].Value;
                    var mesh = mesh_list[i];
                    var A1   = A1_tree[i].ConvertAll <int>(ghInt => ghInt.Value);
                    var A2   = A2_tree[i].ConvertAll <int>(ghInt => ghInt.Value);
                    var BC   = BC_tree[i].ConvertAll <int>(ghInt => ghInt.Value);

                    // HEADER
                    var localDate = DateTime.Now.ToString(culture);
                    var header    = new List <string>();
                    header.Add("Author : Lionel du Peloux");
                    header.Add("email : [email protected]");
                    header.Add("date : " + localDate);
                    header.Add("node : " + node.Index.ToString("D2"));

                    // CREATE INP BUILDER
                    var vertexList = AbaqusProblemBuilder.MeshVerticesToArray(mesh);
                    var faceList   = AbaqusProblemBuilder.MeshFacesToArray(mesh);
                    var builder    = new AbaqusProblemBuilder(vertexList, faceList, A1, A2, BC);

                    // CREATE INP CONTENT
                    var inp_str = builder.GetInp(header);
                    inp_tree.AddRange(inp_str, new GH_Path(i));

                    // CREATE SUBDIR FOR INP FILE
                    var subDir = Path.Combine(workingDir, node.Index.ToString("D2"));
                    Directory.CreateDirectory(subDir);

                    // WRITE INP FILE
                    filePath = subDir + "\\" + "model" + ".inp";
                    File.WriteAllLines(filePath, inp_str);
                    File.Move(filePath, Path.ChangeExtension(filePath, ".inp"));
                }

                // CREATE PY CONTENT
                List <string> py_str;

                // WRITE PY FILE (MODEL_PRE)
                py_str   = AbaqusProblemBuilder.GetPy_PRE(grid_actu);
                filePath = workingDir + "\\" + "model_pre.py";
                File.WriteAllLines(filePath, py_str);
                File.Move(filePath, Path.ChangeExtension(filePath, ".py"));

                // WRITE PY FILE (MODEL_RUN)
                py_str   = AbaqusProblemBuilder.GetPy_RUN();
                filePath = workingDir + "\\" + "model_run.py";
                File.WriteAllLines(filePath, py_str);
                File.Move(filePath, Path.ChangeExtension(filePath, ".py"));

                // WRITE PY FILE (MODEL_ODB)
                py_str   = AbaqusProblemBuilder.GetPy_ODB();
                filePath = workingDir + "\\" + "model_odb.py";
                File.WriteAllLines(filePath, py_str);
                File.Move(filePath, Path.ChangeExtension(filePath, ".py"));

                // WRITE DB FILE
                var dbPath = workingDir + "\\" + "data.db";
                try
                {
                    SQLiteConnection.CreateFile(dbPath);
                }
                catch (Exception)
                {
                }

                using (var connection = new SQLiteConnection("Data Source = " + dbPath))
                {
                    connection.Open();

                    using (var cmd = new SQLiteCommand(connection))
                    {
                        cmd.Transaction = connection.BeginTransaction();


                        // FIELD ACTU
                        cmd.CommandText = "CREATE TABLE FIELD (ACT INT, SHP INT, NODE INT, X REAL, Y REAL, Z REAL, DX REAL, DY REAL, DZ REAL)";
                        cmd.ExecuteNonQuery();

                        // GRIDS
                        SqlWriteGrid(grid_actu, "ACT", cmd);
                        SqlWriteGrid(grid_shape, "SHP", cmd);
                        SqlWriteGrid(grid_global, "GLB", cmd);

                        // SHELL TOPO
                        SqlWriteShellTopology(mesh_list[0], cmd);

                        SqlWriteShapeField(grid_shape.Nodes, mesh_list, cmd);
                        cmd.Transaction.Commit();
                    }
                    connection.Close();
                }

                DA.SetDataTree(0, inp_tree);
            }
        }