【问题标题】:Drawing editable and selectable shapes with Win2D?使用 Win2D 绘制可编辑和可选择的形状?
【发布时间】:2017-01-25 14:51:14
【问题描述】:

我之前使用System.Windows.ShapesShapes 添加到Canvas-controls。 它们可以像对象一样使用,并且在我编辑字段时视觉效果会发生变化。我还可以为点击等添加事件处理程序。

我需要使用Win2D 来实现这种功能。有什么简单的方法吗?

我正在尝试创建一个像这样的简单应用:

  • 用户可以在画布上绘制形状
  • 可以通过单击来选择和突出显示形状
  • 可以操纵选定的形状(颜色、不透明度、宽度、高度、位置等)
  • 形状可以相互叠加(Z-index)

我想一种方法是使用Draw-methods 创建自定义Shape 类。然后我只操作对象 - 更改将通过Draw-方法反映到视觉效果。在每次画布失效时,将再次绘制对象。

有什么想法吗?

【问题讨论】:

  • 似乎我可以使用CanvasTextLayout.LayoutBoundsCanvasGeometry.ComputeBounds 来获取一些绘制对象的外部边界。将其用作可点击区域可能是第一步,但这并不那么准确。在空白中间单击时,它会选择一个线圈 - 不仅在单击线时。用户可以在这些模式之间进行选择。

标签: c# uwp win2d


【解决方案1】:

Win2D 可以帮助您进行命中测试。对于具有填充颜色的几何图形,请使用CanvasGeometry.FillContainsPoint(...),对于只有轮廓/笔划的几何图形,请使用CanvasGeometry.StrokeContainsPoint(...)。使用这两种方法,您将获得准确的命中测试。对于非矩形形状(包括旋转的矩形),使用边界并不准确。

对于 z-indexing,您必须跟踪几何图形的顺序并从上到下遍历列表,直到 PointerPoint 遇到问题。

如果您的几何列表太大并且您注意到滞后,那么您可以先使用边界开始命中测试,如果失败,继续下一项,如果命中,然后使用上述方法获得准确阅读。

【讨论】:

    猜你喜欢
    • 2023-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多