/***************************************************/ /**** 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); }