【发布时间】:2011-09-01 05:22:09
【问题描述】:
我有几个项目,我想计算一个可以容纳它们的最小矩形,但是项目旋转到一定程度,或倾斜或两者兼而有之。那么如何获得可以包含所有内容的最小矩形?
【问题讨论】:
标签: c# wpf vb.net silverlight transform
我有几个项目,我想计算一个可以容纳它们的最小矩形,但是项目旋转到一定程度,或倾斜或两者兼而有之。那么如何获得可以包含所有内容的最小矩形?
【问题讨论】:
标签: c# wpf vb.net silverlight transform
您可以获取每个项目的边界框,计算其四个极值点,然后对其应用变换(倾斜、旋转、...)
然后您可以通过计算所有这些点的最小和最大 x 和 y 来轻松计算边界框。
【讨论】:
在你想要的项目列表上做一个 foreach。在循环的每次迭代中,获取项目的 Canvas 位置(左上角)并添加 ActualWidth/ActualHeight 以获得右下角点。取左上和右下点,调用Transform.Transform得到ACTUAL左上和右下点。
跟踪左上角和右下角的最小值和最大值以获得边界框。
【讨论】:
这里是Dynamic Canvas 实现的链接。此控件会自动调整大小以适应其内容,因此您的问题的答案可以在此代码中找到。查看 MeasureOverride 函数。
【讨论】: