Esempio n. 1
0
        public Rect getTextBoundsWithOutline()
        {
            double outlineWidth = RendererSettings.getInstance().getTextOutlineWidth();
            Rect   bounds       = new Rect(location.X - outlineWidth, location.Y - outlineWidth, bounds.Width + (outlineWidth * 2), bounds.Height + (outlineWidth * 2));

            return(bounds);
        }
        public static RendererSettings getInstance() //synchronized
        {
            if (_instance == null)
            {
                lock (syncLock)
                {
                    _instance = new RendererSettings();
                }
            }

            return(_instance);
        }
Esempio n. 3
0
        public static Color getIdealTextBackgroundColor(Color fgColor)
        {
            try
            {
                //an array of three elements containing the
                //hue, saturation, and brightness (in that order),
                //of the color with the indicated red, green, and blue components/
                float[] hsbvals = new float[3];

                if (fgColor != null)
                {
                    int nThreshold = RendererSettings.getInstance().getTextBackgroundAutoColorThreshold();//160;
                    int bgDelta    = (int)((fgColor.R * 0.299) + (fgColor.G * 0.587) + (fgColor.B * 0.114));
                    //ErrorLogger.LogMessage("bgDelta: " + String.valueOf(255-bgDelta));
                    //if less than threshold, black, otherwise white.
                    return((255 - bgDelta < nThreshold) ? Colors.Black : Colors.White);
                }
            }
            catch (Exception exc)
            {
                ErrorLogger.LogException("SymbolDraw", "getIdealtextBGColor", exc);
            }
            return(Colors.White);
        }
        public ImageInfo RenderSymbol(String symbolID, Dictionary <int, String> modifiers, Dictionary <int, String> attributes)
        {
            ImageInfo returnVal = null;
            int       symStd    = 1;


            if (SymbolUtilities.isTacticalGraphic(symbolID))
            {
                if (modifiers != null && modifiers[MilStdAttributes.SymbologyStandard] != null)
                {
                    symStd = Convert.ToInt32(modifiers[MilStdAttributes.SymbologyStandard]);
                }
                else
                {
                    if (modifiers == null)
                    {
                        modifiers = new Dictionary <int, String>();
                    }
                    modifiers[MilStdAttributes.SymbologyStandard] = Convert.ToString(RendererSettings.getInstance().getSymbologyStandard());
                }
                SymbolDef sd = SymbolDefTable.getInstance().getSymbolDef(SymbolUtilities.getBasicSymbolIDStrict(symbolID), symStd);
                if (sd.getMaxPoints() == 1 && sd.HasWidth() == false)
                {
                    returnVal = RenderSPTG(symbolID, modifiers, attributes);
                }
                else
                {
                    returnVal = RenderMPTG(symbolID, modifiers, attributes);
                }
            }
            else
            {
                returnVal = RenderUnit(symbolID, modifiers, attributes, null);
            }
            return(returnVal);
        }
Esempio n. 5
0
        public ImageInfo Render(String symbolID, Dictionary <int, String> modifiers, Dictionary <int, String> attributes, CanvasDevice device)
        {
            SinglePointRenderer spr = SinglePointRenderer.getInstance();

            int symStd = 1;

            if (modifiers != null && modifiers[MilStdAttributes.SymbologyStandard] != null)
            {
                symStd = Convert.ToInt32(modifiers[MilStdAttributes.SymbologyStandard]);
            }
            else
            {
                if (modifiers == null)
                {
                    modifiers = new Dictionary <int, String>();
                }
                modifiers[MilStdAttributes.SymbologyStandard] = Convert.ToString(RendererSettings.getInstance().getSymbologyStandard());
            }

            var basicID = SymbolUtilities.getBasicSymbolIDStrict(symbolID);

            if (SymbolUtilities.isTacticalGraphic(symbolID))
            {
                SymbolDef sd = SymbolDefTable.getInstance().getSymbolDef(basicID, symStd);
                if (sd == null)
                {
                    sd = SymbolDefTable.getInstance().getSymbolDef(basicID, symStd);
                }

                if (sd != null && sd.getDrawCategory() == SymbolDef.DRAW_CATEGORY_POINT)
                {
                    return(spr.RenderSPTG(symbolID, modifiers, attributes));
                }
                else
                {
                    Color color = RenderUtilities.DrawingColorToUIColor(SymbolUtilities.getLineColorOfAffiliation(symbolID));
                    int   size  = 35;
                    if (attributes.ContainsKey(MilStdAttributes.PixelSize))
                    {
                        size = int.Parse(attributes[MilStdAttributes.PixelSize]);
                    }

                    if (modifiers.ContainsKey(MilStdAttributes.LineColor))
                    {
                        color = RenderUtilities.getColorFromHexString(modifiers[MilStdAttributes.LineColor]);
                    }
                    if (modifiers.ContainsKey(MilStdAttributes.PixelSize))
                    {
                        size = int.Parse(modifiers[MilStdAttributes.PixelSize]);
                    }
                    return(TacticalGraphicIconRenderer.getIcon(symbolID, size, color, 0));
                }
            }
            else if (UnitFontLookup.getInstance().getLookupInfo(basicID) != null)
            {
                return(spr.RenderUnit(symbolID, modifiers, attributes, device));
            }
            else
            {
                //symbolID = SymbolUtilities.reconcileSymbolID(symbolID, false);
                return(spr.RenderUnit(symbolID, modifiers, attributes, null));
            }
        }
        public ImageInfo RenderSPTG(String symbolID, Dictionary <int, String> modifiers, Dictionary <int, String> attributes)
        {
            if (modifiers == null)
            {
                modifiers = new Dictionary <int, string>();
            }
            if (attributes == null)
            {
                attributes = new Dictionary <int, string>();
            }
            CanvasRenderTarget finalBmp = null;

            CanvasRenderTarget coreBMP = null;

            try
            {
                //get font character indexes (svg file for this renderer port)
                int fillIndex  = -1;
                int frameIndex = -1;

                int alpha = 255;

                int     symbolOutlineSize  = 0;
                Color   symbolOutlineColor = Colors.Transparent;
                Boolean drawAsIcon         = false;
                Boolean keepUnitRatio      = true;
                int     pixelSize          = 35;
                int     w = pixelSize;
                int     h = pixelSize;

                char[] fillString  = new char[1];
                char[] frameString = new char[1];
                char[] symbol1     = new char[1];
                char[] symbol2     = new char[1];


                //_spFontSize;
                Color lineColor = Colors.Transparent;
                Color fillColor = Colors.Transparent;

                if (attributes.ContainsKey(MilStdAttributes.LineColor))
                {
                    lineColor = RenderUtilities.DrawingColorToUIColor(SymbolUtilities.getColorFromHexString(attributes[MilStdAttributes.LineColor]));
                }
                else
                {
                    lineColor = RenderUtilities.DrawingColorToUIColor(SymbolUtilities.getLineColorOfAffiliation(symbolID));
                }

                if (attributes.ContainsKey(MilStdAttributes.FillColor))
                {
                    fillColor = RenderUtilities.DrawingColorToUIColor(SymbolUtilities.getColorFromHexString(attributes[MilStdAttributes.FillColor]));
                }

                if (attributes.ContainsKey(MilStdAttributes.Alpha))
                {
                    alpha = Convert.ToInt32(attributes[MilStdAttributes.Alpha]);
                }

                if (attributes.ContainsKey(MilStdAttributes.SymbolOutlineColor))
                {
                    symbolOutlineColor = RenderUtilities.DrawingColorToUIColor(SymbolUtilities.getColorFromHexString(attributes[MilStdAttributes.SymbolOutlineColor]));
                }
                else
                {
                    symbolOutlineColor = RenderUtilities.getIdealTextBackgroundColor(lineColor);
                }

                if (attributes.ContainsKey(MilStdAttributes.SymbolOutlineSize))
                {
                    symbolOutlineSize = Convert.ToInt32(attributes[MilStdAttributes.SymbolOutlineSize]);
                }
                else
                {
                    symbolOutlineSize = RendererSettings.getInstance().getSymbolOutlineWidth();
                }

                if (symbolOutlineSize <= 0)
                {
                    symbolOutlineColor = Colors.Transparent;
                }

                if (attributes.ContainsKey(MilStdAttributes.DrawAsIcon))
                {
                    drawAsIcon = Convert.ToBoolean(attributes[MilStdAttributes.DrawAsIcon]);
                }

                if (attributes.ContainsKey(MilStdAttributes.PixelSize))
                {
                    pixelSize = Convert.ToInt32(attributes[MilStdAttributes.PixelSize]);
                }

                if (attributes.ContainsKey(MilStdAttributes.KeepUnitRatio))
                {
                    keepUnitRatio = Convert.ToBoolean(attributes[MilStdAttributes.KeepUnitRatio]);
                }

                SinglePointLookupInfo spli = SinglePointLookup.getInstance().getSPLookupInfo(SymbolUtilities.getBasicSymbolIDStrict(symbolID));

                if (spli == null)//default to action point on bad symbolID
                {
                    if (modifiers == null)
                    {
                        modifiers = new Dictionary <int, string>();
                    }
                    if (modifiers.ContainsKey(ModifiersTG.H_ADDITIONAL_INFO_1))
                    {
                        modifiers[ModifiersTG.H1_ADDITIONAL_INFO_2] = modifiers[ModifiersTG.H_ADDITIONAL_INFO_1];
                    }
                    modifiers[ModifiersTG.H_ADDITIONAL_INFO_1] = symbolID.Substring(0, 10);

                    symbolID = "G" + SymbolUtilities.getAffiliation(symbolID) +
                               "G" + SymbolUtilities.getStatus(symbolID) + "GPP---****X";
                    spli      = SinglePointLookup.getInstance().getSPLookupInfo(symbolID);
                    lineColor = RenderUtilities.DrawingColorToUIColor(SymbolUtilities.getLineColorOfAffiliation(symbolID));
                    //fillColor = SymbolUtilities.getFillColorOfAffiliation(symbolID);
                }

                //Check if we need to set 'N' to ENY

                if (symbolID[1] == 'H' && drawAsIcon == false)
                {
                    if (modifiers == null)
                    {
                        modifiers = new Dictionary <int, string>();
                    }
                    modifiers[ModifiersTG.N_HOSTILE] = "ENY";
                }

                if (SymbolUtilities.getStatus(symbolID) == "A")
                {
                    frameIndex = spli.getMappingA();
                }
                else
                {
                    frameIndex = spli.getMappingP();
                }

                if (SymbolUtilities.isTGSPWithFill(symbolID))
                {
                    String fillID = SymbolUtilities.getTGFillSymbolCode(symbolID);
                    if (fillID != null)
                    {
                        fillIndex = SinglePointLookup.getInstance().getCharCodeFromFillID(fillID);
                    }
                }
                else if (SymbolUtilities.isWeatherSPWithFill(symbolID))
                {
                    fillIndex = frameIndex + 1;
                    fillColor = RenderUtilities.DrawingColorToUIColor(SymbolUtilities.getFillColorOfWeather(symbolID));
                }


                fillString[0]  = (char)fillIndex;
                frameString[0] = (char)frameIndex;


                SVGPath svgFill  = null;
                SVGPath svgFrame = null;

                if (fillIndex > 0)
                {
                    svgFill = SymbolSVGTable.getInstance().getSVGPath(fillIndex);
                }
                if (frameIndex > 0)
                {
                    svgFrame = SymbolSVGTable.getInstance().getSVGPath(frameIndex);
                }

                float scale = 1;
                Rect  rr    = svgFrame.getBounds();

                if (keepUnitRatio)
                {
                    //scale = pixelSize * .00095f;// 1f;
                    scale = pixelSize / 34f;//height of friendly unit before scaling.
                    if (rr.Height > rr.Width)
                    {
                        pixelSize = (int)((scale * rr.Height) + 0.5);
                    }
                    else
                    {
                        pixelSize = (int)((scale * rr.Width) + 0.5);
                    }
                }

                Matrix3x2 mScale, mTranslate;
                Matrix3x2 mIdentity = Matrix3x2.Identity;
                Rect      rectF     = new Rect();
                Matrix3x2 m         = svgFrame.CreateMatrix(pixelSize, pixelSize, out rectF, out mScale, out mTranslate);
                //Matrix3x2 m = svgFrame.TransformToFitDimensions(pixelSize, pixelSize);

                rr = svgFrame.computeBounds(m);
                w  = (int)((rr.Width) + 0.5f);
                h  = (int)((rr.Height) + 0.5f);
                //draw location

                System.Drawing.RectangleF sdrr = new System.Drawing.RectangleF((float)rr.X, (float)rr.Y, (float)rr.Width, (float)rr.Height);
                System.Drawing.PointF     sdpf = SymbolDimensions.getSymbolCenter(spli.getBasicSymbolID(), sdrr);
                Point centerPoint = new Point(sdpf.X, sdpf.Y);
                Point location    = new Point(0, 0);

                location.X = centerPoint.X;
                location.Y = 0;// centerPoint.Y;
                //location.Y = (h * 1.5f);

                float     outlineOffsetX = 0;
                float     outlineOffsetY = 0;
                Matrix3x2 mOutline       = new Matrix3x2();

                CanvasDevice device = CanvasDevice.GetSharedDevice();
                //CanvasRenderTarget offscreen = new CanvasRenderTarget(device, width, height, 96);

                if (symbolOutlineSize > 0)
                {
                    Rect rectOutline = ShapeUtilities.inflate(rr, symbolOutlineSize, symbolOutlineSize); // svgFrame.getBounds(symbolOutlineSize);
                    outlineOffsetX = (float)((rectOutline.Width - w) / 2f);
                    outlineOffsetY = (float)((rectOutline.Height - h) / 2f);                             //too much added for AA
                    w              = (int)(rectOutline.Width + 0.5f);
                    h              = (int)(rectOutline.Height + 0.5f);
                    mOutline       = Matrix3x2.CreateTranslation(outlineOffsetX, outlineOffsetY);
                    centerPoint.X += outlineOffsetX;
                    centerPoint.Y += outlineOffsetY;
                    coreBMP        = new CanvasRenderTarget(device, w, h, 96);// new Bitmap(w, h);//getBounds adds too much for AA
                }
                else
                {
                    coreBMP = new CanvasRenderTarget(device, w, h, 96);//add for AA
                }
                //coreBMP = new Bitmap(w, h);

                //draw test outline
                //g.DrawRectangle(new Pen(Color.LightSkyBlue), 0, 0, coreBMP.Width - 1, coreBMP.Height - 1);
                using (CanvasDrawingSession cds = coreBMP.CreateDrawingSession())
                {
                    if (svgFill != null)
                    {
                        svgFill.Transform(m);
                        svgFill.Draw(cds, Colors.Transparent, 0, fillColor, mOutline);
                    }

                    if (svgFrame != null)
                    {
                        svgFrame.Transform(m);
                        svgFrame.Draw(cds, symbolOutlineColor, symbolOutlineSize, lineColor, mOutline);
                    }


                    cds.DrawRectangle(new Rect(0, 0, (int)(coreBMP.Size.Width + 0.5f), (int)(coreBMP.Size.Height + 0.5f)), Colors.Red);
                }


                Rect coreDimensions = new Rect(0, 0, (int)(coreBMP.Size.Width + 0.5f), (int)(coreBMP.Size.Height + 0.5f));

                ImageInfo ii = new ImageInfo(coreBMP, centerPoint, coreDimensions, coreBMP.GetBounds(device));

                //process display modifiers
                Boolean   hasDisplayModifiers = ModifierRenderer.hasDisplayModifiers(symbolID, modifiers);
                Boolean   hasTextModifiers    = ModifierRenderer.hasTextModifiers(symbolID, modifiers, attributes);
                ImageInfo iinew = null;

                if (hasDisplayModifiers)
                {
                    //iinew = ModifierRenderer.ProcessUnitDisplayModifiers(symbolID, ii, modifiers, attributes, true, device);
                }//*/

                if (iinew != null)
                {
                    ii = iinew;
                }
                iinew = null;

                //process text modifiers

                /*if (hasTextModifiers)
                 * {
                 *  //iinew = ModifierRenderer.ProcessUnitTextModifiers(symbolID, ii, modifiers, attributes);
                 *  iinew = ModifierRenderer.ProcessUnitTextModifiers(ii, symbolID, modifiers, attributes);
                 * }//*/

                if (iinew != null)
                {
                    ii = iinew;
                }
                iinew = null;

                /*if (coreBMP != null)
                 * {
                 *  coreBMP.Dispose();
                 *  coreBMP = null;
                 * }//*/

                return(ii);
            }
            catch (Exception exc)
            {
                ErrorLogger.LogException("SinglePointRenderer", "RenderSPTG", exc);
                return(null);
            }
        }
Esempio n. 7
0
 public TextInfo(ICanvasResourceCreator rc, String text)
 {
     format     = RendererSettings.getInstance().getLabelFont();
     textLayout = new CanvasTextLayout(rc, text, format, 0.0f, 0.0f);
     bounds     = getTextBounds();
 }