diff --git a/src/path-optimization/spline-gradient-based.cc b/src/path-optimization/spline-gradient-based.cc index 0e4c0ddc7aa43861276c817e60ab98a98406e2ba..d18a17e0ce2478ebea45e6427287b7c36d1b08b5 100644 --- a/src/path-optimization/spline-gradient-based.cc +++ b/src/path-optimization/spline-gradient-based.cc @@ -75,6 +75,7 @@ namespace hpp { assert (init->numberPaths() == splines.size() && ss.size() == splines.size()); const std::size_t last = splines.size() - 1; + bool prevReversed; for (std::size_t i = 0; i < last; ++i) { core::PathPtr_t path = init->pathAtRank(i); ConstraintSetPtr_t set = HPP_STATIC_PTR_CAST (ConstraintSet, splines[i]->constraints ()); @@ -89,6 +90,10 @@ namespace hpp { // The path should always go through the start and end states of the // transition. + // FIXME problem of waypoint edges... + graph::WaypointEdgePtr_t we = HPP_DYNAMIC_PTR_CAST(graph::WaypointEdge, transition); + if (we) reversed = prevReversed; + graph::StatePtr_t from = (we ? we->waypoint<graph::Edge>(we->nbWaypoints() - 1)->to() : transition->from()); if (reversed && transition->state() != from) { // Do something different constrainEndIntoState (path, i, splines[i], from, lc); @@ -96,6 +101,7 @@ namespace hpp { // Do something different constrainEndIntoState (path, i, splines[i], transition->to(), lc); } + prevReversed = reversed; } this->addProblemConstraintOnPath (init->pathAtRank(last), last, splines[last], lc, ss[last]); }