die Lösung dafür ist relativ simpel. Der Punkt (Cursor) wird zurückgedreht, darauf folgt eine simple bounding Box Prüfung. Leider ist die Funktion zur Rotation scheinbar recht CPU lastig wenn sie permanent aufgerufen wird.
Vielleicht finden sich ja ASM Gurus die es beschleunigen können.
Code: Alles auswählen
Structure POINTF
x.f
y.f
EndStructure
Procedure Rotate(*PointF.POINTF, angle.f, *Center.POINTF=#Null)
Protected x.f, y.f
Protected Sin.f = Sin(Radian(angle)), Cos.f = Cos(Radian(angle))
If *Center
x = *PointF\x - *Center\x
y = *PointF\y - *Center\y
EndIf
*PointF\x = Cos*x - Sin*y
*PointF\y = Sin*x + Cos*y
If *Center
*PointF\x + *Center\x
*PointF\y + *Center\y
EndIf
ProcedureReturn *PointF
EndProcedure
Define Mouse.POINTF : Mouse\x = 10 : Mouse\y = 10
Define Center.POINTF : Center\x = 0 : Center\y = 0
Rotate(@Mouse, 45, @Center)
Debug Mouse\x
Debug Mouse\y