78 vector<vector<FiberSurface::Vertex> >
80 vector<vector<FiberSurface::Triangle> >
105 template <
class dataTypeU,
class dataTypeV>
107 const vector<vector<int> > &edgeStarList,
108 vector<vector<pair<int, int> > > &edgeFanLinkEdgeLists,
109 vector<vector<long long int> > &edgeFans,
110 vector<int> &sosOffsets)
const;
116 template <
class dataTypeU,
class dataTypeV>
inline int execute();
176 inline const vector<FiberSurface::Vertex>*
182 if((jacobiEdgeId < 0)
200 template <
class dataTypeU,
class dataTypeV>
202 const dataTypeU &uEpsilon = pow(10, -DBL_DIG),
203 const dataTypeV &vEpsilon = pow(10, -DBL_DIG))
const;
205 inline int setEdgeFans(
const vector<vector<long long int> > *edgeFans){
211 const vector<vector<pair<int, int> > > *edgeFanLinkEdgeLists){
282 template <
class dataTypeU,
class dataTypeV>
283 inline int simplify(
const double &simplificationThreshold,
292 vector<pair<int, int> > &jacobiSetClassification);
295 vector<pair<int, int> > &jacobiSetClassification);
297 template <
class dataTypeU,
class dataTypeV>
299 const vector<pair<int, int> > &jacobiEdges);
301 template <
class dataTypeU,
class dataTypeV>
305 const vector<vector<vector<int> > > &tetTriangles);
309 template <
class dataTypeU,
class dataTypeV>
314 const int &sheet3Id,
const int &sheet0Id);
318 const int &sheet3Id,
const int &sheet1Id);
322 const int &sheet3Id,
const int &sheet2Id);
326 const int &sheet3Id,
const int &otherSheet3Id);
331 const int &sheet1Id,
const int &sheet0Id,
const int &biggerId);
334 const int &sheet3Id,
const int &sheet0Id);
337 const int &sheet3Id,
const int &sheet1Id,
const int &biggerId);
340 const int &sheet3Id,
const int &sheet2Id);
343 const int &sheet3Id,
const int &other3SheetId);
347 int mergeSheets(
const int &smallerId,
const int &biggerId);
373 const vector<pair<int, int> >
375 const vector<vector<int> >
377 const vector<vector<long long int> >
379 const vector<vector<pair<int, int> > >
384 const vector<vector<int> >
386 const vector<vector<int> >
388 const vector<vector<int> >
420 vector<pair<int, char> >
425 vector<FiberSurface::Vertex>
434 template <
class dataTypeU,
class dataTypeV>
435 inline int ReebSpace::connectivityPreprocessing(
436 const vector<vector<int> > &edgeStarList,
437 vector<vector<pair<int, int> > > &edgeFanLinkEdgeLists,
438 vector<vector<long long int> > &edgeFans,
439 vector<int> &sosOffsets)
const{
448 edgeFanLinkEdgeLists, edgeFans, sosOffsets);
453 template <
class dataTypeU,
class dataTypeV>
474 vector<pair<int, int> > jacobiSetClassification;
480 compute2sheets<dataTypeU, dataTypeV>(jacobiSetClassification);
483 vector<vector<vector<int> > > tetTriangles;
489 <<
" points) processed in "
502 #pragma omp parallel for num_threads(threadNumber_)
505 computeGeometricalMeasures<dataTypeU, dataTypeV>(
517 msg <<
"[ReebSpace] Geometrical measures computed in "
519 <<
" thread(s))" << endl;
531 template <
class dataTypeU,
class dataTypeV>
533 const vector<pair<int, int> > &jacobiEdges){
577 vector<int> edge2polygonEdgeId(
edgeList_->size(), -1);
580 for(
int i = 0; i < (int) jacobiEdges.size(); i++){
582 int edgeId = jacobiEdges[i].first;
584 edge2polygonEdgeId[edgeId] = i;
589 #pragma omp parallel for num_threads(threadNumber_)
601 edge2polygonEdgeId[edgeId],
604 edge2polygonEdgeId[edgeId],
610 #pragma omp parallel for num_threads(threadNumber_)
612 for(
int i = 0; i < (int) jacobiEdges.size(); i++){
614 int edgeId = jacobiEdges[i].first;
616 pair<double, double> rangePoint0, rangePoint1;
619 ((dataTypeU *)
uField_)[(*edgeList_)[edgeId].first];
621 ((dataTypeV *)
vField_)[(*edgeList_)[edgeId].first];
624 ((dataTypeU *)
uField_)[(*edgeList_)[edgeId].second];
626 ((dataTypeV *)
vField_)[(*edgeList_)[edgeId].second];
630 rangePoint0, rangePoint1,
631 (*edgeStars_)[edgeId],
632 edge2polygonEdgeId[edgeId]);
636 rangePoint0, rangePoint1, edge2polygonEdgeId[edgeId]);
692 msg <<
"[ReebSpace] Fiber surfaces computed in "
694 <<
" s. overall (" <<
threadNumber_ <<
" thread(s))." << endl;
701 template <
class dataTypeU,
class dataTypeV>
719 msg <<
"[ReebSpace] Computing chambers' pre-images." << endl;
720 msg <<
"[ReebSpace] This will take a LONG time." << endl;
753 #pragma omp parallel for num_threads(threadNumber_)
755 for(
int i = 0; i < (int)
edgeList_->size(); i++){
757 int threadId = omp_get_thread_num();
761 pair<double, double> rangePoint0, rangePoint1;
764 ((dataTypeU *)
uField_)[(*edgeList_)[edgeId].first];
766 ((dataTypeV *)
vField_)[(*edgeList_)[edgeId].first];
769 ((dataTypeU *)
uField_)[(*edgeList_)[edgeId].second];
771 ((dataTypeV *)
vField_)[(*edgeList_)[edgeId].second];
774 rangePoint0, rangePoint1, threadId);
783 msg <<
"[ReebSpace] Chambers pre-image boundaries computed in "
785 <<
" s. overall (" <<
threadNumber_ <<
" thread(s))." << endl;
792 template <
class dataTypeU,
class dataTypeV>
799 for(
int i = 0; i < (int) sheet.
tetList_.size(); i++){
802 vector<pair<double, double> > domainBox, rangeBox;
803 vector<vector<double> > domainPoints(4), rangePoints(4);
805 for(
int j = 0; j < 4; j++){
806 domainPoints[j].resize(3);
807 rangePoints[j].resize(2);
809 int vertexId =
tetList_[5*tetId + 1 + j];
810 for(
int k = 0; k < 3; k++){
811 domainPoints[j][k] =
pointSet_[3*vertexId + k];
814 rangePoints[j][0] = ((dataTypeU *)
uField_)[vertexId];
815 rangePoints[j][1] = ((dataTypeV *)
vField_)[vertexId];
822 (domainBox[0].second - domainBox[0].first)
823 *(domainBox[1].second - domainBox[1].first)
824 *(domainBox[2].second - domainBox[2].first);
827 (rangeBox[0].second - rangeBox[0].first)
828 *(rangeBox[1].second - rangeBox[1].first);
842 template <
class dataTypeU,
class dataTypeV>
844 const dataTypeU &uEpsilon,
const dataTypeV &vEpsilon)
const{
855 template <
class dataTypeU,
class dataTypeV>
864 #pragma omp parallel for num_threads(threadNumber_)
867 computeGeometricalMeasures<dataTypeU, dataTypeV>(
879 msg <<
"[ReebSpace] Geometrical measures computed in "
881 <<
" thread(s))" << endl;
893 msg <<
"[ReebSpace] Simplifying with criterion ";
896 msg <<
"'Domain Volume'";
899 msg <<
"'Range Area'";
902 msg <<
"'HyperVolume'";
905 msg <<
" at threshold " << simplificationThreshold <<
"." << endl;
919 #endif // REEBSPACE_H
vector< int > vertex2sheet3_
Definition: ReebSpace.h:404
int setTetList(const long long int *tetList)
Definition: FiberSurface.h:152
const vector< vector< int > > * edgeStars_
Definition: ReebSpace.h:376
int simplifySheets(const double &simplificationThreshold, const SimplificationCriterion &simplificationCriterion)
Definition: ReebSpace.cpp:1427
int setEdgeList(const vector< pair< int, int > > *edgeList)
Definition: JacobiSet.h:57
~ReebSpace()
Definition: ReebSpace.cpp:30
int compute2sheets(const vector< pair< int, int > > &jacobiEdges)
Definition: ReebSpace.h:532
int setVertexEdgeList(const vector< vector< int > > *vertexEdgeList)
Definition: ReebSpace.h:264
vector< int > sheet0List_
Definition: ReebSpace.h:94
int perturbate(const dataTypeU &uEpsilon=pow(10,-DBL_DIG), const dataTypeV &vEpsilon=pow(10,-DBL_DIG)) const
Definition: JacobiSet.cpp:386
int connect3sheetTo3sheet(ReebSpaceData &data, const int &sheet3Id, const int &otherSheet3Id)
Definition: ReebSpace.cpp:785
int preMergeSheets(const int &sheetId0, const int &sheetId1)
Definition: ReebSpace.cpp:1149
Definition: ReebSpace.h:54
double totalVolume_
Definition: ReebSpace.h:369
vector< int > sheet3List_
Definition: ReebSpace.h:97
int finalize(const bool &mergeDuplicatedVertices=false, const bool &removeSmallEdges=false, const bool &edgeFlips=false, const bool &intersectionRemesh=false)
Definition: FiberSurface.h:1589
SimplificationCriterion simplificationCriterion_
Definition: ReebSpace.h:397
bool empty() const
Definition: ReebSpace.h:112
const long long int * tetList_
Definition: ReebSpace.h:383
int setPolygonEdgeNumber(const int &polygonEdgeNumber)
Definition: FiberSurface.h:145
const int msg(const char *msg, const int &debugLevel=infoMsg) const
Definition: Debug.cpp:67
int mergeSheets(const int &smallerId, const int &biggerId)
Definition: ReebSpace.cpp:1046
const Sheet2 * get2sheet(const int &sheetId) const
Definition: ReebSpace.h:138
int Id_
Definition: ReebSpace.h:89
int setEdgeFanLinkEdgeList(const vector< vector< pair< int, int > > > *edgeFanLinkEdgeLists)
Definition: JacobiSet.h:51
int connectSheets()
Definition: ReebSpace.cpp:813
ReebSpaceData currentData_
Definition: ReebSpace.h:417
bool pruned_
Definition: ReebSpace.h:90
int disconnect3sheetFrom3sheet(ReebSpaceData &data, const int &sheet3Id, const int &other3SheetId)
Definition: ReebSpace.cpp:997
int setTetNumber(const int &tetNumber)
Definition: FiberSurface.h:162
const float * pointSet_
Definition: ReebSpace.h:381
bool pruned_
Definition: ReebSpace.h:72
int simplifySheet(const int &sheetId, const SimplificationCriterion &simplificationCriterion)
Definition: ReebSpace.cpp:1304
const int getNumberOf2sheets() const
Definition: ReebSpace.h:188
vector< Sheet3 > sheet3List_
Definition: ReebSpace.h:410
int connectivityPreprocessing(const vector< vector< int > > &edgeStarList, vector< vector< pair< int, int > > > &edgeFanLinkEdgeLists, vector< vector< long long int > > &edgeFans, vector< int > &sosOffsets) const
Definition: JacobiSet.cpp:26
static int getBoundingBox(const vector< vector< double > > &points, vector< pair< double, double >> &bBox)
Definition: Geometry.cpp:387
double totalHyperVolume_
Definition: ReebSpace.h:369
int setEdgeFanLinkEdgeList(const vector< vector< pair< int, int > > > *edgeFanLinkEdgeLists)
Definition: ReebSpace.h:210
const vector< int > * get3sheetTetSegmentation() const
Definition: ReebSpace.h:168
int computeContour(const pair< double, double > &rangePoint0, const pair< double, double > &rangePoint1, const vector< int > &seedTetList, const int &polygonEdgeId=0) const
Definition: FiberSurface.h:1298
int setVertexNumber(const int &vertexNumber)
Definition: ReebSpace.h:272
Definition: ReebSpace.h:68
const vector< vector< int > > * vertexStars_
Definition: ReebSpace.h:389
vector< int > sheet1List_
Definition: ReebSpace.h:95
int setEdgeList(const vector< pair< int, int > > *edgeList)
Definition: ReebSpace.h:216
int printConnectivity(ostream &stream, const ReebSpaceData &data) const
Definition: ReebSpace.cpp:1240
ReebSpace processing package.
Definition: ReebSpace.h:33
double simplificationThreshold_
Definition: ReebSpace.h:398
vector< Sheet1 > sheet1List_
Definition: ReebSpace.h:408
int execute(vector< pair< int, char > > &jacobiSet)
Definition: JacobiSet.cpp:186
int flush()
Definition: ReebSpace.cpp:1014
const vector< vector< pair< int, int > > > * edgeFanLinkEdgeLists_
Definition: ReebSpace.h:380
FiberSurface fiberSurface_
Definition: ReebSpace.h:424
int disconnect3sheetFrom0sheet(ReebSpaceData &data, const int &sheet3Id, const int &sheet0Id)
Definition: ReebSpace.cpp:915
JacobiSet processing package.
Definition: JacobiSet.h:28
ReebSpace()
Definition: ReebSpace.cpp:5
const Sheet0 * get0sheet(const int &sheetId) const
Definition: ReebSpace.h:118
int setEdgeStars(const vector< vector< int > > *edgeStars)
Definition: ReebSpace.h:221
int disconnect3sheetFrom1sheet(ReebSpaceData &data, const int &sheet3Id, const int &sheet1Id, const int &biggerId)
Definition: ReebSpace.cpp:932
virtual const int dMsg(ostream &stream, string msg, const int &debugLevel=infoMsg) const
Definition: Debug.cpp:52
int setVertexNumber(const int &vertexNumber)
Definition: JacobiSet.h:81
int perturbate(const dataTypeU &uEpsilon=pow(10,-DBL_DIG), const dataTypeV &vEpsilon=pow(10,-DBL_DIG)) const
Definition: ReebSpace.h:843
const vector< int > * get0sheetSegmentation() const
Definition: ReebSpace.h:156
SimplificationCriterion
Definition: ReebSpace.h:37
int setInputField(const void *uField, const void *vField)
Definition: ReebSpace.h:231
int getJacobi2Edge(const int &jacobiEdgeId) const
Definition: ReebSpace.h:181
Definition: ReebSpace.h:40
const vector< vector< long long int > > * edgeFans_
Definition: ReebSpace.h:378
int setTetList(const long long int *tetList)
Definition: JacobiSet.h:76
int setEdgeFans(const vector< vector< long long int > > *edgeFans)
Definition: JacobiSet.h:46
vector< int > vertexList_
Definition: ReebSpace.h:92
int compute3sheet(const int &vertexId, const vector< vector< vector< int > > > &tetTriangles)
Definition: ReebSpace.cpp:354
int setTetNeighbors(const vector< vector< int > > *tetNeighbors)
Definition: FiberSurface.h:157
double getElapsedTime()
Definition: Os.h:359
vector< vector< FiberSurface::Triangle > > triangleList_
Definition: ReebSpace.h:81
FiberSurface processing package.
Definition: FiberSurface.h:31
vector< int > edgeTypes_
Definition: ReebSpace.h:401
vector< int > sheet0List_
Definition: ReebSpace.h:62
vector< int > tet2sheet3_
Definition: ReebSpace.h:402
bool hasConnectedSheets_
Definition: ReebSpace.h:416
int setTriangleList(const int &polygonEdgeId, vector< Triangle > *triangleList)
Definition: FiberSurface.h:167
int setWrapper(const Wrapper *wrapper)
Definition: Debug.cpp:76
int connect3sheetTo0sheet(ReebSpaceData &data, const int &sheet3Id, const int &sheet0Id)
Definition: ReebSpace.cpp:712
int setTetNumber(const int &tetNumber)
Definition: ReebSpace.h:259
double hyperVolume_
Definition: ReebSpace.h:91
vector< int > * sosOffsets_
Definition: ReebSpace.h:382
vector< int > sheet3List_
Definition: ReebSpace.h:51
vector< int > preMergedSheets_
Definition: ReebSpace.h:98
int compute1sheets(const vector< pair< int, char > > &jacobiSet, vector< pair< int, int > > &jacobiSetClassification)
Definition: ReebSpace.cpp:161
vector< int > sheet2List_
Definition: ReebSpace.h:96
bool pruned_
Definition: ReebSpace.h:58
Definition: ReebSpace.h:39
int compute1sheetsOnly(const vector< pair< int, char > > &jacobiSet, vector< pair< int, int > > &jacobiSetClassification)
Definition: ReebSpace.cpp:34
const vector< int > * get1sheetSegmentation() const
Definition: ReebSpace.h:160
int setGlobalVertexList(vector< Vertex > *globalList)
Definition: FiberSurface.h:106
int setEdgeFans(const vector< vector< long long int > > *edgeFans)
Definition: ReebSpace.h:205
int simplificationId_
Definition: ReebSpace.h:89
vector< int > sheet3List_
Definition: ReebSpace.h:82
int sheet1Id_
Definition: ReebSpace.h:73
int setPointSet(const float *pointSet)
Definition: ReebSpace.h:239
int setInputField(const void *uField, const void *vField)
Definition: FiberSurface.h:111
int setPointSet(const float *pointSet)
Definition: FiberSurface.h:134
int vertexNumber_
Definition: ReebSpace.h:367
vector< int > vertex2sheet0_
Definition: ReebSpace.h:403
int prepareSimplification()
Definition: ReebSpace.cpp:1180
Definition: ReebSpace.h:85
const vector< pair< int, int > > * edgeList_
Definition: ReebSpace.h:374
int pruned_
Definition: ReebSpace.h:47
int compute2sheetChambers()
Definition: ReebSpace.h:702
double totalArea_
Definition: ReebSpace.h:369
vector< int > sheet1List_
Definition: ReebSpace.h:50
bool hasSaddleEdges_
Definition: ReebSpace.h:58
ReebSpaceData originalData_
Definition: ReebSpace.h:417
int connect3sheetTo2sheet(ReebSpaceData &data, const int &sheet3Id, const int &sheet2Id)
Definition: ReebSpace.cpp:761
int preMerger_
Definition: ReebSpace.h:89
vector< int > edge2sheet1_
Definition: ReebSpace.h:400
vector< Sheet2 > sheet2List_
Definition: ReebSpace.h:409
vector< int > tetList_
Definition: ReebSpace.h:93
int vertexId_
Definition: ReebSpace.h:47
Minimalist debugging class.
Definition: Debug.h:39
bool expand3sheets_
Definition: ReebSpace.h:416
const vector< FiberSurface::Vertex > * getFiberSurfaceVertices() const
Definition: ReebSpace.h:177
char type_
Definition: ReebSpace.h:49
int tetNumber_
Definition: ReebSpace.h:367
Definition: ReebSpace.h:43
int setExpand3Sheets(const bool &onOff)
Definition: ReebSpace.h:226
vector< vector< FiberSurface::Vertex > > vertexList_
Definition: ReebSpace.h:79
int disconnect3sheetFrom2sheet(ReebSpaceData &data, const int &sheet3Id, const int &sheet2Id)
Definition: ReebSpace.cpp:980
int setVertexList(const int &polygonEdgeId, vector< Vertex > *vertexList)
Definition: FiberSurface.h:180
const Sheet3 * get3sheet(const int &sheetId) const
Definition: ReebSpace.h:147
int setSosOffsets(vector< int > *sosOffsets)
Definition: JacobiSet.h:69
const void * vField_
Definition: ReebSpace.h:370
int execute()
Definition: ReebSpace.h:454
int setInputField(const void *uField, const void *vField)
Definition: JacobiSet.h:62
vector< int > edgeList_
Definition: ReebSpace.h:59
Definition: CommandLineParser.h:13
Wrapper * wrapper_
Definition: Debug.h:109
const Sheet1 * get1sheet(const int &sheetId) const
Definition: ReebSpace.h:128
const vector< int > * getEdgeTypes() const
Definition: ReebSpace.h:172
int computeSurface(const pair< double, double > &rangePoint0, const pair< double, double > &rangePoint1, const int &polygonEdgeId=0) const
Definition: FiberSurface.h:1443
vector< int > jacobi2edges_
Definition: ReebSpace.h:422
int setTetNeighbors(const vector< vector< int > > *tetNeighbors)
Definition: ReebSpace.h:254
const void * uField_
Definition: ReebSpace.h:370
vector< pair< int, char > > jacobiSetEdges_
Definition: ReebSpace.h:421
const vector< vector< int > > * vertexEdgeList_
Definition: ReebSpace.h:387
vector< int > sheet3List_
Definition: ReebSpace.h:65
double domainVolume_
Definition: ReebSpace.h:91
Definition: ReebSpace.h:392
int setVertexStars(const vector< vector< int > > *vertexStars)
Definition: ReebSpace.h:277
int connectivityPreprocessing(const vector< vector< int > > &edgeStarList, vector< vector< pair< int, int > > > &edgeFanLinkEdgeLists, vector< vector< long long int > > &edgeFans, vector< int > &sosOffsets) const
Definition: ReebSpace.h:435
int setSosOffsets(vector< int > *sosOffsets)
Definition: ReebSpace.h:244
Definition: ReebSpace.h:38
double rangeArea_
Definition: ReebSpace.h:91
const vector< vector< int > > * tetNeighbors_
Definition: ReebSpace.h:385
int computeGeometricalMeasures(Sheet3 &sheet)
Definition: ReebSpace.h:793
int disconnect1sheetFrom0sheet(ReebSpaceData &data, const int &sheet1Id, const int &sheet0Id, const int &biggerId)
Definition: ReebSpace.cpp:892
int compute3sheets(vector< vector< vector< int > > > &tetTriangles)
Definition: ReebSpace.cpp:453
const vector< int > * get3sheetVertexSegmentation() const
Definition: ReebSpace.h:164
int simplify(const double &simplificationThreshold, const SimplificationCriterion &criterion=rangeArea)
Definition: ReebSpace.h:856
int setTetList(const long long int *tetList)
Definition: ReebSpace.h:249
int connect3sheetTo1sheet(ReebSpaceData &data, const int &sheet3Id, const int &sheet1Id)
Definition: ReebSpace.cpp:737
vector< FiberSurface::Vertex > fiberSurfaceVertexList_
Definition: ReebSpace.h:426
int threadNumber_
Definition: Debug.h:108
vector< Sheet0 > sheet0List_
Definition: ReebSpace.h:407