/***************************************************/ /**** Public Methods ****/ /***************************************************/ public static BarUniformTemperatureLoad ToBarUniformTemperatureLoad( IFLoading lusasTemperatureLoad, IEnumerable <IFAssignment> lusasAssignments, Dictionary <string, Bar> bars) { IFLoadcase assignedLoadcase = (IFLoadcase)lusasAssignments.First().getAssignmentLoadset(); Loadcase loadcase = ToLoadcase(assignedLoadcase); double temperatureChange = lusasTemperatureLoad.getValue("T") - lusasTemperatureLoad.getValue("T0"); IEnumerable <Bar> assignedBars = GetLineAssignments(lusasAssignments, bars); BarUniformTemperatureLoad barUniformTemperatureLoad = Engine.Structure.Create.BarUniformTemperatureLoad( loadcase, temperatureChange, assignedBars, LoadAxis.Local, false, GetName(lusasTemperatureLoad)); int adapterNameId = lusasTemperatureLoad.getID(); barUniformTemperatureLoad.SetAdapterId(typeof(LusasId), adapterNameId); return(barUniformTemperatureLoad); }
/***************************************************/ /**** Private Methods ****/ /***************************************************/ private List <ILoad> ReadBarUniformTemperatureLoads(List <string> ids = null) { List <ILoad> barUniformTemperatureLoads = new List <ILoad>(); object[] lusasTemperatureLoads = d_LusasData.getAttributes("Temperature"); if (!(lusasTemperatureLoads.Count() == 0)) { List <Bar> barsList = ReadBars(); Dictionary <string, Bar> bars = barsList.ToDictionary( x => x.AdapterId <string>(typeof(LusasId))); List <IFLoadcase> allLoadcases = new List <IFLoadcase>(); for (int i = 0; i < lusasTemperatureLoads.Count(); i++) { IFLoading lusasTemperatureLoad = (IFLoading)lusasTemperatureLoads[i]; IEnumerable <IGrouping <string, IFAssignment> > groupedByLoadcases = GetLoadAssignments(lusasTemperatureLoad); foreach (IEnumerable <IFAssignment> groupedAssignment in groupedByLoadcases) { List <IFAssignment> assignments = new List <IFAssignment>(); foreach (IFAssignment assignment in groupedAssignment) { IFLine tryLine = assignment.getDatabaseObject() as IFLine; if (tryLine != null) { assignments.Add(assignment); } } List <string> analysisName = new List <string> { lusasTemperatureLoad.getAttributeType() }; if (assignments.Count != 0) { BarUniformTemperatureLoad barUniformTemperatureLoad = Adapter.Adapters.Lusas.Convert.ToBarUniformTemperatureLoad( lusasTemperatureLoad, groupedAssignment, bars); barUniformTemperatureLoad.Tags = new HashSet <string>(analysisName); barUniformTemperatureLoads.Add(barUniformTemperatureLoad); } } } } return(barUniformTemperatureLoads); }
/***************************************************/ /**** Private Methods ****/ /***************************************************/ private IFLoadingTemperature CreateBarUniformTemperatureLoad(BarUniformTemperatureLoad temperatureLoad, object[] lusasLines) { IFLoadcase assignedLoadcase = (IFLoadcase)d_LusasData.getLoadset(temperatureLoad.Loadcase.AdapterId <int>(typeof(LusasId))); IFLoadingTemperature lusasTemperatureLoad = CreateTemperatureLoad( temperatureLoad.Name, temperatureLoad.TemperatureChange, lusasLines, assignedLoadcase); int adapterIdName = lusasTemperatureLoad.getID(); temperatureLoad.SetAdapterId(typeof(LusasId), adapterIdName); return(lusasTemperatureLoad); }
/***************************************************/ public void SetLoad(BarUniformTemperatureLoad barTempratureLoad, bool replace) { int ret = 0; string caseName = GetAdapterId <string>(barTempratureLoad.Loadcase); foreach (Bar bar in barTempratureLoad.Objects.Elements) { double val = barTempratureLoad.TemperatureChange; if (val != 0) { ret = m_model.FrameObj.SetLoadTemperature(GetAdapterId <string>(bar), caseName, 1, val, "", replace); } } }
public static List <ICurve> Visualize(this BarUniformTemperatureLoad barTempLoad, double scaleFactor = 1.0, bool displayForces = true, bool displayMoments = true, bool asResultants = true) { if (barTempLoad.IsNull()) { return(null); } List <ICurve> arrows = new List <ICurve>(); double loadFactor = barTempLoad.TemperatureChange * 1000 * scaleFactor; //Arrow methods are scaling down force to 1/1000 foreach (Bar bar in barTempLoad.Objects.Elements) { arrows.AddRange(ConnectedArrows(new List <ICurve> { bar.Centreline() }, bar.Normal() * loadFactor, true, null, 0, true)); } return(arrows); }
/***************************************************/ private bool CreateLoad(BarUniformTemperatureLoad bhLoad) { List <Bar> bars = bhLoad.Objects.Elements.ToList(); string loadPat = GetAdapterId <string>(bhLoad.Loadcase); double tempChange = bhLoad.TemperatureChange; int loadType = 1; // BHoM currently only supports uniform temperature change (=1); SAP supports gradients in local 2 and 3 axes (=2 and =3). bool replace = SAPPushConfig.ReplaceLoads; foreach (Bar bar in bars) { string name = GetAdapterId <string>(bar); if (m_model.FrameObj.SetLoadTemperature(name, loadPat, loadType, tempChange, Replace: replace) != 0) { CreateElementError("BarUniformTemperatureLoad", bhLoad.Name); } } Engine.Base.Compute.RecordNote("SAP2000 includes functionality for temperature gradient in 2 and 3 local bar axes, but the BHoM currently only supports uniform temperature changes."); SetAdapterId(bhLoad, null); return(true); }
public static LoadType LoadType(this BarUniformTemperatureLoad load) { return(oM.Structure.Loads.LoadType.BarTemperature); }