예제 #1
0
        public override IEnumerable <SvgAttribute> GetAttributes()
        {
            var baseAttributes = base.GetAttributes();

            if (baseAttributes != null)
            {
                foreach (var attr in baseAttributes)
                {
                    yield return(attr);
                }
            }

            var ci = CultureInfo.InvariantCulture;

            yield return(new SvgAttribute("x1", "0",
                                          () => X1.ToString(ci),
                                          v => X1 = SvgAttribute.ParseFloatAttribute(v)
                                          ));

            yield return(new SvgAttribute("y1", "0",
                                          () => Y1.ToString(ci),
                                          v => Y1 = SvgAttribute.ParseFloatAttribute(v)
                                          ));

            yield return(new SvgAttribute("x2", "0",
                                          () => X2.ToString(ci),
                                          v => X2 = SvgAttribute.ParseFloatAttribute(v)
                                          ));

            yield return(new SvgAttribute("y2", "0",
                                          () => Y2.ToString(ci),
                                          v => Y2 = SvgAttribute.ParseFloatAttribute(v)
                                          ));

            yield return(new SvgAttribute("stroke-width",
                                          () => StrokeWidth.ToString(ci),
                                          v => StrokeWidth = SvgAttribute.ParseFloatAttribute(v)
                                          ));

            yield return(new SvgAttribute("stroke",
                                          () => Stroke == Color.Empty ? "none" : ColorTranslator.ToSvg(Stroke),
                                          v => Stroke = SvgAttribute.ParseColorAttribute(v, Stroke.A)
                                          ));

            yield return(new SvgAttribute("stroke-opacity", "1",
                                          () => ((double)Stroke.A / 255).ToString(ci),
                                          v => Stroke = SvgAttribute.ParseOpacityAttribute(v, Stroke)
                                          ));

            yield return(new SvgAttribute("stroke-dashoffset",
                                          () => StrokeDashOffset.ToString(ci),
                                          v => StrokeDashOffset = SvgAttribute.ParseFloatAttribute(v)
                                          ));

            yield return(new SvgAttribute("stroke-dasharray",
                                          () => DashArrayToString(),
                                          v => StrokeDashArray = SvgAttribute.ParseFloatArray(v)
                                          ));
        }
예제 #2
0
        private Pen GetPen()
        {
            double strokeThickness = StrokeThickness;

            if (Stroke == null ||
                strokeThickness.IsNaNValue() ||
                strokeThickness.IsEqualOrCloseToZero())
            {
                return(null);
            }

            if (strokePen != null)
            {
                return(strokePen);
            }

            double thickness = strokeThickness.Abs();

            strokePen = new Pen
            {
                Thickness    = thickness,
                Brush        = Stroke,
                StartLineCap = StrokeStartLineCap,
                EndLineCap   = StrokeEndLineCap,
                DashCap      = StrokeDashCap,
                LineJoin     = StrokeLineJoin,
                MiterLimit   = StrokeMiterLimit
            };

            if (StrokeDashArray != null ||
                !StrokeDashOffset.IsEqualOrCloseToZero())
            {
                strokePen.DashStyle = new DashStyle(StrokeDashArray, StrokeDashOffset);
            }

            strokePen.Freeze();
            return(strokePen);
        }