shape_doc 0.1
/Users/mourrain/Devel/mmx/shape/include/shape/ssi_vcode.hpp File Reference

Go to the source code of this file.

Defines

Typedefs

Functions


Define Documentation

#define CLASSIC
#define EPS   1e-12

Definition at line 19 of file ssi_vcode.hpp.

#define gt (   a,
 
)    ((a)>(b)+EPS)

Definition at line 20 of file ssi_vcode.hpp.

Referenced by vcode().

#define lt (   a,
 
)    ((b)>(a)+EPS)

Definition at line 21 of file ssi_vcode.hpp.

Referenced by vcode().

#define ng (   a)    (EPS>(a));

Definition at line 23 of file ssi_vcode.hpp.

#define NX_MASK   (NY_MASK << 2)

Definition at line 18 of file ssi_vcode.hpp.

#define NY_MASK   (NZ_MASK << 2)

Definition at line 17 of file ssi_vcode.hpp.

#define NZ_MASK   (3 << 12)

Definition at line 16 of file ssi_vcode.hpp.

#define ps (   a)    ((a)>EPS)

Definition at line 22 of file ssi_vcode.hpp.

#define X_MASK   (Y_MASK<<4)

Definition at line 15 of file ssi_vcode.hpp.

Referenced by coherent_code().

#define xcode (   c)    ((c&0xf00000) >> 20)

Definition at line 8 of file ssi_vcode.hpp.

#define XNY_MASK   (X_MASK|NY_MASK)

Referenced by coherent_code().

#define XNZ_MASK   (X_MASK|NZ_MASK)

Referenced by coherent_code().

#define xu   (p10[0]-p00[0])
#define xu   (p10[0]-p00[0])
#define xu   (p10[0]-p00[0])
#define xu   (p10[0]-p00[0])

Referenced by vcode().

#define xv   (p01[0]-p00[0])

Referenced by vcode().

#define xv   (p01[0]-p00[0])
#define xv   (p01[0]-p00[0])
#define xv   (p01[0]-p00[0])
#define XY_MASK   (X_MASK|Y_MASK|NZ_MASK)

Referenced by coherent_code().

#define Y_MASK   (Z_MASK<<4)

Definition at line 14 of file ssi_vcode.hpp.

Referenced by coherent_code().

#define ycode (   c)    ((c&0x00f000) >> 12)

Definition at line 9 of file ssi_vcode.hpp.

#define YNX_MASK   (Y_MASK|NX_MASK)

Referenced by coherent_code().

#define YNZ_MASK   (Y_MASK|NZ_MASK)

Referenced by coherent_code().

#define yu   (p10[1]-p00[1])
#define yu   (p10[1]-p00[1])

Referenced by vcode().

#define yu   (p10[1]-p00[1])
#define yu   (p10[1]-p00[1])
#define yv   (p01[1]-p00[1])

Referenced by vcode().

#define yv   (p01[1]-p00[1])
#define yv   (p01[1]-p00[1])
#define yv   (p01[1]-p00[1])
#define YZ_MASK   (Y_MASK|Z_MASK|NX_MASK)

Referenced by coherent_code().

#define Z_MASK   0xf

Definition at line 13 of file ssi_vcode.hpp.

Referenced by coherent_code().

#define zcode (   c)    ((c&0x0000f0) >> 4)

Definition at line 10 of file ssi_vcode.hpp.

#define ZNX_MASK   (Z_MASK|NX_MASK)

Referenced by coherent_code().

#define ZNY_MASK   (Z_MASK|NY_MASK)

Referenced by coherent_code().

#define zu   (p10[2]-p00[2])
#define zu   (p10[2]-p00[2])

Referenced by vcode().

#define zu   (p10[2]-p00[2])
#define zu   (p10[2]-p00[2])
#define zv   (p01[2]-p00[2])

Referenced by vcode().

#define zv   (p01[2]-p00[2])
#define zv   (p01[2]-p00[2])
#define zv   (p01[2]-p00[2])
#define ZX_MASK   (Z_MASK|X_MASK|NY_MASK)

Referenced by coherent_code().


Typedef Documentation

typedef unsigned vcode_t

Definition at line 5 of file ssi_vcode.hpp.


Function Documentation

bool coherent_code ( vcode_t  c0,
vcode_t  c1 
) [inline]

Definition at line 181 of file ssi_vcode.hpp.

References X_MASK, XNY_MASK, XNZ_MASK, XY_MASK, Y_MASK, YNX_MASK, YNZ_MASK, YZ_MASK, Z_MASK, ZNX_MASK, ZNY_MASK, and ZX_MASK.

Referenced by lsegment::addneighbors().

{
  return false;
  #define XY_MASK (X_MASK|Y_MASK|NZ_MASK)
  #define YZ_MASK (Y_MASK|Z_MASK|NX_MASK)
  #define ZX_MASK (Z_MASK|X_MASK|NY_MASK)
  
  #define XNZ_MASK (X_MASK|NZ_MASK)
  #define XNY_MASK (X_MASK|NY_MASK)
  #define YNZ_MASK (Y_MASK|NZ_MASK)
  #define YNX_MASK (Y_MASK|NX_MASK)
  #define ZNX_MASK (Z_MASK|NX_MASK)
  #define ZNY_MASK (Z_MASK|NY_MASK)
  
  unsigned denom = c0 & c1;
  #define CLASSIC
  #ifdef CLASSIC
  if ( denom )
    {
      return 
        ( (denom & XY_MASK) == (c0 & XY_MASK) )  ||
        ( (denom & YZ_MASK) == (c0 & YZ_MASK) )  ||
        ( (denom & ZX_MASK) == (c0 & ZX_MASK) ); 
    };
  #else
  if ( denom )
    {
      return 
        ((denom & X_MASK) && ( ((denom & XNZ_MASK) == (c0 & XNZ_MASK))    ||
                               ((denom & XNY_MASK) == (c0 & XNY_MASK)) )) ||
        ((denom & Y_MASK) && ( ((denom & YNZ_MASK) == (c0 & YNZ_MASK))    ||
                               ((denom & YNX_MASK) == (c0 & YNX_MASK)) )) ||
        ((denom & Z_MASK) && ( ((denom & ZNY_MASK) == (c0 & ZNY_MASK))    ||
                               ((denom & ZNX_MASK) == (c0 & ZNX_MASK)) ));
        
        
        

    }
  #endif
  return false;
  
};
vcode_t vcode ( Pt &  n00,
Pt &  n10,
Pt &  n01,
const K &  p00,
const K &  p10,
const K &  p01 
)

Definition at line 142 of file ssi_vcode.hpp.

{
#define xu (p10[0]-p00[0])
#define xv (p01[0]-p00[0])
#define yu (p10[1]-p00[1])
#define yv (p01[1]-p00[1])
#define zu (p10[2]-p00[2])
#define zv (p01[2]-p00[2])
  unsigned code = 0;

  for ( unsigned i = 0; i < 3; i++ )
    {
      code |= (n10[i] > n00[i]-1e-6);
      code <<= 1;
      //      code |= (n10[i]-1e-6 < n00[i]);
      //      code <<= 1;
      code |= (n01[i] > n00[i]-1e-6);
      code <<= 1;
      //      code |= (n01[i]-1e-6 < n00[i]);
      //      code <<= 1;
    };
  
  for ( unsigned i = 0; i < 3; i++ )
    {
      code |= (p10[i] > p00[i]);
      code <<= 1;
      //      code |= (p10[i] < p00[i]);
      //      code <<= 1;
      //      code |= (p01[i] > p00[i]);
      //      code <<= 1;
      code |= (p01[i] < p00[i]);
      code <<= 1;
    };

  return code;
};
vcode_t vcode ( const K &  p00,
const K &  p10,
const K &  p01 
)

Definition at line 25 of file ssi_vcode.hpp.

References gt, lt, xu, xv, yu, yv, zu, and zv.

Referenced by lsegment::lines_changes().

{
#define xu (p10[0]-p00[0])
#define xv (p01[0]-p00[0])
#define yu (p10[1]-p00[1])
#define yv (p01[1]-p00[1])
#define zu (p10[2]-p00[2])
#define zv (p01[2]-p00[2])
  unsigned code = 0;

  // NX
  double nx,ny,nz;
  //  double anx,any,anz;
  nx = yu*zv - yv*zu;
  ny = xu*zv - xv*zu;
  nz = xu*yv - xv*yu;

  code |= nx > 0;
  code <<= 1;
  code |= ny > 0;
  code <<= 1;
  code |= nz > 0;
  code <<= 1;
  
  for ( unsigned i = 0; i < 3; i++ )
    {
      code |= gt(p10[i],p00[i]);
      code <<= 1;
      code |= lt(p10[i],p00[i]);
      code <<= 1;
      code |= gt(p01[i],p00[i]);
      code <<= 1;
      code |= lt(p01[i],p00[i]);
      code <<= 1;
    };

  return code;
};
vcode_t vcode ( Pt &  n,
const K &  p00,
const K &  p10,
const K &  p01 
)

Definition at line 92 of file ssi_vcode.hpp.

References xu, xv, yu, yv, zu, and zv.

{
#define xu (p10[0]-p00[0])
#define xv (p01[0]-p00[0])
#define yu (p10[1]-p00[1])
#define yv (p01[1]-p00[1])
#define zu (p10[2]-p00[2])
#define zv (p01[2]-p00[2])
  unsigned code = 0;

  // NX
  n[0]  = yu*zv-yv*zu;
  code |= (n[0]>0);
  code <<=1;
  code |= (n[0]<0);
  code <<=1;


  // NY
  n[1]  = zu*xv-xu*zv;
  code |= (n[1]>0);
  code <<=1;  
  code |= (n[1]<0);
  code <<=1;

  // NZ 
  n[2] = xu*yv-xv*yu;
  code |= (n[2]>0);
  code <<=1;
  code |= (n[2]<0);
  code <<=1;
  
  for ( unsigned i = 0; i < 3; i++ )
    {
      code |= (p10[i] > p00[i]);
      code <<= 1;
      code |= (p10[i] < p00[i]);
      code <<= 1;
      code |= (p01[i] > p00[i]);
      code <<= 1;
      code |= (p01[i] < p00[i]);
      code <<= 1;
    };

  return code;
};
vcode_t vcode2 ( const K &  p00,
const K &  p10,
const K &  p01 
)

Definition at line 66 of file ssi_vcode.hpp.

{
#define xu (p10[0]-p00[0])
#define xv (p01[0]-p00[0])
#define yu (p10[1]-p00[1])
#define yv (p01[1]-p00[1])
#define zu (p10[2]-p00[2])
#define zv (p01[2]-p00[2])
  unsigned code = 0;

  for ( unsigned i = 0; i < 3; i++ )
    {
      code |= (p10[i] > 0);
      code <<= 1;
      code |= (p01[i] > 0);
      code <<= 1;
      code |= (p00[i] > 0);
      code <<= 1;
    };

  return code;
};