Existuje třída GraphicsPathIterator, která umí získat body a typy jednotlivých figur v objektu GraphicsPath. Mohl byste iterovat figurami a pomocí Enumerate metody GraphicsPathIteratoru nebo vlastností PathPoints a PathTypes si vybrat body a řídící prvky konkrétní figury, ale z těchto dat byste pro hit-testing musel stejně sestavit novou GraphicsPath, abyste měl přístup k mětodě IsOutlineVisible. Mnohem jednodušší, než dočasně vytvářet tyto nové GraphicsPath je tedy použít vlastní GraphicsPath pro každý prvek geometrie, který má být testovatelný na kolizi. Místo:
Using path As New Path()
path.StartFigure()
path.AddLine(10, 10, 100, 10)
path.CloseFigure()
path.StartFigure()
path.AddLine(10, 50, 100, 50)
path.CloseFigure()
End Using
Tedy použijte více objektů GraphicsPath pro každou figuru:
Dim paths As New List(Of GraphicsPath)
Dim path1 As New Path()
path1.AddLine(10, 10, 100, 10)
paths.Add(path1)
Dim path2 As New Path()
path2.AddLine(10, 50, 100, 50)
paths.Add(path1)
For Each path In paths
If path.IsOutlineVisible() Then
'Testujete proti konkrétní figuře
End If
Next
Místo jedné cesty s více figurami tedy budete mít cestu pro každou figuru. Nezapomeňte zavolat Dispose na každé cestě, kterou přestanete potřebovat (jak to za Vás dělá v prvním přkladu Using - End Using).
|