我有一个从SVG文件创建的带有嵌套子对象的DrawingGroup,我想将其渲染/转换为相应的嵌套DrawingVisual/Visual。
一个简单的渲染过程,如下所示...
DrawingGroup group; // assuming root group of diagrams
DrawingVisual visual = new DrawingVisual();
visual.DrawDrawing(group);...will正确呈现绘图图形,但生成的视觉不包含任何子视觉;仅创建了一个无子视觉的视觉。
根的子节点也可能有带转换的子节点,这可能是我当前尝试失败的原因。
我需要用于执行交互操作的嵌套视觉。有没有人做过类似的事情,愿意分享他/她的算法?
发布于 2011-03-07 17:53:25
我已经做了几乎相同的事情:
我所有的孩子都是从绘画中衍生出来的。这非常简单。
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不管理子对象,因此您必须自己绘制所有的子对象。
如果要移动对象或调整对象大小,则必须对对象执行相同的操作。
https://stackoverflow.com/questions/3499676
复制相似问题