在WPF DrawingVisual

时间:2018-07-28 21:34:55

标签: c# wpf pathgeometry drawingvisual

我正在WPF中创建一个CAD程序,该程序可以添加和删除线和矩形,这两者都由PathGeometry进行描述。当我进一步了解该程序时,它将包含多种不同的PathGeometries,它们各自构成单个DrawingVisuals的属性。出于性能原因,我正在使用Visual类。

由于每个DrawingVisual实际上都是相同的,因为它仅仅是由PathGeometry组成的DrawingVisual,所以它没有唯一的标识符。我需要某种标识符,以便当我在直线或矩形上单击鼠标右键时,可以在其上绘制一些手柄以使其可以使用鼠标进行修改。 (我希望线的端点是可移动的,矩形是可拉伸的,等等。)在“线”,“贝塞尔曲线”等上的手柄线上有示例,但是它们不处理具有不同点的问题。类型。

在下面的代码中,就像我的代码一样,单击鼠标即可检索drawingVisual对象。但是,由于drawingVisuals上没有显示“这是一个矩形”或“这是一条线”的任何特殊功能,因此我需要找出一种从HitTestResult结果中获取信息的方法。知道这一点,我可以确定要修改它时的处理方式。一条线将具有2个控制点,一个矩形将具有4个控制点,而我的其他一些(尚未制作)几何形状将具有6个或更多控制值。

当我进入调试模式下的visualTree(通过Debug> Window访问)时,所有内容都为“ DrawingVisual”。没有足够的信息来知道如何将其视为直线或矩形。

因此,在大型的CAD程序上,它们使您可以修改单击的对象。该软件可以某种方式了解您所单击的内容,我希望在初学者级CAD程序中具有该功能。

我尝试使用调试功能并寻找某种唯一标识符,但找不到一个。我曾考虑过使用List并在创建时提供每个项目,但无法将其与HitTestResult结果链接起来。

可以做到的,所以这不是问题,但是我需要一个模仿CAD程序如何实现此功能的方案。

private void OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    // Retrieve the coordinate of the mouse position.
    Point pt = e.GetPosition((UIElement)sender);

    HitTestResult result = VisualTreeHelper.HitTest(myCanvas, pt);

    if (result != null)
    {
        // Perform action on hit visual object.
    }
}

任何帮助我告诉我如何实现的帮助,将不胜感激。基本上,高性能CAD程序用来跟踪鼠标单击的Visual类型的方案是什么?

TYIA

0 个答案:

没有答案