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; }
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); } }
/// <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); }