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
35 #pragma warning(disable : 4996)
52 numCustomIndices(0),numTriangles(0),numPoints(0),
53 aCoords(NULL),aCustomIndices(NULL),aTriangles(NULL)
55 #if GEOM_PSEUDO3D==GEOM_TRUE
91 size_t siz(3*numTriangles);
92 aTriangles=
new int[siz];
97 size_t siz(dim*numPoints);
98 aCoords=
new double[siz];
103 aCustomIndices=
new int[numCustomIndices];
116 if(aCoords!=NULL)
delete [] aCoords;
117 if(aCustomIndices!=NULL)
delete [] aCustomIndices;
118 if(aTriangles!=NULL)
delete [] aTriangles;
156 bool writeObj(
const char* filename)
const;
168 void extractTriangleNeighborships(std::vector<std::pair<int,int> >& vNeigs)
const;
175 void getCornerIndices(
int triIdx,
int& vtxIdx0,
int& vtxIdx1,
int& vtxIdx2)
const;
183 int getCustomIndex(
int vtxIdx)
const;
185 #if GEOM_PSEUDO3D==GEOM_TRUE
194 void getNormal(
int triIdx,
double& x,
double& y,
double& z)
const;
197 #if GEOM_PSEUDO3D==GEOM_TRUE
203 void getCoordinates(
int vtxIdx,
double& x,
double& y,
double& z)
const;
210 void getCoordinates(
int vtxIdx,
double& x,
double& y)
const;
212 bool operator==(
const FadeExport& other)
const;
225 if(aCoords!=NULL)
delete [] aCoords;
226 if(aCustomIndices!=NULL)
delete [] aCustomIndices;
227 if(aTriangles!=NULL)
delete [] aTriangles;
233 inline bool FadeExport::operator==(
const FadeExport& other)
const
236 if(numPoints != other.
numPoints)
return false;
238 for(
int vtxIdx=0;vtxIdx<numPoints;++vtxIdx)
240 for(
int component=0;component<dim;++component)
242 size_t addr(dim*vtxIdx+component);
243 if(aCoords[addr]!=other.
aCoords[addr])
return false;
247 for(
int triIdx=0;triIdx<numTriangles;++triIdx)
250 getCornerIndices(
int(triIdx),v0,v1,v2);
253 if(v0!=va || v1!=vb || v2!=vc)
return false;
263 vtxIdx0=aTriangles[base];
264 vtxIdx1=aTriangles[base+1];
265 vtxIdx2=aTriangles[base+2];
271 for(
int vtxIdx=0;vtxIdx<numPoints;++vtxIdx)
274 if(numCustomIndices>0) customIndex=aCustomIndices[vtxIdx];
275 GCOUT<<
"\nVertex "<<vtxIdx<<
" (customIndex="<<customIndex<<
"):";
276 for(
int component=0;component<dim;++component) GCOUT<<
" "<<aCoords[dim*vtxIdx+component];
279 for(
int triIdx=0;triIdx<numTriangles;++triIdx)
282 getCornerIndices(
int(triIdx),v0,v1,v2);
283 GCOUT<<
"\nTriangle "<<triIdx<<
": "<<v0<<
" "<<v1<<
" "<<v2;
286 std::vector<std::pair<int,int> > vNeighbors;
287 this->extractTriangleNeighborships(vNeighbors);
288 for(
size_t i=0;i<vNeighbors.size();++i)
290 GCOUT<<
"\nTriangle "<<vNeighbors[i].first<<
" <-> Triangle "<<vNeighbors[i].second;
298 std::ofstream outFile(filename);
299 if(!outFile.is_open())
301 GCOUT<<
"Can't write "<<filename<<std::endl;
304 GCOUT<<
"writing "<<filename<<std::endl;
306 outFile<<
"# Written by Fade2D";
307 for(
int vtxIdx=0;vtxIdx<numPoints;++vtxIdx)
310 for(
int component=0;component<dim;++component) outFile<<
" "<<aCoords[dim*vtxIdx+component];
311 if(dim==2) outFile<<
" 0";
313 for(
int triIdx=0;triIdx<numTriangles;++triIdx)
316 for(
int corner=0;corner<3;++corner)
318 outFile<<
" "<<aTriangles[3*triIdx+corner]+1;
329 vNeigs.reserve(numTriangles*3/2);
330 std::vector<std::pair<std::pair<int,int>,
int> > vVtxPair2Tri;
331 vVtxPair2Tri.reserve(numTriangles*3);
333 for(
int tri=0;tri<numTriangles;++tri)
335 size_t vtxIdx(3*tri);
336 int vtx0(aTriangles[vtxIdx]);
337 int vtx1(aTriangles[vtxIdx+1]);
338 int vtx2(aTriangles[vtxIdx+2]);
339 if(vtx0>vtx1) std::swap(vtx0,vtx1);
342 std::swap(vtx1,vtx2);
343 if(vtx0>vtx1) std::swap(vtx0,vtx1);
345 vVtxPair2Tri.push_back(std::make_pair(std::make_pair(vtx0,vtx1),tri));
346 vVtxPair2Tri.push_back(std::make_pair(std::make_pair(vtx1,vtx2),tri));
347 vVtxPair2Tri.push_back(std::make_pair(std::make_pair(vtx0,vtx2),tri));
349 std::sort(vVtxPair2Tri.begin(),vVtxPair2Tri.end());
350 for(
size_t i=0;i<vVtxPair2Tri.size();++i)
352 int vtx0(vVtxPair2Tri[i].first.first);
353 int vtx1(vVtxPair2Tri[i].first.second);
354 int tri0(vVtxPair2Tri[i].second);
356 if( ++i<vVtxPair2Tri.size() &&
357 vVtxPair2Tri[i].first.first==vtx0 &&
358 vVtxPair2Tri[i].first.second==vtx1)
360 int tri1(vVtxPair2Tri[i].second);
361 vNeigs.push_back(std::pair<int,int>(tri0,tri1));
368 #if GEOM_PSEUDO3D==GEOM_TRUE
371 int base(dim*vtxIdx);
379 int base(dim*vtxIdx);
387 if(vtxIdx<numCustomIndices)
389 return aCustomIndices[vtxIdx];
FadeExport is a simple struct to export triangulation data.
Definition: FadeExport.h:49
void reset()
Resets the object.
Definition: FadeExport.h:114
void getNormal(int triIdx, double &x, double &y, double &z) const
Gets the normal vector of a triangle.
int numTriangles
number of triangles
Definition: FadeExport.h:215
void print() const
Prints the data for demonstration purposes.
Definition: FadeExport.h:269
void lexiSort()
Lexicographically sorts the points.
void copy(const FadeExport &other)
A copy function.
Definition: FadeExport.h:80
FadeExport(const FadeExport &other)
Copy constructor.
Definition: FadeExport.h:64
FadeExport & operator=(const FadeExport &other)
Assignment operator.
Definition: FadeExport.h:69
int * aCustomIndices
Custom indices of the points (only when exported)
Definition: FadeExport.h:218
~FadeExport()
Destructor.
Definition: FadeExport.h:223
void getCornerIndices(int triIdx, int &vtxIdx0, int &vtxIdx1, int &vtxIdx2) const
Get the corner indices of a certain triangle.
Definition: FadeExport.h:260
int getCustomIndex(int vtxIdx) const
Get the custom vertex index.
Definition: FadeExport.h:385
FadeExport()
Default constructor.
Definition: FadeExport.h:51
int dim
Dimension.
Definition: FadeExport.h:220
void extractTriangleNeighborships(std::vector< std::pair< int, int > > &vNeigs) const
Extracts triangle adjacencies.
Definition: FadeExport.h:327
int numPoints
number of points
Definition: FadeExport.h:216
int numCustomIndices
number of custom indices (same as numPoints when exported, otherwise 0)
Definition: FadeExport.h:214
bool writeObj(const char *filename) const
Writes the triangulation data to a .obj file.
Definition: FadeExport.h:296
double * aCoords
Cartesian coordinates (dim*numPoints)
Definition: FadeExport.h:217
void getCoordinates(int vtxIdx, double &x, double &y, double &z) const
Get the coorinates for a certain vertex index.
Definition: FadeExport.h:369
int * aTriangles
3 counterclockwise oriented vertex-indices per triangle (3*numTriangles)
Definition: FadeExport.h:219