bool Equals(PgStyleObjectM obj)
 {
     if (obj == null)
     {
         return(false);
     }
     return(this.Table == obj.Table &&
            this.IdObject.Equals(obj.IdObject));
 }
Beispiel #2
0
 public PgAttributesStyleVM(PgAtVM.PgAttributesVM attributeVM)
 {
     _attributeVM = attributeVM;
     _isDebug     = attributeVM.IsDebug;
     _connect     = attributeVM.Connect;
     _isReadOnly  = attributeVM.IsReadOnly;
     _table       = attributeVM.Table;
     _pkAttribute = attributeVM.AttributesListVM.PkAttribute;
     _style       = new PgM.PgStyleObjectM(_table, _pkAttribute.Value);
 }
        public CosmeticAttributesVM(AbsM.ITableBaseM table, int?obj, bool isReadOnly = false, string wkt = null, bool isDebug = false)
        {
            _table = table as CosM.CosmeticTableBaseM;
            if (_table == null)
            {
                throw new ArgumentNullException(Rekod.Properties.Resources.CosAttributes_TableIsNull);
            }
            else if (_table.PrimaryKeyField == null)
            {
                throw new ArgumentNullException(Rekod.Properties.Resources.CosAttributes_TableWithoutPK);
            }
            if (obj == null)
            {
                throw new ArgumentNullException(Rekod.Properties.Resources.CosAttributes_MvObjectIsNull);
            }

            _isDebug = isDebug;
            _source  = _table.Source as CosVM.CosmeticDataRepositoryVM;

            _tableObject = GetOrCreateTableObject(obj);

            _attributesListVM = new CosmeticAttributesListVM(this);

            if (_table.Type == AbsM.ETableType.MapLayer || _table.Type == AbsM.ETableType.View)
            {
                string curWKT = string.Empty;
                if (string.IsNullOrWhiteSpace(wkt))
                {
                    var layerMV = Source.MapViewer.getLayer(_table.NameMap);
                    if (layerMV != null)
                    {
                        var objMV = layerMV.getObject(_tableObject.Id);
                        if (objMV != null)
                        {
                            curWKT = objMV.getWKT();
                        }
                    }
                }
                else
                {
                    curWKT = wkt;
                }
                _pgGeometryVM = new PgVM.PgAttributes.PgAttributesGeomVM(_attributesListVM, curWKT, (int?)_attributesListVM.PkAttribute.Value);
            }

            _styleVM = GetStyle();
            Title    = String.Format("{0}: [id: {3}]; {1}: \"{4}\"; {2}: \"{5}\"",
                                     Rekod.Properties.Resources.CosAttributes_Object,
                                     Rekod.Properties.Resources.CosAttributes_Table,
                                     Rekod.Properties.Resources.CosAttributes_Type,
                                     _tableObject != null ? _tableObject.Id.ToString() : "null",
                                     _table.Text,
                                     _table.Source.Type);
        }
        public static BitmapImage GetPreviewStyleLine(PgM.PgStyleObjectM collection)
        {
            var newPictures = new Bitmap(32, 32);
            var rectMain    = new Rectangle(0, 0, 32, 32);

            var graphics = Graphics.FromImage(newPictures);
            var brFC     = PgM.PgStyleObjectM.convColor((uint)collection.BrushFgColor);
            var brBC     = PgM.PgStyleObjectM.convColor((uint)collection.BrushBgColor);

            // Фон картинки
            graphics.FillRectangle(SystemBrushes.Window, rectMain);

            // Линия
            ColorPalette pal;
            var          pen = lineRes.ResourceManager.GetObject(String.Format("LINE{0:00}", collection.PenType)) as Image;

            if (pen != null)
            {
                pal            = pen.Palette;
                pal.Entries[1] = Color.FromArgb(0, 0, 0, 0);
                pal.Entries[0] = PgM.PgStyleObjectM.convColor((uint)collection.PenColor);
                pen.Palette    = pal;

                for (int i = 0; i < collection.PenWidth; i++)
                {
                    graphics.DrawImage(pen, new Rectangle(4, i + 2 - collection.PenWidth / 2 + 16, 32, 1), 5, 6, 32, 1, GraphicsUnit.Pixel);
                }
                graphics.Transform.Reset();
            }
            // Конвертирует из System.Drawing в BitmapImage
            using (var stream = new MemoryStream())
            {
                newPictures.Save(stream, ImageFormat.Bmp);

                stream.Position = 0;
                var result = new BitmapImage();
                result.BeginInit();
                result.CacheOption  = BitmapCacheOption.OnLoad;
                result.StreamSource = stream;
                result.EndInit();
                result.Freeze();
                return(result);
            }
        }
        public static BitmapImage GetPreviewStylePoint(PgM.PgStyleObjectM collection)
        {
            var newPictures = new Bitmap(32, 32);
            var rectMain    = new Rectangle(0, 0, 32, 32);

            var graphics = Graphics.FromImage(newPictures);
            var brFC     = PgM.PgStyleObjectM.convColor((uint)collection.BrushFgColor);
            var brBC     = PgM.PgStyleObjectM.convColor((uint)collection.BrushBgColor);

            // Фон картинки
            graphics.FillRectangle(SystemBrushes.Window, rectMain);

            // Символ точечного объекта
            var font = new Font(collection.FontName, collection.FontSize);
            var sf   = new StringFormat(StringFormatFlags.NoClip)
            {
                LineAlignment = StringAlignment.Center
            };
            var fontColor = new SolidBrush(PgM.PgStyleObjectM.convColor((uint)collection.FontColor));

            graphics.DrawString(((char)collection.Symbol).ToString(), font, fontColor, rectMain, sf);

            // Конвертирует из System.Drawing в BitmapImage
            using (var stream = new MemoryStream())
            {
                newPictures.Save(stream, ImageFormat.Bmp);

                stream.Position = 0;
                var result = new BitmapImage();
                result.BeginInit();
                result.CacheOption  = BitmapCacheOption.OnLoad;
                result.StreamSource = stream;
                result.EndInit();
                result.Freeze();
                return(result);
            }
        }
        /// <summary>
        /// Функция считывания с БД
        /// </summary>
        /// <param name="listAttributeRef"> Список </param>
        /// <param name="listSqlRefTable"></param>
        private void GetCollectionOfVariandsForBD(List <PgAtM.PgAttributeM> listAttributeRef, List <string> listSqlRefTable)
        {
            List <IParams> ParamsArray = new List <IParams>();

            for (int i = 0; i < listAttributeRef.Count; i++)
            {
                var item = listAttributeRef[i];
                ParamsArray.Add(new Params(":value" + item.Field.Id, PgAtM.PgAttributeM.GetValue(item), (item.Field as PgM.PgFieldM).DbType));
            }
            if (listSqlRefTable.Count > 0)
            {
                using (var sqlCmd = new SqlWork(_connect, _isDebug))
                {
                    sqlCmd.sql = string.Join(";\n", listSqlRefTable.ToArray());
                    sqlCmd.ExecuteMultipleReader(ParamsArray);
                    int i = 0;
                    do
                    {
                        var item = listAttributeRef[i++];
                        item.Variants.Clear();
                        while (sqlCmd.CanRead())
                        {
                            var id        = sqlCmd.GetValue <object>((item.Field as PgM.PgFieldM).RefTable.PrimaryKeyField.Name);
                            var fieldName = sqlCmd.GetValue <string>((item.Field as PgM.PgFieldM).RefFieldName.Name);
                            var idValue   = sqlCmd.GetValue <object>((item.Field as PgM.PgFieldM).RefField.Name);

                            PgM.PgStyleObjectM style = null;
                            if ((item.Field as PgM.PgFieldM).RefTable.IsMapStyle && LoadStyle)
                            {
                                style = new PgM.PgStyleObjectM((item.Field as PgM.PgFieldM).RefTable, id);

                                style.SetFont(
                                    name: sqlCmd.GetString("!fontname"),
                                    color: sqlCmd.GetValue <int>("!fontcolor"),
                                    frameColor: sqlCmd.GetValue <int>("!fontframecolor"),
                                    size: sqlCmd.GetInt32("!fontsize"));
                                style.SetSymbol(
                                    shape: sqlCmd.GetValue <int>("!symbol"));
                                style.SetPen(
                                    color: sqlCmd.GetValue <int>("!pencolor"),
                                    type: sqlCmd.GetValue <int>("!pentype"),
                                    width: sqlCmd.GetValue <int>("!penwidth"));
                                style.SetBrush(
                                    bgColor: sqlCmd.GetValue <int>("!brushbgcolor"),
                                    fgColor: sqlCmd.GetValue <int>("!brushfgcolor"),
                                    style: sqlCmd.GetValue <int>("!brushstyle"),
                                    hatch: sqlCmd.GetValue <int>("!brushhatch"));
                            }

                            if ((item.Field as PgM.PgFieldM).RefType == AbsM.ERefType.Reference)
                            {
                                item.Variants.Add(new PgAtM.PgAttributeReferenceM(item, fieldName, style, idValue));
                            }
                            else if ((item.Field as PgM.PgFieldM).RefType == AbsM.ERefType.Interval)
                            {
                                var intervalMin = ExtraFunctions.Converts.To <double>(idValue);
                                var intervalMax = sqlCmd.GetValue <double>((item.Field as PgM.PgFieldM).RefFieldEnd.Name);
                                item.Variants.Add(new PgAtM.PgAttributeIntervalM(item, fieldName, style, id, intervalMin, intervalMax));
                            }
                            else if ((item.Field as PgM.PgFieldM).RefType == AbsM.ERefType.Data)
                            {
                                item.Variants.Add(new PgAtM.PgAttributeReferenceM(item, fieldName, style, idValue));
                            }
                        }
                    } while (sqlCmd.CanNextResult());
                }
            }
        }
        /// <summary>
        /// Получить сохраненный стиль объекта или экземпляр стиля по умолчанию
        /// </summary>
        /// <returns></returns>
        private PgM.PgStyleObjectM GetStyle()
        {
            PgM.PgStyleObjectM     result = null;
            CosM.CosmeticStyleType type   = CosM.CosmeticStyleType.All;
            if (_pgGeometryVM != null && !String.IsNullOrEmpty(_pgGeometryVM.GeometryTypeName))
            {
                switch (_pgGeometryVM.GeometryTypeName.ToUpper())
                {
                case "POINT":
                case "MULTIPOINT":
                    type = CosM.CosmeticStyleType.Point;
                    break;

                case "LINE":
                case "MULTILINE":
                case "LINESTRING":
                case "MULTILINESTRING":
                    type = CosM.CosmeticStyleType.Line;
                    break;

                case "POLYGON":
                case "MULTIPOLYGON":
                    type = CosM.CosmeticStyleType.Polygon;
                    break;
                }
                var layer    = _source.MapViewer.getLayer(Table.Name);
                var layerObj = layer.getObject(TableObject.Id);
                if (layerObj != null)
                {
                    int objStyleId = layerObj.style;
                    if (Table.DefaultDotStyle == objStyleId || Table.DefaultLineStyle == objStyleId || Table.DefaultPolygonStyle == objStyleId)
                    {
                        result = Table.DefaultStyle.GetStyleInstance(type);
                    }
                    else
                    {
                        HasOwnStyle = true;
                        mvLayerStyle mvStyle = layer.getStyle(objStyleId);
                        result = new PgM.PgStyleObjectM(type)
                        {
                            FontName = "Map Symbols"
                        };
                        if (mvStyle.Brush != null)
                        {
                            result.BrushBgColor = (int)mvStyle.Brush.bgcolor;
                            result.BrushFgColor = (int)mvStyle.Brush.fgcolor;
                            result.BrushHatch   = mvStyle.Brush.hatch;
                            result.BrushStyle   = mvStyle.Brush.style;
                            if (mvStyle.Brush.hatch == 0 && mvStyle.Brush.style == 0)
                            {
                                var tt = (mvStyle.Brush.bgcolor >> 24);
                                result.Opacity = (mvStyle.Brush.bgcolor % 256) / 256d;
                            }
                            if (mvStyle.Brush.bgcolor == 4294967295)
                            {
                                result.HasBackground = false;
                            }
                            else
                            {
                                result.HasBackground = true;
                            }
                        }
                        if (mvStyle.Font != null)
                        {
                            result.FontColor      = (int)mvStyle.Font.Color;
                            result.FontFrameColor = (int)mvStyle.Font.framecolor;
                            result.FontName       = mvStyle.Font.fontname;
                            result.FontSize       = mvStyle.Font.size;
                        }
                        if (mvStyle.Pen != null)
                        {
                            result.PenColor = (int)mvStyle.Pen.Color;
                            result.PenType  = (int)mvStyle.Pen.ctype;
                            result.PenWidth = (int)mvStyle.Pen.width;
                        }
                        if (mvStyle.Symbol != null)
                        {
                            result.Symbol = (int)mvStyle.Symbol.shape;
                        }
                    }
                }
            }
            return(result);
        }
        public static BitmapImage GetPreviewStylePoligon(PgM.PgStyleObjectM collection)
        {
            var newPictures = new Bitmap(32, 32);

            var          graphics = Graphics.FromImage(newPictures);
            var          brFC     = PgM.PgStyleObjectM.convColor((uint)collection.BrushFgColor);
            var          brBC     = PgM.PgStyleObjectM.convColor((uint)collection.BrushBgColor);
            ColorPalette pal;

            // Заливка полигона
            var brush = ImageBrushRes.ResourceManager.GetObject(String.Format("poly_{0}_{1}", collection.BrushStyle, collection.BrushHatch)) as Image;

            if (brush != null)
            {
                pal = brush.Palette;
                if (pal.Entries.Length == 2)
                {
                    pal.Entries[0] = brFC;
                    pal.Entries[1] = brBC;
                }
                else if (pal.Entries.Length == 1)
                {
                    pal.Entries[0] = brBC;
                }
                brush.Palette = pal;
                graphics.DrawImage(brush, 0, 0, brush.Size.Width, brush.Size.Height);//20, (float)Bounds.Height - 4);
            }

            // Границы полигона
            var pen = lineRes.ResourceManager.GetObject(String.Format("LINE{0:00}", collection.PenType)) as Image;

            if (pen != null)
            {
                pal            = pen.Palette;
                pal.Entries[1] = Color.FromArgb(0, 0, 0, 0);
                pal.Entries[0] = Color.Brown;
                pen.Palette    = pal;

                for (int i = 0; i < 5; i++)
                {
                    graphics.DrawImage(pen, new Rectangle(0, i, 32, 1), 5, 6, 32, 1,
                                       GraphicsUnit.Pixel);
                    graphics.DrawImage(pen, new Rectangle(0, 32 - i, 32, 1), 5, 6, 32, 1,
                                       GraphicsUnit.Pixel);
                }

                var matr = new Matrix();
                matr.RotateAt(90, new PointF(16, 16));
                graphics.Transform = matr;
                for (int i = 0; i < 5; i++)
                {
                    graphics.DrawImage(pen, new Rectangle(0, i, 32, 1), 5, 6, 32, 1, GraphicsUnit.Pixel);
                    graphics.DrawImage(pen, new Rectangle(0, 32 - i, 32, 1), 5, 6, 32, 1,
                                       GraphicsUnit.Pixel);
                }
                graphics.Transform.Reset();
            }
            // Конвертирует из System.Drawing в BitmapImage
            using (var stream = new MemoryStream())
            {
                newPictures.Save(stream, ImageFormat.Bmp);

                stream.Position = 0;
                var result = new BitmapImage();
                result.BeginInit();
                result.CacheOption  = BitmapCacheOption.OnLoad;
                result.StreamSource = stream;
                result.EndInit();
                result.Freeze();
                return(result);
            }
        }