0
在我的WPF多點觸控應用程序中,我想檢查路徑是否與另一路徑重疊。如何檢查2個WPF路徑(使用MatrixTransform)是否重疊
我該怎麼做?我發現在互聯網上不同的解決方案,但沒有工作,因爲需求的結合,:
- 2路徑不規則形狀的(這樣界限不工作:沒有矩形)
- 路徑上的一個MatrixTransform應用
- 路徑可以旋轉和縮放(使用MatrixTransform)(因爲操縱事件)
- 的RenderTransformOrigin爲0.5,0.5
我怎樣才能做到這一點?
示例:在本例中,藍色和紅色星星重疊,紅色和綠色不重疊。
<Window x:Class="WPFTest.OtherWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="OtherWindow" Height="300" Width="300" >
<Canvas >
<Path x:Name="path1" Data="M17,0 L23,11 34,13 27,21 28,32 18,24 8,30 9,19 0,11 13,11 z" Fill="#99FF0000" Stroke="Black" RenderTransformOrigin="0.5,0.5">
<Path.RenderTransform>
<MatrixTransform Matrix="1,0,0,1,50,50"/>
</Path.RenderTransform>
</Path>
<Path x:Name="path2" Data="M17,0 L23,11 34,13 27,21 28,32 18,24 8,30 9,19 0,11 13,11 z" Fill="#990000FF" Stroke="Black" RenderTransformOrigin="0.5,0.5">
<Path.RenderTransform>
<MatrixTransform Matrix="0.777817459305202,0.777817459305202,-0.777817459305202,0.777817459305202,35,45"/>
</Path.RenderTransform>
</Path>
<Path x:Name="path3" Data="M17,0 L23,11 34,13 27,21 28,32 18,24 8,30 9,19 0,11 13,11 z" Fill="#9900FF00" Stroke="Black" RenderTransformOrigin="0.5,0.5">
<Path.RenderTransform>
<MatrixTransform Matrix="0.777817459305202,0.777817459305202,-0.777817459305202,0.777817459305202,82,55"/>
</Path.RenderTransform>
</Path>
</Canvas>
如何檢查這從後面的代碼?
感謝,
吉姆
感謝您的答覆。我測試了它,它工作。但是,當我嘗試更新代碼中的轉換(通過:redGeometry.Transform = new MatrixTransform(......))時,該對象在屏幕上正確轉換,但FillContainsWithDetail不返回正確的值。有任何想法嗎? – Jim 2012-01-07 21:44:45
查看已更改的答案,數據而不是RenderedGeometry應該可以工作。 – Clemens 2012-01-07 23:43:05
Jim,如果將frm RenderedGeometry更改爲Data,它是否按預期工作?如果是,請考慮通過點擊接受打勾接受答案。 – Clemens 2012-01-26 08:56:47