Beispiel #1
0
        /***************************************************/

        private IEnumerable <IResult> ExtractMeshForce(List <int> ids, List <int> loadcaseIds)
        {
            List <MeshForce> meshForces = new List <MeshForce>();

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

            string entity   = "Force/Moment - Thick Shell";
            string location = "Feature extreme";

            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>()
                {
                    "NX", "NY", "NXY", "MX", "MY", "MXY", "SX", "SY"
                };
                d_LusasData.startUsingScriptedResults();

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

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

                    double nX = 0; double nY = 0; double nXY = 0; double mX = 0; double mY = 0; double mXY = 0; double sX = 0; double sY = 0;
                    featureResults.TryGetValue("NX", out nX); featureResults.TryGetValue("NY", out nY); featureResults.TryGetValue("NXY", out nXY);
                    featureResults.TryGetValue("MX", out mX); featureResults.TryGetValue("MY", out mY); featureResults.TryGetValue("MXY", out mXY);
                    featureResults.TryGetValue("SX", out sX); featureResults.TryGetValue("SY", out sY);
                    int       mode      = -1;
                    MeshForce meshForce = new MeshForce(
                        meshId, 0, 0, loadcaseId, mode, 0, MeshResultLayer.Middle, 0.5, MeshResultSmoothingType.ByPanel, null,
                        nX * forceSIConversion,
                        nY * forceSIConversion,
                        nXY * forceSIConversion,
                        mX * forceSIConversion,
                        mY * forceSIConversion,
                        mXY * forceSIConversion,
                        sX * forceSIConversion,
                        sY * forceSIConversion);

                    meshForces.Add(meshForce);
                }

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

            return(meshForces);
        }
Beispiel #2
0
    public void AddMeshForce(Vector3 pos, float radius)
    {
        GameObject go        = GameObject.CreatePrimitive(PrimitiveType.Sphere);
        MeshForce  meshforce = go.AddComponent <MeshForce> ();

        go.transform.SetParent(transform);
        go.transform.localPosition = pos;
        go.transform.localRotation = Quaternion.identity;
        go.transform.localScale    = Vector3.one;
        meshforce.SetRadius(radius);
        meshforces.Add(meshforce);
    }
    public void AddMeshForce(Vector3 pos, float radius)
    {
        Debug.Log("AddMeshForce " + radius);
        GameObject go        = Instantiate(MeshForcePrefab);
        MeshForce  meshforce = go.GetComponent <MeshForce> ();

        go.transform.SetParent(transform);
        go.transform.localPosition = pos;
        go.transform.localRotation = Quaternion.identity;
        go.transform.localScale    = new Vector3(radius * 2, radius * 2, radius * 2);
        meshforce.SetRadius(radius);
        meshforces.Add(meshforce);
    }
Beispiel #4
0
    public MeshForce AddMeshForce(Vector3 pos, float radius)
    {
        GameObject go        = GameObject.Instantiate(MeshForcePrefab);
        MeshForce  meshforce = go.GetComponent <MeshForce> ();

        go.transform.SetParent(transform);
        go.transform.localPosition = pos;
        go.transform.localRotation = Quaternion.identity;
        go.transform.localScale    = Vector3.one;
        meshforce.SetRadius(radius);
        meshforces.Add(meshforce);
        return(meshforce);
    }
Beispiel #5
0
        /***************************************************/

        private List <MeshForce> SmoothenForces(List <MeshForce> forces)
        {
            List <MeshForce> smoothenedForces = new List <MeshForce>();

            foreach (IEnumerable <MeshForce> group in forces.GroupBy(x => new { x.ResultCase, x.TimeStep, x.NodeId }))
            {
                MeshForce first = group.First();

                double nxx = group.Average(x => x.NXX);
                double nyy = group.Average(x => x.NYY);
                double nxy = group.Average(x => x.NXY);

                double mxx = group.Average(x => x.MXX);
                double myy = group.Average(x => x.MYY);
                double mxy = group.Average(x => x.MXY);

                double vx = group.Average(x => x.VX);
                double vy = group.Average(x => x.VY);

                smoothenedForces.Add(new MeshForce(first.ObjectId, first.NodeId, "", first.ResultCase, first.ModeNumber, first.TimeStep, first.MeshResultLayer, first.LayerPosition, MeshResultSmoothingType.ByPanel, first.Orientation, nxx, nyy, nxy, mxx, myy, mxy, vx, vy));
            }

            return(smoothenedForces);
        }
        public static List<MeshForce> GetMeshForce(cSapModel model, IList ids = null, IList cases = null, int divisions = 5)
        {
            List<string> loadcaseIds = new List<string>();
            List<string> panelIds = new List<string>();
            List<MeshForce> meshForces = new List<MeshForce>();

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

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

            string Name = "";
            eItemTypeElm ItemTypeElm = eItemTypeElm.ObjectElm;
            int resultCount = 0;
            string[] Obj = null;
            string[] Elm = null;
            string[] PointElm = null;
            string[] LoadCase = null;
            string[] StepType = null;
            double[] StepNum = null;
            double[] F11 = null;
            double[] F22 = null;
            double[] F12 = null;
            double[] FMax = null;
            double[] FMin = null;
            double[] FAngle = null;
            double[] FVM = null;
            double[] M11 = null;
            double[] M22 = null;
            double[] M12 = null;
            double[] MMax = null;
            double[] MMin = null;
            double[] MAngle = null;
            double[] V13 = null;
            double[] V23 = null;
            double[] VMax = null;
            double[] VAngle = null;

            for (int i = 0; i < panelIds.Count; i++)
            {

                int ret = model.Results.AreaForceShell(panelIds[i], eItemTypeElm.ObjectElm, ref resultCount, ref Obj, ref Elm,
                    ref PointElm, ref LoadCase, ref StepType, ref StepNum, ref F11, ref F22, ref F12, ref FMax, ref FMin, ref FAngle, ref FVM,
                    ref M11, ref M22, ref M12, ref MMax, ref MMin, ref MAngle, ref V13, ref V23, ref VMax, ref VAngle);

                for (int j = 0; j < resultCount; j++)
                {
                    MeshForce pf = new MeshForce(panelIds[i], PointElm[j], "", LoadCase[j], StepNum[j], 0, 0, 0,
                        oM.Geometry.Basis.XY, F11[j], F22[j], F12[j], M12[j], M22[j], M12[j], V13[j], V23[j]);

                    meshForces.Add(pf);
                }
            }

            return meshForces;
        }
Beispiel #7
0
        /***************************************************/
        /**** Private method - Extraction methods       ****/
        /***************************************************/


        private List <MeshResult> ReadMeshForce(List <string> panelIds, MeshResultSmoothingType smoothing)
        {
            switch (smoothing)
            {
            case MeshResultSmoothingType.BySelection:
            case MeshResultSmoothingType.Global:
            case MeshResultSmoothingType.ByFiniteElementCentres:
                Engine.Base.Compute.RecordWarning("Smoothing type not supported for MeshForce. No results extracted");
                return(new List <MeshResult>());
            }

            eItemTypeElm itemTypeElm = eItemTypeElm.ObjectElm;
            int          resultCount = 0;

            string[] obj      = null;
            string[] elm      = null;
            string[] pointElm = null;
            string[] loadCase = null;
            string[] stepType = null;
            double[] stepNum  = null;
            double[] f11      = null;
            double[] f22      = null;
            double[] f12      = null;
            double[] fMax     = null;
            double[] fMin     = null;
            double[] fAngle   = null;
            double[] fvm      = null;
            double[] m11      = null;
            double[] m22      = null;
            double[] m12      = null;
            double[] mMax     = null;
            double[] mMin     = null;
            double[] mAngle   = null;
            double[] v13      = null;
            double[] v23      = null;
            double[] vMax     = null;
            double[] vAngle   = null;

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

            if (smoothing == MeshResultSmoothingType.ByPanel)
            {
                Engine.Base.Compute.RecordWarning("Force values have been smoothed outside the API by averaging all force values in each node");
            }

            for (int i = 0; i < panelIds.Count; i++)
            {
                List <MeshForce> forces = new List <MeshForce>();

                int ret = m_model.Results.AreaForceShell(panelIds[i], itemTypeElm, ref resultCount, ref obj, ref elm,
                                                         ref pointElm, ref loadCase, ref stepType, ref stepNum, ref f11, ref f22, ref f12, ref fMax, ref fMin, ref fAngle, ref fvm,
                                                         ref m11, ref m22, ref m12, ref mMax, ref mMin, ref mAngle, ref v13, ref v23, ref vMax, ref vAngle);

                for (int j = 0; j < resultCount; j++)
                {
                    int    mode;
                    double timeStep;


                    if (stepType[j] == "Single Value" || stepNum.Length < j)
                    {
                        mode     = 0;
                        timeStep = 0;
                    }
                    else
                    {
                        GetStepAndMode(stepType[j], stepNum[j], out timeStep, out mode);
                    }

                    MeshForce pf = new MeshForce(panelIds[i], pointElm[j], elm[j], loadCase[j], mode, timeStep, 0, 0, 0,
                                                 oM.Geometry.Basis.XY, f11[j], f22[j], f12[j], m11[j], m22[j], m12[j], v13[j], v23[j]);

                    forces.Add(pf);
                }

                if (smoothing == MeshResultSmoothingType.ByPanel)
                {
                    forces = SmoothenForces(forces);
                }

                results.AddRange(GroupMeshResults(forces));
            }

            return(results);
        }