Salome HOME
Merge multi-study removal branch.
[plugins/hybridplugin.git] / src / HYBRIDPlugin / HYBRIDPlugin_Hypothesis_i.hxx
1 // Copyright (C) 2007-2016  CEA/DEN, EDF R&D
2 //
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, or (at your option) any later version.
7 //
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.
12 //
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
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19
20 // ---
21 // File   : HYBRIDPlugin_Hypothesis_i.hxx
22 // Author : Christian VAN WAMBEKE (CEA)
23 // ---
24 //
25 #ifndef _HYBRIDPlugin_Hypothesis_i_HXX_
26 #define _HYBRIDPlugin_Hypothesis_i_HXX_
27
28 #include "HYBRIDPlugin_Defs.hxx"
29
30 #include <SALOMEconfig.h>
31 #include CORBA_SERVER_HEADER(HYBRIDPlugin_Algorithm)
32
33 #include "SMESH_Hypothesis_i.hxx"
34 #include "SMESH_Mesh_i.hxx"
35 #include "HYBRIDPlugin_Hypothesis.hxx"
36
37 class SMESH_Gen;
38
39 // HYBRIDPlugin parameters hypothesis
40
41 class HYBRIDPLUGIN_EXPORT HYBRIDPlugin_Hypothesis_i:
42   public virtual POA_HYBRIDPlugin::HYBRIDPlugin_Hypothesis,
43   public virtual SMESH_Hypothesis_i
44 {
45  public:
46   // Constructor
47   HYBRIDPlugin_Hypothesis_i (PortableServer::POA_ptr thePOA,
48                              ::SMESH_Gen*            theGenImpl);
49   // Destructor
50   virtual ~HYBRIDPlugin_Hypothesis_i();
51
52   /*!
53    * To mesh "holes" in a solid or not. Default is to mesh.
54    */
55   void SetToMeshHoles(CORBA::Boolean toMesh);
56   CORBA::Boolean GetToMeshHoles();
57    /*!
58    * IDs of faces to grow the layers on
59    */
60   void SetFacesWithLayers(const SMESH::long_array& faceIDs);
61   SMESH::long_array* GetFacesWithLayers();
62   /*!
63    * IDs of faces to imprint the layers on
64    */
65   void SetFacesWithImprinting(const SMESH::long_array& faceIDs);
66   SMESH::long_array* GetFacesWithImprinting();
67   /*!
68    * To mesh "layers on all wrap". Default is to mesh.
69    */
70   void SetLayersOnAllWrap(CORBA::Boolean toMesh);
71   CORBA::Boolean GetLayersOnAllWrap();
72   /*!
73    * To make groups of volumes of different domains when mesh is generated from skin.
74    * Default is to make groups.
75    * This option works only (1) for the mesh w/o shape and (2) if GetToMeshHoles() == true
76    */
77   void SetToMakeGroupsOfDomains(CORBA::Boolean toMakeGroups);
78   CORBA::Boolean GetToMakeGroupsOfDomains();
79   /*!
80    * Maximal size of memory to be used by the algorithm (in Megabytes)
81    */
82   void SetMaximumMemory(CORBA::Double MB) throw ( SALOME::SALOME_Exception );
83   CORBA::Double GetMaximumMemory();
84   /*!
85    * Initial size of memory to be used by the algorithm (in Megabytes) in
86    * automatic memory adjustment mode. Default is zero
87    */
88   void SetInitialMemory(CORBA::Double MB) throw ( SALOME::SALOME_Exception );
89   CORBA::Double GetInitialMemory();
90   /*!
91    * Optimization level: 0-none, 1-light, 2-medium, 3-strong. Default is medium
92    */
93   void SetOptimizationLevel(CORBA::Short level) throw ( SALOME::SALOME_Exception );
94   CORBA::Short GetOptimizationLevel();
95   /*!
96    * Collision Mode: 0-decrease, 1-stop. Default is decrease
97    */
98   void SetCollisionMode(CORBA::Short mode) throw ( SALOME::SALOME_Exception );
99   CORBA::Short GetCollisionMode();
100   /*!
101    * Path to working directory
102    */
103   void SetWorkingDirectory(const char* path) throw ( SALOME::SALOME_Exception );
104   char* GetWorkingDirectory();
105   /*!
106    * To keep working files or remove them. Log file remains in case of errors anyway.
107    */
108   void SetKeepFiles(CORBA::Boolean toKeep);
109   CORBA::Boolean GetKeepFiles();
110   /*!
111    * Verbose level [0-10]
112    *  0 - no standard output,
113    *  2 - prints the data, quality statistics of the skin and final meshes and
114    *     indicates when the final mesh is being saved. In addition the software
115    *     gives indication regarding the CPU time.
116    * 10 - same as 2 plus the main steps in the computation, quality statistics
117    *     histogram of the skin mesh, quality statistics histogram together with
118    *     the characteristics of the final mesh.
119    */
120   void SetVerboseLevel(CORBA::Short level) throw ( SALOME::SALOME_Exception );
121   CORBA::Short GetVerboseLevel();
122   /*!
123    * To create new nodes
124    */
125   void SetToCreateNewNodes(CORBA::Boolean toCreate);
126   CORBA::Boolean GetToCreateNewNodes();
127   /*!
128    * To use boundary recovery version which tries to create mesh on a very poor
129    * quality surface mesh
130    */
131   void SetToUseBoundaryRecoveryVersion(CORBA::Boolean toUse);
132   CORBA::Boolean GetToUseBoundaryRecoveryVersion();
133   /*!
134    * Applies finite-element correction by replacing overconstrained elements where
135    * it is possible. The process is cutting first the overconstrained edges and
136    * second the overconstrained facets. This insure that no edges have two boundary
137    * vertices and that no facets have three boundary vertices.
138    */
139   void SetFEMCorrection(CORBA::Boolean toUseFem);
140   CORBA::Boolean GetFEMCorrection();
141   /*!
142    * To removes initial central point.
143    */
144   void SetToRemoveCentralPoint(CORBA::Boolean toRemove);
145   CORBA::Boolean GetToRemoveCentralPoint();
146   /*!
147    * To set hiden/undocumented/advanced options
148    */
149   void SetAdvancedOption(const char* theOptAndVals );
150   char* GetAdvancedOption();
151   void SetTextOption(const char* option);
152   char* GetTextOption();
153   /*!
154   * To define the volumic gradation
155   */
156   void SetGradation(CORBA::Double gradation);
157   CORBA::Double GetGradation();
158   /*!
159   * Print log in standard output
160   */
161   void SetStandardOutputLog(CORBA::Boolean logInStandardOutput);
162   CORBA::Boolean GetStandardOutputLog();
163   /*!
164   * Remove log file on success
165   */
166   void SetRemoveLogOnSuccess(CORBA::Boolean removeLogOnSuccess);
167   CORBA::Boolean GetRemoveLogOnSuccess();
168   
169   void SetBoundaryLayersGrowth(CORBA::Short mode) throw ( SALOME::SALOME_Exception );
170   CORBA::Short GetBoundaryLayersGrowth();
171
172   void SetElementGeneration(CORBA::Short mode) throw ( SALOME::SALOME_Exception );
173   CORBA::Short GetElementGeneration();
174
175   void SetAddMultinormals(CORBA::Boolean toAddMultinormals);
176   CORBA::Boolean GetAddMultinormals();
177
178   void SetSmoothNormals(CORBA::Boolean toSmoothNormals);
179   CORBA::Boolean GetSmoothNormals();
180
181   void SetHeightFirstLayer(CORBA::Double toHeightFirstLayer);
182   CORBA::Double GetHeightFirstLayer();
183
184   void SetBoundaryLayersProgression(CORBA::Double toBoundaryLayersProgression);
185   CORBA::Double GetBoundaryLayersProgression();
186   
187   void SetCoreSize(CORBA::Double toCoreSize);
188   CORBA::Double GetCoreSize();
189
190   void SetMultinormalsAngle(CORBA::Double toMultinormalsAngle);
191   CORBA::Double GetMultinormalsAngle();
192   
193   void SetNbOfBoundaryLayers(CORBA::Short toNbOfBoundaryLayers);
194   CORBA::Short GetNbOfBoundaryLayers();
195
196   /*!
197    * To set an enforced vertex
198    */
199   bool p_SetEnforcedVertex(CORBA::Double size, CORBA::Double x = 0, CORBA::Double y = 0, CORBA::Double z = 0,
200                            const char* theVertexName = "", const char* theVertexEntry = "", const char* theGroupName = "",
201                            CORBA::Boolean isCompound = false) 
202     throw (SALOME::SALOME_Exception);
203   bool SetEnforcedVertex(CORBA::Double x, CORBA::Double y, CORBA::Double z, CORBA::Double size) throw (SALOME::SALOME_Exception);
204   bool SetEnforcedVertexNamed(CORBA::Double x, CORBA::Double y, CORBA::Double z, CORBA::Double size, const char* theVertexName) throw (SALOME::SALOME_Exception);
205   bool SetEnforcedVertexWithGroup(CORBA::Double x, CORBA::Double y, CORBA::Double z, CORBA::Double size, const char* theGroupName) throw (SALOME::SALOME_Exception);
206   bool SetEnforcedVertexNamedWithGroup(CORBA::Double x, CORBA::Double y, CORBA::Double z, CORBA::Double size, const char* theVertexName, const char* theGroupName) throw (SALOME::SALOME_Exception);
207   bool SetEnforcedVertexGeom(GEOM::GEOM_Object_ptr theVertex, CORBA::Double size) throw (SALOME::SALOME_Exception);
208   bool SetEnforcedVertexGeomWithGroup(GEOM::GEOM_Object_ptr theVertex, CORBA::Double size, const char* theGroupName) throw (SALOME::SALOME_Exception);
209   CORBA::Double GetEnforcedVertex(CORBA::Double x, CORBA::Double y, CORBA::Double z) throw (SALOME::SALOME_Exception);
210   CORBA::Double GetEnforcedVertexGeom(GEOM::GEOM_Object_ptr theVertex) throw (SALOME::SALOME_Exception);
211   bool RemoveEnforcedVertex(CORBA::Double x, CORBA::Double y, CORBA::Double z) throw (SALOME::SALOME_Exception);
212   bool RemoveEnforcedVertexGeom(GEOM::GEOM_Object_ptr theVertex) throw (SALOME::SALOME_Exception);
213   HYBRIDPlugin::HYBRIDEnforcedVertexList* GetEnforcedVertices();
214   void ClearEnforcedVertices();
215   /*!
216    * To set an enforced mesh
217    */  
218   bool p_SetEnforcedMesh(SMESH::SMESH_IDSource_ptr theSource, SMESH::ElementType elementType, const char* theName="", const char* theGroupName="") throw (SALOME::SALOME_Exception);
219   bool SetEnforcedMesh(SMESH::SMESH_IDSource_ptr theSource, SMESH::ElementType elementType) throw (SALOME::SALOME_Exception);
220   bool SetEnforcedMeshWithGroup(SMESH::SMESH_IDSource_ptr theSource, SMESH::ElementType elementType, const char* theGroupName) throw (SALOME::SALOME_Exception);
221
222   /* OBSOLETE FUNCTIONS */
223   bool SetEnforcedMeshSize(SMESH::SMESH_IDSource_ptr theSource, SMESH::ElementType elementType, double size) throw (SALOME::SALOME_Exception);
224   bool SetEnforcedMeshSizeWithGroup(SMESH::SMESH_IDSource_ptr theSource, SMESH::ElementType elementType, double size, const char* theGroupName) throw (SALOME::SALOME_Exception);
225   /* OBSOLETE FUNCTIONS */
226
227   HYBRIDPlugin::HYBRIDEnforcedMeshList* GetEnforcedMeshes();
228   void ClearEnforcedMeshes();
229
230   // Get implementation
231   ::HYBRIDPlugin_Hypothesis* GetImpl();
232
233   // Verify whether hypothesis supports given entity type
234   CORBA::Boolean IsDimSupported( SMESH::Dimension type );
235   
236 };
237
238 #endif