//=============================================================================
        /// <summary>
        /// Add row to this column.
        /// </summary>
        public bool AddRow(double maxBeamSpan, double usl, string strBracingType, double maxLoad)
        {
            if (Utils.FLE(maxBeamSpan, 0.0) || Utils.FLE(usl, 0.0) || string.IsNullOrEmpty(strBracingType) || Utils.FLE(maxLoad, 0.0))
            {
                return(false);
            }

            eColumnBracingType bracingType = RackLoadUtils.GetColumnBracingTypeByString(strBracingType.Trim());

            if (eColumnBracingType.eUndefined == bracingType)
            {
                return(false);
            }

            //
            if (!m_FrameLoadDictionary.ContainsKey(maxBeamSpan) || m_FrameLoadDictionary[maxBeamSpan] == null)
            {
                m_FrameLoadDictionary[maxBeamSpan] = new Dictionary <double, Dictionary <eColumnBracingType, double> >();
            }
            //
            if (!m_FrameLoadDictionary[maxBeamSpan].ContainsKey(usl) || m_FrameLoadDictionary[maxBeamSpan][usl] == null)
            {
                m_FrameLoadDictionary[maxBeamSpan][usl] = new Dictionary <eColumnBracingType, double>();
            }

            m_FrameLoadDictionary[maxBeamSpan][usl][bracingType] = maxLoad;
            return(true);
        }
        //
        public static string GetColumnBracingTypeByEnum(eColumnBracingType bracingType)
        {
            if (eColumnBracingType.eNormalBracing == bracingType)
            {
                return(NORMAL_BRACING);
            }
            else if (eColumnBracingType.eXBracing == bracingType)
            {
                return(X_BRACING);
            }
            else if (eColumnBracingType.eNormalBracingWithStiffener == bracingType)
            {
                return(NORMAL_BRACING_WITH_STIFFENER);
            }
            else if (eColumnBracingType.eXBracingWithStiffener == bracingType)
            {
                return(X_BRACING_WITH_STIFFENER);
            }

            return(string.Empty);
        }
        //=============================================================================
        /// <summary>
        /// Return the column which can handle passed parameter.
        /// </summary>
        public static RackColumn GetRackColumn(List <RackColumn> RacksColumnsList, double beamSpan, double usl, double load, out eColumnBracingType bracingType)
        {
            bracingType = eColumnBracingType.eUndefined;

            if (RacksColumnsList == null)
            {
                return(null);
            }

            if (Utils.FLE(beamSpan, 0.0) || Utils.FLE(usl, 0.0) || Utils.FLE(load, 0.0))
            {
                return(null);
            }

            foreach (RackColumn rackColumn in RacksColumnsList)
            {
                if (rackColumn == null)
                {
                    continue;
                }

                // Search algo:
                // 1. Go through the column and look at the bracing type.
                // 2. If bracing type is NormalBracing or XBracing then stop search and return this column.
                // 3. Otherwise take next column and compare.
                //
                // Column are ordered by the way they are ordered in the excel file.
                eColumnBracingType columnBracingType = rackColumn.GetBracing(beamSpan, usl, load);
                if (eColumnBracingType.eUndefined != columnBracingType)
                {
                    bracingType = columnBracingType;
                    return(rackColumn);
                }
            }

            return(null);
        }