diff options
Diffstat (limited to 'app/cornu/spiroentrypoints.c')
-rw-r--r-- | app/cornu/spiroentrypoints.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/app/cornu/spiroentrypoints.c b/app/cornu/spiroentrypoints.c new file mode 100644 index 0000000..0128115 --- /dev/null +++ b/app/cornu/spiroentrypoints.c @@ -0,0 +1,60 @@ +/* +libspiro - conversion between spiro control points and bezier's +Copyright (C) 2007 Raph Levien + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301, USA. + +*/ +/* Interface routines to Raph's spiro package. */ + +#include "spiroentrypoints.h" + +void +SpiroCPsToBezier(spiro_cp *spiros,int n,int isclosed,bezctx *bc) +{ + spiro_seg *s; + + if ( n<1 ) +return; + if ( !isclosed ) { + char oldty_start = spiros[0].ty; + char oldty_end = spiros[n-1].ty; + spiros[0].ty = '{'; + spiros[n-1].ty = '}'; + s = run_spiro(spiros,n); + spiros[n-1].ty = oldty_end; + spiros[0].ty = oldty_start; + } else + s = run_spiro(spiros,n); + spiro_to_bpath(s,n,bc); + free_spiro(s); +} + +void +TaggedSpiroCPsToBezier(spiro_cp *spiros,bezctx *bc) +{ + spiro_seg *s; + int n; + + for ( n=0; spiros[n].ty!='z' && spiros[n].ty!='}'; ++n ); + if ( spiros[n].ty == '}' ) ++n; + + if ( n<1 ) +return; + s = run_spiro(spiros,n); + spiro_to_bpath(s,n,bc); + free_spiro(s); +} |