the bow.
@var{bow-height} determines the height of the bow.
@var{orientation} determines, whether the bow is concave or convex.
-@var{orientation} should be set to @val{-1} or @val{1}, other values are
-possible but will affect the bow's height as well.
Both variables are supplied to support independent usage.
Done by calculating a horizontal unit-bow first, then moving all control-points
;;;; (1) calculate control-points for the horizontal unit-bow,
;; y-values for 2nd/3rd control-points
(outer-control
- (* 4/3 orientation (/ bow-height length-to-print)))
+ (* 4/3 (sign orientation) (/ bow-height length-to-print)))
(inner-control
- (* orientation
+ (* (sign orientation)
(- (abs outer-control) (/ thickness length-to-print))))
;; x-values for 2nd/3rd control-points depending on `angularity'
(offset-index
(define-public (make-transparent-box-stencil xext yext)
"Make a transparent box."
- (ly:make-stencil
- (list 'transparent-stencil
- (ly:stencil-expr (make-filled-box-stencil xext yext)))
- xext yext))
+ (ly:stencil-outline empty-stencil (make-filled-box-stencil xext yext)))
(define-public (make-filled-box-stencil xext yext)
"Make a filled box."
replaced-stil))
(define-public (stencil-with-color stencil color)
- (ly:make-stencil
- (list 'color color (ly:stencil-expr stencil))
- (ly:stencil-extent stencil X)
- (ly:stencil-extent stencil Y)))
+ (if (color? color)
+ (ly:make-stencil
+ (list 'color color (ly:stencil-expr stencil))
+ (ly:stencil-extent stencil X)
+ (ly:stencil-extent stencil Y))
+ stencil))
(define*-public (stencil-whiteout-outline
stil #:optional (thickness 0.3) (color white)
(begin
(ly:warning "Both angle-increments and radial-increments must be positive numbers.")
stil)
- (let* ((2pi 6.283185307)
- (angle-inc (/ 2pi angle-increments))
+ (let* ((angle-inc (/ 360 angle-increments))
(radial-inc (/ thickness radial-increments)))
(define (circle-plot ang dec radius original-stil new-stil)
- ;; ang (angle) and dec (decrement) are in radians, not degrees
+ ;; ang (angle) and dec (decrement) are in degrees, not radians
(if (<= ang 0)
new-stil
(circle-plot (- ang dec) dec radius original-stil
(ly:stencil-add
new-stil
(ly:stencil-translate original-stil
- (cons
- (* radius (cos ang))
- (* radius (sin ang))))))))
+ (ly:directed ang radius))))))
(define (radial-plot radius original-stil new-stil)
(if (<= radius 0)
(radial-plot
(- radius radial-inc)
original-stil
- (circle-plot 2pi angle-inc
+ (circle-plot 360 angle-inc
radius original-stil empty-stencil)))))
(let ((whiteout-expr
(stencil-with-color (ly:round-filled-box x-ext y-ext blot) color)
stil)))
-(define-public (stencil-whiteout stil style thickness line-thickness)
- "@var{style} is a symbol that determines the shape of the white
-background. @var{thickness} is how far, as a multiple of
-@var{line-thickness}, the white background extends past the extents
-of stencil @var{stil}. If @var{thickness} has not been specified
-by the user, an appropriate default is chosen based on @var{style}."
+(define*-public (stencil-whiteout stil
+ #:optional style thickness (line-thickness 0.1))
+ "@var{style}, @var{thickness} and @var{line-thickness} are optional
+arguments. If set, @var{style} determines the shape of the white
+background. Given @code{'outline} the white background is produced
+by @code{stencil-whiteout-outline}, given @code{'rounded-box} it is
+produced by @code{stencil-whiteout-box} with rounded corners, given
+other arguments (e.g. @code{'box}) or when unspecified it defaults to
+@code{stencil-whiteout-box} with square corners. If @var{thickness} is
+specified it determines how far, as a multiple of @var{line-thickness},
+the white background extends past the extents of stencil @var{stil}. If
+@var{thickness} has not been specified, an appropriate default is chosen
+based on @var{style}."
(let ((thick (* line-thickness
(if (number? thickness)
thickness
((eq? style 'rounded-box) 3)
(else 0))))))
(cond
+ ((eq? style 'special) stil)
((eq? style 'outline) (stencil-whiteout-outline stil thick))
((eq? style 'rounded-box) (stencil-whiteout-box stil thick (* 2 thick)))
(else (stencil-whiteout-box stil thick)))))
((eq? head 'color) (interpret (caddr expr)))
((eq? head 'rotate-stencil) (interpret (caddr expr)))
((eq? head 'translate-stencil) (interpret (caddr expr)))
+ ;; for signatures, we indeed want the _outline_ rather than
+ ;; the expression interpreted. Right?
+ ((eq? head 'with-outline) (interpret (cadr expr)))
((eq? head 'combine-stencil)
- (for-each (lambda (e) (interpret e)) (cdr expr)))
+ (for-each interpret (cdr expr)))
(else
(collect (fold-false-pairs (strip-floats expr))))