private BoundingBox GetRhinoBoundingBox(List <IsObject> objs)
        {
            List <Point3d> pts = new List <Point3d>();

            foreach (IsObject so in objs)
            {
                if (so is sFrameSet)
                {
                    sFrameSet sb = so as sFrameSet;
                    Curve     rc = ToRhinoCurve(sb.parentCrv);
                    Point3d[] dpts;
                    rc.DivideByCount(3, true, out dpts);
                    for (int i = 0; i < dpts.Length; ++i)
                    {
                        pts.Add(dpts[i]);
                    }
                }
                if (so is sMesh)
                {
                    sMesh sm = so as sMesh;
                    foreach (sVertex sv in sm.vertices)
                    {
                        pts.Add(ToRhinoPoint3d(sv.location));
                    }
                }
            }
            return(new BoundingBox(pts));
        }
        //?????????????
        public List <Curve> ToRhinoCrosssectionProfile(sFrameSet bs, double lenTol)
        {
            List <Curve> profiles = new List <Curve>();

            for (int i = 0; i < bs.frames.Count; ++i)
            {
            }

            return(profiles);
        }
Exemple #3
0
        public static object sBeamSetByCurves(string beamSetName, List <Dyn.Curve> beamSetCurves, List <sCrossSection> crossSections)
        {
            List <sFrameSet> sets = new List <sFrameSet>();
            //how to get Revit Unit?...
            sDynamoConverter dycon = new sDynamoConverter("Feet", "Meters");

            for (int i = 0; i < beamSetCurves.Count; ++i)
            {
                double len = beamSetCurves[i].Length;
                if (len > 0.005)
                {
                    Dyn.Curve dc     = dycon.EnsureUnit(beamSetCurves[i]) as Dyn.Curve;
                    sCurve    setCrv = dycon.TosCurve(Dyn.PolyCurve.ByJoinedCurves(new Dyn.Curve[] { dc }));
                    sFrameSet bset   = new sFrameSet(setCrv);
                    bset.frameSetName = beamSetName;
                    bset.setId        = i;

                    if (crossSections.Count == 1)
                    {
                        bset.crossSection = crossSections[0] as sCrossSection;
                    }
                    else if (crossSections.Count == beamSetCurves.Count)
                    {
                        bset.crossSection = crossSections[i] as sCrossSection;
                    }

                    sets.Add(bset);
                    dc.Dispose();
                }
            }

            //for(int i = 0; i < beamSetCurves.Count; ++i)
            //{
            //    beamSetCurves[i].Dispose();
            //}

            return(new Dictionary <string, object>
            {
                { "sBeamSets", sets }
            });
        }
Exemple #4
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 }
            });
        }
Exemple #5
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 }
                });
            }
        }
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            string               beamSetName   = "";
            List <Curve>         beamSetCurves = new List <Curve>();
            List <sCrossSection> crossSections = new List <sCrossSection>();
            List <object>        lineLoadObjs  = new List <object>();

            if (!DA.GetData(0, ref beamSetName))
            {
                return;
            }
            if (!DA.GetDataList(1, beamSetCurves))
            {
                return;
            }
            if (!DA.GetDataList(2, crossSections))
            {
                return;
            }
            DA.GetDataList(3, lineLoadObjs);



            List <IFrameSet> sets = new List <IFrameSet>();

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


            int minuteCount = 0;

            for (int i = 0; i < beamSetCurves.Count; ++i)
            {
                if (beamSetCurves[i].GetLength() > 0.005)
                {
                    Curve     rc     = rhcon.EnsureUnit(beamSetCurves[i]);
                    sCurve    setCrv = rhcon.TosCurve(rc);
                    IFrameSet bset   = new sFrameSet(setCrv);
                    bset.frameSetName = beamSetName;
                    bset.setId        = i;

                    if (crossSections.Count == 1)
                    {
                        bset.crossSection = crossSections[0] as sCrossSection;
                    }
                    else if (crossSections.Count == beamSetCurves.Count)
                    {
                        bset.crossSection = crossSections[i] as sCrossSection;
                    }

                    if (lineLoadObjs.Count > 0)
                    {
                        foreach (object lo in lineLoadObjs)
                        {
                            GH_ObjectWrapper wap = new GH_ObjectWrapper(lo);
                            sLineLoad        sl  = wap.Value as sLineLoad;
                            if (sl != null)
                            {
                                bset.UpdateLineLoad(sl);
                            }
                            sLineLoadGroup sg = wap.Value as sLineLoadGroup;
                            if (sg != null)
                            {
                                if (sg.loads.Count == beamSetCurves.Count)
                                {
                                    bset.UpdateLineLoad(sg.loads[i]);
                                }
                                else
                                {
                                    return;
                                }
                            }
                        }
                    }
                    sets.Add(bset);
                }
                else
                {
                    minuteCount++;
                }
            }

            if (minuteCount > 0)
            {
                AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, minuteCount + "Beams are too short");
            }
            DA.SetDataList(0, sets);
        }