1 // Copyright (C) 2004-2012 CEA/DEN, EDF R&D
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 // GHS3DPlugin GUI: GUI for plugged-in mesher GHS3DPlugin
21 // File : GHS3DPluginGUI_HypothesisCreator.h
22 // Author : Michael Zorin
23 // Module : GHS3DPlugin
25 #ifndef GHS3DPLUGINGUI_HypothesisCreator_HeaderFile
26 #define GHS3DPLUGINGUI_HypothesisCreator_HeaderFile
29 #if defined GHS3DPluginGUI_EXPORTS
30 #define GHS3DPLUGINGUI_EXPORT __declspec( dllexport )
32 #define GHS3DPLUGINGUI_EXPORT __declspec( dllimport )
35 #define GHS3DPLUGINGUI_EXPORT
38 #include <SMESHGUI_Hypotheses.h>
39 #include <GeomSelectionTools.h>
40 #include <TopAbs_ShapeEnum.hxx>
42 #include <QItemDelegate>
46 #include <GEOM_Client.hxx>
47 #include CORBA_SERVER_HEADER(GHS3DPlugin_Algorithm)
48 #include CORBA_SERVER_HEADER(SMESH_Gen)
49 #include CORBA_SERVER_HEADER(SMESH_Mesh)
57 class QTableWidgetItem;
60 class SMESHGUI_SpinBox;
61 class StdMeshersGUI_ObjectReferenceParamWdg;
62 class LightApp_SelectionMgr;
63 class SUIT_SelectionFilter;
69 QTEnfVertex(double size, double x=0., double y=0., double z=0., QString name="", QString geomEntry="", QString groupName="", bool isCompound = false);
72 bool operator == (const QTEnfVertex* other) const {
74 if (this->coords.size() && other->coords.size())
75 return (this->coords == other->coords);
77 return (this->geomEntry == other->geomEntry);
86 std::vector<double> coords;
89 typedef QList< QTEnfVertex* > QEnfVertexList;
94 std::string geomEntry;
96 std::vector<double> coords;
97 std::string groupName;
101 struct CompareEnfVertices
103 bool operator () (const TEnfVertex* e1, const TEnfVertex* e2) const {
105 if (e1->coords.size() && e2->coords.size())
106 return (e1->coords < e2->coords);
108 return (e1->geomEntry < e2->geomEntry);
114 // List of enforced vertices
115 typedef std::set< TEnfVertex*, CompareEnfVertices > TEnfVertexList;
122 std::string groupName;
126 struct CompareEnfMeshes
128 bool operator () (const TEnfMesh* e1, const TEnfMesh* e2) const {
130 if (e1->entry == e2->entry)
131 return (e1->elementType < e2->elementType);
133 return (e1->entry < e2->entry);
139 // List of enforced meshes
140 typedef std::set< TEnfMesh*, CompareEnfMeshes > TEnfMeshList;
144 bool myToMeshHoles,myKeepFiles,myToCreateNewNodes,myBoundaryRecovery,myFEMCorrection,myRemoveInitialCentralPoint;
145 int myMaximumMemory,myInitialMemory,myOptimizationLevel;
146 QString myName,myWorkingDir,myTextOption;
147 short myVerboseLevel;
148 TEnfVertexList myEnforcedVertices;
149 TEnfMeshList myEnforcedMeshes;
150 } GHS3DHypothesisData;
153 \brief Class for creation of GHS3D2D and GHS3D3D hypotheses
155 class GHS3DPLUGINGUI_EXPORT GHS3DPluginGUI_HypothesisCreator : public SMESHGUI_GenericHypothesisCreator
160 GHS3DPluginGUI_HypothesisCreator( const QString& );
161 virtual ~GHS3DPluginGUI_HypothesisCreator();
163 virtual bool checkParams(QString& msg) const;
164 virtual QString helpPage() const;
167 virtual QFrame* buildFrame ();
168 virtual void retrieveParams() const;
169 virtual QString storeParams () const;
171 virtual QString caption() const;
172 virtual QPixmap icon() const;
173 virtual QString type() const;
176 void onDirBtnClicked();
177 void updateWidgets();
179 void addEnforcedVertex(double x=0, double y=0, double z=0, double size = 0,
180 std::string vertexName = "", std::string geomEntry = "", std::string groupName = "",
181 bool isCompound = false);
182 void onAddEnforcedVertex();
183 void onRemoveEnforcedVertex();
184 void synchronizeCoords();
185 void updateEnforcedVertexValues(QTableWidgetItem* );
186 void onSelectEnforcedVertex();
187 void clearEnforcedVertexWidgets();
188 void checkVertexIsDefined();
189 void clearEnfVertexSelection();
191 void addEnforcedMesh(std::string name, std::string entry, int elementType, double size = 0, std::string groupName = "");
192 void onAddEnforcedMesh();
193 void onRemoveEnforcedMesh();
194 //void synchronizeEnforcedMesh();
195 void checkEnfMeshIsDefined();
198 void vertexDefined(bool);
199 void enfMeshDefined(bool);
202 bool readParamsFromHypo( GHS3DHypothesisData& ) const;
203 bool readParamsFromWidgets( GHS3DHypothesisData& ) const;
204 bool storeParamsToHypo( const GHS3DHypothesisData& ) const;
205 GeomSelectionTools* getGeomSelectionTool();
206 GEOM::GEOM_Gen_var getGeomEngine();
211 QCheckBox* myToMeshHolesCheck;
212 QComboBox* myOptimizationLevelCombo;
215 QCheckBox* myMaximumMemoryCheck;
216 QSpinBox* myMaximumMemorySpin;
217 QCheckBox* myInitialMemoryCheck;
218 QSpinBox* myInitialMemorySpin;
219 QLineEdit* myWorkingDir;
220 QCheckBox* myKeepFiles;
221 QSpinBox* myVerboseLevelSpin;
222 QCheckBox* myToCreateNewNodesCheck;
223 QCheckBox* myRemoveInitialCentralPointCheck;
224 QCheckBox* myBoundaryRecoveryCheck;
225 QCheckBox* myFEMCorrectionCheck;
226 QLineEdit* myTextOption;
229 QPixmap iconVertex, iconCompound;
230 StdMeshersGUI_ObjectReferenceParamWdg *myEnfVertexWdg;
231 GEOM::GEOM_Object_var myEnfVertex;
232 QTableWidget* myEnforcedTableWidget;
233 SMESHGUI_SpinBox* myXCoord;
234 SMESHGUI_SpinBox* myYCoord;
235 SMESHGUI_SpinBox* myZCoord;
236 SMESHGUI_SpinBox* mySizeValue;
237 QLineEdit* myGroupName;
238 // QGroupBox* makeGroupsCheck;
239 // QCheckBox* myGlobalGroupName;
240 QPushButton* addVertexButton;
241 QPushButton* removeVertexButton;
243 QWidget* myEnfMeshGroup;
244 StdMeshersGUI_ObjectReferenceParamWdg *myEnfMeshWdg;
245 // SMESH::SMESH_IDSource_var myEnfMesh;
246 QComboBox* myEnfMeshConstraint;
247 QStringList myEnfMeshConstraintLabels;
248 // SMESH::mesh_array_var myEnfMeshArray;
249 QTableWidget* myEnforcedMeshTableWidget;
250 SMESHGUI_SpinBox* myMeshSizeValue;
251 QLineEdit* myMeshGroupName;
252 QPushButton* addEnfMeshButton;
253 QPushButton* removeEnfMeshButton;
255 GeomSelectionTools* GeomToolSelected;
256 // SVTK_Selector* mySelector;
257 // LightApp_SelectionMgr* mySelectionMgr; /* User shape selection */
260 class EnforcedVertexTableWidgetDelegate : public QItemDelegate
265 EnforcedVertexTableWidgetDelegate(QObject *parent = 0);
267 QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
268 const QModelIndex &index) const;
270 void setEditorData(QWidget *editor, const QModelIndex &index) const;
271 void setModelData(QWidget *editor, QAbstractItemModel *model,
272 const QModelIndex &index) const;
274 void updateEditorGeometry(QWidget *editor,
275 const QStyleOptionViewItem &option, const QModelIndex &index) const;
277 bool vertexExists(QAbstractItemModel *model, const QModelIndex &index, QString value) const;
280 class EnforcedMeshTableWidgetDelegate : public QItemDelegate
285 EnforcedMeshTableWidgetDelegate(QObject *parent = 0);
287 QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
288 const QModelIndex &index) const;
290 void setEditorData(QWidget *editor, const QModelIndex &index) const;
291 void setModelData(QWidget *editor, QAbstractItemModel *model,
292 const QModelIndex &index) const;
294 void updateEditorGeometry(QWidget *editor,
295 const QStyleOptionViewItem &option, const QModelIndex &index) const;