首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将嵌套的DrawingGroup转换为嵌套的DrawingVisual

将嵌套的DrawingGroup转换为嵌套的DrawingVisual
EN

Stack Overflow用户
提问于 2010-08-17 13:56:18
回答 1查看 1.2K关注 0票数 0

我有一个从SVG文件创建的带有嵌套子对象的DrawingGroup,我想将其渲染/转换为相应的嵌套DrawingVisual/Visual。

一个简单的渲染过程,如下所示...

代码语言:javascript
复制
DrawingGroup group; // assuming root group of diagrams
DrawingVisual visual = new DrawingVisual();

visual.DrawDrawing(group);

...will正确呈现绘图图形,但生成的视觉不包含任何子视觉;仅创建了一个无子视觉的视觉。

根的子节点也可能有带转换的子节点,这可能是我当前尝试失败的原因。

我需要用于执行交互操作的嵌套视觉。有没有人做过类似的事情,愿意分享他/她的算法?

EN

回答 1

Stack Overflow用户

发布于 2011-03-07 17:53:25

我已经做了几乎相同的事情:

我所有的孩子都是从绘画中衍生出来的。这非常简单。

代码语言:javascript
复制
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不管理子对象,因此您必须自己绘制所有的子对象。

如果要移动对象或调整对象大小,则必须对对象执行相同的操作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3499676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档