diff --git a/src/meshlab/images/backlines.png b/src/meshlab/images/backlines.png new file mode 100644 index 000000000..3c7d7063c Binary files /dev/null and b/src/meshlab/images/backlines.png differ diff --git a/src/meshlab/images/flat.png b/src/meshlab/images/flat.png new file mode 100644 index 000000000..4a470cada Binary files /dev/null and b/src/meshlab/images/flat.png differ diff --git a/src/meshlab/images/flatlines.png b/src/meshlab/images/flatlines.png new file mode 100644 index 000000000..ff6788440 Binary files /dev/null and b/src/meshlab/images/flatlines.png differ diff --git a/src/meshlab/images/info.png b/src/meshlab/images/info.png new file mode 100644 index 000000000..c24c54956 Binary files /dev/null and b/src/meshlab/images/info.png differ diff --git a/src/meshlab/images/points.png b/src/meshlab/images/points.png new file mode 100644 index 000000000..1cb58f5f5 Binary files /dev/null and b/src/meshlab/images/points.png differ diff --git a/src/meshlab/images/smooth.png b/src/meshlab/images/smooth.png new file mode 100644 index 000000000..9be7d1eb9 Binary files /dev/null and b/src/meshlab/images/smooth.png differ diff --git a/src/meshlab/images/wire.png b/src/meshlab/images/wire.png new file mode 100644 index 000000000..7723975db Binary files /dev/null and b/src/meshlab/images/wire.png differ diff --git a/src/meshlab/mainwindow.cpp b/src/meshlab/mainwindow.cpp index 977309a11..e7b8fc914 100644 --- a/src/meshlab/mainwindow.cpp +++ b/src/meshlab/mainwindow.cpp @@ -21,9 +21,13 @@ * * ****************************************************************************/ /**************************************************************************** - History +History $Log$ +Revision 1.8 2005/11/18 02:12:04 glvertex +- Added icons to the project file [meshlab.qrc] +- Enabled renderToolbar with icons + Revision 1.7 2005/11/18 00:36:50 davide_portelli Added View->Toolbar and Windows->Tile and Windows->Cascade @@ -59,211 +63,226 @@ First rough version. It simply load a mesh. MainWindow::MainWindow() { - workspace = new QWorkspace(this); + workspace = new QWorkspace(this); - setCentralWidget(workspace); - createActions(); - createMenus(); - createToolBars(); - - addToolBar(mainToolBar); - //addToolBar(renderToolBar); - + setCentralWidget(workspace); + createActions(); + createMenus(); + createToolBars(); - setWindowTitle(tr("MeshLab 1.0")); + addToolBar(mainToolBar); + addToolBar(renderToolBar); - //QTimer::singleShot(500, this, SLOT(aboutPlugins())); + setWindowTitle(tr("MeshLab v0.1")); - if(QCoreApplication::instance ()->argc()>1) - open(QCoreApplication::instance ()->argv()[1]); - else - QTimer::singleShot(500, this, SLOT(open())); + //QTimer::singleShot(500, this, SLOT(aboutPlugins())); - loadPlugins(); + if(QCoreApplication::instance ()->argc()>1) + open(QCoreApplication::instance ()->argv()[1]); + else + QTimer::singleShot(500, this, SLOT(open())); + + loadPlugins(); } void MainWindow::open(QString fileName) { - if (fileName.isEmpty()) - { - /*QStringList types << - << "Text files (*.txt)" - << "Any files (*)"; - QFileDialog fd = new QFileDialog( this ); - fd->setFilters( types ); - fd->show();*/ + if (fileName.isEmpty()) + { + /*QStringList types << + << "Text files (*.txt)" + << "Any files (*)"; + QFileDialog fd = new QFileDialog( this ); + fd->setFilters( types ); + fd->show();*/ - fileName = QFileDialog::getOpenFileName(this,tr("Open File"),"../sample","Mesh files (*.ply *.off *.stl)"); - } - if (!fileName.isEmpty()) { - MeshModel *nm= new MeshModel(); - if(!nm->Open(fileName.toAscii())){ - QMessageBox::information(this, tr("Plug & Paint"), - tr("Cannot load %1.").arg(fileName)); + fileName = QFileDialog::getOpenFileName(this,tr("Open File"),"../sample","Mesh files (*.ply *.off *.stl)"); + } + if (!fileName.isEmpty()) { + MeshModel *nm= new MeshModel(); + if(!nm->Open(fileName.toAscii())){ + QMessageBox::information(this, tr("Plug & Paint"), + tr("Cannot load %1.").arg(fileName)); - delete nm; - return; - } - else - { - //QMessageBox::information(this, tr("MeshLab"), tr("Opened Mesh of %1. triangles").arg(nm->cm.fn)); - VM.push_back(nm); - GLArea *gla=new GLArea(workspace); - gla->mm=nm; - gla->setWindowTitle(fileName); - workspace->addWindow(gla); - gla->showMaximized(); - return; - } - } + delete nm; + return; + } + else + { + //QMessageBox::information(this, tr("MeshLab"), tr("Opened Mesh of %1. triangles").arg(nm->cm.fn)); + VM.push_back(nm); + GLArea *gla=new GLArea(workspace); + gla->mm=nm; + gla->setWindowTitle(fileName); + workspace->addWindow(gla); + gla->showMaximized(); + return; + } + } } bool MainWindow::saveAs() { - QString initialPath = QDir::currentPath() + "/untitled.png"; + QString initialPath = QDir::currentPath() + "/untitled.png"; - QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"), initialPath); - if (fileName.isEmpty()) { - return false; - } else { -// return paintArea->saveImage(fileName, "png"); - return true; - } + QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"), initialPath); + if (fileName.isEmpty()) { + return false; + } else { + // return paintArea->saveImage(fileName, "png"); + return true; + } } void MainWindow::about() { - QMessageBox::about(this, tr("About Plug & Paint"), - tr("The Plug & Paint example demonstrates how to write Qt " - "applications that can be extended through plugins.")); + QMessageBox::about(this, tr("About Plug & Paint"), + tr("The Plug & Paint example demonstrates how to write Qt " + "applications that can be extended through plugins.")); } void MainWindow::aboutPlugins() { - PluginDialog dialog(pluginsDir.path(), pluginFileNames, this); - dialog.exec(); + PluginDialog dialog(pluginsDir.path(), pluginFileNames, this); + dialog.exec(); } void MainWindow::createActions() { - - openAct = new QAction(QIcon(":/images/open.png"),tr("&Open..."), this); - openAct->setShortcut(tr("Ctrl+O")); - connect(openAct, SIGNAL(triggered()), this, SLOT(open())); + openAct = new QAction(QIcon(":/images/open.png"),tr("&Open..."), this); + openAct->setShortcut(tr("Ctrl+O")); + connect(openAct, SIGNAL(triggered()), this, SLOT(open())); - saveAsAct = new QAction(QIcon(":/images/save.png"),tr("&Save As..."), this); - saveAsAct->setShortcut(tr("Ctrl+S")); - connect(saveAsAct, SIGNAL(triggered()), this, SLOT(saveAs())); + saveAsAct = new QAction(QIcon(":/images/save.png"),tr("&Save As..."), this); + saveAsAct->setShortcut(tr("Ctrl+S")); + connect(saveAsAct, SIGNAL(triggered()), this, SLOT(saveAs())); - exitAct = new QAction(tr("E&xit"), this); - exitAct->setShortcut(tr("Ctrl+Q")); - connect(exitAct, SIGNAL(triggered()), this, SLOT(close())); + viewModePoints = new QAction(QIcon(":/images/points.png"),tr("&Points"), this); + viewModeWire = new QAction(QIcon(":/images/wire.png"),tr("&Wireframe"), this); + viewModeLines = new QAction(QIcon(":/images/backlines.png"),tr("&Hidden Lines"), this); + viewModeFlatLines = new QAction(QIcon(":/images/flatlines.png"),tr("Flat &Lines"), this); + viewModeFlat = new QAction(QIcon(":/images/flat.png"),tr("&Flat"), this); + viewModeSmooth = new QAction(QIcon(":/images/smooth.png"),tr("&Smooth"), this); - aboutAct = new QAction(tr("&About"), this); - connect(aboutAct, SIGNAL(triggered()), this, SLOT(about())); + exitAct = new QAction(tr("E&xit"), this); + exitAct->setShortcut(tr("Ctrl+Q")); + connect(exitAct, SIGNAL(triggered()), this, SLOT(close())); - aboutQtAct = new QAction(tr("About &Qt"), this); - connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt())); + aboutAct = new QAction(tr("&About"), this); + connect(aboutAct, SIGNAL(triggered()), this, SLOT(about())); + + aboutQtAct = new QAction(tr("About &Qt"), this); + connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt())); aboutPluginsAct = new QAction(tr("About &Plugins"), this); - connect(aboutPluginsAct, SIGNAL(triggered()), this, SLOT(aboutPlugins())); + connect(aboutPluginsAct, SIGNAL(triggered()), this, SLOT(aboutPlugins())); viewToolbarAct = new QAction (tr("&Toolbar"), this); connect(viewToolbarAct, SIGNAL(triggered()), this, SLOT(viewToolbar())); windowsTileAct = new QAction(tr("&Tile"), this); - connect(windowsTileAct, SIGNAL(triggered()), this, SLOT(windowsTile())); + connect(windowsTileAct, SIGNAL(triggered()), this, SLOT(windowsTile())); windowsCascadeAct = new QAction(tr("&Cascade"), this); - connect(windowsCascadeAct, SIGNAL(triggered()), this, SLOT(windowsCascade())); + connect(windowsCascadeAct, SIGNAL(triggered()), this, SLOT(windowsCascade())); } void MainWindow::createToolBars() { - mainToolBar = new QToolBar(this); - mainToolBar->addAction(openAct); - mainToolBar->addAction(saveAsAct); + mainToolBar = new QToolBar(this); + mainToolBar->setIconSize(QSize(32,32)); + mainToolBar->addAction(openAct); + mainToolBar->addAction(saveAsAct); + + renderToolBar = new QToolBar(this); + renderToolBar->setIconSize(QSize(32,32)); + renderToolBar->addAction(viewModePoints); + renderToolBar->addAction(viewModeWire); + renderToolBar->addAction(viewModeLines); + renderToolBar->addAction(viewModeFlatLines); + renderToolBar->addAction(viewModeFlat); + renderToolBar->addAction(viewModeSmooth); } void MainWindow::createMenus() { - fileMenu = menuBar()->addMenu(tr("&File")); - fileMenu->addAction(openAct); - fileMenu->addAction(saveAsAct); - fileMenu->addSeparator(); - fileMenu->addAction(exitAct); + fileMenu = menuBar()->addMenu(tr("&File")); + fileMenu->addAction(openAct); + fileMenu->addAction(saveAsAct); + fileMenu->addSeparator(); + fileMenu->addAction(exitAct); - filterMenu = menuBar()->addMenu(tr("&Filter")); + filterMenu = menuBar()->addMenu(tr("&Filter")); viewMenu = menuBar()->addMenu(tr("&View")); viewMenu->addAction(viewToolbarAct); - + windowsMenu = menuBar()->addMenu(tr("&Windows")); windowsMenu->addAction(windowsTileAct); windowsMenu->addAction(windowsCascadeAct); - menuBar()->addSeparator(); + menuBar()->addSeparator(); - helpMenu = menuBar()->addMenu(tr("&Help")); - helpMenu->addAction(aboutAct); - helpMenu->addAction(aboutQtAct); + helpMenu = menuBar()->addMenu(tr("&Help")); + helpMenu->addAction(aboutAct); + helpMenu->addAction(aboutQtAct); helpMenu->addAction(aboutPluginsAct); } void MainWindow::loadPlugins() { - pluginsDir = QDir(qApp->applicationDirPath()); + pluginsDir = QDir(qApp->applicationDirPath()); #if defined(Q_OS_WIN) - if (pluginsDir.dirName() == "debug" || pluginsDir.dirName() == "release") - pluginsDir.cdUp(); + if (pluginsDir.dirName() == "debug" || pluginsDir.dirName() == "release") + pluginsDir.cdUp(); #elif defined(Q_OS_MAC) - if (pluginsDir.dirName() == "MacOS") { - pluginsDir.cdUp(); - pluginsDir.cdUp(); - pluginsDir.cdUp(); - } + if (pluginsDir.dirName() == "MacOS") { + pluginsDir.cdUp(); + pluginsDir.cdUp(); + pluginsDir.cdUp(); + } #endif - pluginsDir.cd("plugins"); + pluginsDir.cd("plugins"); - foreach (QString fileName, pluginsDir.entryList(QDir::Files)) { - QPluginLoader loader(pluginsDir.absoluteFilePath(fileName)); - QObject *plugin = loader.instance(); - if (plugin) { - MeshFilterInterface *iFilter = qobject_cast(plugin); - if (iFilter) - addToMenu(plugin, iFilter->filters(), filterMenu, SLOT(applyFilter())); - - pluginFileNames += fileName; - } - } + foreach (QString fileName, pluginsDir.entryList(QDir::Files)) { + QPluginLoader loader(pluginsDir.absoluteFilePath(fileName)); + QObject *plugin = loader.instance(); + if (plugin) { + MeshFilterInterface *iFilter = qobject_cast(plugin); + if (iFilter) + addToMenu(plugin, iFilter->filters(), filterMenu, SLOT(applyFilter())); -// brushMenu->setEnabled(!brushActionGroup->actions().isEmpty()); -// shapesMenu->setEnabled(!shapesMenu->actions().isEmpty()); - filterMenu->setEnabled(!filterMenu->actions().isEmpty()); + pluginFileNames += fileName; + } + } + + // brushMenu->setEnabled(!brushActionGroup->actions().isEmpty()); + // shapesMenu->setEnabled(!shapesMenu->actions().isEmpty()); + filterMenu->setEnabled(!filterMenu->actions().isEmpty()); } void MainWindow::addToMenu(QObject *plugin, const QStringList &texts,QMenu *menu, const char *member, - QActionGroup *actionGroup) + QActionGroup *actionGroup) { - foreach (QString text, texts) { - QAction *action = new QAction(text, plugin); - connect(action, SIGNAL(triggered()), this, member); - menu->addAction(action); + foreach (QString text, texts) { + QAction *action = new QAction(text, plugin); + connect(action, SIGNAL(triggered()), this, member); + menu->addAction(action); - if (actionGroup) { - action->setCheckable(true); - actionGroup->addAction(action); - } - } + if (actionGroup) { + action->setCheckable(true); + actionGroup->addAction(action); + } + } } void MainWindow::applyFilter() { - QAction *action = qobject_cast(sender()); - MeshFilterInterface *iFilter = qobject_cast(action->parent()); - iFilter->applyFilter(action->text(), *(((GLArea *)(workspace->activeWindow()))->mm ), this); + QAction *action = qobject_cast(sender()); + MeshFilterInterface *iFilter = qobject_cast(action->parent()); + iFilter->applyFilter(action->text(), *(((GLArea *)(workspace->activeWindow()))->mm ), this); } diff --git a/src/meshlab/mainwindow.h b/src/meshlab/mainwindow.h index 1eb62623c..0e8f08bae 100644 --- a/src/meshlab/mainwindow.h +++ b/src/meshlab/mainwindow.h @@ -36,50 +36,59 @@ class GLArea; class MainWindow : public QMainWindow { - Q_OBJECT + Q_OBJECT public: - MainWindow(); + MainWindow(); private slots: - + void open(QString fileName=QString()); - bool saveAs(); - void about(); - void aboutPlugins(); - void applyFilter(); + bool saveAs(); + void about(); + void aboutPlugins(); + void applyFilter(); void windowsTile(); void windowsCascade(); void viewToolbar(); private: - void createActions(); - void createMenus(); - void createToolBars(); - void loadPlugins(); - void addToMenu(QObject *plugin, const QStringList &texts, QMenu *menu, - const char *member, QActionGroup *actionGroup = 0); + void createActions(); + void createMenus(); + void createToolBars(); + void loadPlugins(); + void addToMenu(QObject *plugin, const QStringList &texts, QMenu *menu, + const char *member, QActionGroup *actionGroup = 0); - QWorkspace *workspace; + QWorkspace *workspace; - vector VM; - GLArea *paintArea; - QScrollArea *scrollArea; - QDir pluginsDir; - QStringList pluginFileNames; - QToolBar *mainToolBar; - //QToolBar *renderToolBar; - - QMenu *fileMenu; - QMenu *filterMenu; + vector VM; + GLArea *paintArea; + QScrollArea *scrollArea; + QDir pluginsDir; + QStringList pluginFileNames; + QToolBar *mainToolBar; + QToolBar *renderToolBar; + + QMenu *fileMenu; + QMenu *filterMenu; QMenu *viewMenu; QMenu *windowsMenu; - QMenu *helpMenu; - QAction *openAct; - QAction *saveAsAct; - QAction *exitAct; - QAction *aboutAct; - QAction *aboutQtAct; + QMenu *helpMenu; + + QAction *openAct; + QAction *saveAsAct; + + QAction *viewModePoints; + QAction *viewModeWire; + QAction *viewModeLines; + QAction *viewModeFlatLines; + QAction *viewModeFlat; + QAction *viewModeSmooth; + + QAction *exitAct; + QAction *aboutAct; + QAction *aboutQtAct; QAction *aboutPluginsAct; QAction *viewToolbarAct; QAction *windowsTileAct; diff --git a/src/meshlab/meshlab.qrc b/src/meshlab/meshlab.qrc index 3b7d2639f..4586b268a 100644 --- a/src/meshlab/meshlab.qrc +++ b/src/meshlab/meshlab.qrc @@ -1,6 +1,13 @@ - - - images/open.png - images/save.png + + + images\backlines.png + images\flat.png + images\flatlines.png + images\info.png + images\open.png + images\points.png + images\save.png + images\smooth.png + images\wire.png