Пример #1
0
        public static object To_DynamoObj_sLineLoad(sLineLoad lineLoad)
        {
            sDynamoConverter dyncon = new sDynamoConverter("Meters", "Feet");

            return(new Dictionary <string, object>
            {
                { "loadPattern", lineLoad.loadPatternName },
                { "loadType", lineLoad.loadType.ToString() },
                { "loadForce", dyncon.EnsureUnit_Force(dyncon.ToDynamoVector(lineLoad.load_Force)) },
                { "loadMoment", dyncon.EnsureUnit_Force(dyncon.ToDynamoVector(lineLoad.load_Moment)) }
            });
        }
Пример #2
0
        public void ApplyLineLoadsByCombo(string comboName, ref double deadFactor)
        {
            sLoadCombination combo = GetLoadComboByName(comboName);

            foreach (StatBeam stb in this.FEsystem.Beams)
            {
                sFrame sb = stb.ExtraData as sFrame;
                if (sb != null)
                {
                    if (sb.lineLoads != null && sb.lineLoads.Count > 0)
                    {
                        sLineLoad comboLoad = new sLineLoad();
                        if (combo.combinationType == eCombinationType.LinearAdditive)
                        {
                            for (int i = 0; i < combo.patterns.Count; ++i)
                            {
                                string pattern = combo.patterns[i];
                                double factor  = combo.factors[i];

                                if (pattern != "DEAD")
                                {
                                    sb.UpdateLineLoadByPatternFactor_LinearAdditive(pattern, factor, ref comboLoad);
                                }
                                else
                                {
                                    deadFactor = factor;
                                }
                            }
                        }
                        //else what?

                        if (comboLoad.load_Force != null || comboLoad.load_Moment != null)
                        {
                            if (comboLoad.load_Force != null)
                            {
                                stb.AppliedLinearLoad = new C_vector(comboLoad.load_Force.X, comboLoad.load_Force.Y, comboLoad.load_Force.Z);
                            }
                            if (comboLoad.load_Moment != null)
                            {
                                stb.AppliedLinearLoad = new C_vector(comboLoad.load_Moment.X, comboLoad.load_Moment.Y, comboLoad.load_Moment.Z);
                            }
                        }
                        if (comboLoad.load_Scalar > 0.0)
                        {
                        }
                    }
                }
            }
        }
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            string          patternName  = "";
            List <Vector3d> forceVectors = new List <Vector3d>();

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

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

            object outobj = null;

            if (forceVectors.Count == 1)
            {
                sLineLoad l_before = new sLineLoad(patternName, eLoadType.DistributedLoad, true, rhcon.TosXYZ(forceVectors[0]));
                outobj = rhcon.EnsureUnit(l_before);
            }
            else if (forceVectors.Count > 1)
            {
                sLineLoadGroup lg = new sLineLoadGroup();
                lg.loads = new List <sLineLoad>();
                foreach (Vector3d lv in forceVectors)
                {
                    sLineLoad sl = new sLineLoad(patternName, eLoadType.DistributedLoad, true, rhcon.TosXYZ(lv));
                    lg.loads.Add(rhcon.EnsureUnit(sl));
                }
                outobj = lg;
            }

            DA.SetData(0, outobj);
        }
Пример #4
0
 internal sLineLoad EnsureUnit(sLineLoad ll)
 {
     if (targetUnit == baseUnit)
     {
         return(ll);
     }
     else
     {
         if (baseUnit == "Meters" && targetUnit == "Feet")
         {
             ll.ScaleByFactor(0.06852);
             return(ll);
         }
         else if (baseUnit == "Feet" && targetUnit == "Meters")
         {
             ll.ScaleByFactor(14.59383);
             return(ll);
         }
         else
         {
             return(null);
         }
     }
 }
Пример #5
0
 public void UpdateLineLoad(sLineLoad lload)
 {
     if (this.lineLoads != null)
     {
         bool isThere = false;
         foreach (sLineLoad ll in this.lineLoads)
         {
             if (ll.loadPatternName == lload.loadPatternName)
             {
                 ll.ApplyUpdatedLineLoad(lload);
                 isThere = true;
             }
         }
         if (isThere == false)
         {
             this.lineLoads.Add(lload);
         }
     }
     else
     {
         this.lineLoads = new List <sLineLoad>();
         this.lineLoads.Add(lload);
     }
 }
        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);
        }