25 #if GEOM_PSEUDO3D==GEOM_TRUE
26 namespace GEOM_FADE25D {
27 #elif GEOM_PSEUDO3D==GEOM_FALSE
28 namespace GEOM_FADE2D {
30 #error GEOM_PSEUDO3D is not defined
45 numCustomIndices(0),numTriangles(0),numPoints(0),
46 aCoords(NULL),aCustomIndices(NULL),aTriangles(NULL)
48 #if GEOM_PSEUDO3D==GEOM_TRUE
67 bool writeObj(
const char* filename)
const;
70 void extractTriangleNeighborships(std::vector<std::pair<int,int> >& vNeigs)
const;
77 void getCornerIndices(
int triIdx,
int& vtxIdx0,
int& vtxIdx1,
int& vtxIdx2)
const;
85 int getCustomIndex(
int vtxIdx)
const;
87 #if GEOM_PSEUDO3D==GEOM_TRUE
89 void getNormal(
int triIdx,
double& x,
double& y,
double& z)
const;
92 #if GEOM_PSEUDO3D==GEOM_TRUE
98 void getCoordinates(
int vtxIdx,
double& x,
double& y,
double& z)
const;
105 void getCoordinates(
int vtxIdx,
double& x,
double& y)
const;
118 inline FadeExport::~FadeExport()
120 if(aCoords!=NULL)
delete [] aCoords;
121 if(aCustomIndices!=NULL)
delete [] aCustomIndices;
122 if(aTriangles!=NULL)
delete [] aTriangles;
134 vtxIdx0=aTriangles[base];
135 vtxIdx1=aTriangles[base+1];
136 vtxIdx2=aTriangles[base+2];
142 for(
int vtxIdx=0;vtxIdx<numPoints;++vtxIdx)
145 if(numCustomIndices>0) customIndex=aCustomIndices[vtxIdx];
146 std::cout<<
"\nVertex "<<vtxIdx<<
" (customIndex="<<customIndex<<
"):";
147 for(
int component=0;component<dim;++component) std::cout<<
" "<<aCoords[dim*vtxIdx+component];
150 for(
int triIdx=0;triIdx<numTriangles;++triIdx)
153 getCornerIndices(
int(triIdx),v0,v1,v2);
154 std::cout<<
"\nTriangle "<<triIdx<<
": "<<v0<<
" "<<v1<<
" "<<v2;
157 std::vector<std::pair<int,int> > vNeighbors;
158 this->extractTriangleNeighborships(vNeighbors);
159 for(
size_t i=0;i<vNeighbors.size();++i)
161 std::cout<<
"\nTriangle "<<vNeighbors[i].first<<
" <-> Triangle "<<vNeighbors[i].second;
163 std::cout<<std::endl;
169 std::ofstream outFile(filename);
170 if(!outFile.is_open())
172 std::cout<<
"Can't write "<<filename<<std::endl;
175 std::cout<<
"writing "<<filename<<std::endl;
177 outFile<<
"# Written by Fade2D";
178 for(
int vtxIdx=0;vtxIdx<numPoints;++vtxIdx)
181 for(
int component=0;component<dim;++component) outFile<<
" "<<aCoords[dim*vtxIdx+component];
182 if(dim==2) outFile<<
" 0";
184 for(
int triIdx=0;triIdx<numTriangles;++triIdx)
187 for(
int corner=0;corner<3;++corner)
189 outFile<<
" "<<aTriangles[3*triIdx+corner]+1;
200 vNeigs.reserve(numTriangles*3/2);
201 std::vector<std::pair<std::pair<int,int>,
int> > vVtxPair2Tri;
202 vVtxPair2Tri.reserve(numTriangles*3);
204 for(
int tri=0;tri<numTriangles;++tri)
206 size_t vtxIdx(3*tri);
207 int vtx0(aTriangles[vtxIdx]);
208 int vtx1(aTriangles[vtxIdx+1]);
209 int vtx2(aTriangles[vtxIdx+2]);
210 if(vtx0>vtx1) std::swap(vtx0,vtx1);
213 std::swap(vtx1,vtx2);
214 if(vtx0>vtx1) std::swap(vtx0,vtx1);
216 vVtxPair2Tri.push_back(std::make_pair(std::make_pair(vtx0,vtx1),tri));
217 vVtxPair2Tri.push_back(std::make_pair(std::make_pair(vtx1,vtx2),tri));
218 vVtxPair2Tri.push_back(std::make_pair(std::make_pair(vtx0,vtx2),tri));
220 std::sort(vVtxPair2Tri.begin(),vVtxPair2Tri.end());
221 for(
size_t i=0;i<vVtxPair2Tri.size();++i)
223 int vtx0(vVtxPair2Tri[i].first.first);
224 int vtx1(vVtxPair2Tri[i].first.second);
225 int tri(vVtxPair2Tri[i].second);
226 if( ++i<vVtxPair2Tri.size() &&
227 vVtxPair2Tri[i].first.first==vtx0 &&
228 vVtxPair2Tri[i].first.second==vtx1)
230 vNeigs.push_back(std::pair<int,int>(tri,vVtxPair2Tri[i].second));
237 #if GEOM_PSEUDO3D==GEOM_TRUE
240 int base(dim*vtxIdx);
248 int base(dim*vtxIdx);
256 if(vtxIdx<numCustomIndices)
258 return aCustomIndices[vtxIdx];
FadeExport is a simple struct to export triangulation data.
Definition: FadeExport.h:43
void getNormal(int triIdx, double &x, double &y, double &z) const
Get the normal vector of a triangle.
int numTriangles
number of triangles
Definition: FadeExport.h:110
void print() const
Print data for demonstration purposes.
Definition: FadeExport.h:140
void lexiSort()
Sort the points lexicographically.
int * aCustomIndices
Custom indices of the points (only when exported)
Definition: FadeExport.h:113
void getCornerIndices(int triIdx, int &vtxIdx0, int &vtxIdx1, int &vtxIdx2) const
Get the corner indices of a certain triangle.
Definition: FadeExport.h:131
int getCustomIndex(int vtxIdx) const
Get the custom vertex index.
Definition: FadeExport.h:254
int dim
Dimension.
Definition: FadeExport.h:115
void extractTriangleNeighborships(std::vector< std::pair< int, int > > &vNeigs) const
Determine index-pairs of adjacent triangles.
Definition: FadeExport.h:198
int numPoints
number of points
Definition: FadeExport.h:111
int numCustomIndices
number of custom indices (same as numPoints when exported, otherwise 0)
Definition: FadeExport.h:109
bool writeObj(const char *filename) const
Write an *.obj file (supported by virtually any 3D viewer)
Definition: FadeExport.h:167
double * aCoords
Cartesian coordinates (dim*numPoints)
Definition: FadeExport.h:112
void getCoordinates(int vtxIdx, double &x, double &y, double &z) const
Get the coorinates for a certain vertex index.
Definition: FadeExport.h:238
int * aTriangles
3 counterclockwise oriented vertex-indices per triangle (3*numTriangles)
Definition: FadeExport.h:114