Esempio n. 1
0
        public static object To_DynamoObj_sPointSupport(sPointSupport pointSupport)
        {
            sDynamoConverter dyncon = new sDynamoConverter("Meters", "Feet");

            Dyn.Point lp = (Dyn.Point)dyncon.EnsureUnit((dyncon.ToDynamoPoint(pointSupport.location)));

            Dyn.Vector force = null;
            if (pointSupport.reaction_force != null)
            {
                force = dyncon.EnsureUnit_Force(dyncon.ToDynamoVector(pointSupport.reaction_force));
            }
            Dyn.Vector moment = null;
            if (pointSupport.reaction_moment != null)
            {
                moment = dyncon.EnsureUnit_Force(dyncon.ToDynamoVector(pointSupport.reaction_moment));
            }

            return(new Dictionary <string, object>
            {
                { "location", lp },
                { "supportType", pointSupport.supportType.ToString() },
                { "constraints", pointSupport.constraints },
                { "reactionForce", force },
                { "reactionMoment", moment },
            });
        }
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            ISystem ssys = null;

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

            List <IFrameSet>     beams = new List <IFrameSet>();
            List <sPointSupport> sups  = new List <sPointSupport>();
            List <sPointLoad>    pls   = new List <sPointLoad>();

            if (ssys != null)
            {
                ISystem sys = ssys as ISystem;

                foreach (IFrameSet b in sys.frameSets)
                {
                    beams.Add(b);
                }
                foreach (sNode n in sys.nodes)
                {
                    if (n.pointLoads != null && n.pointLoads.Count > 0)
                    {
                        foreach (sPointLoad pl in n.pointLoads)
                        {
                            pls.Add(pl);
                        }
                    }
                    if (n.boundaryCondition != null && n.boundaryCondition.supportType != eSupportType.NONE)
                    {
                        sPointSupport sup = n.boundaryCondition;
                        sups.Add(sup);
                    }
                }
            }



            DA.SetDataList(0, beams);

            DA.SetDataList(1, pls);
            DA.SetDataList(2, sups);
        }
        public bool UpdateNodeFromPointElement(sPointSupport ps, int id)
        {
            sNode exNode;

            if (AwareExistingNode(ps.location, out exNode))
            {
                exNode.UpdatePointElement(ps);
                return(false);
            }
            else
            {
                sNode newN = ps.TosNode();
                newN.nodeID = id;
                //newN.elementGUID = Guid.NewGuid();
                this.nodes.Add(newN);
                return(true);
            }
        }
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            sPointSupport sn = null;

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

            string          modelUnit = Rhino.RhinoDoc.ActiveDoc.ModelUnitSystem.ToString();
            sRhinoConverter rhcon     = new sRhinoConverter("Meters", modelUnit);


            DA.SetData(0, rhcon.EnsureUnit(rhcon.ToRhinoPoint3d(sn.location)));
            DA.SetData(1, sn.supportType.ToString());
            if (sn.constraints != null)
            {
                DA.SetDataList(2, sn.constraints.ToList());
            }
            else
            {
                DA.SetDataList(2, null);
            }
            if (sn.reaction_force != null)
            {
                DA.SetData(3, rhcon.EnsureUnit_Force(rhcon.ToRhinoVector3d(sn.reaction_force)));
            }
            else
            {
                DA.SetData(3, null);
            }
            if (sn.reaction_moment != null)
            {
                DA.SetData(4, rhcon.EnsureUnit_Moment(rhcon.ToRhinoVector3d(sn.reaction_moment)));
            }
            else
            {
                DA.SetData(4, null);
            }
        }
Esempio n. 5
0
        public static object SplitSegmentize(List <object> sElements, double intersectTolerance = 0.015, double segmentLength = 1.5)
        {
            sDynamoConverter dycon = new sDynamoConverter("Feet", "Meters");

            List <object>    pelements    = new List <object>();
            List <sFrameSet> beamelements = new List <sFrameSet>();

            foreach (object iso in sElements)
            {
                sFrameSet fs = iso as sFrameSet;
                if (fs != null)
                {
                    beamelements.Add(fs);
                    continue;
                }
                sPointLoad pl = iso as sPointLoad;
                if (pl != null)
                {
                    pelements.Add(pl);
                    continue;
                }
                sPointSupport ps = iso as sPointSupport;
                if (ps != null)
                {
                    pelements.Add(ps);
                    continue;
                }
            }

            dycon.SplitSegmentizesBeamSet(ref beamelements, intersectTolerance, segmentLength, pelements);

            return(new Dictionary <string, object>
            {
                { "sBeamSets", beamelements },
                { "sPointElements", pelements }
            });
        }
Esempio n. 6
0
        public static object sPointSupport(List <Dyn.Point> points, int supportType, string nodeName = "")
        {
            List <sPointSupport> nodes = new List <sPointSupport>();

            sDynamoConverter rhcon = new sDynamoConverter("Feet", "Meters");

            if (supportType == 0 || supportType == 1)
            {
                for (int i = 0; i < points.Count; ++i)
                {
                    Dyn.Point dp = rhcon.EnsureUnit(points[i]) as Dyn.Point;
                    sXYZ      sp = rhcon.TosXYZ(dp);

                    sPointSupport n = new sPointSupport();
                    n.location = sp;

                    if (supportType == 0)
                    {
                        n.supportType = eSupportType.FIXED;
                    }
                    else if (supportType == 1)
                    {
                        n.supportType = eSupportType.PINNED;
                    }

                    nodes.Add(n);
                    dp.Dispose();
                }
            }


            return(new Dictionary <string, object>
            {
                { "sPointSupport", nodes }
            });
        }
Esempio n. 7
0
        internal void SplitSegmentizesBeamSet(ref List <sFrameSet> beamset, double intTol, double segTol, List <object> pointEle = null)
        {
            List <Dyn.Geometry> disposeGeo = new List <Dyn.Geometry>();
            List <Dyn.Curve>    allCrvs    = new List <Dyn.Curve>();

            foreach (sFrameSet bs in beamset)
            {
                bs.frames.Clear();
                Dyn.Curve c = ToDynamoCurve(bs.parentCrv);
                allCrvs.Add(c);
                disposeGeo.Add(c);
            }

            List <Dyn.Point> pts = new List <Dyn.Point>();

            if (pointEle != null)
            {
                foreach (object eb in pointEle)
                {
                    sPointLoad pl = eb as sPointLoad;
                    if (pl != null)
                    {
                        Dyn.Point p = ToDynamoPoint(pl.location);
                        pts.Add(p);
                        disposeGeo.Add(p);
                    }
                    sPointSupport ps = eb as sPointSupport;
                    if (ps != null)
                    {
                        Dyn.Point p = ToDynamoPoint(ps.location);
                        pts.Add(p);
                        disposeGeo.Add(p);
                    }
                }
            }
            if (pts.Count == 0)
            {
                pts = null;
            }

            foreach (sFrameSet bs in beamset)
            {
                Dyn.Curve            dc = ToDynamoCurve(bs.parentCrv);
                int                  id = 0;
                List <Dyn.PolyCurve> segCrvs;
                List <Dyn.Point>     assPts;
                List <Dyn.PolyCurve> segPlns = SplitSegmentizeCurveByCurves(dc, allCrvs, intTol, segTol, out segCrvs, out assPts, pts);

                if (segPlns.Count > 0)
                {
                    for (int i = 0; i < segPlns.Count; ++i)
                    {
                        if (segCrvs.Count > 1)
                        {
                            bs.parentSegments.Add(TosCurve(segCrvs[i]));
                            disposeGeo.Add(segCrvs[i]);
                        }

                        Dyn.Curve [] segs = segPlns[i].Curves();
                        for (int j = 0; j < segs.Length; ++j)
                        {
                            if (segs[j].Length > 0.005)
                            {
                                Dyn.Line dl = Dyn.Line.ByStartPointEndPoint(segs[j].StartPoint, segs[j].EndPoint);
                                bs.AddBeamElement(TosLine(dl), sXYZ.Zaxis(), id);
                                id++;
                                disposeGeo.Add(dl);
                            }
                            disposeGeo.Add(segs[j]);
                        }
                        disposeGeo.Add(segPlns[i]);
                    }
                    if (assPts != null)
                    {
                        bs.associatedLocations = new List <sXYZ>();
                        foreach (Dyn.Point ap in assPts)
                        {
                            bs.associatedLocations.Add(TosXYZ(ap));
                            disposeGeo.Add(ap);
                        }
                    }
                }
                else
                {
                    Dyn.Line dl = Dyn.Line.ByStartPointEndPoint(dc.StartPoint, dc.EndPoint);
                    if (dl.Length > 0.005)
                    {
                        bs.AddBeamElement(TosLine(dl), sXYZ.Zaxis(), id);
                        bs.EnsureBeamElement();
                        id++;
                    }
                    disposeGeo.Add(dl);
                }

                bs.AwareElementsFixitiesByParentFixity(intTol);

                disposeGeo.Add(dc);
            }

            this.DisposeGeometries(disposeGeo);
        }
Esempio n. 8
0
        public static object Build_sSystem(List <object> sElements, object systemSettings = null)
        {
            sSystemSetting sysSet = null;

            if (systemSettings == null)
            {
                sysSet = new sSystemSetting();
                sysSet.systemOriUnit = "Feet";

                sysSet.systemName       = "DefaultSetting";
                sysSet.currentCase      = "DEAD";
                sysSet.currentCheckType = eSystemCheckType.StrengthCheck;

                sysSet.currentStressThreshold_pascal = 25 * 6894757.28;
                sysSet.currentDeflectionThreshold_mm = 100;

                sysSet.mergeTolerance_m = 0.005;
                sysSet.meshDensity_m    = 0.5;
            }
            else
            {
                sysSet = systemSettings as sSystemSetting;
            }

            sSystem jsys = new sSystem();

            jsys.systemSettings = sysSet;
            List <IsObject>  sobjs = new List <IsObject>();
            sDynamoConverter dycon = new sDynamoConverter();

            jsys.loadPatterns.Add("DEAD");

            int supCount = 0;
            int nodeID   = 0;

            foreach (object so in sElements)
            {
                sFrameSet sb = so as sFrameSet;
                if (sb != null)
                {
                    jsys.frameSets.Add(sb);
                    sobjs.Add(sb);

                    if (sb.lineLoads != null)
                    {
                        foreach (sLineLoad ll in sb.lineLoads)
                        {
                            jsys.AwarePatternNames(ll.loadPatternName);
                        }
                    }
                    continue;
                }

                sPointSupport psup = so as sPointSupport;
                if (psup != null)
                {
                    if (jsys.UpdateNodeFromPointElement(psup, nodeID))
                    {
                        nodeID++;
                    }
                    supCount++;
                    continue;
                }

                sPointLoad pl = so as sPointLoad;
                if (pl != null)
                {
                    if (jsys.UpdateNodeFromPointElement(pl, nodeID))
                    {
                        nodeID++;
                        jsys.AwarePatternNames(pl.loadPatternName);
                    }
                    continue;
                }

                sLoadCombination com = so as sLoadCombination;
                if (com != null)
                {
                    jsys.SetLoadCombination(com);
                }
            }

            if (supCount > 0)
            {
                //jsys.geometrySettings.systemBoundingBox = dycon.TosBoundingBox(sobjs);
                //jsys.SystemName = sysSet.systemName;
                return(new Dictionary <string, object>
                {
                    { "sSystem", jsys }
                });
            }
            else
            {
                return(new Dictionary <string, object>
                {
                    { "sSystem", null }
                });
            }
        }
        //.....hate to put this here though....
        public void SplitSegmentizesBeamSet(ref List <IFrameSet> beamset, double intTol, double segTol, List <object> pointEle = null)
        {
            List <Curve> allCrvs = new List <Curve>();

            foreach (IFrameSet bs in beamset)
            {
                bs.frames.Clear(); //??
                allCrvs.Add(ToRhinoCurve(bs.parentCrv));
            }

            List <Point3d> pts = new List <Point3d>();

            if (pointEle != null)
            {
                foreach (object eb in pointEle)
                {
                    sPointLoad pl = eb as sPointLoad;
                    if (pl != null)
                    {
                        pts.Add(ToRhinoPoint3d(pl.location));
                    }
                    sPointSupport ps = eb as sPointSupport;
                    if (ps != null)
                    {
                        pts.Add(ToRhinoPoint3d(ps.location));
                    }
                }
            }
            if (pts.Count == 0)
            {
                pts = null;
            }

            foreach (IFrameSet bs in beamset)
            {
                Curve           rc = ToRhinoCurve(bs.parentCrv);
                int             id = 0;
                List <Curve>    segCrvs;
                List <Point3d>  assPts;
                List <Polyline> segPlns = SplitSegmentizeCurveByCurves(rc, allCrvs, intTol, segTol, out segCrvs, out assPts, pts);

                if (segPlns.Count > 0)
                {
                    for (int i = 0; i < segPlns.Count; ++i)
                    {
                        if (segCrvs.Count > 1)
                        {
                            bs.parentSegments.Add(this.TosCurve(segCrvs[i]));
                        }

                        for (int j = 0; j < segPlns[i].SegmentCount; ++j)
                        {
                            Line segln = segPlns[i].SegmentAt(j);
                            /////////////////////////
                            //??????????????????????/
                            /////////////////////////
                            if (segln.Length > 0.005)
                            {
                                bs.AddBeamElement(TosLine(segln), sXYZ.Zaxis(), id);
                                bs.EnsureBeamElement();
                                id++;
                            }
                        }
                    }
                    if (assPts != null)
                    {
                        bs.associatedLocations = new List <sXYZ>();
                        foreach (Point3d ap in assPts)
                        {
                            bs.associatedLocations.Add(TosXYZ(ap));
                        }
                    }
                }
                else
                {
                    Line segln = new Line(rc.PointAtStart, rc.PointAtEnd);
                    /////////////////////////
                    //??????????????????????/
                    /////////////////////////
                    if (segln.Length > 0.005)
                    {
                        bs.AddBeamElement(TosLine(segln), sXYZ.Zaxis(), id);
                        bs.EnsureBeamElement();
                        id++;
                    }
                }

                bs.AwareElementsFixitiesByParentFixity(intTol);
            }
        }
Esempio n. 10
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            List <object> seles  = new List <object>();
            double        intTol = 0.005;
            double        segTol = 0.5;

            if (!DA.GetDataList(0, seles))
            {
                return;
            }
            if (!DA.GetData(1, ref intTol))
            {
                return;
            }
            if (!DA.GetData(2, ref segTol))
            {
                return;
            }

            string          modelUnit = Rhino.RhinoDoc.ActiveDoc.ModelUnitSystem.ToString();
            sRhinoConverter rhcon     = new sRhinoConverter(modelUnit, "Meters");

            if (modelUnit == "Feet")
            {
                intTol = 0.015;
                segTol = 1.5;
            }

            List <object>    pelements    = new List <object>();
            List <IFrameSet> beamelements = new List <IFrameSet>();

            foreach (object o in seles)
            {
                GH_ObjectWrapper wap   = new GH_ObjectWrapper(o);
                IFrameSet        bsori = wap.Value as IFrameSet;
                if (bsori != null)
                {
                    beamelements.Add(bsori.DuplicatesFrameSet());
                }
                sPointLoad pl = wap.Value as sPointLoad;
                if (pl != null)
                {
                    pelements.Add(pl);
                }
                sPointSupport ps = wap.Value as sPointSupport;
                if (ps != null)
                {
                    pelements.Add(ps);
                }
            }

            rhcon.SplitSegmentizesBeamSet(ref beamelements, intTol, segTol, pelements);

            /*
             * string groupInfo = "";
             * DataTree<sBeamSet> beamTree = new DataTree<sBeamSet>();
             * var grouped = beamelements.GroupBy(b => b.beamSetName);
             * int groupID = 0;
             * foreach (var bgroup in grouped)
             * {
             *  GH_Path bpth = new GH_Path(groupID);
             *  groupInfo += "BeamSet" + groupID + ": " + bgroup.ElementAt(0).beamSetName + "\n";
             *  foreach (sBeamSet sb in bgroup)
             *  {
             *      beamTree.Add(sb, bpth);
             *  }
             *  groupID++;
             * }
             *
             * this.Message = groupInfo;
             */

            DA.SetDataList(0, beamelements);
            DA.SetDataList(1, pelements);
        }
Esempio n. 11
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            sSystemSetting sysSetting = null;
            List <object>  sElement   = new List <object>();

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


            sRhinoConverter rhcon       = new sRhinoConverter();
            string          currentUnit = Rhino.RhinoDoc.ActiveDoc.ModelUnitSystem.ToString();

            if (sysSetting == null)
            {
                sysSetting = new sSystemSetting();
                sysSetting.systemOriUnit = currentUnit;

                sysSetting.systemName       = "DefaultSetting";
                sysSetting.currentCase      = "DEAD";
                sysSetting.currentCheckType = eSystemCheckType.StrengthCheck;

                sysSetting.currentStressThreshold_pascal = 25 * 6894757.28;
                sysSetting.currentDeflectionThreshold_mm = 100;

                sysSetting.mergeTolerance_m = 0.005;
                sysSetting.meshDensity_m    = 0.5;
            }

            if (currentUnit == "Meters" || currentUnit == "Feet")
            {
                ISystem jsys = InitiateISystem(sElement);

                jsys.systemSettings = sysSetting;
                List <IsObject> sObjs = new List <IsObject>();

                jsys.loadPatterns.Add("DEAD");

                int supCount = 0;
                int nodeID   = 0;

                try
                {
                    foreach (object so in sElement)
                    {
                        GH_ObjectWrapper wap = new GH_ObjectWrapper(so);

                        IFrameSet bs = wap.Value as IFrameSet;
                        if (bs != null)
                        {
                            //jsys.beamSets.Add(bs);
                            jsys.AddsBeamSet(bs);
                            //??
                            sObjs.Add(bs);
                            if (bs.lineLoads != null)
                            {
                                foreach (sLineLoad ll in bs.lineLoads)
                                {
                                    jsys.AwarePatternNames(ll.loadPatternName);
                                }
                            }
                        }

                        sPointLoad pl = wap.Value as sPointLoad;
                        if (pl != null)
                        {
                            if (jsys.UpdateNodeFromPointElement(pl, nodeID))
                            {
                                nodeID++;
                                jsys.AwarePatternNames(pl.loadPatternName);
                            }
                        }

                        sLoadCombination com = wap.Value as sLoadCombination;
                        if (com != null)
                        {
                            jsys.SetLoadCombination(com);
                        }
                    }

                    foreach (object so in sElement)
                    {
                        GH_ObjectWrapper wap  = new GH_ObjectWrapper(so);
                        sPointSupport    psup = wap.Value as sPointSupport;
                        if (psup != null)
                        {
                            if (jsys.UpdateNodeFromPointElement(psup, nodeID))
                            {
                                nodeID++;
                            }
                            supCount++;
                        }
                    }

                    foreach (sMesh am in jsys.meshes)
                    {
                        //  sObjs.Add(am);
                    }

                    if (supCount > 0)
                    {
                        this.Message = "System : " + sysSetting.systemName + "\nis instantiated";
                        jsys.systemSettings.systemBoundingBox = rhcon.TosBoundingBox(sObjs);

                        //jsys.SystemName = sysSetting.systemName;
                        DA.SetData(0, jsys);
                    }
                    else
                    {
                        this.Message = "System : " + sysSetting.systemName + "\nneeds supports";
                        //jsys.SystemName = sysSetting.systemName;
                        this.AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, this.Message);
                        DA.SetData(0, null);
                    }
                }
                catch (Exception e)
                {
                    this.Message = "System : " + sysSetting.systemName + "\ninstantiation failed";
                    this.AddRuntimeMessage(GH_RuntimeMessageLevel.Error, e.Message);
                    DA.SetData(0, null);
                }
            }
            else
            {
                this.Message = "ASKSGH.Bridgify only works in\n Meters or Feet";
                this.AddRuntimeMessage(GH_RuntimeMessageLevel.Error, this.Message);
                DA.SetData(0, null);
            }
        }
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            List <Point3d> points = new List <Point3d>();

            if (!DA.GetDataList(0, points))
            {
                return;
            }

            List <sPointSupport> nodes = new List <sPointSupport>();

            string          modelUnit = Rhino.RhinoDoc.ActiveDoc.ModelUnitSystem.ToString();
            sRhinoConverter rhcon     = new sRhinoConverter(modelUnit, "Meters");

            if (supType == eSupportType.FIXED || supType == eSupportType.PINNED)
            {
                for (int i = 0; i < points.Count; ++i)
                {
                    sXYZ sp = rhcon.TosXYZ((Point3d)rhcon.EnsureUnit(points[i]));

                    sPointSupport n = new sPointSupport();
                    n.location = sp;

                    n.supportType = supType;

                    nodes.Add(n);
                }
            }
            else
            {
                bool xx  = true;
                bool yy  = true;
                bool zz  = true;
                bool rxx = true;
                bool ryy = true;
                bool rzz = true;
                if (!DA.GetData(1, ref xx))
                {
                    return;
                }
                if (!DA.GetData(2, ref yy))
                {
                    return;
                }
                if (!DA.GetData(3, ref zz))
                {
                    return;
                }
                if (!DA.GetData(4, ref rxx))
                {
                    return;
                }
                if (!DA.GetData(5, ref ryy))
                {
                    return;
                }
                if (!DA.GetData(6, ref rzz))
                {
                    return;
                }

                foreach (Point3d p in points)
                {
                    sXYZ sp = rhcon.TosXYZ((Point3d)rhcon.EnsureUnit(p));

                    sPointSupport n = new sPointSupport();
                    n.location    = sp;
                    n.supportType = supType;

                    n.constraints = new bool[6] {
                        xx, yy, zz, rxx, ryy, rzz
                    };

                    nodes.Add(n);
                }
            }

            if (supType == eSupportType.FIXED)
            {
                this.Message = "ALL FIXED";
            }
            else if (supType == eSupportType.PINNED)
            {
                this.Message = "ALL PINNED";
            }
            else
            {
                this.Message = "By Constraints";
            }

            DA.SetDataList(0, nodes);
        }