include/shape/ssi/ssi_vcode.hpp File Reference

#include <shape/ssi/ssi_bin_pack.hpp>

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 (  )     (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)>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&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])
#define xv   (p01[0]-p00[0])
#define xv   (p01[0]-p00[0])
#define xv   (p01[0]-p00[0])

Referenced by vcode().

#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&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])
#define yu   (p10[1]-p00[1])
#define yu   (p10[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 yv   (p01[1]-p00[1])

Referenced by vcode().

#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&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])
#define zu   (p10[2]-p00[2])
#define zu   (p10[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 zv   (p01[2]-p00[2])

Referenced by vcode().

#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< C, V >::addneighbors().

00182 {
00183   return false;
00184   #define XY_MASK (X_MASK|Y_MASK|NZ_MASK)
00185   #define YZ_MASK (Y_MASK|Z_MASK|NX_MASK)
00186   #define ZX_MASK (Z_MASK|X_MASK|NY_MASK)
00187   
00188   #define XNZ_MASK (X_MASK|NZ_MASK)
00189   #define XNY_MASK (X_MASK|NY_MASK)
00190   #define YNZ_MASK (Y_MASK|NZ_MASK)
00191   #define YNX_MASK (Y_MASK|NX_MASK)
00192   #define ZNX_MASK (Z_MASK|NX_MASK)
00193   #define ZNY_MASK (Z_MASK|NY_MASK)
00194   
00195   unsigned denom = c0 & c1;
00196   #define CLASSIC
00197   #ifdef CLASSIC
00198   if ( denom )
00199     {
00200       return 
00201         ( (denom & XY_MASK) == (c0 & XY_MASK) )  ||
00202         ( (denom & YZ_MASK) == (c0 & YZ_MASK) )  ||
00203         ( (denom & ZX_MASK) == (c0 & ZX_MASK) ); 
00204     };
00205   #else
00206   if ( denom )
00207     {
00208       return 
00209         ((denom & X_MASK) && ( ((denom & XNZ_MASK) == (c0 & XNZ_MASK))    ||
00210                                ((denom & XNY_MASK) == (c0 & XNY_MASK)) )) ||
00211         ((denom & Y_MASK) && ( ((denom & YNZ_MASK) == (c0 & YNZ_MASK))    ||
00212                                ((denom & YNX_MASK) == (c0 & YNX_MASK)) )) ||
00213         ((denom & Z_MASK) && ( ((denom & ZNY_MASK) == (c0 & ZNY_MASK))    ||
00214                                ((denom & ZNX_MASK) == (c0 & ZNX_MASK)) ));
00215         
00216         
00217         
00218 
00219     }
00220   #endif
00221   return false;
00222   
00223 };

vcode_t vcode ( Pt &  n00,
Pt &  n10,
Pt &  n01,
const K &  p00,
const K &  p10,
const K &  p01 
) [inline]

Definition at line 142 of file ssi_vcode.hpp.

00143 {
00144 #define xu (p10[0]-p00[0])
00145 #define xv (p01[0]-p00[0])
00146 #define yu (p10[1]-p00[1])
00147 #define yv (p01[1]-p00[1])
00148 #define zu (p10[2]-p00[2])
00149 #define zv (p01[2]-p00[2])
00150   unsigned code = 0;
00151 
00152   for ( unsigned i = 0; i < 3; i++ )
00153     {
00154       code |= (n10[i] > n00[i]-1e-6);
00155       code <<= 1;
00156       //      code |= (n10[i]-1e-6 < n00[i]);
00157       //      code <<= 1;
00158       code |= (n01[i] > n00[i]-1e-6);
00159       code <<= 1;
00160       //      code |= (n01[i]-1e-6 < n00[i]);
00161       //      code <<= 1;
00162     };
00163   
00164   for ( unsigned i = 0; i < 3; i++ )
00165     {
00166       code |= (p10[i] > p00[i]);
00167       code <<= 1;
00168       //      code |= (p10[i] < p00[i]);
00169       //      code <<= 1;
00170       //      code |= (p01[i] > p00[i]);
00171       //      code <<= 1;
00172       code |= (p01[i] < p00[i]);
00173       code <<= 1;
00174     };
00175 
00176   return code;
00177 };

vcode_t vcode ( Pt &  n,
const K &  p00,
const K &  p10,
const K &  p01 
) [inline]

Definition at line 92 of file ssi_vcode.hpp.

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

00093 {
00094 #define xu (p10[0]-p00[0])
00095 #define xv (p01[0]-p00[0])
00096 #define yu (p10[1]-p00[1])
00097 #define yv (p01[1]-p00[1])
00098 #define zu (p10[2]-p00[2])
00099 #define zv (p01[2]-p00[2])
00100   unsigned code = 0;
00101 
00102   // NX
00103   n[0]  = yu*zv-yv*zu;
00104   code |= (n[0]>0);
00105   code <<=1;
00106   code |= (n[0]<0);
00107   code <<=1;
00108 
00109 
00110   // NY
00111   n[1]  = zu*xv-xu*zv;
00112   code |= (n[1]>0);
00113   code <<=1;  
00114   code |= (n[1]<0);
00115   code <<=1;
00116 
00117   // NZ 
00118   n[2] = xu*yv-xv*yu;
00119   code |= (n[2]>0);
00120   code <<=1;
00121   code |= (n[2]<0);
00122   code <<=1;
00123   
00124   for ( unsigned i = 0; i < 3; i++ )
00125     {
00126       code |= (p10[i] > p00[i]);
00127       code <<= 1;
00128       code |= (p10[i] < p00[i]);
00129       code <<= 1;
00130       code |= (p01[i] > p00[i]);
00131       code <<= 1;
00132       code |= (p01[i] < p00[i]);
00133       code <<= 1;
00134     };
00135 
00136   return code;
00137 };

vcode_t vcode ( const K &  p00,
const K &  p10,
const K &  p01 
) [inline]

Definition at line 25 of file ssi_vcode.hpp.

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

Referenced by lsegment< C, V >::lines_changes().

00026 {
00027 #define xu (p10[0]-p00[0])
00028 #define xv (p01[0]-p00[0])
00029 #define yu (p10[1]-p00[1])
00030 #define yv (p01[1]-p00[1])
00031 #define zu (p10[2]-p00[2])
00032 #define zv (p01[2]-p00[2])
00033   unsigned code = 0;
00034 
00035   // NX
00036   double nx,ny,nz;
00037   //  double anx,any,anz;
00038   nx = yu*zv - yv*zu;
00039   ny = xu*zv - xv*zu;
00040   nz = xu*yv - xv*yu;
00041 
00042   code |= nx > 0;
00043   code <<= 1;
00044   code |= ny > 0;
00045   code <<= 1;
00046   code |= nz > 0;
00047   code <<= 1;
00048   
00049   for ( unsigned i = 0; i < 3; i++ )
00050     {
00051       code |= gt(p10[i],p00[i]);
00052       code <<= 1;
00053       code |= lt(p10[i],p00[i]);
00054       code <<= 1;
00055       code |= gt(p01[i],p00[i]);
00056       code <<= 1;
00057       code |= lt(p01[i],p00[i]);
00058       code <<= 1;
00059     };
00060 
00061   return code;
00062 };

vcode_t vcode2 ( const K &  p00,
const K &  p10,
const K &  p01 
) [inline]

Definition at line 66 of file ssi_vcode.hpp.

00067 {
00068 #define xu (p10[0]-p00[0])
00069 #define xv (p01[0]-p00[0])
00070 #define yu (p10[1]-p00[1])
00071 #define yv (p01[1]-p00[1])
00072 #define zu (p10[2]-p00[2])
00073 #define zv (p01[2]-p00[2])
00074   unsigned code = 0;
00075 
00076   for ( unsigned i = 0; i < 3; i++ )
00077     {
00078       code |= (p10[i] > 0);
00079       code <<= 1;
00080       code |= (p01[i] > 0);
00081       code <<= 1;
00082       code |= (p00[i] > 0);
00083       code <<= 1;
00084     };
00085 
00086   return code;
00087 };


Generated on 6 Dec 2012 for shape by  doxygen 1.6.1