Das bißchen Script-Fu macht sich von allein … (Part 3)

ClaraFall
Beiträge: 99
Registriert: Di 5. Jul 2011, 20:36
Skype:
Kontaktdaten:

Das bißchen Script-Fu macht sich von allein … (Part 3)

Beitragvon ClaraFall » Sa 10. Mär 2012, 18:58

Hallo Ihr Lieben

Dann wollen wir mal weitermachen.

Wir kennen bereits die drei Teile eines GIMP - Skript – Fu - Programmes.
Das Skript, die Registrierung und die Menüstruktureinstellung.
Wir haben auch schon die ersten Skriptbefehle und GIMP-Prozeduren
kennengelernt.

Nachdem wir jetzt die ersten Schritte in Skript – Fu gemeistert haben und uns
Im letzten Part mit der ersten Version des Hilfslinien-Tools beschäftigt hatten.
wollen wir heute der Nummer 2 etwas Leben einhauchen.
Hier noch einmal das Gerippchen:

Bild

An der Maske erkennen wir, wie unser Tutorial (Grobprogramm) aussehen sollte:

  • Soll gelöscht werden
    • Wenn ja
    • Sollen die horizontalen Hilfslinien gelöscht werden
      • Wenn ja; alle horizontalen Hilfslinien löschen
    • Sollen die vertikalen Hilfslinien gelöscht werden
      • Wenn ja; alle vertikalen Hilfslinien löschen
    • Sollen alle Hilfslinien gelöscht werden.
      • Wenn ja; alle Hilfslinien löschen
  • Sollen horizontale Hilfslinien gesetzt werden
    • Wenn ja
    • Ist die Bemaßung Prozent
      • Wenn ja; Berechne den Pixelabstand
    • Ist die Bemaßung Pixel
      • Wenn ja; wir haben bereits den Pixelabstand
    • Soll nur eine Hilfslinie an einer bestimmten Position gesetzt werden
      • Wenn ja; Schleifen-Ende-Zähler auf 1 setzen
    • Sollen mehrere Hilfslinien in bestimmten Abständen gesetzt werden
      • Wenn ja; Schleifen-Ende-Zähler aus Pixelabstand berechnen
    • Schleife "Horizontale Hilfslinie setzen" ausführen
  • Sollen vertikale Hilfslinien gesetzt werden
    • Wenn ja
    • Ist die Bemaßung Prozent
      • Wenn ja; Berechne den Pixelabstand
    • Ist die Bemaßung Pixel
      • Wenn ja; wir haben bereits den Pixelabstand
    • Soll nur eine Hilfslinie an einer bestimmten Position gesetzt werden
      • Wenn ja; Schleifen-Ende-Zähler auf 1 setzen
    • Sollen mehrere Hilfslinien in bestimmten Abständen gesetzt werden
      • Wenn ja; Schleifen-Ende-Zähler aus Pixelabstand berechnen
    • Schleife "Vertikale Hilfslinie setzen" ausführen


Hilfslinien Löschen

Beginnen wir wieder mit dem Löschen.
Dieses Mal soll allerdings nicht nur entweder gelöscht oder nicht gelöscht werden,
es kann sich auch ausgesucht werden, ob nur die horizontalen oder nur die vertikalen Hilfslinien entfernt werden sollen.
Dazu benutzen wir nicht das Kontrollkästchen SF-TOGGLE sondern ein Auswahlfeld SF-OPTION.
Bei der Parameterübergabe wird also dieses Mal nicht TRUE oder FALSE übergeben,
sondern das Ergebnis der Auswahl.
Das ist aber nicht der Text wie ALLE oder KEINE
sondern die Positionsnummer in der Liste,
wobei GIMP (Sheme) beim Zählen mit 0 beginnt.

Unserer Zeile:

Code: Alles auswählen

SF-OPTION "Hilfslinien löschen"     '("Alle"
                                      "Alle Horizontalen"
                                      "Alle Vertikalen"
                                      "Keine")

bedeutet also, daß einer der folgenden Werte übergeben wird:

0 bei "Alle"
1 bei "Alle Horizontalen"
2 bei "Alle Vertikalen" und
3 bei "Keine"

Ob wir also überhaupt löschen, prüfen wir mit der if – Abfrage:

Code: Alles auswählen

(if ( < p-Loesch 3)  ; wenn der übergebene Wert kleiner 3 ist
  (begin             ; dann kann gelöscht werden

  )
)

Wie das Löschen ALLER Hilfslinien vor sich geht, wissen wir bereits,
Wir holen die erste Hilfslinien ID und löschen sie.
Wir holen die nächste Hilfslinien ID und löschen sie.
Das passiert so lange, bis die zu holende ID Null ist.

Es wird also zuerst mal wieder eine Variable angelegt.
Diese wird auch gleich im (let* Variablendefinitionsbereich vorbelegt.

Code: Alles auswählen

(hilfslinien-ID (car (gimp-image-find-next-guide p-Bild 0)))

Was aber ist zu tun, wenn nur die horizontalen Hilfslinien gelöscht werden sollen?
Wir holen die HilfslinienID
Prüfen deren Ausrichtung
Ist sie Horizontal wird gelöscht.

Hier ergibt sich jetzt ein Problem:
Wenn die nächste Hilfslinie nicht horizontal sondern vertikal ist,
wir aber immer mit 0 anfangen, nach der nächsten Hilfslinie zu suchen,
dann bekommen wir immer wieder diese vertikale Hilfslinie
und unser Skript läuft bis in alle Ewigkeit.
Das kann umgangen werden, indem nur einmal bei 0 begonnen wird,
anschließend wird der gefundene Wert als neuer Startwert genommen.

Wenn jetzt aber die gefundene Hilfslinie wirklich horizontal angelegt ist,
soll sie ja gelöscht werden.
Wenn wir dann diese Hilfslinie löschen und ihre ID als Ausgangs-ID benutzen,
wird es aber eine Fehlermeldung geben, da sie ja nicht mehr existiert.

Ein Teufelskreis

Dieses Problem zu lösen gibt es verschiedene Möglichkeiten:
  • Es werden zuerst alle IDs gesammelt (natürlich in einer Variablen),
    die gelöscht werden sollen.
    Danach werden die IDs aus der Variablen wieder ausgelesen
    und nacheinander gelöscht.
    Wir müssen also im Extremfall zweimal durch die Hilfslinien-ID-Liste.
    Keine tolle Idee.
  • Wenn wir löschen, dann nehmen wir nicht die aktuelle ID als Ausgangswert,
    sondern wieder 0.
    Das kann allerdings dazu führen,
    daß die Liste mit den IDs einige Dutzend male durchforstet wird.
    Noch schlechtere Idee
  • Wir merken uns einfach die letzte funktionierende (nicht gelöschte) ID.
    Das machen wir!
Wie wir uns was merken wissen wir, klar in einer Variablen:

Code: Alles auswählen

(last-ID 0)    ; Variable wird gleich bei der Definition mit 0 vorbelegt

Sollte nämlich bereits die allererste ID gelöscht werden,
war die zuletzt funktionierende ID die Null.

Code: Alles auswählen

( if ( = SollGeloeschtWerden TRUE)
  (begin
    (gimp-image-delete-guide p-Bild hilfslinien-ID)  ; dann lösche
    (set! hilfslinien-ID last-ID)   ; und setze  hl-ID zurück auf last-ID
  )
  (begin               ; wird nicht gelöscht
    (set! Last-ID hilfslinien-ID)    ; merke diese ID als letze-ID
  )
)

; hole die nächste ID
(set! hilfslinien-ID (car (gimp-image-find-next-guide p-Bild hilfslinien-ID)))

Zwei Dinge fallen hier auf.
  • Die beiden (beginn … ) Blöcke in der if – Abfrage.
    Der erste Block ist klar, der soll erledigt werden,
    wenn die Abfrage wahr ist.
    Der zweite hingegen ist der sogenannte ELSE (Ansonsten) Block
    Der wird genau nur dann ausgeführt,
    wenn die if – Abfrage nicht wahr ist.
    In unserem Fall wird sich die Hilfslinien-ID gemerkt, wenn sie nicht gelöscht wird.
  • Wo kommt das SollGeloeschtWerden her?
    hier müßte ja drinnen stehen, ob die aktuelle Hilfslinie gelöscht werden soll.
    Genau, das wird eine Variable, der wir mitteilen, ob oder ob nicht gelöscht wird.
Zuerst wird die Variable natürlich wieder definiert und
mit auf keinen Fall Löschen (FALSE) vorbelegt.

Code: Alles auswählen

(SollGeloeschtWerden FALSE)

Da wir jetzt 3 verschiedene Löschmöglichkeiten haben,
müßten wir drei if – Abfragen konstruieren.
Und selbst wenn die erste schon wahr wäre
würden die anderen Beiden trotzdem immer mit abgearbeitet werden.
Das wäre zu viel verschwendete Rechnerarbeitszeit.
Hierfür gibt es das (cond ) Konstrukt.

Das sieht in etwa so aus:

Code: Alles auswählen

(cond ((Abfrage 1)
   (begin
         ; Block der abgearbeitet wird,
         ; wenn Abfrage 1 wahr ist
   )
      )
      ((Abfrage 2)
   (begin
         ; Block der abgearbeitet wird,
         ; wenn Abfrage 2 wahr ist
   )
      )
      ((Abfrage 3)
   (begin
         ; Block der abgearbeitet wird,
         ; wenn Abfrage 3 wahr ist
   )
      )

 ; und so weiter

)

Für uns würde es dann so aussehen:

Code: Alles auswählen

(set! SollGeloeschtWerden FALSE)
 
(cond ((= p-Loesch 0) ; Alles Löschen wurde gewählt
   (begin
     (set! SollGeloeschtWerden TRUE)
   )
      )
      ((= p-Loesch 1) ; Alle Horizontalen Hilfslinien Löschen wurde gewählt
   (begin
     (set! SollGeloeschtWerden TRUE)
   )
      )
      ((= p-Loesch 2) ; Alle Vertikalen Hilfslinien Löschen wurde gewählt
    (begin
       (set! SollGeloeschtWerden TRUE)
   )
      )

Wir prüfen zwar, welche Auswahl getroffen wurde, aber es werden dennoch immer ALLE Hilfslinien gelöscht, da wir ja noch nicht testen, ob sie auch wirklich horizontal oder vertikal ausgerichtet sind.

Das kann schnell korrigiert werden mit gimp-image-get-guide-orientation.

Code: Alles auswählen

(if (= (car(gimp-image-get-guide-orientation p-Bild hilfslinien-ID)) ORIENTATION-HORIZONTAL)
    (begin
      (set! SollGeloeschtWerden TRUE)
   )
)

Es wird also geprüft, ob die Richtung der Hilfslinie Horizontal ist.
Dann wird die Variable SollGeloeschtWerden auf TRUE gesetzt.

Der komplette Löschabschnitt sieht jetzt bereits schon so aus.


Code: Alles auswählen

; Löschen vorhandener Hilfslinien
; ===============================

  (if ( < p-Loeschen 3)          ; wenn der übergebene Löschwert kleiner 3 ist
    (begin                       ; dann kann gelöscht werden
      (while (<> hilfslinien-ID 0)
        (begin
         (set! SollGeloeschtWerden FALSE) ;Setzt die Variable auf FALSE
           (cond ((= p-Loeschen 0)    ; Alles Löschen wurde gewählt
             (begin
               (set! SollGeloeschtWerden TRUE)
              )
            )
                ((= p-Loeschen 1) ; Alle Horizontale Hilfslinien Löschen wurde gewählt
                  (begin
                    (if (= (car(gimp-image-get-guide-orientation p-Bild hilfslinien-ID)) ORIENTATION-HORIZONTAL)
                      (begin
                        (set! SollGeloeschtWerden TRUE)
                      )
                    )
                  )
                )
                ((= p-Loeschen 2) ; Alle Vertikalen Hilfslinien Löschen wurde gewählt
                  (begin
                    (if (= (car(gimp-image-get-guide-orientation p-Bild hilfslinien-ID)) ORIENTATION-VERTICAL)
                      (begin
                        (set! SollGeloeschtWerden TRUE)
                      )
                    )
                  )
                )
              )

        ( if ( = SollGeloeschtWerden TRUE)
          (begin
            (gimp-image-delete-guide p-Bild hilfslinien-ID) ; dann lösche
            (set! hilfslinien-ID last-ID)   ; und setze  hl-ID zurück auf last-ID
          )
          (begin                                 ; wird nicht gelöscht
            (set! last-ID hilfslinien-ID)    ; merke diese ID als letze-ID
          )
          )

            (set! hilfslinien-ID (car (gimp-image-find-next-guide p-Bild last-ID)))

          )
        )
      )
    )


Ihr seht, daß auch Verschachtelungen von (if), (while) und(cond) möglich sind.
Wichtig ist nur, daß alle Klammern richtig gesetzt werden.


Horizontale Hilfslinien setzen

Zuerst benötigen wir den Abstand der Hilfslinien
Dazu testen wir, ob die Einheit Prozent ist.
Wenn das der Fall ist, berechnen wir die Prozent mittels ((Bildbreite / 100) * Prozentwert)

Code: Alles auswählen

(if  (= p-Einheit 0)   ; Sind die Angaben in Prozent
  ( begin
    (set! TeilBreite (* (/ BildBreite 100) p-Wert))   
    (set! TeilHoehe (* (/ BildHoehe 100) p-Wert))   
  )
)


; Sollen horizontale Hilfslinien gesetzt werden?
    (if (= p-Hor TRUE)

; Wenn Ja, dann beginne
      (begin

; Sollen sie mehrfach gesetzt werden
        (cond  ((= p-Wie 0)

; Wenn ja, dann beginne
          (begin

; setze den Zähler auf 1
            (set! zaehler 1)

; prüfe ob Zähler mal Horizontaler Abstand noch im Bild sind?
            (while (< (* zaehler TeilHoehe) BildHoehe)

; Wenn ja durchlaufe den Schleifenzyklus
              (begin

; Setze eine horizontale Hilfslinie bei (Zähler * horizontaler Abstand)
                (gimp-image-add-hguide p-Bild (* zaehler TeilHoehe))

; erhöhe den Zähler um 1
                (set! zaehler (+ zaehler 1))                        
              )
            )
          )      
        )

; Soll nur eine horizontale Hilfslinie gesetzt werden
          ( (= p-Wie 1)
            (begin

; dann setze sie bei Abstand
              (gimp-image-add-hguide p-Bild TeilHoehe)

            )      
          )
        )
      )
    )


Sicher ist Euch aufgefallen, daß hier einige Variablen benutzt wurden, die überhaupt noch nicht definiert sind. Das wollen wir gleich mal nachholen.

Code: Alles auswählen

(AbstandHor in-Wert)   
(zaehler 0)
(BildBreite (car (gimp-image-width in-Bild)))
(BildHoehe (car (gimp-image-height in-Bild)))
(TeilBreite p-Wert)
(TeilHoehe p-Wert)   


Die Programmierung des Setzens der vertikalen Hilfslinien sollte jetzt kein Problem mehr sein.
Hier noch einmal das komplette Skript.
Kopiert es in eine SCM-Datei und Ihr spart Euch die Arbeit es abzuschreiben.


Code: Alles auswählen

;**************************************************************
;* Version B  etwas Flexibler
;**************************************************************
; Teil 1 Das Script
;======================================================
(define (script-fu-cf-tools-hilfslinien-b
            p-Bild
            p-Ebene
            p-Loeschen
            p-Hor
            p-Ver
            p-Wie
            p-Wert
            p-Einheit)   
           
  (let* (                    ;beginn der Variablendefinition
    (hilfslinien-ID (car (gimp-image-find-next-guide p-Bild 0)))
    (last-ID 0)           ; Variable wird gleich bei der Definition mit 0 vorbelegt
    (SollGeloeschtWerden FALSE)
    (zaehler 0)
    (BildBreite (car (gimp-image-width p-Bild)))
    (BildHoehe (car (gimp-image-height p-Bild)))
    (TeilBreite p-Wert)
    (TeilHoehe p-Wert)   
  )                          ; ende der Variablendefinition


; Löschen vorhandener Hilfslinien
; ===============================

  (if ( < p-Loeschen 3)          ; wenn der übergebene Löschwert kleiner 3 ist
    (begin                       ; dann kann gelöscht werden
      (while (<> hilfslinien-ID 0)
        (begin
               (set! SollGeloeschtWerden FALSE) ;Setzt die Variable auf FALSE
          (cond ((= p-Loeschen 0)    ; Alles Löschen wurde gewählt
                  (begin
                    (set! SollGeloeschtWerden TRUE)
                  )
                )
                ((= p-Loeschen 1) ; Alle Horizontale Hilfslinien Löschen wurde gewählt
                  (begin
                    (if (= (car(gimp-image-get-guide-orientation p-Bild hilfslinien-ID)) ORIENTATION-HORIZONTAL)
                      (begin
                        (set! SollGeloeschtWerden TRUE)
                      )
                    )
                  )
                )
                ((= p-Loeschen 2) ; Alle Vertikalen Hilfslinien Löschen wurde gewählt
                  (begin
                    (if (= (car(gimp-image-get-guide-orientation p-Bild hilfslinien-ID)) ORIENTATION-VERTICAL)
                      (begin
                        (set! SollGeloeschtWerden TRUE)
                      )
                    )
                  )
                )
              )

        ( if ( = SollGeloeschtWerden TRUE)
          (begin
            (gimp-image-delete-guide p-Bild hilfslinien-ID) ; dann lösche
            (set! hilfslinien-ID last-ID)   ; und setze  hl-ID zurück auf last-ID
          )
          (begin                                 ; wird nicht gelöscht
            (set! last-ID hilfslinien-ID)    ; merke diese ID als letze-ID
          )
          )

            (set! hilfslinien-ID (car (gimp-image-find-next-guide p-Bild last-ID)))

          )
        )
      )
    )

    (if  (= p-Einheit 0)   ; Sind die Angaben in Prozent
      ( begin
        (set! TeilBreite (* (/ BildBreite 100) p-Wert))   
        (set! TeilHoehe (* (/ BildHoehe 100) p-Wert))   
      )
    )


; Sollen horizontale Hilfslinien gesetzt werden?
    (if (= p-Hor TRUE)

; Wenn Ja, dann beginne
      (begin

; Sollen sie mehrfach gesetzt werden
        (cond  ((= p-Wie 0)

; Wenn ja, dann beginne
          (begin

; setze den Zähler auf 1
            (set! zaehler 1)

; prüfe ob Zähler mal Horizontaler Abstand noch im Bild sind?
            (while (< (* zaehler TeilHoehe) BildHoehe)

; Wenn ja durchlaufe den Schleifenzyklus
              (begin

; Setze eine horizontale Hilfslinie bei (Zähler * horizontaler Abstand)
                (gimp-image-add-hguide p-Bild (* zaehler TeilHoehe))

; erhöhe den Zähler um 1
                (set! zaehler (+ zaehler 1))                        
              )
            )
          )      
          )

; Soll nur eine horizontale Hilfslinie gesetzt werden
          ( (= p-Wie 1)
            (begin

; dann setze sie bei Abstand
              (gimp-image-add-hguide p-Bild TeilHoehe)
            )      
          )
        )
      )
    )
   
; Setze vertikale Hilfslinien
    (if (= p-Ver TRUE)
      (begin
        (cond  ((= p-Wie 0)
          (begin
            (set! zaehler 1)
            (while (< (* zaehler TeilBreite) BildBreite)
              (begin
                (gimp-image-add-vguide p-Bild (* zaehler TeilBreite))
                (set! zaehler (+ zaehler 1))                        
              )
            )
          )      
          )
          ( (= p-Wie 1)
            (begin
              (gimp-image-add-vguide p-Bild TeilBreite)
            )      
          )
        )
      )
    )   
   
  )
)
 

; Teil 2 Registrierung des Skriptes
;======================================================
   (script-fu-register
      "script-fu-cf-tools-hilfslinien-b"        ;Name der Funktion, die aufgerufen werden soll
      "CFU Hilfslinien Test B"                         ;Name des Skripts
      "Löscht und setzt Hilfslinien"                   ;Beschreibung des Skripts
      "CF"                                        ;Name des Autors
      "Copyleft by CF"                            ;Copyright-Infos
      "25.02.2012"                                ;Datum
      "RGB* GRAY* INDEXED*"                     ;
      SF-IMAGE "Das Bild" 0
      SF-DRAWABLE "Die Ebene" 0
       SF-OPTION "Hilfslinien löschen"     '("Alle" "Alle Horizontalen" "Alle Vertikalen" "Keine")
      SF-TOGGLE "Horizontale Hilfslinien setzen:" TRUE
      SF-TOGGLE "Vertikale Hilfslinien setzen:" TRUE
       SF-OPTION "Hilfslinien setzen"        '("Alle" "Bei")
       SF-ADJUSTMENT "Wert"                       '(25 1 9999 1 10 0 0)
       SF-OPTION "Einheit"                       '("Prozent" "Pixel")
   )
 
; Teil 3 Festlegen der Menüstruktur
;======================================================
   (script-fu-menu-register "script-fu-cf-tools-hilfslinien-b" "<Image>/CFU/Tests")      



Zusammenfassung

Heute haben wir die zweite Version des Hilfslinienskriptes erarbeitet.
Dieses Skript ist schon etwas Flexibler im Einsatz.
Dadurch benötigt es aber auch ein wenig mehr Programmieraufwand.

Dabei haben wir das (cond ) – Konstrukt kennengelernt.
Es kann mehrere Fälle/Zustände unterscheiden.

(cond ), (if ) und (while ) Abfragen können ineinander verschachtelt sein.

Ansonsten haben wir nur Befehle und Kommandos benutzt,
die wir bereits kannten.

Es ist also möglich, mit wenigen unterschiedlichen Anweisungen
ein oder mehrere Skripte zu erstellen.

Wer bis hierher durchgehalten und vielleicht sogar etwas verstanden hat,
von dem Kauderwelsch, den ich hier fabrizierte,
der sollte sich ruhig trauen und eine eigene Idee angehen und umsetzen.
Nicht gleich zu hohe Ziele stecken, damit es überschaubar bleibt,
aber es darf ruhig etwas Sinnvolles sein.
Und sollte es mal wirklich nicht weitergehen, haben wir ja noch das Forum.
Auf jeden Fall werde ich versuchen zu helfen.


Dann wünsche ich Euch noch viel Erfolg beim Nacharbeiten und Lernen.

Liebe Grüße
Clara

Benutzeravatar
schnulli2
Beiträge: 63
Registriert: So 29. Aug 2010, 22:34
Skype:
Wohnort: Elsdorf, Rhein-Erft-Kreis
Kontaktdaten:

Re: Das bißchen Script-Fu macht sich von allein … (Part 3)

Beitragvon schnulli2 » So 15. Apr 2012, 01:03

Hier kommt meine Version, die Hilfslinien nach dem goldenen Schnitt setzen soll.

Code: Alles auswählen

;**************************************************************
;* Löschen von Hilfslinien und zufügen von Hilfslinien nach goldenem Schnitt
;**************************************************************
(define (script-fu-sc-tools-hilfslinien-golden-cut p-Bild p-Loeschen p-gold-cutH p-gold-cutV)      ;Beginn (define)
  (let* (                                       ;Beginn Variablen
           (hilfslinien-ID (car (gimp-image-find-next-guide p-Bild 0)))   ;erste zu löschende Hilfslinie
           (last-ID 0)           ; Variable wird gleich bei der Definition mit 0 vorbelegt
           (SollGeloeschtWerden FALSE)
         (zaehler 0)
         (BildBreite (car (gimp-image-width p-Bild)))
         (BildHoehe (car (gimp-image-height p-Bild)))
         (TeilBreite 0)
         (TeilHoehe 0)
      )                                       ;Ende Variablen
    ; ===============================
      ; Löschen vorhandener Hilfslinien
    ; ===============================

      (if (< p-Loeschen 3)          ; wenn der übergebene Löschwert kleiner 3 ist
        (begin                       ; dann kann gelöscht werden
          (while (<> hilfslinien-ID 0)
            (begin
                   (set! SollGeloeschtWerden FALSE) ;Setzt die Variable auf FALSE
              (cond ((= p-Loeschen 0)    ; Alles Löschen wurde gewählt
                      (begin
                        (set! SollGeloeschtWerden TRUE)
                      )
                    )
                    ((= p-Loeschen 1) ; Alle Horizontale Hilfslinien Löschen wurde gewählt
                      (begin
                        (if (= (car(gimp-image-get-guide-orientation p-Bild hilfslinien-ID)) ORIENTATION-HORIZONTAL)
                          (begin
                            (set! SollGeloeschtWerden TRUE)
                          )
                        )
                      )
                    )
                    ((= p-Loeschen 2) ; Alle Vertikalen Hilfslinien Löschen wurde gewählt
                      (begin
                        (if (= (car(gimp-image-get-guide-orientation p-Bild hilfslinien-ID)) ORIENTATION-VERTICAL)
                          (begin
                            (set! SollGeloeschtWerden TRUE)
                          )
                        )
                      )
                    )
                  )

            ( if ( = SollGeloeschtWerden TRUE)
              (begin
                (gimp-image-delete-guide p-Bild hilfslinien-ID) ; dann lösche
                (set! hilfslinien-ID last-ID)   ; und setze  hl-ID zurück auf last-ID
              )
              (begin                                 ; wird nicht gelöscht
                (set! last-ID hilfslinien-ID)    ; merke diese ID als letze-ID
              )
              )

                (set! hilfslinien-ID (car (gimp-image-find-next-guide p-Bild last-ID)))

              )
            )
          )
        )
        ;=====================================
      ; horizontale goldene Schnitte
      ;=====================================
      (if (< p-gold-cutH 3)    ;sollen horizontale goldene Schnitte gesetzt werden?
           (begin
               (cond (= p-gold-cutH 0)   ;beide, oben und unten, setzen
                (begin
                  (set! TeilHoehe (*(/ BildHoehe 100) 38))  ; oberen Schnitt berechnen
                  (gimp-image-add-hguide p-Bild TeilHoehe)    ; und setzen
                  (set! TeilHoehe (*(/ BildHoehe 100) 62))  ; unteren Schnitt berechnen
                  (gimp-image-add-hguide p-Bild TeilHoehe)    ; und setzen
               )
              )                          ; Ende beide setzen   
               (cond (= p-gold-cutH 1)   ; oben setzen
                (begin
                  (set! TeilHoehe (*(/ BildHoehe 100) 38))  ; oberen Schnitt berechnen
                  (gimp-image-add-hguide p-Bild TeilHoehe)    ; und setzen      
               )
               )                          ; Ende oben setzen   
               (cond (= p-gold-cutH 2)   ; unten setzen
                (begin
                  (set! TeilHoehe (*(/ BildHoehe 100) 62))  ; unteren Schnitt berechnen
                  (gimp-image-add-hguide p-Bild TeilHoehe)    ; und setzen               
               )
              )                          ; Ende unten setzen
         )
      )   ; Ende horizontale   
        ;=====================================
      ; vertikale goldene Schnitte
      ;=====================================
      (if (< p-gold-cutV 3)    ;sollen vertikale goldene Schnitte gesetzt werden?
          (begin
               (cond (= p-gold-cutV 0)   ;beide, links und rechts, setzen
                (begin
                  (set! TeilBreite (*(/ BildBreite 100) 38))  ; linken Schnitt berechnen
                  (gimp-image-add-vguide p-Bild TeilBreite)    ; und setzen
                  (set! TeilBreite (*(/ BildBreite 100) 62))  ; rechten Schnitt berechnen
                  (gimp-image-add-vguide p-Bild TeilBreite)    ; und setzen
               )
              )                          ; Ende beide setzen   
               (cond (= p-gold-cutV 1)   ; links setzen
                (begin
                  (set! TeilBreite (*(/ BildBreite 100) 38))  ; linken Schnitt berechnen
                  (gimp-image-add-vguide p-Bild TeilBreite)    ; und setzen
                )
              )                          ; Ende links setzen   
               (cond (= p-gold-cutV 2)   ; rechts setzen
                (begin
                  (set! TeilBreite (*(/ BildBreite 100) 62))  ; rechten Schnitt berechnen
                  (gimp-image-add-vguide p-Bild TeilBreite)    ; und setzen
                )
           )                          ; Ende rechts setzen
         )
      )   ; Ende vertikale      
    )  ;Ende let*
  ) ;Ende (define)
 
(script-fu-register                        ;Beginn (script-fu-register)
   "script-fu-sc-tools-hilfslinien-golden-cut"         ;Name der Funktion, die aufgerufen werden soll
   "SC Hilfslinien Goldener Schnitt"                   ;Name des Skripts
   "Löscht Hilfslinien und setzt goldenen Schnitte"             ;Beschreibung des Skripts
   "CF&schnulli2"                                       ;Name des Autors
   "Copyleft by CF&schnulli2"                           ;Copyright-Infos
   "14.04.2012"                               ;Datum
   "RGB* GRAY* INDEXED*"                      ;Bildtypen
   SF-IMAGE "Das Bild" 0
    SF-OPTION "Hilfslinien löschen"                   '("Alle" "Alle Horizontalen" "Alle Vertikalen" "Keine")
   SF-OPTION "Horizontalen goldenen Schnitt setzen:" '("Beide" "Oben" "Unten" "Keine")
   SF-OPTION "Vertikalen goldenen Schnitt setzen:"   '("Beide" "Links" "Rechts" "Keine")
)                                    ;Ende (script-fu-register)

   (script-fu-menu-register "script-fu-sc-tools-hilfslinien-golden-cut" "<Image>/CFU/Tests")      


Leider will es die Hilfslinien aber nicht anzeigen. Den Fehler, den ich gemacht habe, sehe ich aber nicht.
ClaraFall kannst du mir weiterhelfen? Bitte kein Lösungsvorschlag, lieber einen Stups zum Nachdenken.

Edit: kleine Änderungen am Skript (Korrektur der Zahlenwerte 61,2 <> 61.2, wer TeilBreite berechnet sollte nicht TeilHoehe übergeben)
allerdings keine änderung: die Hilfslinien will er trotzdem nicht anzeigen
schnulli2 's Galerie findet man hier

ClaraFall
Beiträge: 99
Registriert: Di 5. Jul 2011, 20:36
Skype:
Kontaktdaten:

Re: Das bißchen Script-Fu macht sich von allein … (Part 3)

Beitragvon ClaraFall » So 15. Apr 2012, 12:04

Hallo Liebe schnulli2,

Du scheinst ja ein richtiger Nachtvogel zu sein.
Um diese Zeit würde ich auch keine Hilfslinien sehen,
selbst wenn sie da wären.

Aber das sind sie nicht, nicht mal bei Tageslicht.
Also habe ich mir Dein Skript mal genauer angesehen und
muß sagen, daß alles schon sehr toll aussieht.
(Dein Screenshot in Part 1 ist übrigens auch sehr gut)
Dabei sind mir nur zwei Dinge aufgefallen (ich verrate Dir jetzt nicht,
wie viele Sachen in meinem 1. Skript nicht stimmten.
Die Zahl war jedenfalls zweistellig).

1. Kleinigkeit - Umlaute
Wenn Du Deine Maske mal ansiehst, wirst Du bemerken,
daß hier die Umlaute fehlen z.B. "lschen".
Hier kannst Du die Umlaute entweder umschreiben z.B. "oe", oder
Du konvertierst das Skript in das "UTF-8 ohne BOM" Format.
Das wäre die elegantere Lösung.
Wenn Du z.B. mit dem Editor "Notepad++" arbeitest,
kannst Du im Menü auf "Kodierung" klicken und das oben
genannte Format auswählen.
Jetzt mußt Du nur noch im Skript alle Umlaute neu eintragen und speichern.

2. Kleinigkeit - Hilfsliniensichtbarkeit
Es ist jetzt sehr schwer nur einen Anstoß zu geben,
ohne gleich die ganze Lösung zu präsentieren,
da es wirklich nur eine Kleinigkeit ist.
Ich könnte Dir drei Tips geben, wie Du herangehen kannst
um das Problem zu finden, aber in jedem steckt schon
die halbe Lösung.
Du machst es mir wirklich nicht leicht.

Dann versuche ich es einfach mal mit einem halben Tip.
(sollte es zu leicht sein ist es nicht so schlimm,
da das Problem einfach nicht groß genug ist,
Skript-Fu aber eben ein Sensibelchen ist.
Sollte es zu schwer sein, dann kann ich ja noch nachlegen)

Der Hinweis ist
Ausgeblendet:
"Du benutzt einen Befehl beim Setzen der Hilfslinien völlig anders, als beim Löschen"

Dann wünsche ich noch viel Spaß beim knobeln und LÖSEN!


Liebe Grüße
Clara

Benutzeravatar
schnulli2
Beiträge: 63
Registriert: So 29. Aug 2010, 22:34
Skype:
Wohnort: Elsdorf, Rhein-Erft-Kreis
Kontaktdaten:

Re: Das bißchen Script-Fu macht sich von allein … (Part 3)

Beitragvon schnulli2 » So 15. Apr 2012, 12:52

:gewonnen:

yabbadabbaduuuu

Ich hab den Fehler gefunden.
Jetzt werden die Hilfslinien angezeigt.
Hier ist der Beweis:
#

Der Vollständikeit halber noch mal das korrigierte fertige Skript.

Code: Alles auswählen

;**************************************************************
;* Löschen von Hilfslinien und zufügen von Hilfslinien nach goldenem Schnitt
;**************************************************************
(define (script-fu-sc-tools-hilfslinien-golden-cut p-Bild p-Ebene p-Loeschen p-gold-cutH p-gold-cutV)      ;Beginn (define)
  (let* (                                       ;Beginn Variablen
           (hilfslinien-ID (car (gimp-image-find-next-guide p-Bild 0)))   ;erste zu löschende Hilfslinie
           (last-ID 0)           ; Variable wird gleich bei der Definition mit 0 vorbelegt
           (SollGeloeschtWerden FALSE)
         (zaehler 0)
         (BildBreite (car (gimp-image-width p-Bild)))
         (BildHoehe (car (gimp-image-height p-Bild)))
         (TeilBreite 0)
         (TeilHoehe 0)
      )                                       ;Ende Variablen
    ; ===============================
      ; Löschen vorhandener Hilfslinien
    ; ===============================

      (if (< p-Loeschen 3)          ; wenn der übergebene Löschwert kleiner 3 ist
        (begin                       ; dann kann gelöscht werden
          (while (<> hilfslinien-ID 0)
            (begin
                   (set! SollGeloeschtWerden FALSE) ;Setzt die Variable auf FALSE
              (cond ((= p-Loeschen 0)    ; Alles Löschen wurde gewöhlt
                      (begin
                        (set! SollGeloeschtWerden TRUE)
                      )
                    )
                    ((= p-Loeschen 1) ; Alle Horizontale Hilfslinien Löschen wurde gewählt
                      (begin
                        (if (= (car(gimp-image-get-guide-orientation p-Bild hilfslinien-ID)) ORIENTATION-HORIZONTAL)
                          (begin
                            (set! SollGeloeschtWerden TRUE)
                          )
                        )
                      )
                    )
                    ((= p-Loeschen 2) ; Alle Vertikalen Hilfslinien Löschen wurde gewählt
                      (begin
                        (if (= (car(gimp-image-get-guide-orientation p-Bild hilfslinien-ID)) ORIENTATION-VERTICAL)
                          (begin
                            (set! SollGeloeschtWerden TRUE)
                          )
                        )
                      )
                    )
                  )

            ( if ( = SollGeloeschtWerden TRUE)
              (begin
                (gimp-image-delete-guide p-Bild hilfslinien-ID) ; dann lösche
                (set! hilfslinien-ID last-ID)   ; und setze  hl-ID zurück auf last-ID
              )
              (begin                                 ; wird nicht gelöscht
                (set! last-ID hilfslinien-ID)    ; merke diese ID als letze-ID
              )
              )

                (set! hilfslinien-ID (car (gimp-image-find-next-guide p-Bild last-ID)))

              )
            )
          )
        )
        ;=====================================
      ; horizontale goldene Schnitte
      ;=====================================
      (if (< p-gold-cutH 3)    ;sollen horizontale goldene Schnitte gesetzt werden?
           (begin
               (cond ((= p-gold-cutH 0)   ;beide, oben und unten, setzen
                       (begin
                        (set! TeilHoehe (* (/ BildHoehe 100) 38.2))  ; oberen Schnitt berechnen
                        (gimp-image-add-hguide p-Bild TeilHoehe)    ; und setzen
                        (set! TeilHoehe (* (/ BildHoehe 100) 61.8))  ; unteren Schnitt berechnen
                        (gimp-image-add-hguide p-Bild TeilHoehe)    ; und setzen
                      )
                    )                          ; Ende beide setzen   
                     ((= p-gold-cutH 1)   ; oben setzen
                       (begin
                        (set! TeilHoehe (* (/ BildHoehe 100) 38.2))  ; oberen Schnitt berechnen
                        (gimp-image-add-hguide p-Bild TeilHoehe)    ; und setzen      
                      )
                     )                          ; Ende oben setzen   
                     ((= p-gold-cutH 2)   ; unten setzen
                       (begin
                        (set! TeilHoehe (* (/ BildHoehe 100) 61.8))  ; unteren Schnitt berechnen
                        (gimp-image-add-hguide p-Bild TeilHoehe)    ; und setzen               
                      )
                    )                          ; Ende unten setzen
                  )      
           )
      )   ; Ende horizontale   
        ;=====================================
      ; vertikale goldene Schnitte
      ;=====================================
      (if (< p-gold-cutV 3)    ;sollen vertikale goldene Schnitte gesetzt werden?
          (begin
               (cond ((= p-gold-cutV 0)   ;beide, links und rechts, setzen
                       (begin
                        (set! TeilBreite (* (/ BildBreite 100) 38.2))  ; linken Schnitt berechnen
                        (gimp-image-add-vguide p-Bild TeilBreite)    ; und setzen
                        (set! TeilBreite (* (/ BildBreite 100) 61.8))  ; rechten Schnitt berechnen
                        (gimp-image-add-vguide p-Bild TeilBreite)    ; und setzen
                       )
                    )                          ; Ende beide setzen   
                     ((= p-gold-cutV 1)   ; links setzen
                       (begin
                        (set! TeilBreite (* (/ BildBreite 100) 38.2))  ; linken Schnitt berechnen
                        (gimp-image-add-vguide p-Bild TeilBreite)    ; und setzen
                      )
                    )                          ; Ende links setzen   
                    ((= p-gold-cutV 2)   ; rechts setzen
                      (begin
                       (set! TeilBreite (* (/ BildBreite 100) 61.8))  ; rechten Schnitt berechnen
                       (gimp-image-add-vguide p-Bild TeilBreite)    ; und setzen
                     )
                    ); Ende rechts setzen
                  )          
         )
      )   ; Ende vertikale      
    )  ;Ende let*
  ) ;Ende (define)
 
(script-fu-register                        ;Beginn (script-fu-register)
   "script-fu-sc-tools-hilfslinien-golden-cut"         ;Name der Funktion, die aufgerufen werden soll
   "SC Hilfslinien Goldener Schnitt"                   ;Name des Skripts
   "Löscht Hilfslinien und setzt goldenen Schnitte"             ;Beschreibung des Skripts
   "CF&schnulli2"                                       ;Name des Autors
   "Copyleft by CF&schnulli2"                           ;Copyright-Infos
   "14.04.2012"                               ;Datum
   "RGB* GRAY* INDEXED*"                      ;Bildtypen
   SF-IMAGE "Das Bild" 0
    SF-DRAWABLE "Die Ebene" 0
    SF-OPTION "Hilfslinien löschen"                   '("Alle" "Alle Horizontalen" "Alle Vertikalen" "Keine")
   SF-OPTION "Horizontalen goldenen Schnitt setzen:" '("Beide" "Oben" "Unten" "Keine")
   SF-OPTION "Vertikalen goldenen Schnitt setzen:"   '("Beide" "Links" "Rechts" "Keine")
)                                    ;Ende (script-fu-register)

   (script-fu-menu-register "script-fu-sc-tools-hilfslinien-golden-cut" "<Image>/CFU/Tests")      


Danke ClaraFall für den Stupser, obwohl ich zuerst nach nem weiteren fragen wollte.
schnulli2 's Galerie findet man hier

ClaraFall
Beiträge: 99
Registriert: Di 5. Jul 2011, 20:36
Skype:
Kontaktdaten:

Re: Das bißchen Script-Fu macht sich von allein … (Part 3)

Beitragvon ClaraFall » So 15. Apr 2012, 18:41

Hallo Liebe schnulli2,

da kann ich nur noch sagen:

:spitze: :spitze: :spitze: :spitze: :spitze: :spitze: :spitze: :spitze: :spitze: :spitze: :spitze: :spitze: :spitze:

!!! Toll !!! Super !!! Klasse !!! Einwandfrei !!! Hervorragend !!! Ausgezeichnet !!!


:spitze: :spitze: :spitze: :spitze: :spitze: :spitze: :spitze: :spitze: :spitze: :spitze: :spitze: :spitze: :spitze:

Weiter so !!!


Liebe Grüße
Clara

Benutzeravatar
schnulli2
Beiträge: 63
Registriert: So 29. Aug 2010, 22:34
Skype:
Wohnort: Elsdorf, Rhein-Erft-Kreis
Kontaktdaten:

Re: Das bißchen Script-Fu macht sich von allein … (Part 3)

Beitragvon schnulli2 » So 15. Apr 2012, 20:50

Danke für das fette Lob, aber so schwer war das Ganze nun auch wieder nicht.
Wenn man von dem kleinen Denkfehler beim cond-Konstrukt mal absieht, war es nur ein neues Berechnen der Hilfslinien.

:guck:
ClaraFall hat geschrieben:Hallo Liebe schnulli2,...


Hier stimmt was nicht. Korrekterweise muß es Lieber schnulli2 heißen :meinung:

Trotzdem noch mal vielen Dank für deinen Denkanstupser.

Und noch viel mehr Dank dafür, diese Tuts zum Skripten erstellt zu haben. Darauf hab ich lang gewartet, gesucht, aber nie etwas brauchbares gefunden. :kniefall:
schnulli2 's Galerie findet man hier

ClaraFall
Beiträge: 99
Registriert: Di 5. Jul 2011, 20:36
Skype:
Kontaktdaten:

Re: Das bißchen Script-Fu macht sich von allein … (Part 3)

Beitragvon ClaraFall » Mo 16. Apr 2012, 22:14

Hallo Lieberrr schnulli2,

das mit derrr Anrrrede ist mirrr jetzt wirrrklich Peinlich!!!

Bild

Ich verrrsprrreche Dirr, daß ich mich besserrrn werrrde und sende Dirrr schon mal
ein paarrr zusätzliche RRRRRRs. Die kannst Du benutzen, um alle von mirrr
falsch geschrrriebenen Anrrreden zu Korrrigierrren.


Liebe Grrrüße
Clarrra

Benutzeravatar
schnulli2
Beiträge: 63
Registriert: So 29. Aug 2010, 22:34
Skype:
Wohnort: Elsdorf, Rhein-Erft-Kreis
Kontaktdaten:

Re: Das bißchen Script-Fu macht sich von allein … (Part 3)

Beitragvon schnulli2 » Mo 16. Apr 2012, 22:32

Es sei dirrr verrrziehen.

Habe gerrrade sehrrr geschmunzelt :heul:
Mirrr kamen sogarrr die Trrränen.
schnulli2 's Galerie findet man hier

Benutzeravatar
schnulli2
Beiträge: 63
Registriert: So 29. Aug 2010, 22:34
Skype:
Wohnort: Elsdorf, Rhein-Erft-Kreis
Kontaktdaten:

Re: Das bißchen Script-Fu macht sich von allein … (Part 3)

Beitragvon schnulli2 » Do 3. Mai 2012, 22:15

Das Gimp-Fieber hat mich ja nicht richtig erwischt, was wohl auch mit meiner mangelnden malerischen Kreativität zusammen hängt.

Dafür hat mich wohl ein Script-Virus befallen. Hier kommt ein erstes Script auf dem Weg zum Großen Zentrierungsscript.
In diesem ersten Teil wird ein neues Bild, dessen Maße und Hintergrundfarbe bestimmt werden, und eine 2te Ebene (Maße und Farbe benutzerdefiniert) erstellt.
Die zweite Ebene wird zentriert zum Bild angezeigt.

Code: Alles auswählen

    ;======================================================
    ; Teil 1 Registrierung des Skriptes
    ;======================================================
    (script-fu-register                  ; GIMP-Anweisung
       "script-fu-probe"                 ; Der Name des Skriptes
       "probe"                           ; Anzeigename unter GIMP
       "Hier soll eine Ebene auf einem\
        Bild oder der darunterliegenden\
      Ebene zentriert werden"          ; Kurze Skriptbeschreibung
       "schnulli2"                       ; Autor des Skriptes
       "Copyleft schnulli2"              ; Copyright
       "30.04.2012"                      ; Erstellungsdatum
       ""                                ; Bildtypen
     ;SF-IMAGE "Bild" 0
     ;SF-DRAWABLE "Ebene" 0
      SF-ADJUSTMENT "Bildbreite" '(125 1 1024 1 10 0 SF-SLIDER)
      SF-ADJUSTMENT "Bildhöhe" '(125 1 768 1 10 0 SF-SLIDER)
      SF-COLOR "Bildfarbe" '(255 255 255)
      SF-ADJUSTMENT "Ebenenbreite" '(124 1 1024 1 10 0 SF-SLIDER)
      SF-ADJUSTMENT "Ebenenhöhe" '(125 1 768 1 10 0 SF-SLIDER)
      SF-COLOR "Ebenenfarbe" '(0 0 0)
   )
    ;======================================================
    ; Teil 2 Festlegen der Menüstruktur
    ;======================================================
    (script-fu-menu-register "script-fu-probe" "<Image>/entwicklung/test/eigene Skripte")
    ;======================================================
    ; Teil 3 Das Script
    ;======================================================
    (define (script-fu-probe    ; hier beginnt "script-fu-probe"
            ;in-Bild              dieses und folgende Scripte
         ;in-Ebene             sollen Wegweiser zum eigentlichen
         in-BildBreite       ; Script der Zentrierung werden.
         in-BildHoehe
         in-BildFarbe
            in-EbeneBreite
         in-EbeneHoehe
         in-EbeneFarbe
         )
     (let*
       (  ;lokale Variablen definieren
         (ArbBild (car (gimp-image-new in-BildBreite in-BildHoehe RGB)))  ; neues Bild
        (ArbEbene (car (gimp-layer-new ArbBild in-BildBreite in-BildHoehe RGB-IMAGE "Hintergrund" 100 NORMAL))) ; neue Ebene
          (ArbEbene2 (car (gimp-layer-new ArbBild in-EbeneBreite in-EbeneHoehe RGB-IMAGE "neue Ebene" 100 NORMAL)))
        (EbeneHoehe (car (gimp-drawable-height ArbEbene2)))
        (EbeneBreite (car (gimp-drawable-width ArbEbene2)))
        (EbeneUrsprungOben)
        (EbeneUrsprungLinks)
        ) ; Ende lokale Variablen
    ;===============Programm
      (gimp-context-set-background in-BildFarbe)    ;setzt die Hintergrundfarbe
      (gimp-context-set-foreground in-EbeneFarbe)   ;setzt die Vordergrundfarbe
        (gimp-drawable-fill ArbEbene 1)               ;Hintergrundebene wird mit Hintergrundfarbe (1=background-fill) gefüllt
        (gimp-drawable-fill ArbEbene2 0)              ;neue Ebene wird mit Vordergrundfarbe (0=foreground-fill) gefüllt
      (gimp-image-add-layer ArbBild ArbEbene 0)     ;Hintergrundebene wird dem Bild zugefügt
       (set! EbeneUrsprungOben (/ (- in-BildHoehe EbeneHoehe) 2))        ;Berechnung der zentrierten Ursprungskoordinaten
      (set! EbeneUrsprungLinks (/ (- in-BildBreite EbeneBreite) 2))
      (gimp-layer-set-offsets ArbEbene2 EbeneUrsprungLinks EbeneUrsprungOben)   ;Übergabe der berechneten Ursprungskoordinaten an die neue Ebene
      
      (gimp-image-add-layer ArbBild ArbEbene2 -1)    ;neue Ebene wird dem Bild zugefügt
      (gimp-display-new ArbBild)                     ;das neue Bild wird endlich gezeigt
    ;===============Ende Programm
     ) ; Ende let
   ) ; Ende define


Hierauf werde ich aufbauen und Schritt für Schritt weiter entwickeln. Das ganz große Script zur Zentrierung von Ebenen ist das Endziel.
Ich werde mich in die Sriptings von gimp noch einarbeiten müssen. Doch denke ich, dass ich mit kleinen Schritten das Ziel erreiche.
schnulli2 's Galerie findet man hier

ClaraFall
Beiträge: 99
Registriert: Di 5. Jul 2011, 20:36
Skype:
Kontaktdaten:

Re: Das bißchen Script-Fu macht sich von allein … (Part 3)

Beitragvon ClaraFall » Do 10. Mai 2012, 09:24

Hallo Lieber schnulli2,

Klasse Idee!! :super:
Toller Ansatz! :spitze:

Deine 1. Version ist ja schon voll funktionsfähig.
Super, wie Du die passenden Befehle gefunden hast.
Jetzt noch die Ecken und Kanten abschleifen und
eine runde Sache daraus machen.
Das sollte aber auch nicht mehr unmöglich sein.

Ich bin schon neugierig auf das Endergebnis.

(Egal ob Fieber oder VIRUS, hoffe mal, daß Du noch lange infiziert bleibst!) ;)


Liebe Grüße
Clara


Zurück zu „Scripte und Filter/Plugins“



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast