PDA

Vollständige Version anzeigen : Hilfe, script fu dreht merkwürdig!


MR-L
02.10.2009, 21:28
Hi,
brauche dringend hilfe, denn ich bin ein blutiger Anfänger in Scheme.
Bei meinem gekürzten Script habe ich das Problem, dass gimp zu weit dreht.
Hoffe, dass irgendwer mir helfen kann.

(define (rotate sfImage
sfDrawable
sfAngle)

(let* (
(varCenterX 0)
(varCenterY 0)
)

(set! varCenterX
(/
(car
(gimp-image-width sfImage)
)
2)
)
(set! varCenterY
(/
(car
(gimp-image-height sfImage)
)
2)
)

(gimp-drawable-transform-rotate-default sfDrawable
sfAngle
TRUE
varCenterX
varCenterY
TRUE
0
)
(gimp-displays-flush)
)
)
(script-fu-register
"rotate"
"rotate"
"Rotates the active Layer."
"Mr.L"
"copyright 2009, Mr.L"
"02.10.2009 21:01:44"
"*"
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-ADJUSTMENT "Angle" '(0.5 -180 180 0.1 1 2 0)
)
(script-fu-menu-register "rotate" "<Image>/Filters/Own Script Fu's")

Mohi
03.10.2009, 01:08
Hallo Mr. L

Nach langem Rumprobieren habe ich endlich eine Lösung für dein Problem gefunden. Die Prozedur gimp-drawable-transform-rotate-default verlangt einen Winkel in der Einheit Radiant und nicht Grad (frag mich aber nicht wieso), deswegen wird das Bild auch nicht wie gewünscht gedreht.
Um trotzdem Eingaben im Grad-System machen zu können, musst du also den Winkel aus dem Grad-System ins Radiant-System umwandeln.
Ich habe dir hier eine kleine Funktion geschrieben, die das für dich erledigt (hatte ziemlich merkwürdige Probleme dabei^^):

;Wandelt einen Gradwinkel in einen Radiantwinkel um
(define (degToRad sfDeg)
(let * (
(varRadPerigon (* (* (atan 1.0) 4) 2)) ;(atan 1.0) * 4 = Pi; 2 * Pi = Vollwinkel im rad-Winkelsystem
(varPartOfPerigon (/ 360 sfDeg)) ;Berechne das Verhältnis des angegebenen Winkels zu einem vollen Winkel
)
(/ varRadPerigon varPartOfPerigon) ;Gibt den umgewandelten Winkel zurück
)
)

Füge diese Funktion einfach über deiner Funktion ein; beim Aufruf der gimp-drawable-transform-rotate-default-Methode übergibst du nicht direkt sfAngle sondern (degToRad sfAngle). Dann sollte alles funktionieren.

Hoffe damit ist dein Problem gelöst.
Mohi