Guten Tag,
Normalerweise ist der Ursprung (Origin) für Zeichenoperationen in einem Image ja oben links und nimmt nach unten bzw. rechts zu.
Ist es möglich für die 2D Zeichenoperationen (LineXY, Ellipse etc.) die Ausrichtung und den Ursprung (Origin) in einem Image zu verändern? Für die Darstellung eines Diagramms wäre es z.B. hilfreich den Ursprung nach unten links und die Richtung von unten nach oben zu ändern.
Vielen Dank.
Origin für zeichenoperationen ändern
Re: Origin für zeichenoperationen ändern
Nicht, dass ich wüsste. Aber du kannst dir ja einfach Macros dafür schreiben.
Code: Alles auswählen
origin_x = 0
origin_y = 600
Macro Box_Origin(x, y, width, height, color)
Box(origin_x + x, origin_y - y, width, -height, color)
EndMacro
Macro Circle_Origin(x,y,radius,color)
Circle(origin_x + x, origin_y - y, radius, color)
EndMacro
CreateImage(0,800,600)
StartDrawing(ImageOutput(0))
Box(0, 0, 100, 100, $FF0000)
Box_Origin(0, 0, 100, 100, $FF0000)
Box_Origin(200, 0, 80, 200, $0000FF)
origin_y = 300
Box_Origin(400, 0, 80, 200, $009900)
Box_Origin(500, 0, 80, -200, $000099)
origin_x = 400
origin_y = 300
Circle_Origin(0, 0, 100, $00FF00)
StopDrawing()
OpenWindow(0, 0, 0, 800, 600, "", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ImageGadget(0,0,0,800,600,ImageID(0))
Repeat
event = WaitWindowEvent(20)
Until event = #PB_Event_CloseWindow
Re: Origin für zeichenoperationen ändern
Das ist eine interessante Möglichkeit. Vielen Dank für diese Lösung.
Re: Origin für zeichenoperationen ändern
Mir fällt gerade ein, dass du mit Macros sogar die original Funktionen überschreiben kannst.
Allerdings gibt es keinen Aus-Knopf dafür, so dass man wieder die Original PB-Funktionen verwendet (so wie Enable /Disableexplicit).
Allerdings gibt es keinen Aus-Knopf dafür, so dass man wieder die Original PB-Funktionen verwendet (so wie Enable /Disableexplicit).
Re: Origin für zeichenoperationen ändern
Das lässt sich z.B. mit Parametern steuern.TomS hat geschrieben:Mir fällt gerade ein, dass du mit Macros sogar die original Funktionen überschreiben kannst.
Allerdings gibt es keinen Aus-Knopf dafür, so dass man wieder die Original PB-Funktionen verwendet (so wie Enable /Disableexplicit).
Könnte ungefähr so aussehen (wenn ich keinen Fehler eingebaut habe):
Code: Alles auswählen
EnableExplicit
Procedure ExtendedBox (x, y, width, height, color, origin_x, origin_y)
If origin_x = -1 And origin_y = -1
; Die originale PB-Funktion verwenden.
If color = -1
Box(x, y, width, height)
Else
Box(x, y, width, height, color)
EndIf
Else
; Modifizierte Fassung verwenden (Ursprung unten links).
If color = -1
Box(origin_x + x, origin_y - y, width, -height)
Else
Box(origin_x + x, origin_y - y, width, -height, color)
EndIf
EndIf
EndProcedure
Macro Box (x, y, width, height, color=-1, origin_x=-1, origin_y=-1)
ExtendedBox(x, y, width, height, color, origin_x, origin_y)
EndMacro
;-------------------------------------------------------------------
; Demo:
Define event
CreateImage(0, 800, 600)
StartDrawing(ImageOutput(0))
Box( 0, 0, 100, 100, $FF0000)
Box( 0, 0, 100, 100, $FF0000, 0, 600)
Box(200, 0, 80, 200, $0000FF, 0, 600)
Box(400, 0, 80, 200, $009900, 0, 300)
Box(500, 0, 80, -200, $000099, 0, 300)
StopDrawing()
OpenWindow(0, 0, 0, 800, 600, "", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ImageGadget(0, 0, 0, 800, 600, ImageID(0))
Repeat
event = WaitWindowEvent(20)
Until event = #PB_Event_CloseWindow