相对于一个边界矩形缩放多个对象

3
我正在尝试弄清楚画布上多个选定对象的缩放算法(类似于Visio的行为)。例如,我在我的应用程序中选择了以下对象:

然后,我拖动边界框的右下角手柄以增加所选对象的大小,从而产生以下结果:

enter image description here

我的问题如下:
  1. 如何获得要应用于每个对象的缩放量?
  2. 如何获得要应用于每个对象的平移量?
希望这个问题有意义。希望你能帮忙。
1个回答

0
嗨,我认为这里没有翻译,只有缩放。一种简单的方法是保留对象的宽度和高度(如上面的文本框),然后在需要获取该对象的缩放值时使用。
ScaleTransform scale = new ScaleTransform();
        //_text is the scaled object
        scale.ScaleX = text.ActualWidth - _width; //_width is width of the textbox at beginning.
        scale.ScaleY = text.ActualHeight - _height; //_height is the height of textbox at the beginning.

这将给你一个对象按照文本框的宽度和高度在开始时缩放的量。希望这能给你一个想法。

实际上,我相信是有的。考虑一下:http://imgur.com/FVIwL。在这里,旋转90度的对象必须进行平移,以便保持在边界矩形的角落。这张图片还显示了使用您上面提到的公式将无法足够计算对象的ScaleX和ScaleY。在图片中,只调整了边界框的宽度。但实际上是调整了90度对象的高度而不是宽度。因此,还必须考虑对象相对于边界框的旋转角度。 - ASanch
是的,在那张图片中有翻译,但没有缩放。翻译不会改变图像本身,它只是通过增加或减少对象的每个像素相同的数量来重新定位对象(即高度和宽度将保持与开始时相同)。 - yo chauhan
嗯,我相信这张图片中也有缩放。只是不太明显而已。考虑一个稍微修改过的例子:http://i.imgur.com/6dCQW.png。在这里,我们将边界矩形的大小调整为原始大小的2倍。这张图片中的90度物体被缩放(即其高度是原始高度的2倍),同时也进行了平移。 - ASanch
是的,现在在这张图片中既有缩放又有变换。 - yo chauhan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接