Scalere liste med Points
Jeg har en liste med Points (til at tegne en polygon) som fint tegner det den skal.Men hvis nu programmet bliver åbnet på en anden pc med en anden opløsning så passer placeringen jo ikke mere..
Jeg har så prøve med følgende funktion:
Function GetScaledPoint(ByVal s As List(Of Point)) As List(Of Point)
Dim xfactor As Double = 0
Dim yfactor As Double = 0
Dim nlist As New List(Of Point)
Dim OriginalSize As Size = New Size(startwidth, startheight)
Dim NewSize As Size = New Size(FlorPlan.Width, FlorPlan.Height)
For i As Integer = 0 To s.Count - 1
Dim nWidth As Integer = 0
Dim nHeight As Integer
If NewSize.Width < OriginalSize.Width Then
xfactor = OriginalSize.Width / NewSize.Width
nWidth = Math.Round(s(i).X / Math.Round(xfactor, 2), 0)
Else
xfactor = NewSize.Width / OriginalSize.Width
nWidth = Math.Round(s(i).X * Math.Round(xfactor, 2), 0)
End If
If NewSize.Height < OriginalSize.Height Then
yfactor = OriginalSize.Height / NewSize.Height
nHeight = Math.Round(s(i).Y / Math.Round(yfactor, 2), 0)
Else
yfactor = NewSize.Height / OriginalSize.Height
nHeight = Math.Round(s(i).Y * Math.Round(yfactor, 2), 0)
End If
'MsgBox(nWidth & " x " & nHeight)
nlist.Add(New Point(nWidth, nHeight))
Next
Return nlist
End Function
Men udover at den ikke er helt præsis (+/- 8 px) så skal den jo også vide hvilken opløsning polygonen oprindeligt er tegnet med?
Findes der noget andet smart? Eller skal jeg bare gemme opløsning sammen med polygonen i databasen?