コード例 #1
0
        private void Form1_Load(object sender, EventArgs e)
        {
            svgDoc = new SvgDocument
            {
                Width   = 500,
                Height  = 500,
                ViewBox = new SvgViewBox(-250, -250, 500, 500),
            };

            var group = new SvgGroup();

            svgDoc.Children.Add(group);

            group.Children.Add(new SvgCircle
            {
                Radius      = 100,
                Fill        = new SvgColourServer(Color.Red),
                Stroke      = new SvgColourServer(Color.Black),
                StrokeWidth = 2
            });

            var stream = new MemoryStream();

            svgDoc.Write(stream);
            textBox1.Text = Encoding.UTF8.GetString(stream.GetBuffer());

            pictureBox1.Image = svgDoc.Draw();
        }
コード例 #2
0
        private static SvgGroup GetDataGroup(float left, float top, IReadOnlyList <DataPoint> data)
        {
            SvgGroup group       = Group(left, top);
            var      definitions = new SvgDefinitionList();
            var      clip        = new SvgClipPath()
            {
                ID = "data-clip"
            };

            clip.Children.Add(Rect(0, 0, ChartWidth, ChartHeight));
            definitions.Children.Add(clip);
            group.Children.Add(definitions);

            group.Children.Add(GetChartGroup(0, 0));
            group.Children.Add(GetDayGroup(0, ChartHeight));
            group.Children.Add(GetDateGroup(0, ChartHeight + DayRow));

            for (int i = 0; i <= TotalDays * SegmentsPerDay; i++)
            {
                float x         = i * SegmentWidth;
                bool  endOfWeek = (i % (SegmentsPerDay * DaysPerWeek)) == 0;
                bool  endOfDay  = (i % SegmentsPerDay) == 0;
                group.Children.Add(Line(x, 0, x, endOfDay ? DataHeight : ChartHeight, endOfWeek ? 2.5f : 1f));
            }

            group.Children.Add(Line(0, ChartHeight + DayRow, ChartWidth, ChartHeight + DayRow));

            var chartDataGroup = GetChartDataGroup(0, 0, data);

            chartDataGroup.ClipPath = new Uri(string.Format("url(#{0})", clip.ID), UriKind.Relative);
            group.Children.Add(chartDataGroup);
            group.Children.Add(GetDaysDataGroup(0, ChartHeight, data.First().Time.Date));

            return(group);
        }
コード例 #3
0
        public static GroupDrawable Create(SvgGroup svgGroup, SKRect skViewport, DrawableBase?parent, IAssetLoader assetLoader, HashSet <Uri>?references, DrawAttributes ignoreAttributes = DrawAttributes.None)
        {
            var drawable = new GroupDrawable(assetLoader, references)
            {
                Element          = svgGroup,
                Parent           = parent,
                IgnoreAttributes = ignoreAttributes
            };

            drawable.IsDrawable = drawable.CanDraw(svgGroup, drawable.IgnoreAttributes) && drawable.HasFeatures(svgGroup, drawable.IgnoreAttributes);

            // NOTE: Call AddMarkers only once.
            SvgExtensions.AddMarkers(svgGroup);

            drawable.CreateChildren(svgGroup, skViewport, drawable, assetLoader, references, ignoreAttributes);

            // TODO: Check if children are explicitly set to be visible.
            //foreach (var child in drawable.ChildrenDrawables)
            //{
            //    if (child.IsDrawable)
            //    {
            //        IsDrawable = true;
            //        break;
            //    }
            //}

            if (!drawable.IsDrawable)
            {
                return(drawable);
            }

            drawable.Initialize(references);

            return(drawable);
        }
コード例 #4
0
        void SetupInitialView()
        {
            //background rect
            var background = new SvgRectangle();

            background.Width  = Screen.PrimaryScreen.WorkingArea.Width;
            background.Height = Screen.PrimaryScreen.WorkingArea.Height;

            background.Fill       = new SvgColourServer(Color.White);
            background.MouseMove += background_MouseMove;
            background.MouseDown += background_MouseDown;
            background.MouseUp   += background_MouseUp;

            //add background to svg doc
            ViewRoot.Children.Add(background);

            //group containing all rects
            FRectGroup    = new SvgGroup();
            FRectGroup.ID = "RectGroup";
            FRectGroup.Transforms.Add(new Svg.Transforms.SvgTranslate(0, 0));
            ViewRoot.Children.Add(FRectGroup);

            AddSomeRects();

            //clear context as initial stuff will come via dump already
            FPoshServer.RemoteContext.ClearAll();
        }
コード例 #5
0
        void CreateArrow(SvgGroup g,
                         bool startMarker,
                         bool endMarker,
                         float xStart,
                         float yStart,
                         float xEnd,
                         float yEnd)
        {
            SvgLine stub = this.doc.AddLine(g);

            stub.Stroke      = Color.Black;
            stub.X1          = this.ToPx(xStart);
            stub.X2          = this.ToPx(xEnd);
            stub.Y1          = this.ToPx(yStart);
            stub.Y2          = this.ToPx(yEnd);
            stub.StrokeWidth = this.ToPx(this.BorderWidth);
            if (startMarker)
            {
                stub.MarkerStart = $"url(#{ArrowStart})";
            }
            if (endMarker)
            {
                stub.MarkerEnd = $"url(#{ArrowEnd})";
            }
        }
コード例 #6
0
ファイル: Form1.cs プロジェクト: zzc1231/SVG
        public Form1()
        {
            InitializeComponent();


            FSvgDoc = new SvgDocument
            {
                Width  = 500,
                Height = 500
            };

            FSvgDoc.ViewBox = new SvgViewBox(-250, -250, 500, 500);

            var group = new SvgGroup();

            FSvgDoc.Children.Add(group);

            group.Children.Add(new SvgCircle
            {
                Radius      = 100,
                Fill        = new SvgColourServer(Color.Red),
                Stroke      = new SvgColourServer(Color.Black),
                StrokeWidth = 2
            });

            var stream = new MemoryStream();

            FSvgDoc.Write(stream);
            textBox1.Text = Encoding.UTF8.GetString(stream.GetBuffer());

            pictureBox1.Image = FSvgDoc.Draw();
        }
コード例 #7
0
        public bool CreateQRCode(string str, QRCodeGenerator.ECCLevel eccLevel, System.Drawing.Size size)
        {
            if (string.IsNullOrEmpty(str))
            {
                return(false);
            }

            _qrdata = QrcodeGenerator.CreateQrCode(str, eccLevel);
            string svg = "";

            if (null != _qrdata)
            {
                SvgQRCode svgqrcode = new SvgQRCode(_qrdata);
                svg = svgqrcode.GetGraphic(size, Color.Black, Color.White);

                using (var stream = new MemoryStream(Encoding.Default.GetBytes(svg)))
                {
                    _svg = SvgDocument.Open <SvgDocument>(stream, null);
                    var g  = new SvgGroup();
                    var ls = _svg.Children.ToList();
                    _svg.Children.Clear();
                    foreach (var c in ls)
                    {
                        g.Children.Add(c);
                    }

                    _svg.Children.Add(g);
                }

                DrawCorner();
            }
            _svg.Write(@"d:\1.svg");
            _image = _svg.Draw();// CustomQRCode.QRCode.Util.Svg2Bitmap(_svg);
            return(true);
        }
コード例 #8
0
        internal static void AddMarkers(this SvgGroup svgGroup)
        {
            Uri?marker = default;

            // TODO: The marker can not be set as presentation attribute.
            //if (svgGroup.TryGetAttribute("marker", out string markerUrl))
            //{
            //    marker = new Uri(markerUrl, UriKind.RelativeOrAbsolute);
            //}

            var groupMarkerStart = svgGroup.MarkerStart;
            var groupMarkerMid   = svgGroup.MarkerMid;
            var groupMarkerEnd   = svgGroup.MarkerEnd;

            if (groupMarkerStart is null && groupMarkerMid is null && groupMarkerEnd is null && marker is null)
            {
                return;
            }

            foreach (var svgElement in svgGroup.Children)
            {
                if (svgElement is not SvgMarkerElement svgMarkerElement)
                {
                    continue;
                }

                if (svgMarkerElement.MarkerStart is null)
                {
                    if (groupMarkerStart is { })
コード例 #9
0
        private SvgGroup CreateAngleText()
        {
            var group = new SvgGroup();

            var majorAngleIncrement = (float)totalProtractorAngleSweep / majorDivisions;

            for (int i = 0; i <= majorDivisions; i++)
            {
                // The angle from the horizontal, used for positioning each label
                var a = startAngle + i * majorAngleIncrement;

                // this is the angle from the vertical.  The graduation mark function uses the angle from the horizontal.
                // the letters start rotated left -60
                var textRotation = -90 + a;

                // go from -n to n
                var number = -totalProtractorAngleSweep / 2 + i * majorAngleIncrement;

                var   label = Text.EtchedText(number.ToString("#0"), textHeight);
                float x     = -textBaselineRadius *DegreeTrig.Cos(a);

                float y = -textBaselineRadius *DegreeTrig.Sin(a);

                label.Transforms.Add(new SvgTranslate(x.Px(), y.Px()));
                label.Transforms.Add(new SvgRotate(textRotation));

                group.Children.Add(label);
            }

            return(group);
        }
コード例 #10
0
        public override RenderedSvg RenderColumn()
        {
            RenderedSvg result = base.RenderColumn();

            SvgGroup group = new SvgGroup();

            for (int i = 0; i < vm.Samples.Length; i++)
            {
                SampleVM sample = vm.Samples[i];
                //sample circle sign
                SvgCircle circle = new SvgCircle();
                circle.CenterX = Helpers.dtos(circleXoffset);
                circle.CenterY = Helpers.dtos(sample.Level);
                circle.Radius  = Helpers.dtos(circleRadius);
                circle.Stroke  = blackPaint;
                group.Children.Add(circle);

                //sample depth label
                SvgText depthText = new SvgText(string.Format("{0:0.##} м", sample.Depth));
                depthText.Transforms.Add(new Svg.Transforms.SvgTranslate(textXoffset, (float)(sample.Level + 2.0 * circleRadius + textFontSize * 0.5)));
                depthText.Fill     = blackPaint;
                depthText.FontSize = Helpers.dtos(textFontSize);
                group.Children.Add(depthText);
                //sample comment
                SvgText commentText = new SvgText(sample.Comment);
                commentText.Transforms.Add(new Svg.Transforms.SvgTranslate(textXoffset, (float)(sample.Level + 2.0 * circleRadius + textFontSize * 1.5)));
                commentText.Fill     = blackPaint;
                commentText.FontSize = Helpers.dtos(textFontSize);
                group.Children.Add(commentText);
            }

            result.SVG = group;

            return(result);
        }
コード例 #11
0
        private static void AddHatching(SvgDocument document, SvgGroup group, Color color, float opacity, int margin, Boolean backDirection)
        {
            var w = document.Width;
            var h = document.Height;

            for (int i = margin; i < w + h; i += 4)
            {
                var x0 = i < h ? 0 : i - h;
                var y0 = i - x0;
                var x1 = (i + 1) < h ? 0 : (i + 1) - h;
                var y1 = (i + 1) - x1;
                var y2 = (i + 1) < w ? 0 : (i + 1) - w;
                var x2 = (i + 1) - y2;
                var y3 = i < w ? 0 : i - w;
                var x3 = i - y3;
                if (backDirection)
                {
                    x0 = w - x0;
                    x1 = w - x1;
                    x2 = w - x2;
                    x3 = w - x3;
                }
                var strPathTemplate = "M{0} {1} L{2} {3} L{4} {5} L{6} {7} z";
                var strPath         = String.Format(strPathTemplate, x0, y0, x1, y1, x2, y2, x3, y3);
                var path            = new SvgPath();
                path.PathData    = SvgPathBuilder.Parse(strPath);
                path.Fill        = new SvgColourServer(color);
                path.FillOpacity = opacity;
                group.Children.Add(path);
            }
        }
コード例 #12
0
        private void CreateSvgOsd()
        {
            int _width = yascControl1.CamWidth, _height = yascControl1.CamHeight;
            Pen _whitePen = Pens.White;

            svgDoc = new SvgDocument()
            {
                Width   = yascControl1.CamWidth,
                Height  = yascControl1.CamHeight,
                ViewBox = new SvgViewBox(0, 0, yascControl1.CamWidth, yascControl1.CamHeight)
            };

            var group = new SvgGroup();

            svgDoc.Children.Add(group);

            var headbg = new RectangleF(0, 0, _width, _height * .07f);
            // Bottom line

            var line = new SvgLine()
            {
                StartX = headbg.Left + 5,
                StartY = headbg.Bottom - headbg.Height / 5,
                EndX   = (SvgUnit)(headbg.Width - 5),
                EndY   = (SvgUnit)(headbg.Bottom - headbg.Height * .2),
            };

            using (var st = new MemoryStream())
            {
                svgDoc.Write(st);
                svgData = Encoding.UTF8.GetString(st.GetBuffer());
            }
        }
コード例 #13
0
        public static void AddTransforms(SvgGroup group, Flip flip)
        {
            if (group.Bounds != default)
            {
                System.Drawing.RectangleF bounds = group.Bounds;

                switch (flip)
                {
                case Flip.PN:     //(1,-1,1) Vertical
                    group.Transforms = new SvgTransformCollection();
                    group.Transforms.Add(new SvgTranslate(0, 2 * bounds.Y + bounds.Height));
                    group.Transforms.Add(new SvgScale(1, -1));
                    break;

                case Flip.NN:     //(-1,-1,1) V and H, same as rotate 180°
                    group.Transforms = new SvgTransformCollection();
                    group.Transforms.Add(new SvgTranslate(2 * bounds.X + bounds.Width, 2 * bounds.Y + bounds.Height));
                    group.Transforms.Add(new SvgScale(-1, -1));
                    break;

                case Flip.NP:     //(-1,1,1) Horizontal
                    group.Transforms = new SvgTransformCollection();
                    group.Transforms.Add(new SvgTranslate(2 * bounds.X + bounds.Width));
                    group.Transforms.Add(new SvgScale(-1, 1));
                    break;

                case Flip.None:
                case Flip.PP:
                default:
                    break;
                }
            }
        }
コード例 #14
0
        public override RenderedSvg RenderColumn()
        {
            RenderedSvg result = base.RenderColumn();

            SvgGroup        group      = new SvgGroup();
            SvgColourServer blackPaint = new SvgColourServer(System.Drawing.Color.Black);

            double width = view.RenderSize.Width;

            //drawing layer boundaries
            LayerVM[] layers   = columnVm.Layers.ToArray();
            double    boundary = 0.0;

            for (int i = 0; i < layers.Length; i++)
            {
                LayerVM lVM = layers[i];
                if (i < layers.Length - 1)
                {
                    boundary += lVM.Length;
                    SvgLine line = new SvgLine();
                    line.Stroke = blackPaint;
                    line.StartX = Helpers.dtos(0.0);
                    line.EndX   = Helpers.dtos(width);
                    line.StartY = Helpers.dtos(boundary);
                    line.EndY   = Helpers.dtos(boundary);
                    group.Children.Add(line);
                }
                var layerSvg = layerPainter.Paint(layers[i], width, lVM.Length);
                layerSvg.Transforms.Add(new Svg.Transforms.SvgTranslate(0.0f, (float)(boundary - lVM.Length)));
                group.Children.Add(layerSvg);
            }

            result.SVG = group;
            return(result);
        }
コード例 #15
0
        private static SvgGroup GetTopGroup(float left, float top)
        {
            SvgGroup group = Group(left, top);

            group.Children.Add(Line(0, TopRow, ChartWidth, TopRow));
            group.Children.Add(Line(0, 0, 0, TopRow));
            for (int i = 0; i < DaysPerWeek * Weeks * SegmentsPerDay + 1; i++)
            {
                int length = i % SegmentsPerDay == 0 ? TopRow : TopRow / 6;
                int x      = i * SegmentWidth;
                group.Children.Add(Line(x, TopRow, x, TopRow - length));

                bool morning = i % SegmentsPerDay - 1 == 0;
                bool evening = i % SegmentsPerDay - 3 == 0;

                float textY = TopRow * 3 / 5f;
                float textX = x + 4f;
                if (morning)
                {
                    group.Children.Add(Text(textX, textY, -90, "6am"));
                }
                if (evening)
                {
                    group.Children.Add(Text(textX, textY, -90, "6pm"));
                }
            }
            return(group);
        }
コード例 #16
0
        protected override SvgElement GetContainer()
        {
            var container = new SvgGroup();

            container.Transforms.Add(new SvgTranslate(Left, Top));
            container.CustomAttributes.Add("visibility", "hidden");

            if (String.IsNullOrEmpty(CssClass))
            {
                container.CustomAttributes.Add("class", "popup " + _popupId);
            }
            else
            {
                container.CustomAttributes.Add("class", CssClass + " popup " + _popupId);
            }

            var rectangle = new SvgRectangle
            {
                Height        = Height,
                Width         = Width,
                CornerRadiusX = CornerRadius,
                CornerRadiusY = CornerRadius
            };

            container.Children.Add(rectangle);

            return(container);
        }
コード例 #17
0
        private static SvgGroup GetColumnGroup(float left, float top)
        {
            SvgGroup group = Group(left, top);

            for (int i = 0; i < SegmentsPerDay + 1; i++)
            {
                int x = i * SegmentWidth;
                group.Children.Add(Line(x, 0, x, ChartHeight));
            }

            for (int i = 0; i <= MaxPef; i += PefIncrement)
            {
                int pos = MaxPef - i;
                if (i % 50 == 0 && i != 0)
                {
                    group.Children.Add(Rect(0, pos - PefIncrement, SideColumnWidth, PefIncrement * 2));
                    group.Children.Add(Text(SideColumnWidth / 2f, pos + 6, i.ToString()));
                }
                else
                {
                    group.Children.Add(Line(0, pos, SideColumnWidth, pos));
                }
            }

            group.Children.Add(Text(SideColumnWidth / 2f, ChartHeight + DayRow / 2f, "Day"));
            group.Children.Add(Line(0, ChartHeight + DayRow, SideColumnWidth, ChartHeight + DayRow));
            group.Children.Add(Text(SideColumnWidth / 2f, ChartHeight + DayRow + DateRow / 2f, "Date"));

            return(group);
        }
コード例 #18
0
        public static void AddMarkers(this SvgGroup svgGroup)
        {
            Uri?marker = null;
            // TODO: The marker can not be set as presentation attribute.
            //if (svgGroup.TryGetAttribute("marker", out string markerUrl))
            //{
            //    marker = new Uri(markerUrl, UriKind.RelativeOrAbsolute);
            //}

            var groupMarkerStart = svgGroup.MarkerStart;
            var groupMarkerMid   = svgGroup.MarkerMid;
            var groupMarkerEnd   = svgGroup.MarkerEnd;

            if (groupMarkerStart == null && groupMarkerMid == null && groupMarkerEnd == null && marker == null)
            {
                return;
            }

            foreach (var svgElement in svgGroup.Children)
            {
                if (svgElement is SvgMarkerElement svgMarkerElement)
                {
                    if (svgMarkerElement.MarkerStart == null)
                    {
                        if (groupMarkerStart != null)
                        {
                            svgMarkerElement.MarkerStart = groupMarkerStart;
                        }
                        else if (marker != null)
                        {
                            svgMarkerElement.MarkerStart = marker;
                        }
                    }
                    if (svgMarkerElement.MarkerMid == null)
                    {
                        if (groupMarkerMid != null)
                        {
                            svgMarkerElement.MarkerMid = groupMarkerMid;
                        }
                        else if (marker != null)
                        {
                            svgMarkerElement.MarkerMid = marker;
                        }
                    }
                    if (svgMarkerElement.MarkerEnd == null)
                    {
                        if (groupMarkerEnd != null)
                        {
                            svgMarkerElement.MarkerEnd = groupMarkerEnd;
                        }
                        else if (marker != null)
                        {
                            svgMarkerElement.MarkerEnd = marker;
                        }
                    }
                }
            }
        }
コード例 #19
0
        private static void Sample01()
        {
            var svgDoc = new SvgDocument
            {
                Width  = 500,
                Height = 500
            };

            svgDoc.ViewBox = new SvgViewBox(-250, -250, 500, 500);

            var group = new SvgGroup();

            svgDoc.Children.Add(group);

            group.Children.Add(new SvgCircle
            {
                Radius      = 100,
                Fill        = new SvgColourServer(Color.FromArgb(43, 138, 190)),
                Stroke      = new SvgColourServer(Color.FromArgb(32, 101, 139)),
                StrokeWidth = 2
            });

            group.Children.Add(new SvgLine()
            {
                StartX      = 0,
                StartY      = -120,
                EndX        = 0,
                EndY        = 120,
                Stroke      = new SvgColourServer(Color.LightGray),
                StrokeWidth = 3
            });

            group.Children.Add(new SvgRectangle()
            {
                X      = -200,
                Y      = -160,
                Width  = 80,
                Height = 60,
                Fill   = new SvgColourServer(Color.FromArgb(0, 170, 180))
            });

            var group2 = new SvgGroup();

            group.Children.Add(group2);
            for (int x = -100; x < 0; x += 5)
            {
                group2.Children.Add(new SvgRectangle()
                {
                    X      = x,
                    Y      = -210,
                    Width  = 3,
                    Height = 5,
                    Fill   = new SvgColourServer(Color.DarkGray)
                });
            }
            svgDoc.Write("sample.svg");
        }
コード例 #20
0
        private static SvgGroup GetBorderGroup(float left, float top)
        {
            SvgGroup group = Group(left, top);

            group.Children.Add(GetTopGroup(SideColumnWidth, 0));
            group.Children.Add(GetColumnGroup(0, TopRow));
            group.Children.Add(GetColumnGroup(ChartWidth + SideColumnWidth, TopRow));
            return(group);
        }
コード例 #21
0
        /// <summary>
        /// Create or update SVG ball location.
        /// </summary>
        private void UpdateSvg()
        {
            if (svgDoc == null)
            {
                svgDoc = new SvgDocument()
                {
                    Width   = yascControl1.CamWidth,
                    Height  = yascControl1.CamHeight,
                    ViewBox = new SvgViewBox(0, 0, yascControl1.CamWidth, yascControl1.CamHeight)
                };

                var group = new SvgGroup();

                svgDoc.Children.Add(group);

                group.Children.Add(new SvgCircle()
                {
                    Radius      = 10,
                    Fill        = new SvgColourServer(Color.Red),
                    Stroke      = new SvgColourServer(Color.Black),
                    StrokeWidth = 1,
                    CenterX     = this.ballX,
                    CenterY     = this.ballY,
                    ID          = "bouncyball"
                });
                var txtContent = new SvgContentNode()
                {
                    Content = "TEST SVG"
                };

                group.Children.Add(new SvgText("SVG TEXT")
                {
                    Stroke      = new SvgColourServer(Color.Black),
                    Fill        = new SvgColourServer(Color.White),
                    FontSize    = 50,
                    FontFamily  = "Segoe UI, Sans",
                    ID          = "svgtext",
                    StrokeWidth = 1,
                    X           = { 200 },
                    Y           = { 100 }
                });
            }

            var ball = svgDoc.GetElementById <SvgCircle>("bouncyball");

            ball.CenterX = this.ballX;
            ball.CenterY = this.ballY;

            //pbxTest.Image = svgDoc.Draw();

            using (var st = new MemoryStream())
            {
                svgDoc.Write(st);
                svgData = Encoding.UTF8.GetString(st.GetBuffer());
            }
        }
コード例 #22
0
        private SvgDefinitionList GetDefinitions()
        {
            var defs  = new SvgDefinitionList();
            var group = new SvgGroup();

            group.ID = "element";
            defs.Children.Add(group);
            AddElementDefinition(group);
            return(defs);
        }
コード例 #23
0
ファイル: Program.cs プロジェクト: damian-dz/SvgCodeGen
        static void Main()
        {
            var      svg  = new Svg(1000, 800);
            SvgGroup grid = Templates.Grid(0, 0, svg.Width, svg.Height, 10, 8);

            grid.SetFill(Color.Aqua);
            grid.SetStroke(Color.Black);
            svg.AddElement(grid);
            svg.SaveAs("grid.svg");
        }
コード例 #24
0
ファイル: SvgEditor.cs プロジェクト: Gjoll/Eir.FGraph
        void CreateLine(SvgGroup g, float x1, float y1, float x2, float y2)
        {
            SvgLine stub = this.doc.AddLine(g);

            stub.Class = "connector";
            stub.X1    = this.ToPx(x1);
            stub.X2    = this.ToPx(x2);
            stub.Y1    = this.ToPx(y1);
            stub.Y2    = this.ToPx(y2);
        }
コード例 #25
0
 /// <summary>
 /// adds dynamic circle physics objects for each circle in the SVG
 /// </summary>
 /// <param name="group">Group.</param>
 void addCircles(SvgGroup group)
 {
     foreach (var circle in group.circles)
     {
         createEntity(circle.id)
         .setPosition(circle.centerX, circle.centerY)
         .addComponent(new FSRigidBody())
         .setBodyType(BodyType.Dynamic)
         .addComponent(new FSCollisionCircle(circle.radius));
     }
 }
コード例 #26
0
 /// <summary>
 /// adds dynamic polygon physics objects for each polygon in the SVG
 /// </summary>
 /// <param name="group">Group.</param>
 void addPolygons(SvgGroup group)
 {
     foreach (var polygon in group.polygons)
     {
         createEntity(polygon.id)
         .setPosition(polygon.centerX, polygon.centerY)
         .addComponent <FSRigidBody>()
         .setBodyType(BodyType.Dynamic)
         .addComponent(new FSCollisionPolygon(polygon.getRelativePoints()));
     }
 }
コード例 #27
0
 /// <summary>
 /// adds dynamic ellipse physics objects for each ellipse in the SVG
 /// </summary>
 /// <param name="group">Group.</param>
 void addEllipses(SvgGroup group)
 {
     foreach (var ellipse in group.ellipses)
     {
         createEntity(ellipse.id)
         .setPosition(ellipse.centerX, ellipse.centerY)
         .addComponent <FSRigidBody>()
         .setBodyType(BodyType.Dynamic)
         .addComponent(new FSCollisionEllipse(ellipse.radiusX, ellipse.radiusY));
     }
 }
コード例 #28
0
        //called when data for any output pin is requested
        public void Evaluate(int SpreadMax)
        {
            //check transforms
            if (FTransformIn.IsChanged)
            {
                //assign size and clear group list
                FOutput.SliceCount = FTransformIn.SliceCount;
                FGroups.Clear();

                //create groups and add matrix to it
                for (int i = 0; i < FTransformIn.SliceCount; i++)
                {
                    var g = new SvgGroup();
                    g.Transforms = new SvgTransformCollection();

                    var m   = FTransformIn[i];
                    var mat = new SvgMatrix(new List <float>()
                    {
                        m.M11, m.M12, m.M21, m.M22, m.M41, m.M42
                    });

                    g.Transforms.Add(mat);

                    FGroups.Add(g);
                }
            }

            //add all elements to each group
            if (FInput.IsChanged || FTransformIn.IsChanged || FEnabledIn.IsChanged)
            {
                foreach (var g in FGroups)
                {
                    g.Children.Clear();

                    if (FEnabledIn[0])
                    {
                        for (int i = 0; i < FInput.SliceCount; i++)
                        {
                            var pin = FInput[i];
                            for (int j = 0; j < pin.SliceCount; j++)
                            {
                                var elem = pin[j];
                                if (elem != null)
                                {
                                    g.Children.Add(elem);
                                }
                            }
                        }
                    }
                }
                //write groups to output
                FOutput.AssignFrom(FGroups);
            }
        }
コード例 #29
0
        DrawObject CreateGroup(SvgGroup svg)
        {
            DrawObject o     = null;
            SvgElement child = svg.getChild();

            if (child != null)
            {
                AddFromSvg(child);
            }
            return(o);
        }
コード例 #30
0
        private SvgGroup BuildTileGroup(OutputTile tile, Func <float, float> yCoordinateConverter)
        {
            var tileGroup    = new SvgGroup();
            var mediaBoxRect = new SvgRectangle
            {
                Width       = tile.MediaBox.Width,
                Height      = tile.MediaBox.Height,
                X           = tile.MediaBox.Left,
                Y           = yCoordinateConverter(tile.MediaBox.Top),
                Stroke      = new SvgColourServer(Color.Magenta),
                Fill        = new SvgColourServer(Color.White),
                StrokeWidth = 1.0f
            };

            var cutBoxRect = new SvgRectangle
            {
                Width       = tile.CutBox.Width,
                Height      = tile.CutBox.Height,
                X           = tile.CutBox.Left,
                Y           = yCoordinateConverter(tile.CutBox.Top),
                Stroke      = new SvgColourServer(Color.Black),
                Fill        = new SvgColourServer(Color.White),
                StrokeWidth = 1.0f
            };

            var pageNUmberFontSize = tile.CutBox.Height / 4.0f;
            var pageNumberText     = new SvgText(tile.SourcePage.Number.ToString())
            {
                X          = { tile.CutBox.GetCenter().X - 70.0f },
                Y          = { yCoordinateConverter(tile.CutBox.GetCenter().Y - pageNUmberFontSize / 2.0f) },
                FontSize   = pageNUmberFontSize,
                FontFamily = "Courier New",
                Transforms =
                {
                    new SvgRotate(tile.MediaRotationAngle,
                                  tile.CutBox.GetCenter().X,
                                  yCoordinateConverter(tile.CutBox.GetCenter().Y))
                }
            };
            var sourceFileText = new SvgText(Path.GetFileNameWithoutExtension(tile.SourceFilePath))
            {
                X          = { tile.CutBox.Left + 50.0f },
                Y          = { yCoordinateConverter(tile.CutBox.Bottom + 20) },
                FontSize   = 24,
                FontFamily = "Courier New"
            };

            tileGroup.Children.Add(mediaBoxRect);
            tileGroup.Children.Add(cutBoxRect);
            tileGroup.Children.Add(pageNumberText);
            tileGroup.Children.Add(sourceFileText);

            return(tileGroup);
        }
コード例 #31
0
ファイル: MarkerEndTest.cs プロジェクト: dteunkenstt/SVG
        public void TestArrowCodeCreation()
        {
            // Sample code from Issue 212. Thanks to podostro.
            const int width = 50;
            const int height = 50;

            var document = new SvgDocument()
            {
                ID = "svgMap",
                ViewBox = new SvgViewBox(0, 0, width, height)
            };

            var defsElement = new SvgDefinitionList() { ID = "defsMap" };
            document.Children.Add(defsElement);

            var groupElement = new SvgGroup() { ID = "gMap" };
            document.Children.Add(groupElement);

            var arrowPath = new SvgPath()
            {
                ID = "pathMarkerArrow",
                Fill = new SvgColourServer(Color.Black),
                PathData = SvgPathBuilder.Parse(@"M0,0 L4,2 L0,4 L1,2 z")
            };

            var arrowMarker = new SvgMarker()
            {
                ID = "markerArrow",
                MarkerUnits = SvgMarkerUnits.StrokeWidth,
                MarkerWidth = 5,
                MarkerHeight = 5,
                RefX = 3,
                RefY = 2,
                Orient = new SvgOrient() { IsAuto = true },
                Children = { arrowPath }
            };

            defsElement.Children.Add(arrowMarker);

            var line = new SvgLine()
            {
                ID = "lineLinkedPoint",
                StartX = 0,
                StartY = 15,
                EndX = 35,
                EndY = 35,
                Stroke = new SvgColourServer(Color.Black),
                StrokeWidth = 3,
                MarkerEnd = new Uri(string.Format("url(#{0})", arrowMarker.ID), UriKind.Relative)
            };

            groupElement.Children.Add(line);

            var svgXml = document.GetXML();
            var img = document.Draw();

            var file = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
            File.WriteAllText(file + ".svg", svgXml);
            img.Save(file + ".png");
            Debug.WriteLine(string.Format("Svg saved to '{0}'", file));

            Debugger.Break();

            // Remove
            var svg = new FileInfo(file + ".svg");
            if (svg.Exists) svg.Delete();
            var png = new FileInfo(file + ".png");
            if (png.Exists) png.Delete();
        }