public static SpeckleObject ToSpeckle(this GSA1DElementResult dummyObject) { var result1dTypes = new[] { ResultType.Element1dDisplacement, ResultType.Element1dForce }; var resultTypes = Initialiser.AppResources.Settings.ResultTypes.Intersect(result1dTypes).ToList(); if (resultTypes.Count == 0 || (Initialiser.AppResources.Settings.StreamSendConfig == StreamContentConfig.ModelWithEmbeddedResults && Initialiser.GsaKit.GSASenderObjects.Count<GSA1DElement>() == 0)) { return new SpeckleNull(); } var kw = GsaRecord.GetKeyword<GsaEl>(); var loadTaskKw = GsaRecord.GetKeyword<GsaLoadCase>(); var comboKw = GsaRecord.GetKeyword<GsaCombination>(); var axisStr = Initialiser.AppResources.Settings.ResultInLocalAxis ? "local" : "global"; var num1dPos = Initialiser.AppResources.Settings.Result1DNumPosition; var typeName = dummyObject.GetType().Name; var numAdditionalPoints = Initialiser.AppResources.Settings.Result1DNumPosition; var cases = Initialiser.AppResources.Settings.ResultCases; if (Initialiser.AppResources.Settings.StreamSendConfig == StreamContentConfig.ModelWithEmbeddedResults) { Embed1DResults(typeName, axisStr, num1dPos, kw, loadTaskKw, comboKw, resultTypes, cases, numAdditionalPoints); } else { if (!Create1DElementResultObjects(typeName, axisStr, num1dPos, loadTaskKw, comboKw, resultTypes, cases, numAdditionalPoints)) { return new SpeckleNull(); } } return new SpeckleObject(); }
public static SpeckleObject ToSpeckle(this GSA1DElementResult dummyObject) { if (Initialiser.Settings.Element1DResults.Count() == 0) { return(new SpeckleNull()); } if (Initialiser.Settings.EmbedResults && !Initialiser.GSASenderObjects.ContainsKey(typeof(GSA1DElement))) { return(new SpeckleNull()); } if (Initialiser.Settings.EmbedResults) { var elements = Initialiser.GSASenderObjects[typeof(GSA1DElement)].Cast <GSA1DElement>().ToList(); var entities = elements.Cast <IGSASpeckleContainer>().ToList(); foreach (var kvp in Initialiser.Settings.Element1DResults) { foreach (var loadCase in Initialiser.Settings.ResultCases) { if (!Initialiser.Interface.CaseExist(loadCase)) { continue; } foreach (var entity in entities) { var id = entity.GSAId; if (entity.Value.Result == null) { entity.Value.Result = new Dictionary <string, object>(); } var resultExport = Initialiser.Interface.GetGSAResult(id, kvp.Value.Item1, kvp.Value.Item2, kvp.Value.Item3, loadCase, Initialiser.Settings.ResultInLocalAxis ? "local" : "global", Initialiser.Settings.Result1DNumPosition); if (resultExport == null) { continue; } if (!entity.Value.Result.ContainsKey(loadCase)) { entity.Value.Result[loadCase] = new Structural1DElementResult() { Value = new Dictionary <string, object>() } } ; (entity.Value.Result[loadCase] as Structural1DElementResult).Value[kvp.Key] = resultExport; } } } // Linear interpolate the line values foreach (var entity in entities) { var dX = (entity.Value.Value[3] - entity.Value.Value[0]) / (Initialiser.Settings.Result1DNumPosition + 1); var dY = (entity.Value.Value[4] - entity.Value.Value[1]) / (Initialiser.Settings.Result1DNumPosition + 1); var dZ = (entity.Value.Value[5] - entity.Value.Value[2]) / (Initialiser.Settings.Result1DNumPosition + 1); var interpolatedVertices = new List <double>(); interpolatedVertices.AddRange((entity.Value.Value as List <double>).Take(3)); for (var i = 1; i <= Initialiser.Settings.Result1DNumPosition; i++) { interpolatedVertices.Add(interpolatedVertices[0] + dX * i); interpolatedVertices.Add(interpolatedVertices[1] + dY * i); interpolatedVertices.Add(interpolatedVertices[2] + dZ * i); } interpolatedVertices.AddRange((entity.Value.Value as List <double>).Skip(3).Take(3)); entity.Value.ResultVertices = interpolatedVertices; } } else { Initialiser.GSASenderObjects[typeof(GSA1DElementResult)] = new List <object>(); var results = new List <GSA1DElementResult>(); var keyword = HelperClass.GetGSAKeyword(typeof(GSA1DElement)); var gwa = Initialiser.Cache.GetGwa(keyword); foreach (var kvp in Initialiser.Settings.Element1DResults) { foreach (var loadCase in Initialiser.Settings.ResultCases) { if (!Initialiser.Interface.CaseExist(loadCase)) { continue; } for (var i = 0; i < gwa.Count(); i++) { var record = gwa[i]; var pPieces = record.ListSplit("\t"); if (pPieces[4].ParseElementNumNodes() != 2) { continue; } if (!int.TryParse(pPieces[1], out var id)) { //Could not extract index continue; } var resultExport = Initialiser.Interface.GetGSAResult(id, kvp.Value.Item1, kvp.Value.Item2, kvp.Value.Item3, loadCase, Initialiser.Settings.ResultInLocalAxis ? "local" : "global", Initialiser.Settings.Result1DNumPosition); if (resultExport == null || resultExport.Count() == 0) { continue; } var existingRes = results.FirstOrDefault(x => x.Value.TargetRef == id.ToString()); if (existingRes == null) { var newRes = new Structural1DElementResult() { Value = new Dictionary <string, object>(), TargetRef = HelperClass.GetApplicationId(typeof(GSA1DElement).GetGSAKeyword(), id), IsGlobal = !Initialiser.Settings.ResultInLocalAxis, }; newRes.Value[kvp.Key] = resultExport; newRes.GenerateHash(); results.Add(new GSA1DElementResult() { Value = newRes }); } else { existingRes.Value.Value[kvp.Key] = resultExport; } } } } Initialiser.GSASenderObjects[typeof(GSA1DElementResult)].AddRange(results); } return(new SpeckleObject()); }