예제 #1
0
        /***************************************************/

        private void GetOneSideBarReleaseArrays(Constraint6DOF constraint, out bool[] fixities, out double[] values)
        {
            fixities = new bool[6];

            //Note: Etabs does not follow the same convention as the BHoM. Different notation is also used
            //where 1,2 and 3 is used instead of X,Y, and Z. The convention is as follows: 1 = X, 2 = Z and 3 = Y in etabs

            fixities[0] = constraint.TranslationX != DOFType.Fixed;
            fixities[1] = constraint.TranslationZ != DOFType.Fixed;
            fixities[2] = constraint.TranslationY != DOFType.Fixed;

            fixities[3] = constraint.RotationX != DOFType.Fixed;
            fixities[4] = constraint.RotationZ != DOFType.Fixed;
            fixities[5] = constraint.RotationY != DOFType.Fixed;

            values = new double[6];

            values[0] = constraint.TranslationalStiffnessX;
            values[1] = constraint.TranslationalStiffnessZ;
            values[2] = constraint.TranslationalStiffnessY;


            values[3] = constraint.RotationalStiffnessX;
            values[4] = constraint.RotationalStiffnessZ;
            values[5] = constraint.RotationalStiffnessY;
        }
예제 #2
0
        /***************************************************/
        /**** Public Methods                            ****/
        /***************************************************/

        public static Node ToNode(this IFPoint lusasPoint,
                                  HashSet <string> groupNames, Dictionary <string, Constraint6DOF> constraint6DOFs)
        {
            HashSet <string> tags = new HashSet <string>(IsMemberOf(lusasPoint, groupNames));
            List <string>    supportAssignments = GetAttributeAssignments(lusasPoint, "Support");

            Constraint6DOF nodeConstraint = null;

            if (!(supportAssignments.Count() == 0))
            {
                constraint6DOFs.TryGetValue(supportAssignments[0], out nodeConstraint);
            }

            Node node = new Node
            {
                Position = new Point {
                    X = lusasPoint.getX(), Y = lusasPoint.getY(), Z = lusasPoint.getZ()
                },
                Name    = "",
                Support = nodeConstraint
            };

            node.Tags = tags;

            string adapterID = lusasPoint.getID().ToString();

            node.SetAdapterId(typeof(LusasId), adapterID);

            return(node);
        }
예제 #3
0
        /***************************************************/

        private List <Node> ReadNode(List <string> ids = null)
        {
            List <Node> nodeList = new List <Node>();

            int nameCount = 0;

            string[] nameArr = { };
            m_model.PointObj.GetNameList(ref nameCount, ref nameArr);

            ids = FilterIds(ids, nameArr);

            foreach (string id in ids)
            {
                ETABSId etabsIdFragment = new ETABSId();
                etabsIdFragment.Id = id;

                double x, y, z;
                x = y = z = 0;
                bool[]   restraint = new bool[6];
                double[] spring    = new double[6];

                m_model.PointObj.GetCoordCartesian(id, ref x, ref y, ref z);

                m_model.PointObj.GetRestraint(id, ref restraint);
                m_model.PointObj.GetSpring(id, ref spring);

                Constraint6DOF support = GetConstraint6DOF(restraint, spring);

                Node bhNode = new Node {
                    Position = new oM.Geometry.Point()
                    {
                        X = x, Y = y, Z = z
                    }, Support = support
                };

                //Label and story
                string label = "";
                string story = "";
                string guid  = null;
                if (m_model.PointObj.GetLabelFromName(id, ref label, ref story) == 0)
                {
                    etabsIdFragment.Label = label;
                    etabsIdFragment.Story = story;
                }

                if (m_model.PointObj.GetGUID(id, ref guid) == 0)
                {
                    etabsIdFragment.PersistentId = guid;
                }

                bhNode.SetAdapterId(etabsIdFragment);
                nodeList.Add(bhNode);
            }


            return(nodeList);
        }
예제 #4
0
        /***************************************************/
        /**** Public Methods                            ****/
        /***************************************************/

        public static Node Node(Cartesian coordinates, string name = "", Constraint6DOF constraint = null)
        {
            return(new Node
            {
                Coordinates = coordinates.Clone(),
                Name = name,
                Constraint = constraint
            });
        }
예제 #5
0
        private static void FlipEndPoints(Bar bar)
        {
            // Flip the endpoints
            Node tempNode = bar.StartNode;

            bar.StartNode = bar.EndNode;
            bar.EndNode   = tempNode;

            // Flip orientationAngle
            bar.OrientationAngle = -bar.OrientationAngle;
            if (bar.IsVertical())
            {
                bar.OrientationAngle += Math.PI;
            }

            // Flip Offsets
            if (bar.Offset != null)
            {
                Vector tempV = bar.Offset.Start;
                bar.Offset.Start = bar.Offset.End;
                bar.Offset.End   = tempV;

                if (bar.Offset.Start != null)
                {
                    bar.Offset.Start.X *= -1;
                }

                if (bar.Offset.End != null)
                {
                    bar.Offset.End.X *= -1;
                }

                if (!bar.IsVertical())
                {
                    if (bar.Offset.Start != null)
                    {
                        bar.Offset.Start.Y *= -1;
                    }

                    if (bar.Offset.End != null)
                    {
                        bar.Offset.End.Y *= -1;
                    }
                }
            }
            // mirror the section
            // not possible to push to ETABS afterwards if we did
            // warning for asymetric sections?

            // Flip Release
            if (bar.Release != null)
            {
                Constraint6DOF tempC = bar.Release.StartRelease;
                bar.Release.StartRelease = bar.Release.EndRelease;
                bar.Release.EndRelease   = tempC;
            }
        }
예제 #6
0
        /***************************************************/
        /**** Private Methods                           ****/
        /***************************************************/

        private IFAttribute CreateSupport(Constraint6DOF constraint)
        {
            if (!Engine.Adapters.Lusas.Query.CheckIllegalCharacters(constraint.DescriptionOrName()))
            {
                return(null);
            }

            IFAttribute lusasSupport = null;

            if (d_LusasData.existsAttribute("Support", constraint.DescriptionOrName()))
            {
                lusasSupport = d_LusasData.getAttribute("Support", constraint.DescriptionOrName());
            }
            else
            {
                lusasSupport = d_LusasData.createSupportStructural(constraint.DescriptionOrName());

                List <string> releaseNames = new List <string> {
                    "U", "V", "W", "THX", "THY", "THZ"
                };
                List <double> stiffness = new List <double> {
                    constraint.TranslationalStiffnessX, constraint.TranslationalStiffnessY,
                    constraint.TranslationalStiffnessZ,
                    constraint.RotationalStiffnessX, constraint.RotationalStiffnessY,
                    constraint.RotationalStiffnessZ
                };

                bool[] fixities = constraint.Fixities();

                for (int i = 0; i < releaseNames.Count(); i++)
                {
                    if (fixities[i])
                    {
                        lusasSupport.setValue(releaseNames[i], "R");
                    }
                    else if (stiffness[i] == 0)
                    {
                        lusasSupport.setValue(releaseNames[i], "F");
                    }
                    else
                    {
                        lusasSupport.setValue(releaseNames[i], "S");
                        lusasSupport.setValue(releaseNames[i] + "stiff", stiffness[i]);
                    }
                }
            }

            if (lusasSupport != null)
            {
                int adapterIdName = lusasSupport.getID();
                constraint.SetAdapterId(typeof(LusasId), adapterIdName);

                return(lusasSupport);
            }

            return(null);
        }
예제 #7
0
파일: Node.cs 프로젝트: BHoM/BHoM_Engine
 public static Node Node(Cartesian coordinates, string name = "", Constraint6DOF support = null)
 {
     return(coordinates.IsNull() ? null : new Node
     {
         Position = coordinates.Origin,
         Orientation = (Basis)coordinates,
         Name = name,
         Support = support
     });
 }
예제 #8
0
파일: IsNull.cs 프로젝트: BHoM/BHoM_Engine
        public static bool IsNull(this Constraint6DOF constraint, string msg = "", [CallerMemberName] string methodName = "Method")
        {
            if (constraint == null)
            {
                ErrorMessage(methodName, "Constraint6DOF", msg);
                return(true);
            }

            return(false);
        }
예제 #9
0
        /***************************************************/
        /**** Public Methods                            ****/
        /***************************************************/

        public static Edge Edge(ICurve curve, Constraint6DOF support = null, Constraint4DOF release = null, string name = "")
        {
            return(new Edge
            {
                Curve = curve,
                Support = support,
                Release = release,
                Name = name
            });
        }
예제 #10
0
 public static double[] ElasticValues(this Constraint6DOF constraint)
 {
     return(constraint.IsNull() ? null : new double[]
     {
         constraint.TranslationalStiffnessX,
         constraint.TranslationalStiffnessY,
         constraint.TranslationalStiffnessZ,
         constraint.RotationalStiffnessX,
         constraint.RotationalStiffnessY,
         constraint.RotationalStiffnessZ
     });
 }
예제 #11
0
 public static bool[] Fixities(this Constraint6DOF constraint)
 {
     return(constraint.IsNull() ? null : new bool[]
     {
         constraint.TranslationX == DOFType.Fixed,
         constraint.TranslationY == DOFType.Fixed,
         constraint.TranslationZ == DOFType.Fixed,
         constraint.RotationX == DOFType.Fixed,
         constraint.RotationY == DOFType.Fixed,
         constraint.RotationZ == DOFType.Fixed
     });
 }
예제 #12
0
        public static string Description(this Constraint6DOF constraint)
        {
            string desc = constraint.TranslationX.DofSign() + constraint.TranslationY.DofSign() + constraint.TranslationZ.DofSign() +
                          constraint.RotationX.DofSign() + constraint.RotationY.DofSign() + constraint.RotationZ.DofSign();

            if (constraint.IsNumericallyDependent())
            {
                desc += $"- {constraint.TranslationalStiffnessX:G3}, {constraint.TranslationalStiffnessY:G3}, {constraint.TranslationalStiffnessZ:G3}, " +
                        $"{constraint.RotationalStiffnessX:G3}, {constraint.RotationalStiffnessY:G3}, {constraint.RotationalStiffnessZ:G3}";
            }
            return(desc);
        }
예제 #13
0
        public static BarRelease BarReleasePinPin(string name = "PinPin")
        {
            Constraint6DOF endRelease = PinConstraint6DOF();

            endRelease.RotationX = DOFType.Fixed;

            return(new BarRelease
            {
                StartRelease = PinConstraint6DOF(),
                EndRelease = endRelease,
                Name = name
            });
        }
예제 #14
0
        public static BarRelease BarReleasePinSlip(string name = "PinSlip")
        {
            Constraint6DOF startRelease = PinConstraint6DOF();

            startRelease.RotationX = DOFType.Fixed;

            return(new BarRelease
            {
                StartRelease = startRelease,
                EndRelease = Constraint6DOF(false, true, true, false, false, false, "Slip"),
                Name = name
            });
        }
예제 #15
0
        /***************************************************/

        private static Constraint6DOF SetConstraint(List <DOFType> releaseType)
        {
            Constraint6DOF constraint = new Constraint6DOF
            {
                TranslationX = releaseType[0],
                TranslationY = releaseType[1],
                TranslationZ = releaseType[2],
                RotationX    = releaseType[3],
                RotationY    = releaseType[4],
                RotationZ    = releaseType[5]
            };

            return(constraint);
        }
예제 #16
0
        /***************************************************/
        /**** Private Methods                           ****/
        /***************************************************/

        private List <Constraint6DOF> Read6DOFConstraints(List <string> ids = null)
        {
            object[] lusasSupports = d_LusasData.getAttributes("Support");
            List <Constraint6DOF> constraints6DOF = new List <Constraint6DOF>();

            for (int i = 0; i < lusasSupports.Count(); i++)
            {
                IFSupportStructural lusasSupport   = (IFSupportStructural)lusasSupports[i];
                Constraint6DOF      constraint6DOF = Adapters.Lusas.Convert.ToConstraint6DOF(lusasSupport);
                if (constraint6DOF != null)
                {
                    constraints6DOF.Add(constraint6DOF);
                }
            }

            return(constraints6DOF);
        }
예제 #17
0
        /***************************************************/
        /**** Public Methods                            ****/
        /***************************************************/

        public static void ToCSI(this Constraint6DOF support, ref bool[] restraint, ref double[] spring)
        {
            restraint    = new bool[6];
            restraint[0] = support.TranslationX == DOFType.Fixed;
            restraint[1] = support.TranslationY == DOFType.Fixed;
            restraint[2] = support.TranslationZ == DOFType.Fixed;
            restraint[3] = support.RotationX == DOFType.Fixed;
            restraint[4] = support.RotationY == DOFType.Fixed;
            restraint[5] = support.RotationZ == DOFType.Fixed;

            spring    = new double[6];
            spring[0] = support.TranslationalStiffnessX;
            spring[1] = support.TranslationalStiffnessY;
            spring[2] = support.TranslationalStiffnessZ;
            spring[3] = support.RotationalStiffnessX;
            spring[4] = support.RotationalStiffnessY;
            spring[5] = support.RotationalStiffnessZ;
        }
예제 #18
0
        /***************************************************/

        private static BarRelease GetBarRelease(IFMeshLine lusasLineMesh)
        {
            object[]       startReleases    = lusasLineMesh.getValue("start");
            object[]       endReleases      = lusasLineMesh.getValue("end");
            List <DOFType> startReleaseType = GetConstraints(startReleases);
            List <DOFType> endReleaseType   = GetConstraints(endReleases);

            Constraint6DOF startConstraint = SetConstraint(startReleaseType);
            Constraint6DOF endConstraint   = SetConstraint(endReleaseType);

            BarRelease barRelease = new BarRelease
            {
                StartRelease = startConstraint,
                EndRelease   = endConstraint
            };

            return(barRelease);
        }
예제 #19
0
        /***************************************************/
        /**** Private methods                           ****/
        /***************************************************/

        //The List<string> in the methods below can be changed to a list of any type of identification more suitable for the toolkit
        //If no ids are provided, the convention is to return all elements of the type

        private List <Node> ReadNodes(List <string> ids = null)
        {
            int         err       = 0;
            int         nodeCount = 0;
            List <Node> nodes     = new List <Node>();

            double[] XYZ = new double[3];

            err = St7.St7GetTotal(1, St7.tyNODE, ref nodeCount);
            if (!St7Error(err))
            {
                return(nodes);
            }
            for (int nn = 0; nn < nodeCount; nn++)
            {
                int nodeId = nn + 1;
                // getting node coordinates
                err = St7.St7GetNodeXYZ(1, nodeId, XYZ);
                if (!St7ErrorCustom(err, "Could not get a position of node: " + nodeId.ToString()))
                {
                    continue;
                }
                // getting node restraints
                // !!! LOCAL RESTRAINTS ARE NOT IMPLEMENTED !!!! read UCS and write it to Orientation property in Node
                int         ucsId          = 1;
                int[]       restraints     = new int[6];
                double[]    enforcedDispls = new double[6];
                List <bool> bhFixed        = new List <bool>();
                err     = St7.St7GetNodeRestraint6(1, nodeId, 1, ref ucsId, restraints, enforcedDispls);
                bhFixed = restraints.Select(rst => rst == St7.btTrue).ToList();
                double[] translationStiff = new double[3];
                err = St7.St7GetNodeKTranslation3F(1, nodeId, 1, ref ucsId, translationStiff);
                double[] rotationStiff = new double[3];
                err = St7.St7GetNodeKRotation3F(1, nodeId, 1, ref ucsId, rotationStiff);
                List <double> stiffnessVals = new List <double>();
                stiffnessVals.AddRange(translationStiff);
                stiffnessVals.AddRange(rotationStiff);
                Constraint6DOF bhRestraint = BH.Engine.Structure.Create.Constraint6DOF("", bhFixed, stiffnessVals);
                Node           bhNode      = BH.Engine.Structure.Create.Node(BH.Engine.Geometry.Create.Point(XYZ[0], XYZ[1], XYZ[2]), "", bhRestraint);
                SetAdapterId(bhNode, nodeId);
                nodes.Add(bhNode);
            }
            return(nodes);
        }
예제 #20
0
        /***************************************************/
        /**** Public Methods                            ****/
        /***************************************************/

        public static Constraint6DOF ToConstraint6DOF(this IFSupportStructural lusasAttribute)
        {
            List <string> releaseNames = new List <string> {
                "U", "V", "W", "THX", "THY", "THZ"
            };

            List <bool>   fixity    = new List <bool>();
            List <double> stiffness = new List <double>();

            foreach (string releaseName in releaseNames)
            {
                string fixityValue = lusasAttribute.getValue(releaseName);

                if (fixityValue == "F")
                {
                    fixity.Add(false);
                    stiffness.Add(0.0);
                }
                else if (fixityValue == "R")
                {
                    fixity.Add(true);
                    stiffness.Add(0.0);
                }
                else if (fixityValue == "S")
                {
                    fixity.Add(false);
                    double stiffnessValue = lusasAttribute.getValue(releaseName + "stiff");
                    stiffness.Add(stiffnessValue);
                }
            }

            string attributeName = GetName(lusasAttribute);

            Constraint6DOF constraint6DOF = BH.Engine.Structure.Create.Constraint6DOF(
                attributeName, fixity, stiffness);

            int adapterNameId = lusasAttribute.getID();

            constraint6DOF.SetAdapterId(typeof(LusasId), adapterNameId);

            return(constraint6DOF);
        }
예제 #21
0
        /***************************************************/
        /**** Public Methods                            ****/
        /***************************************************/

        public static void GetSAPConstraint(this Node node, ref bool[] restraint, ref double[] spring)
        {
            Constraint6DOF bhConstraint = node.Support;

            restraint    = new bool[6];
            restraint[0] = bhConstraint.TranslationX == DOFType.Fixed;
            restraint[1] = bhConstraint.TranslationY == DOFType.Fixed;
            restraint[2] = bhConstraint.TranslationZ == DOFType.Fixed;
            restraint[3] = bhConstraint.RotationX == DOFType.Fixed;
            restraint[4] = bhConstraint.RotationY == DOFType.Fixed;
            restraint[5] = bhConstraint.RotationZ == DOFType.Fixed;

            spring    = new double[6];
            spring[0] = bhConstraint.TranslationalStiffnessX;
            spring[1] = bhConstraint.TranslationalStiffnessY;
            spring[2] = bhConstraint.TranslationalStiffnessZ;
            spring[3] = bhConstraint.RotationalStiffnessX;
            spring[4] = bhConstraint.RotationalStiffnessY;
            spring[5] = bhConstraint.RotationalStiffnessZ;
        }
예제 #22
0
        public static Constraint6DOF GetConstraint6DOF(bool[] restraint, double[] springs)
        {
            Constraint6DOF bhConstraint = new Constraint6DOF();

            bhConstraint.TranslationX = restraint[0] == true ? DOFType.Fixed : DOFType.Free;
            bhConstraint.TranslationY = restraint[1] == true ? DOFType.Fixed : DOFType.Free;
            bhConstraint.TranslationZ = restraint[2] == true ? DOFType.Fixed : DOFType.Free;
            bhConstraint.RotationX    = restraint[3] == true ? DOFType.Fixed : DOFType.Free;
            bhConstraint.RotationY    = restraint[4] == true ? DOFType.Fixed : DOFType.Free;
            bhConstraint.RotationZ    = restraint[5] == true ? DOFType.Fixed : DOFType.Free;

            bhConstraint.TranslationalStiffnessX = springs[0];
            bhConstraint.TranslationalStiffnessY = springs[1];
            bhConstraint.TranslationalStiffnessZ = springs[2];
            bhConstraint.RotationalStiffnessX    = springs[3];
            bhConstraint.RotationalStiffnessY    = springs[4];
            bhConstraint.RotationalStiffnessZ    = springs[5];

            return(bhConstraint);
        }
예제 #23
0
        /***************************************************/

        public static BarRelease GetBarRelease(bool[] startRelease, double[] startSpring, bool[] endRelease, double[] endSpring)
        {
            Constraint6DOF bhStartRelease = new Constraint6DOF();

            bhStartRelease.TranslationX = GetDofType(startRelease, startSpring, 0);
            bhStartRelease.TranslationY = GetDofType(startRelease, startSpring, 2);
            bhStartRelease.TranslationZ = GetDofType(startRelease, startSpring, 1);
            bhStartRelease.RotationX    = GetDofType(startRelease, startSpring, 3);
            bhStartRelease.RotationY    = GetDofType(startRelease, startSpring, 5);
            bhStartRelease.RotationZ    = GetDofType(startRelease, startSpring, 4);

            bhStartRelease.TranslationalStiffnessX = startSpring[0];
            bhStartRelease.TranslationalStiffnessY = startSpring[2];
            bhStartRelease.TranslationalStiffnessZ = startSpring[1];
            bhStartRelease.RotationalStiffnessX    = startSpring[3];
            bhStartRelease.RotationalStiffnessY    = startSpring[5];
            bhStartRelease.RotationalStiffnessZ    = startSpring[4];

            Constraint6DOF bhEndRelease = new Constraint6DOF();

            bhEndRelease.TranslationX = GetDofType(endRelease, endSpring, 0);
            bhEndRelease.TranslationY = GetDofType(endRelease, endSpring, 2);
            bhEndRelease.TranslationZ = GetDofType(endRelease, endSpring, 1);
            bhEndRelease.RotationX    = GetDofType(endRelease, endSpring, 3);
            bhEndRelease.RotationY    = GetDofType(endRelease, endSpring, 5);
            bhEndRelease.RotationZ    = GetDofType(endRelease, endSpring, 4);

            bhEndRelease.TranslationalStiffnessX = endSpring[0];
            bhEndRelease.TranslationalStiffnessY = endSpring[2];
            bhEndRelease.TranslationalStiffnessZ = endSpring[1];
            bhEndRelease.RotationalStiffnessX    = endSpring[3];
            bhEndRelease.RotationalStiffnessY    = endSpring[5];
            bhEndRelease.RotationalStiffnessZ    = endSpring[4];

            BarRelease barRelease = new BarRelease()
            {
                StartRelease = bhStartRelease, EndRelease = bhEndRelease
            };

            return(barRelease);
        }
예제 #24
0
        /***************************************************/
        /**** Public Methods                            ****/
        /***************************************************/

        public static rf.NodalSupport ToRFEM(this Constraint6DOF constraint, int constraintId, int nodeId)
        {
            rf.NodalSupport rfConstraint = new rf.NodalSupport();
            rfConstraint.No       = constraintId;
            rfConstraint.NodeList = nodeId.ToString();//<-- id reference to node(s) required for writing constraint to RFEM

            //Translation - RFEM unit is N/m
            if (constraint.TranslationX == DOFType.Free)
            {
                rfConstraint.SupportConstantX = 0;
            }
            else if (constraint.TranslationX == DOFType.Fixed)
            {
                rfConstraint.SupportConstantX = -1;
            }
            else
            {
                rfConstraint.SupportConstantX = constraint.TranslationalStiffnessX;
            }

            if (constraint.TranslationY == DOFType.Free)
            {
                rfConstraint.SupportConstantY = 0;
            }
            else if (constraint.TranslationY == DOFType.Fixed)
            {
                rfConstraint.SupportConstantY = -1;
            }
            else
            {
                rfConstraint.SupportConstantY = constraint.TranslationalStiffnessY;
            }

            if (constraint.TranslationZ == DOFType.Free)
            {
                rfConstraint.SupportConstantZ = 0;
            }
            else if (constraint.TranslationZ == DOFType.Fixed)
            {
                rfConstraint.SupportConstantZ = -1;
            }
            else
            {
                rfConstraint.SupportConstantZ = constraint.TranslationalStiffnessZ;
            }

            //Rotation - RFEM unit is Nm/Rad
            if (constraint.RotationX == DOFType.Free)
            {
                rfConstraint.RestraintConstantX = 0;
            }
            else if (constraint.RotationX == DOFType.Fixed)
            {
                rfConstraint.RestraintConstantX = -1;
            }
            else
            {
                rfConstraint.RestraintConstantX = constraint.RotationalStiffnessX;
            }

            if (constraint.RotationY == DOFType.Free)
            {
                rfConstraint.RestraintConstantY = 0;
            }
            else if (constraint.RotationY == DOFType.Fixed)
            {
                rfConstraint.RestraintConstantY = -1;
            }
            else
            {
                rfConstraint.RestraintConstantY = constraint.RotationalStiffnessY;
            }

            if (constraint.RotationZ == DOFType.Free)
            {
                rfConstraint.RestraintConstantZ = 0;
            }
            else if (constraint.RotationZ == DOFType.Fixed)
            {
                rfConstraint.RestraintConstantZ = -1;
            }
            else
            {
                rfConstraint.RestraintConstantZ = constraint.RotationalStiffnessZ;
            }


            return(rfConstraint);
        }
예제 #25
0
        /***************************************************/
        /**** Public Methods                            ****/
        /***************************************************/

        //Add methods for converting to BHoM from the specific software types.
        //Only do this if possible to do without any com-calls or similar to the adapter
        public static Constraint6DOF FromRFEM(this rf.NodalSupport rfConstraint)
        {
            Constraint6DOF bhConstraint = new Constraint6DOF();

            //Translation
            if (rfConstraint.SupportConstantX == 0)
            {
                bhConstraint.TranslationX = DOFType.Free;
            }
            if (rfConstraint.SupportConstantX == -1)
            {
                bhConstraint.TranslationX = DOFType.Fixed;
            }
            else
            {
                bhConstraint.TranslationalStiffnessX = rfConstraint.SupportConstantX;
            }

            if (rfConstraint.SupportConstantY == 0)
            {
                bhConstraint.TranslationY = DOFType.Free;
            }
            if (rfConstraint.SupportConstantY == -1)
            {
                bhConstraint.TranslationY = DOFType.Fixed;
            }
            else
            {
                bhConstraint.TranslationalStiffnessY = rfConstraint.SupportConstantY;
            }

            if (rfConstraint.SupportConstantZ == 0)
            {
                bhConstraint.TranslationZ = DOFType.Free;
            }
            if (rfConstraint.SupportConstantZ == -1)
            {
                bhConstraint.TranslationZ = DOFType.Fixed;
            }
            else
            {
                bhConstraint.TranslationalStiffnessZ = rfConstraint.SupportConstantZ;
            }

            //Rotation
            if (rfConstraint.RestraintConstantX == 0)
            {
                bhConstraint.RotationX = DOFType.Free;
            }
            if (rfConstraint.RestraintConstantX == -1)
            {
                bhConstraint.RotationX = DOFType.Fixed;
            }
            else
            {
                bhConstraint.RotationalStiffnessX = rfConstraint.RestraintConstantX;
            }

            if (rfConstraint.RestraintConstantY == 0)
            {
                bhConstraint.RotationY = DOFType.Free;
            }
            if (rfConstraint.RestraintConstantY == -1)
            {
                bhConstraint.RotationY = DOFType.Fixed;
            }
            else
            {
                bhConstraint.RotationalStiffnessY = rfConstraint.RestraintConstantY;
            }

            if (rfConstraint.RestraintConstantZ == 0)
            {
                bhConstraint.RotationZ = DOFType.Free;
            }
            if (rfConstraint.RestraintConstantZ == -1)
            {
                bhConstraint.RotationZ = DOFType.Fixed;
            }
            else
            {
                bhConstraint.RotationalStiffnessZ = rfConstraint.RestraintConstantZ;
            }

            bhConstraint.SetAdapterId(typeof(RFEMId), rfConstraint.No);
            return(bhConstraint);
        }
예제 #26
0
 public static BarRelease BarRelease(Constraint6DOF startConstraint, Constraint6DOF endConstraint, string name = "")
 {
     return(new BarRelease {
         StartRelease = startConstraint, EndRelease = endConstraint, Name = name
     });
 }
예제 #27
0
        public static Node Node(Cartesian coordinates, int freedomeCase, string name = "", Constraint6DOF support = null)
        {
            Node nd = new Node();

            nd.Position              = coordinates.Origin;
            nd.Orientation           = (Basis)coordinates;
            nd.Name                  = name;
            nd.CustomData["Freedom"] = freedomeCase;
            nd.Support               = support;
            return(nd);
        }
예제 #28
0
파일: Node.cs 프로젝트: BHoM/BHoM_Engine
 public static Node Node(Point position, string name = "", Constraint6DOF support = null)
 {
     return(Node((Cartesian)position, name, support));
 }
예제 #29
0
파일: Bar.cs 프로젝트: BHoM/Strand7_Toolkit
        /***************************************************/
        /**** Private methods                           ****/
        /***************************************************/
        private List <Bar> ReadBars(List <string> ids = null)
        {
            int        err   = 0;
            List <Bar> beams = new List <Bar>();
            Dictionary <int, ISectionProperty> allBeamProperties = ReadSectionProperties().ToDictionary(x => GetAdapterId <int>(x));
            Dictionary <int, Node>             allNodes          = ReadNodes().ToDictionary(x => GetAdapterId <int>(x));
            int beamCount = 0;

            err = St7.St7GetTotal(1, St7.tyBEAM, ref beamCount);
            if (!St7ErrorCustom(err, "Could not get total number of beams."))
            {
                return(beams);
            }
            for (int bm = 0; bm < beamCount; bm++)
            {
                // Getting nodes for a beam
                int   beamId  = bm + 1;
                int[] bmNodes = new int[St7.kMaxElementNode + 1];
                err = St7.St7GetElementConnection(1, St7.tyBEAM, beamId, bmNodes);
                if (!St7ErrorCustom(err, "Could not get nodes for a beam " + beamId.ToString()))
                {
                    continue;
                }
                if (bmNodes[0] != 2)    // checking number of nodes bmNodes[0]
                {
                    BH.Engine.Base.Compute.RecordError("Number of nodes doesn't equal 2 for beam N: " + beamId.ToString());
                    return(beams);
                }
                Node nd1 = allNodes[bmNodes[1]];
                Node nd2 = allNodes[bmNodes[2]];

                // getting a property for a beam
                int beamPropNum = 0;
                err = St7.St7GetElementProperty(1, St7.ptBEAMPROP, beamId, ref beamPropNum);
                if (!St7ErrorCustom(err, "Could not get property for a beam " + beamId.ToString()))
                {
                    continue;
                }
                ISectionProperty prop = allBeamProperties.ContainsKey(beamPropNum)? allBeamProperties[beamPropNum] : null;
                //// getting an orientation vector
                //double[] beamAxes = new double[9];
                //err = St7.St7GetBeamAxisSystem(1, beamId, St7.btTrue, beamAxes);
                //if (!St7ErrorCustom(err, "Could not get local axes for a beam " + beamId.ToString())) continue;
                //Vector i2 = BH.Engine.Geometry.Create.Vector(beamAxes[3], beamAxes[4], beamAxes[5]); // normal vector
                //Vector i3 = BH.Engine.Geometry.Create.Vector(beamAxes[6], beamAxes[7], beamAxes[8]); // vector along the beam
                //Vector reference = Vector.ZAxis;
                //if (Abs(1 - Query.DotProduct(i3, Vector.ZAxis)) < 0.001) reference = i3.CrossProduct(Vector.YAxis); // if beam is vertical use X or -X axis as reference
                //double orientationAngle = reference.Angle(i2, new Plane { Normal = i3 });
                double[] orientationAngle = new double[1];
                err = St7.St7GetBeamReferenceAngle1(1, beamId, orientationAngle);
                int[]    restrTranslationStart = new int[3];
                int[]    restrTranslationEnd   = new int[3];
                int[]    restrRotationStart    = new int[3];
                int[]    restrRotationEnd      = new int[3];
                double[] stiffTranslationStart = new double[3];
                double[] stiffTranslationEnd   = new double[3];
                double[] stiffRotationStart    = new double[3];
                double[] stiffRotationEnd      = new double[3];
                // getting beam releases
                err = St7.St7GetBeamTRelease3(1, beamId, 1, restrTranslationStart, stiffTranslationStart);
                if (err != St7.ERR7_NoError)
                {
                    restrTranslationStart = new int[] { 1, 1, 1 }
                }
                ;                                                                           // fixed if not set
                err = St7.St7GetBeamRRelease3(1, beamId, 1, restrRotationStart, stiffRotationStart);
                if (err != St7.ERR7_NoError)
                {
                    restrRotationStart = new int[] { 1, 1, 1 }
                }
                ;                                                                        // fixed if not set
                List <bool>   beamStartRestraint = restrTranslationStart.Concat(restrRotationStart).Select(rst => rst == St7.brFixed).ToList();
                List <double> stiffnessValsStart = stiffTranslationStart.Concat(stiffRotationStart).ToList();
                err = St7.St7GetBeamTRelease3(1, beamId, 2, restrTranslationEnd, stiffTranslationEnd);
                if (err != St7.ERR7_NoError)
                {
                    restrTranslationEnd = new int[] { 1, 1, 1 }
                }
                ;                                                                         // fixed if not set
                err = St7.St7GetBeamRRelease3(1, beamId, 2, restrRotationEnd, stiffRotationEnd);
                if (err != St7.ERR7_NoError)
                {
                    restrRotationEnd = new int[] { 1, 1, 1 }
                }
                ;                                                                      // fixed if not set
                List <bool>    beamEndRestraint = restrTranslationEnd.Concat(restrRotationEnd).Select(rst => rst == St7.brFixed).ToList();
                List <double>  stiffnessValsEnd = stiffTranslationEnd.Concat(stiffRotationEnd).ToList();
                Constraint6DOF startRelease     = BH.Engine.Structure.Create.Constraint6DOF("", beamStartRestraint, stiffnessValsStart);
                Constraint6DOF endRelease       = BH.Engine.Structure.Create.Constraint6DOF("", beamEndRestraint, stiffnessValsEnd);
                BarRelease     barRelease       = BH.Engine.Structure.Create.BarRelease(startRelease, endRelease);
                Bar            bar = BH.Engine.Structure.Create.Bar(nd1, nd2, prop, orientationAngle[0] * System.Math.PI / 180, barRelease);
                SetAdapterId(bar, beamId);
                beams.Add(bar);
            }

            return(beams);
        }

        /***************************************************/
    }
}
예제 #30
0
        public static bool IsNumericallyDependent(this Constraint6DOF constraint)
        {
            if (constraint.IsNull())
            {
                return(false);
            }

            if (constraint.TranslationX.IsNumericallyDependent())
            {
                return(true);
            }

            if (constraint.TranslationY.IsNumericallyDependent())
            {
                return(true);
            }

            if (constraint.TranslationZ.IsNumericallyDependent())
            {
                return(true);
            }

            if (constraint.RotationX.IsNumericallyDependent())
            {
                return(true);
            }

            if (constraint.RotationY.IsNumericallyDependent())
            {
                return(true);
            }

            if (constraint.RotationZ.IsNumericallyDependent())
            {
                return(true);
            }

            if (constraint.TranslationalStiffnessX != 0)
            {
                return(true);
            }

            if (constraint.TranslationalStiffnessY != 0)
            {
                return(true);
            }

            if (constraint.TranslationalStiffnessZ != 0)
            {
                return(true);
            }

            if (constraint.RotationalStiffnessX != 0)
            {
                return(true);
            }

            if (constraint.RotationalStiffnessY != 0)
            {
                return(true);
            }

            if (constraint.RotationalStiffnessZ != 0)
            {
                return(true);
            }

            return(false);
        }