示例#1
0
    public override void OnImportAsset(AssetImportContext ctx)
    {
        var dataFile     = ScriptableObject.CreateInstance <SvgScriptable>();
        var dataFileText = File.ReadAllText(ctx.assetPath);

        SvgParser.LoadScriptableFromString(dataFile, dataFileText);
        dataFile.Scale(new Vector2(1, -1) * this.Scale);

        if (dataFile.SvgData.Count > 0 && CenterElements)
        {
            Vector2 maxCorner = dataFile.SvgData[0].Points[0];
            Vector2 minCorner = maxCorner;
            foreach (var pt in dataFile.AllPoints)
            {
                maxCorner.x = Mathf.Max(maxCorner.x, pt.x);
                maxCorner.y = Mathf.Max(maxCorner.y, pt.y);

                minCorner.x = Mathf.Min(minCorner.x, pt.x);
                minCorner.y = Mathf.Min(minCorner.y, pt.y);
            }
            dataFile.Move((minCorner + maxCorner) / -2);
        }


        ctx.AddObjectToAsset("main obj", dataFile);
        ctx.SetMainObject(dataFile);
    }
示例#2
0
        private void importSelectedToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (listView3.SelectedItems.Count > 0)
            {
                QntDialog q = new QntDialog();
                if (q.ShowDialog() == DialogResult.OK)
                {
                    foreach (var item in listView3.SelectedItems)
                    {
                        var t = (item as ListViewItem).Tag as FileInfo;

                        var svg = SvgParser.LoadSvg(t.FullName);
                        int src = 0;
                        if (polygons.Any())
                        {
                            src = polygons.Max(z => z.source.Value) + 1;
                        }
                        for (int i = 0; i < q.Qnt; i++)
                        {
                            context.ImportFromRawDetail(svg, src);
                        }
                    }
                    UpdateList();
                }
            }
        }
示例#3
0
        public static BoundsD NormalizeIcon(Icon icn, int size)
        {
            double  max    = icn.bounds.w > icn.bounds.h ? icn.bounds.w : icn.bounds.h;
            float   factor = size / (float)max;
            BoundsD bounds = new BoundsD()
            {
                l = double.MaxValue,
                t = double.MaxValue
            };

            foreach (var path in icn.arr_svgpath)
            {
                SvgParser parser = SvgParser.FromPath(path);
                parser._scaler.OffsetXY((float)-icn.bounds.l, (float)-icn.bounds.t);
                parser._scaler.Scale(factor);

                if (parser._bounds.w > bounds.w)
                {
                    bounds.w = parser._bounds.w;
                }
                if (parser._bounds.h > bounds.h)
                {
                    bounds.h = parser._bounds.h;
                }
                if (parser._bounds.l < bounds.l)
                {
                    bounds.l = parser._bounds.l;
                }
                if (parser._bounds.t < bounds.t)
                {
                    bounds.t = parser._bounds.t;
                }
            }
            return(bounds);
        }
示例#4
0
        private void listView3_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            if (listView3.SelectedItems.Count > 0)
            {
                var si = listView3.SelectedItems[0].Tag;
                if (si is DirectoryInfo)
                {
                    UpdateFilesList((si as DirectoryInfo).FullName);
                }
                if (si is FileInfo)
                {
                    var       f = (si as FileInfo);
                    QntDialog q = new QntDialog();
                    if (q.ShowDialog() == DialogResult.OK)
                    {
                        var svg = SvgParser.LoadSvg(f.FullName);
                        int src = 0;
                        if (polygons.Any())
                        {
                            src = polygons.Max(z => z.source.Value) + 1;
                        }
                        for (int i = 0; i < q.Qnt; i++)
                        {
                            context.ImportFromRawDetail(svg, src);
                        }

                        UpdateList();
                    }
                }
            }
        }
示例#5
0
        public void LoadDataFromXml(string v)
        {
            var d   = XDocument.Load(v);
            var f   = d.Descendants().First();
            var gap = int.Parse(f.Attribute("gap").Value);

            SvgNest.Config.spacing = gap;

            foreach (var item in d.Descendants("sheet"))
            {
                var cnt = int.Parse(item.Attribute("count").Value);
                var ww  = int.Parse(item.Attribute("width").Value);
                var hh  = int.Parse(item.Attribute("height").Value);

                for (int i = 0; i < cnt; i++)
                {
                    AddSheet(ww, hh);
                }
            }
            foreach (var item in d.Descendants("part"))
            {
                var cnt  = int.Parse(item.Attribute("count").Value);
                var path = item.Attribute("path").Value;
                var r    = SvgParser.LoadSvg(path);
                var src  = GetNextSource();

                for (int i = 0; i < cnt; i++)
                {
                    ImportFromRawDetail(r, src);
                }
            }
        }
示例#6
0
        static List <List <Point> > GetPointListsFromSVGPath(string svgpath, bool _debug = false)
        {
            List <List <Point> > result = new List <List <Point> >();
            SvgParser            svgp   = new SvgParser();
            int pointcount = 0;

            svgp.parsePath(svgpath);
            foreach (List <float[]> f in svgp.originPathList)
            {
                List <Point> segments = new List <Point>();
                if (_debug)
                {
                    Console.WriteLine("_____________");
                }
                for (int i = 0; i < f.Count; i++)
                {
                    Point e = new Point(f[i][0], f[i][1]);
                    segments.Add(e);
                    if (i > 0)
                    {
                        Point a = new Point(f[i - 1][0], f[i - 1][1]);
                        Point b = e;
                        //if (_debug)
                        //drawLine(a, b);
                    }
                    pointcount++;
                    if (_debug)
                    {
                        Console.WriteLine(e.X + " " + e.Y);
                    }
                }
                result.Add(segments);
            }
            return(result);
        }
示例#7
0
        private void toolStripButton2_Click_1(object sender, EventArgs e)
        {
            SaveFileDialog sfd = new SaveFileDialog();

            sfd.Filter = "Svgs files (*.svg)|*.svg";
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                SvgParser.Export(sfd.FileName, polygons.ToArray(), sheets.ToArray());
            }
        }
示例#8
0
        VgVisualDoc ReadSvgFile(string filename)
        {
            string       svgContent = System.IO.File.ReadAllText(filename);
            VgDocBuilder docBuidler = new VgDocBuilder();
            SvgParser    parser     = new SvgParser(docBuidler);

            WebLexer.TextSnapshot textSnapshot = new WebLexer.TextSnapshot(svgContent);
            parser.ParseDocument(textSnapshot);
            //TODO: review this step again
            VgVisualDocBuilder builder = new VgVisualDocBuilder();

            return(builder.CreateVgVisualDoc(docBuidler.ResultDocument, _vgVisualDocHost));
        }
示例#9
0
        MemBitmap ParseAndRenderSvg(System.Text.StringBuilder svgContent)
        {
            //----------
            //copy from HtmlRenderer's SvgViewer demo
            //----------
            var          docBuilder   = new VgDocBuilder();
            var          parser       = new SvgParser(docBuilder);
            TextSnapshot textSnapshot = new TextSnapshot(svgContent.ToString());

            parser.ParseDocument(textSnapshot);

            VgVisualDocBuilder builder   = new VgVisualDocBuilder();
            VgVisualElement    vgVisElem = builder.CreateVgVisualDoc(docBuilder.ResultDocument, _vgDocHost).VgRootElem;

            PixelFarm.CpuBlit.VertexProcessing.Q1RectD bounds = vgVisElem.GetRectBounds();
            float actualXOffset = (float)-bounds.Left;
            float actualYOffset = (float)-bounds.Bottom;

            int bmpW = (int)Math.Round(bounds.Width);
            int bmpH = (int)Math.Round(bounds.Height);

            if (bmpW == 0 || bmpH == 0)
            {
                return(null);
            }
            MemBitmap memBitmap = new MemBitmap(bmpW, bmpH);

            using (Tools.BorrowAggPainter(memBitmap, out var p))
                using (Tools.More.BorrowVgPaintArgs(p, out var paintArgs))
                {
                    float orgX = p.OriginX;
                    float orgY = p.OriginY;
                    p.SetOrigin(actualXOffset, actualYOffset);

                    p.Clear(PixelFarm.Drawing.Color.White);

                    p.FillColor = PixelFarm.Drawing.Color.Black;

                    double prevStrokeW = p.StrokeWidth;

                    vgVisElem.Paint(paintArgs);

                    p.StrokeWidth = prevStrokeW; //restore

                    p.SetOrigin(orgX, orgY);     //restore
                }

            return(memBitmap);
        }
示例#10
0
        //--------------------->First function points here
        public void LoadInputData(string path, int count)
        {
            var dir = new DirectoryInfo(path);

            foreach (var item in dir.GetFiles("*.svg"))
            {
                try {
                    var src = GetNextSource();
                    for (int i = 0; i < count; i++)
                    {
                        ImportFromRawDetail(SvgParser.LoadSvg(item.FullName), src);
                    }
                } catch (Exception ex) {
                    Console.WriteLine("Error loading " + item.FullName + ". skip");
                }
            }
        }
示例#11
0
        private void listView3_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (listView3.SelectedItems.Count > 0 && listView3.SelectedItems[0].Tag is FileInfo)
            {
                try
                {
                    var path = (FileInfo)listView3.SelectedItems[0].Tag;
                    var svg  = SvgParser.LoadSvg(path.FullName);


                    Preview = svg;
                }
                catch (Exception ex)
                {
                    Preview = null;
                }
            }
        }
示例#12
0
        void ParseAndRenderSvgFile(string svgFile)
        {
            var docBuilder = new VgDocBuilder();
            var svgParser  = new SvgParser(docBuilder);

            //TODO: ask file content from host,

            string svgContent = System.IO.File.ReadAllText(svgFile);

            WebLexer.TextSnapshot textSnapshot = new WebLexer.TextSnapshot(svgContent);
            svgParser.ParseDocument(textSnapshot);
            //
#if DEBUG
            System.Diagnostics.Debug.WriteLine(svgFile);
#endif
            var             vgDocBuilder = new VgVisualDocBuilder();
            VgVisualElement vgVisElem    = vgDocBuilder.CreateVgVisualDoc(docBuilder.ResultDocument, _vgDocHost).VgRootElem;

            var uiSprite   = new UISprite(10, 10);
            var evListener = new GeneralEventListener();
            uiSprite.AttachExternalEventListener(evListener);
            evListener.MouseDown += (s, e) =>
            {
                //hit on svg color- area
                VgHitInfo hitInfo = uiSprite.FindRenderElementAtPos(e.X, e.Y, false);
#if DEBUG
                if (hitInfo.hitElem != null)
                {
                    SvgElement domElem = hitInfo.hitElem.DomElem;
                    if (domElem != null && domElem.ElemId != null)
                    {
                        Console.WriteLine(domElem.ElemId);
                    }
                }
#endif
            };


            uiSprite.LoadVg(vgVisElem);

            _backBoard.ClearChildren();
            _backBoard.Add(uiSprite);
        }
示例#13
0
        public static VgVisualElement CreateVgVisualElemFromSvgContent(string svgContent)
        {
            VgDocBuilder docBuidler = new VgDocBuilder();
            SvgParser    parser     = new SvgParser(docBuidler);

            WebLexer.TextSnapshot textSnapshot = new WebLexer.TextSnapshot(svgContent);
            parser.ParseDocument(textSnapshot);//start document parsing

            //TODO: review this step again
            VgVisualDocBuilder builder = new VgVisualDocBuilder();
            VgDocument         svgDoc  = docBuidler.ResultDocument;

            //optional
            svgDoc.OriginalContent = svgContent;
            //-------------------------------------------------------------
            VgVisualElement vgVisRootElem = builder.CreateVgVisualDoc(svgDoc, null).VgRootElem;

            //
            vgVisRootElem.OwnerDocument = svgDoc;//tmp


            return(vgVisRootElem);
        }
示例#14
0
 private SvgParser.SvgPath getSvgPath(string filePath)
 {
     return(SvgParser.SvgParse(File.ReadAllText(filePath)));
 }
示例#15
0
        protected override void OnStartDemo(SampleViewport viewport)
        {
            PaintLab.Svg.SvgParser parser = new SvgParser();
            _backBoard           = new BackDrawBoardUI(400, 400);
            _backBoard.BackColor = Color.White;
            viewport.AddContent(_backBoard);



            box1           = new LayoutFarm.CustomWidgets.SimpleBox(50, 50);
            box1.BackColor = Color.Red;
            box1.SetLocation(10, 10);
            //box1.dbugTag = 1;
            SetupActiveBoxProperties(box1);
            _backBoard.AddChild(box1);

            //----------------------

            //load lion svg
            string file       = @"d:\\WImageTest\\lion.svg";
            string svgContent = System.IO.File.ReadAllText(file);

            WebLexer.TextSnapshot textSnapshot = new WebLexer.TextSnapshot(svgContent);
            parser.ParseDocument(textSnapshot);
            //
            SvgRenderVx svgRenderVx = parser.GetResultAsRenderVx();
            var         uiSprite    = new UISprite(10, 10);

            uiSprite.LoadSvg(svgRenderVx);
            _backBoard.AddChild(uiSprite);
            //--------
            rectBoxController.Init();
            //------------
            viewport.AddContent(rectBoxController);

            //foreach (var ui in rectBoxController.GetControllerIter())
            //{
            //    viewport.AddContent(ui);
            //}

            //--------
            var evListener = new GeneralEventListener();

            uiSprite.AttachExternalEventListener(evListener);


            evListener.MouseDown += (e) =>
            {
                //e.MouseCursorStyle = MouseCursorStyle.Pointer;
                ////--------------------------------------------
                //e.SetMouseCapture(rectBoxController.ControllerBoxMain);
                rectBoxController.UpdateControllerBoxes(box1);
                rectBoxController.Focus();
                //System.Console.WriteLine("click :" + (count++));
            };
            rectBoxController.ControllerBoxMain.KeyDown += (s1, e1) =>
            {
                if (e1.Ctrl && e1.KeyCode == UIKeys.X)
                {
                    //test copy back image buffer from current rect area

#if DEBUG
                    //test save some area
                    int w = rectBoxController.ControllerBoxMain.Width;
                    int h = rectBoxController.ControllerBoxMain.Height;

                    using (DrawBoard gdiDrawBoard = DrawBoardCreator.CreateNewDrawBoard(1, w, h))
                    {
                        gdiDrawBoard.OffsetCanvasOrigin(rectBoxController.ControllerBoxMain.Left, rectBoxController.ControllerBoxMain.Top);
                        _backBoard.CurrentPrimaryRenderElement.CustomDrawToThisCanvas(gdiDrawBoard, new Rectangle(0, 0, w, h));
                        var img2 = new ActualImage(w, h);
                        //copy content from drawboard to target image and save
                        gdiDrawBoard.RenderTo(img2, 0, 0, w, h);

                        img2.dbugSaveToPngFile("d:\\WImageTest\\ddd001.png");
                    }
#endif
                }
            };
        }
示例#16
0
文件: Host.cs 项目: zcwfeng/IconDrop
        protected override SciterXDef.LoadResult OnLoadData(SciterXDef.SCN_LOAD_DATA sld)
        {
            if (sld.uri.StartsWith("tmp:tmp.svg"))
            {
                var icn  = Joiner._iconsByHash.ToList()[1200].Value;
                var path = SvgParser.FromPath(icn.arr_svgpath[0]);
                //path.NormalizeToSize(100);

                string xml   = SvgXML.FromSvgParser(path).ToXML();
                byte[] bytes = Encoding.UTF8.GetBytes(xml);
                _api.SciterDataReady(sld.hwnd, sld.uri, bytes, (uint)bytes.Length);
                return(SciterXDef.LoadResult.LOAD_OK);
            }
            else if (sld.uri.StartsWith("svg:"))
            {
                if (sld.uri.Contains("?rnd="))
                {
                    sld.uri = sld.uri.Split('?')[0];
                }
                int    length = sld.uri.Length - 8;
                string hash   = sld.uri.Substring(4, length);
                var    icn    = Joiner._iconsByHash[hash];
                switch (icn.kind)
                {
                case EIconKind.COLLECTION:
                    try
                    {
                        byte[] bytess = File.ReadAllBytes(icn.path);
                        _api.SciterDataReady(sld.hwnd, sld.uri, bytess, (uint)bytess.Length);
                    }
                    catch (Exception)
                    {
                    }
                    break;

                case EIconKind.LIBRARY:
                    string xml   = SvgXML.FromIcon(icn).ToXML();
                    byte[] bytes = Encoding.UTF8.GetBytes(xml);
                    _api.SciterDataReady(sld.hwnd, sld.uri, bytes, (uint)bytes.Length);
                    break;

                case EIconKind.STORE:
                    if (Store.IsIconLoaded(icn))
                    {
                        byte[] bytess = File.ReadAllBytes(icn.path);
                        _api.SciterDataReady(sld.hwnd, sld.uri, bytess, (uint)bytess.Length);
                        return(SciterXDef.LoadResult.LOAD_OK);
                    }
                    else
                    {
                        Store.LoadIcon(icn).ContinueWith((t) =>
                        {
                            if (t.Status == TaskStatus.RanToCompletion)
                            {
                                byte[] bytess = File.ReadAllBytes(icn.path);
                                _api.SciterDataReadyAsync(sld.hwnd, sld.uri, bytess, (uint)bytess.Length, sld.requestId);
                            }
                        });
                        return(SciterXDef.LoadResult.LOAD_DELAYED);
                    }
                }
                return(SciterXDef.LoadResult.LOAD_OK);
            }
            return(base.OnLoadData(sld));
        }
示例#17
0
        public static void ParseAndRenderSvg(PixelFarm.Drawing.SvgBmpBuilderReq req)
        {
            //----------
            //copy from HtmlRenderer's SvgViewer demo
            //----------
            var          docBuilder   = new VgDocBuilder();
            var          parser       = new SvgParser(docBuilder);
            TextSnapshot textSnapshot = new TextSnapshot(req.SvgContent.ToString());

            parser.ParseDocument(textSnapshot);

            VgVisualDocBuilder builder   = new VgVisualDocBuilder();
            VgVisualElement    vgVisElem = builder.CreateVgVisualDoc(docBuilder.ResultDocument, _vgDocHost).VgRootElem;

            PixelFarm.CpuBlit.VertexProcessing.Q1RectD bounds = vgVisElem.GetRectBounds();

            float actualXOffset = (float)-bounds.Left;
            float actualYOffset = (float)-bounds.Bottom;

            //original svg width, height
            int bmpW = (int)Math.Round(bounds.Width);
            int bmpH = (int)Math.Round(bounds.Height);

            if (bmpW == 0 || bmpH == 0)
            {
                return;
            }

            //scale svg to specific size
            float scale_w = req.ExpectedWidth / bmpW;

            //at this point, we have 2 options
            //1) create bitmap with original svg size and scale it down to expected size
            //2) scale svg to expected size and create a bitmap

            //we choose 2)

            int new_w = (int)Math.Round(bmpW * scale_w);
            int new_h = (int)Math.Round(bmpH * scale_w);

            MemBitmap memBitmap = new MemBitmap(new_w, new_h);

            using (Tools.BorrowAggPainter(memBitmap, out var p))
                using (Tools.More.BorrowVgPaintArgs(p, out VgPaintArgs paintArgs))
                {
                    //pass by

                    Affine tx = Affine.NewScaling(scale_w);
                    paintArgs._currentTx = tx;

                    float orgX = p.OriginX;
                    float orgY = p.OriginY;


                    p.SetOrigin(actualXOffset * scale_w, actualYOffset * scale_w);

                    p.Clear(req.DefaultBgColor);

                    p.FillColor = PixelFarm.Drawing.Color.Black;

                    double prevStrokeW = p.StrokeWidth;

                    vgVisElem.Paint(paintArgs);

                    p.StrokeWidth = prevStrokeW; //restore

                    p.SetOrigin(orgX, orgY);     //restore
                }

#if DEBUG
            //memBitmap.SaveImage("svg.png");
#endif
            req.Output = memBitmap;
        }