From 32464de4a56feb9291c6e5626eec31811aaa267f Mon Sep 17 00:00:00 2001 From: Guillaume Damiand Date: Sun, 28 Dec 2014 17:15:02 +0100 Subject: [PATCH] Update demo for Menger, Sierpinski Carpet and Sierpinski Triangle. --- .../demo/Linear_cell_complex/CreateMenger.ui | 12 +- .../CreateSierpinskiCarpet.ui | 130 +-------- .../CreateSierpinskiTriangle.ui | 16 +- .../demo/Linear_cell_complex/MainWindow.cpp | 276 +++++++++++++----- .../demo/Linear_cell_complex/MainWindow.h | 30 +- .../demo/Linear_cell_complex/Viewer.cpp | 10 +- 6 files changed, 253 insertions(+), 221 deletions(-) diff --git a/Linear_cell_complex/demo/Linear_cell_complex/CreateMenger.ui b/Linear_cell_complex/demo/Linear_cell_complex/CreateMenger.ui index 7a91e819438..e4c54b0b491 100644 --- a/Linear_cell_complex/demo/Linear_cell_complex/CreateMenger.ui +++ b/Linear_cell_complex/demo/Linear_cell_complex/CreateMenger.ui @@ -6,7 +6,7 @@ 0 0 - 264 + 288 106 @@ -32,7 +32,7 @@ - 150 + 170 10 51 27 @@ -59,7 +59,7 @@ 23 15 - 121 + 141 17 @@ -70,9 +70,9 @@ - 20 + 0 40 - 241 + 291 18 @@ -80,7 +80,7 @@ Update attributes during construction - true + false diff --git a/Linear_cell_complex/demo/Linear_cell_complex/CreateSierpinskiCarpet.ui b/Linear_cell_complex/demo/Linear_cell_complex/CreateSierpinskiCarpet.ui index 3b78e34c5cc..f55db6837b8 100644 --- a/Linear_cell_complex/demo/Linear_cell_complex/CreateSierpinskiCarpet.ui +++ b/Linear_cell_complex/demo/Linear_cell_complex/CreateSierpinskiCarpet.ui @@ -7,7 +7,7 @@ 0 0 325 - 151 + 119 @@ -16,8 +16,8 @@ - 150 - 120 + 80 + 80 171 32 @@ -34,7 +34,7 @@ 20 13 - 181 + 201 16 @@ -45,130 +45,30 @@ - 200 + 230 10 47 24 - - - - 10 - 30 - 161 - 81 - - - - Update Attributes - - - - - 10 - 20 - 97 - 18 - - - - Never - - - - - - 10 - 40 - 141 - 18 - - - - During construction - - - true - - - - - - 10 - 60 - 141 - 18 - - - - After construction - - - - + - false + true - 180 - 30 - 91 - 61 - - - - Method - - - false - - - - - 10 - 20 - 81 - 18 - - - - std map - - - true - - - - - - 10 - 40 - 81 - 18 - - - - traversal - - - - - - false - - - - 0 - 120 - 151 - 32 + 20 + 50 + 291 + 20 - Compute geometry + Update attributes during construction + + + false diff --git a/Linear_cell_complex/demo/Linear_cell_complex/CreateSierpinskiTriangle.ui b/Linear_cell_complex/demo/Linear_cell_complex/CreateSierpinskiTriangle.ui index 2a4d77e5edd..2baca7651a1 100644 --- a/Linear_cell_complex/demo/Linear_cell_complex/CreateSierpinskiTriangle.ui +++ b/Linear_cell_complex/demo/Linear_cell_complex/CreateSierpinskiTriangle.ui @@ -6,7 +6,7 @@ 0 0 - 265 + 303 112 @@ -32,9 +32,9 @@ - 20 + 10 13 - 181 + 211 16 @@ -45,7 +45,7 @@ - 200 + 220 10 53 24 @@ -55,17 +55,17 @@ - 20 + 10 40 - 241 - 18 + 291 + 20 Update attributes during construction - true + false diff --git a/Linear_cell_complex/demo/Linear_cell_complex/MainWindow.cpp b/Linear_cell_complex/demo/Linear_cell_complex/MainWindow.cpp index fdcf2ba0504..d3f1fa184f4 100644 --- a/Linear_cell_complex/demo/Linear_cell_complex/MainWindow.cpp +++ b/Linear_cell_complex/demo/Linear_cell_complex/MainWindow.cpp @@ -111,7 +111,9 @@ void MainWindow::connect_actions () QObject::connect(dialogsierpinskicarpet.level, SIGNAL(valueChanged(int)), this, SLOT(onSierpinskiCarpetChangeLevel(int))); - QObject::connect(dialogsierpinskicarpet.never, SIGNAL(clicked(bool)), + QObject::connect(dialogsierpinskicarpet.updateAttributes, SIGNAL(clicked(bool)), + this, SLOT(onSierpinskiCarpetUpdateAttributes(bool))); +/* QObject::connect(dialogsierpinskicarpet.never, SIGNAL(clicked(bool)), this, SLOT(onSierpinskiCarpetNeverUpdateAttributes(bool))); QObject::connect(dialogsierpinskicarpet.during, SIGNAL(clicked(bool)), this, SLOT(onSierpinskiCarpetDuringConstructionUpdateAttributes(bool))); @@ -122,7 +124,7 @@ void MainWindow::connect_actions () QObject::connect(dialogsierpinskicarpet.traversal, SIGNAL(clicked(bool)), this, SLOT(onSierpinskiCarpetUpdateAttributesMethodTraversal(bool))); QObject::connect(dialogsierpinskicarpet.computeGeometry, SIGNAL(clicked(bool)), - this, SLOT(onSierpinskiCarpetComputeGeometry(bool))); + this, SLOT(onSierpinskiCarpetComputeGeometry(bool)));*/ QObject::connect(&dialogsierpinskicarpet, SIGNAL(accepted()), this, SLOT(onSierpinskiCarpetOk())); QObject::connect(&dialogsierpinskicarpet, SIGNAL(rejected()), @@ -157,6 +159,8 @@ void MainWindow::update_operations_entries(bool show) void MainWindow::onSceneChanged () { + QApplication::setOverrideCursor( Qt::WaitCursor ); + int mark = scene.lcc->get_new_mark (); scene.lcc->negate_mark (mark); @@ -183,9 +187,12 @@ void MainWindow::onSceneChanged () scene.lcc->negate_mark (mark); scene.lcc->free_mark (mark); + // statusBar()->showMessage (QString ("Update OpenGL lists"), DELAY_STATUSMSG); + viewer->sceneChanged (); statusMessage->setText (os.str().c_str ()); + QApplication::restoreOverrideCursor(); } void MainWindow::clear_all() @@ -414,6 +421,8 @@ void MainWindow::on_actionCreate_mesh_triggered () void MainWindow::onCreateMeshOk() { + QApplication::setOverrideCursor (Qt::WaitCursor); + #ifdef CGAL_PROFILE_LCC_DEMO CGAL::Timer timer; timer.start(); @@ -436,13 +445,16 @@ void MainWindow::onCreateMeshOk() <showMessage (QString ("mesh created"),DELAY_STATUSMSG); + statusBar ()->showMessage (QString ("Mesh created"),DELAY_STATUSMSG); + QApplication::restoreOverrideCursor (); emit (sceneChanged ()); } void MainWindow::on_actionSubdivide_triggered () { + QApplication::setOverrideCursor (Qt::WaitCursor); + #ifdef CGAL_PROFILE_LCC_DEMO CGAL::Timer timer; timer.start(); @@ -456,6 +468,7 @@ void MainWindow::on_actionSubdivide_triggered () <showMessage (QString ("Objects were subdivided"), DELAY_STATUSMSG); @@ -463,6 +476,8 @@ void MainWindow::on_actionSubdivide_triggered () void MainWindow::on_actionSubdivide_pqq_triggered () { + QApplication::setOverrideCursor (Qt::WaitCursor); + #ifdef CGAL_PROFILE_LCC_DEMO CGAL::Timer timer; timer.start(); @@ -476,6 +491,7 @@ void MainWindow::on_actionSubdivide_pqq_triggered () <showMessage (QString ("Objects were subdivided"), DELAY_STATUSMSG); @@ -498,6 +514,8 @@ void MainWindow::on_actionCompute_Voronoi_3D_triggered () if (fileName.isEmpty ()) return; + QApplication::setOverrideCursor (Qt::WaitCursor); + this->clear_all(); #ifdef CGAL_PROFILE_LCC_DEMO @@ -582,6 +600,7 @@ void MainWindow::on_actionCompute_Voronoi_3D_triggered () #endif init_all_new_volumes(); + QApplication::restoreOverrideCursor (); emit (sceneChanged ()); statusBar ()->showMessage (QString ("Voronoi 3D of points in ") + fileName, DELAY_STATUSMSG); @@ -597,6 +616,8 @@ void MainWindow::on_actionDual_3_triggered () return; } + QApplication::setOverrideCursor (Qt::WaitCursor); + #ifdef CGAL_PROFILE_LCC_DEMO CGAL::Timer timer; timer.start(); @@ -618,11 +639,14 @@ void MainWindow::on_actionDual_3_triggered () init_all_new_volumes(); statusBar ()->showMessage (QString ("Dual_3 computed"), DELAY_STATUSMSG); + QApplication::restoreOverrideCursor (); emit (sceneChanged ()); } void MainWindow::on_actionClose_volume_triggered() { + QApplication::setOverrideCursor (Qt::WaitCursor); + #ifdef CGAL_PROFILE_LCC_DEMO CGAL::Timer timer; timer.start(); @@ -639,6 +663,8 @@ void MainWindow::on_actionClose_volume_triggered() statusBar ()->showMessage (QString ("LCC already 3-closed"), DELAY_STATUSMSG); + QApplication::restoreOverrideCursor (); + #ifdef CGAL_PROFILE_LCC_DEMO timer.stop(); std::cout<<"Time to 3-close the current lcc: " @@ -652,6 +678,8 @@ void MainWindow::on_actionSew3_same_facets_triggered() int mymark = scene.lcc->get_new_mark(); mark_all_filled_and_visible_volumes(mymark); + QApplication::setOverrideCursor (Qt::WaitCursor); + #ifdef CGAL_PROFILE_LCC_DEMO CGAL::Timer timer; timer.start(); @@ -669,6 +697,8 @@ void MainWindow::on_actionSew3_same_facets_triggered() scene.lcc->free_mark(mymark); + QApplication::restoreOverrideCursor (); + #ifdef CGAL_PROFILE_LCC_DEMO timer.stop(); std::cout<<"Time to sew3 all same facets: " @@ -679,6 +709,7 @@ void MainWindow::on_actionSew3_same_facets_triggered() void MainWindow::on_actionUnsew3_all_triggered() { unsigned int nb=0; + QApplication::setOverrideCursor (Qt::WaitCursor); #ifdef CGAL_PROFILE_LCC_DEMO CGAL::Timer timer; @@ -700,6 +731,7 @@ void MainWindow::on_actionUnsew3_all_triggered() std::cout<<"Time to unsew3 all filled volumes: " < 0 ) { @@ -714,6 +746,8 @@ void MainWindow::on_actionUnsew3_all_triggered() void MainWindow::on_actionRemove_filled_volumes_triggered() { + QApplication::setOverrideCursor (Qt::WaitCursor); + #ifdef CGAL_PROFILE_LCC_DEMO CGAL::Timer timer; timer.start(); @@ -739,6 +773,7 @@ void MainWindow::on_actionRemove_filled_volumes_triggered() #endif recreate_whole_volume_list(); + QApplication::restoreOverrideCursor (); emit(sceneChanged()); statusBar()->showMessage @@ -748,6 +783,8 @@ void MainWindow::on_actionRemove_filled_volumes_triggered() void MainWindow::on_actionTriangulate_all_facets_triggered() { + QApplication::setOverrideCursor (Qt::WaitCursor); + #ifdef CGAL_PROFILE_LCC_DEMO CGAL::Timer timer; timer.start(); @@ -770,6 +807,7 @@ void MainWindow::on_actionTriangulate_all_facets_triggered() <showMessage (QString ("Facets of visible and filled volume(s) triangulated"), @@ -778,6 +816,8 @@ void MainWindow::on_actionTriangulate_all_facets_triggered() void MainWindow::on_actionMerge_all_volumes_triggered() { + QApplication::setOverrideCursor (Qt::WaitCursor); + #ifdef CGAL_PROFILE_LCC_DEMO CGAL::Timer timer; timer.start(); @@ -813,9 +853,10 @@ void MainWindow::on_actionMerge_all_volumes_triggered() recreate_whole_volume_list(); + QApplication::restoreOverrideCursor (); emit (sceneChanged ()); statusBar()->showMessage - (QString ("All volume(s) merged"), DELAY_STATUSMSG); + (QString ("Visible and filled volume(s) merged"), DELAY_STATUSMSG); } bool MainWindow::is_volume_in_list(LCC::Attribute_handle<3>::type ah) @@ -865,7 +906,8 @@ void MainWindow::update_volume_list_add(LCC::Attribute_handle<3>::type ah) QTableWidgetItem* attribHandle = new QTableWidgetItem; attribHandle->setData - (Qt::UserRole, reinterpret_cast(&scene.lcc->get_attribute<3>(ah))); + (Qt::UserRole, + reinterpret_cast(&scene.lcc->get_attribute<3>(ah))); volumeList->setItem(newRow,3,attribHandle); @@ -1169,6 +1211,8 @@ void MainWindow::onMengerCancel() recreate_whole_volume_list(); mengerVolumes.clear(); update_operations_entries(true); + statusBar()->showMessage (QString ("Menger sponge creation canceled"), + DELAY_STATUSMSG); emit(sceneChanged()); } @@ -1191,6 +1235,8 @@ void MainWindow::onMengerUpdateAttributes(bool newValue) void MainWindow::onMengerInc() { + QApplication::setOverrideCursor (Qt::WaitCursor); + #ifdef CGAL_PROFILE_LCC_DEMO CGAL::Timer timer; timer.start(); @@ -1292,13 +1338,21 @@ void MainWindow::onMengerInc() #ifdef CGAL_PROFILE_LCC_DEMO timer.stop(); - std::cout<<"Time to increase the level of menger sponge (" - <mengerLevel-1<<" -> "<mengerLevel<<"): " - <mengerLevel-1<<" -> "<mengerLevel<<", " + <<"attributes updated " + <<(mengerUpdateAttributes ? "DURING" : "AFTER") + << " construction: " + <is_valid() ); + QApplication::restoreOverrideCursor (); + statusBar()->showMessage(QString ("Menger sponge creation %1 -> %2"). + arg(this->mengerLevel-1).arg(this->mengerLevel), + DELAY_STATUSMSG); + emit(sceneChanged()); } @@ -1592,6 +1646,8 @@ void MainWindow::process_inter_slice(Dart_handle init, void MainWindow::onMengerDec() { + QApplication::setOverrideCursor (Qt::WaitCursor); + #ifdef CGAL_PROFILE_LCC_DEMO CGAL::Timer timer; timer.start(); @@ -1714,14 +1770,21 @@ void MainWindow::onMengerDec() #ifdef CGAL_PROFILE_LCC_DEMO timer.stop(); - std::cout<<"Time to decrease the level of menger sponge (" - <mengerLevel+1<<" -> "<mengerLevel<<"): " - <mengerLevel+1<<" -> "<mengerLevel<<", " + <<"attributes updated " + <<(mengerUpdateAttributes ? "DURING" : "AFTER") + << " construction: " + <showMessage (QString ("Menger Dec"),DELAY_STATUSMSG); + statusBar()->showMessage(QString ("Menger sponge creation %1 -> %2"). + arg(this->mengerLevel+1).arg(this->mengerLevel), + DELAY_STATUSMSG); + + QApplication::restoreOverrideCursor (); emit(sceneChanged()); } @@ -1731,14 +1794,18 @@ void MainWindow::onMengerDec() void MainWindow::on_actionCreate_Sierpinski_Carpet_triggered () { - neverUpdateAttributes = dialogsierpinskicarpet.never->isChecked(); + /*neverUpdateAttributes = dialogsierpinskicarpet.never->isChecked(); duringConstructionUpdateAttributes = dialogsierpinskicarpet.during->isChecked(); afterConstructionUpdateAttributes = dialogsierpinskicarpet.after->isChecked(); updateAttributesMethodStdMap = dialogsierpinskicarpet.stdmap->isChecked(); updateAttributesMethodTraversal = dialogsierpinskicarpet.traversal->isChecked(); - computeGeometry = false; // By default, the geometry will be computed after the construction - isComputableGeometry = true; + isComputableGeometry = true;*/ + + computeGeometry = false; + + sierpinskiCarpetUpdateAttributes + = dialogsierpinskicarpet.updateAttributes->isChecked(); dialogsierpinskicarpet.level->disconnect(this); @@ -1775,6 +1842,7 @@ void MainWindow::on_actionCreate_Sierpinski_Carpet_triggered () void MainWindow::onSierpinskiCarpetCancel() { + QApplication::setOverrideCursor (Qt::WaitCursor); for(std::vector::iterator it=sierpinskiCarpetSurfaces.begin(); it!=sierpinskiCarpetSurfaces.end(); ++it) { @@ -1784,6 +1852,7 @@ void MainWindow::onSierpinskiCarpetCancel() recreate_whole_volume_list(); sierpinskiCarpetSurfaces.clear(); update_operations_entries(true); + QApplication::restoreOverrideCursor (); emit(sceneChanged()); } @@ -1799,7 +1868,12 @@ void MainWindow::onSierpinskiCarpetChangeLevel(int newLevel) while ( newLevel < sierpinskiCarpetLevel ) onSierpinskiCarpetDec(); } -void MainWindow::onSierpinskiCarpetNeverUpdateAttributes(bool /*newValue*/) +void MainWindow::onSierpinskiCarpetUpdateAttributes(bool newValue) +{ + sierpinskiCarpetUpdateAttributes = newValue; +} + +/*void MainWindow::onSierpinskiCarpetNeverUpdateAttributes(bool newValue) { if (afterConstructionUpdateAttributes) { @@ -1811,7 +1885,7 @@ void MainWindow::onSierpinskiCarpetNeverUpdateAttributes(bool /*newValue*/) afterConstructionUpdateAttributes = false; } -void MainWindow::onSierpinskiCarpetDuringConstructionUpdateAttributes(bool /*newValue*/) +void MainWindow::onSierpinskiCarpetDuringConstructionUpdateAttributes(bool newValue) { if (afterConstructionUpdateAttributes) { @@ -1823,7 +1897,7 @@ void MainWindow::onSierpinskiCarpetDuringConstructionUpdateAttributes(bool /*new afterConstructionUpdateAttributes = false; } -void MainWindow::onSierpinskiCarpetAfterConstructionUpdateAttributes(bool /*newValue*/) +void MainWindow::onSierpinskiCarpetAfterConstructionUpdateAttributes(bool newValue) { if (!afterConstructionUpdateAttributes) { @@ -1835,19 +1909,19 @@ void MainWindow::onSierpinskiCarpetAfterConstructionUpdateAttributes(bool /*newV afterConstructionUpdateAttributes = true; } -void MainWindow::onSierpinskiCarpetUpdateAttributesMethodStdMap(bool /*newValue*/) +void MainWindow::onSierpinskiCarpetUpdateAttributesMethodStdMap(bool newValue) { updateAttributesMethodStdMap = true; updateAttributesMethodTraversal = false; } -void MainWindow::onSierpinskiCarpetUpdateAttributesMethodTraversal(bool /*newValue*/) +void MainWindow::onSierpinskiCarpetUpdateAttributesMethodTraversal(bool newValue) { updateAttributesMethodStdMap = false; updateAttributesMethodTraversal = true; } -void MainWindow::onSierpinskiCarpetComputeGeometry(bool /*newValue*/) +void MainWindow::onSierpinskiCarpetComputeGeometry(bool newValue) { sierpinski_carpet_compute_geometry(); @@ -1855,10 +1929,12 @@ void MainWindow::onSierpinskiCarpetComputeGeometry(bool /*newValue*/) dialogsierpinskicarpet.computeGeometry->setEnabled(false); emit(sceneChanged()); -} +}*/ void MainWindow::onSierpinskiCarpetInc() { + QApplication::setOverrideCursor (Qt::WaitCursor); + #ifdef CGAL_PROFILE_LCC_DEMO CGAL::Timer timer; timer.start(); @@ -1866,14 +1942,14 @@ void MainWindow::onSierpinskiCarpetInc() this->sierpinskiCarpetLevel++; - if (computeGeometry) +/* if (computeGeometry) { // Here case where the geometry could be computed after the construction, but it was not updated. computeGeometry = false; dialogsierpinskicarpet.computeGeometry->setEnabled(false); // => geometry will not be computed later. isComputableGeometry = false; - } + }*/ std::vector edges; nbfacesinit = sierpinskiCarpetSurfaces.size(); @@ -1918,7 +1994,7 @@ void MainWindow::onSierpinskiCarpetInc() (scene.lcc)->free_mark(markEdges); (scene.lcc)->free_mark(markFaces); - if (afterConstructionUpdateAttributes) +/* if (afterConstructionUpdateAttributes) { if (updateAttributesMethodStdMap) { @@ -1935,7 +2011,7 @@ void MainWindow::onSierpinskiCarpetInc() } } } - } + }*/ for(std::size_t i = 0; i < edges.size(); i++) { @@ -1948,12 +2024,12 @@ void MainWindow::onSierpinskiCarpetInc() sierpinski_carpet_split_face_in_nine(sierpinskiCarpetSurfaces[i]); } - if (afterConstructionUpdateAttributes) + if (!sierpinskiCarpetUpdateAttributes) { sierpinski_carpet_update_geometry(); } - if (neverUpdateAttributes) +/* if (neverUpdateAttributes) { scene.lcc->correct_invalid_attributes(); @@ -1963,24 +2039,33 @@ void MainWindow::onSierpinskiCarpetInc() computeGeometry = true; dialogsierpinskicarpet.computeGeometry->setEnabled(true); } - } + }*/ #ifdef CGAL_PROFILE_LCC_DEMO timer.stop(); - std::cout<<"Time to increase the level of sierpinski carpet (" - <sierpinskiCarpetLevel-1<<" -> "<sierpinskiCarpetLevel<<") " - <<(duringConstructionUpdateAttributes ? "DURING" : "AFTER") << " construction update attributes: " - <sierpinskiCarpetLevel-1<<" -> " + <sierpinskiCarpetLevel<<", " + <<"attributes updated " + <<(sierpinskiCarpetUpdateAttributes ? "DURING" : "AFTER") + << " construction: " + <is_valid() ); + statusBar()->showMessage(QString ("Sierpinski carpet creation %1 -> %2"). + arg(this->sierpinskiCarpetLevel-1). + arg(this->sierpinskiCarpetLevel), + DELAY_STATUSMSG); + + QApplication::restoreOverrideCursor (); emit(sceneChanged()); } void MainWindow::sierpinski_carpet_update_geometry() { - if (updateAttributesMethodStdMap) +/* if (updateAttributesMethodStdMap) { for(std::size_t i = 0; i < new_darts.size(); i++) { @@ -1991,7 +2076,7 @@ void MainWindow::sierpinski_carpet_update_geometry() new_darts.clear(); } - if (updateAttributesMethodTraversal) + if (updateAttributesMethodTraversal)*/ { int markVertices = (scene.lcc)->get_new_mark(); @@ -2257,7 +2342,7 @@ void MainWindow::sierpinski_carpet_copy_attributes_and_embed_vertex void MainWindow::sierpinski_carpet_split_edge_in_three(Dart_handle dh) { - if (duringConstructionUpdateAttributes) + if (sierpinskiCarpetUpdateAttributes) { LCC::Point p1 = scene.lcc->point(dh); LCC::Point p2 = scene.lcc->point(scene.lcc->other_extremity(dh)); @@ -2276,7 +2361,7 @@ void MainWindow::sierpinski_carpet_split_edge_in_three(Dart_handle dh) { LCC::Point p3, p4; - if (afterConstructionUpdateAttributes && updateAttributesMethodStdMap) + /*if (afterConstructionUpdateAttributes && updateAttributesMethodStdMap) { LCC::Point p1 = dart_map[dh]; LCC::Point p2 = dart_map[scene.lcc->other_extremity(dh)]; @@ -2286,7 +2371,7 @@ void MainWindow::sierpinski_carpet_split_edge_in_three(Dart_handle dh) p3 = LCC::Traits::Construct_translated_point() (p1,v2); p4 = LCC::Traits::Construct_translated_point() (p1,v3); - } + }*/ Dart_handle d1= CGAL::insert_cell_0_in_cell_1(*(scene.lcc), @@ -2294,7 +2379,7 @@ void MainWindow::sierpinski_carpet_split_edge_in_three(Dart_handle dh) LCC::null_handle, false); - if (afterConstructionUpdateAttributes && updateAttributesMethodStdMap) + /*if (afterConstructionUpdateAttributes && updateAttributesMethodStdMap) { dart_map.insert(std::pair(d1, p4)); if (!(scene.lcc)->is_free(d1,2)) @@ -2302,7 +2387,7 @@ void MainWindow::sierpinski_carpet_split_edge_in_three(Dart_handle dh) dart_map.insert(std::pair((scene.lcc)->beta(d1,2,1), p4)); } new_darts.push_back((scene.lcc)->beta(dh,1)); - } + }*/ Dart_handle d2= CGAL::insert_cell_0_in_cell_1(*(scene.lcc), @@ -2310,7 +2395,7 @@ void MainWindow::sierpinski_carpet_split_edge_in_three(Dart_handle dh) LCC::null_handle, false); - if (afterConstructionUpdateAttributes && updateAttributesMethodStdMap) + /*if (afterConstructionUpdateAttributes && updateAttributesMethodStdMap) { dart_map.insert(std::pair(d2, p3)); if (!(scene.lcc)->is_free(d2,2)) @@ -2318,7 +2403,7 @@ void MainWindow::sierpinski_carpet_split_edge_in_three(Dart_handle dh) dart_map.insert(std::pair((scene.lcc)->beta(d2,2,1), p3)); } new_darts.push_back((scene.lcc)->beta(dh,1)); - } + }*/ } } @@ -2329,16 +2414,16 @@ void MainWindow::sierpinski_carpet_split_face_in_three(Dart_handle dh, CGAL::insert_cell_1_in_cell_2(*(scene.lcc), scene.lcc->beta(dh,1,1,1), scene.lcc->beta(dh,0,0), - duringConstructionUpdateAttributes); + sierpinskiCarpetUpdateAttributes); Dart_handle d2= CGAL::insert_cell_1_in_cell_2(*(scene.lcc), scene.lcc->beta(dh,1,1), scene.lcc->beta(dh,0), - duringConstructionUpdateAttributes); + sierpinskiCarpetUpdateAttributes); if ( removecenter ) { - CGAL::remove_cell(*scene.lcc,d2,duringConstructionUpdateAttributes); + CGAL::remove_cell(*scene.lcc,d2,sierpinskiCarpetUpdateAttributes); } else { @@ -2359,25 +2444,25 @@ void MainWindow::sierpinski_carpet_split_face_in_nine(Dart_handle dh) CGAL::insert_cell_1_in_cell_2(*(scene.lcc), d1, d2, - duringConstructionUpdateAttributes); + sierpinskiCarpetUpdateAttributes); - if (afterConstructionUpdateAttributes && updateAttributesMethodStdMap) + /*if (afterConstructionUpdateAttributes && updateAttributesMethodStdMap) { dart_map.insert(std::pair(e2, dart_map[d2])); dart_map.insert(std::pair((scene.lcc)->beta(e2,2), dart_map[d1])); - } + }*/ Dart_handle e1= CGAL::insert_cell_1_in_cell_2(*(scene.lcc), d3, d4, - duringConstructionUpdateAttributes); + sierpinskiCarpetUpdateAttributes); - if (afterConstructionUpdateAttributes && updateAttributesMethodStdMap) + /*if (afterConstructionUpdateAttributes && updateAttributesMethodStdMap) { dart_map.insert(std::pair(e1, dart_map[d4])); dart_map.insert(std::pair((scene.lcc)->beta(e1,2), dart_map[d3])); - } + }*/ sierpinskiCarpetSurfaces.push_back(e2); sierpinskiCarpetSurfaces.push_back(e1); @@ -2394,6 +2479,8 @@ void MainWindow::sierpinski_carpet_split_face_in_nine(Dart_handle dh) void MainWindow::onSierpinskiCarpetDec() { + QApplication::setOverrideCursor (Qt::WaitCursor); + #ifdef CGAL_PROFILE_LCC_DEMO CGAL::Timer timer; timer.start(); @@ -2412,7 +2499,8 @@ void MainWindow::onSierpinskiCarpetDec() std::vector vertices; // First we remove edges. - for ( std::vector::iterator itsurfaces=sierpinskiCarpetSurfaces.begin(); + for ( std::vector::iterator + itsurfaces=sierpinskiCarpetSurfaces.begin(); itsurfaces!=sierpinskiCarpetSurfaces.end(); ++itsurfaces) { Dart_handle dh = *itsurfaces; @@ -2429,16 +2517,17 @@ void MainWindow::onSierpinskiCarpetDec() for(std::size_t i = 0; i < edges.size(); i++) { CGAL::remove_cell(*scene.lcc, scene.lcc->beta(edges[i],0), - duringConstructionUpdateAttributes); + sierpinskiCarpetUpdateAttributes); CGAL::remove_cell(*scene.lcc, scene.lcc->beta(edges[i],1), - duringConstructionUpdateAttributes); + sierpinskiCarpetUpdateAttributes); CGAL::remove_cell(*scene.lcc, edges[i], - duringConstructionUpdateAttributes); + sierpinskiCarpetUpdateAttributes); } edges.clear(); // Lastly we remove vertices. - for ( std::vector::iterator itsurfaces=sierpinskiCarpetSurfaces.begin(); + for ( std::vector::iterator + itsurfaces=sierpinskiCarpetSurfaces.begin(); itsurfaces!=sierpinskiCarpetSurfaces.end(); ++itsurfaces) { Dart_handle dh = scene.lcc->beta(*itsurfaces,1); @@ -2461,7 +2550,8 @@ void MainWindow::onSierpinskiCarpetDec() } (scene.lcc)->negate_mark(markSurfaces); - for ( std::vector::iterator itsurfaces=sierpinskiCarpetSurfaces.begin(); + for ( std::vector::iterator + itsurfaces=sierpinskiCarpetSurfaces.begin(); itsurfaces!=sierpinskiCarpetSurfaces.end(); ++itsurfaces) { Dart_handle dh = scene.lcc->beta(*itsurfaces,1); @@ -2482,28 +2572,37 @@ void MainWindow::onSierpinskiCarpetDec() for(std::size_t i = 0; i < vertices.size(); i++) { - CGAL::remove_cell(*scene.lcc, vertices[i], duringConstructionUpdateAttributes); + CGAL::remove_cell(*scene.lcc, vertices[i], + sierpinskiCarpetUpdateAttributes); } vertices.clear(); (scene.lcc)->free_mark(markSurfaces); (scene.lcc)->free_mark(markVertices); - if (!duringConstructionUpdateAttributes) + if (!sierpinskiCarpetUpdateAttributes) { scene.lcc->correct_invalid_attributes(); } #ifdef CGAL_PROFILE_LCC_DEMO timer.stop(); - std::cout<<"Time to decrease the level of sierpinski carpet (" - <sierpinskiCarpetLevel+1<<" -> "<sierpinskiCarpetLevel<<"): " - <sierpinskiCarpetLevel+1<<" -> " + <sierpinskiCarpetLevel<<", " + <<"attributes updated " + <<(sierpinskiCarpetUpdateAttributes ? "DURING" : "AFTER") + << " construction: " + <showMessage (QString ("Menger Dec"),DELAY_STATUSMSG); + statusBar()->showMessage(QString ("Sierpinski carpet creation %1 -> %2"). + arg(this->sierpinskiCarpetLevel+1). + arg(this->sierpinskiCarpetLevel), + DELAY_STATUSMSG); emit(sceneChanged()); } @@ -2581,6 +2680,8 @@ void MainWindow::onSierpinskiTriangleUpdateAttributes(bool newValue) void MainWindow::onSierpinskiTriangleInc() { + QApplication::setOverrideCursor (Qt::WaitCursor); + #ifdef CGAL_PROFILE_LCC_DEMO CGAL::Timer timer; timer.start(); @@ -2662,13 +2763,21 @@ void MainWindow::onSierpinskiTriangleInc() #ifdef CGAL_PROFILE_LCC_DEMO timer.stop(); - std::cout<<"Time to increase the level of sierpinski triangle (" - <sierpinskiTriangleLevel-1<<" -> "<sierpinskiTriangleLevel<<") " - <<(sierpinskiTriangleUpdateAttributes ? "DURING" : "AFTER") << " construction update attributes: " - <sierpinskiTriangleLevel-1<<" -> " + <sierpinskiTriangleLevel<<", " + <<"attributes updated " + <<(sierpinskiTriangleUpdateAttributes ? "DURING" : "AFTER") + << " construction: " + <is_valid() ); + statusBar()->showMessage(QString ("Sierpinski triangle creation %1 -> %2"). + arg(this->sierpinskiTriangleLevel-1). + arg(this->sierpinskiTriangleLevel), + DELAY_STATUSMSG); + QApplication::restoreOverrideCursor (); emit(sceneChanged()); } @@ -2739,6 +2848,8 @@ void MainWindow::sierpinski_triangle_split_face_in_four(Dart_handle dh, bool rem void MainWindow::onSierpinskiTriangleDec() { + QApplication::setOverrideCursor( Qt::WaitCursor ); + #ifdef CGAL_PROFILE_LCC_DEMO CGAL::Timer timer; timer.start(); @@ -2775,7 +2886,8 @@ void MainWindow::onSierpinskiTriangleDec() std::vector vertices; // Now we remove edges. - for ( std::vector::iterator itsurfaces=sierpinskiTriangleSurfaces.begin(); + for ( std::vector::iterator + itsurfaces=sierpinskiTriangleSurfaces.begin(); itsurfaces!=sierpinskiTriangleSurfaces.end(); ++itsurfaces) { Dart_handle dh = *itsurfaces; @@ -2789,12 +2901,14 @@ void MainWindow::onSierpinskiTriangleDec() for(std::size_t i = 0; i < edges.size(); i++) { - CGAL::remove_cell(*scene.lcc, edges[i], duringConstructionUpdateAttributes); + CGAL::remove_cell(*scene.lcc, edges[i], + sierpinskiTriangleUpdateAttributes); } edges.clear(); // Lastly we remove vertices. - for ( std::vector::iterator itsurfaces=sierpinskiTriangleSurfaces.begin(); + for ( std::vector::iterator + itsurfaces=sierpinskiTriangleSurfaces.begin(); itsurfaces!=sierpinskiTriangleSurfaces.end(); ++itsurfaces) { Dart_handle dh = scene.lcc->beta(*itsurfaces,1); @@ -2818,7 +2932,8 @@ void MainWindow::onSierpinskiTriangleDec() } (scene.lcc)->negate_mark(markSurfaces); - for ( std::vector::iterator itsurfaces=sierpinskiTriangleSurfaces.begin(); + for ( std::vector::iterator + itsurfaces=sierpinskiTriangleSurfaces.begin(); itsurfaces!=sierpinskiTriangleSurfaces.end(); ++itsurfaces) { Dart_handle dh = scene.lcc->beta(*itsurfaces,1); @@ -2838,7 +2953,8 @@ void MainWindow::onSierpinskiTriangleDec() for(std::size_t i = 0; i < vertices.size(); i++) { - CGAL::remove_cell(*scene.lcc, vertices[i], duringConstructionUpdateAttributes); + CGAL::remove_cell(*scene.lcc, vertices[i], + sierpinskiTriangleUpdateAttributes); } vertices.clear(); @@ -2852,14 +2968,22 @@ void MainWindow::onSierpinskiTriangleDec() #ifdef CGAL_PROFILE_LCC_DEMO timer.stop(); - std::cout<<"Time to decrease the level of sierpinski triangle (" - <sierpinskiTriangleLevel+1<<" -> "<sierpinskiTriangleLevel<<"): " - <sierpinskiTriangleLevel+1<<" -> " + <sierpinskiTriangleLevel<<", " + <<"attributes updated " + <<(sierpinskiTriangleUpdateAttributes ? "DURING" : "AFTER") + << " construction: " + <showMessage(QString ("Sierpinski triangle creation %1 -> %2"). + arg(this->sierpinskiTriangleLevel+1). + arg(this->sierpinskiTriangleLevel), + DELAY_STATUSMSG); + QApplication::restoreOverrideCursor (); - // statusBar ()->showMessage (QString ("Sirpinski Triangle Dec"),DELAY_STATUSMSG); emit(sceneChanged()); } diff --git a/Linear_cell_complex/demo/Linear_cell_complex/MainWindow.h b/Linear_cell_complex/demo/Linear_cell_complex/MainWindow.h index fada9bb8cc5..aefe94b1f3b 100644 --- a/Linear_cell_complex/demo/Linear_cell_complex/MainWindow.h +++ b/Linear_cell_complex/demo/Linear_cell_complex/MainWindow.h @@ -63,7 +63,8 @@ public: { setupUi(this); } }; -class DialogSierpinskiCarpet : public QDialog, public Ui::createSierpinskiCarpet +class DialogSierpinskiCarpet : public QDialog, + public Ui::createSierpinskiCarpet { Q_OBJECT @@ -72,7 +73,8 @@ public: { setupUi(this); } }; -class DialogSierpinskiTriangle : public QDialog, public Ui::createSierpinskiTriangle +class DialogSierpinskiTriangle : public QDialog, + public Ui::createSierpinskiTriangle { Q_OBJECT @@ -158,12 +160,13 @@ public slots: void onMengerUpdateAttributes(bool); void onSierpinskiCarpetChangeLevel(int); - void onSierpinskiCarpetNeverUpdateAttributes(bool); +/* void onSierpinskiCarpetNeverUpdateAttributes(bool); void onSierpinskiCarpetDuringConstructionUpdateAttributes(bool); void onSierpinskiCarpetAfterConstructionUpdateAttributes(bool); void onSierpinskiCarpetUpdateAttributesMethodStdMap(bool); void onSierpinskiCarpetUpdateAttributesMethodTraversal(bool); - void onSierpinskiCarpetComputeGeometry(bool); + void onSierpinskiCarpetComputeGeometry(bool);*/ + void onSierpinskiCarpetUpdateAttributes(bool); void onSierpinskiCarpetOk(); void onSierpinskiCarpetCancel(); void onSierpinskiCarpetInc(); @@ -211,16 +214,20 @@ protected: std::vector& faces, int markVols); - void sierpinski_carpet_copy_attributes_and_embed_vertex(Dart_handle dh, LCC::Point& p); + void sierpinski_carpet_copy_attributes_and_embed_vertex(Dart_handle dh, + LCC::Point& p); void sierpinski_carpet_update_geometry(); void sierpinski_carpet_compute_geometry(); - void sierpinski_carpet_compute_4x4_geometry_matrix(LCC::Point p[4][4], LCC::Point& p00, LCC::Point& p03, LCC::Point& p33, LCC::Point& p30); + void sierpinski_carpet_compute_4x4_geometry_matrix(LCC::Point p[4][4], + LCC::Point& p00, LCC::Point& p03, LCC::Point& p33, LCC::Point& p30); void sierpinski_carpet_split_edge_in_three(Dart_handle dh); - void sierpinski_carpet_split_face_in_three(Dart_handle dh, bool removecenter); + void sierpinski_carpet_split_face_in_three(Dart_handle dh, + bool removecenter); void sierpinski_carpet_split_face_in_nine(Dart_handle dh); void sierpinski_triangle_split_edge_in_two(Dart_handle dh); - void sierpinski_triangle_split_face_in_four(Dart_handle dh, bool removecenter); + void sierpinski_triangle_split_face_in_four(Dart_handle dh, + bool removecenter); Scene scene; @@ -237,13 +244,14 @@ protected: int sierpinskiCarpetLevel; std::size_t nbfacesinit; - bool neverUpdateAttributes; + bool sierpinskiCarpetUpdateAttributes; + bool computeGeometry; + /*bool neverUpdateAttributes; bool duringConstructionUpdateAttributes; bool afterConstructionUpdateAttributes; bool updateAttributesMethodStdMap; bool updateAttributesMethodTraversal; - bool computeGeometry; - bool isComputableGeometry; + bool isComputableGeometry;*/ std::vector sierpinskiCarpetSurfaces; // utilisés seulement lorsque pas de mise à jour d'attributs std::map dart_map; diff --git a/Linear_cell_complex/demo/Linear_cell_complex/Viewer.cpp b/Linear_cell_complex/demo/Linear_cell_complex/Viewer.cpp index 4f9454497b5..2840bb5b4f9 100644 --- a/Linear_cell_complex/demo/Linear_cell_complex/Viewer.cpp +++ b/Linear_cell_complex/demo/Linear_cell_complex/Viewer.cpp @@ -188,34 +188,34 @@ void Viewer::drawAllVertices() void Viewer::initDraw() { //Compile drawFacet - std::cout << "Compile Display Lists : Faces, " << std::flush; + // std::cout << "Compile Display Lists : Faces, " << std::flush; m_dlFaces = ::glGenLists(1); ::glNewList(m_dlFaces, GL_COMPILE); drawAllFaces(false); ::glEndList(); //Compile drawFacet with flat shading - std::cout << "Faces (flat shading), " << std::flush; + // std::cout << "Faces (flat shading), " << std::flush; m_dlFacesFlat = ::glGenLists(1); ::glNewList(m_dlFacesFlat, GL_COMPILE); drawAllFaces(true); ::glEndList(); //Compile drawEdge - std::cout << "edges, " << std::flush; + // std::cout << "edges, " << std::flush; m_dlEdges = ::glGenLists(1); ::glNewList(m_dlEdges, GL_COMPILE); drawAllEdges(); ::glEndList(); //Compile drawvertices - std::cout << "vertices" << std::flush; + // std::cout << "vertices" << std::flush; m_dlVertices = ::glGenLists(1); ::glNewList(m_dlVertices, GL_COMPILE); drawAllVertices(); ::glEndList(); - std::cout << ". DONE." << std::endl; + // std::cout << ". DONE." << std::endl; m_displayListCreated = true; }