/// <summary>
            /// Конструктор - дополнительный (с параметрами)
            ///  индексы назначаются автоматически
            /// </summary>
            /// <param name="arVales">Массив</param>
            public ProxyEntity(object[] arVales)
            {
                m_name = (string)arVales[0];

                m_command = (MSExcel.COMMAND_ENTITY)Enum.Parse(typeof(MSExcel.COMMAND_ENTITY), (string)arVales[1]);
                // ??? почему не константа, где определена (_HEAP_INDEX_COLUMN_PROPERTY)
                Properties = new Property[arVales.Length - 2];

                for (int indx = 0; indx < Properties.Length; indx++)
                {
                    Properties[indx] = new Property(indx + MSExcel._HEAP_INDEX_COLUMN_PROPERTY
                                                    , arVales[indx + MSExcel._HEAP_INDEX_COLUMN_PROPERTY]);
                }
            }
        /// <summary>
        /// Конструктор - основной (с параметрами)
        /// </summary>
        /// <param name="blockName">Наименование блока-владельца</param>
        /// <param name="nameEntity">Наименование сущности</param>
        public KEY_ENTITY(/*string blockName, */ MSExcel.COMMAND_ENTITY command, int indx, string nameEntity)
        {
            //MSExcel.COMMAND_ENTITY command = MSExcel.COMMAND_ENTITY.UNKNOWN;
            //string[] names = nameEntity.Split(s_chNameDelimeter);

            //m_BlockName = string.Empty;

            //// вариант №1
            //if (names.Length == 2)
            //    if (Enum.TryParse(names[0], out command) == true) {
            //        if (Int32.TryParse(names[1], out _index) == true) {
            //            _command = command;

            //            Valid = 0;
            //        } else
            //            Valid = 1;

            //        m_BlockName = blockName;
            //    } else
            //        Valid = -1;
            //else
            //    Valid = -2;

            // вариант №2
            if (!(command == MSExcel.COMMAND_ENTITY.UNKNOWN))
            {
                _command = command;
                _name    = nameEntity;

                if (indx > 0)
                {
                    _index = indx;

                    //m_BlockName = blockName;

                    Valid = 0;
                }
                else
                {
                    Valid = 1;
                }
            }
            else
            {
                Valid = -1;
            }
        }
        public static EntityParser.ProxyEntity newRLineZ(DataRow rEntity, MSExcel.FORMAT format /*, string blockName*/)
        {
            EntityParser.ProxyEntity pEntityRes;

            double[] ptStart = new double[(int)COORD3d.COUNT]
            , ptEnd = new double[(int)COORD3d.COUNT];
            string nameEntityRelative = string.Empty;

            MSExcel.POINT3D placementEnd;

            string name = string.Empty;

            MSExcel.COMMAND_ENTITY command = MSExcel.COMMAND_ENTITY.UNKNOWN;

            if (TryParseCommandAndNameEntity(format, rEntity, out name, out command) == true)
            {
                // значения для параметров примитива
                switch (format)
                {
                case MSExcel.FORMAT.HEAP:
                    nameEntityRelative = rEntity[(int)Settings.MSExcel.HEAP_INDEX_COLUMN.RLINE_NAME_ENTITY_RELATIVE].ToString();
                    if (!(MSExcel.GetLineEndPoint3d(command, string.Empty, nameEntityRelative, out placementEnd) < 0))
                    {
                        ptStart = placementEnd.Values;
                    }
                    else
                    {
                        ptStart = new double[(int)COORD3d.COUNT];

                        Core.Logging.DebugCaller(MethodBase.GetCurrentMethod(), string.Format(@"Ошибка. Для {0} не найдена ведомая сущность {1}", name, nameEntityRelative));
                    }

                    ptEnd[(int)COORD3d.Z] =
                        double.Parse(rEntity[(int)Settings.MSExcel.HEAP_INDEX_COLUMN.RLINE_LENGTH].ToString(), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture);

                    pEntityRes = new ProxyEntity(
                        name
                        , MSExcel.COMMAND_ENTITY.LINE
                        , new ProxyEntity.Property[] {
                        new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.LINE_START_X, ptStart[(int)COORD3d.X])
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.LINE_START_DECART_Y, ptStart[(int)COORD3d.Y])
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.LINE_START_DECART_Z, ptStart[(int)COORD3d.Z])
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.LINE_END_DECART_X, ptEnd[(int)COORD3d.X])
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.LINE_END_DECART_Y, ptEnd[(int)COORD3d.Y])
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.LINE_END_DECART_Z, ptEnd[(int)COORD3d.Z])
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.LINE_COLORINDEX
                                                   , int.Parse(rEntity[(int)MSExcel.HEAP_INDEX_COLUMN.RLINE_COLORINDEX].ToString()
                                                               , System.Globalization.NumberStyles.Integer, System.Globalization.CultureInfo.InvariantCulture))
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.LINE_TICKNESS
                                                   , double.Parse(rEntity[(int)MSExcel.HEAP_INDEX_COLUMN.RLINE_TICKNESS].ToString()
                                                                  , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture))
                    }
                        );
                    break;

                default:
                    // соэдать примитив по умолчанию
                    pEntityRes = new ProxyEntity();
                    break;
                }
            }
            else
            {
                pEntityRes = new ProxyEntity();

                Core.Logging.DebugCaller(MethodBase.GetCurrentMethod(), string.Format(@"Ошибка опрделения имени, типа  сущности..."));
            }

            return(pEntityRes);
        }
        /// <summary>
        /// Создать новый примитив - линия по значениям параметров из строки таблицы
        /// </summary>
        /// <param name="rEntity">Строка таблицы со значениями параметров примитива</param>
        /// <param name="format">Формат файла конфигурации из которого была импортирована таблица</param>
        /// <param name="blockName">Наимнование блока (только при формате 'HEAP')</param>
        /// <returns>Объект примитива - линия</returns>
        public static ProxyEntity newLineDecart(DataRow rEntity, MSExcel.FORMAT format /*, string blockName*/)
        {
            ProxyEntity pEntityRes;

            double[] ptStart = new double[(int)COORD3d.COUNT]
            , ptEnd = new double[(int)COORD3d.COUNT];

            string name = string.Empty;

            MSExcel.COMMAND_ENTITY command = MSExcel.COMMAND_ENTITY.UNKNOWN;

            if (TryParseCommandAndNameEntity(format, rEntity, out name, out command) == true)
            {
                // значения для параметров примитива
                switch (format)
                {
                case MSExcel.FORMAT.HEAP:
                    ptStart[(int)COORD3d.X] = double.Parse(rEntity[(int)MSExcel.HEAP_INDEX_COLUMN.LINE_START_X].ToString()
                                                           , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture);
                    ptStart[(int)COORD3d.Y] = double.Parse(rEntity[(int)MSExcel.HEAP_INDEX_COLUMN.LINE_START_DECART_Y].ToString()
                                                           , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture);
                    ptStart[(int)COORD3d.Z] = double.Parse(rEntity[(int)MSExcel.HEAP_INDEX_COLUMN.LINE_START_DECART_Z].ToString()
                                                           , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture);

                    ptEnd[(int)COORD3d.X] = double.Parse(rEntity[(int)MSExcel.HEAP_INDEX_COLUMN.LINE_END_DECART_X].ToString()
                                                         , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture);
                    ptEnd[(int)COORD3d.Y] = double.Parse(rEntity[(int)MSExcel.HEAP_INDEX_COLUMN.LINE_END_DECART_Y].ToString()
                                                         , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture);
                    ptEnd[(int)COORD3d.Z] = double.Parse(rEntity[(int)MSExcel.HEAP_INDEX_COLUMN.LINE_END_DECART_Z].ToString()
                                                         , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture);

                    pEntityRes = new ProxyEntity(
                        name
                        , command
                        , new ProxyEntity.Property[] {
                        new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.LINE_START_X, ptStart[(int)COORD3d.X])
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.LINE_START_DECART_Y, ptStart[(int)COORD3d.Y])
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.LINE_START_DECART_Z, ptStart[(int)COORD3d.Z])
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.LINE_END_DECART_X, ptEnd[(int)COORD3d.X])
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.LINE_END_DECART_Y, ptEnd[(int)COORD3d.Y])
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.LINE_END_DECART_Z, ptEnd[(int)COORD3d.Z])
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.LINE_COLORINDEX
                                                   , int.Parse(rEntity[(int)MSExcel.HEAP_INDEX_COLUMN.LINE_COLORINDEX].ToString()
                                                               , System.Globalization.NumberStyles.Integer, System.Globalization.CultureInfo.InvariantCulture))
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.LINE_TICKNESS
                                                   , double.Parse(rEntity[(int)MSExcel.HEAP_INDEX_COLUMN.LINE_TICKNESS].ToString()
                                                                  , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture))
                    }
                        );

                    //pEntityRes.m_BlockName = blockName;
                    break;

                case MSExcel.FORMAT.ORDER:
                    ptStart[(int)COORD3d.X] = double.Parse(rEntity[@"START.X"].ToString()
                                                           , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture);
                    ptStart[(int)COORD3d.Y] = double.Parse(rEntity[@"START.Y"].ToString()
                                                           , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture);
                    ptStart[(int)COORD3d.Z] = double.Parse(rEntity[@"START.Z"].ToString()
                                                           , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture);

                    ptEnd[(int)COORD3d.X] = double.Parse(rEntity[@"END.X"].ToString()
                                                         , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture);
                    ptEnd[(int)COORD3d.Y] = double.Parse(rEntity[@"END.Y"].ToString()
                                                         , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture);
                    ptEnd[(int)COORD3d.Z] = double.Parse(rEntity[@"END.Z"].ToString()
                                                         , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture);

                    pEntityRes = new ProxyEntity(
                        name
                        , command
                        , new ProxyEntity.Property[] {
                        new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.LINE_START_X, ptStart[(int)COORD3d.X])
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.LINE_START_DECART_Y, ptStart[(int)COORD3d.Y])
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.LINE_START_DECART_Z, ptStart[(int)COORD3d.Z])
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.LINE_END_DECART_X, ptEnd[(int)COORD3d.X])
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.LINE_END_DECART_Y, ptEnd[(int)COORD3d.Y])
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.LINE_END_DECART_Z, ptEnd[(int)COORD3d.Z])
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.LINE_COLORINDEX
                                                   , int.Parse(rEntity[@"ColorIndex"].ToString()
                                                               , System.Globalization.NumberStyles.Integer, System.Globalization.CultureInfo.InvariantCulture))
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.LINE_TICKNESS
                                                   , double.Parse(rEntity[@"TICKNESS"].ToString()
                                                                  , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture))
                    }
                        );

                    break;

                default:
                    // соэдать примитив по умолчанию
                    pEntityRes = new ProxyEntity();
                    break;
                }
            }
            else
            {
                pEntityRes = new ProxyEntity();

                Core.Logging.DebugCaller(MethodBase.GetCurrentMethod(), string.Format(@"Ошибка опрделения имени, типа  сущности..."));
            }

            return(pEntityRes);
        }
        /// <summary>
        /// Создать новый примитив - дугу по значениям параметров из строки таблицы
        /// </summary>
        /// <param name="rEntity">Строка таблицы</param>
        /// <param name="format">Формат файла конфигурации из которого была импортирована таблица</param>
        /// <param name="blockName">Наимнование блока (только при формате 'HEAP')</param>
        /// <returns>Объект примитива - дуга</returns>
        public static EntityParser.ProxyEntity newArc(DataRow rEntity, MSExcel.FORMAT format /*, string blockName*/)
        {
            EntityParser.ProxyEntity pEntityRes;

            string name = string.Empty;

            MSExcel.COMMAND_ENTITY command = MSExcel.COMMAND_ENTITY.UNKNOWN;

            if (TryParseCommandAndNameEntity(format, rEntity, out name, out command) == true)
            {
                // значения для параметров примитива
                switch (format)
                {
                case MSExcel.FORMAT.HEAP:
                    pEntityRes = new ProxyEntity(
                        name
                        , command
                        , new ProxyEntity.Property[] {
                        new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.ARC_CENTER_X
                                                 , double.Parse(rEntity[(int)MSExcel.HEAP_INDEX_COLUMN.ARC_CENTER_X].ToString()
                                                                , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture))
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.ARC_CENTER_Y
                                                   , double.Parse(rEntity[(int)MSExcel.HEAP_INDEX_COLUMN.ARC_CENTER_Y].ToString()
                                                                  , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture))
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.ARC_CENTER_Z
                                                   , double.Parse(rEntity[(int)MSExcel.HEAP_INDEX_COLUMN.ARC_CENTER_Z].ToString()
                                                                  , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture))
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.ARC_RADIUS
                                                   , double.Parse(rEntity[(int)MSExcel.HEAP_INDEX_COLUMN.ARC_RADIUS].ToString()
                                                                  , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture))
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.ARC_ANGLE_START
                                                   , (Math.PI / 180) * float.Parse(rEntity[(int)Settings.MSExcel.HEAP_INDEX_COLUMN.ARC_ANGLE_START].ToString(), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture))
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.ARC_ANGLE_END
                                                   , (Math.PI / 180) * float.Parse(rEntity[(int)Settings.MSExcel.HEAP_INDEX_COLUMN.ARC_ANGLE_END].ToString(), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture))
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.ARC_COLORINDEX
                                                   , int.Parse(rEntity[(int)MSExcel.HEAP_INDEX_COLUMN.ARC_COLORINDEX].ToString()
                                                               , System.Globalization.NumberStyles.Integer, System.Globalization.CultureInfo.InvariantCulture))
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.ARC_TICKNESS
                                                   , double.Parse(rEntity[(int)MSExcel.HEAP_INDEX_COLUMN.ARC_TICKNESS].ToString()
                                                                  , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture))
                    }
                        );

                    //pEntityRes.m_BlockName = blockName;
                    break;

                case MSExcel.FORMAT.ORDER:
                    pEntityRes = new ProxyEntity(
                        name
                        , command
                        , new ProxyEntity.Property[] {
                        new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.ARC_CENTER_X
                                                 , double.Parse(rEntity[@"CENTER.X"].ToString()
                                                                , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture))
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.ARC_CENTER_Y
                                                   , double.Parse(rEntity[@"CENTER.Y"].ToString()
                                                                  , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture))
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.ARC_CENTER_Z
                                                   , double.Parse(rEntity[@"CENTER.Z"].ToString()
                                                                  , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture))
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.ARC_RADIUS
                                                   , double.Parse(rEntity[@"Radius"].ToString()
                                                                  , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture))
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.ARC_ANGLE_START
                                                   , (Math.PI / 180) * float.Parse(rEntity[@"ANGLE.START"].ToString(), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture))
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.ARC_ANGLE_END
                                                   , (Math.PI / 180) * float.Parse(rEntity[@"ANGLE.END"].ToString(), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture))
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.CIRCLE_COLORINDEX
                                                   , int.Parse(rEntity[@"ColorIndex"].ToString()
                                                               , System.Globalization.NumberStyles.Integer, System.Globalization.CultureInfo.InvariantCulture))
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.CIRCLE_TICKNESS
                                                   , double.Parse(rEntity[@"TICKNESS"].ToString()
                                                                  , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture))
                    }
                        );

                    break;

                default:
                    // соэдать примитив по умолчанию
                    pEntityRes = new ProxyEntity();
                    break;
                }
            }
            else
            {
                pEntityRes = new ProxyEntity();

                Core.Logging.DebugCaller(MethodBase.GetCurrentMethod(), string.Format(@"Ошибка опрделения имени, типа  сущности..."));
            }

            return(pEntityRes);
        }
        /// <summary>
        /// Создать примитив - полилинию с бесконечным числом вершин
        /// </summary>
        /// <param name="rEntity">Строка таблицы со значениями параметров примитива</param>
        /// <param name="format">Формат файла конфигурации из которого была импортирована таблица</param>
        /// <param name="blockName">Наимнование блока (только при формате 'HEAP')</param>
        /// <returns>Объект примитива - кривая</returns>
        public static EntityParser.ProxyEntity newPolyLine3d(DataRow rEntity, MSExcel.FORMAT format /*, string blockName*/)
        {
            EntityParser.ProxyEntity pEntityRes;

            int cntVertex = -1  // количество точек
            , j           = -1; // счетчие вершин в цикле

            double[]        point3d = new double[3];
            List <double[]> pnts    = new List <double[]>()
            {
            };

            string name = string.Empty;

            MSExcel.COMMAND_ENTITY command = MSExcel.COMMAND_ENTITY.UNKNOWN;

            if (TryParseCommandAndNameEntity(format, rEntity, out name, out command) == true)
            {
                // значения для параметров примитива
                switch (format)
                {
                case MSExcel.FORMAT.HEAP:
                    cntVertex = ((rEntity.Table.Columns.Count - (int)Settings.MSExcel.HEAP_INDEX_COLUMN.POLYLINE_X_START)
                                 - (rEntity.Table.Columns.Count - (int)Settings.MSExcel.HEAP_INDEX_COLUMN.POLYLINE_X_START) % 3) / 3;

                    for (j = 0; j < cntVertex; j++)
                    {
                        if ((!(rEntity[j * 3 + ((int)Settings.MSExcel.HEAP_INDEX_COLUMN.POLYLINE_X_START + 0)] is DBNull)) &&
                            (!(rEntity[j * 3 + ((int)Settings.MSExcel.HEAP_INDEX_COLUMN.POLYLINE_X_START + 1)] is DBNull)) &&
                            (!(rEntity[j * 3 + ((int)Settings.MSExcel.HEAP_INDEX_COLUMN.POLYLINE_X_START + 2)] is DBNull)))
                        {
                            if ((double.TryParse((string)rEntity[j * 3 + ((int)Settings.MSExcel.HEAP_INDEX_COLUMN.POLYLINE_X_START + 0)], out point3d[0]) == true) &&
                                (double.TryParse((string)rEntity[j * 3 + ((int)Settings.MSExcel.HEAP_INDEX_COLUMN.POLYLINE_X_START + 1)], out point3d[1]) == true) &&
                                (double.TryParse((string)rEntity[j * 3 + ((int)Settings.MSExcel.HEAP_INDEX_COLUMN.POLYLINE_X_START + 2)], out point3d[2]) == true))
                            {
                                pnts.Add(new double[3] {
                                    point3d[0], point3d[1], point3d[2]
                                });
                            }
                            else
                            {
                                break;
                            }
                        }
                        else
                        {
                            break;
                        }
                    }

                    if (pnts.Count > 2)
                    {
                        // соэдать примитив
                        pEntityRes = new ProxyEntity(
                            name
                            , command
                            , new ProxyEntity.Property[] {
                            new ProxyEntity.Property(
                                pnts.Count
                                , pnts
                                )
                        }
                            );

                        //pEntityRes.m_BlockName = blockName;
                    }
                    else
                    {
                        pEntityRes = new ProxyEntity();

                        Core.Logging.DebugCaller(MethodBase.GetCurrentMethod()
                                                 , string.Format(@"Недостаточно точек для создания {0} с именем={1}"
                                                                 , (string)rEntity[(int)INDEX_KEY.COMMAND]
                                                                 , (string)rEntity[(int)INDEX_KEY.NAME]
                                                                 ));
                    }
                    break;

                case MSExcel.FORMAT.ORDER:
                default:
                    pEntityRes = new ProxyEntity();
                    break;
                }
            }
            else
            {
                pEntityRes = new ProxyEntity();

                Core.Logging.DebugCaller(MethodBase.GetCurrentMethod(), string.Format(@"Ошибка опрделения имени, типа  сущности..."));
            }

            return(pEntityRes);
        }
        /// <summary>
        /// Создать новый примитив - конус по значениям параметров из строки таблицы
        /// </summary>
        /// <param name="rEntity">Строка таблицы со значениями параметров примитива</param>
        /// <param name="format">Формат файла конфигурации из которого была импортирована таблица</param>
        /// <param name="blockName">Наимнование блока (только при формате 'HEAP')</param>
        /// <returns>Объект примитива - конус</returns>
        public static EntityParser.ProxyEntity newCone(DataRow rEntity, MSExcel.FORMAT format /*, string blockName*/)
        {
            EntityParser.ProxyEntity pEntityRes;

            string name = string.Empty;

            MSExcel.COMMAND_ENTITY command = MSExcel.COMMAND_ENTITY.UNKNOWN;

            if (TryParseCommandAndNameEntity(format, rEntity, out name, out command) == true)
            {
                // значения для параметров примитива
                switch (format)
                {
                case MSExcel.FORMAT.HEAP:
                    pEntityRes = new ProxyEntity(
                        name
                        , command
                        , new ProxyEntity.Property[] {
                        new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.CONE_HEIGHT
                                                 , double.Parse(rEntity[(int)MSExcel.HEAP_INDEX_COLUMN.CONE_HEIGHT].ToString()
                                                                , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture))
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.CONE_ARADIUS_X
                                                   , double.Parse(rEntity[(int)MSExcel.HEAP_INDEX_COLUMN.CONE_ARADIUS_X].ToString()
                                                                  , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture))
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.CONE_ARADIUS_Y
                                                   , double.Parse(rEntity[(int)MSExcel.HEAP_INDEX_COLUMN.CONE_ARADIUS_Y].ToString()
                                                                  , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture))
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.CONE_RADIUS_TOP
                                                   , double.Parse(rEntity[(int)MSExcel.HEAP_INDEX_COLUMN.CONE_RADIUS_TOP].ToString()
                                                                  , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture))
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.CONE_PTDISPLACEMENT_X
                                                   , double.Parse(rEntity[(int)MSExcel.HEAP_INDEX_COLUMN.CONE_PTDISPLACEMENT_X].ToString()
                                                                  , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture))
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.CONE_PTDISPLACEMENT_Y
                                                   , double.Parse(rEntity[(int)MSExcel.HEAP_INDEX_COLUMN.CONE_PTDISPLACEMENT_Y].ToString()
                                                                  , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture))
                        , new ProxyEntity.Property((int)MSExcel.HEAP_INDEX_COLUMN.CONE_PTDISPLACEMENT_Z
                                                   , double.Parse(rEntity[(int)MSExcel.HEAP_INDEX_COLUMN.CONE_PTDISPLACEMENT_Z].ToString()
                                                                  , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture))
                    }
                        );

                    //pEntityRes.m_BlockName = blockName;
                    break;

                case MSExcel.FORMAT.ORDER:
                default:
                    // соэдать примитив по умолчанию
                    pEntityRes = new EntityParser.ProxyEntity();
                    break;
                }
            }
            else
            {
                pEntityRes = new ProxyEntity();

                Core.Logging.DebugCaller(MethodBase.GetCurrentMethod(), string.Format(@"Ошибка опрделения имени, типа  сущности..."));
            }

            return(pEntityRes);
        }
        public static bool TryParseCommandAndNameEntity(MSExcel.FORMAT format, DataRow rEntity, out string name, out MSExcel.COMMAND_ENTITY command)
        {
            bool bRes = false;

            name    = string.Empty;
            command = MSExcel.COMMAND_ENTITY.UNKNOWN;

            switch (format)
            {
            case MSExcel.FORMAT.HEAP:
                name = (string)rEntity[(int)INDEX_KEY.NAME];
                bRes = MSExcel.COMMAND_ENTITY.TryParse((string)rEntity[(int)INDEX_KEY.COMMAND], true, out command);
                break;

            case MSExcel.FORMAT.ORDER:
            default:
                break;
            }

            return(bRes);
        }