From 61f3ab8f23f4c924d455757bf3e65f8487521b5a Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 13 Apr 2024 13:57:42 +0200 Subject: Adding upstream version 1.3. Signed-off-by: Daniel Baumann --- src/toys/paptest.cpp | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 src/toys/paptest.cpp (limited to 'src/toys/paptest.cpp') diff --git a/src/toys/paptest.cpp b/src/toys/paptest.cpp new file mode 100644 index 0000000..4ea2cd2 --- /dev/null +++ b/src/toys/paptest.cpp @@ -0,0 +1,107 @@ +/* + * A simple toy to test the path along path + * + * Copyright 2007 Johan Engelen + * + * This library is free software; you can redistribute it and/or + * modify it either under the terms of the GNU Lesser General Public + * License version 2.1 as published by the Free Software Foundation + * (the "LGPL") or, at your option, under the terms of the Mozilla + * Public License Version 1.1 (the "MPL"). If you do not alter this + * notice, a recipient may use your version of this file under either + * the MPL or the LGPL. + * + * You should have received a copy of the LGPL along with this library + * in the file COPYING-LGPL-2.1; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * You should have received a copy of the MPL along with this library + * in the file COPYING-MPL-1.1 + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY + * OF ANY KIND, either express or implied. See the LGPL or the MPL for + * the specific language governing rights and limitations. + * + */ + + +#include +#include <2geom/path-sink.h> +#include <2geom/svg-path-parser.h> +#include <2geom/sbasis.h> +#include <2geom/sbasis-geometric.h> +#include <2geom/bezier-to-sbasis.h> +#include <2geom/sbasis-to-bezier.h> +#include <2geom/d2.h> +#include <2geom/piecewise.h> + +Geom::Piecewise > +doEffect_pwd2 (Geom::Piecewise > & pwd2_in, Geom::Piecewise > & pattern) +{ + using namespace Geom; + + Piecewise > uskeleton = arc_length_parametrization(pwd2_in, 2, .1); + uskeleton = remove_short_cuts(uskeleton,.01); + Piecewise > n = rot90(derivative(uskeleton)); + n = force_continuity(remove_short_cuts(n,.1)); + + D2 > patternd2 = make_cuts_independent(pattern); + Piecewise x = Piecewise(patternd2[0]); + Piecewise y = Piecewise(patternd2[1]); + Interval pattBnds = *bounds_exact(x); + x -= pattBnds.min(); + Interval pattBndsY = *bounds_exact(y); + y -= (pattBndsY.max()+pattBndsY.min())/2; + + int nbCopies = int(uskeleton.cuts.back()/pattBnds.extent()); + double scaling = 1; + + double pattWidth = pattBnds.extent() * scaling; + + if (scaling != 1.0) { + x*=scaling; + } + + double offs = 0; + Piecewise > output; + for (int i=0; i 1) { + Geom::PathVector originald = Geom::parse_svg_path(&*argv[1]); + Geom::Piecewise > originaldpwd2; + for (const auto & i : originald) { + originaldpwd2.concat( i.toPwSb() ); + } + + Geom::PathVector pattern = Geom::parse_svg_path(&*argv[2]); + Geom::Piecewise > patternpwd2; + for (const auto & i : pattern) { + patternpwd2.concat( i.toPwSb() ); + } + + doEffect_pwd2(originaldpwd2, patternpwd2); + } + return 0; +}; + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 : -- cgit v1.2.3