Salome HOME
0020082: EDF 869 GEOM : Edges Orientation indicator/reverse
[modules/smesh.git] / src / StdMeshers_I / StdMeshers_NumberOfSegments_i.cxx
1 //  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 //  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 //  This library is free software; you can redistribute it and/or
7 //  modify it under the terms of the GNU Lesser General Public
8 //  License as published by the Free Software Foundation; either
9 //  version 2.1 of the License.
10 //
11 //  This library is distributed in the hope that it will be useful,
12 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
13 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 //  Lesser General Public License for more details.
15 //
16 //  You should have received a copy of the GNU Lesser General Public
17 //  License along with this library; if not, write to the Free Software
18 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 //
20 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22 //  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
23 //  File   : StdMeshers_NumberOfSegments_i.cxx
24 //           Moved here from SMESH_NumberOfSegments_i.cxx
25 //  Author : Paul RASCLE, EDF
26 //  Module : SMESH
27 //  $Header$
28 //
29 #include "StdMeshers_NumberOfSegments_i.hxx"
30 #include "SMESH_Gen_i.hxx"
31 #include "SMESH_Gen.hxx"
32 #include "SMESH_PythonDump.hxx"
33
34 #include "Utils_CorbaException.hxx"
35 #include "utilities.h"
36
37 #include <TCollection_AsciiString.hxx>
38
39 using namespace std;
40 //=============================================================================
41 /*!
42  *  StdMeshers_NumberOfSegments_i::StdMeshers_NumberOfSegments_i
43  *
44  *  Constructor
45  */
46 //=============================================================================
47
48 StdMeshers_NumberOfSegments_i::StdMeshers_NumberOfSegments_i( PortableServer::POA_ptr thePOA,
49                                                     int                     theStudyId,
50                                                     ::SMESH_Gen*            theGenImpl )
51      : SALOME::GenericObj_i( thePOA ), 
52        SMESH_Hypothesis_i( thePOA )
53 {
54   MESSAGE( "StdMeshers_NumberOfSegments_i::StdMeshers_NumberOfSegments_i" );
55   myBaseImpl = new ::StdMeshers_NumberOfSegments( theGenImpl->GetANewId(),
56                                              theStudyId,
57                                              theGenImpl );
58 }
59
60 //=============================================================================
61 /*!
62  *  StdMeshers_NumberOfSegments_i::~StdMeshers_NumberOfSegments_i
63  *
64  *  Destructor
65  */
66 //=============================================================================
67
68 StdMeshers_NumberOfSegments_i::~StdMeshers_NumberOfSegments_i()
69 {
70   MESSAGE( "StdMeshers_NumberOfSegments_i::~StdMeshers_NumberOfSegments_i" );
71 }
72
73 //=============================================================================
74 /*!
75  *  StdMeshers_NumberOfSegments_i::BuildDistribution
76  *
77  *  Builds point distribution according to passed function
78  */
79 //=============================================================================
80 SMESH::double_array* StdMeshers_NumberOfSegments_i::BuildDistributionExpr( const char* func, 
81                                                                            CORBA::Long nbSeg, 
82                                                                            CORBA::Long conv )
83   throw ( SALOME::SALOME_Exception )
84 {
85   ASSERT( myBaseImpl );
86   try
87   {
88     SMESH::double_array_var aRes = new SMESH::double_array();
89     const std::vector<double>& res = this->GetImpl()->BuildDistributionExpr( func, nbSeg, conv );
90     aRes->length( res.size() );
91     for (int i = 0; i < res.size(); i++)
92       aRes[i] = res[i];
93     return aRes._retn();
94   }
95   catch( SALOME_Exception& S_ex )
96   {
97     THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), SALOME::BAD_PARAM );
98   }
99 }
100
101 SMESH::double_array* StdMeshers_NumberOfSegments_i::BuildDistributionTab( const SMESH::double_array& func,
102                                                                           CORBA::Long nbSeg, 
103                                                                           CORBA::Long conv )
104   throw ( SALOME::SALOME_Exception )
105 {
106   ASSERT( myBaseImpl );
107
108   std::vector<double> tbl( func.length() );
109   for (int i = 0; i < func.length(); i++)
110     tbl[i] = func[i];
111
112   try
113   {
114     SMESH::double_array_var aRes = new SMESH::double_array();
115     const std::vector<double>& res = this->GetImpl()->BuildDistributionTab( tbl, nbSeg, conv );
116     aRes->length( res.size() );
117     for (int i = 0; i < res.size(); i++)
118       aRes[i] = res[i];
119     return aRes._retn();
120   }
121   catch( SALOME_Exception& S_ex )
122   {
123     THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), SALOME::BAD_PARAM );
124   }
125 }
126
127 //=============================================================================
128 /*!
129  *  StdMeshers_NumberOfSegments_i::SetNumberOfSegments
130  *
131  *  Set number of segments
132  */
133 //=============================================================================
134
135 void StdMeshers_NumberOfSegments_i::SetNumberOfSegments( CORBA::Long theSegmentsNumber )
136      throw ( SALOME::SALOME_Exception )
137 {
138   ASSERT( myBaseImpl );
139   try {
140     this->GetImpl()->SetNumberOfSegments( theSegmentsNumber );
141   }
142   catch (SALOME_Exception& S_ex) {
143     THROW_SALOME_CORBA_EXCEPTION( S_ex.what(),
144                                   SALOME::BAD_PARAM );
145   }
146
147   // Update Python script
148   SMESH::TPythonDump() << _this() << ".SetNumberOfSegments( " << theSegmentsNumber << " )";
149 }
150
151 //=============================================================================
152 /*!
153  *  StdMeshers_NumberOfSegments_i::GetNumberOfSegments
154  *
155  *  Get number of segments
156  */
157 //=============================================================================
158
159 CORBA::Long StdMeshers_NumberOfSegments_i::GetNumberOfSegments()
160 {
161   ASSERT( myBaseImpl );
162   return this->GetImpl()->GetNumberOfSegments();
163 }
164
165 //=============================================================================
166 /*!
167  *  StdMeshers_NumberOfSegments_i::SetReversedEdges
168  *
169  *  Set edges to reverse
170  */
171 //=============================================================================
172
173 void StdMeshers_NumberOfSegments_i::SetReversedEdges( const SMESH::long_array& theIds )
174 {
175   MESSAGE( "StdMeshers_NumberOfSegments_i::SetReversedEdges" );
176   ASSERT( myBaseImpl );
177   try {
178     std::vector<int> ids( theIds.length() );
179     CORBA::Long iEnd = theIds.length();
180     for ( CORBA::Long i = 0; i < iEnd; i++ )
181       ids[ i ] = theIds[ i ];
182
183     this->GetImpl()->SetReversedEdges( ids );
184   }
185   catch ( SALOME_Exception& S_ex ) {
186     THROW_SALOME_CORBA_EXCEPTION( S_ex.what(),
187                                   SALOME::BAD_PARAM );
188   }
189
190   // Update Python script
191   /*  SMESH::TPythonDump() << _this() << ".SetEdgesToReverse( "
192       << theList << " )";*/
193 }
194
195 //=============================================================================
196 /*!
197  *  StdMeshers_NumberOfSegments_i::SetObjectEntry
198  *
199  *  Set the Entry for the Main Object
200  */
201 //=============================================================================
202
203 void StdMeshers_NumberOfSegments_i::SetObjectEntry( const char* entry )
204 {
205   MESSAGE( "StdMeshers_NumberOfSegments_i::SetObjectEntry" );
206   ASSERT( myBaseImpl );
207
208   try {
209     this->GetImpl()->SetObjectEntry( entry );
210     // Update Python script
211     //    SMESH::TPythonDump() << _this() << ".SetObjectEntry( '" << entry << "' )";
212   }
213   catch ( SALOME_Exception& S_ex ) {
214     THROW_SALOME_CORBA_EXCEPTION( S_ex.what(),
215                                   SALOME::BAD_PARAM );
216   }
217 }
218
219 //=============================================================================
220 /*!
221  *  StdMeshers_NumberOfSegments_i::GetObjectEntry
222  *
223  *  Set the Entry for the Main Object
224  */
225 //=============================================================================
226
227 char* StdMeshers_NumberOfSegments_i::GetObjectEntry()
228 {
229   MESSAGE( "StdMeshers_NumberOfSegments_i::SetObjectEntry" );
230   ASSERT( myBaseImpl );
231
232   const char* entry;
233   try {
234     entry = this->GetImpl()->GetObjectEntry();
235   }
236   catch ( SALOME_Exception& S_ex ) {
237     THROW_SALOME_CORBA_EXCEPTION( S_ex.what(),
238                                   SALOME::BAD_PARAM );
239   }
240   return CORBA::string_dup( entry );
241 }
242
243 //=============================================================================
244 /*!
245  *  StdMeshers_NumberOfSegments_i::GetReversedEdges
246  *
247  *  Get reversed edges
248  */
249 //=============================================================================
250
251 SMESH::long_array* StdMeshers_NumberOfSegments_i::GetReversedEdges()
252 {
253   MESSAGE( "StdMeshers_NumberOfSegments_i::GetReversedEdges" );
254   ASSERT( myBaseImpl );
255   SMESH::long_array_var anArray = new SMESH::long_array;
256   std::vector<int> ids = this->GetImpl()->GetReversedEdges();
257   anArray->length( ids.size() );
258   for ( CORBA::Long i = 0; i < ids.size(); i++)
259     anArray [ i ] = ids [ i ];
260
261   return anArray._retn();
262 }
263
264 //=============================================================================
265 /*!
266  */
267 //=============================================================================
268
269 void StdMeshers_NumberOfSegments_i::SetDistrType(CORBA::Long typ)
270   throw ( SALOME::SALOME_Exception )
271 {
272   ASSERT( myBaseImpl );
273   try {
274     this->GetImpl()->SetDistrType( (::StdMeshers_NumberOfSegments::DistrType) typ );
275
276     // Update Python script
277     SMESH::TPythonDump() << _this() << ".SetDistrType( " << typ << " )";
278   }
279   catch ( SALOME_Exception& S_ex ) {
280     THROW_SALOME_CORBA_EXCEPTION( S_ex.what(),
281                                   SALOME::BAD_PARAM );
282   }
283 }
284
285 //=============================================================================
286 /*!
287  */
288 //=============================================================================
289
290 CORBA::Long StdMeshers_NumberOfSegments_i::GetDistrType()
291 {
292   ASSERT( myBaseImpl );
293   return this->GetImpl()->GetDistrType();
294 }
295
296 //=============================================================================
297 /*!
298  *  StdMeshers_NumberOfSegments_i::SetScaleFactor
299  *
300  *  Set scalar factor
301  */
302 //=============================================================================
303
304 void StdMeshers_NumberOfSegments_i::SetScaleFactor( CORBA::Double theScaleFactor )
305      throw ( SALOME::SALOME_Exception )
306 {
307   ASSERT( myBaseImpl );
308   try {
309     this->GetImpl()->SetScaleFactor( theScaleFactor );
310     // Update Python script
311     SMESH::TPythonDump() << _this() << ".SetScaleFactor( " << theScaleFactor << " )";
312   }
313   catch ( SALOME_Exception& S_ex ) {
314     THROW_SALOME_CORBA_EXCEPTION( S_ex.what(),
315                                   SALOME::BAD_PARAM );
316   }
317 }
318
319 //=============================================================================
320 /*!
321  *  StdMeshers_NumberOfSegments_i::GetScaleFactor
322  *
323  *  Get scalar factor
324  */
325 //=============================================================================
326
327 CORBA::Double StdMeshers_NumberOfSegments_i::GetScaleFactor()
328   throw ( SALOME::SALOME_Exception )
329 {
330   ASSERT( myBaseImpl );
331   double scale;
332   try {
333     scale = this->GetImpl()->GetScaleFactor();
334   }
335   catch ( SALOME_Exception& S_ex ) {
336     THROW_SALOME_CORBA_EXCEPTION( S_ex.what(),
337                                   SALOME::BAD_PARAM );
338   }
339   return scale;
340 }
341
342 //=============================================================================
343 /*!
344  */
345 //=============================================================================
346
347 void StdMeshers_NumberOfSegments_i::SetTableFunction(const SMESH::double_array& table)
348   throw ( SALOME::SALOME_Exception )
349 {
350   ASSERT( myBaseImpl );
351   std::vector<double> tbl( table.length() );
352   for (int i = 0; i < table.length(); i++)
353     tbl[i] = table[i];
354   try {
355     this->GetImpl()->SetTableFunction( tbl );
356     // Update Python script
357     SMESH::TPythonDump() << _this() << ".SetTableFunction( " << table << " )";
358   }
359   catch ( SALOME_Exception& S_ex ) {
360     THROW_SALOME_CORBA_EXCEPTION( S_ex.what(),
361                                   SALOME::BAD_PARAM );
362   }
363 }
364
365 //=============================================================================
366 /*!
367  */
368 //=============================================================================
369
370 SMESH::double_array* StdMeshers_NumberOfSegments_i::GetTableFunction()
371   throw ( SALOME::SALOME_Exception )
372 {
373   ASSERT( myBaseImpl );
374   const std::vector<double>* tbl;
375   try {
376     tbl = &this->GetImpl()->GetTableFunction();
377   }
378   catch ( SALOME_Exception& S_ex ) {
379     THROW_SALOME_CORBA_EXCEPTION( S_ex.what(),
380                                   SALOME::BAD_PARAM );
381   }
382   SMESH::double_array_var aRes = new SMESH::double_array();
383   aRes->length(tbl->size());
384   for (int i = 0; i < tbl->size(); i++)
385     aRes[i] = (*tbl)[i];
386   return aRes._retn();
387 }
388
389 //=============================================================================
390 /*!
391  */
392 //=============================================================================
393
394 void StdMeshers_NumberOfSegments_i::SetExpressionFunction(const char* expr)
395   throw ( SALOME::SALOME_Exception )
396 {
397   ASSERT( myBaseImpl );
398   try {
399     this->GetImpl()->SetExpressionFunction( expr );
400     // Update Python script
401     SMESH::TPythonDump() << _this() << ".SetExpressionFunction( '" << expr << "' )";
402   }
403   catch ( SALOME_Exception& S_ex ) {
404     THROW_SALOME_CORBA_EXCEPTION( S_ex.what(),
405                                   SALOME::BAD_PARAM );
406   }
407 }
408
409 //=============================================================================
410 /*!
411  */
412 //=============================================================================
413
414 char* StdMeshers_NumberOfSegments_i::GetExpressionFunction()
415   throw ( SALOME::SALOME_Exception )
416 {
417   ASSERT( myBaseImpl );
418   const char* expr;
419   try {
420     expr = this->GetImpl()->GetExpressionFunction();
421   }
422   catch ( SALOME_Exception& S_ex ) {
423     THROW_SALOME_CORBA_EXCEPTION( S_ex.what(),
424                                   SALOME::BAD_PARAM );
425   }
426   return CORBA::string_dup(expr);
427 }
428
429 //=============================================================================
430 /*!
431  */
432 //=============================================================================
433
434 void StdMeshers_NumberOfSegments_i::SetConversionMode(CORBA::Long conv )
435   throw ( SALOME::SALOME_Exception )
436 {
437   ASSERT( myBaseImpl );
438   try {
439     this->GetImpl()->SetConversionMode( conv );
440     // Update Python script
441     SMESH::TPythonDump() << _this() << ".SetConversionMode( " << conv << " )";
442   }
443   catch ( SALOME_Exception& S_ex ) {
444     THROW_SALOME_CORBA_EXCEPTION( S_ex.what(),
445                                   SALOME::BAD_PARAM );
446   }
447 }
448
449 //=============================================================================
450 /*!
451  */
452 //=============================================================================
453
454 CORBA::Long StdMeshers_NumberOfSegments_i::ConversionMode()
455   throw ( SALOME::SALOME_Exception )
456 {
457   ASSERT( myBaseImpl );
458   int conv;
459   try {
460     conv = this->GetImpl()->ConversionMode();
461   }
462   catch ( SALOME_Exception& S_ex ) {
463     THROW_SALOME_CORBA_EXCEPTION( S_ex.what(),
464                                   SALOME::BAD_PARAM );
465   }
466   return conv;
467 }
468
469 //=============================================================================
470 /*!
471  *  StdMeshers_NumberOfSegments_i::GetImpl
472  *
473  *  Get implementation
474  */
475 //=============================================================================
476
477 ::StdMeshers_NumberOfSegments* StdMeshers_NumberOfSegments_i::GetImpl()
478 {
479   return ( ::StdMeshers_NumberOfSegments* )myBaseImpl;
480 }
481
482 //================================================================================
483 /*!
484  * \brief Verify whether hypothesis supports given entity type 
485   * \param type - dimension (see SMESH::Dimension enumeration)
486   * \retval CORBA::Boolean - TRUE if dimension is supported, FALSE otherwise
487  * 
488  * Verify whether hypothesis supports given entity type (see SMESH::Dimension enumeration)
489  */
490 //================================================================================  
491 CORBA::Boolean StdMeshers_NumberOfSegments_i::IsDimSupported( SMESH::Dimension type )
492 {
493   return type == SMESH::DIM_1D;
494 }
495