WPF: преобразование вложенной DrawingGroup во вложенную DrawingVisual - PullRequest
0 голосов
/ 17 августа 2010

У меня есть DrawingGroup с вложенными дочерними элементами, созданными из файлов SVG, и я хочу отобразить / преобразовать это в соответствующий вложенный DrawingVisual / Visual.

Простой процесс рендеринга следующим образом ...

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

visual.DrawDrawing(group);

... будет корректно отображать граф рисования, но полученный визуал не содержит дочернего визуала; создается только один визуал без дочернего элемента.

У детей корня также могут быть дети с преобразованием (ями), что может быть причиной моей текущей неудачной попытки.

Мне нужен вложенный визуал для выполнения интерактивных операций. Кто-нибудь делал подобное и готов поделиться своим алгоритмом?

1 Ответ

1 голос
/ 07 марта 2011

Я сделал почти то же самое:

Все мои дети происходят от рисунка. Это очень упрощено.

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 не управляет детьми, вы должны нарисовать всех детей самостоятельно.

Если вы хотите переместить или изменить размеры объектов, вы должны выполнить ту же операцию с объектами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...