| 
    shape_doc 0.1 
   | 
 
Definition at line 16 of file ssi_def.hpp.
| typedef unsigned short coord_t | 
Definition at line 21 of file ssi_def.hpp.
| typedef ordered_pair<dcurve*> cpair_t | 
Definition at line 193 of file ssi_dsearch.hpp.
| typedef std::map< dcurve*, links_t > curves_links_t | 
Definition at line 192 of file ssi_dsearch.hpp.
Definition at line 18 of file ssi_def.hpp.
| typedef Interval<double,3> interval | 
Definition at line 13 of file ssi_def.hpp.
Definition at line 191 of file ssi_dsearch.hpp.
Definition at line 14 of file ssi_dsearch.hpp.
Definition at line 15 of file ssi_dsearch.hpp.
Definition at line 21 of file ssi_qsegment.hpp.
| typedef list2_t::iterator p2ref_t | 
Definition at line 16 of file ssi_dsearch.hpp.
Definition at line 185 of file ssi_dsearch.hpp.
| typedef std::priority_queue< assoc_t<pdpoint_t>, std::vector< assoc_t<pdpoint_t> >, assoc_t< pdpoint_t>::dist_cmp > pheap_t | 
Definition at line 177 of file ssi_dsearch.hpp.
Definition at line 20 of file ssi_def.hpp.
Definition at line 19 of file ssi_def.hpp.
Definition at line 190 of file ssi_dsearch.hpp.
| typedef pset_t::iterator pset_iterator | 
Definition at line 212 of file ssi_dsearch.hpp.
Definition at line 182 of file ssi_dsearch.hpp.
Definition at line 23 of file ssi_def.hpp.
| typedef short rid_t | 
Definition at line 22 of file ssi_def.hpp.
Definition at line 184 of file ssi_dsearch.hpp.
| typedef std::priority_queue< assoc_t<sdpoint_t>, std::vector< assoc_t<sdpoint_t> >, assoc_t< sdpoint_t>::dist_cmp > sheap_t | 
Definition at line 180 of file ssi_dsearch.hpp.
Definition at line 14 of file ssi_def.hpp.
Definition at line 15 of file ssi_def.hpp.
Definition at line 17 of file ssi_def.hpp.
| void mmx::shape_ssi::_link | ( | DPoint * | a, | 
| DPoint * | b | ||
| ) |  [inline] | 
        
| void append | ( | dcurve * | a, | 
| dcurve * | b | ||
| ) | 
Definition at line 69 of file ssi_dsearch_dcurve.cpp.
References dcurve::inter, dcurve::left, dcurve::owner, dcurve::right, and dcurve::size.
Referenced by _link(), mmx::GLUE_10(), mmx::GLUE_133(), and mmx::GLUE_151().
  { 
    a->left.splice ( a->left.end(),  b->left  );
    a->right.splice( a->right.end(), b->right );
    a->inter.splice( a->inter.end(), b->inter );
    b->owner = a; 
    a->size += b->size;
  };
| void mmx::shape_ssi::build_pheap | ( | pheap_t & | h, | 
| pdpoint_t * | first, | ||
| pdpoint_t * | last, | ||
| double | prec | ||
| ) | 
Definition at line 68 of file ssi_dsearch_build.cpp.
References search().
{
  search(h,first,last,prec);
};
| void mmx::shape_ssi::build_pset | ( | pset_t & | s, | 
| pdpoint_t * | first, | ||
| pdpoint_t * | last, | ||
| double | prec | ||
| ) | 
Definition at line 73 of file ssi_dsearch_build.cpp.
References search().
Referenced by reduce2().
{
  search(s,first,last,prec);
};
| void mmx::shape_ssi::build_sheap | ( | sheap_t & | h, | 
| sdpoint_t * | first, | ||
| sdpoint_t * | last, | ||
| double | prec | ||
| ) | 
Definition at line 78 of file ssi_dsearch_build.cpp.
References search().
Referenced by dsearch::reduce().
{
  search(h,first,last,prec);
};
| void mmx::shape_ssi::container_add | ( | A & | h, | 
| const B & | a | ||
| ) |  [inline] | 
        
| void mmx::shape_ssi::container_add | ( | pset_t & | s, | 
| const pdassc_t & | a | ||
| ) |  [inline] | 
        
Definition at line 197 of file ssi_dsearch.hpp.
{ s.insert(a); };
| dcurve * curve | ( | pdpoint_t * | p | ) | 
Definition at line 30 of file ssi_dsearch_dcurve.cpp.
References pdpoint_t::curve, and dcurve::owner.
Referenced by _link(), curves(), isfirst(), islast(), isright(), link(), satisfy_links(), search(), solve_pheap(), solve_pset(), and solve_sheap().
  { 
    dcurve * tmp      = p->curve;
    while( tmp->owner != tmp ) tmp = tmp->owner;
    p->curve->owner   = tmp;
    //      p->curve = tmp;
    return tmp;
  };
| dcurve * curve | ( | sdpoint_t * | p | ) | 
Definition at line 39 of file ssi_dsearch_dcurve.cpp.
References sdpoint_t::curve, and dcurve::owner.
  { 
    dcurve *  tmp      = p->curve;
    while( tmp->owner != tmp ) tmp = tmp->owner;
    p->curve->owner   = tmp;
    //      p->curve = tmp;
    return tmp;
  };
| cpair_t mmx::shape_ssi::curves | ( | const pdassc_t & | ass | ) |  [inline] | 
        
Definition at line 198 of file ssi_dsearch.hpp.
References curve(), and assoc_t< DPoint >::pp.
Referenced by solve_pset().
| double mmx::shape_ssi::distance | ( | DP * | pa, | 
| DP * | pb | ||
| ) |  [inline] | 
        
Definition at line 39 of file ssi_dsearch.hpp.
Referenced by search().
    {
      double acc = 0.0;
      for ( unsigned i = 0; i < 4; i++ )
        acc += ((*pa)[i]-(*pb)[i])*((*pa)[i]-(*pb)[i]);
      return acc;
    };
| qnode* mmx::shape_ssi::down | ( | qnode * | q | ) |  [inline] | 
        
Definition at line 47 of file ssi_qnode.hpp.
References search(), qnode::umin, and qnode::vmin.
Referenced by lsegment::find_regions().
{ return search( q->umin - 1, q->vmin, q ); };
| coord_t mmx::shape_ssi::du | ( | const qnode * | q | ) |  [inline] | 
        
Definition at line 29 of file ssi_qnode.hpp.
References qnode::umax, and qnode::umin.
Referenced by qnode::convert(), qnode::split(), and unit().
{ return q->umax-q->umin; };
| coord_t mmx::shape_ssi::dv | ( | const qnode * | q | ) |  [inline] | 
        
Definition at line 30 of file ssi_qnode.hpp.
References qnode::vmax, and qnode::vmin.
Referenced by qnode::convert(), qnode::split(), and unit().
{ return q->vmax - q->vmin; };
| bool mmx::shape_ssi::empty | ( | dcurve * | c | ) |  [inline] | 
        
Definition at line 109 of file ssi_dsearch.hpp.
References dcurve::owner.
Referenced by dsearch::reduce(), and reduce2().
{ return c->owner != c; };
| void extremums | ( | pdpoint_t * | dst, | 
| dcurve * | c | ||
| ) | 
Definition at line 59 of file ssi_dsearch_dcurve.cpp.
References pdpoint_t::a, pdpoint_t::curve, dcurve::left, pdpoint_t::ref, and dcurve::right.
  {
    dst[0].curve = dst[1].curve = dst[2].curve = dst[3].curve  = c; 
    dst[0].a = &(dst[1]);  dst[1].a = &(dst[0]);
    dst[0].ref   = c->left.begin(); dst[1].ref   = c->right.begin();
    dst[2].a = &(dst[3]);  dst[3].a = &(dst[2]);
    dst[2].ref   = --(c->left.end()); dst[3].ref   = --(c->right.end());
  };
| void extremums | ( | sdpoint_t * | dst, | 
| dcurve * | src | ||
| ) | 
Definition at line 49 of file ssi_dsearch_dcurve.cpp.
References sdpoint_t::curve, sdpoint_t::idl, sdpoint_t::idr, dcurve::left, and dcurve::right.
Referenced by dsearch::reduce(), and reduce2().
  {
    dst[0].curve = src;
    dst[0].idl   = src->left.begin(); 
    dst[0].idr   = src->right.begin();
    dst[1].curve = src;
    dst[1].idl   = --(src->left.end()); 
    dst[1].idr   = --(src->right.end());
  };
| void mmx::shape_ssi::fill_quad_box | ( | vcode_t | c, | 
| aabb3 & | box, | ||
| const vector3 & | p0, | ||
| const vector3 & | p1, | ||
| const vector3 & | p2, | ||
| const vector3 & | p3 | ||
| ) |  [inline] | 
        
| bool mmx::shape_ssi::inside | ( | coord_t | u, | 
| coord_t | v, | ||
| qnode * | q | ||
| ) |  [inline] | 
        
Definition at line 37 of file ssi_qnode.hpp.
References qnode::umax, qnode::umin, qnode::vmax, and qnode::vmin.
Referenced by search().
  {
    if ( q->umin  > u ) return false;
    if ( q->umax <= u ) return false;
    if ( q->vmin  > v ) return false;
    if ( q->vmax <= v ) return false;
    return true;
  };
| bool mmx::shape_ssi::isextrem | ( | pdpoint_t * | p | ) |  [inline] | 
        
Definition at line 124 of file ssi_dsearch.hpp.
References isfirst(), and islast().
Referenced by satisfy_links(), solve_pheap(), and solve_sheap().
| bool mmx::shape_ssi::isextrem | ( | sdpoint_t * | p | ) |  [inline] | 
        
| bool mmx::shape_ssi::isfirst | ( | sdpoint_t * | p | ) |  [inline] | 
        
Definition at line 118 of file ssi_dsearch.hpp.
References curve(), sdpoint_t::idl, and dcurve::left.
Referenced by _link(), isextrem(), and satisfy_links().
{ return curve(p)->left.begin() == p->idl;     };
| bool mmx::shape_ssi::isfirst | ( | pdpoint_t * | p | ) |  [inline] | 
        
Definition at line 121 of file ssi_dsearch.hpp.
References curve(), dcurve::left, pdpoint_t::ref, and dcurve::right.
| bool mmx::shape_ssi::islast | ( | sdpoint_t * | p | ) |  [inline] | 
        
Definition at line 119 of file ssi_dsearch.hpp.
References curve(), sdpoint_t::idl, and left().
Referenced by _link(), isextrem(), and satisfy_links().
| bool mmx::shape_ssi::islast | ( | pdpoint_t * | p | ) |  [inline] | 
        
Definition at line 122 of file ssi_dsearch.hpp.
References curve(), left(), pdpoint_t::ref, and dcurve::right.
| bool mmx::shape_ssi::isright | ( | pdpoint_t * | p | ) |  [inline] | 
        
Definition at line 131 of file ssi_dsearch.hpp.
References curve(), pdpoint_t::ref, and dcurve::right.
Referenced by link().
| bool mmx::shape_ssi::leaf | ( | qnode const *const | q | ) |  [inline] | 
        
Definition at line 35 of file ssi_qnode.hpp.
References qnode::l.
Referenced by search(), dsearch::search(), dsearch::search_f(), and dsearch::search_s().
{ return (q->l == 0); };
| qnode* mmx::shape_ssi::left | ( | qnode * | q | ) |  [inline] | 
        
Definition at line 48 of file ssi_qnode.hpp.
References search(), qnode::umin, and qnode::vmin.
Referenced by EdgeListBuilder< node_t >::faceProc(), islast(), node< _Object, _CELL >::node(), octree_node< Object, CELL >::octree_node(), voronoi2d< C, V >::run(), search(), topology2d< C, V >::subdivide(), semialgebraic2d< C, V >::subdivide(), mesher3d_shape< C, V >::subdivide(), mesher3d_curve_algebraic< C, V >::subdivide(), cell3d_surface_algebraic< C, V >::subdivide(), cell3d_algebraic_curve< C, V >::subdivide(), cell2d_voronoi_diagram< C, V >::subdivide(), cell2d_list< C, V >::subdivide(), cell2d_intersection< C, V >::subdivide(), arrangement2d< C, V >::subdivide(), and use< subdivision_def, default_env >::subdivide_node().
{ return search( q->umin, q->vmin - 1, q ); };
| void link | ( | sdpoint_t * | a, | 
| sdpoint_t * | b | ||
| ) | 
Definition at line 90 of file ssi_dsearch_dcurve.cpp.
References _link().
Referenced by satisfy_links(), solve_pheap(), and solve_sheap().
{ _link(a,b); };
| void link | ( | pdpoint_t * | a, | 
| pdpoint_t * | b | ||
| ) | 
| sdknode * make | ( | sdpoint_t * | first, | 
| sdpoint_t * | last, | ||
| const dim_cmp< sdpoint_t > & | f | ||
| ) | 
Definition at line 115 of file ssi_dsearch_build.cpp.
References dim_cmp< DPoint >::next().
| pdknode * make | ( | pdpoint_t ** | first, | 
| pdpoint_t ** | last, | ||
| const dim_cmp< pdpoint_t > & | f | ||
| ) | 
Definition at line 128 of file ssi_dsearch_build.cpp.
References make(), and dim_cmp< DPoint >::next().
| std::ostream & operator<< | ( | std::ostream & | o, | 
| const qnode & | q | ||
| ) | 
Definition at line 5 of file ssi_qnode.cpp.
References qnode::umax, qnode::umin, qnode::vmax, and qnode::vmin.
  {
    o << "[ " << q.umin << ", " << q.umax << " ] x ";
    o << "[ " << q.vmin << ", " << q.vmax << " ]";
    return o;
  };
| std::ostream& mmx::shape_ssi::operator<< | ( | std::ostream & | o, | 
| const lrnode & | l | ||
| ) | 
Definition at line 9 of file ssi_qsegment.cpp.
References lrnode::lmax, lrnode::lmin, lrnode::rmax, and lrnode::rmin.
  {
    o << l.lmin << " " << l.lmax << " " << l.rmin << " " << l.rmax << std::endl;
    return o;
  };
| void prepend | ( | dcurve * | a, | 
| dcurve * | b | ||
| ) | 
Definition at line 78 of file ssi_dsearch_dcurve.cpp.
References dcurve::inter, dcurve::left, dcurve::owner, dcurve::right, and dcurve::size.
Referenced by _link().
  { 
    a->left.splice( a->left.begin(), b->left );  
    a->right.splice( a->right.begin(), b->right );
    a->inter.splice( a->inter.begin(), b->inter );
    b->owner = a; 
    a->size += b->size;
  };
| void mmx::shape_ssi::print | ( | std::ostream & | o, | 
| qtree | q | ||
| ) | 
| std::list< dcurve * > * reduce2 | ( | std::vector< dcurve * > * | conflicts | ) | 
Definition at line 171 of file ssi_dsearch_build.cpp.
References build_pset(), empty(), extremums(), satisfy_links(), and solve_pset().
Referenced by dsearch::dsearch().
{
  if ( conflicts->size() == 0 ) return 0;
  unsigned   i;
  unsigned   endsize  = 4*conflicts->size();
  pdpoint_t * ends = new pdpoint_t[endsize];
  unsigned c = 0;
  for ( i = 0; i < conflicts->size(); i++ )
    {
      extremums( ends + c, (*conflicts)[i] );
      c+= 4;
    };
  
  pset_t s;
  build_pset(s,ends, ends + endsize, 0.01 );
  
  curves_links_t links;
  solve_pset(links,s);
  
  
  for (  curves_links_t::iterator it = links.begin(); 
         it != links.end(); it++ )
    satisfy_links( it );
  
  delete[] ends;
  
  std::list< dcurve* > * result = new std::list< dcurve * >();
  
  for ( i = 0; i < conflicts->size() ; i++ )
    {
      if ( empty((*conflicts)[i]) ) delete (*conflicts)[i];
      else result->push_front( (*conflicts)[i] );
    };
  
  return result;
};
| void reverse | ( | dcurve * | c | ) | 
Definition at line 87 of file ssi_dsearch_dcurve.cpp.
References dcurve::inter, dcurve::left, and dcurve::right.
Referenced by _link(), mmx::GLUE_132(), mmx::GLUE_150(), and mmx::GLUE_9().
  { c->left.reverse(); c->right.reverse(); c->inter.reverse(); };
| qnode* mmx::shape_ssi::right | ( | qnode * | q | ) |  [inline] | 
        
Definition at line 49 of file ssi_qnode.hpp.
References search(), qnode::umin, and qnode::vmin.
Referenced by EdgeListBuilder< node_t >::faceProc(), lrnode::make(), node< _Object, _CELL >::node(), octree_node< Object, CELL >::octree_node(), voronoi2d< C, V >::run(), search(), topology2d< C, V >::subdivide(), semialgebraic2d< C, V >::subdivide(), mesher3d_shape< C, V >::subdivide(), mesher3d_curve_algebraic< C, V >::subdivide(), cell3d_surface_algebraic< C, V >::subdivide(), cell3d_algebraic_curve< C, V >::subdivide(), cell2d_voronoi_diagram< C, V >::subdivide(), cell2d_list< C, V >::subdivide(), cell2d_intersection< C, V >::subdivide(), arrangement2d< C, V >::subdivide(), and use< subdivision_def, default_env >::subdivide_node().
{ return search( q->umin, q->vmin + 1, q );  };
| void satisfy_links | ( | curves_links_t::iterator | it | ) | 
Definition at line 99 of file ssi_dsearch_dcurve.cpp.
References curve(), isextrem(), isfirst(), islast(), and link().
Referenced by reduce2().
  {
      std::list< ppair_t > * l = &(it->second);
      std::vector< ppair_t > starts;
      std::vector< ppair_t > ends;
      
       starts.reserve(10);
       ends.reserve(10);
   
       for (  std::list< ppair_t >::iterator p = l->begin(); 
             p != l->end(); p ++ )
         {
           if ( isfirst(p->first) ) starts.push_back( *p );
           else if ( islast(p->first) ) ends.push_back( *p );
         };
      
       if ( starts.size() == 1 )
         {
           if ( isextrem( starts[0].first ) && isextrem( starts[0].second ) )
            if ( curve(starts[0].first) != curve(starts[0].second))
              link( starts[0].first, starts[0].second );
         };
      
       if ( ends.size() == 1 )
         {
           
           if ( isextrem( ends[0].first ) && isextrem( ends[0].second ) )
             if ( curve(ends[0].first) != curve(ends[0].second) )
               link( ends[0].first, ends[0].second );
         };
    };
| void mmx::shape_ssi::scale | ( | vector3 * | p, | 
| double | s | ||
| ) | 
Definition at line 98 of file ssi_qsegment.cpp.
Referenced by qsegment::scale_conflict().
                                     { 
    for ( int i = 0; i < 4; i ++ )
      for ( int d = 0; d < 3; d ++ )
      p[i][d] *= s;
  };
| void mmx::shape_ssi::search | ( | Container & | c, | 
| sdpoint_t * | first, | ||
| sdpoint_t * | last, | ||
| double | epsilonn | ||
| ) | 
| void mmx::shape_ssi::search | ( | Container & | c, | 
| sdknode * | curr, | ||
| sdpoint_t *const | query, | ||
| unsigned | dim, | ||
| double | eps | ||
| ) | 
Definition at line 33 of file ssi_dsearch_build.cpp.
References container_add(), curve(), sdknode::data, distance(), sdknode::l, left(), sdknode::r, right(), and search().
{
  if (! curr ) return;
  
  bool left  = (*query)[dim]-eps<(*(curr->data))[dim];   
  bool right = (*query)[dim]+eps>(*(curr->data))[dim];
  
  if ( (left && right) && (query<curr->data) && (curve(query) != curve(curr->data)) )
    {
      double d = distance(curr->data,query);
      if ( (d<eps) ) 
        container_add(c,assoc_t<sdpoint_t>(query,curr->data,d));
    };
  if ( left  ){  search( c, curr->l, query, (dim+1)%4, eps ); };
  if ( right ){  search( c, curr->r, query, (dim+1)%4, eps ); };
};
| qnode * search | ( | coord_t | u, | 
| coord_t | v, | ||
| qnode * | start | ||
| ) | 
Definition at line 96 of file ssi_qnode.cpp.
References qnode::father, inside(), qnode::l, leaf(), and qnode::r.
Referenced by build_pheap(), build_pset(), build_sheap(), down(), left(), right(), search(), and up().
| void mmx::shape_ssi::search | ( | Container & | c, | 
| pdpoint_t * | first, | ||
| pdpoint_t * | last, | ||
| double | epsilonn | ||
| ) | 
Definition at line 18 of file ssi_dsearch_build.cpp.
| void mmx::shape_ssi::search | ( | Container & | c, | 
| pdknode * | curr, | ||
| pdpoint_t *const | query, | ||
| unsigned | dim, | ||
| double | eps | ||
| ) | 
Definition at line 51 of file ssi_dsearch_build.cpp.
References container_add(), curve(), pdknode::data, distance(), pdknode::l, left(), pdknode::r, right(), and search().
{
  if (! curr ) return;
  
  bool left  = (*query)[dim]-eps<(*(curr->data))[dim];   
  bool right = (*query)[dim]+eps>(*(curr->data))[dim];
  if ( (left && right) && (query<curr->data) && (curve(query) != curve(curr->data)) )
    {
      double d = distance(curr->data,query);
      if ( (d<eps) ) 
        container_add(c,assoc_t<pdpoint_t>(query,curr->data,d));
    };
  if ( left  ){  search( c, curr->l, query, (dim+1)%4, eps ); };
  if ( right ){  search( c, curr->r, query, (dim+1)%4, eps ); };
};
| void mmx::shape_ssi::shiftm | ( | vector3 * | v, | 
| unsigned | sz, | ||
| const aabb3 & | box | ||
| ) | 
Definition at line 90 of file ssi_qsegment.cpp.
Referenced by qsegment::scale_conflict().
  {
    //    double m,M;
    for ( vector3 * src = v; src != v+sz; src ++ )
      for ( int i = 0; i < 3; (*src)[i] -= box[i].m, i ++ );
  };
| pdpoint_t* mmx::shape_ssi::sibble | ( | pdpoint_t * | p | ) |  [inline] | 
        
Definition at line 111 of file ssi_dsearch.hpp.
References pdpoint_t::a.
Referenced by sibbles().
{ return p->a; };
| pdassc_t mmx::shape_ssi::sibbles | ( | const pdassc_t & | ass | ) |  [inline] | 
        
Definition at line 199 of file ssi_dsearch.hpp.
References assoc_t< DPoint >::pp, and sibble().
Referenced by solve_pset().
| void solve_pheap | ( | pheap_t & | h | ) | 
Definition at line 84 of file ssi_dsearch_build.cpp.
References curve(), isextrem(), link(), and assoc_t< DPoint >::pp.
| void solve_pset | ( | curves_links_t & | links, | 
| pset_t & | s | ||
| ) | 
Definition at line 142 of file ssi_dsearch_build.cpp.
References curve(), curves(), sibbles(), and swap().
Referenced by reduce2().
{
  while ( !s.empty() )
    {
      pdassc_t ass(sibbles(*(s.begin())));
      pset_iterator it; 
      it = s.find( ass  );
      if( it  != s.end() )
        {
          s.erase(s.find(ass));
          cpair_t tmp (curves(*(s.begin())));
          ppair_t p = (s.begin())->pp;
          if ( curve(p.first) != tmp.first ) 
            {
              links[tmp.second].push_front(p);
              std::swap(p.first,p.second);
              links[tmp.first].push_front(p);
            }
          else                  
              {
                links[tmp.first].push_front(p);
                std::swap(p.first,p.second);
                links[tmp.second].push_front(p);
              };
        };
      s.erase(s.begin());
    };
};
| void solve_sheap | ( | sheap_t & | h | ) | 
Definition at line 100 of file ssi_dsearch_build.cpp.
References curve(), isextrem(), link(), and assoc_t< DPoint >::pp.
Referenced by dsearch::reduce().
{
  // dcurve * dummy_curve = new dcurve( point2(), point2(), point2(), point2(),
  //                             point3(), point3() );
  while( !h.empty() )
    {
      sdassc_t a = h.top();
      //          cout << a.d << endl;
      if (( isextrem(a.pp.first) && isextrem(a.pp.second) ) && 
          ( curve(a.pp.first) != curve(a.pp.second) )) 
        link(a.pp.first,a.pp.second);
      h.pop();
    };
};
| void mmx::shape_ssi::space2prm | ( | vector2 & | pa, | 
| vector2 & | pb, | ||
| const vector3 & | sa, | ||
| const vector3 & | sb, | ||
| const vector3 & | base, | ||
| const vector3 & | pu, | ||
| const vector3 & | pv | ||
| ) | 
Definition at line 74 of file ssi_dsearch_triangle.cpp.
  {
  /* T(u,v) = base + u*bu +v*bv
     => 
     spc[0] - base[0] = delta[0]  = / bu[0] bv[0]\  / u \
     spc[1] - base[1] = delta[1]  = | bu[1] bv[1]|  |   |
     spc[2] - base[2] = delta[2]  = \ bu[2] bv[2]/  \ v /
  */
  vector3 bu;
  for ( int i = 0; i < 3; i ++ ) bu[i] = pu[i]-base[i];
  vector3 bv;
  for ( int i = 0; i < 3; i ++ ) bv[i] = pv[i]-base[i];
  double muu, mvv, muv;
  muu = 0;
  for ( int i = 0; i < 3; i ++ ) muu += bu[i]*bu[i];
  mvv = 0;
  for ( int i = 0; i < 3; i ++ ) mvv += bv[i]*bv[i];
  muv = 0; 
  for ( int i = 0; i < 3; i ++ ) muv += bu[i]*bv[i];
  double detm = muu*mvv - muv*muv;
  vector3 delta;
  double x, y;
  for ( int k = 0; k < 3; k ++ ) delta[k] = sa[k]-base[k];
  x = 0;
  for ( int k = 0; k < 3; k ++ ) x += bu[k]*delta[k];
  y = 0; 
  for ( int k = 0; k < 3; k ++ ) y += bv[k]*delta[k];
  pa[0] = (mvv * x - muv * y)/detm;
  pa[1] = (muu * y - muv * x)/detm;
  for ( int k = 0; k < 3; k ++ ) delta[k] = sb[k]-base[k];
  x = 0;
  for ( int k = 0; k < 3; k ++ ) x += bu[k]*delta[k];
  y = 0; 
  for ( int k = 0; k < 3; k ++ ) y += bv[k]*delta[k];
  pb[0] = (mvv * x - muv * y)/detm;
  pb[1] = (muu * y - muv * x)/detm;
};
| void mmx::shape_ssi::swap | ( | dcurve * | c | ) |  [inline] | 
        
Definition at line 129 of file ssi_dsearch.hpp.
References dcurve::left, and dcurve::right.
Referenced by link(), and solve_pset().
{ c->left.swap( c->right ); };
| coord_t mmx::shape_ssi::umax | ( | const qnode * | q | ) |  [inline] | 
        
Definition at line 32 of file ssi_qnode.hpp.
References qnode::umax.
Referenced by qsegment::qsegment(), surface_parametric< C, V >::sample(), and surface_rational< K, N >::set_range().
{ return q->umax; };
| coord_t mmx::shape_ssi::umin | ( | const qnode * | q | ) |  [inline] | 
        
Definition at line 31 of file ssi_qnode.hpp.
References qnode::umin.
Referenced by qsegment::qsegment(), surface_parametric< C, V >::sample(), and surface_rational< K, N >::set_range().
{ return q->umin; };
| bool mmx::shape_ssi::unit | ( | const qnode * | q | ) |  [inline] | 
        
| qnode* mmx::shape_ssi::up | ( | qnode * | q | ) |  [inline] | 
        
Definition at line 46 of file ssi_qnode.hpp.
References search(), qnode::umin, and qnode::vmin.
Referenced by solver_implicit< C, V >::common_edge_point(), solver_implicit< C, V >::edge_point(), and lsegment::find_regions().
{ return search( q->umin + 1, q->vmin, q ); };
| coord_t mmx::shape_ssi::vmax | ( | const qnode * | q | ) |  [inline] | 
        
Definition at line 34 of file ssi_qnode.hpp.
References qnode::vmax.
Referenced by qsegment::make(), surface_parametric< C, V >::sample(), and surface_rational< K, N >::set_range().
{ return q->vmax; };
| coord_t mmx::shape_ssi::vmin | ( | const qnode * | q | ) |  [inline] | 
        
Definition at line 33 of file ssi_qnode.hpp.
References qnode::vmin.
Referenced by qsegment::make(), surface_parametric< C, V >::sample(), and surface_rational< K, N >::set_range().
{ return q->vmin; };
| double _st | 
Definition at line 127 of file ssi_lsegment.cpp.
const int dw_triangle_[] = { 2, 3, 1 } [static] | 
        
Definition at line 11 of file ssi_dsearch_triangle.cpp.
const int up_triangle_[] = { 0, 1, 3 } [static] | 
        
Definition at line 10 of file ssi_dsearch_triangle.cpp.