29 #ifndef MARCHING_CUBES_INCLUDED 30 #define MARCHING_CUBES_INCLUDED 31 #include <pcl/pcl_macros.h> 44 enum { CORNERS=4,EDGES=4,NEIGHBORS=4 };
45 static int CornerIndex (
int x,
int y);
46 static int AntipodalCornerIndex(
int idx);
47 static void FactorCornerIndex (
int idx,
int& x,
int& y);
48 static int EdgeIndex (
int orientation,
int i);
49 static void FactorEdgeIndex (
int idx,
int& orientation,
int& i);
51 static int ReflectCornerIndex (
int idx,
int edgeIndex);
52 static int ReflectEdgeIndex (
int idx,
int edgeIndex);
54 static void EdgeCorners(
int idx,
int& c1,
int &c2);
60 enum { CORNERS=8,EDGES=12,NEIGHBORS=6 };
62 static int CornerIndex (
int x,
int y,
int z);
63 static void FactorCornerIndex (
int idx,
int& x,
int& y,
int& z);
64 static int EdgeIndex (
int orientation,
int i,
int j);
65 static void FactorEdgeIndex (
int idx,
int& orientation,
int& i,
int &j);
66 static int FaceIndex (
int dir,
int offSet);
67 static int FaceIndex (
int x,
int y,
int z);
68 static void FactorFaceIndex (
int idx,
int& x,
int &y,
int& z);
69 static void FactorFaceIndex (
int idx,
int& dir,
int& offSet);
71 static int AntipodalCornerIndex (
int idx);
72 static int FaceReflectCornerIndex (
int idx,
int faceIndex);
73 static int FaceReflectEdgeIndex (
int idx,
int faceIndex);
74 static int FaceReflectFaceIndex (
int idx,
int faceIndex);
75 static int EdgeReflectCornerIndex (
int idx,
int edgeIndex);
76 static int EdgeReflectEdgeIndex (
int edgeIndex);
78 static int FaceAdjacentToEdges (
int eIndex1,
int eIndex2);
79 static void FacesAdjacentToEdge (
int eIndex,
int& f1Index,
int& f2Index);
81 static void EdgeCorners(
int idx,
int& c1,
int &c2);
82 static void FaceCorners(
int idx,
int& c1,
int &c2,
int& c3,
int& c4);
87 static double Interpolate(
double v1,
double v2);
88 static void SetVertex(
int e,
const double values[
Square::CORNERS],
double iso);
91 static const int* edgeMask();
92 static int edges(
int i,
int j);
93 static double& vertexList(
int i,
int j);
95 static int GetIndex(
const double values[Square::CORNERS],
double iso);
96 static int IsAmbiguous(
const double v[Square::CORNERS],
double isoValue);
97 static int AddEdges(
const double v[Square::CORNERS],
double isoValue,
Edge* edges);
98 static int AddEdgeIndices(
const double v[Square::CORNERS],
double isoValue,
int* edges);
103 static void SetVertex(
int e,
const double values[
Cube::CORNERS],
double iso);
104 static int GetFaceIndex(
const double values[Cube::CORNERS],
double iso,
int faceIndex);
106 static void SetVertex(
int e,
const float values[Cube::CORNERS],
float iso);
107 static int GetFaceIndex(
const float values[Cube::CORNERS],
float iso,
int faceIndex);
109 static int GetFaceIndex(
int mcIndex,
int faceIndex);
111 static double Interpolate(
double v1,
double v2);
112 static float Interpolate(
float v1,
float v2);
113 enum { MAX_TRIANGLES=5 };
114 static const int* edgeMask();
115 static int triangles(
int i,
int j);
116 static const int* cornerMap();
117 static double& vertexList(
int i,
int j);
119 static int AddTriangleIndices(
int mcIndex,
int* triangles);
121 static int GetIndex(
const double values[Cube::CORNERS],
double iso);
122 static int IsAmbiguous(
const double v[Cube::CORNERS],
double isoValue,
int faceIndex);
123 static int HasRoots(
const double v[Cube::CORNERS],
double isoValue);
124 static int HasRoots(
const double v[Cube::CORNERS],
double isoValue,
int faceIndex);
125 static int AddTriangles(
const double v[Cube::CORNERS],
double isoValue,
Triangle* triangles);
126 static int AddTriangleIndices(
const double v[Cube::CORNERS],
double isoValue,
int* triangles);
128 static int GetIndex(
const float values[Cube::CORNERS],
float iso);
129 static int IsAmbiguous(
const float v[Cube::CORNERS],
float isoValue,
int faceIndex);
130 static int HasRoots(
const float v[Cube::CORNERS],
float isoValue);
131 static int HasRoots(
const float v[Cube::CORNERS],
float isoValue,
int faceIndex);
132 static int AddTriangles(
const float v[Cube::CORNERS],
float isoValue,
Triangle* triangles);
133 static int AddTriangleIndices(
const float v[Cube::CORNERS],
float isoValue,
int* triangles);
135 static int IsAmbiguous(
int mcIndex,
int faceIndex);
136 static int HasRoots(
int mcIndex);
137 static int HasFaceRoots(
int mcIndex,
int faceIndex);
138 static int HasEdgeRoots(
int mcIndex,
int edgeIndex);
144 #endif //MARCHING_CUBES_INCLUDED
This file defines compatibility wrappers for low level I/O functions.