Ejemplo n.º 1
0
 public static void LoadFromViewModel(this ScaleLinePrinterLayer scaleLinePrinterLayer, ScaleLineElementViewModel scaleLineElementEntity)
 {
     scaleLinePrinterLayer.MapUnit        = scaleLineElementEntity.MapPrinterLayer.MapUnit;
     scaleLinePrinterLayer.DragMode       = scaleLineElementEntity.DragMode;
     scaleLinePrinterLayer.BackgroundMask = scaleLineElementEntity.BackgroundStyle;
     scaleLinePrinterLayer.UnitSystem     = scaleLineElementEntity.SelectedUnitSystem;
 }
Ejemplo n.º 2
0
        private void ScaleLineElementEntity_PropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            if (e.PropertyName == "Preview" || (MapPrinterLayer.MapUnit == GeographyUnit.DecimalDegree && !PrinterLayerHelper.CheckDecimalDegreeIsInRange(MapPrinterLayer.MapExtent)))
            {
                return;
            }
            if (!MapPrinterLayer.IsOpen)
            {
                MapPrinterLayer.Open();
            }
            try
            {
                ScaleLinePrinterLayer scaleLinePrinterLayer = new ScaleLinePrinterLayer(MapPrinterLayer);
                scaleLinePrinterLayer.BackgroundMask = BackgroundStyle as AreaStyle;
                scaleLinePrinterLayer.MapUnit        = MapPrinterLayer.MapUnit;
                scaleLinePrinterLayer.UnitSystem     = SelectedUnitSystem;
                var boundingBox = MapPrinterLayer.GetBoundingBox();
                var pageCenter  = boundingBox.GetCenterPoint();
                scaleLinePrinterLayer.SetPosition(1.25, .25, -3.25, -2.25, PrintingUnit.Inch);
                using (Bitmap bitmap = new Bitmap(220, 60))
                {
                    PlatformGeoCanvas canvas = new PlatformGeoCanvas();
                    scaleLinePrinterLayer.SafeProcess(() =>
                    {
                        var scaleLineBoundingBox = scaleLinePrinterLayer.GetBoundingBox();
                        canvas.BeginDrawing(bitmap, scaleLineBoundingBox, GeographyUnit.Meter);
                        scaleLinePrinterLayer.Draw(canvas, new Collection <SimpleCandidate>());
                    });

                    //scaleLinePrinterLayer.Open();
                    //var scaleLineBoundingBox = scaleLinePrinterLayer.GetBoundingBox();
                    //canvas.BeginDrawing(bitmap, scaleLineBoundingBox, GeographyUnit.Meter);
                    //scaleLinePrinterLayer.Draw(canvas, new Collection<SimpleCandidate>());
                    //scaleLinePrinterLayer.Close();
                    canvas.EndDrawing();
                    MemoryStream ms = new MemoryStream();
                    bitmap.Save(ms, ImageFormat.Png);

                    BitmapImage bitmapImage = new BitmapImage();
                    bitmapImage.BeginInit();
                    bitmapImage.StreamSource = ms;
                    bitmapImage.EndInit();
                    Preview = bitmapImage;
                }
            }
            catch (Exception ex)
            {
                GisEditor.LoggerManager.Log(LoggerLevel.Debug, ex.Message, new ExceptionInfo(ex));
            }
        }
Ejemplo n.º 3
0
        internal static ScaleLinePrinterLayer GetScaleLinePrinterLayer(ScaleLineElementViewModel scaleLineViewModel)
        {
            ScaleLinePrinterLayer scaleLinePrinterLayer = new ScaleLinePrinterLayer(scaleLineViewModel.MapPrinterLayer)
            {
                DrawingExceptionMode = DrawingExceptionMode.DrawException
            };

            scaleLinePrinterLayer.LoadFromViewModel(scaleLineViewModel);

            RectangleShape pageBoundingbox = scaleLineViewModel.MapPrinterLayer.GetPosition(PrintingUnit.Inch);
            var            pageCenter      = pageBoundingbox.LowerLeftPoint;

            scaleLinePrinterLayer.SetPosition(1.25, .25, pageCenter.X + 0.75, pageCenter.Y + .5, PrintingUnit.Inch);
            return(scaleLinePrinterLayer);
        }
Ejemplo n.º 4
0
 protected override PrinterLayer GetPrinterLayerFromActiveMapCore(RectangleShape boudingBox)
 {
     if (scaleLineAdornmentLayer != null)
     {
         ScaleLinePrinterLayer scaleLinePrinterLayer = new ScaleLinePrinterLayer(mapPrinterLayer);
         LoadFromActiveMap(scaleLinePrinterLayer);
         double left = PrinterHelper.ConvertLength(scaleLineAdornmentLayer.XOffsetInPixel, PrintingUnit.Point, PrintingUnit.Inch);
         double top  = PrinterHelper.ConvertLength(scaleLineAdornmentLayer.YOffsetInPixel, PrintingUnit.Point, PrintingUnit.Inch);
         PrinterLayerAdapter.SetPosition(scaleLineAdornmentLayer.Location, boudingBox, scaleLinePrinterLayer, boudingBox.Width * 0.1, 0.5, left, top);
         return(scaleLinePrinterLayer);
     }
     else
     {
         return(null);
     }
 }
Ejemplo n.º 5
0
        protected override void LoadFromActiveMapCore(PrinterLayer printerLayer)
        {
            ScaleLinePrinterLayer scaleLinePrinterLayer = null;

            if (scaleLineAdornmentLayer != null && (scaleLinePrinterLayer = printerLayer as ScaleLinePrinterLayer) != null)
            {
                scaleLinePrinterLayer.MapPrinterLayer = mapPrinterLayer;
                scaleLinePrinterLayer.MapUnit         = scaleLinePrinterLayer.MapPrinterLayer.MapUnit;
                var backgroundStyle = scaleLineAdornmentLayer.BackgroundMask.CloneDeep() as AreaStyle;
                if (backgroundStyle != null)
                {
                    backgroundStyle.SetDrawingLevel();
                    scaleLinePrinterLayer.BackgroundMask = backgroundStyle;
                }
            }
        }
Ejemplo n.º 6
0
        internal static bool IsValid(ScaleLinePrinterLayer scaleLinePrinterLayer)
        {
            bool scaleLineValid = true;

            if (!scaleLinePrinterLayer.MapPrinterLayer.IsOpen)
            {
                scaleLinePrinterLayer.MapPrinterLayer.Open();
            }
            double resolution = scaleLinePrinterLayer.MapPrinterLayer.MapExtent.Width / scaleLinePrinterLayer.MapPrinterLayer.GetBoundingBox().Width;

            if (!scaleLinePrinterLayer.IsOpen)
            {
                scaleLinePrinterLayer.Open();
            }

            // use to campare use with unit to display.
            int  maxBarLength = (int)scaleLinePrinterLayer.GetBoundingBox().Width;
            long maxSizeData  = Convert.ToInt64(maxBarLength * resolution * GetInchesPreUnit(scaleLinePrinterLayer.MapPrinterLayer.MapUnit));

            DistanceUnit bottomUnits = DistanceUnit.Feet;
            DistanceUnit topUnits    = DistanceUnit.Meter;

            if (maxSizeData > 100000)
            {
                topUnits    = DistanceUnit.Kilometer;
                bottomUnits = DistanceUnit.Mile;
            }

            float topMax    = Convert.ToInt32(maxSizeData / GetInchesPreUnit(topUnits));
            float bottomMax = Convert.ToInt32(maxSizeData / GetInchesPreUnit(bottomUnits));

            // now trim this down to useful block length
            int topRounded    = GetBarLength((int)topMax);
            int bottomRounded = GetBarLength((int)bottomMax);

            if (topRounded < 2 && topUnits == DistanceUnit.Meter)
            {
                scaleLineValid = false;
            }
            return(scaleLineValid);
        }
Ejemplo n.º 7
0
        private void AddScaleLineLayer()
        {
            // Get the PrinterInteractiveOverlay
            PrinterInteractiveOverlay printerInteractiveOverlay = (PrinterInteractiveOverlay)mapView.InteractiveOverlays["PrintPreviewOverlay"];

            // Grab the MapPrinterLayer as we need to pass that into the scaleLinePrinterLayer so it
            // can be synced up to the map itself in real-time
            MapPrinterLayer mapPrinterLayer = (MapPrinterLayer)printerInteractiveOverlay.PrinterLayers["MapLayer"];

            //Create the scaleLinePrinterLayer and pass in the MapPrinterLayer
            ScaleLinePrinterLayer scaleLinePrinterLayer = new ScaleLinePrinterLayer(mapPrinterLayer);

            scaleLinePrinterLayer.MapUnit = GeographyUnit.Feet;

            // Set the scale line position offset from the page center and 1.25 inches wide and .25 inches tall
            RectangleShape pageBoundingbox = GetPageBoundingBox(PrintingUnit.Inch);

            scaleLinePrinterLayer.SetPosition(1.25, .25, pageBoundingbox.GetCenterPoint().X - 3.25, pageBoundingbox.GetCenterPoint().Y - 2.25, PrintingUnit.Inch);

            // Add the ScaleLinePrinterLayer to the PrinterInteractiveOverlay
            printerInteractiveOverlay.PrinterLayers.Add("ScaleLineLayer", scaleLinePrinterLayer);
        }