Skip to content

Commit 7af251f

Browse files
committed
- reduce item creation time.
- spheres rendering done
1 parent 7baf5ba commit 7af251f

23 files changed

+338
-226
lines changed

GraphicsView/include/CGAL/Qt/DemosMainWindow.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include <iostream>
2929
#include <QVector>
3030
#include <QMainWindow>
31+
#include <QSettings>
3132
#include <QDragEnterEvent>
3233
#include <QDropEvent>
3334

@@ -124,6 +125,7 @@ protected Q_SLOTS:
124125
QAction* recentFilesSeparator;
125126
unsigned int maxNumRecentFiles;
126127
QVector<QAction*> recentFileActs;
128+
QSettings *settings;
127129
}; // end class DemosMainWindow
128130

129131
} // namespace Qt

GraphicsView/include/CGAL/Qt/DemosMainWindow_impl.h

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ DemosMainWindow::DemosMainWindow(QWidget * parent, ::Qt::WindowFlags flags)
9090
actionAbout = new QAction(this);
9191
actionAbout->setObjectName("actionAbout");
9292
actionAbout->setText(tr("&About..."));
93+
settings = new QSettings();
9394

9495
setAcceptDrops(true);
9596
}
@@ -378,15 +379,13 @@ CGAL_INLINE_FUNCTION
378379
void
379380
DemosMainWindow::addToRecentFiles(QString fileName)
380381
{
381-
QSettings settings;
382-
QStringList files = settings.value("recentFileList").toStringList();
382+
QStringList files = settings->value("recentFileList").toStringList();
383383
files.removeAll(fileName);
384384
files.prepend(fileName);
385385
while (files.size() > (int)maxNumberOfRecentFiles())
386386
files.removeLast();
387387

388-
settings.setValue("recentFileList", files);
389-
388+
settings->setValue("recentFileList", files);
390389
updateRecentFileActions();
391390
}
392391

@@ -422,11 +421,9 @@ CGAL_INLINE_FUNCTION
422421
void
423422
DemosMainWindow::updateRecentFileActions()
424423
{
425-
QSettings settings;
426-
QStringList files = settings.value("recentFileList").toStringList();
424+
QStringList files = settings->value("recentFileList").toStringList();
427425

428426
int numRecentFiles = qMin(files.size(), (int)this->maxNumberOfRecentFiles());
429-
430427
for (int i = 0; i < numRecentFiles; ++i) {
431428
QString strippedName = QFileInfo(files[i]).fileName();
432429
QString text = tr("&%1 %2").arg(i).arg(strippedName);
@@ -436,40 +433,37 @@ DemosMainWindow::updateRecentFileActions()
436433
}
437434
for (unsigned int j = numRecentFiles; j < maxNumberOfRecentFiles(); ++j)
438435
recentFileActs[j]->setVisible(false);
439-
436+
440437
recentFilesSeparator->setVisible(numRecentFiles > 0);
441438
}
442439

443440
CGAL_INLINE_FUNCTION
444441
void DemosMainWindow::writeState(QString groupname)
445442
{
446-
QSettings settings;
447443

448-
settings.beginGroup(groupname);
449-
settings.setValue("size", size());
450-
settings.setValue("pos", pos());
451-
settings.setValue("state", saveState());
452-
settings.endGroup();
444+
settings->beginGroup(groupname);
445+
settings->setValue("size", size());
446+
settings->setValue("pos", pos());
447+
settings->setValue("state", saveState());
448+
settings->endGroup();
453449
}
454450

455451
CGAL_INLINE_FUNCTION
456452
void DemosMainWindow::readState(QString groupname, Options /*what_to_save*/)
457-
{
458-
QSettings settings;
459-
460-
settings.beginGroup(groupname);
461-
resize(settings.value("size", this->size()).toSize());
453+
{
454+
settings->beginGroup(groupname);
455+
resize(settings->value("size", this->size()).toSize());
462456

463457
QDesktopWidget* desktop = qApp->desktop();
464-
QPoint pos = settings.value("pos", this->pos()).toPoint();
458+
QPoint pos = settings->value("pos", this->pos()).toPoint();
465459
if(desktop->availableGeometry(pos).contains(pos)) {
466460
move(pos);
467461
}
468-
QByteArray mainWindowState = settings.value("state").toByteArray();
462+
QByteArray mainWindowState = settings->value("state").toByteArray();
469463
if(!mainWindowState.isNull()) {
470464
this->restoreState(mainWindowState);
471465
}
472-
settings.endGroup();
466+
settings->endGroup();
473467
}
474468

475469

Polyhedron/demo/Polyhedron/Edge_container.cpp

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,6 @@ void Edge_container::initGL(Viewer_interface *viewer)
106106
getVao(viewer)->addVbo(getVbo(Normals));
107107
getVao(viewer)->addVbo(getVbo(Radius));
108108
getVao(viewer)->addVbo(getVbo(Barycenters));
109-
viewer->glVertexAttribDivisor(getVao(viewer)->program->attributeLocation("barycenter"), 1);
110-
viewer->glVertexAttribDivisor(getVao(viewer)->program->attributeLocation("radius"), 1);
111-
viewer->glVertexAttribDivisor(getVao(viewer)->program->attributeLocation("colors"), 1);
112109
}
113110
break;
114111
default:
@@ -117,6 +114,21 @@ void Edge_container::initGL(Viewer_interface *viewer)
117114
}
118115
setGLInit(viewer, true);
119116
}
117+
118+
void Edge_container::initializeBuffers(Viewer_interface *viewer)
119+
{
120+
Primitive_container::initializeBuffers(viewer);
121+
if(getProgram() == VI::PROGRAM_SPHERES
122+
|| getProgram() == VI::PROGRAM_CUTPLANE_SPHERES)
123+
{
124+
getVao(viewer)->bind();
125+
viewer->glVertexAttribDivisor(getVao(viewer)->program->attributeLocation("barycenter"), 1);
126+
viewer->glVertexAttribDivisor(getVao(viewer)->program->attributeLocation("radius"), 1);
127+
viewer->glVertexAttribDivisor(getVao(viewer)->program->attributeLocation("colors"), 1);
128+
getVao(viewer)->release();
129+
}
130+
}
131+
120132
void Edge_container::draw(Viewer_interface *viewer,
121133
bool is_color_uniform, QOpenGLFramebufferObject *)
122134

Polyhedron/demo/Polyhedron/MainWindow.cpp

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ MainWindow::MainWindow(QWidget* parent)
176176
// setup connections
177177
connect(scene, SIGNAL(dataChanged(const QModelIndex &, const QModelIndex & )),
178178
this, SLOT(updateInfo()));
179-
179+
180180
connect(scene, SIGNAL(dataChanged(const QModelIndex &, const QModelIndex & )),
181181
this, SLOT(updateDisplayInfo()));
182182

@@ -203,7 +203,7 @@ MainWindow::MainWindow(QWidget* parent)
203203
SIGNAL(selectionChanged ( const QItemSelection & , const QItemSelection & ) ),
204204
this, SLOT(updateDisplayInfo()));
205205

206-
connect(sceneView->selectionModel(),
206+
connect(sceneView->selectionModel(),
207207
SIGNAL(selectionChanged ( const QItemSelection & , const QItemSelection & ) ),
208208
this, SLOT(selectionChanged()));
209209

@@ -362,6 +362,7 @@ MainWindow::MainWindow(QWidget* parent)
362362

363363
// setup menu filtering
364364
connect(ui->menuOperations, SIGNAL(aboutToShow()), this, SLOT(filterOperations()));
365+
365366
}
366367

367368
//Recursive function that do a pass over a menu and its sub-menus(etc.) and hide them when they are empty
@@ -1032,9 +1033,10 @@ Scene_item* MainWindow::loadItem(QFileInfo fileinfo, CGAL::Three::Polyhedron_dem
10321033

10331034
item->setProperty("source filename", fileinfo.absoluteFilePath());
10341035
item->setProperty("loader_name", loader->name());
1036+
10351037
if(!reloading)
10361038
{
1037-
this->addToRecentFiles(fileinfo.absoluteFilePath());
1039+
addToRecentFiles(fileinfo.absoluteFilePath());
10381040
}
10391041
item->moveToThread(QApplication::instance()->thread());
10401042
return item;
@@ -1447,7 +1449,6 @@ void MainWindow::on_actionLoad_triggered()
14471449
if(it != filterPluginMap.end()) {
14481450
selectedPlugin = it.value();
14491451
}
1450-
14511452
QList<InfoLoader> list;
14521453
if(selectedPlugin) {
14531454
Q_FOREACH(const QString& filename, dialog.selectedFiles()) {
@@ -1781,7 +1782,7 @@ void MainWindow::makeNewGroup()
17811782
{
17821783
Scene_group_item * group =
17831784
new Scene_group_item(QString("New group"), scene);
1784-
scene->addItem(group);
1785+
scene->addItem(group, false);
17851786
}
17861787

17871788
void MainWindow::on_upButton_pressed()
@@ -2061,7 +2062,7 @@ void ReloadingController::handleResults(CT::Scene_item* item)
20612062
finish(false);
20622063
return;
20632064
}
2064-
item->setName(QString("%1 reloaded").arg(original->name()));
2065+
item->setName(original->name());
20652066
item->setColor(original->color());
20662067
item->setRenderingMode(original->renderingMode());
20672068
item->setVisible(original->visible());
@@ -2077,7 +2078,7 @@ void ReloadingController::handleResults(CT::Scene_item* item)
20772078
void ReloadingController::process()
20782079
{
20792080
original->reading();
2080-
workerThread->start();
2081+
QThreadPool::globalInstance()->start(workerThread);
20812082
}
20822083

20832084
LoadingController::LoadingController(const QList<InfoLoader>& input,
@@ -2091,7 +2092,6 @@ LoadingController::LoadingController(const QList<InfoLoader>& input,
20912092
workerThread = new LoadingThread(input, mw, false);
20922093
connect(workerThread, SIGNAL(resultReady(CT::Scene_item*)),
20932094
this, SLOT(handleResults(CT::Scene_item*)));
2094-
connect(workerThread, SIGNAL(finished()), workerThread, SLOT(deleteLater()));
20952095
colors_.reserve(input.size());
20962096
compute_color_map(CT::Scene_item::defaultColor(),
20972097
static_cast<unsigned>(input.size()),
@@ -2102,7 +2102,7 @@ LoadingController::LoadingController(const QList<InfoLoader>& input,
21022102

21032103
void LoadingController::handleResults(CT::Scene_item* item)
21042104
{
2105-
counter++;
2105+
++counter;
21062106
if(!item)
21072107
{
21082108
error();
@@ -2113,14 +2113,20 @@ void LoadingController::handleResults(CT::Scene_item* item)
21132113
if(!group
21142114
|| group->getChildrenIds().size() == 0)
21152115
item->setColor(colors_[counter-1]);
2116-
mw->selectSceneItem(scene->item_id(item));
21172116

2118-
scene->addItem(item);
2117+
scene->addItem(item,
2118+
counter == input.size());
21192119

2120-
if(group)
2120+
if(group
2121+
&& group->getChildrenIds().size() > 0)
2122+
{
21212123
scene->redraw_model();
2124+
}
21222125
if(counter == input.size())
2126+
{
2127+
mw->selectSceneItem(scene->item_id(item));
21232128
finished();
2129+
}
21242130
}
21252131

21262132
void StatisticsController::handleResults(QString res)

Polyhedron/demo/Polyhedron/MainWindow.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,7 @@ private Q_SLOTS:
458458
typedef std::pair<QFileInfo,
459459
CT::Polyhedron_demo_io_plugin_interface*> InfoLoader;
460460

461-
class LoadingThread : public QThread
461+
class LoadingThread : public QObject, public QRunnable
462462
{
463463
Q_OBJECT
464464
QList<InfoLoader> input;
@@ -503,7 +503,7 @@ class LoadingController : public QObject
503503
MainWindow* mw, Scene *scene);
504504
void process()
505505
{
506-
workerThread->start();
506+
QThreadPool::globalInstance()->start(workerThread);
507507
}
508508

509509
public Q_SLOTS:
@@ -537,7 +537,6 @@ class ReloadingController : public QObject
537537
workerThread = new LoadingThread(list, mw, true);
538538
connect(workerThread, SIGNAL(resultReady(CT::Scene_item*)),
539539
this, SLOT(handleResults(CT::Scene_item*)));
540-
connect(workerThread, SIGNAL(finished()), workerThread, SLOT(deleteLater()));
541540
connect(this, &ReloadingController::finish,
542541
this, &ReloadingController::deleteLater);
543542
}

Polyhedron/demo/Polyhedron/Plugins/IO/Polylines_io_plugin.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,6 @@ bool Polyhedron_demo_polylines_io_plugin::canLoad() const {
9292

9393
CGAL::Three::Scene_item*
9494
Polyhedron_demo_polylines_io_plugin::load(QFileInfo fileinfo, Scene_interface *scene, QMainWindow *) {
95-
9695
// Open file
9796
std::ifstream ifs(fileinfo.filePath().toUtf8());
9897
if(!ifs) {
@@ -136,8 +135,7 @@ Polyhedron_demo_polylines_io_plugin::load(QFileInfo fileinfo, Scene_interface *s
136135
item->setName(fileinfo.baseName());
137136
item->setColor(Qt::black);
138137
item->setProperty("polylines metadata", polylines_metadata);
139-
std::cerr << "Number of polylines in item: " << item->polylines.size() << std::endl;
140-
item->invalidateOpenGLBuffers();
138+
item->invalidate(Scene_item::GEOMETRY|Scene_item::COLORS|Scene_item::NORMALS);
141139
return item;
142140
}
143141

0 commit comments

Comments
 (0)