24 #if GEOM_PSEUDO3D==GEOM_TRUE 25 namespace GEOM_FADE25D {
26 #elif GEOM_PSEUDO3D==GEOM_FALSE 29 #error GEOM_PSEUDO3D is not defined 44 numCustomIndices(0),numTriangles(0),numPoints(0),
45 aCoords(NULL),aCustomIndices(NULL),aTriangles(NULL)
47 #if GEOM_PSEUDO3D==GEOM_TRUE 61 bool writeObj(
const char* filename)
const;
64 void extractTriangleNeighborships(std::vector<std::pair<int,int> >& vNeigs)
const;
71 void getCornerIndices(
int triIdx,
int& vtxIdx0,
int& vtxIdx1,
int& vtxIdx2)
const;
73 #if GEOM_PSEUDO3D==GEOM_TRUE 79 void getCoordinates(
int vtxIdx,
double& x,
double& y,
double& z)
const;
86 void getCoordinates(
int vtxIdx,
double& x,
double& y)
const;
99 inline FadeExport::~FadeExport()
101 if(aCoords!=NULL)
delete [] aCoords;
102 if(aCustomIndices!=NULL)
delete [] aCustomIndices;
103 if(aTriangles!=NULL)
delete [] aTriangles;
112 inline void FadeExport::getCornerIndices(
int triIdx,
int& vtxIdx0,
int& vtxIdx1,
int& vtxIdx2)
const 115 vtxIdx0=aTriangles[base];
116 vtxIdx1=aTriangles[base+1];
117 vtxIdx2=aTriangles[base+2];
121 inline void FadeExport::print()
const 123 for(
int vtxIdx=0;vtxIdx<numPoints;++vtxIdx)
126 if(numCustomIndices>0) customIndex=aCustomIndices[vtxIdx];
127 std::cout<<
"\nVertex "<<vtxIdx<<
" (customIndex="<<customIndex<<
"):";
128 for(
int component=0;component<dim;++component) std::cout<<
" "<<aCoords[dim*vtxIdx+component];
131 for(
int triIdx=0;triIdx<numTriangles;++triIdx)
134 getCornerIndices(
int(triIdx),v0,v1,v2);
135 std::cout<<
"\nTriangle "<<triIdx<<
": "<<v0<<
" "<<v1<<
" "<<v2;
138 std::vector<std::pair<int,int> > vNeighbors;
139 this->extractTriangleNeighborships(vNeighbors);
140 for(
size_t i=0;i<vNeighbors.size();++i)
142 std::cout<<
"\nTriangle "<<vNeighbors[i].first<<
" <-> Triangle "<<vNeighbors[i].second;
144 std::cout<<std::endl;
148 inline bool FadeExport::writeObj(
const char* filename)
const 150 std::ofstream outFile(filename);
151 if(!outFile.is_open())
153 std::cout<<
"Can't write "<<filename<<std::endl;
156 std::cout<<
"writing "<<filename<<std::endl;
158 outFile<<
"# Written by Fade2D";
159 for(
int vtxIdx=0;vtxIdx<numPoints;++vtxIdx)
162 for(
int component=0;component<dim;++component) outFile<<
" "<<aCoords[dim*vtxIdx+component];
163 if(dim==2) outFile<<
" 0";
165 for(
int triIdx=0;triIdx<numTriangles;++triIdx)
168 for(
int corner=0;corner<3;++corner)
170 outFile<<
" "<<aTriangles[3*triIdx+corner]+1;
179 inline void FadeExport::extractTriangleNeighborships(std::vector<std::pair<int,int> >& vNeigs)
const 181 vNeigs.reserve(numTriangles*3/2);
182 std::vector<std::pair<std::pair<int,int>,
int> > vVtxPair2Tri;
183 vVtxPair2Tri.reserve(numTriangles*3);
185 for(
int tri=0;tri<numTriangles;++tri)
187 size_t vtxIdx(3*tri);
188 int vtx0(aTriangles[vtxIdx]);
189 int vtx1(aTriangles[vtxIdx+1]);
190 int vtx2(aTriangles[vtxIdx+2]);
191 if(vtx0>vtx1) std::swap(vtx0,vtx1);
194 std::swap(vtx1,vtx2);
195 if(vtx0>vtx1) std::swap(vtx0,vtx1);
197 vVtxPair2Tri.push_back(std::make_pair(std::make_pair(vtx0,vtx1),tri));
198 vVtxPair2Tri.push_back(std::make_pair(std::make_pair(vtx1,vtx2),tri));
199 vVtxPair2Tri.push_back(std::make_pair(std::make_pair(vtx0,vtx2),tri));
201 std::sort(vVtxPair2Tri.begin(),vVtxPair2Tri.end());
202 for(
size_t i=0;i<vVtxPair2Tri.size();++i)
204 int vtx0(vVtxPair2Tri[i].first.first);
205 int vtx1(vVtxPair2Tri[i].first.second);
206 int tri(vVtxPair2Tri[i].second);
207 if( ++i<vVtxPair2Tri.size() &&
208 vVtxPair2Tri[i].first.first==vtx0 &&
209 vVtxPair2Tri[i].first.second==vtx1)
211 vNeigs.push_back(std::pair<int,int>(tri,vVtxPair2Tri[i].second));
218 #if GEOM_PSEUDO3D==GEOM_TRUE 219 inline void FadeExport::getCoordinates(
int vtxIdx,
double& x,
double& y,
double& z)
const 221 int base(dim*vtxIdx);
227 inline void FadeExport::getCoordinates(
int vtxIdx,
double& x,
double& y)
const 229 int base(dim*vtxIdx);
243 #ifndef FADE2D_EXPORT int * aTriangles
3 counterclockwise oriented vertex-indices per triangle (3*numTriangles)
Definition: FadeExport.h:95
int dim
Dimension.
Definition: FadeExport.h:96
int numCustomIndices
number of custom indices (same as numPoints when exported, otherwise 0)
Definition: FadeExport.h:90
int * aCustomIndices
Custom indices of the points (only when exported)
Definition: FadeExport.h:94
FadeExport is a simple struct to export triangulation data.
Definition: FadeExport.h:41
int numPoints
number of points
Definition: FadeExport.h:92
double * aCoords
Cartesian coordinates (dim*numPoints)
Definition: FadeExport.h:93
int numTriangles
number of triangles
Definition: FadeExport.h:91