include/shape/ssi/ssi_vcode.hpp File Reference
#include <shape/ssi/ssi_bin_pack.hpp>
Go to the source code of this file.
Defines
- #define xcode(c) ((c&0xf00000) >> 20)
- #define ycode(c) ((c&0x00f000) >> 12)
- #define zcode(c) ((c&0x0000f0) >> 4)
- #define Z_MASK 0xf
- #define Y_MASK (Z_MASK<<4)
- #define X_MASK (Y_MASK<<4)
- #define NZ_MASK (3 << 12)
- #define NY_MASK (NZ_MASK << 2)
- #define NX_MASK (NY_MASK << 2)
- #define EPS 1e-12
- #define gt(a, b) ((a)>(b)+EPS)
- #define lt(a, b) ((b)>(a)+EPS)
- #define ps(a) ((a)>EPS)
- #define ng(a) (EPS>(a));
- #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])
- #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])
- #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])
- #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])
- #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)
- #define CLASSIC
Typedefs
Functions
- template<class K > vcode_t vcode (const K &p00, const K &p10, const K &p01)
- template<class K > vcode_t vcode2 (const K &p00, const K &p10, const K &p01)
- template<class Pt , class K > vcode_t vcode (Pt &n, const K &p00, const K &p10, const K &p01)
- template<class Pt , class K > vcode_t vcode (Pt &n00, Pt &n10, Pt &n01, const K &p00, const K &p10, const K &p01)
- bool coherent_code (vcode_t c0, vcode_t c1)
Define Documentation
#define gt |
( |
a, |
|
|
b |
|
) |
((a)>(b)+EPS) |
#define lt |
( |
a, |
|
|
b |
|
) |
((b)>(a)+EPS) |
#define ng |
( |
a |
|
) |
(EPS>(a)); |
#define NX_MASK (NY_MASK << 2) |
#define NY_MASK (NZ_MASK << 2) |
#define NZ_MASK (3 << 12) |
#define ps |
( |
a |
|
) |
((a)>EPS) |
#define X_MASK (Y_MASK<<4) |
#define xcode |
( |
c |
|
) |
((c&0xf00000) >> 20) |
#define XNY_MASK (X_MASK|NY_MASK) |
#define XNZ_MASK (X_MASK|NZ_MASK) |
#define xu (p10[0]-p00[0]) |
#define xu (p10[0]-p00[0]) |
#define xu (p10[0]-p00[0]) |
#define xu (p10[0]-p00[0]) |
#define xv (p01[0]-p00[0]) |
#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) |
#define Y_MASK (Z_MASK<<4) |
#define ycode |
( |
c |
|
) |
((c&0x00f000) >> 12) |
#define YNX_MASK (Y_MASK|NX_MASK) |
#define YNZ_MASK (Y_MASK|NZ_MASK) |
#define yu (p10[1]-p00[1]) |
#define yu (p10[1]-p00[1]) |
#define yu (p10[1]-p00[1]) |
#define yu (p10[1]-p00[1]) |
#define yv (p01[1]-p00[1]) |
#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) |
#define zcode |
( |
c |
|
) |
((c&0x0000f0) >> 4) |
#define ZNX_MASK (Z_MASK|NX_MASK) |
#define ZNY_MASK (Z_MASK|NY_MASK) |
#define zu (p10[2]-p00[2]) |
#define zu (p10[2]-p00[2]) |
#define zu (p10[2]-p00[2]) |
#define zu (p10[2]-p00[2]) |
#define zv (p01[2]-p00[2]) |
#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) |
Typedef Documentation
Function Documentation
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
00157
00158 code |= (n01[i] > n00[i]-1e-6);
00159 code <<= 1;
00160
00161
00162 };
00163
00164 for ( unsigned i = 0; i < 3; i++ )
00165 {
00166 code |= (p10[i] > p00[i]);
00167 code <<= 1;
00168
00169
00170
00171
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
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
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
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
00036 double nx,ny,nz;
00037
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 };