C#
我目前正在使用WPF Shapes在画布上创建绘图软件。
我创建了一个系统,允许用户在形状上使用透明画布移动和旋转Canvas上的形状(与形状一起旋转):
绿色点用于旋转形状,矩形上的蓝色区域用于移动形状。 我想用我的4个红点重新调整形状。
但形状是可旋转的,所以角度坐标与调整形状不完全相关。 在我看来,只有当旋转等于0时才有意义,因为在180度旋转之后,左上角可以是右下角。
现在,我使用RotateTransform
实现了旋转0.5, 0.5
RenderTransformOrigin
。 我想避免使用的ScaleTransform
,因为我想保持StrokeThickness
在它的大小是。
所有红点都是伪可拖动的(使用MouseDown,MouseMove,MouseUp事件)。 我使用了一个缓冲点,它给了我两个鼠标事件之间在X和Y方向上的增量。
如何使用deltas来调整形状的大小,即使它被旋转或移动?
如果旋转,您可以使用变化量来调整形状的大小。 你唯一需要做的就是旋转鼠标移动。 如你看到的:
vectorrotate http://s1.directupload.net/images/140313/ajrbvy55.jpg
鼠标从原点到位置的移动描述了一个2-D矢量。 您可以使用以下公式以数学方式旋转此向量:
x'= cos(θ)* x - sin(θ)* y
y'= sin(theta)* x + cos(theta)* y
其中x / y是鼠标相对于resize原点的当前位置,theta是可以在形状的RotateTransform-object(Angle-Property)中找到的旋转角度。 在这一点上,我不知道你是否必须使用-theta,因为矢量必须以相反的方向旋转。
您可以选择x'/ y'来计算增量,并调整形状的大小,就像它没有旋转一样。
我没有自己实现这个。 这只是一个普遍的想法。 也许我可以用一些简单的代码来提供服务,如果你尝试这些,给予反馈或者更深入地指出问题或者用一些代码更新你的问题。
附录:
如果可以访问形状的宽度和高度属性,则使用deltas调整形状应该很容易。 您只需根据抓取点简单地向/从宽度添加/减去x-delta和/或向高度添加/减去y-delta。 这不受画布内形状的位置影响。 也许你必须调整形状的Canvas.Left / Canvas.Top-Property。 也就是说,如果用户抓住左上角并将其调整为左/上,那么您应该从左侧和顶部多孔性减去增量。 否则它会向右/向下扩展。
链接地址: http://www.djcxy.com/p/77861.html上一篇: c#