Beispiel #1
0
        private void FillTreeView(WpfDrawingDocument drawingDocument)
        {
            if (drawingDocument == null)
            {
                return;
            }

            treeView.BeginInit();
            treeView.Items.Clear();

            for (int i = 0; i < 1; i++)
            {
                TextBlock headerText = new TextBlock();
                headerText.Text   = i == 0 ? "SVG Element Names" : "SVG Element Unique Names";
                headerText.Margin = new Thickness(3, 0, 0, 0);

                BulletDecorator decorator = new BulletDecorator();
                if (_folderClose != null)
                {
                    Image image = new Image();
                    image.Source = _folderClose;

                    decorator.Bullet = image;
                }
                else
                {
                    Ellipse bullet = new Ellipse();
                    bullet.Height          = 16;
                    bullet.Width           = 16;
                    bullet.Fill            = Brushes.Goldenrod;
                    bullet.Stroke          = Brushes.DarkGray;
                    bullet.StrokeThickness = 1;

                    decorator.Bullet = bullet;
                }
                decorator.Margin = new Thickness(0, 0, 10, 0);
                decorator.Child  = headerText;
                decorator.Tag    = "";

                TreeViewItem categoryItem = new TreeViewItem();
                categoryItem.Tag        = string.Empty;
                categoryItem.Header     = decorator;
                categoryItem.Margin     = new Thickness(0);
                categoryItem.Padding    = new Thickness(3);
                categoryItem.FontSize   = 14;
                categoryItem.FontWeight = FontWeights.Bold;

                treeView.Items.Add(categoryItem);

                // FillTreeView(i == 0 ? drawingDocument.ElementNames : drawingDocument.ElementUniqueNames, categoryItem);
                FillTreeView(i == 0 ? drawingDocument.DrawingNames : drawingDocument.DrawingUniqueNames, categoryItem);

                categoryItem.IsExpanded = (i == 0);
            }

            treeView.EndInit();

            leftExpander.IsExpanded   = true;
            bottomExpander.IsExpanded = true;
        }
Beispiel #2
0
        private DrawingGroup LoadFile(XmlReader xmlReader)
        {
            _drawingDocument = _isEmbedded ? null : new WpfDrawingDocument();

            this.BeginProcessing(_drawingDocument);

            _wpfWindow.LoadDocument(xmlReader, _wpfSettings);

            _wpfRenderer.InvalidRect = SvgRectF.Empty;

            var svgDocument = _wpfWindow.Document as SvgDocument;

            _wpfRenderer.Render(svgDocument);

            _drawing = _wpfRenderer.Drawing as DrawingGroup;
            if (_drawing == null)
            {
                this.EndProcessing();

                return(null);
            }

            this.EndProcessing();

            if (_drawingDocument != null)
            {
                _drawingDocument.Initialize(svgDocument, _drawing);
            }

            return(_drawing);
        }
 /// <summary>Creates root element from a given drawing document.</summary>
 private void constructFromDrawing(Drawing d, WpfDrawingDocument dd)
 {
     drawing = d;
     root    = new ExpolorerRoot(dd);
     name    = "___SVG_ROOT___";
     initialize();
 }
 public ExpolorerRoot(WpfDrawingDocument doc)
 {
     document = doc;
     foreach (var dn in doc.DrawingNames)
     {
         var d = doc.GetById(dn);
         names.Add(d, dn);
     }
 }
Beispiel #5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="drawingDocument"></param>
        protected virtual void BeginProcessing(WpfDrawingDocument drawingDocument = null)
        {
            if (_wpfSettings == null)
            {
                return;
            }

            var            visitors    = _wpfSettings.Visitors;
            WpfLinkVisitor linkVisitor = visitors.LinkVisitor;

            if (linkVisitor == null)
            {
                linkVisitor          = new LinkVisitor();
                visitors.LinkVisitor = linkVisitor;
            }
            WpfFontFamilyVisitor fontFamilyVisitor = visitors.FontFamilyVisitor;

            if (fontFamilyVisitor == null)
            {
                fontFamilyVisitor          = new FontFamilyVisitor();
                visitors.FontFamilyVisitor = fontFamilyVisitor;
            }
            WpfEmbeddedImageVisitor imageVisitor = visitors.ImageVisitor;

            if (imageVisitor == null)
            {
                imageVisitor          = new EmbeddedImageVisitor();
                visitors.ImageVisitor = imageVisitor;
            }
            WpfIDVisitor idVisitor = visitors.IDVisitor;

            if (idVisitor != null)
            {
                visitors.IDVisitor = idVisitor;
            }
            WpfClassVisitor classVisitor = visitors.ClassVisitor;

            if (classVisitor != null)
            {
                visitors.ClassVisitor = classVisitor;
            }

            if (_wpfRenderer != null)
            {
                _wpfRenderer.LinkVisitor       = linkVisitor;
                _wpfRenderer.ImageVisitor      = imageVisitor;
                _wpfRenderer.FontFamilyVisitor = fontFamilyVisitor;

                _wpfRenderer.BeginRender(drawingDocument);
            }
        }
        public void UnloadDocument(bool displayMessage = false)
        {
            try
            {
                _svgFilePath     = null;
                _drawingDocument = null;

                if (svgViewer != null)
                {
                    svgViewer.UnloadDiagrams();

                    if (displayMessage)
                    {
                        var drawing = this.DrawText("Loading...");

                        svgViewer.RenderDiagrams(drawing);

                        Rect bounds = svgViewer.Bounds;
                        if (bounds.IsEmpty)
                        {
                            bounds = drawing.Bounds;
                        }

                        zoomPanControl.ZoomTo(bounds);
                        return;
                    }
                }

                var drawRect = this.DrawRect();
                svgViewer.RenderDiagrams(drawRect);

                zoomPanControl.ZoomTo(drawRect.Bounds);
                ClearPrevZoomRect();
                ClearNextZoomRect();
            }
            finally
            {
                if (_embeddedImages != null && _embeddedImages.Count != 0)
                {
                    foreach (var embeddedImage in _embeddedImages)
                    {
                        try
                        {
                            if (embeddedImage.Image != null)
                            {
                                if (embeddedImage.Image.StreamSource != null)
                                {
                                    embeddedImage.Image.StreamSource.Dispose();
                                }
                            }

                            var imagePath = embeddedImage.ImagePath;
                            if (!string.IsNullOrWhiteSpace(imagePath) && File.Exists(imagePath))
                            {
                                File.Delete(imagePath);
                            }
                        }
                        catch (IOException ex)
                        {
                            Trace.TraceError(ex.ToString());
                            // Image this, WPF will typically cache and/or lock loaded images
                        }
                    }

                    _embeddedImages.Clear();
                }
            }
        }
        public Task <bool> LoadDocumentAsync(string svgFilePath)
        {
            if (_isLoadingDrawing || string.IsNullOrWhiteSpace(svgFilePath) || !File.Exists(svgFilePath))
            {
#if DOTNET40
                return(TaskEx.FromResult <bool>(false));
#else
                return(Task.FromResult <bool>(false));
#endif
            }

            string fileExt = Path.GetExtension(svgFilePath);

            if (!(string.Equals(fileExt, SvgConverter.SvgExt, StringComparison.OrdinalIgnoreCase) ||
                  string.Equals(fileExt, SvgConverter.CompressedSvgExt, StringComparison.OrdinalIgnoreCase)))
            {
                _svgFilePath = null;
#if DOTNET40
                return(TaskEx.FromResult <bool>(false));
#else
                return(Task.FromResult <bool>(false));
#endif
            }

            _isLoadingDrawing = true;

            this.UnloadDocument(true);

            DirectoryInfo workingDir = _workingDir;
            if (_directoryInfo != null)
            {
                workingDir = _directoryInfo;
            }

            _svgFilePath = svgFilePath;
            _saveXaml    = _optionSettings.ShowOutputFile;

            _embeddedImageVisitor.SaveImages    = !_wpfSettings.IncludeRuntime;
            _embeddedImageVisitor.SaveDirectory = _drawingDir;
            _wpfSettings.Visitors.ImageVisitor  = _embeddedImageVisitor;

            if (_fileReader == null)
            {
                _fileReader          = new FileSvgReader(_wpfSettings);
                _fileReader.SaveXaml = _saveXaml;
                _fileReader.SaveZaml = false;
            }

            var drawingStream = new MemoryStream();

            // Get the UI thread's context
            var context = TaskScheduler.FromCurrentSynchronizationContext();

            return(Task <bool> .Factory.StartNew(() =>
            {
//                var saveXaml = _fileReader.SaveXaml;
//                _fileReader.SaveXaml = true; // For threaded, we will save to avoid loading issue later...

                //Stopwatch stopwatch = new Stopwatch();

                //stopwatch.Start();

                //DrawingGroup drawing = _fileReader.Read(svgFilePath, workingDir);

                //stopwatch.Stop();

                //Trace.WriteLine(string.Format("FileName={0}, Time={1}",
                //    Path.GetFileName(svgFilePath), stopwatch.ElapsedMilliseconds));

                DrawingGroup drawing = _fileReader.Read(svgFilePath, workingDir);

//                _fileReader.SaveXaml = saveXaml;
                _drawingDocument = _fileReader.DrawingDocument;
                if (drawing != null)
                {
                    XamlWriter.Save(drawing, drawingStream);
                    drawingStream.Seek(0, SeekOrigin.Begin);

                    return true;
                }
                _svgFilePath = null;
                return false;
            }).ContinueWith((t) => {
                try
                {
                    if (!t.Result)
                    {
                        _isLoadingDrawing = false;
                        _svgFilePath = null;
                        return false;
                    }
                    if (drawingStream.Length != 0)
                    {
                        DrawingGroup drawing = (DrawingGroup)XamlReader.Load(drawingStream);

                        svgViewer.UnloadDiagrams();
                        svgViewer.RenderDiagrams(drawing);

                        Rect bounds = svgViewer.Bounds;

                        if (bounds.IsEmpty)
                        {
                            bounds = new Rect(0, 0, svgViewer.ActualWidth, svgViewer.ActualHeight);
                        }

                        zoomPanControl.AnimatedZoomTo(bounds);
                        CommandManager.InvalidateRequerySuggested();

                        // The drawing changed, update the source...
                        _fileReader.Drawing = drawing;
                    }

                    _isLoadingDrawing = false;

                    return true;
                }
                catch
                {
                    _isLoadingDrawing = false;
                    throw;
                }
            }, context));
        }
        public bool LoadDocument(string svgFilePath)
        {
            if (string.IsNullOrWhiteSpace(svgFilePath) || !File.Exists(svgFilePath))
            {
                return(false);
            }

            DirectoryInfo workingDir = _workingDir;

            if (_directoryInfo != null)
            {
                workingDir = _directoryInfo;
            }

            this.UnloadDocument(true);

            _svgFilePath = svgFilePath;
            _saveXaml    = _optionSettings.ShowOutputFile;

            string fileExt = Path.GetExtension(svgFilePath);

            if (string.Equals(fileExt, SvgConverter.SvgExt, StringComparison.OrdinalIgnoreCase) ||
                string.Equals(fileExt, SvgConverter.CompressedSvgExt, StringComparison.OrdinalIgnoreCase))
            {
                if (_fileReader != null)
                {
                    _fileReader.SaveXaml = _saveXaml;
                    _fileReader.SaveZaml = false;

                    _embeddedImageVisitor.SaveImages    = !_wpfSettings.IncludeRuntime;
                    _embeddedImageVisitor.SaveDirectory = _drawingDir;
                    _wpfSettings.Visitors.ImageVisitor  = _embeddedImageVisitor;

                    DrawingGroup drawing = _fileReader.Read(svgFilePath, workingDir);
                    _drawingDocument = _fileReader.DrawingDocument;
                    if (drawing != null)
                    {
                        svgViewer.UnloadDiagrams();
                        svgViewer.RenderDiagrams(drawing);

                        Rect bounds = svgViewer.Bounds;

                        if (bounds.IsEmpty)
                        {
                            bounds = new Rect(0, 0, zoomPanControl.ActualWidth, zoomPanControl.ActualHeight);
                        }

                        zoomPanControl.AnimatedZoomTo(bounds);
                        CommandManager.InvalidateRequerySuggested();

                        return(true);
                    }
                }
            }
            else if (string.Equals(fileExt, SvgConverter.XamlExt, StringComparison.OrdinalIgnoreCase) ||
                     string.Equals(fileExt, SvgConverter.CompressedXamlExt, StringComparison.OrdinalIgnoreCase))
            {
                svgViewer.LoadDiagrams(svgFilePath);

                svgViewer.InvalidateMeasure();

                return(true);
            }

            _svgFilePath = null;

            return(false);
        }
 /// <summary>Creates root element from a given drawing document.</summary>
 /// <param name="d"></param>
 /// <param name="dd"></param>
 public SVGExplorer(Drawing d, WpfDrawingDocument dd)
 {
     constructFromDrawing(d, dd);
 }