コード例 #1
0
        /***************************************************/
        /**** Private methods                           ****/
        /***************************************************/

        private List <NodeReaction> ReadNodeReaction(List <string> ids = null)
        {
            //Implement code for reading Node Reactions
            List <NodeReaction> bhomNodeReactions = new List <NodeReaction>();

            IModel ramModel = m_Application.GetDispInterfacePointerByEnum(EINTERFACES.IModel_INT);

            ILoadCases ramLoadCases = ramModel.GetLoadCases(EAnalysisResultType.RAMFrameResultType);
            //Get IWalls
            List <IWall> allRamWalls = ReadRamWalls(ramModel);

            // Adding node reactions per wall per loadcase, this is node reactions at btm of wall
            foreach (IWall wall in allRamWalls)
            {
                for (int i = 0; i < ramLoadCases.GetCount(); i++)
                {
                    //Get Loadcases
                    ILoadCase   ramLoadCase    = ramLoadCases.GetAt(i);
                    IPointLoads wallNodeForces = wall.GetNodeForcesAtEdge(EAnalysisResultType.RAMGravityResultType, ramLoadCase.lUID, EEdge.eBottomEdge);
                    for (int j = 0; j < wallNodeForces.GetCount(); j++)
                    {
                        //Get Node Forces
                        IPointLoad   wallNodeForce    = wallNodeForces.GetAt(j);
                        NodeReaction bhomNodeReaction = wallNodeForce.ToBHoMObject(ramLoadCase);
                        bhomNodeReactions.Add(bhomNodeReaction);
                    }
                }
            }

            return(bhomNodeReactions);
        }
コード例 #2
0
ファイル: ToBHoM.cs プロジェクト: BHoM/RAM_Toolkit
        /***************************************************/

        public static NodeReaction ToBHoMObject(this IPointLoad ramPointLoad, ILoadCase ramLoadCase)
        {
            SCoordinate ramPoint;

            ramPointLoad.GetCoordinate(out ramPoint);
            Point  bhomPoint  = ramPoint.PointFromRAM();
            string ramPointID = bhomPoint.X.ToString() + ", " + bhomPoint.Y.ToString() + ", " + bhomPoint.Z.ToString() + ", "; // no object id option for RAM nodes, id by coordinates instead

            //TODO: resolve below identifiers extractable through the API
            int    mode     = -1;
            double timeStep = 0;

            NodeReaction bhomNodeReaction = new NodeReaction(
                ramPointID,
                ramLoadCase.strLoadCaseGroupLabel + ramLoadCase.strTypeLabel,
                mode,
                timeStep,
                Basis.XY,
                ramPointLoad.dFx,
                ramPointLoad.dFy,
                ramPointLoad.dFz,
                ramPointLoad.dMxx,
                ramPointLoad.dMyy,
                ramPointLoad.dMzz
                );

            return(bhomNodeReaction);
        }
コード例 #3
0
        /***************************************************/

        private List <NodeReaction> ReadNodeReaction(List <string> nodeIds)
        {
            List <NodeReaction> nodeReactions = new List <NodeReaction>();

            int resultCount = 0;

            string[] loadcaseNames = null;
            string[] objects       = null;
            string[] elm           = null;
            string[] stepType      = null;
            double[] stepNum       = null;

            double[] fx = null;
            double[] fy = null;
            double[] fz = null;
            double[] mx = null;
            double[] my = null;
            double[] mz = null;

            for (int i = 0; i < nodeIds.Count; i++)
            {
                int ret = m_model.Results.JointReact(nodeIds[i],
                                                     eItemTypeElm.ObjectElm,
                                                     ref resultCount,
                                                     ref objects,
                                                     ref elm,
                                                     ref loadcaseNames,
                                                     ref stepType,
                                                     ref stepNum,
                                                     ref fx,
                                                     ref fy,
                                                     ref fz,
                                                     ref mx,
                                                     ref my,
                                                     ref mz);
                if (ret == 0)
                {
                    for (int j = 0; j < resultCount; j++)
                    {
                        NodeReaction nr = new NodeReaction(nodeIds[i], loadcaseNames[j], -1, stepNum[j], oM.Geometry.Basis.XY, fx[j], fy[j], fz[j], mx[j], my[j], mz[j]);
                        nodeReactions.Add(nr);
                    }
                }
            }

            return(nodeReactions);
        }
コード例 #4
0
ファイル: NodeResults.cs プロジェクト: BHoM/Lusas_Toolkit
        /***************************************************/
        /**** Private  Methods                          ****/
        /***************************************************/

        private IEnumerable <IResult> ExtractNodeReaction(List <int> ids, List <int> loadcaseIds)
        {
            List <NodeReaction> nodeReactions = new List <NodeReaction>();

            IFView           view           = m_LusasApplication.getCurrentView();
            IFResultsContext resultsContext = m_LusasApplication.newResultsContext(view);

            string entity   = "Reaction";
            string location = "Nodal";

            foreach (int loadcaseId in loadcaseIds)
            {
                IFLoadset loadset = d_LusasData.getLoadset(loadcaseId);

                if (!loadset.needsAssociatedValues())
                {
                    resultsContext.setActiveLoadset(loadset);
                }

                IFUnitSet unitSet            = d_LusasData.getModelUnits();
                double    forceSIConversion  = 1 / unitSet.getForceFactor();
                double    lengthSIConversion = 1 / unitSet.getLengthFactor();

                List <string> components = new List <string>()
                {
                    "Fx", "Fy", "Fz", "Mx", "My", "Mz"
                };
                d_LusasData.startUsingScriptedResults();

                Dictionary <string, IFResultsComponentSet> resultsSets = GetResultsSets(entity, components, location, resultsContext);

                foreach (int nodeId in ids)
                {
                    Dictionary <string, double> featureResults = GetFeatureResults(components, resultsSets, unitSet, nodeId, "P", 6);

                    double fX = 0; double fY = 0; double fZ = 0; double mX = 0; double mY = 0; double mZ = 0;
                    featureResults.TryGetValue("Fx", out fX); featureResults.TryGetValue("Fy", out fY); featureResults.TryGetValue("Fz", out fZ);
                    featureResults.TryGetValue("Mx", out mX); featureResults.TryGetValue("My", out mY); featureResults.TryGetValue("Mz", out mZ);

                    List <double> results = new List <double>();

                    //TODO: resolve below identifiers extractable through the API
                    int    mode     = -1;
                    double timeStep = 0;

                    NodeReaction nodeReaction = new NodeReaction(
                        nodeId,
                        Adapters.Lusas.Convert.GetName(loadset.getName()),
                        mode,
                        timeStep,
                        oM.Geometry.Basis.XY,
                        fX * forceSIConversion,
                        fY * forceSIConversion,
                        fZ * forceSIConversion,
                        mX * forceSIConversion * lengthSIConversion,
                        mY * forceSIConversion * lengthSIConversion,
                        mZ * forceSIConversion * lengthSIConversion
                        );

                    nodeReactions.Add(nodeReaction);
                }

                d_LusasData.stopUsingScriptedResults();
                d_LusasData.flushScriptedResults();
            }

            return(nodeReactions);
        }
コード例 #5
0
ファイル: NodeResult.cs プロジェクト: BHoM/Strand7_Toolkit
        private IEnumerable <IResult> GetNodeResults(Type type, IList ids = null, IList cases = null)
        {
            List <NodeResult> results = new List <NodeResult>();
            int resultType            = -1;

            if (type == typeof(NodeAcceleration))
            {
                resultType = St7.rtNodeAcc;
            }
            else if (type == typeof(NodeDisplacement))
            {
                resultType = St7.rtNodeDisp;
            }
            else if (type == typeof(NodeReaction))
            {
                resultType = St7.rtNodeReact;
            }
            else if (type == typeof(NodeVelocity))
            {
                resultType = St7.rtNodeVel;
            }

            List <int> loadcaseIds = new List <int>();
            List <int> nodeIds     = new List <int>();
            int        err;

            // checking node ids
            if (ids == null || ids.Count == 0)
            {
                int nodeCount = 0;
                err = St7.St7GetTotal(1, St7.tyNODE, ref nodeCount);
                if (!St7Error(err))
                {
                    return(null);
                }
                nodeIds = Enumerable.Range(1, nodeCount).ToList();
            }
            else
            {
                nodeIds = ids.Cast <int>().ToList();
            }

            // checking load ids
            if (cases == null)
            {
                BHError("No load cases are provided");
            }
            else
            {
                foreach (object one_case in cases)
                {
                    if (one_case is ICase)
                    {
                        loadcaseIds.Add(GetAdapterId <int>(one_case as ICase));
                    }
                    else if (one_case is int)
                    {
                        loadcaseIds.Add((int)one_case);
                    }
                }
            }
            double[]   nodeResArray = new double[6];
            NodeResult nd;

            foreach (int loadcaseId in loadcaseIds)
            {
                double caseTime = 0;
                err = St7.St7GetResultCaseTime(1, loadcaseId, ref caseTime);
                foreach (int nodeId in nodeIds)
                {
                    err = St7.St7GetNodeResult(1, resultType, nodeId, loadcaseId, nodeResArray);
                    switch (resultType)
                    {
                    case St7.rtNodeAcc:
                        nd = new NodeAcceleration(nodeId, loadcaseId, 1, caseTime, oM.Geometry.Basis.XY, nodeResArray[0], nodeResArray[1], nodeResArray[2], nodeResArray[3], nodeResArray[4], nodeResArray[5]);
                        break;

                    case St7.rtNodeDisp:
                        nd = new NodeDisplacement(nodeId, loadcaseId, 1, caseTime, oM.Geometry.Basis.XY, nodeResArray[0], nodeResArray[1], nodeResArray[2], nodeResArray[3], nodeResArray[4], nodeResArray[5]);
                        break;

                    case St7.rtNodeVel:
                        nd = new NodeVelocity(nodeId, loadcaseId, 1, caseTime, oM.Geometry.Basis.XY, nodeResArray[0], nodeResArray[1], nodeResArray[2], nodeResArray[3], nodeResArray[4], nodeResArray[5]);
                        break;

                    case St7.rtNodeReact:
                        nd = new NodeReaction(nodeId, loadcaseId, 1, caseTime, oM.Geometry.Basis.XY, nodeResArray[0], nodeResArray[1], nodeResArray[2], nodeResArray[3], nodeResArray[4], nodeResArray[5]);
                        break;

                    default:
                        nd = null;
                        BHError("Unknown Result type");
                        break;
                    }
                    results.Add(nd);
                }
            }
            return(results);
        }
コード例 #6
0
ファイル: ToBHoM.cs プロジェクト: BHoM/RAM_Toolkit
        /***************************************************/

        public static NodeReaction ToBHoMObject(this IMemberForce ramForce)
        {
            NodeReaction bhomNodeReaction = new NodeReaction("", "", -1, 0, Basis.XY, ramForce.dAxial, ramForce.dShearMinor, ramForce.dShearMajor, ramForce.dTorsion, ramForce.dMomentMajor, ramForce.dMomentMinor);

            return(bhomNodeReaction);
        }
コード例 #7
0
        public static List<NodeReaction> GetNodeReaction(cSapModel model, IList ids = null, IList cases = null)
        {
            List<string> loadcaseIds = new List<string>();
            List<string> nodeIds = new List<string>();
            List<NodeReaction> nodeReactions = new List<NodeReaction>();

            if (ids == null)
            {
                int nodes = 0;
                string[] names = null;
                model.PointObj.GetNameList(ref nodes, ref names);
                nodeIds = names.ToList();
            }
            else
            {
                for (int i = 0; i < ids.Count; i++)
                {
                    nodeIds.Add(ids[i].ToString());
                }
            }

            //Get out loadcases, get all for null list
            loadcaseIds = CheckAndGetCases(model, cases);

            int resultCount = 0;
            string[] loadcaseNames = null;
            string[] objects = null;
            string[] elm = null;
            string[] stepType = null;
            double[] stepNum = null;

            double[] fx = null;
            double[] fy = null;
            double[] fz = null;
            double[] mx = null;
            double[] my = null;
            double[] mz = null;

            model.Results.Setup.DeselectAllCasesAndCombosForOutput();

            for (int loadcase = 0; loadcase < loadcaseIds.Count; loadcase++)
            {
                if (model.Results.Setup.SetCaseSelectedForOutput(loadcaseIds[loadcase]) != 0)
                {
                    model.Results.Setup.SetComboSelectedForOutput(loadcaseIds[loadcase]);
                }
            }

            //List<NodeReaction<string, string, string>> nodeForces = new List<NodeReaction<string, string, string>>();
            for (int i = 0; i < nodeIds.Count; i++)
            {
                int ret = model.Results.JointReact(nodeIds[i], eItemTypeElm.ObjectElm, ref resultCount, ref objects, ref elm,
                ref loadcaseNames, ref stepType, ref stepNum, ref fx, ref fy, ref fz, ref mx, ref my, ref mz);
                if (ret == 0)
                {
                    for (int j = 0; j < resultCount; j++)
                    {
                        //string step = stepType[j] != null ? stepType[j] == "Max" ? " Max" : stepType[j] == "Min" ? " Min" : "1" : "0";
                        //nodeForces.Add(new NodeReaction<string, string, string>(objects[j], loadcaseNames[j], step, fx[j], fy[j], fz[j], mx[j], my[j], mz[j]));
                        NodeReaction nr = new NodeReaction()
                        {
                            ResultCase = loadcaseNames[j],
                            ObjectId = nodeIds[i],
                            MX = mx[j],
                            MY = my[j],
                            MZ = mz[j],
                            FX = fx[j],
                            FY = fy[j],
                            FZ = fz[j],
                            TimeStep = stepNum[j]
                        };
                        nodeReactions.Add(nr);
                    }
                }
            }

            return nodeReactions;
        }