lpe-bspline.cpp revision f153cb021dc961abe4502e5a0ee929e7867ed6cc
#define INKSCAPE_LPE_BSPLINE_C
/*
* Released under GNU GPL, read the file 'COPYING' for more information
*/
#include "live_effects/lpe-bspline.h"
#include <typeinfo>
#include "helper/geom-curves.h"
// For handling un-continuous paths:
#include "message-stack.h"
#include "inkscape.h"
#include "desktop.h"
namespace Inkscape {
namespace LivePathEffect {
{
}
LPEBSpline::~LPEBSpline()
{
}
//Crea una nueva curva reseteando la original
SPCurve *
return ret;
}
void
{
using Geom::X;
using Geom::Y;
// Make copy of old path as it is changed during processing
//Sbasis
//curves
//Curvas temporales
//Puntos a usar. Ponemos todos los posibles para hacer más inteligible el código
//Geom::Point previousPointAt3(0,0);
//Geom::Point nextPointAt0(0,0);
//Recorremos todos los paths a los que queremos aplicar el efecto, hasta el penúltimo
for(Geom::PathVector::const_iterator path_it = original_pathv.begin(); path_it != original_pathv.end(); ++path_it) {
//Si está vacío...
continue;
//Itreadores
Geom::Path::const_iterator curve_endit = path_it->end_default(); // this determines when the loop has to stop
//Las lineas rectas forman nodos BSpline
//Las curvas forman nodos CUSP
bool isBSpline = true;
//Creamos las lineas rectas que unen todos los puntos del trazado y donde se calcularán
//los puntos clave para los manejadores.
//Esto hace que la curva BSpline no pierda su condición aunque se trasladen
//dichos manejadores
//este no cambia.
//Si la curva está cerrada calculamos el punto donde
//en posible caso de que se cierre con una linea recta creando un nodo BSPline
isBSpline = false;
//Calculamos el nodo de inicio BSpline
lineHelper->reset();
//Guardamos el principio de la curva
//Definimos el punto de inicio original de la curva resultante
}else{
isBSpline = true;
//Guardamos el principio de la curva
//Definimos el punto de inicio original de la curva resultante
}
//Recorremos todos los segmentos menos el último
while ( curve_it2 != curve_endit )
{
//Damos valor a el objeto SBasis para el path de entrada y el de salida
//previousPointAt3 = pointAt3;
//Calculamos los puntos que dividirían en tres segmentos iguales el path recto de entrada y de salida
//Y hacemos lo propio con el path de salida
//nextPointAt0 = curveOut.valueAt(0);
//La curva BSpline se forma calculando el centro del segmanto de unión
//de el punto situado en las 2/3 partes de el segmento de entrada
//con el punto situado en la posición 1/3 del segmento de salida
//Estos dos puntos ademas estan posicionados en el lugas correspondiente de
//los manejadores de la curva
lineHelper->reset();
//almacenamos el punto del anterior bucle -o el de cierre- que nos hara de principio de curva
previousNode = node;
//Y este hará de final de curva
//Vemos si el nodo es BSpline o CUSP
//Averiguamos si el punto de union tiene manejadores
isBSpline = false;
isBSpline = false;
//Si no tiene manejador, tenemos que generar la curva con nodo final CUSP
if(!isBSpline ){
//Definimos como nodo el final del segmento de entrada
isBSpline = true;
}
//añadimos la curva generada a la curva pricipal
curveHelper->reset();
//aumentamos los valores para el siguiente paso en el bucle
++curve_it1;
++curve_it2;
}
}
//Aberiguamos la ultima parte de la curva correspondiente al último segmento
//Si está cerrada la curva, la cerramos sobre el valor guardado previamente
//Si no finalizamos en el punto final
}else{
isBSpline = true;
}
//añadimos este último segmento
//y cerramos la curva
}
//Limpiamos
lineHelper->reset();
curveHelper->reset();
}
delete in;
delete out;
delete end;
delete lineHelper;
delete curveHelper;
//Todo: remove?
//delete SBasisIn;
//delete SBasisOut;
//delete SBasisEnd;
//delete SBasisHelper;
}
}; //namespace LivePathEffect
}; /* namespace Inkscape */
/*
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 :