diff --git a/FileIO/ImportFileTypes.h b/FileIO/ImportFileTypes.h index 84cdfc099de29016189c133e6bf85b19bbebea8f..82b5ef38d0e4e6638dd0d1bc5774c88897bab02f 100644 --- a/FileIO/ImportFileTypes.h +++ b/FileIO/ImportFileTypes.h @@ -24,6 +24,9 @@ public: enum type { OGS = 0, + OGS_GEO, + OGS_STN, + OGS_MSH, FEFLOW, GMS, GMSH, @@ -43,6 +46,9 @@ public: else if (t==ImportFileType::GMSH) return "GMSH"; else if (t==ImportFileType::NETCDF) return "NetCDF"; else if (t==ImportFileType::OGS) return "OGS"; + else if (t==ImportFileType::OGS_GEO) return "OGS geometry"; + else if (t==ImportFileType::OGS_STN) return "OGS station list"; + else if (t==ImportFileType::OGS_MSH) return "OGS mesh"; else if (t==ImportFileType::PETREL) return "Petrel"; else if((t==ImportFileType::RASTER) || (t==ImportFileType::POLYRASTER)) return "Raster"; else if (t==ImportFileType::SHAPE) return "Shape"; @@ -63,6 +69,12 @@ public: return "NetCDF files (*.nc)"; else if (t==ImportFileType::OGS) return "OpenGeosys files (*.gsp *.gml *.vtu *.stn);;GeoSys legacy files (*.gli *.msh);;GeoSys FEM Conditions (*.cnd *.bc *.ic *.st);;All files (* *.*)"; + else if (t==ImportFileType::OGS_GEO) + return "OpenGeosys files (*.gml *.gli)"; + else if (t==ImportFileType::OGS_STN) + return "OpenGeosys files (*.stn)"; + else if (t==ImportFileType::OGS_MSH) + return "OpenGeosys files (*.vtu *.msh)"; else if (t==ImportFileType::PETREL) return "Petrel files (*)"; else if (t==ImportFileType::RASTER) diff --git a/Gui/DataView/GeoTabWidget.cpp b/Gui/DataView/GeoTabWidget.cpp index 03912716d55494579beb8b431044740f2bea9a7d..8e22b64da8eac95d1e94ddedcb36dcd015231cbc 100644 --- a/Gui/DataView/GeoTabWidget.cpp +++ b/Gui/DataView/GeoTabWidget.cpp @@ -16,4 +16,10 @@ GeoTabWidget::GeoTabWidget( QWidget* parent /*= 0*/ ) : QWidget(parent) { setupUi(this); + + connect(this->openGeoPushButton, SIGNAL(clicked()), this->treeView, SLOT(addGeometry())); + connect(this->saveGeoPushButton, SIGNAL(clicked()), this->treeView, SLOT(writeToFile())); + connect(this->removeGeoPushButton, SIGNAL(clicked()), this->treeView, SLOT(removeGeometry())); + connect(this->treeView, SIGNAL(enableSaveButton(bool)), this, SLOT(enableSaveButton(bool))); + connect(this->treeView, SIGNAL(enableRemoveButton(bool)), this, SLOT(enableRemoveButton(bool))); } diff --git a/Gui/DataView/GeoTabWidget.h b/Gui/DataView/GeoTabWidget.h index 21697d1f497fc1bae7bd1636d13edf14d5d52fe9..bf763204625cd2892fa35c584bf70adb258aa224 100644 --- a/Gui/DataView/GeoTabWidget.h +++ b/Gui/DataView/GeoTabWidget.h @@ -26,6 +26,11 @@ public: GeoTabWidget(QWidget* parent = 0); private: + +private slots: + void enableSaveButton(bool enable) { this->saveGeoPushButton->setEnabled(enable); }; + void enableRemoveButton(bool enable) { this->removeGeoPushButton->setEnabled(enable); }; + }; #endif // GEOTABWIDGET_H diff --git a/Gui/DataView/GeoTabWidgetBase.ui b/Gui/DataView/GeoTabWidgetBase.ui index 6dce56723bf7bd20c03ef8b6b9e300a44b40e023..e556afe7731fc88040b074aa3b6c9fd75b3fcbe9 100644 --- a/Gui/DataView/GeoTabWidgetBase.ui +++ b/Gui/DataView/GeoTabWidgetBase.ui @@ -17,6 +17,125 @@ <property name="margin"> <number>2</number> </property> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QPushButton" name="openGeoPushButton"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>24</width> + <height>24</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>24</width> + <height>24</height> + </size> + </property> + <property name="toolTip"> + <string>Open geometry...</string> + </property> + <property name="text"> + <string/> + </property> + <property name="icon"> + <iconset resource="../Img/icons.qrc"> + <normaloff>:/Images/open-icon.png</normaloff>:/Images/open-icon.png</iconset> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="saveGeoPushButton"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>24</width> + <height>24</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>24</width> + <height>24</height> + </size> + </property> + <property name="toolTip"> + <string>Save geometry...</string> + </property> + <property name="text"> + <string/> + </property> + <property name="icon"> + <iconset resource="../Img/icons.qrc"> + <normaloff>:/Images/save-icon.png</normaloff>:/Images/save-icon.png</iconset> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="removeGeoPushButton"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>24</width> + <height>24</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>24</width> + <height>24</height> + </size> + </property> + <property name="toolTip"> + <string>Remove geometry</string> + </property> + <property name="text"> + <string/> + </property> + <property name="icon"> + <iconset resource="../Img/icons.qrc"> + <normaloff>:/Images/delete-icon.png</normaloff>:/Images/delete-icon.png</iconset> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> <item> <widget class="GeoTreeView" name="treeView"/> </item> @@ -29,6 +148,8 @@ <header>GeoTreeView.h</header> </customwidget> </customwidgets> - <resources/> + <resources> + <include location="../Img/icons.qrc"/> + </resources> <connections/> </ui> diff --git a/Gui/DataView/GeoTreeView.cpp b/Gui/DataView/GeoTreeView.cpp index 99400ced283f2c77bd6311a33da74c13a398171a..e0253d2e73ac10fc2fc4b1fe081733591cb9b701 100644 --- a/Gui/DataView/GeoTreeView.cpp +++ b/Gui/DataView/GeoTreeView.cpp @@ -11,6 +11,7 @@ #include <QFileDialog> #include <QMenu> +#include <QSettings> #include <iostream> #include "GeoObjectListItem.h" @@ -18,7 +19,7 @@ #include "GeoTreeModel.h" #include "GeoTreeView.h" #include "OGSError.h" - +#include "ImportFileTypes.h" GeoTreeView::GeoTreeView(QWidget* parent) : QTreeView(parent) { @@ -49,9 +50,20 @@ void GeoTreeView::selectionChanged( const QItemSelection &selected, const GeoObjectListItem* list_item = dynamic_cast<GeoObjectListItem*>(tree_item->parentItem()); if (list_item) + { + emit enableSaveButton(false); + emit enableRemoveButton(false); emit geoItemSelected(list_item->vtkSource(), tree_item->row()); + } else + { + emit enableRemoveButton(true); emit removeGeoItemSelection(); + if (!idx.parent().isValid()) + emit enableSaveButton(true); + else + emit enableSaveButton(false); + } } //emit itemSelectionChanged(selected, deselected); //return QTreeView::selectionChanged(selected, deselected); @@ -121,17 +133,17 @@ void GeoTreeView::contextMenuEvent( QContextMenuEvent* event ) { if (item->child(0)->data(0).toString().compare("Points") == 0) // clumsy way to find out { - QAction* saveAction = menu.addAction("Save geometry..."); + //QAction* saveAction = menu.addAction("Save geometry..."); QAction* mapAction = menu.addAction("Map geometry..."); QAction* addCNDAction = menu.addAction("Load FEM Conditions..."); //QAction* saveCondAction = menu.addAction("Save FEM conditions..."); menu.addSeparator(); - QAction* removeAction = menu.addAction("Remove geometry"); - connect(saveAction, SIGNAL(triggered()), this, SLOT(writeToFile())); + //QAction* removeAction = menu.addAction("Remove geometry"); + //connect(saveAction, SIGNAL(triggered()), this, SLOT(writeToFile())); connect(mapAction, SIGNAL(triggered()), this, SLOT(mapGeometry())); connect(addCNDAction, SIGNAL(triggered()), this, SLOT(loadFEMConditions())); //connect(saveCondAction, SIGNAL(triggered()), this, SLOT(saveFEMConditions())); - connect(removeAction, SIGNAL(triggered()), this, SLOT(removeList())); + //connect(removeAction, SIGNAL(triggered()), this, SLOT(removeList())); } } } @@ -146,17 +158,26 @@ void GeoTreeView::connectPolylines() emit requestLineEditDialog(item->data(0).toString().toStdString()); } -void GeoTreeView::removeList() +void GeoTreeView::addGeometry() { - TreeItem* item = static_cast<GeoTreeModel*>(model())->getItem( - this->selectionModel()->currentIndex()); + emit openGeometryFile(ImportFileType::OGS_GEO); +} - GeoObjectListItem* list = dynamic_cast<GeoObjectListItem*>(item); - if (list) - emit listRemoved((item->parentItem()->data( - 0).toString()).toStdString(), list->getType()); +void GeoTreeView::removeGeometry() +{ + QModelIndex index (this->selectionModel()->currentIndex()); + if (!index.isValid()) + OGSError::box("No geometry selected."); else - emit listRemoved((item->data(0).toString()).toStdString(), GeoLib::INVALID); + { + TreeItem* item = static_cast<GeoTreeModel*>(model())->getItem(index); + GeoObjectListItem* list = dynamic_cast<GeoObjectListItem*>(item); + if (list) + emit listRemoved((item->parentItem()->data( + 0).toString()).toStdString(), list->getType()); + else + emit listRemoved((item->data(0).toString()).toStdString(), GeoLib::INVALID); + } } void GeoTreeView::setElementAsCondition(bool set_on_points) @@ -189,13 +210,18 @@ void GeoTreeView::mapGeometry() void GeoTreeView::writeToFile() const { - TreeItem* item = static_cast<GeoTreeModel*>(model())->getItem( - this->selectionModel()->currentIndex()); - QString gliName = item->data(0).toString(); - QString fileName = QFileDialog::getSaveFileName(NULL, - "Save geometry as", gliName, "GeoSys geometry file (*.gml)"); - if (!fileName.isEmpty()) - emit saveToFileRequested(gliName, fileName); + QModelIndex index (this->selectionModel()->currentIndex()); + if (!index.isValid()) + OGSError::box("No geometry selected."); + else + { + TreeItem* item = static_cast<GeoTreeModel*>(model())->getItem(index); + QString geoName = item->data(0).toString(); + QString fileName = QFileDialog::getSaveFileName(NULL, + "Save geometry as", geoName, "GeoSys geometry file (*.gml)"); + if (!fileName.isEmpty()) + emit saveToFileRequested(geoName, fileName); + } } void GeoTreeView::loadFEMConditions() diff --git a/Gui/DataView/GeoTreeView.h b/Gui/DataView/GeoTreeView.h index 2e00a7f5d5d7fa21d2ca9b00c0d7cd3a37c233a7..437f930af14ffdc93204da016e3bda5520816755 100644 --- a/Gui/DataView/GeoTreeView.h +++ b/Gui/DataView/GeoTreeView.h @@ -13,6 +13,7 @@ #define GEOTREEVIEW_H #include "GeoType.h" + #include <QContextMenuEvent> #include <QTreeView> @@ -48,6 +49,7 @@ private: void setElementAsCondition(bool set_on_points = false); private slots: + void addGeometry(); /// Allows to add FEM Conditions to a process void loadFEMConditions(); void on_Clicked(QModelIndex idx); @@ -61,17 +63,20 @@ private slots: /// Saves a geometry in a file. void writeToFile() const; /// Removes a whole geometry or parts of it. - void removeList(); + void removeGeometry(); /// Saves FEM Conditions associated with the given geometry //void saveFEMConditions(); signals: + void enableSaveButton(bool); + void enableRemoveButton(bool); void geoItemSelected(const vtkPolyDataAlgorithm*, int); void geometryMappingRequested(const std::string&); void removeGeoItemSelection(); //void itemSelectionChanged(const QItemSelection & selected, const QItemSelection & deselected); void listRemoved(std::string name, GeoLib::GEOTYPE); void loadFEMCondFileRequested(std::string); + void openGeometryFile(int); void saveToFileRequested(QString, QString) const; void requestCondSetupDialog(const std::string&, const GeoLib::GEOTYPE, const std::size_t, bool on_points); void requestLineEditDialog(const std::string&); diff --git a/Gui/DataView/MshTabWidget.cpp b/Gui/DataView/MshTabWidget.cpp index bcaf875c830d276527c1862e1022affa66745e6f..f4e8ade653fdac538f62c88c7a97b5f7e31661a8 100644 --- a/Gui/DataView/MshTabWidget.cpp +++ b/Gui/DataView/MshTabWidget.cpp @@ -17,8 +17,10 @@ MshTabWidget::MshTabWidget( QWidget* parent /*= 0*/ ) { setupUi(this); - connect(this->addMeshPushButton, SIGNAL(clicked()), this->treeView, SLOT(addMeshAction())); - connect(this->saveMeshPushButton, SIGNAL(clicked()), this->treeView, SLOT(writeMeshToFile())); + connect(this->addMeshPushButton, SIGNAL(clicked()), this->treeView, SLOT(addMesh())); + connect(this->saveMeshPushButton, SIGNAL(clicked()), this->treeView, SLOT(writeToFile())); connect(this->removeMeshPushButton, SIGNAL(clicked()), this->treeView, SLOT(removeMesh())); //connect(this->clearAllPushButton, SIGNAL(clicked()), this->treeView, SLOT(removeAllMeshes())); + connect(this->treeView, SIGNAL(enableSaveButton(bool)), this, SLOT(enableSaveButton(bool))); + connect(this->treeView, SIGNAL(enableRemoveButton(bool)), this, SLOT(enableRemoveButton(bool))); } diff --git a/Gui/DataView/MshTabWidget.h b/Gui/DataView/MshTabWidget.h index 71b411d416260b3a32f8c3ae9bf38fc68a23902e..7bf3a2b200cb8ea922940de71265d9d6fc43ff84 100644 --- a/Gui/DataView/MshTabWidget.h +++ b/Gui/DataView/MshTabWidget.h @@ -24,6 +24,10 @@ class MshTabWidget : public QWidget, public Ui_MshTabWidgetBase public: MshTabWidget(QWidget* parent = 0); + +private slots: + void enableSaveButton(bool enable) { this->saveMeshPushButton->setEnabled(enable); }; + void enableRemoveButton(bool enable) { this->removeMeshPushButton->setEnabled(enable); }; }; #endif // MSHTABWIDGET_H diff --git a/Gui/DataView/MshTabWidgetBase.ui b/Gui/DataView/MshTabWidgetBase.ui index 4cc6999aba6c7128257a970f68ae11c1ea6e9f63..17885a9659558791dd419958834ffa1e53f32e2b 100644 --- a/Gui/DataView/MshTabWidgetBase.ui +++ b/Gui/DataView/MshTabWidgetBase.ui @@ -21,58 +21,103 @@ <layout class="QHBoxLayout" name="horizontalLayout"> <item> <widget class="QPushButton" name="addMeshPushButton"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="minimumSize"> <size> - <width>50</width> - <height>0</height> + <width>24</width> + <height>24</height> </size> </property> <property name="maximumSize"> <size> - <width>50</width> - <height>16777215</height> + <width>24</width> + <height>24</height> </size> </property> + <property name="toolTip"> + <string>Open mesh...</string> + </property> <property name="text"> - <string>Add</string> + <string/> + </property> + <property name="icon"> + <iconset resource="../Img/icons.qrc"> + <normaloff>:/Images/open-icon.png</normaloff>:/Images/open-icon.png</iconset> </property> </widget> </item> <item> <widget class="QPushButton" name="saveMeshPushButton"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="minimumSize"> <size> - <width>50</width> - <height>0</height> + <width>24</width> + <height>24</height> </size> </property> <property name="maximumSize"> <size> - <width>50</width> - <height>16777215</height> + <width>24</width> + <height>24</height> </size> </property> + <property name="toolTip"> + <string>Save mesh...</string> + </property> <property name="text"> - <string>Save</string> + <string/> + </property> + <property name="icon"> + <iconset resource="../Img/icons.qrc"> + <normaloff>:/Images/save-icon.png</normaloff>:/Images/save-icon.png</iconset> </property> </widget> </item> <item> <widget class="QPushButton" name="removeMeshPushButton"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="minimumSize"> <size> - <width>50</width> - <height>0</height> + <width>24</width> + <height>24</height> </size> </property> <property name="maximumSize"> <size> - <width>50</width> - <height>16777215</height> + <width>24</width> + <height>24</height> </size> </property> + <property name="toolTip"> + <string>Remove mesh</string> + </property> <property name="text"> - <string>Remove</string> + <string/> + </property> + <property name="icon"> + <iconset resource="../Img/icons.qrc"> + <normaloff>:/Images/delete-icon.png</normaloff>:/Images/delete-icon.png</iconset> </property> </widget> </item> @@ -136,6 +181,8 @@ <header>MshView.h</header> </customwidget> </customwidgets> - <resources/> + <resources> + <include location="../Img/icons.qrc"/> + </resources> <connections/> </ui> diff --git a/Gui/DataView/MshView.cpp b/Gui/DataView/MshView.cpp index a56acffb0751753ccd8f10744085b32f2f5da807..be9b29eb7652648449a947240d0619eaa2a94c85 100644 --- a/Gui/DataView/MshView.cpp +++ b/Gui/DataView/MshView.cpp @@ -15,6 +15,7 @@ #include "MshItem.h" #include "MshModel.h" #include "OGSError.h" +#include "ImportFileTypes.h" #include <QHeaderView> #include "VtkMeshSource.h" @@ -49,25 +50,32 @@ void MshView::updateView() resizeColumnToContents(i); } -void MshView::addMeshAction() +void MshView::selectionChanged( const QItemSelection &selected, const QItemSelection &deselected ) { - QSettings settings; - QString fileName = - QFileDialog::getOpenFileName(this, "Select mesh file", settings.value( - "lastOpenedFileDirectory").toString(), - "OpenGeosys mesh files (*.vtu *.msh);;All files (* *.*)"); - if (!fileName.isEmpty()) + Q_UNUSED(deselected); + if (!selected.isEmpty()) { - std::string name = fileName.toStdString(); - FileIO::MeshIO meshIO; - MeshLib::Mesh* msh = meshIO.loadMeshFromFile(name); - if (msh) + const QModelIndex idx = *(selected.indexes().begin()); + const TreeItem* tree_item = static_cast<TreeModel*>(this->model())->getItem(idx); + + const MshItem* list_item = dynamic_cast<const MshItem*>(tree_item); + if (list_item) { - static_cast<MshModel*>(this->model())->addMesh(msh); - QDir dir = QDir(fileName); - settings.setValue("lastOpenedFileDirectory", dir.absolutePath()); + emit enableSaveButton(true); + emit enableRemoveButton(true); + } + else + { + emit enableSaveButton(false); + emit enableRemoveButton(false); } } + //emit itemSelectionChanged(selected, deselected); + //return QTreeView::selectionChanged(selected, deselected); +} +void MshView::addMesh() +{ + emit openMeshFile(ImportFileType::OGS_MSH); } void MshView::removeMesh() @@ -131,7 +139,7 @@ void MshView::openMshEditDialog() meshEdit.exec(); } -int MshView::writeMeshToFile() const +int MshView::writeToFile() const { QModelIndex index = this->selectionModel()->currentIndex(); @@ -201,12 +209,6 @@ void MshView::checkMeshQuality () } /* - void DataView::selectionChanged( const QItemSelection &selected, const QItemSelection &deselected ) - { - emit itemSelectionChanged(selected, deselected); - return QTreeView::selectionChanged(selected, deselected); - } - void DataView::selectionChangedFromOutside( const QItemSelection &selected, const QItemSelection &deselected ) { QItemSelectionModel* selModel = this->selectionModel(); diff --git a/Gui/DataView/MshView.h b/Gui/DataView/MshView.h index 356437b8b9b0064bb1425147fd967e62dd3d6dbc..b03c0db719e57ac45725780b7491161b8e59f0e5 100644 --- a/Gui/DataView/MshView.h +++ b/Gui/DataView/MshView.h @@ -42,9 +42,8 @@ public slots: void updateView(); protected slots: - /// Is called when the selection of this view changes. Emits a the signal - /// itemSelectionChanged() - //void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected); + /// Is called when the selection of this view changes. + void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected); /// Selects items without sending signals. //void selectionChangedFromOutside(const QItemSelection &selected, @@ -61,7 +60,7 @@ private slots: void openMshEditDialog(); /// Adds a new mesh. - void addMeshAction(); + void addMesh(); void addDIRECTSourceTerms(); @@ -74,7 +73,7 @@ private slots: //void removeAllMeshes(); /// Calls the FileDialog to save a mesh to a file. - int writeMeshToFile() const; + int writeToFile() const; /** * checks the mesh quality @@ -82,6 +81,9 @@ private slots: void checkMeshQuality(); signals: + void enableSaveButton(bool); + void enableRemoveButton(bool); + void openMeshFile(int); void qualityCheckRequested(VtkMeshSource*); void requestCondSetupDialog(const std::string&, const GeoLib::GEOTYPE, const std::size_t, bool on_points); void requestMeshRemoval(const QModelIndex&); @@ -91,7 +93,7 @@ signals: /* void itemSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected); - void itemSelectionChangedFromOutside(const QItemSelection &selected, + //void itemSelectionChangedFromOutside(const QItemSelection &selected, const QItemSelection &deselected); */ }; diff --git a/Gui/DataView/StationTabWidget.cpp b/Gui/DataView/StationTabWidget.cpp index a159b1fd5871f7bfb6a1e969f569e1025845b773..3a08a342d4eb6208d8c0cd17318b18e6772e9ee1 100644 --- a/Gui/DataView/StationTabWidget.cpp +++ b/Gui/DataView/StationTabWidget.cpp @@ -16,4 +16,10 @@ StationTabWidget::StationTabWidget( QWidget* parent /*= 0*/ ) : QWidget(parent) { setupUi(this); + + connect(this->openStnPushButton, SIGNAL(clicked()), this->treeView, SLOT(addStationList())); + connect(this->saveStnPushButton, SIGNAL(clicked()), this->treeView, SLOT(writeToFile())); + connect(this->removeStnPushButton, SIGNAL(clicked()), this->treeView, SLOT(removeStationList())); + connect(this->treeView, SIGNAL(enableSaveButton(bool)), this, SLOT(enableSaveButton(bool))); + connect(this->treeView, SIGNAL(enableRemoveButton(bool)), this, SLOT(enableRemoveButton(bool))); } diff --git a/Gui/DataView/StationTabWidget.h b/Gui/DataView/StationTabWidget.h index 093e6316842b60f3fc2ae955e6be1dcc9c784772..2ca5c415133c801aaf3e36621af5bfd40497b82a 100644 --- a/Gui/DataView/StationTabWidget.h +++ b/Gui/DataView/StationTabWidget.h @@ -26,6 +26,10 @@ public: StationTabWidget(QWidget* parent = 0); private: + +private slots: + void enableSaveButton(bool enable) { this->saveStnPushButton->setEnabled(enable); }; + void enableRemoveButton(bool enable) { this->removeStnPushButton->setEnabled(enable); }; }; #endif // STATIONTABWIDGET_H diff --git a/Gui/DataView/StationTabWidgetBase.ui b/Gui/DataView/StationTabWidgetBase.ui index d1badedab01a12f4430238d2899b82b53f60fe6a..fa44ece4953a4731e366eed65a30569ef39f841e 100644 --- a/Gui/DataView/StationTabWidgetBase.ui +++ b/Gui/DataView/StationTabWidgetBase.ui @@ -17,6 +17,125 @@ <property name="margin"> <number>2</number> </property> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QPushButton" name="openStnPushButton"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>24</width> + <height>24</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>24</width> + <height>24</height> + </size> + </property> + <property name="toolTip"> + <string>Open observation sites...</string> + </property> + <property name="text"> + <string/> + </property> + <property name="icon"> + <iconset resource="../Img/icons.qrc"> + <normaloff>:/Images/open-icon.png</normaloff>:/Images/open-icon.png</iconset> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="saveStnPushButton"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>24</width> + <height>24</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>24</width> + <height>24</height> + </size> + </property> + <property name="toolTip"> + <string>Save observation sites...</string> + </property> + <property name="text"> + <string/> + </property> + <property name="icon"> + <iconset resource="../Img/icons.qrc"> + <normaloff>:/Images/save-icon.png</normaloff>:/Images/save-icon.png</iconset> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="removeStnPushButton"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>24</width> + <height>24</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>24</width> + <height>24</height> + </size> + </property> + <property name="toolTip"> + <string>Remove observation sites</string> + </property> + <property name="text"> + <string/> + </property> + <property name="icon"> + <iconset resource="../Img/icons.qrc"> + <normaloff>:/Images/delete-icon.png</normaloff>:/Images/delete-icon.png</iconset> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> <item> <widget class="StationTreeView" name="treeView"/> </item> @@ -29,6 +148,8 @@ <header>StationTreeView.h</header> </customwidget> </customwidgets> - <resources/> + <resources> + <include location="../Img/icons.qrc"/> + </resources> <connections/> </ui> diff --git a/Gui/DataView/StationTreeView.cpp b/Gui/DataView/StationTreeView.cpp index 2cb476f23697fbe040c5ae2aa6eae15e4efd97f5..979fac8f734e88c05fd749c5736b41da7701a21e 100644 --- a/Gui/DataView/StationTreeView.cpp +++ b/Gui/DataView/StationTreeView.cpp @@ -22,6 +22,7 @@ #include "StationTreeModel.h" #include "StationTreeView.h" #include "StratWindow.h" +#include "ImportFileTypes.h" StationTreeView::StationTreeView(QWidget* parent) : QTreeView(parent) { @@ -37,16 +38,29 @@ void StationTreeView::updateView() setColumnWidth(2,50); } -void StationTreeView::on_Clicked(QModelIndex idx) -{ - qDebug("%d, %d",idx.parent().row(), idx.row()); -} - void StationTreeView::selectionChanged( const QItemSelection &selected, const QItemSelection &deselected ) { - emit itemSelectionChanged(selected, deselected); - return QTreeView::selectionChanged(selected, deselected); + Q_UNUSED(deselected); + if (!selected.isEmpty()) + { + const QModelIndex idx = *(selected.indexes().begin()); + const TreeItem* tree_item = static_cast<TreeModel*>(this->model())->getItem(idx); + + const ModelTreeItem* list_item = dynamic_cast<const ModelTreeItem*>(tree_item); + if (list_item->getItem()) + { + emit enableSaveButton(true); + emit enableRemoveButton(true); + } + else + { + emit enableRemoveButton(false); + emit enableSaveButton(false); + } + } + //emit itemSelectionChanged(selected, deselected); + //return QTreeView::selectionChanged(selected, deselected); } void StationTreeView::selectionChangedFromOutside( const QItemSelection &selected, @@ -76,14 +90,14 @@ void StationTreeView::contextMenuEvent( QContextMenuEvent* event ) QMenu menu; QAction* propertyAction = menu.addAction("Display list properties..."); QAction* exportAction = menu.addAction("Export to GMS..."); - QAction* saveAction = menu.addAction("Save to file..."); + //QAction* saveAction = menu.addAction("Save to file..."); menu.addSeparator(); - QAction* removeAction = menu.addAction("Remove station list"); + //QAction* removeAction = menu.addAction("Remove station list"); connect(propertyAction, SIGNAL(triggered()), this, SLOT(showPropertiesDialog())); connect(exportAction, SIGNAL(triggered()), this, SLOT(exportList())); - connect(saveAction, SIGNAL(triggered()), this, SLOT(saveList())); - connect(removeAction, SIGNAL(triggered()), this, SLOT(removeStationList())); + //connect(saveAction, SIGNAL(triggered()), this, SLOT(saveList())); + //connect(removeAction, SIGNAL(triggered()), this, SLOT(removeStationList())); menu.exec(event->globalPos()); } // The current index refers to a station object @@ -138,14 +152,24 @@ void StationTreeView::displayStratigraphy() stratView->show(); } -void StationTreeView::saveList() +void StationTreeView::addStationList() { - TreeItem* item = static_cast<StationTreeModel*>(model())->getItem( - this->selectionModel()->currentIndex()); - QString listName = item->data(0).toString(); - QString fileName = QFileDialog::getSaveFileName(this, "Save station list", "","*.stn"); - if (!fileName.isEmpty()) - emit stationListSaved(listName, fileName); + emit openStationListFile(ImportFileType::OGS_STN); +} + +void StationTreeView::writeToFile() +{ + QModelIndex index (this->selectionModel()->currentIndex()); + if (!index.isValid()) + OGSError::box("No station list selected."); + else + { + TreeItem* item = static_cast<StationTreeModel*>(model())->getItem(index); + QString listName = item->data(0).toString(); + QString fileName = QFileDialog::getSaveFileName(this, "Save station list", "","*.stn"); + if (!fileName.isEmpty()) + emit stationListSaved(listName, fileName); + } } void StationTreeView::exportList() @@ -188,9 +212,14 @@ void StationTreeView::exportStation() void StationTreeView::removeStationList() { - TreeItem* item = static_cast<StationTreeModel*>(model())->getItem( - this->selectionModel()->currentIndex()); - emit stationListRemoved((item->data(0).toString()).toStdString()); + QModelIndex index (this->selectionModel()->currentIndex()); + if (!index.isValid()) + OGSError::box("No station list selected."); + else + { + TreeItem* item = static_cast<StationTreeModel*>(model())->getItem(index); + emit stationListRemoved((item->data(0).toString()).toStdString()); + } } void StationTreeView::showPropertiesDialog() diff --git a/Gui/DataView/StationTreeView.h b/Gui/DataView/StationTreeView.h index 47fe2a6422935eed16e5455553de805642226428..78a10b3e37a272421e37ad3232b8320d668eecc9 100644 --- a/Gui/DataView/StationTreeView.h +++ b/Gui/DataView/StationTreeView.h @@ -52,18 +52,21 @@ private: void writeStratigraphiesAsImages(QString listName); private slots: - void on_Clicked(QModelIndex idx); + void addStationList(); void displayStratigraphy(); void exportList(); void exportStation(); void removeStationList(); - void saveList(); + void writeToFile(); void showPropertiesDialog(); void showDiagramPrefsDialog(); signals: + void enableSaveButton(bool); + void enableRemoveButton(bool); void itemSelectionChanged(const QItemSelection & selected, const QItemSelection & deselected); + void openStationListFile(int); void propertiesDialogRequested(std::string name); void stationListExportRequested(std::string listName, std::string fileName); void stationListRemoved(std::string name); diff --git a/Gui/Img/delete-icon.png b/Gui/Img/delete-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..253482309d9ec26559fc2bf435e9afdea6158bec Binary files /dev/null and b/Gui/Img/delete-icon.png differ diff --git a/Gui/Img/icons.qrc b/Gui/Img/icons.qrc index 9992a4241c77b456cf7914dc25633517abea7685..29045b759cf1c44de22b8f48fa188abc6bef9566 100644 --- a/Gui/Img/icons.qrc +++ b/Gui/Img/icons.qrc @@ -1,5 +1,9 @@ <RCC> <qresource prefix="Images"> + <file>refresh-icon.png</file> + <file>delete-icon.png</file> + <file>open-icon.png</file> + <file>save-icon.png</file> <file>icon_glass_active.png</file> <file>icon_hlight_active.png</file> <file>icon_persp_active.png</file> diff --git a/Gui/Img/open-icon.png b/Gui/Img/open-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ff530540af800bdf778d99a4f1688527574a6150 Binary files /dev/null and b/Gui/Img/open-icon.png differ diff --git a/Gui/Img/oxygen.icons b/Gui/Img/oxygen.icons new file mode 100644 index 0000000000000000000000000000000000000000..c27544e010fc3fe5e3816527aef5ba0d14bad08c --- /dev/null +++ b/Gui/Img/oxygen.icons @@ -0,0 +1 @@ +http://www.iconarchive.com/show/oxygen-icons-by-oxygen-icons.org.html \ No newline at end of file diff --git a/Gui/Img/refresh-icon.png b/Gui/Img/refresh-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f0abac679939bd59d71d556a11cfde6dacc9550f Binary files /dev/null and b/Gui/Img/refresh-icon.png differ diff --git a/Gui/Img/save-icon.png b/Gui/Img/save-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..46e5e207b0883491221e6cfbca66982df3f66087 Binary files /dev/null and b/Gui/Img/save-icon.png differ diff --git a/Gui/VtkAct/VtkCustomInteractorStyle.cpp b/Gui/VtkAct/VtkCustomInteractorStyle.cpp index 3e7988fbd92d730ba8c253f57f7f52421fcc96d3..4596fbb44aff667c9b039c3c6bc82ddc511f4e59 100644 --- a/Gui/VtkAct/VtkCustomInteractorStyle.cpp +++ b/Gui/VtkAct/VtkCustomInteractorStyle.cpp @@ -177,10 +177,7 @@ void VtkCustomInteractorStyle::OnLeftButtonDown() << " cells in the selection." << std::endl; // check if the underlying object is a mesh and if so, send a signal to the element model for display of information about the picked element. - vtkAlgorithm* data_set = - picker->GetActor()->GetMapper()->GetInputConnection(0, - 0)->GetProducer() - ->GetInputConnection(0,0)->GetProducer(); + vtkAlgorithm* data_set = picker->GetActor()->GetMapper()->GetInputConnection(0, 0)->GetProducer()->GetInputConnection(0,0)->GetProducer(); VtkMeshSource* source = dynamic_cast<VtkMeshSource*>(data_set); if (source) emit elementPicked(source->GetMesh(), picker->GetCellId()); diff --git a/Gui/VtkVis/VtkAlgorithmProperties.cpp b/Gui/VtkVis/VtkAlgorithmProperties.cpp index f5840196c2936b05326bf2f1e1d18a54bf95ed7d..88d7f84bcde2fe4325e2e8a95ccf85da5bc00c1a 100644 --- a/Gui/VtkVis/VtkAlgorithmProperties.cpp +++ b/Gui/VtkVis/VtkAlgorithmProperties.cpp @@ -51,18 +51,23 @@ vtkLookupTable* VtkAlgorithmProperties::GetLookupTable(const QString& array_name return NULL; } +void VtkAlgorithmProperties::RemoveLookupTable(const QString& array_name) +{ + std::map<QString, vtkLookupTable*>::iterator it = _lut.find(array_name); + if (it != _lut.end()) + { + it->second->Delete(); + _lut.erase(it); + } +} + void VtkAlgorithmProperties::SetLookUpTable(const QString &array_name, vtkLookupTable* lut) { lut->Build(); if (array_name.length() > 0) { - std::map<QString, vtkLookupTable*>::iterator it = _lut.find(array_name); - if (it != _lut.end()) - { - it->second->Delete(); - _lut.erase(it); - } + this->RemoveLookupTable(array_name); _lut.insert( std::pair<QString, vtkLookupTable*>(array_name, lut) ); _activeAttributeName = array_name; } diff --git a/Gui/VtkVis/VtkAlgorithmProperties.h b/Gui/VtkVis/VtkAlgorithmProperties.h index 1a31365dda057078f2299604ece89940f3eae108..6330aacc12c36c7e5ca4b50fb9d06c31dfcbe27b 100644 --- a/Gui/VtkVis/VtkAlgorithmProperties.h +++ b/Gui/VtkVis/VtkAlgorithmProperties.h @@ -154,6 +154,9 @@ public: /// @brief Returns the colour lookup table (if one has been assigned). vtkLookupTable* GetLookupTable(const QString& array_name); + /// @brief Removes the lookup table for the given scalar. + void RemoveLookupTable(const QString& array_name); + /// @brief Sets a colour lookup table for the given scalar array of the VtkVisPipelineItem. void SetLookUpTable(const QString &array_name, vtkLookupTable* lut); diff --git a/Gui/VtkVis/VtkVisTabWidget.cpp b/Gui/VtkVis/VtkVisTabWidget.cpp index 280fb057417ed77e70cac23050db2ff9cbdae77c..3940caf52c492c9746601794bb5d8249d6c8ba6c 100644 --- a/Gui/VtkVis/VtkVisTabWidget.cpp +++ b/Gui/VtkVis/VtkVisTabWidget.cpp @@ -18,6 +18,7 @@ #include <vtkActor.h> #include <vtkImageChangeInformation.h> +#include <vtkLookupTable.h> #include <vtkProperty.h> #include <vtkTransform.h> #include <vtkTransformFilter.h> @@ -55,6 +56,14 @@ VtkVisTabWidget::VtkVisTabWidget( QWidget* parent /*= 0*/ ) this, SLOT(SetActiveAttributeOnItem(const QString &))); } +void VtkVisTabWidget::on_arrayResetPushButton_clicked() +{ + VtkAlgorithmProperties* props = _item->getVtkProperties(); + const QString selected_array_name = this->activeScalarComboBox->currentText(); + props->RemoveLookupTable(selected_array_name); + _item->SetActiveAttribute(selected_array_name); +} + void VtkVisTabWidget::setActiveItem( VtkVisPipelineItem* item ) { if (item) @@ -131,25 +140,6 @@ void VtkVisTabWidget::setActiveItem( VtkVisPipelineItem* item ) this->buildProportiesDialog(item); - // - ///* Integrating colour tables into property-window (test!) */ - //VtkStationSource* test = dynamic_cast<VtkStationSource*>(_item->algorithm()); - //if (test) - //{ - // std::map<std::string, GeoLib::Color> colors = test->getColorLookupTable(); - // if (!colors.empty()) - // { - // ColorTableModel* ctm = new ColorTableModel(colors); - // ColorTableView* ctv = new ColorTableView(); - // ctv->setModel(ctm); - // ctv->setItemDelegate(new ColorTableViewDelegate); - // vbox->addWidget(ctv); - // ctv->resizeRowsToContents(); - // } - //} - - /**/ - emit requestViewUpdate(); } else @@ -335,8 +325,7 @@ void VtkVisTabWidget::buildProportiesDialog(VtkVisPipelineItem* item) foreach (QVariant variant, values) valuesAsString.push_back(variant.toString()); - vectorEdit = new VtkAlgorithmPropertyVectorEdit(valuesAsString, - key, + vectorEdit = new VtkAlgorithmPropertyVectorEdit(valuesAsString, key, values.front().type(), algProps); connect(vectorEdit, SIGNAL(editingFinished()), this, @@ -355,9 +344,22 @@ void VtkVisTabWidget::buildScalarArrayComboBox(VtkVisPipelineItem* item) this->activeScalarComboBox->clear(); this->activeScalarComboBox->insertItems(0, dataSetAttributesList); this->activeScalarComboBox->blockSignals(false); + QString active_array_name = item->GetActiveAttribute(); QList<QString>::iterator it = dataSetAttributesList.begin(); - if (item->GetActiveAttribute().count() == 0) + if (active_array_name.length() == 0) item->SetActiveAttribute(*it); + else + { + unsigned nArrays (dataSetAttributesList.size()); + int idx(0); + for (it=dataSetAttributesList.begin(); it!=dataSetAttributesList.end(); ++it) + if (active_array_name.compare((*it).right((*it).length()-2))==0) + { + this->activeScalarComboBox->setCurrentIndex(idx); + break; + } + else idx++; + } } void VtkVisTabWidget::SetActiveAttributeOnItem( const QString &name ) diff --git a/Gui/VtkVis/VtkVisTabWidget.h b/Gui/VtkVis/VtkVisTabWidget.h index 10e7061348cd2021c80b99c61552f7b42424eb1c..24196144fabace8013a0e3aa5641e67c0244b54e 100644 --- a/Gui/VtkVis/VtkVisTabWidget.h +++ b/Gui/VtkVis/VtkVisTabWidget.h @@ -34,6 +34,7 @@ protected slots: /// Updates the property panels to show informations on the given VtkVisPipelineItem. void setActiveItem(VtkVisPipelineItem* item); + void on_arrayResetPushButton_clicked(); void on_diffuseColorPickerButton_colorPicked(QColor color); void on_visibleEdgesCheckBox_stateChanged(int state); void on_edgeColorPickerButton_colorPicked(QColor color); diff --git a/Gui/VtkVis/VtkVisTabWidgetBase.ui b/Gui/VtkVis/VtkVisTabWidgetBase.ui index 5bad5ace50b77877336788fc9cc91a94414b79fb..cd1c2f1a71a5d5fc0b8b6333286ef470cc36dad9 100644 --- a/Gui/VtkVis/VtkVisTabWidgetBase.ui +++ b/Gui/VtkVis/VtkVisTabWidgetBase.ui @@ -65,7 +65,7 @@ <property name="margin"> <number>3</number> </property> - <item row="0" column="1"> + <item row="0" column="1" colspan="2"> <widget class="ColorPickerPushButton" name="diffuseColorPickerButton"> <property name="text"> <string>(255,255,255)</string> @@ -86,7 +86,7 @@ </property> </widget> </item> - <item row="3" column="1"> + <item row="3" column="1" colspan="2"> <widget class="ColorPickerPushButton" name="edgeColorPickerButton"> <property name="text"> <string>(255, 255, 255)</string> @@ -100,7 +100,7 @@ </property> </widget> </item> - <item row="4" column="1"> + <item row="4" column="1" colspan="2"> <widget class="QValueTooltipSlider" name="opacitySlider"> <property name="maximum"> <number>100</number> @@ -123,6 +123,35 @@ </property> </widget> </item> + <item row="1" column="2"> + <widget class="QPushButton" name="arrayResetPushButton"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>24</width> + <height>0</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>24</width> + <height>16777215</height> + </size> + </property> + <property name="text"> + <string/> + </property> + <property name="icon"> + <iconset resource="../Img/icons.qrc"> + <normaloff>:/Images/refresh-icon.png</normaloff>:/Images/refresh-icon.png</iconset> + </property> + </widget> + </item> </layout> </widget> </item> @@ -375,6 +404,8 @@ <header>QValueTooltipSlider.h</header> </customwidget> </customwidgets> - <resources/> + <resources> + <include location="../Img/icons.qrc"/> + </resources> <connections/> </ui> diff --git a/Gui/mainwindow.cpp b/Gui/mainwindow.cpp index 431134a13ac21252f36255f9a8312673848de4a2..c034f2797541af9a927ade4b2a3e997e654265f0 100644 --- a/Gui/mainwindow.cpp +++ b/Gui/mainwindow.cpp @@ -140,6 +140,8 @@ MainWindow::MainWindow(QWidget* parent /* = 0*/) _vtkVisPipeline = new VtkVisPipeline(visualizationWidget->renderer()); // station model connects + connect(stationTabWidget->treeView, SIGNAL(openStationListFile(int)), + this, SLOT(open(int))); connect(stationTabWidget->treeView, SIGNAL(stationListExportRequested(std::string, std::string)), this, SLOT(exportBoreholesToGMS(std::string, std::string))); // export Stationlist to GMS connect(stationTabWidget->treeView, SIGNAL(stationListRemoved(std::string)), _geoModels, @@ -152,6 +154,8 @@ MainWindow::MainWindow(QWidget* parent /* = 0*/) this, SLOT(showDiagramPrefsDialog(QModelIndex &))); // connect treeview to diagramview // geo model connects + connect(geoTabWidget->treeView, SIGNAL(openGeometryFile(int)), + this, SLOT(open(int))); connect(geoTabWidget->treeView, SIGNAL(listRemoved(std::string, GeoLib::GEOTYPE)), _geoModels, SLOT(removeGeometry(std::string, GeoLib::GEOTYPE))); connect(geoTabWidget->treeView, SIGNAL(geometryMappingRequested(const std::string&)), @@ -179,6 +183,8 @@ MainWindow::MainWindow(QWidget* parent /* = 0*/) // Setup connections for mesh models to GUI + connect(mshTabWidget->treeView, SIGNAL(openMeshFile(int)), + this, SLOT(open(int))); connect(mshTabWidget->treeView, SIGNAL(requestMeshRemoval(const QModelIndex &)), _meshModels, SLOT(removeMesh(const QModelIndex &))); connect(mshTabWidget->treeView, SIGNAL(requestMeshRemoval(const QModelIndex &)), @@ -487,7 +493,7 @@ void MainWindow::loadFile(ImportFileType::type t, const QString &fileName) QFileInfo fi(fileName); std::string base = fi.absoluteDir().absoluteFilePath(fi.completeBaseName()).toStdString(); - if (t == ImportFileType::OGS) + if (t == ImportFileType::OGS || t == ImportFileType::OGS_GEO || t == ImportFileType::OGS_STN || t == ImportFileType::OGS_MSH) { if (fi.suffix().toLower() == "gli") { diff --git a/Gui/mainwindow.ui b/Gui/mainwindow.ui index e056d6667eef8030a5d0943a60aa75c635844742..f965c4eb1e35a93b5f7947b3c2fb70c7f207ef9b 100644 --- a/Gui/mainwindow.ui +++ b/Gui/mainwindow.ui @@ -231,6 +231,9 @@ </attribute> <widget class="QWidget" name="dockWidgetContents_5"> <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="margin"> + <number>1</number> + </property> <item> <widget class="GeoTabWidget" name="geoTabWidget" native="true"> <property name="enabled"> diff --git a/MeshLib/MeshQuality/MeshQualityChecker.cpp b/MeshLib/MeshQuality/MeshQualityChecker.cpp index 83fad02943f17e26d7cdbe5b0db4fb56d7cdbc56..e51f4461e738fe33d6bc95585add36b04569f7cf 100644 --- a/MeshLib/MeshQuality/MeshQualityChecker.cpp +++ b/MeshLib/MeshQuality/MeshQualityChecker.cpp @@ -18,7 +18,7 @@ namespace MeshLib { MeshQualityChecker::MeshQualityChecker(Mesh const* const mesh) : - _min (-1.0), _max (-1.0), _mesh (mesh) + _min (std::numeric_limits<double>::max()), _max (std::numeric_limits<double>::min()), _mesh (mesh) { if (_mesh) _mesh_quality_measure.resize (_mesh->getNElements(), -1.0); diff --git a/MeshLib/MeshQuality/MeshQualityVolume.cpp b/MeshLib/MeshQuality/MeshQualityVolume.cpp index 4f16e76c9f071e24c4638c70ce5faac8a3954051..41239a466ea8e905bf46d5bbeb52695f3dae105d 100644 --- a/MeshLib/MeshQuality/MeshQualityVolume.cpp +++ b/MeshLib/MeshQuality/MeshQualityVolume.cpp @@ -37,7 +37,7 @@ void MeshQualityVolume::check() || elem_type == MshElemType::TRIANGLE || elem_type == MshElemType::QUAD) { - _mesh_quality_measure[k] = -1.0; + _mesh_quality_measure[k] = 0.0; continue; }