+void BLSURFPlugin_Hypothesis::LoadFacesPeriodicity(std::istream & load){
+
+ bool isOK = true;
+
+ std::string periodicitySeparator;
+ TEntry shape1Entry;
+ TEntry shape2Entry;
+
+ _facesPeriodicityVector.clear();
+
+ while (isOK) {
+ isOK = static_cast<bool>(load >> periodicitySeparator); // __BEGIN_PERIODICITY_DESCRIPTION__
+ MESSAGE("periodicitySeparator 1: " <<periodicitySeparator);
+ TFacesPeriodicity *periodicity_i = new TFacesPeriodicity();
+ if (periodicitySeparator == "__FACES_PERIODICITY_END__")
+ break; // __FACES_PERIODICITY_END__
+ if (periodicitySeparator != "__BEGIN_PERIODICITY_DESCRIPTION__"){
+ MESSAGE("//" << periodicitySeparator << "//");
+ throw std::exception();
+ }
+
+ while (isOK) {
+ isOK = static_cast<bool>(load >> periodicitySeparator);
+ MESSAGE("periodicitySeparator 2: " <<periodicitySeparator);
+ if (periodicitySeparator == "__END_PERIODICITY_DESCRIPTION__") {
+
+ periodicity_i->first = shape1Entry;
+ periodicity_i->second = shape2Entry;
+
+ _facesPeriodicityVector.push_back(*periodicity_i);
+
+ break; // __END_PERIODICITY_DESCRIPTION__
+ }
+
+ if (periodicitySeparator == "__BEGIN_ENTRY1__") { // __BEGIN_ENTRY1__
+ isOK = static_cast<bool>(load >> shape1Entry);
+ isOK = static_cast<bool>(load >> periodicitySeparator); // __END_ENTRY1__
+ if (periodicitySeparator != "__END_ENTRY1__")
+ throw std::exception();
+ MESSAGE("shape1Entry: " <<shape1Entry);
+ }
+
+ if (periodicitySeparator == "__BEGIN_ENTRY2__") { // __BEGIN_ENTRY2__
+ isOK = static_cast<bool>(load >> shape2Entry);
+ isOK = static_cast<bool>(load >> periodicitySeparator); // __END_ENTRY2__
+ if (periodicitySeparator != "__END_ENTRY2__")
+ throw std::exception();
+ MESSAGE("shape2Entry: " <<shape2Entry);
+ }
+ }
+ }
+}
+
+
+void BLSURFPlugin_Hypothesis::LoadEdgesPeriodicity(std::istream & load){
+
+ bool isOK = true;
+
+ std::string periodicitySeparator;
+ TEntry theFace1Entry;
+ TEntry theEdge1Entry;
+ TEntry theFace2Entry;
+ TEntry theEdge2Entry;
+ int edge_orientation = 0;
+
+ _edgesPeriodicityVector.clear();
+
+ while (isOK) {
+ isOK = static_cast<bool>(load >> periodicitySeparator); // __BEGIN_PERIODICITY_DESCRIPTION__
+ MESSAGE("periodicitySeparator 1: " <<periodicitySeparator);
+ TEdgePeriodicity *periodicity_i = new TEdgePeriodicity();
+ if (periodicitySeparator == "__EDGES_PERIODICITY_END__")
+ break; // __EDGES_PERIODICITY_END__
+ if (periodicitySeparator != "__BEGIN_PERIODICITY_DESCRIPTION__"){
+ MESSAGE("//" << periodicitySeparator << "//");
+ throw std::exception();
+ }
+
+ while (isOK) {
+ isOK = static_cast<bool>(load >> periodicitySeparator);
+ MESSAGE("periodicitySeparator 2: " <<periodicitySeparator);
+ if (periodicitySeparator == "__END_PERIODICITY_DESCRIPTION__") {
+
+ periodicity_i->theFace1Entry = theFace1Entry;
+ periodicity_i->theEdge1Entry = theEdge1Entry;
+ periodicity_i->theFace2Entry = theFace2Entry;
+ periodicity_i->theEdge2Entry = theEdge2Entry;
+ periodicity_i->edge_orientation = edge_orientation;
+
+ _edgesPeriodicityVector.push_back(*periodicity_i);
+
+ break; // __END_PERIODICITY_DESCRIPTION__
+ }
+
+ if (periodicitySeparator == "__BEGIN_FACE1__") { // __BEGIN_FACE1__
+ isOK = static_cast<bool>(load >> theFace1Entry);
+ MESSAGE("//" << theFace1Entry << "//");
+ isOK = static_cast<bool>(load >> periodicitySeparator); // __END_FACE1__
+ if (periodicitySeparator != "__END_FACE1__"){
+ MESSAGE("//" << periodicitySeparator << "//");
+ throw std::exception();
+ }
+ MESSAGE("theFace1Entry: " <<theFace1Entry);
+ }
+
+ if (periodicitySeparator == "__BEGIN_EDGE1__") { // __BEGIN_EDGE1__
+ isOK = static_cast<bool>(load >> theEdge1Entry);
+ isOK = static_cast<bool>(load >> periodicitySeparator); // __END_EDGE1__
+ if (periodicitySeparator != "__END_EDGE1__")
+ throw std::exception();
+ MESSAGE("theEdge1Entry: " <<theEdge1Entry);
+ }
+
+ if (periodicitySeparator == "__BEGIN_FACE2__") { // __BEGIN_FACE2__
+ isOK = static_cast<bool>(load >> theFace2Entry);
+ isOK = static_cast<bool>(load >> periodicitySeparator); // __END_FACE2__
+ if (periodicitySeparator != "__END_FACE2__")
+ throw std::exception();
+ MESSAGE("theFace2Entry: " <<theFace2Entry);
+ }
+
+ if (periodicitySeparator == "__BEGIN_EDGE2__") { // __BEGIN_EDGE2__
+ isOK = static_cast<bool>(load >> theEdge2Entry);
+ isOK = static_cast<bool>(load >> periodicitySeparator); // __END_EDGE2__
+ if (periodicitySeparator != "__END_EDGE2__")
+ throw std::exception();
+ MESSAGE("theEdge2Entry: " <<theEdge2Entry);
+ }
+
+ if (periodicitySeparator == "__BEGIN_EDGE_ORIENTATION__") { // __BEGIN_EDGE_ORIENTATION__
+ isOK = static_cast<bool>(load >> edge_orientation);
+ isOK = static_cast<bool>(load >> periodicitySeparator); // __END_EDGE_ORIENTATION__
+ if (periodicitySeparator != "__END_EDGE_ORIENTATION__")
+ throw std::exception();
+ MESSAGE("edge_orientation: " <<edge_orientation);
+ }
+ }
+ }
+}
+
+void BLSURFPlugin_Hypothesis::LoadVerticesPeriodicity(std::istream & load){
+
+ bool isOK = true;
+
+ std::string periodicitySeparator;
+ TEntry theEdge1Entry;
+ TEntry theVertex1Entry;
+ TEntry theEdge2Entry;
+ TEntry theVertex2Entry;
+
+ _verticesPeriodicityVector.clear();
+
+ while (isOK) {
+ isOK = static_cast<bool>(load >> periodicitySeparator); // __BEGIN_PERIODICITY_DESCRIPTION__
+ MESSAGE("periodicitySeparator 1: " <<periodicitySeparator);
+ TVertexPeriodicity *periodicity_i = new TVertexPeriodicity();
+ if (periodicitySeparator == "__VERTICES_PERIODICITY_END__")
+ break; // __VERTICES_PERIODICITY_END__
+ if (periodicitySeparator != "__BEGIN_PERIODICITY_DESCRIPTION__"){
+ MESSAGE("//" << periodicitySeparator << "//");
+ throw std::exception();
+ }
+
+ while (isOK) {
+ isOK = static_cast<bool>(load >> periodicitySeparator);
+ MESSAGE("periodicitySeparator 2: " <<periodicitySeparator);
+ if (periodicitySeparator == "__END_PERIODICITY_DESCRIPTION__") {
+
+ periodicity_i->theEdge1Entry = theEdge1Entry;
+ periodicity_i->theVertex1Entry = theVertex1Entry;
+ periodicity_i->theEdge2Entry = theEdge2Entry;
+ periodicity_i->theVertex2Entry = theVertex2Entry;
+
+ _verticesPeriodicityVector.push_back(*periodicity_i);
+
+ break; // __END_PERIODICITY_DESCRIPTION__
+ }
+
+ if (periodicitySeparator == "__BEGIN_EDGE1__") { // __BEGIN_EDGE1__
+ isOK = static_cast<bool>(load >> theEdge1Entry);
+ isOK = static_cast<bool>(load >> periodicitySeparator); // __END_EDGE1__
+ if (periodicitySeparator != "__END_EDGE1__")
+ throw std::exception();
+ MESSAGE("theEdge1Entry: " <<theEdge1Entry);
+ }
+
+ if (periodicitySeparator == "__BEGIN_VERTEX1__") { // __BEGIN_VERTEX1__
+ isOK = static_cast<bool>(load >> theVertex1Entry);
+ isOK = static_cast<bool>(load >> periodicitySeparator); // __END_VERTEX1__
+ if (periodicitySeparator != "__END_VERTEX1__")
+ throw std::exception();
+ MESSAGE("theVertex1Entry: " <<theVertex1Entry);
+ }
+
+ if (periodicitySeparator == "__BEGIN_EDGE2__") { // __BEGIN_EDGE2__
+ isOK = static_cast<bool>(load >> theEdge2Entry);
+ isOK = static_cast<bool>(load >> periodicitySeparator); // __END_EDGE2__
+ if (periodicitySeparator != "__END_EDGE2__")
+ throw std::exception();
+ MESSAGE("theEdge2Entry: " <<theEdge2Entry);
+ }
+
+ if (periodicitySeparator == "__BEGIN_VERTEX2__") { // __BEGIN_VERTEX2__
+ isOK = static_cast<bool>(load >> theVertex2Entry);
+ isOK = static_cast<bool>(load >> periodicitySeparator); // __END_VERTEX2__
+ if (periodicitySeparator != "__END_VERTEX2__")
+ throw std::exception();
+ MESSAGE("theVertex2Entry: " <<theVertex2Entry);
+ }
+ }
+ }
+}
+
+void BLSURFPlugin_Hypothesis::LoadPreCADPeriodicity(std::istream & load, const char* shapeType) {
+
+ bool isOK = true;
+
+ std::string periodicitySeparator;
+ TEntry shape1Entry;
+ TEntry shape2Entry;
+ std::vector<std::string> theSourceVerticesEntries;
+ std::vector<std::string> theTargetVerticesEntries;
+
+ bool hasSourceVertices = false;
+ bool hasTargetVertices = false;
+
+ if ( shapeType && strcmp( shapeType, "FACES") == 0 )
+ _preCadFacesPeriodicityVector.clear();
+ else
+ _preCadEdgesPeriodicityVector.clear();
+
+
+ while (isOK) {
+ isOK = static_cast<bool>(load >> periodicitySeparator); // __BEGIN_PERIODICITY_DESCRIPTION__
+ MESSAGE("periodicitySeparator 1: " <<periodicitySeparator);
+ TPreCadPeriodicity *periodicity_i = new TPreCadPeriodicity();
+// MESSAGE("periodicitySeparator: " <<periodicitySeparator);
+ std::string endSeparator = "__PRECAD_" + std::string(shapeType) + "_PERIODICITY_END__";
+ if (periodicitySeparator == endSeparator)
+ break; // __PRECAD_FACES_PERIODICITY_END__
+ if (periodicitySeparator != "__BEGIN_PERIODICITY_DESCRIPTION__"){
+ MESSAGE("//" << endSeparator << "//");
+ MESSAGE("//" << periodicitySeparator << "//");
+ throw std::exception();
+ }
+
+ while (isOK) {
+ isOK = static_cast<bool>(load >> periodicitySeparator);
+ MESSAGE("periodicitySeparator 2: " <<periodicitySeparator);
+ if (periodicitySeparator == "__END_PERIODICITY_DESCRIPTION__") {
+
+ periodicity_i->shape1Entry = shape1Entry;
+ periodicity_i->shape2Entry = shape2Entry;
+
+ MESSAGE("theSourceVerticesEntries.size(): " << theSourceVerticesEntries.size());
+ MESSAGE("theTargetVerticesEntries.size(): " << theTargetVerticesEntries.size());
+
+ if (hasSourceVertices)
+ periodicity_i->theSourceVerticesEntries = theSourceVerticesEntries;
+ if (hasTargetVertices)
+ periodicity_i->theTargetVerticesEntries = theTargetVerticesEntries;
+
+ if ( shapeType && strcmp( shapeType, "FACES" ))
+ _preCadFacesPeriodicityVector.push_back(*periodicity_i);
+ else
+ _preCadEdgesPeriodicityVector.push_back(*periodicity_i);
+
+ theSourceVerticesEntries.clear();
+ theTargetVerticesEntries.clear();
+ hasSourceVertices = false;
+ hasTargetVertices = false;
+ break; // __END_PERIODICITY_DESCRIPTION__
+ }
+
+ if (periodicitySeparator == "__BEGIN_ENTRY1__") { // __BEGIN_ENTRY1__
+ isOK = static_cast<bool>(load >> shape1Entry);
+ isOK = static_cast<bool>(load >> periodicitySeparator); // __END_ENTRY1__
+ if (periodicitySeparator != "__END_ENTRY1__")
+ throw std::exception();
+ MESSAGE("shape1Entry: " <<shape1Entry);
+ }
+
+ if (periodicitySeparator == "__BEGIN_ENTRY2__") { // __BEGIN_ENTRY2__
+ isOK = static_cast<bool>(load >> shape2Entry);
+ isOK = static_cast<bool>(load >> periodicitySeparator); // __END_ENTRY2__
+ if (periodicitySeparator != "__END_ENTRY2__")
+ throw std::exception();
+ MESSAGE("shape2Entry: " <<shape2Entry);
+ }
+
+ if (periodicitySeparator == "__BEGIN_SOURCE_VERTICES_LIST__") { // __BEGIN_SOURCE_VERTICES_LIST__
+ hasSourceVertices = true;
+ while (isOK && (periodicitySeparator != "__END_SOURCE_VERTICES_LIST__")) {
+ isOK = static_cast<bool>(load >> periodicitySeparator);
+ if (periodicitySeparator != "__END_SOURCE_VERTICES_LIST__") {
+ theSourceVerticesEntries.push_back(periodicitySeparator);
+ MESSAGE("theSourceVerticesEntries: " <<periodicitySeparator);
+ }
+ }
+ }
+
+ if (periodicitySeparator == "__BEGIN_TARGET_VERTICES_LIST__") { // __BEGIN_TARGET_VERTICES_LIST__
+ hasTargetVertices = true;
+ while (isOK && (periodicitySeparator != "__END_TARGET_VERTICES_LIST__")) {
+ isOK = static_cast<bool>(load >> periodicitySeparator);
+ if (periodicitySeparator != "__END_TARGET_VERTICES_LIST__") {
+ theTargetVerticesEntries.push_back(periodicitySeparator);
+ MESSAGE("theTargetVerticesEntries: " <<periodicitySeparator);
+ }
+ }
+ }
+ }
+ }
+}
+