lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Drawing a hexagon with a number inside


From: Thomas Morley
Subject: Re: Drawing a hexagon with a number inside
Date: Tue, 3 Sep 2013 19:04:53 +0200

2013/9/3 Rachael Thomas Carlson <address@hidden>:
> Hello All:
>
> I am attempting to draw a hexagon with a number inside of it using markup.
>
> The attached png is essentially what I am attempting.  This is to be used in
> a TabStaff.  I am not worried about the whiteout = ##f in the png.  I just
> simply can't seem to figure out how to create a hexagon such as in the png.
> Though, again, it would be optimal to create this within a markup
> environment.
>
> I am able to modify the TabNoteHead stencil.  That is not the problem. I
> just need to figure out how to create a hexagon with a number inside of it
> using markup.
>
> Any ideas?
>
> Rachael



Hi Rachael,

Torsten once posted the code below in the german LilyPond-forum

\version "2.14.2"

#(define-markup-command (draw-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) (abs 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 }

\markup \draw-n-agon #100 #-4 "3"

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

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

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

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

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

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

% gleichseitige Oktagone
  s  \mark \markup \draw-n-agon #8 #2.5 "8"
  s  \mark \markup \draw-n-agon #8 #2.5 "88"
  s  \mark \markup \draw-n-agon #8 #-2.5 "8"
  s  \mark \markup \draw-n-agon #8 #-2.5 "88"
  s  \break

% Kreise
  s  \mark \markup \draw-n-agon #0 #2.5 "0"
  s  \mark \markup \draw-n-agon #0 #2.5 "00"

% Kombinationen Quadrat und Dreieck
  s  \mark \markup \draw-n-agon #4 #2.5 \draw-n-agon #3 #5.5 "9"
  s  \mark \markup \draw-n-agon #4 #2.5 \draw-n-agon #3 #5.5 "99"
  s  \mark \markup \draw-n-agon #4 #5 \lower #1.5 \draw-n-agon #3 #3.5 "9"
  s  \mark \markup \draw-n-agon #4 #5 \lower #1.5 \draw-n-agon #3 #3.5 "99"
  s  \break

% Kombinationen Dreieck und Kreis
  s  \mark \markup \draw-n-agon #0 #1.9 \draw-n-agon #3 #4.5 "9"
  s  \mark \markup \draw-n-agon #0 #1.9 \draw-n-agon #3 #4.5 "99"
  s  \mark \markup \draw-n-agon #0 #2.5 \draw-n-agon #3 #3.5 "9"
  s  \mark \markup \draw-n-agon #0 #2.5 \draw-n-agon #3 #3.5 "99"
  s  \mark \markup \draw-n-agon #0 #3.5 \draw-n-agon #3 #3.5 "9"
  s  \mark \markup \draw-n-agon #0 #3.5 \draw-n-agon #3 #3.5 "99"
  s  \mark \markup \draw-n-agon #0 #4 \draw-n-agon #3 #3.5 "9"
  s  \mark \markup \draw-n-agon #0 #4 \draw-n-agon #3 #3.5 "99"
  s  \break

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

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



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

}


Hope it's still working (didn't test it with newer versions)


Cheers,
  Harm



reply via email to

[Prev in Thread] Current Thread [Next in Thread]