Exemplo n.º 1
0
    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());
 }
Exemplo n.º 3
0
    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();
    }
Exemplo n.º 4
0
 //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());
 }