Пример #1
0
        /// <summary>Конструктор</summary>
        /// <param name="layer">Слой</param>
        /// <param name="nid">Ключ</param>
        /// <param name="type">Тип</param>
        /// <param name="nParts">Список частей</param>
        /// <param name="nFieldValues">Список значений полей</param>
        /// <param name="nStyle">Стили</param>
        internal Feature(MiLayer layer, int nid, FeatureType type, List <List <Vertex> > nParts,
                         IReadOnlyList <string> nFieldValues, IReadOnlyDictionary <string, string> nStyle)
        {
            Id     = nid;
            Handle = MiApi.mitab_c_create_feature(layer.Handle, (int)type);
            Layer  = layer;
            Type   = type;
            Parts  = new Parts(this, nParts);
            if (nStyle != null)
            {
                SetStyle(nStyle);
            }
            if (nFieldValues != null)
            {
                for (var i = 0; i < nFieldValues.Count; i++)
                {
                    MiApi.mitab_c_set_field(Handle, i, nFieldValues[i]);
                }
            }
            var res = MiApi.mitab_c_write_feature(layer.Handle, Handle);

            if (res.ToInt32() == 1)
            {
                MiApi.mitab_c_destroy_feature(Handle);
            }
            else
            {
                throw new Exception("Ошибка создания Feature"); //
            }
        }
Пример #2
0
 /// <summary>Конструктор</summary>
 /// <param name="layer">Слой</param>
 protected internal Fields(MiLayer layer) : base(MiApi.mitab_c_get_field_count(layer.Handle))
 {
     for (int i = 0; i < Count; i++)
     {
         fields.Add(CreateField(layer, i));
     }
 }
Пример #3
0
 /// <summary>Конструктор</summary>
 /// <param name="layer">Слой</param>
 /// <param name="featureId">Ключ</param>
 protected internal Feature(MiLayer layer, int featureId)
 {
     this.Id = featureId;
     this.Layer = layer;
     this.Handle = MiApi.mitab_c_read_feature(layer.Handle, featureId);
     this.Type = MiApi.mitab_c_get_type(Handle);
     this.Parts = CreateParts(this);
 }
Пример #4
0
 /// <summary>Конструктор</summary>
 /// <param name="layer">Слой</param>
 /// <param name="featureId">Ключ</param>
 internal Feature(MiLayer layer, int featureId)
 {
     Id     = featureId;
     Layer  = layer;
     Handle = MiApi.mitab_c_read_feature(layer.Handle, featureId);
     Type   = MiApi.mitab_c_get_type(Handle);
     Parts  = CreateParts(this);
 }
Пример #5
0
 /// <summary>Конструктор</summary>
 /// <param name="layer">Слой</param>
 /// <param name="i">Индекс</param>
 protected internal Field(MiLayer layer, int i)
 {
     this.Layer     = layer;
     this.Index     = i;
     this.Name      = MiApi.mitab_c_get_field_name(layer.Handle, i);
     this.Type      = MiApi.mitab_c_get_field_type(layer.Handle, i);
     this.Precision = (short)MiApi.mitab_c_get_field_precision(layer.Handle, i);
     this.Width     = MiApi.mitab_c_get_field_width(layer.Handle, i);
 }
Пример #6
0
        /// <summary>Создать mif-файл</summary>
        /// <param name="tabFileName">Имя файла</param>
        /// <param name="lay">Слой данных</param>
        /// <returns></returns>
        public static MiLayer CreateMIF(string tabFileName, DataLayer lay)
        {
            var bounds = lay.GetMBR();
            var res    = new MiLayer(MiApi.mitab_c_create(tabFileName, "mif", "NonEarth Units \"m\"",
                                                          bounds.maxy, bounds.miny, bounds.minx, bounds.maxx), tabFileName);

            res.AddLayer(lay);
            res.Close();
            return(res);
        }
Пример #7
0
        /// <summary>Конструктор</summary>
        /// <param name="layer">Слой</param>
        /// <param name="fieldName">Имя поля</param>
        /// <param name="fieldType">Тип поля</param>
        /// <param name="width">Ширина</param>
        /// <param name="precision">Точность</param>
        /// <param name="indexed"></param>
        /// <param name="unique"></param>
        protected internal Field(MiLayer layer, string fieldName, FieldType fieldType, int width, int precision,
                                 int indexed, int unique)
        {
            IntPtr fieldId = MiApi.mitab_c_add_field(layer.Handle,
                                                     fieldName, (int)fieldType, width, precision, indexed, unique);;

            this.Layer     = layer;
            this.Index     = fieldId.ToInt32();
            this.Name      = fieldName;
            this.Type      = fieldType;
            this.Precision = (short)precision;
            this.Width     = width;
        }
Пример #8
0
        /// <summary>Создать tab-файл</summary>
        /// <param name="tabFileName">Имя файла</param>
        /// <param name="lay">Слой данных</param>
        /// <returns></returns>
        public static MiLayer CreateTab(string tabFileName, DataLayer lay)
        {
            var bounds = lay.GetMBR();

            if (bounds == null)
            {
                return(null);
            }
            var res = new MiLayer(MiApi.mitab_c_create(tabFileName, "tab", "NonEarth Units \"m\"",
                                                       bounds.maxy, bounds.miny, bounds.minx, bounds.maxx), tabFileName);

            //
            res.AddLayer(lay);
            res.Close();
            return(res);
        }
Пример #9
0
 /// <summary>онструктор</summary>
 /// <param name="layer"></param>
 protected internal Features(MiLayer layer) : base(MiApi.mitab_c_get_feature_count(layer.Handle))
 {
     this.Layer = layer;
 }
Пример #10
0
 /// <summary>Конструктор</summary>
 /// <param name="objProvider"></param>
 /// <param name="layer"></param>
 internal FeaturesEnum(IObjectProvider objProvider, MiLayer layer) : base(objProvider)
 {
     this._layer = layer;
 }
Пример #11
0
 /// <summary>Добавить поле</summary>
 /// <param name="layer">Слой</param>
 /// <param name="fieldName">Имя поля</param>
 /// <param name="fieldType">Тип поля</param>
 /// <param name="width">Ширина</param>
 /// <param name="precision">Точность</param>
 /// <param name="indexed"></param>
 /// <param name="unique"></param>
 public void AddField(MiLayer layer,
                      string fieldName, FieldType fieldType, int width, int precision, int indexed, int unique)
 {            //
     fields.Add(new Field(layer, fieldName, fieldType, width, precision, indexed, unique));
 }
Пример #12
0
 /// <summary>Override this to support descendants of the Field class.</summary>
 /// <returns>A Field, with the given index, belonging to the given Layer</returns>
 protected internal virtual Field CreateField(MiLayer layer, int index)
 {
     return(new Field(layer, index));
 }
Пример #13
0
 /// <summary>Override this to support descendants of the Field class.</summary>
 /// <returns>A Field, with the given index, belonging to the given Layer</returns>
 internal Field CreateField(MiLayer layer, int index) => new Field(layer, index);