void SeLct::get_path_corners ( GsArray<GsVec2>& points, GsArray<char>& topdown )
 {
   points.size(0);
   topdown.size(0);
   if ( !_fpath ) return;
   for ( int i=0; i<_fpath->size(); i++ )
    { points.push() = _fpath->get(i);
      topdown.push() = _fpath->get(i).side;
    }
 }
void SeLct::get_funnel_corners ( GsArray<GsVec2>& points, GsArray<char>& sides, FunnelDeque* funnel )
 {
   char s;
   points.size(0);
   sides.size(0);
   if ( !funnel ) funnel=_fdeque;
   if ( !funnel ) return;
   for ( int i=0; i<funnel->size(); i++ )
    { points.push() = (*funnel)[i];
      s = (*funnel)[i].side;
      sides.push() = s;
      if ( (*funnel)[i].apex ) sides.top() = GS_UPPER(s);
    }
 }