From 555761b02e9d39a42e9a72dc9f90955c65036740 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sat, 16 Aug 2014 21:45:29 +0000 Subject: hobby (16aug14) git-svn-id: svn://tug.org/texlive/trunk@34953 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/source/latex/hobby/hobby.dtx | 100 +++++++++++++++++++------ 1 file changed, 79 insertions(+), 21 deletions(-) (limited to 'Master/texmf-dist/source/latex/hobby/hobby.dtx') diff --git a/Master/texmf-dist/source/latex/hobby/hobby.dtx b/Master/texmf-dist/source/latex/hobby/hobby.dtx index 74ad06c13dd..39f96042d33 100644 --- a/Master/texmf-dist/source/latex/hobby/hobby.dtx +++ b/Master/texmf-dist/source/latex/hobby/hobby.dtx @@ -6,7 +6,7 @@ ---------------------------------------------------------------- hobby --- a TikZ/PGF library for drawing smooth(ish) curves using Hobby's algorithm (implemented in LaTeX3) -E-mail: stacey@math.ntnu.no +E-mail: loopspace@mathforge.org Released under the LaTeX Project Public License v1.3c or later See http://www.latex-project.org/lppl.txt ---------------------------------------------------------------- @@ -33,7 +33,7 @@ The implementation is in LaTeX3. It can be used as as a TikZ ---------------------------------------------------------------- hobby --- a TikZ/PGF library for drawing smooth(ish) curves using Hobby's algorithm (implemented in LaTeX3) -E-mail: stacey@math.ntnu.no +E-mail: loopspace@mathforge.org Released under the LaTeX Project Public License v1.3c or later See http://www.latex-project.org/lppl.txt ---------------------------------------------------------------- @@ -41,7 +41,7 @@ See http://www.latex-project.org/lppl.txt \endpreamble \postamble -Copyright (C) 2012 by Andrew Stacey +Copyright (C) 2012 by Andrew Stacey This file may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3 of this @@ -110,7 +110,7 @@ and the derived files hobby.code.tex % % \fi % -% \CheckSum{3304} +% \CheckSum{3380} % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z @@ -134,7 +134,7 @@ and the derived files hobby.code.tex % % \providecommand*{\url}{\texttt} % \title{The \textsf{Hobby} package: code} -% \author{Andrew Stacey \\ \url{stacey@math.ntnu.no}} +% \author{Andrew Stacey \\ \url{loopspace@mathforge.org}} % \date{\hobbyVersion\ from\ \hobbyDate} % \maketitle % @@ -182,8 +182,8 @@ and the derived files hobby.code.tex \tl_new:N \g__hobby_version \tl_new:N \g__hobby_date -\tl_set:Nn \g__hobby_version {1.4} -\tl_set:Nn \g__hobby_date {2014-01-21} +\tl_set:Nn \g__hobby_version {1.6} +\tl_set:Nn \g__hobby_date {2014-08-11} \DeclareDocumentCommand \hobbyVersion {} { \tl_use:N \g__hobby_version @@ -480,20 +480,20 @@ and the derived files hobby.code.tex % \begin{macro}{\l_hobby_in_angle_fp} % \Verb+\l_hobby_in_angle_fp+ is the angle at the end of an open path. % If this is not specified, it will be computed automatically. -% It is set to \Verb+\c_undefined_fp+ to allow easy detection of when it has been specified. +% It is set to \Verb+\c_inf_fp+ to allow easy detection of when it has been specified. % \begin{macrocode} \fp_new:N \l_hobby_in_angle_fp -\fp_set_eq:NN \l_hobby_in_angle_fp \c_undefined_fp +\fp_set_eq:NN \l_hobby_in_angle_fp \c_inf_fp % \end{macrocode} % \end{macro} % % \begin{macro}{\l_hobby_out_angle_fp} % \Verb+\l_hobby_out_angle_fp+ is the angle at the start of an open path. % If this is not specified, it will be computed automatically. -% It is set to \Verb+\c_undefined_fp+ to allow easy detection of when it has been specified. +% It is set to \Verb+\c_inf_fp+ to allow easy detection of when it has been specified. % \begin{macrocode} \fp_new:N \l_hobby_out_angle_fp -\fp_set_eq:NN \l_hobby_out_angle_fp \c_undefined_fp +\fp_set_eq:NN \l_hobby_out_angle_fp \c_inf_fp % \end{macrocode} % \end{macro} % @@ -742,7 +742,7 @@ and the derived files hobby.code.tex % Just need to set the incoming and outgoing angles % \begin{macrocode} \hobby_distangle:n {0} -\fp_if_undefined:NF \l_hobby_out_angle_fp +\fp_compare:nF { \l_hobby_out_angle_fp == \c_inf_fp } { \fp_set:Nn \l_hobby_tempa_fp { \l_hobby_out_angle_fp - \array_get:Nn \l_hobby_angles_array {0}} @@ -763,15 +763,15 @@ and the derived files hobby.code.tex \fp_add:Nn \l_hobby_tempa_fp {2 * \c_pi_fp} } \array_put:Nnx \l_hobby_theta_array {0} {\fp_to_tl:N \l_hobby_tempa_fp} - \fp_if_undefined:NT \l_hobby_in_angle_fp + \fp_compare:nT { \l_hobby_in_angle_fp == \c_inf_fp } { %^^A \fp_mul:Nn \l_hobby_tempa_fp {-1} \array_put:Nnx \l_hobby_phi_array {1}{ \fp_to_tl:N \l_hobby_tempa_fp} } } -\fp_if_undefined:NTF \l_hobby_in_angle_fp +\fp_compare:nTF { \l_hobby_in_angle_fp == \c_inf_fp } { - \fp_if_undefined:NT \l_hobby_out_angle_fp + \fp_compare:nT { \l_hobby_out_angle_fp == \c_inf_fp } { \array_put:Nnx \l_hobby_phi_array {1} {0} \array_put:Nnx \l_hobby_theta_array {0} {0} @@ -791,7 +791,7 @@ and the derived files hobby.code.tex \array_put:Nnx \l_hobby_phi_array {1} {\fp_to_tl:N \l_hobby_tempa_fp} - \fp_if_undefined:NT \l_hobby_out_angle_fp + \fp_compare:nT { \l_hobby_out_angle_fp == \c_inf_fp } { %^^A \fp_mul:Nn \l_hobby_tempa_fp {-1} \array_put:Nnx \l_hobby_theta_array {0}{ \fp_to_tl:N \l_hobby_tempa_fp} @@ -981,7 +981,7 @@ and the derived files hobby.code.tex % Open path. % First, we test to see if \(\theta_0\) has been specified. % \begin{macrocode} -\fp_if_undefined:NTF \l_hobby_out_angle_fp +\fp_compare:nTF { \l_hobby_out_angle_fp == \c_inf_fp } { \array_put:Nnx \l_hobby_matrix_b_array {0} {\fp_to_tl:n { (\array_get:Nn \l_hobby_tension_in_array {1})^3 @@ -1036,7 +1036,7 @@ and the derived files hobby.code.tex % % Next, if \(\phi_n\) has been given. % \begin{macrocode} -\fp_if_undefined:NTF \l_hobby_in_angle_fp +\fp_compare:nTF { \l_hobby_in_angle_fp == \c_inf_fp } { \array_put:Nnx \l_hobby_matrix_b_array {\l_hobby_npoints_int - 1} {\fp_to_tl:n { @@ -1234,7 +1234,7 @@ and the derived files hobby.code.tex % \end{macrocode} % If \(\phi_n\) was not given, we compute it from \(\theta_{n-1}\). % \begin{macrocode} -\fp_if_undefined:NT \l_hobby_in_angle_fp +\fp_compare:nT { \l_hobby_in_angle_fp == \c_inf_fp } { \array_put:Nnx \l_hobby_phi_array {\l_hobby_npoints_int} {\fp_to_tl:n { ((3 * (\array_get:Nn \l_hobby_tension_in_array {\l_hobby_npoints_int}) - 1) @@ -1661,8 +1661,8 @@ sin ( (\array_get:Nn \l_hobby_angles_array {##1}) \int_gset:Nn \l_hobby_npoints_int {-1} \int_gset:Nn \l_hobby_draw_int {1} - \fp_gset_eq:NN \l_hobby_in_angle_fp \c_undefined_fp - \fp_gset_eq:NN \l_hobby_out_angle_fp \c_undefined_fp + \fp_gset_eq:NN \l_hobby_in_angle_fp \c_inf_fp + \fp_gset_eq:NN \l_hobby_out_angle_fp \c_inf_fp \fp_gset_eq:NN \l_hobby_in_curl_fp \c_one_fp \fp_gset_eq:NN \l_hobby_out_curl_fp \c_one_fp } @@ -1751,6 +1751,64 @@ sin ( (\array_get:Nn \l_hobby_angles_array {##1}) % \end{macrocode} % \end{macro} % +% \begin{macro}{\pgfpathhobby} +% Low-level interface to the hobby construction. +% This sets up the commands and starts the iterator. +% \begin{macrocode} +\def\pgfpathhobby{% + \pgfutil@ifnextchar\bgroup{\pgfpath@hobby}{\pgfpath@hobby{}}} +\def\pgfpath@hobby#1{% + \hobbyinit\hobby@moveto\hobby@curveto\hobby@close + \hobbysetparams{#1}% + \pgfmathsetmacro\hobby@x{\the\pgf@path@lastx/1cm}% + \pgfmathsetmacro\hobby@y{\the\pgf@path@lasty/1cm}% + \hobbyaddpoint{x = \hobby@x, y = \hobby@y}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\pgfpathhobbypt} +% Adds a point to the construction +% \begin{macrocode} +\def\pgfpathhobbypt#1{% + #1% + \pgfmathsetmacro\hobby@x{\the\pgf@x/1cm}% + \pgfmathsetmacro\hobby@y{\the\pgf@y/1cm}% + \pgfutil@ifnextchar\bgroup{\pgfpathhobbyptparams}{\pgfpathhobbyptparams{}}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\pgfpathhobbyptparams} +% \begin{macrocode} +\def\pgfpathhobbyptparams#1{% + \hobbyaddpoint{#1,x = \hobby@x, y = \hobby@y}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\pgfpathhobbyend} +% \begin{macrocode} +\def\pgfpathhobbyend{% + \ifhobby@externalise + \ifx\hobby@path@name\pgfutil@empty + \hobbygenusepath + \else + \hobbygenuseifnecpath{\hobby@path@name}% + \fi + \else + \hobbygenusepath + \fi + \ifx\hobby@path@name\pgfutil@empty + \else + \hobbysavepath{\hobby@path@name}% + \fi + \global\let\hobby@path@name=\pgfutil@empty +} +% \end{macrocode} +% \end{macro} +% +% % Plot handlers % % \begin{macro}{\pgfplothanderhobby} -- cgit v1.2.3