Salome HOME
Add PreCAD IDL functions and implementations
[plugins/blsurfplugin.git] / idl / BLSURFPlugin_Algorithm.idl
1 // Copyright (C) 2007-2011  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.
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    : BLSURFPlugin_Algorithm.idl
22 // Authors : Francis KLOSS (OCC) & Patrick LAUG (INRIA) & Lioka RAZAFINDRAZAKA (CEA)
23 //           Size maps developement: Nicolas GEIMER (OCC) & Gilles DAVID (EURIWARE)
24 // ---
25 //
26 #ifndef _SMESH_BLSURFALGORITHM_IDL_
27 #define _SMESH_BLSURFALGORITHM_IDL_
28
29 #include "SMESH_Hypothesis.idl"
30 #include "GEOM_Gen.idl"
31 #include "SALOME_Exception.idl"
32
33 /*!
34  * BLSURFPlugin: interfaces to BLSURF related hypotheses and algorithms
35  */
36 module BLSURFPlugin
37 {
38   typedef sequence<string> string_array;
39
40   // Enforced vertex name
41   typedef string TEnfName;
42   // Entry
43   typedef string TEntry;
44   typedef sequence<TEntry> TEntryList;
45   // Group name
46   typedef string TEnfGroupName;
47   
48   // Coordinates of enforced vertex
49   typedef sequence<double,3> TEnfVertexCoords;
50   // List of coords
51   typedef sequence<TEnfVertexCoords> TEnfVertexCoordsList;
52   
53   // Enforced vertex
54   struct TEnfVertex {
55     TEnfName name;
56     TEntry geomEntry;
57     TEnfVertexCoords coords;
58     TEnfGroupName grpName;
59     TEntryList faceEntries;
60   };
61   // List of enforced vertices
62   typedef sequence<TEnfVertex> TEnfVertexList;
63
64   // Map Face Entry / List of enforced vertices
65   struct TFaceEntryEnfVertexListMapElement {
66     TEntry faceEntry;
67     TEnfVertexList enfVertexList;
68   };
69   typedef sequence<TFaceEntryEnfVertexListMapElement> TFaceEntryEnfVertexListMap;
70   
71   // Map Face Entry / List of coords
72   struct TFaceEntryCoordsListMapElement {
73     TEntry faceEntry;
74     TEnfVertexCoordsList coordsList;
75   };
76   typedef sequence<TFaceEntryCoordsListMapElement> TFaceEntryCoordsListMap;
77   
78   // Map Face Entry / List of enf vertex entries
79   struct TFaceEntryEnfVertexEntryListMapElement {
80     TEntry faceEntry;
81     TEntryList enfVertexEntryList;
82   };
83   typedef sequence<TFaceEntryEnfVertexEntryListMapElement> TFaceEntryEnfVertexEntryListMap;
84   
85   // Map Coords / Enforced vertex
86   struct TCoordsEnfVertexElement {
87     TEnfVertexCoords coords;
88     TEnfVertex enfVertex;
89   };
90   typedef sequence<TCoordsEnfVertexElement> TCoordsEnfVertexMap;
91   
92   // Map Enf Vertex Entry / Enforced vertex
93   struct TEnfVertexEntryEnfVertexElement {
94     TEntry enfVertexEntry;
95     TEnfVertex enfVertex;
96   };
97   typedef sequence<TEnfVertexEntryEnfVertexElement> TEnfVertexEntryEnfVertexMap;
98
99   // Attractors
100   struct TAttractorParams {
101     string faceEntry;
102     string attEntry;
103     double startSize;
104     double endSize;
105     double infDist;
106     double constDist;
107   };
108   typedef sequence<TAttractorParams> TAttParamsMap;
109   
110   /*!
111    * BLSURFPlugin_BLSURF: interface of BLSURF algorithm
112    */
113   interface BLSURFPlugin_BLSURF : SMESH::SMESH_2D_Algo
114   {
115   };
116
117   /*!
118    * BLSURFPlugin_Hypothesis: interface of "BLSURF parameters" hypothesis
119    */
120   interface BLSURFPlugin_Hypothesis : SMESH::SMESH_Hypothesis
121   {
122     /*!
123      * Sets topology usage way defining how mesh conformity is assured
124      * value=0 - mesh conformity is assured by conformity of a shape
125      * value=1,2 - mesh conformity is assured by pre-processing a CAD model
126      * value=3 - mesh conformity is assured by pre-processing a CAD model with Pre-CAD
127      */
128     void SetTopology(in long way);
129     long GetTopology();
130
131     /*!
132      * Sets a way to define size of mesh elements to generate
133      * 0 - size is defined automatically
134      * 1 - size is set by SetPhySize() method
135      * 2 - size is set by SetPhySize() method. A sizemap is defined.
136      */
137     void SetPhysicalMesh(in long isCustom);
138     long GetPhysicalMesh();
139
140     /*!
141      * Sets size of mesh elements to generate
142      */
143     void SetPhySize(in double size);
144     double GetPhySize();
145
146     /*!
147      * Sets lower boundary of mesh element size (PhySize)
148      */
149     void SetPhyMin(in double theMinSize);
150     double GetPhyMin();
151
152     /*!
153      * Sets upper boundary of mesh element size (PhySize)
154      */
155     void SetPhyMax(in double theMaxSize);
156     double GetPhyMax();
157
158     /*!
159      * Sets a way to define maximum angular deflection of mesh from CAD model
160      * 0 - deflection is defined automatically
161      * 1 - deflection is set by SetAngleMeshS() and SetAngleMeshC() methods
162      */
163     void SetGeometricMesh(in long isCustom);
164     long GetGeometricMesh();
165
166     /*!
167      * Sets angular deflection (in degrees) of a mesh face from CAD surface
168      */
169     void SetAngleMeshS(in double angle);
170     double GetAngleMeshS();
171
172     /*!
173      * Sets angular deflection (in degrees) of a mesh edge from CAD curve
174      */
175     void SetAngleMeshC(in double angle);
176     double GetAngleMeshC();
177
178     /*!
179      * Sets lower boundary of mesh element size computed to respect angular deflection
180      */
181     void SetGeoMin(in double theMinSize);
182     double GetGeoMin();
183
184     /*!
185      * Sets upper boundary of mesh element size computed to respect angular deflection
186      */
187     void SetGeoMax(in double theMaxSize);
188     double GetGeoMax();
189
190     /*!
191      * Sets maximal allowed ratio between the lengths of two adjacent edges
192      */
193     void SetGradation(in double ratio);
194     double GetGradation();
195
196     /*!
197      * Sets to create quadrilateral elements or not
198      */
199     void SetQuadAllowed(in boolean allowed);
200     boolean GetQuadAllowed();
201
202     /*!
203      * To respect geometrical edges or not
204      */
205     void SetDecimesh(in boolean toIgnoreEdges);
206     boolean GetDecimesh();
207
208     /*!
209      * Sets verbosity level in the range 0 to 100.
210      */
211     void SetVerbosity(in short theVal) raises (SALOME::SALOME_Exception);
212     short GetVerbosity();
213
214     /*!
215      * To optimize the CAD (merges edges and removes nano edges).
216      */
217     void SetPreCADOptimCAD(in boolean toOptimizeCAD);
218     boolean GetPreCADOptimCAD();
219
220     /*!
221      * To compute topology from scratch
222      */
223     void SetPreCADDiscardInput(in boolean toDiscardInput);
224     boolean GetPreCADDiscardInput();
225
226     /*!
227      * To help PreCAD treat some very dirty cases.
228      * If the treated object is manifold.
229      */
230     void SetPreCADManifoldGeom(in boolean manifold);
231     boolean GetPreCADManifoldGeom();
232
233     /*!
234      * To help PreCAD treat some very dirty cases.
235      * If the object is also closed (imagine a shell).
236      */
237     void SetPreCADClosedGeom(in boolean closed);
238     boolean GetPreCADClosedGeom();
239
240     /*!
241      * Sets advanced option value
242      */
243     void SetOptionValue(in string optionName,
244                         in string optionValue) raises (SALOME::SALOME_Exception);
245     string GetOptionValue(in string optionName) raises (SALOME::SALOME_Exception);
246     /*!
247      * Unsets advanced option
248      */
249     void UnsetOption(in string optionName);
250
251     /*!
252      * Return array of strings each of which is option name concatenated
253      * with option value devided by semicolon - "option_name:option_value".
254      * Option value is empty if an option is not set.
255      * Note: the method is mostly for interaction with GUI.
256      */
257     string_array GetOptionValues();
258
259     /*!
260      * Set option values each in the form "option_name[:option_value]".
261      * Note: the method is mostly for interaction with GUI.
262      */
263     void SetOptionValues(in string_array options);
264
265     /*!
266      * SizeMap
267      */
268     void SetSizeMapEntries(in string_array sizeMaps);
269     void ClearSizeMaps();
270
271     void UnsetEntry(in string entry);
272
273     /*!
274      * Set/unset a SizeMap on geom object
275      */
276     void         SetSizeMap(in GEOM::GEOM_Object GeomObj, in string sizeMap);
277     void         UnsetSizeMap(in GEOM::GEOM_Object GeomObj);
278     
279     /*!
280      * Set a SizeMap on geom object given by entry
281      */
282     void         SetSizeMapEntry(in string entry, in string sizeMap);
283     string       GetSizeMapEntry(in string entry);
284     string_array GetSizeMapEntries();
285
286     /*!
287      * Set/unset an attractor on geom object
288      */
289     void         SetAttractor(in GEOM::GEOM_Object GeomObj, in string attractor);
290     void         UnsetAttractor(in GEOM::GEOM_Object GeomObj);
291     
292     /*!
293      * Set an attractor on geom object given by entry
294      */
295     void         SetAttractorEntry(in string entry, in string attractor);
296     string       GetAttractorEntry(in string entry);
297     string_array GetAttractorEntries();
298
299     /*!
300      * Set/unset an attractor given as geom object on another geom object
301      */
302     void         SetAttractorGeom(in GEOM::GEOM_Object GeomObj, in GEOM::GEOM_Object AttractorShape, in double StartSize, in double EndSize, in double ActionRadius, in double ConstantRadius);
303     void         UnsetAttractorGeom(in GEOM::GEOM_Object GeomObj);
304
305     /*!
306      * Set an attractor given by entry on a geom object given by entry
307      */
308     void         SetClassAttractorEntry(in string entry, in string att_entry, in double StartSize, in double EndSize, in double ActionRadius, in double ConstantRadius );
309     BLSURFPlugin::TAttParamsMap GetAttractorParams();
310
311
312
313 /*
314     void         SetCustomSizeMapEntry(in string entry, in string sizeMap);
315     string       GetCustomSizeMapEntry(in string entry);
316     void         SetCustomSizeMap(in GEOM::GEOM_Object GeomObj, in string sizeMap);
317     void         UnsetCustomSizeMap(in GEOM::GEOM_Object GeomObj);
318     string_array GetCustomSizeMapEntries();
319 */
320     ///////////////////////
321     // ENFORCED VERTEXES //
322     ///////////////////////
323     
324     TFaceEntryEnfVertexListMap      GetAllEnforcedVerticesByFace();
325     TEnfVertexList                  GetAllEnforcedVertices();
326     
327     TFaceEntryCoordsListMap         GetAllCoordsByFace();
328     TCoordsEnfVertexMap             GetAllEnforcedVerticesByCoords();
329     
330     TFaceEntryEnfVertexEntryListMap GetAllEnfVertexEntriesByFace();
331     TEnfVertexEntryEnfVertexMap     GetAllEnforcedVerticesByEnfVertexEntry();
332     
333     void                            ClearAllEnforcedVertices();
334     
335    /*!
336     * Set/get/unset an enforced vertex on geom face
337     */
338     boolean SetEnforcedVertex(in GEOM::GEOM_Object theFace, in double x, in double y, in double z) raises (SALOME::SALOME_Exception);
339     boolean SetEnforcedVertexNamed(in GEOM::GEOM_Object theFace, in double x, in double y, in double z, in TEnfName theVertexName) raises (SALOME::SALOME_Exception);
340     boolean SetEnforcedVertexGeom(in GEOM::GEOM_Object theFace, in GEOM::GEOM_Object theVertex) raises (SALOME::SALOME_Exception);
341     boolean SetEnforcedVertexWithGroup(in GEOM::GEOM_Object theFace, in double x, in double y, in double z, in TEnfGroupName groupName) raises (SALOME::SALOME_Exception);
342     boolean SetEnforcedVertexNamedWithGroup(in GEOM::GEOM_Object theFace, in double x, in double y, in double z, in TEnfName theVertexName, in TEnfGroupName groupName) raises (SALOME::SALOME_Exception);
343     boolean SetEnforcedVertexGeomWithGroup(in GEOM::GEOM_Object theFace, in GEOM::GEOM_Object theVertex, in TEnfGroupName groupName) raises (SALOME::SALOME_Exception);
344
345     
346     TEnfVertexList GetEnforcedVertices(in GEOM::GEOM_Object theFace) raises (SALOME::SALOME_Exception);
347     
348     boolean UnsetEnforcedVertex(in GEOM::GEOM_Object theFace, in double x, in double y, in double z) raises (SALOME::SALOME_Exception);
349     boolean UnsetEnforcedVertexGeom(in GEOM::GEOM_Object theFace, in GEOM::GEOM_Object theVertex) raises (SALOME::SALOME_Exception);
350     boolean UnsetEnforcedVertices(in GEOM::GEOM_Object theFace) raises (SALOME::SALOME_Exception);
351     
352    /*!
353     * Set/get/unset an enforced vertex on geom face given by entry
354     */
355     boolean SetEnforcedVertexEntry(in TEntry theFaceEntry, in double x, in double y, in double z, 
356                                    in TEnfName theVertexName, in TEntry theVertexEntry, in string groupName) raises (SALOME::SALOME_Exception);
357 //    boolean SetEnforcedVertexEntryNamed(in TEntry theFaceEntry, in double x, in double y, in double z, in TEnfName theVertexName) raises (SALOME::SALOME_Exception);
358 //    boolean SetEnforcedVertexEntryGeom(in TEntry theFaceEntry, in TEntry theVertexEntry, in TEnfName theVertexName) raises (SALOME::SALOME_Exception);
359     /* TODO GROUPS
360     void SetEnforcedVertexEntryWithGroup(in string theFaceEntry, in double x, in double y, in double z, in TEnfGroupName groupName)
361         raises (SALOME::SALOME_Exception);
362     */
363 //     
364     TEnfVertexList GetEnforcedVerticesEntry(in TEntry theFaceEntry) raises (SALOME::SALOME_Exception);
365 //     
366     boolean UnsetEnforcedVertexEntry(in TEntry theFaceEntry, in double x, in double y, in double z, in TEntry theVertexEntry) raises (SALOME::SALOME_Exception);
367 //    boolean UnsetEnforcedVertexEntryGeom(in TEntry theFaceEntry, in TEntry theVertexEntry) raises (SALOME::SALOME_Exception);
368     boolean UnsetEnforcedVerticesEntry(in TEntry theFaceEntry) raises (SALOME::SALOME_Exception);
369
370    /*!
371      * Set/get an enforced vertex on geom object and add it to a group
372     */
373     /* TODO GROUPS
374     void SetEnforcedVertexGroupName(in double x, in double y, in double z, in TEnfGroupName groupName)
375         raises (SALOME::SALOME_Exception);
376     string GetEnforcedVertexGroupName(in double x, in double y, in double z)
377         raises (SALOME::SALOME_Exception);
378     */
379     ///////////////////////
380
381   };
382 };
383
384 #endif