36 #ifndef VIGRA_VOXELNEIGHBORHOOD_HXX
37 #define VIGRA_VOXELNEIGHBORHOOD_HXX
39 #include "tinyvector.hxx"
40 #include "pixelneighborhood.hxx"
84 return static_cast<AtVolumeBorder>((x == 0
114 return static_cast<AtVolumeBorder>((x == 0
136 return static_cast<AtVolumeBorder>((x == 0
158 namespace Neighborhood3DSix
181 CausalFirst = InFront,
184 AntiCausalLast =
East,
186 InitialDirection = InFront,
187 OppositeDirPrefix = 1,
194 static unsigned int b[];
195 static unsigned int c[];
202 static unsigned int directionBit(
Direction d)
204 return StaticData<0>::b[d];
212 return StaticData<0>::c[b];
220 return StaticData<0>::bd[b][index];
231 return StaticData<0>::bc[b][index];
239 return StaticData<0>::d[
code];
256 return StaticData<0>::rd[fromCode][toCode];
264 return relativeDiff(static_cast<Direction>(fromCode), static_cast<Direction>(toCode));
303 return (
diff[2] == 0) ? South : Error;
305 return (
diff[2] == 0) ? North : Error;
311 return ((
diff[1] == 0) && (
diff[2] == 0)) ? West : Error;
313 return ((
diff[1] == 0) && (
diff[2] == 0)) ? East : Error;
354 unsigned int NeighborCode3D::StaticData<DUMMY>::b[] = {
364 unsigned int NeighborCode3D::StaticData<DUMMY>::c[] = {
365 6, 5, 5, 0, 5, 4, 4, 0, 5, 4,
366 4, 0, 0, 0, 0, 0, 5, 4, 4, 0,
367 4, 3, 3, 0, 4, 3, 3, 0, 0, 0,
368 0, 0, 5, 4, 4, 0, 4, 3, 3, 0,
372 Direction NeighborCode3D::StaticData<DUMMY>::bd[43][6] = {
376 { Error, Error, Error, Error, Error, Error},
380 { Error, Error, Error, Error, Error, Error},
384 { Error, Error, Error, Error, Error, Error},
385 { Error, Error, Error, Error, Error, Error},
386 { Error, Error, Error, Error, Error, Error},
387 { Error, Error, Error, Error, Error, Error},
388 { Error, Error, Error, Error, Error, Error},
392 { Error, Error, Error, Error, Error, Error},
396 { Error, Error, Error, Error, Error, Error},
400 { Error, Error, Error, Error, Error, Error},
401 { Error, Error, Error, Error, Error, Error},
402 { Error, Error, Error, Error, Error, Error},
403 { Error, Error, Error, Error, Error, Error},
404 { Error, Error, Error, Error, Error, Error},
408 { Error, Error, Error, Error, Error, Error},
412 { Error, Error, Error, Error, Error, Error},
419 Direction NeighborCode3D::StaticData<DUMMY>::bc[43][4] = {
423 { Error, Error, Error, Error},
426 {
InFront, Error,Error, Error},
427 { Error, Error, Error, Error},
431 { Error, Error, Error, Error},
432 { Error, Error, Error, Error},
433 { Error, Error, Error, Error},
434 { Error, Error, Error, Error},
435 { Error, Error, Error, Error},
438 {
North, Error, Error, Error},
439 { Error, Error, Error, Error},
440 {
West, Error, Error, Error},
441 {
West, Error, Error, Error},
442 { Error, Error, Error, Error},
443 { Error, Error, Error, Error},
446 {
North, Error, Error, Error},
447 { Error, Error, Error, Error},
448 { Error, Error, Error, Error},
449 { Error, Error, Error, Error},
450 { Error, Error, Error, Error},
451 { Error, Error, Error, Error},
455 { Error, Error, Error, Error},
458 {
InFront, Error, Error, Error},
459 { Error, Error, Error, Error},
466 Diff3D NeighborCode3D::StaticData<DUMMY>::d[] = {
476 Diff3D NeighborCode3D::StaticData<DUMMY>::rd[][6] = {
478 {
Diff3D( 0, 0, 0),
Diff3D(0, -1, 1),
Diff3D(-1, 0, 1),
Diff3D( 0, 0, 2),
Diff3D( 0, 1, 1),
Diff3D( 1, 0, 1)},
479 {
Diff3D( 0, 1,-1),
Diff3D( 0, 0, 0),
Diff3D(-1, 1, 0),
Diff3D( 0, 1, 1),
Diff3D( 0, 2, 0),
Diff3D( 1, 1, 0)},
480 {
Diff3D( 1, 0,-1),
Diff3D( 1,-1, 0),
Diff3D( 0, 0, 0),
Diff3D( 1, 0, 1),
Diff3D( 1, 1, 0),
Diff3D( 2, 0, 0)},
481 {
Diff3D( 0, 0,-2),
Diff3D( 0,-1,-1),
Diff3D(-1, 0,-1),
Diff3D( 0, 0, 0),
Diff3D( 0, 1,-1),
Diff3D( 1, 0,-1)},
482 {
Diff3D( 0,-1,-1),
Diff3D( 0,-2, 0),
Diff3D(-1,-1, 0),
Diff3D( 0,-1, 1),
Diff3D( 0, 0, 0),
Diff3D( 1,-1, 0)},
483 {
Diff3D(-1, 0,-1),
Diff3D(-1,-1, 0),
Diff3D(-2, 0, 0),
Diff3D(-1, 0, 1),
Diff3D(-1, 1, 0),
Diff3D( 0, 0, 0) }
498 namespace Neighborhood3DTwentySix
514 InFrontNorthWest = 0,
544 CausalFirst = InFrontNorthWest,
547 AntiCausalLast = East,
549 InitialDirection = InFrontNorthWest,
550 OppositeDirPrefix = -1,
557 static unsigned int b[];
558 static unsigned int c[];
564 static unsigned int directionBit(
Direction d)
566 return StaticData<0>::b[d];
575 return StaticData<0>::c[b];
583 return StaticData<0>::bd[b][index];
594 return StaticData<0>::bc[b][index];
602 return StaticData<0>::d[
code];
661 return relativeDiff(static_cast<Direction>(fromCode), static_cast<Direction>(toCode));
696 vigra_fail(
"NeighborCode3D::code(): Internal error -- invalid direction code.");
712 case -1:
return InFrontNorthWest;
713 case 0:
return NorthWest;
714 case 1:
return BehindNorthWest;
718 case -1:
return InFrontWest;
720 case 1:
return BehindWest;
724 case -1:
return InFrontSouthWest;
725 case 0:
return SouthWest;
726 case 1:
return BehindSouthWest;
733 case -1:
return InFrontNorth;
734 case 0:
return North;
735 case 1:
return BehindNorth;
739 case -1:
return InFront;
740 case 1:
return Behind;
744 case -1:
return InFrontSouth;
745 case 0:
return South;
746 case 1:
return BehindSouth;
753 case -1:
return InFrontNorthEast;
754 case 0:
return NorthEast;
755 case 1:
return BehindNorthEast;
759 case -1:
return InFrontEast;
761 case 1:
return BehindEast;
765 case -1:
return InFrontSouthEast;
766 case 0:
return SouthEast;
767 case 1:
return BehindSouthEast;
884 unsigned int NeighborCode3D::StaticData<DUMMY>::b[] = {
916 unsigned int NeighborCode3D::StaticData<DUMMY>::c[] = {
917 26, 17, 17, 0, 17, 11, 11, 0, 17, 11,
918 11, 0, 0, 0, 0, 0, 17, 11, 11, 0,
919 11, 7, 7, 0, 11, 7, 7, 0, 0, 0,
920 0, 0, 17, 11, 11, 0, 11, 7, 7, 0,
924 Direction NeighborCode3D::StaticData<DUMMY>::bd[43][26] = {
949 Error, Error, Error, Error, Error, Error, Error, Error, Error},
962 Error, Error, Error, Error, Error, Error, Error, Error, Error},
964 { Error, Error, Error, Error, Error, Error, Error, Error, Error,
965 Error, Error, Error, Error, Error, Error, Error, Error,
966 Error, Error, Error, Error, Error, Error, Error, Error, Error},
979 Error, Error, Error, Error, Error, Error, Error, Error, Error},
992 Error, Error, Error, Error, Error, Error, Error, Error, Error,
993 Error, Error, Error, Error, Error, Error},
1006 Error, Error, Error, Error, Error, Error, Error, Error, Error,
1007 Error, Error, Error, Error, Error, Error},
1009 { Error, Error, Error, Error, Error, Error, Error, Error, Error,
1010 Error, Error, Error, Error, Error, Error, Error, Error,
1011 Error, Error, Error, Error, Error, Error, Error, Error, Error},
1024 Error, Error, Error, Error, Error, Error, Error, Error, Error},
1037 Error, Error, Error, Error, Error, Error, Error, Error, Error,
1038 Error, Error, Error, Error, Error, Error},
1051 Error, Error, Error, Error, Error, Error, Error, Error, Error,
1052 Error, Error, Error, Error, Error, Error},
1054 { Error, Error, Error, Error, Error, Error, Error, Error, Error,
1055 Error, Error, Error, Error, Error, Error, Error, Error,
1056 Error, Error, Error, Error, Error, Error, Error, Error, Error},
1058 { Error, Error, Error, Error, Error, Error, Error, Error, Error,
1059 Error, Error, Error, Error, Error, Error, Error, Error,
1060 Error, Error, Error, Error, Error, Error, Error, Error, Error},
1062 { Error, Error, Error, Error, Error, Error, Error, Error, Error,
1063 Error, Error, Error, Error, Error, Error, Error, Error,
1064 Error, Error, Error, Error, Error, Error, Error, Error, Error},
1066 { Error, Error, Error, Error, Error, Error, Error, Error, Error,
1067 Error, Error, Error, Error, Error, Error, Error, Error,
1068 Error, Error, Error, Error, Error, Error, Error, Error, Error},
1070 { Error, Error, Error, Error, Error, Error, Error, Error, Error,
1071 Error, Error, Error, Error, Error, Error, Error, Error,
1072 Error, Error, Error, Error, Error, Error, Error, Error, Error},
1085 Error, Error, Error, Error, Error, Error, Error, Error, Error},
1098 Error, Error, Error, Error, Error, Error, Error, Error, Error,
1099 Error, Error, Error, Error, Error, Error},
1112 Error, Error, Error, Error, Error, Error, Error, Error, Error,
1113 Error, Error, Error, Error, Error, Error},
1115 { Error, Error, Error, Error, Error, Error, Error, Error, Error,
1116 Error, Error, Error, Error, Error, Error, Error, Error,
1117 Error, Error, Error, Error, Error, Error, Error, Error, Error},
1130 Error, Error, Error, Error, Error, Error, Error, Error, Error,
1131 Error, Error, Error, Error, Error, Error},
1144 Error, Error, Error, Error, Error, Error, Error, Error, Error,
1145 Error, Error, Error, Error, Error, Error,
1146 Error, Error, Error, Error},
1159 Error, Error, Error, Error, Error, Error, Error, Error, Error,
1160 Error, Error, Error, Error, Error, Error,
1161 Error, Error, Error, Error},
1163 { Error, Error, Error, Error, Error, Error, Error, Error, Error,
1164 Error, Error, Error, Error, Error, Error, Error, Error,
1165 Error, Error, Error, Error, Error, Error, Error, Error, Error},
1178 Error, Error, Error, Error, Error, Error, Error, Error, Error,
1179 Error, Error, Error, Error, Error, Error},
1192 Error, Error, Error, Error, Error, Error, Error, Error, Error,
1193 Error, Error, Error, Error, Error, Error,
1194 Error, Error, Error, Error},
1207 Error, Error, Error, Error, Error, Error, Error, Error, Error,
1208 Error, Error, Error, Error, Error, Error,
1209 Error, Error, Error, Error},
1211 { Error, Error, Error, Error, Error, Error, Error, Error, Error,
1212 Error, Error, Error, Error, Error, Error, Error, Error,
1213 Error, Error, Error, Error, Error, Error, Error, Error, Error},
1215 { Error, Error, Error, Error, Error, Error, Error, Error, Error,
1216 Error, Error, Error, Error, Error, Error, Error, Error,
1217 Error, Error, Error, Error, Error, Error, Error, Error, Error},
1219 { Error, Error, Error, Error, Error, Error, Error, Error, Error,
1220 Error, Error, Error, Error, Error, Error, Error, Error,
1221 Error, Error, Error, Error, Error, Error, Error, Error, Error},
1223 { Error, Error, Error, Error, Error, Error, Error, Error, Error,
1224 Error, Error, Error, Error, Error, Error, Error, Error,
1225 Error, Error, Error, Error, Error, Error, Error, Error, Error},
1227 { Error, Error, Error, Error, Error, Error, Error, Error, Error,
1228 Error, Error, Error, Error, Error, Error, Error, Error,
1229 Error, Error, Error, Error, Error, Error, Error, Error, Error},
1242 Error, Error, Error, Error, Error, Error, Error, Error, Error},
1255 Error, Error, Error, Error, Error, Error, Error, Error, Error,
1256 Error, Error, Error, Error, Error, Error},
1269 Error, Error, Error, Error, Error, Error, Error, Error, Error,
1270 Error, Error, Error, Error, Error, Error},
1272 { Error, Error, Error, Error, Error, Error, Error, Error, Error,
1273 Error, Error, Error, Error, Error, Error, Error, Error,
1274 Error, Error, Error, Error, Error, Error, Error, Error, Error},
1287 Error, Error, Error, Error, Error, Error, Error, Error, Error,
1288 Error, Error, Error, Error, Error, Error},
1301 Error, Error, Error, Error, Error, Error, Error, Error, Error,
1302 Error, Error, Error, Error, Error, Error,
1303 Error, Error, Error, Error},
1316 Error, Error, Error, Error, Error, Error, Error, Error, Error,
1317 Error, Error, Error, Error, Error, Error,
1318 Error, Error, Error, Error},
1320 { Error, Error, Error, Error, Error, Error, Error, Error, Error,
1321 Error, Error, Error, Error, Error, Error, Error, Error,
1322 Error, Error, Error, Error, Error, Error, Error, Error, Error},
1335 Error, Error, Error, Error, Error, Error, Error, Error, Error,
1336 Error, Error, Error, Error, Error, Error},
1349 Error, Error, Error, Error, Error, Error, Error, Error, Error,
1350 Error, Error, Error, Error, Error, Error,
1351 Error, Error, Error, Error},
1364 Error, Error, Error, Error, Error, Error, Error, Error, Error,
1365 Error, Error, Error, Error, Error, Error,
1366 Error, Error, Error, Error}
1369 template <
int DUMMY>
1370 Direction NeighborCode3D::StaticData<DUMMY>::bc[43][13] = {
1385 Error, Error, Error, Error},
1393 Error, Error, Error, Error, Error},
1395 { Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error},
1403 Error, Error, Error, Error, Error, Error},
1411 Error, Error, Error, Error, Error, Error, Error, Error},
1419 Error, Error, Error, Error, Error, Error, Error, Error, Error},
1421 { Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error},
1429 Error, Error, Error},
1437 Error, Error, Error,Error, Error, Error},
1445 Error, Error, Error, Error, Error, Error, Error},
1447 { Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error},
1449 { Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error},
1451 { Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error},
1453 { Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error},
1455 { Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error},
1463 Error, Error, Error, Error, Error, Error, Error, Error, Error},
1471 Error, Error, Error, Error, Error, Error, Error, Error, Error, Error},
1479 Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error},
1481 { Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error},
1489 Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error},
1497 Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error},
1499 { Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error},
1501 { Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error},
1509 Error, Error, Error, Error, Error, Error, Error, Error, Error},
1517 Error, Error, Error, Error, Error, Error, Error, Error, Error, Error},
1525 Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error},
1527 { Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error},
1529 { Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error},
1531 { Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error},
1533 { Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error},
1535 { Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error},
1557 Error, Error, Error, Error, Error},
1559 { Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error},
1567 Error, Error, Error, Error, Error, Error},
1575 Error, Error, Error, Error, Error, Error, Error, Error},
1583 Error, Error, Error, Error, Error, Error, Error, Error, Error},
1585 { Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error, Error},
1607 Error, Error, Error, Error, Error, Error, Error}
1610 template <
int DUMMY>
1611 Diff3D NeighborCode3D::StaticData<DUMMY>::d[] = {