protected override void SolveInstance(IGH_DataAccess DA)
        {
            // Indata
            ResultElement re   = null;
            string        name = null;

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


            if (!DA.GetData(1, ref name))
            {
                name = re.N1.First().Key;
            }

            DA.SetDataList(0, re.pos);
            DA.SetDataList(1, re.N1[name]);
            DA.SetDataList(2, re.Vy[name]);
            DA.SetDataList(3, re.Vz[name]);
            DA.SetDataList(4, re.T[name]);
            DA.SetDataList(5, re.My[name]);
            DA.SetDataList(6, re.Mz[name]);
            DA.SetDataList(7, re.util[name]);
        }
        public Point3d CalcDeformedPosition(ResultElement re, int pos, string loadComb, double sFac)
        {
            Point3d pt = re.CreateRhinoPt(re.pos[pos]);

            Vector3d norm = re.elNormal;
            Vector3d tan = re.LocalX;
            Vector3d yDir = re.LocalY;

            Point3d curvePt = pt + tan * (re.u[loadComb][pos] * sFac) + norm * re.w[loadComb][pos] * sFac + yDir * re.v[loadComb][pos] * sFac;

            return curvePt;
        }
        public Point3d CalcDeformedPosition(ResultElement re, int pos, string loadComb, double sFac)
        {
            Point3d pt = re.CreateRhinoPt(re.pos[pos]);

            Vector3d norm = re.elNormal;
            Vector3d tan  = re.LocalX;
            Vector3d yDir = re.LocalY;

            Point3d curvePt = pt + tan * (re.u[loadComb][pos] * sFac) + norm * re.w[loadComb][pos] * sFac + yDir * re.v[loadComb][pos] * sFac;

            return(curvePt);
        }
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            ResultElement res = null;

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

            DA.SetData(0, new Line(res.sPos, res.ePos));
            DA.SetData(1, CrossSectionCasts.GetRhinoString(res.SectionPropertyString));
            DA.SetData(2, res.elNormal);
        }
        private Transform GetDeformationTransform(ResultElement re, Vector3d defTan, int pos, string loadComb, double sFac)
        {
            // Rotate tangent
            Transform t1;
            double    angle = Vector3d.VectorAngle(re.LocalX, defTan);

            if (Math.Abs(angle) >= Rhino.RhinoDoc.ActiveDoc.PageAngleToleranceRadians)
            {
                t1 = Transform.Rotation(angle, Vector3d.CrossProduct(re.LocalX, defTan), Point3d.Origin);
            }
            else
            {
                t1 = Transform.Identity;
            }

            // Rotate in plane
            Transform t2 = Transform.Rotation(re.fi[loadComb][pos] * sFac, defTan, Point3d.Origin);

            return(t1 * t2);
        }
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            // Indata
            bool         go        = false;
            WR_Structure structure = null;
            List <int>   modes     = new List <int>();

            System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();


            if (!DA.GetData(0, ref structure))
            {
                return;
            }
            if (!DA.GetDataList(1, modes))
            {
                return;
            }
            if (!DA.GetData(2, ref go))
            {
                return;
            }

            if (go)
            {
                _resElems = new List <ResultElement>();
                _log.Clear();
                watch.Restart();

                // Solve
                _solver = new WR_EigenSolver(structure);
                _solver.Solve();

                watch.Stop();

                _log.Add(String.Format("Solve system: {0}ms", watch.ElapsedMilliseconds));

                watch.Restart();


                if (_solver != null && structure != null)
                {
                    _eigVals = new List <double>();
                    foreach (int mode in modes)
                    {
                        _eigVals.Add(_solver.SetResultsToMode(mode));
                    }

                    watch.Stop();

                    _log.Add(String.Format("Analyse modes: {0}ms", watch.ElapsedMilliseconds));

                    watch.Restart();


                    // Extract results
                    List <WR_IElement> elems = structure.GetAllElements();
                    _resElems.Clear();

                    for (int i = 0; i < elems.Count; i++)
                    {
                        if (elems[i] is WR_Element3d)
                        {
                            WR_Element3d  el3d = (WR_Element3d)elems[i];
                            ResultElement re   = new ResultElement(el3d);
                            _resElems.Add(re);
                        }
                    }

                    watch.Stop();

                    _log.Add(String.Format("Extract results: {0}ms", watch.ElapsedMilliseconds));
                }
            }



            DA.SetDataList(0, _log);
            DA.SetDataList(1, _resElems);
            DA.SetDataList(2, _eigVals);
        }
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            // Indata
            WR_Structure structure = null;
            bool go = false;
            double maxRatio = 0;

            System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();

            if (!DA.GetData(0, ref structure)) { return; }
            if (!DA.GetData(1, ref go)) { return; }
            if (!DA.GetData(2, ref maxRatio)) { return; }

            if (go)
            {
                _resElems = new List<ResultElement>();
                _log.Clear();
                watch.Restart();

                // Solve
                WR_ModeShapeOptimizer optimizer = new WR_ModeShapeOptimizer(structure);

                watch.Stop();

                _log.Add(String.Format("Initialising: {0}ms", watch.ElapsedMilliseconds));

                watch.Restart();

                //Runs
                optimizer.Run(maxRatio);

                watch.Stop();

                _log.Add(String.Format("Run mode shape optimization: {0}ms", watch.ElapsedMilliseconds));

                watch.Restart();

                // Extract results
                List<WR_IElement> elems = structure.GetAllElements();
                for (int i = 0; i < elems.Count; i++)
                {

                    if (elems[i] is WR_Element3d)
                    {
                        WR_Element3d el3d = (WR_Element3d)elems[i];
                        ResultElement re = new ResultElement(el3d);
                        _resElems.Add(re);
                    }
                }

                watch.Stop();

                _log.Add(String.Format("Extract results: {0}ms", watch.ElapsedMilliseconds));

            }
            DA.SetDataList(0, _log);
            DA.SetDataList(1, _resElems);
        }
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            // Indata
            WR_Structure structure = null;
            List<WR_LoadCombination> loadCombinations = new List<WR_LoadCombination>();
            bool go = false;
            bool check = true;
            System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();

            if (!DA.GetData(0, ref structure)) { return; }
            if (!DA.GetDataList(1, loadCombinations)) { return; }
            if (!DA.GetData(2, ref go)) { return; }
            if (!DA.GetData(3, ref check)) { return; }

            if (go)
            {
                _resElems = new List<ResultElement>();
                _log.Clear();
                watch.Restart();

                // Solve
                WR_LinearSolver solver = new WR_LinearSolver(structure);

                foreach (WR_LoadCombination lc in loadCombinations)
                {
                    solver.AddLoadCombination(lc);
                }

                watch.Stop();

                _log.Add(String.Format("Initialising: {0}ms", watch.ElapsedMilliseconds));

                watch.Restart();

                // Check structure
                if (check)
                {
                    solver.CheckStructure();
                    if (!structure.IsValidForLinearSolver())
                        return;
                }

                watch.Stop();

                _log.Add(String.Format("Check of structure: {0}ms", watch.ElapsedMilliseconds));

                watch.Restart();

                // Solve
                try
                {
                    solver.Solve();
                }
                catch (Exception e)
                {
                    AddRuntimeMessage(GH_RuntimeMessageLevel.Error, e.Message);
                    return;
                }

                watch.Stop();

                _log.Add(String.Format("Solve system: {0}ms", watch.ElapsedMilliseconds));

                watch.Restart();

                // Extract results
                List<WR_IElement> elems = structure.GetAllElements();
                for (int i = 0; i < elems.Count; i++)
                {

                    if (elems[i] is WR_Element3d)
                    {
                        WR_Element3d el3d = (WR_Element3d)elems[i];
                        ResultElement re = new ResultElement(el3d);
                        _resElems.Add(re);
                    }
                }

                watch.Stop();

                _log.Add(String.Format("Extract results: {0}ms", watch.ElapsedMilliseconds));

            }
            DA.SetDataList(0, _log);
            DA.SetDataList(1, _resElems);
        }
 public Point3d CalcUndeformedPosition(ResultElement re, int pos)
 {
     return re.CreateRhinoPt(re.pos[pos]);
 }
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            // Indata
            WR_Structure structure = null;
            bool         go        = false;
            double       maxRatio  = 0;

            System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();


            if (!DA.GetData(0, ref structure))
            {
                return;
            }
            if (!DA.GetData(1, ref go))
            {
                return;
            }
            if (!DA.GetData(2, ref maxRatio))
            {
                return;
            }


            if (go)
            {
                _resElems = new List <ResultElement>();
                _log.Clear();
                watch.Restart();

                // Solve
                WR_ModeShapeOptimizer optimizer = new WR_ModeShapeOptimizer(structure);

                watch.Stop();

                _log.Add(String.Format("Initialising: {0}ms", watch.ElapsedMilliseconds));

                watch.Restart();

                //Runs
                optimizer.Run(maxRatio);

                watch.Stop();

                _log.Add(String.Format("Run mode shape optimization: {0}ms", watch.ElapsedMilliseconds));

                watch.Restart();


                // Extract results
                List <WR_IElement> elems = structure.GetAllElements();
                for (int i = 0; i < elems.Count; i++)
                {
                    if (elems[i] is WR_Element3d)
                    {
                        WR_Element3d  el3d = (WR_Element3d)elems[i];
                        ResultElement re   = new ResultElement(el3d);
                        _resElems.Add(re);
                    }
                }

                watch.Stop();

                _log.Add(String.Format("Extract results: {0}ms", watch.ElapsedMilliseconds));
            }
            DA.SetDataList(0, _log);
            DA.SetDataList(1, _resElems);
        }
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            // Indata
            bool go = false;
            List<WR_Node3d> nodes = new List<WR_Node3d>();
            List<WR_IElemRcp> beams = new List<WR_IElemRcp>();

            if (!DA.GetDataList(0, nodes)) { return; }
            if (!DA.GetDataList(1, beams)) { return; }
            if (!DA.GetData(2, ref go)) { return; }

            if (go)
            {
                resElems = new List<ResultElement>();

                log.Clear();
                log.Add("Structure invokation started");

                // Create structure wrapper
                WR_Structure structure = new WR_Structure();

                // Add restraint nodes
                foreach (WR_Node3d n in nodes)
                    structure.AddNode(n);
                log.Add("" + nodes.Count + " nodes added to structure");

                // Add elements
                foreach (WR_Elem3dRcp e in beams)
                    structure.AddElementRcp(e);
                log.Add("" + beams.Count + " elements added to structure");

                // Add forces

                // Solve
                WR_LinearSolver solver = new WR_LinearSolver(structure, true);
                solver.Solve();

                // Extract results
                List<WR_IElement> elems = structure.GetAllElements();
                for (int i = 0; i < elems.Count; i++)
                {

                    if (elems[i] is WR_Element3d)
                    {
                        WR_Element3d el3d = (WR_Element3d)elems[i];
                        ResultElement re = new ResultElement(el3d);
                        resElems.Add(re);
                    }
                }

                //Extract Points
                pts = new List<Rhino.Geometry.Point3d>();
                List<WR_XYZ> xyzs = structure.GetAllPoints();

                for (int i = 0; i < xyzs.Count; i++)
                {
                    pts.Add(new Rhino.Geometry.Point3d(xyzs[i].X, xyzs[i].Y, xyzs[i].Z));
                }
            }

            DA.SetData(0, log);
            DA.SetDataList(1, resElems);
            DA.SetDataList(2, pts);
        }
        private Transform GetDeformationTransform(ResultElement re, Vector3d defTan, int pos, string loadComb, double sFac)
        {
            // Rotate tangent
            Transform t1;
            double angle = Vector3d.VectorAngle(re.LocalX, defTan);
            if (Math.Abs(angle) >= Rhino.RhinoDoc.ActiveDoc.PageAngleToleranceRadians)
                t1 = Transform.Rotation(angle, Vector3d.CrossProduct(re.LocalX, defTan), Point3d.Origin);
            else
                t1 = Transform.Identity;

            // Rotate in plane
            Transform t2 = Transform.Rotation(re.fi[loadComb][pos]*sFac, defTan, Point3d.Origin);

            return t1 *t2;
        }
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            // Indata
            WR_Structure structure = null;
            List<WR_LoadCombination> loadCombinations = new List<WR_LoadCombination>();
            bool go = false;
            int maxIter = 0;
            System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();

            if (!DA.GetData(0, ref structure)) { return; }
            if (!DA.GetDataList(1, loadCombinations)) { return; }
            if (!DA.GetData(2, ref go)) { return; }
            if(!DA.GetData(3, ref maxIter)) { return; }

            if (go)
            {
                _log.Clear();
                watch.Reset();
                watch.Start();

                _resElems = new List<ResultElement>();

                // Solve
                WR_StandardSectionSizer secSizer = new WR_StandardSectionSizer(structure);

                foreach (WR_LoadCombination lc in loadCombinations)
                {
                    secSizer.AddLoadCombination(lc);
                }

                watch.Stop();

                _log.Add(String.Format("Initialising: {0}ms", watch.ElapsedMilliseconds));

                watch.Restart();

                _nbIterations= secSizer.Run(maxIter);

                watch.Stop();

                _log.Add(String.Format("Run section sizer: {0}ms", watch.ElapsedMilliseconds));

                watch.Restart();

                // Extract results
                List<WR_IElement> elems = structure.GetAllElements();
                for (int i = 0; i < elems.Count; i++)
                {

                    if (elems[i] is WR_Element3d)
                    {
                        WR_Element3d el3d = (WR_Element3d)elems[i];
                        ResultElement re = new ResultElement(el3d);
                        _resElems.Add(re);
                    }
                }

                watch.Stop();

                _log.Add(String.Format("Extract results: {0}ms", watch.ElapsedMilliseconds));

            }
            DA.SetDataList(0, _log);
            DA.SetDataList(1, _resElems);
            DA.SetData(2, _nbIterations);
        }
 public Point3d CalcUndeformedPosition(ResultElement re, int pos)
 {
     return(re.CreateRhinoPt(re.pos[pos]));
 }
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            // Indata
            bool go = false;
            WR_Structure structure = null;
            List<int> modes = new List<int>();
            System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();

            if (!DA.GetData(0, ref structure)) { return; }
            if (!DA.GetDataList(1, modes)) { return; }
            if (!DA.GetData(2, ref go)) { return; }

            if (go)
            {
                _resElems = new List<ResultElement>();
                _log.Clear();
                watch.Restart();

                // Solve
                _solver = new WR_EigenSolver(structure);
                _solver.Solve();

                watch.Stop();

                _log.Add(String.Format("Solve system: {0}ms", watch.ElapsedMilliseconds));

                watch.Restart();

                if (_solver != null && structure != null)
                {

                    _eigVals = new List<double>();
                    foreach (int mode in modes)
                    {
                        _eigVals.Add(_solver.SetResultsToMode(mode));
                    }

                    watch.Stop();

                    _log.Add(String.Format("Analyse modes: {0}ms", watch.ElapsedMilliseconds));

                    watch.Restart();

                    // Extract results
                    List<WR_IElement> elems = structure.GetAllElements();
                    _resElems.Clear();

                    for (int i = 0; i < elems.Count; i++)
                    {

                        if (elems[i] is WR_Element3d)
                        {
                            WR_Element3d el3d = (WR_Element3d)elems[i];
                            ResultElement re = new ResultElement(el3d);
                            _resElems.Add(re);
                        }
                    }

                    watch.Stop();

                    _log.Add(String.Format("Extract results: {0}ms", watch.ElapsedMilliseconds));

                }
            }

            DA.SetDataList(0, _log);
            DA.SetDataList(1, _resElems);
            DA.SetDataList(2, _eigVals);
        }
示例#16
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            // Indata
            bool               go    = false;
            List <WR_Node3d>   nodes = new List <WR_Node3d>();
            List <WR_IElemRcp> beams = new List <WR_IElemRcp>();
            int mode = 0;

            if (!DA.GetDataList(0, nodes))
            {
                return;
            }
            if (!DA.GetDataList(1, beams))
            {
                return;
            }
            if (!DA.GetData(2, ref mode))
            {
                return;
            }
            if (!DA.GetData(3, ref go))
            {
                return;
            }

            if (go)
            {
                resElems = new List <ResultElement>();

                log.Clear();
                log.Add("Structure invokation started");

                // Create structure wrapper
                _structure = new WR_Structure();

                // Add restraint nodes
                foreach (WR_Node3d n in nodes)
                {
                    _structure.AddNode(n);
                }
                log.Add("" + nodes.Count + " nodes added to structure");

                // Add elements
                foreach (WR_Elem3dRcp e in beams)
                {
                    _structure.AddElementRcp(e);
                }
                log.Add("" + beams.Count + " elements added to structure");

                // Add forces

                // Solve
                _solver = new WR_EigenSolver(_structure);
                _solver.Solve();
                //structure.EigenSolve(mode);
            }

            if (_solver != null && _structure != null)
            {
                _eigVal = _solver.SetResultsToMode(mode);

                // Extract results
                List <WR_IElement> elems = _structure.GetAllElements();
                resElems.Clear();

                for (int i = 0; i < elems.Count; i++)
                {
                    if (elems[i] is WR_Element3d)
                    {
                        WR_Element3d  el3d = (WR_Element3d)elems[i];
                        ResultElement re   = new ResultElement(el3d);
                        resElems.Add(re);
                    }
                }
            }



            DA.SetData(0, log);
            DA.SetDataList(1, resElems);
            DA.SetData(2, _eigVal);
        }
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            // Indata
            WR_Structure structure = null;
            List <WR_LoadCombination> loadCombinations = new List <WR_LoadCombination>();
            bool go    = false;
            bool check = true;

            System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();

            if (!DA.GetData(0, ref structure))
            {
                return;
            }
            if (!DA.GetDataList(1, loadCombinations))
            {
                return;
            }
            if (!DA.GetData(2, ref go))
            {
                return;
            }
            if (!DA.GetData(3, ref check))
            {
                return;
            }

            if (go)
            {
                _resElems = new List <ResultElement>();
                _log.Clear();
                watch.Restart();


                // Solve
                WR_LinearSolver solver = new WR_LinearSolver(structure);

                foreach (WR_LoadCombination lc in loadCombinations)
                {
                    solver.AddLoadCombination(lc);
                }


                watch.Stop();

                _log.Add(String.Format("Initialising: {0}ms", watch.ElapsedMilliseconds));

                watch.Restart();

                // Check structure
                if (check)
                {
                    solver.CheckStructure();
                    if (!structure.IsValidForLinearSolver())
                    {
                        return;
                    }
                }


                watch.Stop();

                _log.Add(String.Format("Check of structure: {0}ms", watch.ElapsedMilliseconds));

                watch.Restart();

                // Solve
                try
                {
                    solver.Solve();
                }
                catch (Exception e)
                {
                    AddRuntimeMessage(GH_RuntimeMessageLevel.Error, e.Message);
                    return;
                }


                watch.Stop();

                _log.Add(String.Format("Solve system: {0}ms", watch.ElapsedMilliseconds));

                watch.Restart();

                // Extract results
                List <WR_IElement> elems = structure.GetAllElements();
                for (int i = 0; i < elems.Count; i++)
                {
                    if (elems[i] is WR_Element3d)
                    {
                        WR_Element3d  el3d = (WR_Element3d)elems[i];
                        ResultElement re   = new ResultElement(el3d);
                        _resElems.Add(re);
                    }
                }

                watch.Stop();

                _log.Add(String.Format("Extract results: {0}ms", watch.ElapsedMilliseconds));
            }
            DA.SetDataList(0, _log);
            DA.SetDataList(1, _resElems);
        }
示例#18
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            // Indata
            WR_Structure structure = null;
            List <WR_LoadCombination> loadCombinations = new List <WR_LoadCombination>();
            bool go      = false;
            int  maxIter = 0;

            System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();

            if (!DA.GetData(0, ref structure))
            {
                return;
            }
            if (!DA.GetDataList(1, loadCombinations))
            {
                return;
            }
            if (!DA.GetData(2, ref go))
            {
                return;
            }
            if (!DA.GetData(3, ref maxIter))
            {
                return;
            }


            if (go)
            {
                _log.Clear();
                watch.Reset();
                watch.Start();

                _resElems = new List <ResultElement>();

                // Solve
                WR_StandardSectionSizer secSizer = new WR_StandardSectionSizer(structure);

                foreach (WR_LoadCombination lc in loadCombinations)
                {
                    secSizer.AddLoadCombination(lc);
                }


                watch.Stop();

                _log.Add(String.Format("Initialising: {0}ms", watch.ElapsedMilliseconds));

                watch.Restart();

                _nbIterations = secSizer.Run(maxIter);


                watch.Stop();

                _log.Add(String.Format("Run section sizer: {0}ms", watch.ElapsedMilliseconds));

                watch.Restart();

                // Extract results
                List <WR_IElement> elems = structure.GetAllElements();
                for (int i = 0; i < elems.Count; i++)
                {
                    if (elems[i] is WR_Element3d)
                    {
                        WR_Element3d  el3d = (WR_Element3d)elems[i];
                        ResultElement re   = new ResultElement(el3d);
                        _resElems.Add(re);
                    }
                }


                watch.Stop();

                _log.Add(String.Format("Extract results: {0}ms", watch.ElapsedMilliseconds));
            }
            DA.SetDataList(0, _log);
            DA.SetDataList(1, _resElems);
            DA.SetData(2, _nbIterations);
        }
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            // Indata
            bool go = false;
            List<WR_Node3d> nodes = new List<WR_Node3d>();
            List<WR_IElemRcp> beams = new List<WR_IElemRcp>();
            int mode = 0;

            if (!DA.GetDataList(0, nodes)) { return; }
            if (!DA.GetDataList(1, beams)) { return; }
            if (!DA.GetData(2, ref mode)) { return; }
            if (!DA.GetData(3, ref go)) { return; }

            if (go)
            {
                resElems = new List<ResultElement>();

                log.Clear();
                log.Add("Structure invokation started");

                // Create structure wrapper
                _structure = new WR_Structure();

                // Add restraint nodes
                foreach (WR_Node3d n in nodes)
                    _structure.AddNode(n);
                log.Add("" + nodes.Count + " nodes added to structure");

                // Add elements
                foreach (WR_Elem3dRcp e in beams)
                    _structure.AddElementRcp(e);
                log.Add("" + beams.Count + " elements added to structure");

                // Add forces

                // Solve
                _solver = new WR_EigenSolver(_structure);
                _solver.Solve();
                //structure.EigenSolve(mode);

            }

            if (_solver != null && _structure != null)
            {
                _eigVal =_solver.SetResultsToMode(mode);

                // Extract results
                List<WR_IElement> elems = _structure.GetAllElements();
                resElems.Clear();

                for (int i = 0; i < elems.Count; i++)
                {

                    if (elems[i] is WR_Element3d)
                    {
                        WR_Element3d el3d = (WR_Element3d)elems[i];
                        ResultElement re = new ResultElement(el3d);
                        resElems.Add(re);
                    }
                }
            }

            DA.SetData(0, log);
            DA.SetDataList(1, resElems);
            DA.SetData(2, _eigVal);
        }
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            // Indata
            bool               go    = false;
            List <WR_Node3d>   nodes = new List <WR_Node3d>();
            List <WR_IElemRcp> beams = new List <WR_IElemRcp>();

            if (!DA.GetDataList(0, nodes))
            {
                return;
            }
            if (!DA.GetDataList(1, beams))
            {
                return;
            }
            if (!DA.GetData(2, ref go))
            {
                return;
            }

            if (go)
            {
                resElems = new List <ResultElement>();

                log.Clear();
                log.Add("Structure invokation started");

                // Create structure wrapper
                WR_Structure structure = new WR_Structure();

                // Add restraint nodes
                foreach (WR_Node3d n in nodes)
                {
                    structure.AddNode(n);
                }
                log.Add("" + nodes.Count + " nodes added to structure");

                // Add elements
                foreach (WR_Elem3dRcp e in beams)
                {
                    structure.AddElementRcp(e);
                }
                log.Add("" + beams.Count + " elements added to structure");

                // Add forces

                // Solve
                WR_LinearSolver solver = new WR_LinearSolver(structure, true);
                solver.Solve();

                // Extract results
                List <WR_IElement> elems = structure.GetAllElements();
                for (int i = 0; i < elems.Count; i++)
                {
                    if (elems[i] is WR_Element3d)
                    {
                        WR_Element3d  el3d = (WR_Element3d)elems[i];
                        ResultElement re   = new ResultElement(el3d);
                        resElems.Add(re);
                    }
                }

                //Extract Points
                pts = new List <Rhino.Geometry.Point3d>();
                List <WR_XYZ> xyzs = structure.GetAllPoints();

                for (int i = 0; i < xyzs.Count; i++)
                {
                    pts.Add(new Rhino.Geometry.Point3d(xyzs[i].X, xyzs[i].Y, xyzs[i].Z));
                }
            }

            DA.SetData(0, log);
            DA.SetDataList(1, resElems);
            DA.SetDataList(2, pts);
        }