public string SetGWACommand() { if (this.Value == null) return ""; var obj = this.Value as Structural1DElementPolyline; if (obj.Value == null || obj.Value.Count() == 0) return ""; var elements = obj.Explode(); var gwaCommands = new List<string>(); if (Initialiser.AppResources.Settings.TargetLayer == GSATargetLayer.Design) { var coords = obj.basePolyline.Value.Take(3).Union(obj.basePolyline.Value.Skip(obj.basePolyline.Value.Count - 3).Take(3)).ToList(); var member1d = new Structural1DElement() { //This might have more than 6 items (i.e. 2 XYZ points) which is incompatible with SpeckleLine but there is no enforcement of 6 values for SpeckleLine at this point //- the codebase around ToNative() for design-layer polylines needs to be refactored to avoid this "overloading" of the Value list ApplicationId = obj.ApplicationId, Name = obj.Name, Value = obj.basePolyline.Value, ElementType = obj.ElementType, PropertyRef = obj.PropertyRef, EndRelease = obj.EndRelease, Offset = obj.Offset, Properties = obj.Properties, GSAMeshSize = obj.GSAMeshSize, GSADummy = obj.GSADummy }; var gsa1dMember = new GSA1DMember() { Value = member1d }; gwaCommands.Add(gsa1dMember.SetGWACommand()); } else if (elements.Count() == 1) { gwaCommands.Add(new GSA1DElement() { Value = elements.First() }.SetGWACommand()); } else { var group = Initialiser.AppResources.Cache.ResolveIndex(typeof(GSA1DElementPolyline).GetGSAKeyword(), obj.ApplicationId); #if DEBUG foreach (var element in elements) #else Parallel.ForEach(elements, element => #endif { gwaCommands.Add(new GSA1DElement() { Value = element }.SetGWACommand(group)); } #if !DEBUG ); #endif } return string.Join("\n", gwaCommands); }
public static string ToNative(this Structural1DElement beam) { return((Initialiser.Settings.TargetLayer == GSATargetLayer.Analysis) ? new GSA1DElement() { Value = beam }.SetGWACommand() : new GSA1DMember() { Value = beam }.SetGWACommand()); }
public static string ToNative(this SpeckleLine inputObject) { var convertedObject = new Structural1DElement(); foreach (var p in convertedObject.GetType().GetProperties().Where(p => p.CanWrite)) { var inputProperty = inputObject.GetType().GetProperty(p.Name); if (inputProperty != null) p.SetValue(convertedObject, inputProperty.GetValue(inputObject)); } return convertedObject.ToNative(); }
//TODO public static Element ToNative(this Structural1DElement myBeam) { return(null); }
public void ParseGWACommand(List <GSANode> nodes) { if (this.GWACommand == null) { return; } var obj = new Structural1DElement(); var pieces = this.GWACommand.ListSplit("\t"); var counter = 1; // Skip identifier this.GSAId = Convert.ToInt32(pieces[counter++]); obj.ApplicationId = HelperClass.GetApplicationId(this.GetGSAKeyword(), this.GSAId); obj.Name = pieces[counter++].Trim(new char[] { '"' }); counter++; // Colour counter++; // Type obj.PropertyRef = HelperClass.GetApplicationId(typeof(GSA1DProperty).GetGSAKeyword(), Convert.ToInt32(pieces[counter++])); counter++; // Group obj.Value = new List <double>(); for (var i = 0; i < 2; i++) { var key = pieces[counter++]; var node = nodes.Where(n => n.GSAId == Convert.ToInt32(key)).FirstOrDefault(); obj.Value.AddRange(node.Value.Value); this.SubGWACommand.Add(node.GWACommand); } var orientationNodeRef = pieces[counter++]; var rotationAngle = Convert.ToDouble(pieces[counter++]); if (orientationNodeRef != "0") { var node = nodes.Where(n => n.GSAId == Convert.ToInt32(orientationNodeRef)).FirstOrDefault(); obj.ZAxis = HelperClass.Parse1DAxis(obj.Value.ToArray(), rotationAngle, node.Value.Value.ToArray()).Normal as StructuralVectorThree; this.SubGWACommand.Add(node.GWACommand); } else { obj.ZAxis = HelperClass.Parse1DAxis(obj.Value.ToArray(), rotationAngle).Normal as StructuralVectorThree; } if (pieces[counter++] != "NO_RLS") { var start = pieces[counter++]; var end = pieces[counter++]; obj.EndRelease = new List <StructuralVectorBoolSix> { new StructuralVectorBoolSix(new bool[6]), new StructuralVectorBoolSix(new bool[6]) }; obj.EndRelease[0].Value[0] = ParseEndRelease(start[0], pieces, ref counter); obj.EndRelease[0].Value[1] = ParseEndRelease(start[1], pieces, ref counter); obj.EndRelease[0].Value[2] = ParseEndRelease(start[2], pieces, ref counter); obj.EndRelease[0].Value[3] = ParseEndRelease(start[3], pieces, ref counter); obj.EndRelease[0].Value[4] = ParseEndRelease(start[4], pieces, ref counter); obj.EndRelease[0].Value[5] = ParseEndRelease(start[5], pieces, ref counter); obj.EndRelease[1].Value[0] = ParseEndRelease(end[0], pieces, ref counter); obj.EndRelease[1].Value[1] = ParseEndRelease(end[1], pieces, ref counter); obj.EndRelease[1].Value[2] = ParseEndRelease(end[2], pieces, ref counter); obj.EndRelease[1].Value[3] = ParseEndRelease(end[3], pieces, ref counter); obj.EndRelease[1].Value[4] = ParseEndRelease(end[4], pieces, ref counter); obj.EndRelease[1].Value[5] = ParseEndRelease(end[5], pieces, ref counter); } else { obj.EndRelease = new List <StructuralVectorBoolSix> { new StructuralVectorBoolSix(new bool[] { true, true, true, true, true, true }), new StructuralVectorBoolSix(new bool[] { true, true, true, true, true, true }) }; } obj.Offset = new List <StructuralVectorThree> { new StructuralVectorThree(new double[3]), new StructuralVectorThree(new double[3]) }; obj.Offset[0].Value[0] = Convert.ToDouble(pieces[counter++]); obj.Offset[1].Value[0] = Convert.ToDouble(pieces[counter++]); obj.Offset[0].Value[1] = Convert.ToDouble(pieces[counter++]); obj.Offset[1].Value[1] = obj.Offset[0].Value[1]; obj.Offset[0].Value[2] = Convert.ToDouble(pieces[counter++]); obj.Offset[1].Value[2] = obj.Offset[0].Value[2]; //counter++; // Action // TODO: EL.4 SUPPORT counter++; // Dummy if (counter < pieces.Length) { Member = pieces[counter++]; } this.Value = obj; }
public void ParseGWACommand(List <GSANode> nodes) { if (this.GWACommand == null) { return; } var obj = new Structural1DElement(); var pieces = this.GWACommand.ListSplit("\t"); var counter = 1; // Skip identifier this.GSAId = Convert.ToInt32(pieces[counter++]); obj.ApplicationId = HelperClass.GetApplicationId(this.GetGSAKeyword(), this.GSAId); obj.Name = pieces[counter++].Trim(new char[] { '"' }); counter++; // Color var type = pieces[counter++]; if (type == "BEAM") { obj.ElementType = Structural1DElementType.Beam; } else if (type == "COLUMN") { obj.ElementType = Structural1DElementType.Column; } else if (type == "CANTILEVER") { obj.ElementType = Structural1DElementType.Cantilever; } else { obj.ElementType = Structural1DElementType.Generic; } obj.PropertyRef = HelperClass.GetApplicationId(typeof(GSA1DProperty).GetGSAKeyword(), Convert.ToInt32(pieces[counter++])); this.Group = Convert.ToInt32(pieces[counter++]); // Keep group for load targetting obj.Value = new List <double>(); var nodeRefs = pieces[counter++].ListSplit(" "); for (var i = 0; i < nodeRefs.Length; i++) { var node = nodes.Where(n => n.GSAId == Convert.ToInt32(nodeRefs[i])).FirstOrDefault(); obj.Value.AddRange(node.Value.Value); this.SubGWACommand.Add(node.GWACommand); } var orientationNodeRef = pieces[counter++]; var rotationAngle = Convert.ToDouble(pieces[counter++]); if (orientationNodeRef != "0") { var node = nodes.Where(n => n.GSAId == Convert.ToInt32(orientationNodeRef)).FirstOrDefault(); obj.ZAxis = HelperClass.Parse1DAxis(obj.Value.ToArray(), rotationAngle, node.Value.ToArray()).Normal as StructuralVectorThree; this.SubGWACommand.Add(node.GWACommand); } else { obj.ZAxis = HelperClass.Parse1DAxis(obj.Value.ToArray(), rotationAngle).Normal as StructuralVectorThree; } counter += 9; //Skip to end conditions obj.EndRelease = new List <StructuralVectorBoolSix> { ParseEndReleases(Convert.ToInt32(pieces[counter++])), ParseEndReleases(Convert.ToInt32(pieces[counter++])) }; // Skip to offsets at fifth to last counter = pieces.Length - 5; obj.Offset = new List <StructuralVectorThree> { new StructuralVectorThree(new double[3]), new StructuralVectorThree(new double[3]) }; obj.Offset[0].Value[0] = Convert.ToDouble(pieces[counter++]); obj.Offset[1].Value[0] = Convert.ToDouble(pieces[counter++]); obj.Offset[0].Value[1] = Convert.ToDouble(pieces[counter++]); obj.Offset[1].Value[1] = obj.Offset[0].Value[1]; obj.Offset[0].Value[2] = Convert.ToDouble(pieces[counter++]); obj.Offset[1].Value[2] = obj.Offset[0].Value[2]; this.Value = obj; }
public static string ToNative(this Structural1DElement beam) { return SchemaConversion.Helper.ToNativeTryCatch(beam, () => (Initialiser.AppResources.Settings.TargetLayer == GSATargetLayer.Analysis) ? new GSA1DElement() { Value = beam }.SetGWACommand() : new GSA1DMember() { Value = beam }.SetGWACommand()); }