shape_doc 0.1
mmx::shape_ssi Namespace Reference

Classes

Typedefs

Functions

Variables


Typedef Documentation

typedef aabb<double,3> aabb3

Definition at line 16 of file ssi_def.hpp.

typedef unsigned short coord_t

Definition at line 21 of file ssi_def.hpp.

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.

typedef igraph graph_t

Definition at line 18 of file ssi_def.hpp.

typedef Interval<double,3> interval

Definition at line 13 of file ssi_def.hpp.

typedef std::list< ppair_t > links_t

Definition at line 191 of file ssi_dsearch.hpp.

typedef std::list< point2 > list2_t

Definition at line 14 of file ssi_dsearch.hpp.

typedef std::list< point3 > list3_t

Definition at line 15 of file ssi_dsearch.hpp.

typedef lrnode* lrtree

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.

typedef vector2 point2

Definition at line 20 of file ssi_def.hpp.

typedef vector3 point3

Definition at line 19 of file ssi_def.hpp.

typedef std::pair<pdpoint_t*,pdpoint_t*> ppair_t

Definition at line 190 of file ssi_dsearch.hpp.

typedef pset_t::iterator pset_iterator

Definition at line 212 of file ssi_dsearch.hpp.

typedef std::set< assoc_t< pdpoint_t > , assoc_t<pdpoint_t>::pair_cmp > pset_t

Definition at line 182 of file ssi_dsearch.hpp.

typedef qnode* qtree

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.

typedef fxv<double,2> vector2

Definition at line 14 of file ssi_def.hpp.

typedef fxv<double,3> vector3

Definition at line 15 of file ssi_def.hpp.

typedef fxv<double,4> vector4

Definition at line 17 of file ssi_def.hpp.


Function Documentation

void mmx::shape_ssi::_link ( DPoint *  a,
DPoint *  b 
) [inline]

Definition at line 136 of file ssi_dsearch.hpp.

References append(), curve(), isfirst(), islast(), prepend(), and reverse().

Referenced by link().

    {
      if ( islast(a)   ) 
        {
          if( islast(b) )
            reverse(curve(b));
          // last a + first b
          append(curve(a),curve(b));
        }
      else
        {
          if ( isfirst(b) )
            reverse(curve(b));
          // last b + first a
          prepend(curve(a),curve(b));
        };
    };
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]

Definition at line 196 of file ssi_dsearch.hpp.

Referenced by search().

{ h.push(a); };
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().

{ return cpair_t(curve(ass.pp.first),curve(ass.pp.second)); };
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]

Definition at line 31 of file ssi_def.hpp.

References mmx::fill().

                                                                     { fill(box,p0,p1,p2,p3); };
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().

{ return  isfirst(p) || islast(p); };
bool mmx::shape_ssi::isextrem ( sdpoint_t *  p) [inline]

Definition at line 125 of file ssi_dsearch.hpp.

References isfirst(), and islast().

{ return  isfirst(p) || islast(p); };
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.

{ return curve(p)->left.begin() == p->ref || curve(p)->right.begin() == p->ref; };
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().

{ return (--(curve(p)->left.end())) == p->idl; };
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.

{ return (--(curve(p)->left.end())) == p->ref ||(--(curve(p)->right.end())) == p->ref;};
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().

    { return p->ref == curve(p)->right.begin() || p->ref == --(curve(p)->right.end());};
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); };
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 
)

Definition at line 92 of file ssi_dsearch_dcurve.cpp.

References _link(), curve(), isright(), and swap().

  {
    if ( isright(a) ) swap(curve(a));
    if ( isright(b) ) swap(curve(b));
    _link(a,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().

Referenced by make(), and search().

{     
  if ( last-first >= 1 ) {
    if ( last-first > 1 ) { 
      unsigned m = (last-first)>>1;
      std::nth_element(first, first+m,last,f);
      return new sdknode( first+m, 
                          make( first, first + m, f.next()), 
                          make( first+m+1, last,  f.next()) ); }
    else { return new sdknode(first,0,0); };};
  return 0; 
};
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().

{     
  if ( last-first >= 1 ) {
    if ( last-first > 1 ) { 
      unsigned m = (last-first)>>1;
      std::nth_element(first, first+m,last,f);
      return new pdknode( *(first+m), 
                          make( first, first + m, f.next()), 
                          make( first+m+1, last,  f.next()) ); }
    else { return new pdknode(*first,0,0); };};
  return 0; 
};
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 
)

Definition at line 118 of file ssi_qsegment.cpp.

References qnode::l, and qnode::r.

  {
    o << *q << std::endl;
    if ( q->r) print( o, q->r );
    if ( q->l ) print( o, q->l );
  };
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(); };
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 
)

Definition at line 7 of file ssi_dsearch_build.cpp.

References make(), and search().

{
  sdknode* root;
  root = make(first,last,dim_cmp<sdpoint_t>());
  for ( sdpoint_t * p = first; p < last; p++ )
    search(c,root,p,0,epsilonn);
  delete root;
};
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().

{
  qnode * tmp = start;
  do { tmp=tmp->father; } while(tmp && !inside(u,v,tmp) );
  if ( !tmp ) return 0;
  while(1){ 
    if ( leaf(tmp) ) return tmp;
    if ( inside(u,v,tmp->l) ) { tmp = tmp->l; continue; };
    if ( inside(u,v,tmp->r) ) { tmp = tmp->r; continue; };
    return 0;
  };
};
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.

References make(), and search().

{
  pdknode* root;
  pdpoint_t ** tmp = new pdpoint_t*[last-first];
  int i;
  for ( i = 0; i < last-first; i++ )
    tmp[i] = first + i;
  root = make(tmp,tmp + (last-first),dim_cmp<pdpoint_t>());
  delete[] tmp;
  for ( pdpoint_t * p = first; p < last; p++ )
    search(c,root,p,0,epsilonn);
  delete root;
};
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().

    {
      pdpoint_t * a = sibble(ass.pp.first);
      pdpoint_t * b = sibble(ass.pp.second);
      if ( a < b )
        return pdassc_t(a,b,0);
      else 
        return pdassc_t(b,a,0);
    };
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.

    {
      
      while( !h.empty() )
        {
          pdassc_t a = h.top();
          
          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 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]

Definition at line 36 of file ssi_qnode.hpp.

References du(), and dv().

{ return du(q)==1 && dv(q) == 1; };
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; };

Variable Documentation

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.