Deutsches Lilypond Forum (Archiv)

Allgemein => Fragen zu Funktionen => Thema gestartet von: chf am Donnerstag, 20. Dezember 2012, 13:54

Titel: Studierzeichen : Kombination 2
Beitrag von: chf am Donnerstag, 20. Dezember 2012, 13:54
Liebe Freunde,

könnt ihr mir auch noch eine Variante liefern für   Quadrat in Dreieck
                                                                               und   Kreis      in Dreieck?
Ich habe einen Versuch mit #'scripts.triangle gemacht, aber diesmal ist es wohl wieder komplizierter...

Gruß
chf
Titel: Re: Studierzeichen : Kombination 2
Beitrag von: eluze am Donnerstag, 20. Dezember 2012, 14:27
Zitat
Ich habe einen Versuch mit #'scripts.triangle gemacht

na ja, hat wohl nicht viel gebracht, oder?

was steht im log?

was steht in den manuals über dreiecke - richtig, auf englisch heisst das triangle!?

gruss
Eluze
Titel: Re: Studierzeichen : Kombination 2
Beitrag von: chf am Donnerstag, 20. Dezember 2012, 18:29
Im log steht nichts - triangle wird einfach ignoriert.
chf
Titel: Re: Studierzeichen : Kombination 2
Beitrag von: eluze am Donnerstag, 20. Dezember 2012, 18:50
wie hast du geschrieben???
Titel: Re: Studierzeichen : Kombination 2
Beitrag von: harm6 am Freitag, 21. Dezember 2012, 12:49
Hallo Christa,

eigentlich geht alles mit den markup-commands aus
NR A.10.3 Graphic (http://lilypond.org/doc/v2.17/Documentation/notation-big-page#graphic):

circleInTriangle =
\markup {
        \combine 
        \fontsize #1 \halign #CENTER \triangle ##f 
        \halign #CENTER \raise #0.9 \draw-circle #0.66 #0.1 ##f
}

quadratInTriangle =
\markup {
        \combine 
        \fontsize #1 \halign #CENTER \triangle ##f 
        \halign #CENTER \override #'(box-padding . 0.5) \raise #0.75 \box \null
}

\circleInTriangle

\quadratInTriangle

Du mußt wahrscheinlich noch ein bißchen fein-tuning betreiben, aber eigentlich wars das.


Gruß,
  Harm
Titel: Re: Studierzeichen : Kombination 2
Beitrag von: chf am Freitag, 21. Dezember 2012, 17:54
Hallo Harm,

das Konstrukt ist prima.
Ich vergaß allerdings mitzuteilen, dass ich da auch Buchstaben oder Ziffern hineinschreiben muss. Du kennst meine Hilfsbedürftigkeit...

Gruß
Christa
Titel: Re: Studierzeichen : Kombination 2
Beitrag von: Be-3 am Freitag, 21. Dezember 2012, 21:19
Hallo Christa,

gerade bei Dreiecken wird die Angelegenheit langsam sperrig... ;)

Was mir für Deinen Fall an den \box- und \circle-Kommandos nicht gefällt, ist, daß sich sich von der Größe her dem Inhalt anpassen. Das ist zwar einerseits sinnvoll und wünschenswert, aber bei den Rehearsal Marks, die auch schon mal zweistellig werden, fände ich es schöner, wenn die Umrahmungen immer gleich groß wären bzw. eine kontrollierbare Größe hätten.

Deshalb habe ich ein Markup-Kommando \n-agon geschrieben, das ein n-Eck mit einem anzugebenden Radius rings um das Markpu zeichnet - egal, wie groß/breit das Markup ist.
So lassen sich nicht nur Kreise, gleichseitige Dreiecke und Quadrate zeichnen, sondern auch Penta-, Hexa-, Hepta, Okta- und andere -gone.

Der Aufruf \markup \n-agon #5 #3 "A" zeichnet beispielsweise ein Fünfeck mit "Radius" 3 um den Buchstaben A.
Wenn man als Eckenzahl (erster Parameter) eine #0 übergibt, wird ein Kreis gezeichnet.
Die Dinger "stehen" auf einer waagrechten Basis, wenn man einen negativen Radius übergibt, stehen sie auf dem Kopf.

Es werden einfach Eckpunkte eines n-Ecks berechnet, die auf einen Kreis mit dem gewünschten Radius liegen und dann ein entsprechendes Polygon gezeichnet. Ausnahme wie gesagt bei "Eckenzahl 0", dann gibt's einen Kreis.

Überlagern lassen sie sich auch problemlos, so daß man z. B. einen jahreszeitlich nicht unpassenden Davidsstern (siehe Ende der ersten Zeile in der Beispieldatei) bauen kann.
Nicht-ganzzahlige Eck-Anzahlen führen auch zu lustigen Zwischenstufen (siehe den "Schnipsel-Look" in der letzten Zeile.
Wenn man die line-thickness hochsetzt, kann man auch ein schönes Warndreieck basteln (letztes Studierzeichen unten im Eck).

Viele Grüße
Torsten

\version "2.16.1"

#(define-markup-command (n-agon layout props corners radius arg)
  (number? number? markup?)
  #:category graphic
  #:properties ((thickness 1))
  (let* ((th (* (ly:output-def-lookup layout 'line-thickness)
               thickness))
         (alpha-step (if (= corners 0) 99 (/ (* 2 PI) corners)))
         (alpha-start (if (>= radius 0) (/ alpha-step 2) 0))
          (polypoints
           (let loop ((alpha alpha-start))
             (if (> alpha (* 2 PI))
                 '()
                 (cons (* (abs radius) (sin alpha)) (cons (- 0 (* (abs radius) (cos alpha)))
                    (loop (+ alpha alpha-step)))))))
         (m (interpret-markup layout props arg))
         (x-ext (ly:stencil-extent m X))
         (y-ext (ly:stencil-extent m Y)))

    (ly:stencil-add m
      (ly:stencil-translate
         (if (equal? polypoints '()) 
            (ly:make-stencil (list 'circle radius th #f))
            (ly:make-stencil `(polygon ',polypoints  ,th #f)))
         (cons (/ (cdr x-ext) 2) (/ (cdr y-ext) 2))))))
 

% TEST:
 
\header { tagline = ##f }
\paper { ragged-last-bottom = ##f }


\relative c' {
  \override Score.RehearsalMark #'padding = #4

% gleichseitige Dreiecke 
  s1  \mark \markup \n-agon #3 #4 "3"
  s  \mark \markup \n-agon #3 #4 "33"
  s  \mark \markup \n-agon #3 #-4 "3"
  s  \mark \markup \n-agon #3 #-4 "33"
  s  \mark \markup \n-agon #3 #4 \n-agon #3 #-4 "3"
  s  \mark \markup \n-agon #3 #4 \n-agon #3 #-4 "33"
  s \break

% Quadrate 
  s  \mark \markup \n-agon #4 #3 "4"
  s  \mark \markup \n-agon #4 #3 "44"
  s  \mark \markup \n-agon #4 #-3 "4"
  s  \mark \markup \n-agon #4 #-3 "44"
  s  \mark \markup \n-agon #4 #3 \n-agon #4 #-3 "4"
  s  \mark \markup \n-agon #4 #3 \n-agon #4 #-3 "44"
  s \break 

% gleichseitige Pentagone
  s  \mark \markup \n-agon #5 #2.5 "5"
  s  \mark \markup \n-agon #5 #2.5 "55"
  s  \mark \markup \n-agon #5 #-2.5 "5"
  s  \mark \markup \n-agon #5 #-2.5 "55"
  s  \mark \markup \n-agon #5 #2.5 \n-agon #5 #-2.5 "5"
  s  \mark \markup \n-agon #5 #2.5 \n-agon #5 #-2.5 "55"
  s  \break 

% gleichseitige Hexagone
  s  \mark \markup \n-agon #6 #2.5 "6"
  s  \mark \markup \n-agon #6 #2.5 "66"
  s  \mark \markup \n-agon #6 #-2.5 "6"
  s  \mark \markup \n-agon #6 #-2.5 "66"
  s  \break 

% gleichseitige Heptagone
  s  \mark \markup \n-agon #7 #2.5 "7"
  s  \mark \markup \n-agon #7 #2.5 "77"
  s  \mark \markup \n-agon #7 #-2.5 "7"
  s  \mark \markup \n-agon #7 #-2.5 "77"
  s  \break 

% gleichseitige Oktagone
  s  \mark \markup \n-agon #8 #2.5 "8"
  s  \mark \markup \n-agon #8 #2.5 "88"
  s  \mark \markup \n-agon #8 #-2.5 "8"
  s  \mark \markup \n-agon #8 #-2.5 "88"
  s  \break
 
% Kreise
  s  \mark \markup \n-agon #0 #2.5 "0"
  s  \mark \markup \n-agon #0 #2.5 "00"
 
% Kombinationen Quadrat und Dreieck
  s  \mark \markup \n-agon #4 #2.5 \n-agon #3 #5.5 "9"
  s  \mark \markup \n-agon #4 #2.5 \n-agon #3 #5.5 "99"
  s  \mark \markup \n-agon #4 #5 \lower #1.5 \n-agon #3 #3.5 "9"
  s  \mark \markup \n-agon #4 #5 \lower #1.5 \n-agon #3 #3.5 "99"
  s  \break
 
% Kombinationen Dreieck und Kreis
  s  \mark \markup \n-agon #0 #1.9 \n-agon #3 #4.5 "9"
  s  \mark \markup \n-agon #0 #1.9 \n-agon #3 #4.5 "99"
  s  \mark \markup \n-agon #0 #2.5 \n-agon #3 #3.5 "9"
  s  \mark \markup \n-agon #0 #2.5 \n-agon #3 #3.5 "99"
  s  \mark \markup \n-agon #0 #3.5 \n-agon #3 #3.5 "9"
  s  \mark \markup \n-agon #0 #3.5 \n-agon #3 #3.5 "99"
  s  \mark \markup \n-agon #0 #4 \n-agon #3 #3.5 "9"
  s  \mark \markup \n-agon #0 #4 \n-agon #3 #3.5 "99"
  s  \break

% Kombinationen Quadrat und Kreis 
  s  \mark \markup \n-agon #0 #2 \n-agon #4 #4 "9"
  s  \mark \markup \n-agon #0 #2 \n-agon #4 #4 "99"
  s  \mark \markup \n-agon #0 #2.5 \n-agon #4 #3 "9"
  s  \mark \markup \n-agon #0 #2.5 \n-agon #4 #3 "99"
  s  \mark \markup \n-agon #0 #3 \n-agon #4 #3 "9"
  s  \mark \markup \n-agon #0 #3 \n-agon #4 #3 "99"
  s  \mark \markup \n-agon #0 #3.5 \n-agon #4 #3 "9"
  s  \mark \markup \n-agon #0 #3.5 \n-agon #4 #3 "99"
  s  \break

% Kombinationen Pentagon und Kreis 
  s  \mark \markup \n-agon #0 #2 \n-agon #5 #3.5 "9"
  s  \mark \markup \n-agon #0 #2 \n-agon #5 #3.5 "99"
  s  \mark \markup \n-agon #0 #2.4 \n-agon #5 #3 "9"
  s  \mark \markup \n-agon #0 #2.4 \n-agon #5 #3 "99"
  s  \mark \markup \n-agon #0 #3 \n-agon #5 #3 "9"
  s  \mark \markup \n-agon #0 #3 \n-agon #5 #3 "99"
  s  \mark \markup \n-agon #0 #3 \n-agon #5 #2.5 "9"
  s  \mark \markup \n-agon #0 #3 \n-agon #5 #2.5 "99"
  s  \break


 
% lustige Zwischenstufen
  s  \mark \markup \n-agon #2.7 #3 "A"
  s  \mark \markup \n-agon #2.8 #-3 "B"
  s  \mark \markup \n-agon #3.2 #-3 "C"
  s  \mark \markup \n-agon #4.2 #3 "D"
  s  \mark \markup \n-agon #4.6 #3 "E"
  s  \mark \markup \n-agon #5.4 #3 "F"
  s  \mark \markup \override #'(thickness . 7) \n-agon #3 #3 \raise #0.5 \bold \sans "!"
  \bar "|."

}
Titel: Re: Studierzeichen : Kombination 2
Beitrag von: chf am Samstag, 22. Dezember 2012, 18:39
Hallo Torsten,

das haut mich um!
Danke!

Dir und allen so hilfreichen Freunden
frohe Weihnacht und ein gutes neues Jahr!

Beste Grüße
CHrista