public float[,] GetCurvedAxis(LineElement l, AbstractCase ac, DeformationAxis component, int numPoints)
        {
            if (!model.HasResults) return null;

            /// controlPoints[i, 0]: x position on Beam, controlPoints[i, 1]: 'deflection' for x position, controlPoints[i,2]: deformation angle
            float[,] controlPoints = new float[numPoints, 3];

            float[] controlPointsX = new float[1]; // requestXCtrlPts(load);
            for (int i = 0, bufi = 0; i < numPoints; i++)
            {
                controlPoints[i, 0] = i / (numPoints - 1f);

                // Adjust control points
                if ((bufi < controlPointsX.Length) && (controlPointsX[bufi] <= controlPoints[i, 0]))
                    controlPoints[i, 0] = controlPointsX[bufi++];

                controlPoints[i, 1] = 0f; // controlPoints[i, 0] * (fdJ - fdI);

                controlPoints[i, 2] = 0.0f;
            }

            getCurvedAxis(l, ac, component, controlPoints);

            return controlPoints;
        }
Exemplo n.º 2
0
        public float[,] GetCurvedAxis(LineElement l, AbstractCase ac, DeformationAxis component, int numPoints)
        {
            if (!model.HasResults)
            {
                return(null);
            }

            /// controlPoints[i, 0]: x position on Beam, controlPoints[i, 1]: 'deflection' for x position, controlPoints[i,2]: deformation angle
            float[,] controlPoints = new float[numPoints, 3];

            float[] controlPointsX = new float[1]; // requestXCtrlPts(load);
            for (int i = 0, bufi = 0; i < numPoints; i++)
            {
                controlPoints[i, 0] = i / (numPoints - 1f);

                // Adjust control points
                if ((bufi < controlPointsX.Length) && (controlPointsX[bufi] <= controlPoints[i, 0]))
                {
                    controlPoints[i, 0] = controlPointsX[bufi++];
                }

                controlPoints[i, 1] = 0f; // controlPoints[i, 0] * (fdJ - fdI);

                controlPoints[i, 2] = 0.0f;
            }

            getCurvedAxis(l, ac, component, controlPoints);

            return(controlPoints);
        }
Exemplo n.º 3
0
        public float[] GetCurvedPoint(LineElement l, AbstractCase ac, DeformationAxis component, float xPos)
        {
            if (!model.HasResults)
            {
                return(null);
            }

            /// controlPoints[i, 0]: x position on Beam, controlPoints[i, 1]: 'deflection' for x position, controlPoints[i,2]: deformation angle
            float[,] controlPoints = new float[1, 3];
            controlPoints[0, 0]    = xPos;
            controlPoints[0, 1]    = 0f;
            controlPoints[0, 2]    = 0.0f;

            getCurvedAxis(l, ac, component, controlPoints);

            // Copy to 1-dimensional array
            float[] ret = new float[3];
            for (int i = 0; i < 3; i++)
            {
                ret[i] = controlPoints[0, i];
            }

            return(ret);
        }
 private void getCurvedAxis(AreaElement area, AbstractCase ac, DeformationAxis component, float[,] controlPoints)
 {
 }
 public float[] GetCurvedPoint(AreaElement area, AbstractCase ac, DeformationAxis component, float xPos)
 {
     return null;
 }
 public float[,] GetCurvedAxis(AreaElement area, AbstractCase ac, DeformationAxis component, int numPoints)
 {
     return null;
 }
Exemplo n.º 7
0
 public float[] GetCurvedPoint(AreaElement area, AbstractCase ac, DeformationAxis component, float xPos)
 {
     return(null);
 }
Exemplo n.º 8
0
 public float[,] GetCurvedAxis(AreaElement area, AbstractCase ac, DeformationAxis component, int numPoints)
 {
     return(null);
 }
Exemplo n.º 9
0
 private void getCurvedAxis(AreaElement area, AbstractCase ac, DeformationAxis component, float[,] controlPoints)
 {
 }
        //public Vector3 GetPoint(LineElement l, AbstractCase ac, float xPos, float deformationScale, float paintScaleFactorTranslation)
        //{
        //    if (l == null)
        //    {
        //        return Vector3.Empty;
        //    }
        //    Vector3 iPos, jPos;
        //    iPos = new Vector3(model.Results.JointDisplacements[l.I.Id, 0],
        //                     model.Results.JointDisplacements[l.I.Id, 1],
        //                     model.Results.JointDisplacements[l.I.Id, 2]);
        //    iPos = deformationScale * paintScaleFactorTranslation * iPos + l.I.Position;
        //    jPos = new Vector3(model.Results.JointDisplacements[l.J.Id, 0],
        //                     model.Results.JointDisplacements[l.J.Id, 1],
        //                     model.Results.JointDisplacements[l.J.Id, 2]);
        //    jPos = deformationScale * paintScaleFactorTranslation * jPos + l.J.Position;
        //    float[,] local2Values = GetCurvedPoint(l, model.Results.ActiveCase.AbstractCase, Analysis.LineDeformationCalculator.DeformationAxis.Local2, xPos);
        //    float[,] local3Values = GetCurvedPoint(l, model.Results.ActiveCase.AbstractCase, Analysis.LineDeformationCalculator.DeformationAxis.Local3, xPos);
        //    Vector3 point = iPos + local2Values[0, 0] * (jPos - iPos) +
        //        local2Values[0, 1] * deformationScale * paintScaleFactorTranslation * l.LocalAxes[1] +
        //        local3Values[0, 1] * deformationScale * paintScaleFactorTranslation * l.LocalAxes[2];
        //    return point;
        //}
        private void getCurvedAxis(LineElement l, AbstractCase ac, DeformationAxis component, float[,] controlPoints)
        {
            Vector3 vI, vJ, mI, mJ, dI, dJ;

            vI = new Vector3(model.Results.ElementJointForces[l.Id, 0, 0],
                             model.Results.ElementJointForces[l.Id, 0, 1],
                             model.Results.ElementJointForces[l.Id, 0, 2]);

            vJ = new Vector3(model.Results.ElementJointForces[l.Id, 1, 0],
                             model.Results.ElementJointForces[l.Id, 1, 1],
                             model.Results.ElementJointForces[l.Id, 1, 2]);

            mI = new Vector3(model.Results.ElementJointForces[l.Id, 0, 3],
                             model.Results.ElementJointForces[l.Id, 0, 4],
                             model.Results.ElementJointForces[l.Id, 0, 5]);

            mJ = new Vector3(model.Results.ElementJointForces[l.Id, 1, 3],
                             model.Results.ElementJointForces[l.Id, 1, 4],
                             model.Results.ElementJointForces[l.Id, 1, 5]);

            dI = l.I.Position + new Vector3(model.Results.JointDisplacements[l.I.Id, 0],
                                            model.Results.JointDisplacements[l.I.Id, 1],
                                            model.Results.JointDisplacements[l.I.Id, 2]);

            dJ = l.J.Position + new Vector3(model.Results.JointDisplacements[l.J.Id, 0],
                                            model.Results.JointDisplacements[l.J.Id, 1],
                                            model.Results.JointDisplacements[l.J.Id, 2]);

            // Transform to the line's local coordinate system
            // From the global system
            // (WARNING: This is supposed to come in the joint's local coordinate system)
            vI = toLocal(l, vI);
            vJ = toLocal(l, vJ);

            mI = toLocal(l, mI);
            mJ = toLocal(l, mJ);

            dI = toLocal(l, dI);
            dJ = toLocal(l, dJ);

            float fI = 0f, fJ = 0f, fmI = 0f, fmJ = 0f, fdI = 0f, fdJ = 0f;
            float EI = ((StraightFrameProps)l.Properties).Section.Material.TypeProperties.E;
            float lineLength = l.Length;

            switch (component)
            {
                case DeformationAxis.Local2:
                    fI = vI.Y; fmI = -mI.Z; fdI = dI.Y;
                    fJ = vJ.Y; fmJ = -mJ.Z; fdJ = dJ.Y;

                    EI *= ((StraightFrameProps)l.Properties).Section.I33;
                    break;
                case DeformationAxis.Local3:
                    fI = vI.Z; fmI = mI.Y; fdI = dI.Z;
                    fJ = vJ.Z; fmJ = mJ.Y; fdJ = dJ.Z;

                    EI *= ((StraightFrameProps)l.Properties).Section.I22;
                    break;
            }

            addLoadDeflection(ac, l, lineLength, controlPoints, component, 1.0f, EI);
            addMomentDeflection(fmI, lineLength, controlPoints, EI, -1);
            addMomentDeflection(fmJ, lineLength, controlPoints, EI, 1);
        }
        private void addLoadDeflection(LineElement line, float lineLength, DirectionalLineLoad load, float[,] controlPoints, DeformationAxis component, float scale, float EI)
        {
            if (load == null) return;

            Vector3 dir = getLocalDir(line, load.Direction);
            float dirComponent = 0.0f;

            switch (component)
            {
                case DeformationAxis.Local2:
                    dirComponent = dir.Y;
                    break;
                case DeformationAxis.Local3:
                    dirComponent = dir.Z;
                    break;
            }

            if (load is ConcentratedSpanLoad)
            {
                if (load.Type == LineLoad.LoadType.Force)
                    addConcentratedForceDeflection(line, lineLength, (ConcentratedSpanLoad)load, controlPoints, dirComponent, scale, EI);
                else
                    addConcentratedMomentDeflection(line, lineLength, (ConcentratedSpanLoad)load, controlPoints, dirComponent, scale, EI);
            }
            else if (load is DistributedSpanLoad)
            {
                DistributedSpanLoad dsl = (DistributedSpanLoad)load;

                float a, b, c;
                a = dsl.Da * lineLength;
                b = (dsl.Db - dsl.Da) * lineLength;
                c = (1.0f - dsl.Db) * lineLength;

                if (load.Type == LineLoad.LoadType.Force)
                {
                    addUniformForceDeflection(line, lineLength, dsl, a, b, c, controlPoints, dirComponent, scale, EI);
                    addTriangularForceDeflection(line, lineLength, dsl, a, b, c, controlPoints, dirComponent, scale, EI);
                }
                else
                {
                    // TODO: Partial Uniform and Triangular Moments Deflection calculator
                }
            }
        }
        private void addLoadDeflection(AbstractCase ac, LineElement line, float lineLength, float[,] controlPoints, DeformationAxis component, float scale, float EI)
        {
            if (ac == null) return;

            if (ac is LoadCombination)
            {
                foreach (AbstractCaseFactor acf in ((LoadCombination)ac).Cases)
                    addLoadDeflection(acf.Case, line, lineLength, controlPoints, component, acf.Factor, EI);
            }
            else if (ac is AnalysisCase)
            {
                if (((AnalysisCase)ac).Properties is StaticCaseProps)
                {
                    foreach (StaticCaseFactor staticCase in ((StaticCaseProps)((AnalysisCase)ac).Properties).Loads)
                    {
                        if (staticCase.AppliedLoad is LoadCase)
                        {
                            LoadCase lc = staticCase.AppliedLoad as LoadCase;
                            if (line.Loads[lc] != null)
                            {
                                foreach (Load load in line.Loads[lc])
                                {
                                    //addUniformLoadDeflection(line, lineLength, load as LineLoad, controlPoints, component, scale, EI);
                                    //addTriangularLoadDeflection(line, lineLength, load as LineLoad, controlPoints, component, scale, EI);
                                    if (load is DirectionalLineLoad)
                                        addLoadDeflection(line, lineLength, load as DirectionalLineLoad, controlPoints, component, scale, EI);
                                }
                            }
                            if (lc.SelfWeight > 0f)
                            {
                                if (line.Properties is StraightFrameProps)
                                {
                                    StraightFrameProps frameProps = line.Properties as StraightFrameProps;
                                    selfWeight.La = selfWeight.Lb = frameProps.Section.Area * frameProps.Section.Material.UnitWeight;
                                    //addUniformLoadDeflection(line, lineLength, selfWeight, controlPoints, component, lc.SelfWeight * scale, EI);
                                    addLoadDeflection(line, lineLength, selfWeight, controlPoints, component, lc.SelfWeight * scale, EI);
                                }
                            }
                        }
                    }
                }
            }
        }
        public float[] GetCurvedPoint(LineElement l, AbstractCase ac, DeformationAxis component, float xPos)
        {
            if (!model.HasResults) return null;

            /// controlPoints[i, 0]: x position on Beam, controlPoints[i, 1]: 'deflection' for x position, controlPoints[i,2]: deformation angle
            float[,] controlPoints = new float[1, 3];
            controlPoints[0, 0] = xPos;
            controlPoints[0, 1] = 0f;
            controlPoints[0, 2] = 0.0f;

            getCurvedAxis(l, ac, component, controlPoints);

            // Copy to 1-dimensional array
            float[] ret = new float[3];
            for (int i = 0; i < 3; i++)
                ret[i] = controlPoints[0, i];

            return ret;
        }
Exemplo n.º 14
0
        //public Vector3 GetPoint(LineElement l, AbstractCase ac, float xPos, float deformationScale, float paintScaleFactorTranslation)
        //{
        //    if (l == null)
        //    {
        //        return Vector3.Empty;
        //    }

        //    Vector3 iPos, jPos;
        //    iPos = new Vector3(model.Results.JointDisplacements[l.I.Id, 0],
        //                     model.Results.JointDisplacements[l.I.Id, 1],
        //                     model.Results.JointDisplacements[l.I.Id, 2]);
        //    iPos = deformationScale * paintScaleFactorTranslation * iPos + l.I.Position;

        //    jPos = new Vector3(model.Results.JointDisplacements[l.J.Id, 0],
        //                     model.Results.JointDisplacements[l.J.Id, 1],
        //                     model.Results.JointDisplacements[l.J.Id, 2]);
        //    jPos = deformationScale * paintScaleFactorTranslation * jPos + l.J.Position;

        //    float[,] local2Values = GetCurvedPoint(l, model.Results.ActiveCase.AbstractCase, Analysis.LineDeformationCalculator.DeformationAxis.Local2, xPos);
        //    float[,] local3Values = GetCurvedPoint(l, model.Results.ActiveCase.AbstractCase, Analysis.LineDeformationCalculator.DeformationAxis.Local3, xPos);

        //    Vector3 point = iPos + local2Values[0, 0] * (jPos - iPos) +
        //        local2Values[0, 1] * deformationScale * paintScaleFactorTranslation * l.LocalAxes[1] +
        //        local3Values[0, 1] * deformationScale * paintScaleFactorTranslation * l.LocalAxes[2];

        //    return point;
        //}

        private void getCurvedAxis(LineElement l, AbstractCase ac, DeformationAxis component, float[,] controlPoints)
        {
            Vector3 vI, vJ, mI, mJ, dI, dJ;

            vI = new Vector3(model.Results.ElementJointForces[l.Id, 0, 0],
                             model.Results.ElementJointForces[l.Id, 0, 1],
                             model.Results.ElementJointForces[l.Id, 0, 2]);

            vJ = new Vector3(model.Results.ElementJointForces[l.Id, 1, 0],
                             model.Results.ElementJointForces[l.Id, 1, 1],
                             model.Results.ElementJointForces[l.Id, 1, 2]);

            mI = new Vector3(model.Results.ElementJointForces[l.Id, 0, 3],
                             model.Results.ElementJointForces[l.Id, 0, 4],
                             model.Results.ElementJointForces[l.Id, 0, 5]);

            mJ = new Vector3(model.Results.ElementJointForces[l.Id, 1, 3],
                             model.Results.ElementJointForces[l.Id, 1, 4],
                             model.Results.ElementJointForces[l.Id, 1, 5]);

            dI = l.I.Position + new Vector3(model.Results.JointDisplacements[l.I.Id, 0],
                                            model.Results.JointDisplacements[l.I.Id, 1],
                                            model.Results.JointDisplacements[l.I.Id, 2]);

            dJ = l.J.Position + new Vector3(model.Results.JointDisplacements[l.J.Id, 0],
                                            model.Results.JointDisplacements[l.J.Id, 1],
                                            model.Results.JointDisplacements[l.J.Id, 2]);

            // Transform to the line's local coordinate system
            // From the global system
            // (WARNING: This is supposed to come in the joint's local coordinate system)
            vI = toLocal(l, vI);
            vJ = toLocal(l, vJ);

            mI = toLocal(l, mI);
            mJ = toLocal(l, mJ);

            dI = toLocal(l, dI);
            dJ = toLocal(l, dJ);

            float fI = 0f, fJ = 0f, fmI = 0f, fmJ = 0f, fdI = 0f, fdJ = 0f;
            float EI         = ((StraightFrameProps)l.Properties).Section.Material.TypeProperties.E;
            float lineLength = l.Length;

            switch (component)
            {
            case DeformationAxis.Local2:
                fI = vI.Y; fmI = -mI.Z; fdI = dI.Y;
                fJ = vJ.Y; fmJ = -mJ.Z; fdJ = dJ.Y;

                EI *= ((StraightFrameProps)l.Properties).Section.I33;
                break;

            case DeformationAxis.Local3:
                fI = vI.Z; fmI = mI.Y; fdI = dI.Z;
                fJ = vJ.Z; fmJ = mJ.Y; fdJ = dJ.Z;

                EI *= ((StraightFrameProps)l.Properties).Section.I22;
                break;
            }

            addLoadDeflection(ac, l, lineLength, controlPoints, component, 1.0f, EI);
            addMomentDeflection(fmI, lineLength, controlPoints, EI, -1);
            addMomentDeflection(fmJ, lineLength, controlPoints, EI, 1);
        }
Exemplo n.º 15
0
        private void addLoadDeflection(LineElement line, float lineLength, DirectionalLineLoad load, float[,] controlPoints, DeformationAxis component, float scale, float EI)
        {
            if (load == null)
            {
                return;
            }

            Vector3 dir          = getLocalDir(line, load.Direction);
            float   dirComponent = 0.0f;

            switch (component)
            {
            case DeformationAxis.Local2:
                dirComponent = dir.Y;
                break;

            case DeformationAxis.Local3:
                dirComponent = dir.Z;
                break;
            }

            if (load is ConcentratedSpanLoad)
            {
                if (load.Type == LineLoad.LoadType.Force)
                {
                    addConcentratedForceDeflection(line, lineLength, (ConcentratedSpanLoad)load, controlPoints, dirComponent, scale, EI);
                }
                else
                {
                    addConcentratedMomentDeflection(line, lineLength, (ConcentratedSpanLoad)load, controlPoints, dirComponent, scale, EI);
                }
            }
            else if (load is DistributedSpanLoad)
            {
                DistributedSpanLoad dsl = (DistributedSpanLoad)load;

                float a, b, c;
                a = dsl.Da * lineLength;
                b = (dsl.Db - dsl.Da) * lineLength;
                c = (1.0f - dsl.Db) * lineLength;

                if (load.Type == LineLoad.LoadType.Force)
                {
                    addUniformForceDeflection(line, lineLength, dsl, a, b, c, controlPoints, dirComponent, scale, EI);
                    addTriangularForceDeflection(line, lineLength, dsl, a, b, c, controlPoints, dirComponent, scale, EI);
                }
                else
                {
                    // TODO: Partial Uniform and Triangular Moments Deflection calculator
                }
            }
        }
Exemplo n.º 16
0
        private void addLoadDeflection(AbstractCase ac, LineElement line, float lineLength, float[,] controlPoints, DeformationAxis component, float scale, float EI)
        {
            if (ac == null)
            {
                return;
            }

            if (ac is LoadCombination)
            {
                foreach (AbstractCaseFactor acf in ((LoadCombination)ac).Cases)
                {
                    addLoadDeflection(acf.Case, line, lineLength, controlPoints, component, acf.Factor, EI);
                }
            }
            else if (ac is AnalysisCase)
            {
                if (((AnalysisCase)ac).Properties is StaticCaseProps)
                {
                    foreach (StaticCaseFactor staticCase in ((StaticCaseProps)((AnalysisCase)ac).Properties).Loads)
                    {
                        if (staticCase.AppliedLoad is LoadCase)
                        {
                            LoadCase lc = staticCase.AppliedLoad as LoadCase;
                            if (line.Loads[lc] != null)
                            {
                                foreach (Load load in line.Loads[lc])
                                {
                                    //addUniformLoadDeflection(line, lineLength, load as LineLoad, controlPoints, component, scale, EI);
                                    //addTriangularLoadDeflection(line, lineLength, load as LineLoad, controlPoints, component, scale, EI);
                                    if (load is DirectionalLineLoad)
                                    {
                                        addLoadDeflection(line, lineLength, load as DirectionalLineLoad, controlPoints, component, scale, EI);
                                    }
                                }
                            }
                            if (lc.SelfWeight > 0f)
                            {
                                if (line.Properties is StraightFrameProps)
                                {
                                    StraightFrameProps frameProps = line.Properties as StraightFrameProps;
                                    selfWeight.La = selfWeight.Lb = frameProps.Section.Area * frameProps.Section.Material.UnitWeight;
                                    //addUniformLoadDeflection(line, lineLength, selfWeight, controlPoints, component, lc.SelfWeight * scale, EI);
                                    addLoadDeflection(line, lineLength, selfWeight, controlPoints, component, lc.SelfWeight * scale, EI);
                                }
                            }
                        }
                    }
                }
            }
        }