public static SpeckleObject ToSpeckle(this GSA2DLoad dummyObject) { var newLines = ToSpeckleBase <GSA2DLoad>(); var typeName = dummyObject.GetType().Name; var loads = new List <GSA2DLoad>(); var elements = Initialiser.GsaKit.GSASenderObjects.Get <GSA2DElement>(); var members = Initialiser.GsaKit.GSASenderObjects.Get <GSA2DMember>(); var loadLock = new object(); var keyword = dummyObject.GetGSAKeyword(); foreach (var k in newLines.Keys) { var p = newLines[k]; var loadSubList = new List <GSA2DLoad>(); // Placeholder load object to get list of elements and load values // Need to transform to axis so one load definition may be transformed to many var initLoad = new GSA2DLoad() { GWACommand = p, GSAId = k }; try { initLoad.ParseGWACommand(elements, members); } catch (Exception ex) { Initialiser.AppResources.Messenger.Message(MessageIntent.TechnicalLog, MessageLevel.Error, ex, "Keyword=" + keyword, "Index=" + k); } lock (loadLock) { loads.Add(initLoad); } } if (loads.Count() > 0) { Initialiser.GsaKit.GSASenderObjects.AddRange(loads); } return((loads.Count() > 0) ? new SpeckleObject() : new SpeckleNull()); }
public static SpeckleObject ToSpeckle(this GSA2DLoad dummyObject) { var newLines = ToSpeckleBase <GSA2DLoad>(); var loads = new List <GSA2DLoad>(); var elements = (Initialiser.Settings.TargetLayer == GSATargetLayer.Analysis) ? Initialiser.GSASenderObjects[typeof(GSA2DElement)].Cast <GSA2DElement>().ToList() : new List <GSA2DElement>(); var members = (Initialiser.Settings.TargetLayer == GSATargetLayer.Design) ? Initialiser.GSASenderObjects[typeof(GSA2DMember)].Cast <GSA2DMember>().ToList() : new List <GSA2DMember>(); foreach (var p in newLines.Values) { var loadSubList = new List <GSA2DLoad>(); // Placeholder load object to get list of elements and load values // Need to transform to axis so one load definition may be transformed to many var initLoad = new GSA2DLoad() { GWACommand = p }; initLoad.ParseGWACommand(elements, members); if (Initialiser.Settings.TargetLayer == GSATargetLayer.Analysis) { // Create load for each element applied foreach (string nRef in initLoad.Value.ElementRefs) { var load = new GSA2DLoad { GWACommand = initLoad.GWACommand, SubGWACommand = new List <string>(initLoad.SubGWACommand) }; load.Value.Name = initLoad.Value.Name; load.Value.LoadCaseRef = initLoad.Value.LoadCaseRef; // Transform load to defined axis var elem = elements.Where(e => e.Value.ApplicationId == nRef).First(); StructuralAxis loadAxis = HelperClass.Parse2DAxis(elem.Value.Vertices.ToArray(), 0, load.Axis != 0); // Assumes if not global, local load.Value.Loading = initLoad.Value.Loading; // Perform projection if (load.Projected) { load.Value.Loading.Value[0] = 0; load.Value.Loading.Value[1] = 0; } load.Value.Loading.TransformOntoAxis(loadAxis); // If the loading already exists, add element ref to list var match = loadSubList.Count() > 0 ? loadSubList.Where(l => l.Value.Loading.Equals(load.Value.Loading)).First() : null; if (match != null) { match.Value.ElementRefs.Add(nRef); } else { load.Value.ElementRefs = new List <string>() { nRef }; loadSubList.Add(load); } } } else if (Initialiser.Settings.TargetLayer == GSATargetLayer.Design) { // Create load for each element applied foreach (string nRef in initLoad.Value.ElementRefs) { var load = new GSA2DLoad { GWACommand = initLoad.GWACommand, SubGWACommand = new List <string>(initLoad.SubGWACommand), }; load.Value.Name = initLoad.Value.Name; load.Value.LoadCaseRef = initLoad.Value.LoadCaseRef; // Transform load to defined axis var memb = members.Where(e => e.Value.ApplicationId == nRef).First(); StructuralAxis loadAxis = HelperClass.Parse2DAxis(memb.Value.Vertices.ToArray(), 0, load.Axis != 0); // Assumes if not global, local load.Value.Loading = initLoad.Value.Loading; load.Value.Loading.TransformOntoAxis(loadAxis); // Perform projection if (load.Projected) { load.Value.Loading.Value[0] = 0; load.Value.Loading.Value[1] = 0; } load.Value.Loading.TransformOntoAxis(loadAxis); // If the loading already exists, add element ref to list var match = loadSubList.Count() > 0 ? loadSubList.Where(l => (l.Value.Loading.Value as List <double>).SequenceEqual(load.Value.Loading.Value as List <double>)).First() : null; if (match != null) { match.Value.ElementRefs.Add(nRef); } else { load.Value.ElementRefs = new List <string>() { nRef }; loadSubList.Add(load); } } } loads.AddRange(loadSubList); } Initialiser.GSASenderObjects[typeof(GSA2DLoad)].AddRange(loads); return((loads.Count() > 0) ? new SpeckleObject() : new SpeckleNull()); }