2010-08-17 121 views
0

我有從SVG文件創建嵌套孩子DrawingGroup,我想渲染/它轉換爲一個相應的嵌套DrawingVisual /視頻。WPF:轉換嵌套DrawingGroup嵌套DrawingVisual

一個簡單的渲染過程,如下...

DrawingGroup group; // assuming root group of diagrams 
DrawingVisual visual = new DrawingVisual(); 

visual.DrawDrawing(group); 

...將呈現正確繪製圖形,但所產生的視覺不包含任何孩子的視覺;只有一個沒有孩子的視覺被創建。

根的孩子還可能有孩子變換(S),這可能是我目前的嘗試失敗的原因。

我需要的嵌套的視覺進行交互操作。有沒有人做過類似的事情,並願意分享他/她的算法?

回答

1

我已經做了幾乎相同的:

我所有的孩子都來自drawingvisual。這非常簡單。

public class VisualParent : DrawingVisual 
{ 
    public List<VisualObject> mChildren = new List<VisualObject>(); 

    public VisualCollection mVisuals; 

    /// <summary> 
    /// Property AddVisual : Add visual child 
    /// </summary> 
    public void AddChild(VisualObject visual) 
    { 
     this.mChildren.Add(visual); 
    } 

    //Constructor 
    public VisualParent(Canvas canvas) 
    { 
     this.Canvas = canvas; 
     this.VisualParent = null; 

     mVisuals = new VisualCollection(canvas); 
    } 

    public override void Draw(DrawingContext canvas) 
    { 
     if (canvas == null) 
     { 
      throw new ArgumentNullException("drawingContext"); 
     } 

     canvas.DrawRectangle(new SolidColorBrush(BackgroundColor), new Pen(new SolidColorBrush(ForegroundColor), ActualLineWidth), Rectangle); 

     base.Draw(canvas); 

     if (IsSelected) 
     { 
      DrawHandles(canvas); 
     } 

     // Draw children 

     foreach (VisualObject obj in this.mChildren) 
     { 
      obj.Draw(canvas); 
     } 
    } 
} 

由於drawingVisual不管理孩子,您必須自己繪製所有的孩子。

如果要移動或調整對象,你必須做同樣的操作的對象。

+0

傑森 - 普蘭克:上面的代碼是錯誤的,將無法編譯。 DrawingVisual是一個輕量級的對象,不能像你的代碼那樣使用。 – Paulus 2011-03-08 04:42:22