Beispiel #1
0
        /***************************************************/
        /**** Private methods                           ****/
        /***************************************************/

        private List <ILoad> ReadLoads(List <string> ids = null)
        {
            List <ILoad> loadList = new List <ILoad>();


            if (ids == null)
            {
                List <rf.LoadCase> rfLoadcases = model.GetLoads().GetLoadCases().ToList();
                rf.ILoads          l           = model.GetLoads();
                int lcCount = l.GetLoadCaseCount();

                Dictionary <int, Loadcase> bhLoadcaseDict = new Dictionary <int, Loadcase>();
                bhLoadcaseDict = ReadLoadcases().Distinct().ToDictionary(x => x.Number, x => x);

                Dictionary <string, Bar> bhBarDict = new Dictionary <string, Bar>();
                bool barsRead = false;

                for (int i = 0; i < lcCount; i++)
                {
                    rf.LoadCase rfLoadcase = l.GetLoadCase(i, rf.ItemAt.AtIndex).GetData();
                    Loadcase    bhLoadcase;

                    bhLoadcase = bhLoadcaseDict[rfLoadcase.Loading.No];


                    rf.MemberLoad[] rfMemberLoads = l.GetLoadCase(i, rf.ItemAt.AtIndex).GetMemberLoads();
                    if (rfMemberLoads.Length > 0)
                    {
                        if (!barsRead)
                        {
                            bhBarDict = ReadBars().ToDictionary(x => GetAdapterId(x).ToString(), x => x);
                            barsRead  = true;
                        }


                        foreach (rf.MemberLoad rfLoad in rfMemberLoads)
                        {
                            List <string>           barIds   = BH.Engine.Adapters.RFEM.Compute.GetIdListFromString(rfLoad.ObjectList);
                            oM.Base.BHoMGroup <Bar> barGroup = new oM.Base.BHoMGroup <Bar>();
                            barGroup.Elements.AddRange(barIds.Where(k => bhBarDict.ContainsKey(k)).Select(k => bhBarDict[k]));


                            if (rfLoad.Distribution == rf.LoadDistributionType.UniformType)
                            {
                                BarUniformlyDistributedLoad barUniformLoad = rfLoad.FromRFEM(bhLoadcase, barGroup);
                                loadList.Add(barUniformLoad);
                            }
                            else if (rfLoad.Distribution == rf.LoadDistributionType.ConcentratedType)
                            {
                                BarPointLoad barPointLoad = new BarPointLoad();
                                //...
                            }
                            else
                            {
                                Engine.Base.Compute.RecordWarning("Load distribution of type: " + rfLoad.Distribution.ToString() + " is not supported!");
                            }
                        }
                    }
                }
            }
            else
            {
                foreach (string id in ids)
                {
                    //loadList.Add();
                }
            }

            return(loadList);
        }
        /***************************************************/
        /**** Public Methods                            ****/
        /***************************************************/

        public static BarUniformlyDistributedLoad FromRFEM(this rf.MemberLoad rfMemberLoad, Loadcase bhLoadcase, oM.Base.BHoMGroup <Bar> objectGroup)
        {
            LoadAxis loadAxis;
            bool     projected;
            string   direction;

            BarUniformlyDistributedLoad barUniformLoad = new BarUniformlyDistributedLoad();

            barUniformLoad.Loadcase = bhLoadcase;
            barUniformLoad.Objects  = objectGroup;
            barUniformLoad.SetAdapterId(typeof(RFEMId), rfMemberLoad.No);

            GetLoadingParameters(rfMemberLoad, out loadAxis, out projected, out direction);
            barUniformLoad.Axis      = loadAxis;
            barUniformLoad.Projected = projected;

            switch (direction)
            {
            case "FX":
                barUniformLoad.Force.X = rfMemberLoad.Magnitude1;
                break;

            case "FY":
                barUniformLoad.Force.Y = rfMemberLoad.Magnitude1;
                break;

            case "FZ":
                barUniformLoad.Force.Z = rfMemberLoad.Magnitude1;
                break;

            case "UX":
                barUniformLoad.Moment.X = rfMemberLoad.Magnitude1;
                break;

            case "UY":
                barUniformLoad.Moment.Y = rfMemberLoad.Magnitude1;
                break;

            case "UZ":
                barUniformLoad.Moment.Z = rfMemberLoad.Magnitude1;
                break;

            default:
                break;
            }

            return(barUniformLoad);
        }