1 // Copyright (C) 2014-2015 EDF-R&D
2 // This library is free software; you can redistribute it and/or
3 // modify it under the terms of the GNU Lesser General Public
4 // License as published by the Free Software Foundation; either
5 // version 2.1 of the License, or (at your option) any later version.
7 // This library is distributed in the hope that it will be useful,
8 // but WITHOUT ANY WARRANTY; without even the implied warranty of
9 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
10 // Lesser General Public License for more details.
12 // You should have received a copy of the GNU Lesser General Public
13 // License along with this library; if not, write to the Free Software
14 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 #include <HYDROData_CalculationCase.h>
21 #include <HYDROData_PriorityQueue.h>
24 enum HYDROData_PriorityType
30 class HYDROData_CalculationCase : public HYDROData_Entity
34 #include <HYDROData_CalculationCase.h>
37 %ConvertToSubClassCode
38 switch ( sipCpp->GetKind() )
40 case KIND_CALCULATION:
41 sipClass = sipClass_HYDROData_CalculationCase;
45 // We don't recognise the type.
52 enum PointClassification
54 POINT_OUT, ///< point is out of zone face
55 POINT_IN, ///< point is inside of zone face
56 POINT_ON ///< point is on the edge of zone face
69 DataTag_First = 100, ///< first tag, to reserve
70 DataTag_GeometryObject, ///< reference geometry objects
71 DataTag_ChildRegion, ///< child regions
72 DataTag_Region, ///< reference regions
73 DataTag_Polyline, ///< reference boundary polyline
74 DataTag_GeometryGroup, ///< reference geometry groups
75 DataTag_SplittedGroups, ///< reference splitted groups
76 DataTag_CustomRules, ///< custom rules
77 DataTag_AssignmentMode, ///< assignment mode
78 DataTag_StricklerTable, ///< reference Strickler table
79 DataTag_LandCover_Obsolete, ///< reference land covers
80 DataTag_CustomLandCoverRules_Obsolete, ///< custom rules for land covers priority
81 DataTag_AssignmentLandCoverMode_Obsolete, ///< assignment mode of land covers priority
82 DataTag_ChildLandCoverRegion_Obsolete, ///< child land cover regions
83 DataTag_LandCoverRegion_Obsolete ///< reference land cover regions
88 * Add new one reference geometry object for calculation case.
90 bool AddGeometryObject( HYDROData_Object theObject ) [bool ( const Handle_HYDROData_Object& )];
92 Handle(HYDROData_Object) aRef =
93 Handle(HYDROData_Object)::DownCast( createHandle( a0 ) );
96 Py_BEGIN_ALLOW_THREADS
97 sipRes = sipSelfWasArg ? sipCpp->HYDROData_CalculationCase::AddGeometryObject( aRef ):
98 sipCpp->AddGeometryObject( aRef );
104 * Returns all reference geometry objects of calculation case.
106 HYDROData_SequenceOfObjects GetGeometryObjects() const;
109 * Removes reference geometry object from calculation case.
111 void RemoveGeometryObject( HYDROData_Object theObject ) [void ( const Handle_HYDROData_Object& )];
113 Handle(HYDROData_Object) aRef =
114 Handle(HYDROData_Object)::DownCast( createHandle( a0 ) );
115 if ( !aRef.IsNull() )
117 Py_BEGIN_ALLOW_THREADS
118 if ( sipSelfWasArg ) {
119 sipCpp->HYDROData_CalculationCase::RemoveGeometryObject( aRef );
121 sipCpp->RemoveGeometryObject( aRef );
128 * Removes all reference geometry objects from calculation case.
130 void RemoveGeometryObjects();
134 * Add new one reference geometry group for calculation case.
136 bool AddGeometryGroup( HYDROData_ShapesGroup theGroup ) [bool ( const Handle_HYDROData_ShapesGroup& )];
138 Handle(HYDROData_ShapesGroup) aRef =
139 Handle(HYDROData_ShapesGroup)::DownCast( createHandle( a0 ) );
140 if ( !aRef.IsNull() )
142 Py_BEGIN_ALLOW_THREADS
143 sipRes = sipSelfWasArg ? sipCpp->HYDROData_CalculationCase::AddGeometryGroup( aRef ):
144 sipCpp->AddGeometryGroup( aRef );
150 * Returns all reference geometry groups of calculation case.
152 HYDROData_SequenceOfObjects GetGeometryGroups() const;
155 * Removes reference geometry group from calculation case.
157 void RemoveGeometryGroup( HYDROData_ShapesGroup theGroup ) [void ( const Handle_HYDROData_ShapesGroup& )];
159 Handle(HYDROData_ShapesGroup) aRef =
160 Handle(HYDROData_ShapesGroup)::DownCast( createHandle( a0 ) );
161 if ( !aRef.IsNull() )
163 Py_BEGIN_ALLOW_THREADS
164 if ( sipSelfWasArg ) {
165 sipCpp->HYDROData_CalculationCase::RemoveGeometryGroup( aRef );
167 sipCpp->RemoveGeometryGroup( aRef );
174 * Removes all reference geometry groups from calculation case.
176 void RemoveGeometryGroups();
180 * Sets reference boundary polyline object for calculation case.
182 void SetBoundaryPolyline( HYDROData_PolylineXY thePolyline ) [void ( const Handle_HYDROData_PolylineXY& )];
184 Handle(HYDROData_PolylineXY) aRef =
185 Handle(HYDROData_PolylineXY)::DownCast( createHandle( a0 ) );
186 if ( !aRef.IsNull() )
188 Py_BEGIN_ALLOW_THREADS
189 if ( sipSelfWasArg ) {
190 sipCpp->HYDROData_CalculationCase::SetBoundaryPolyline( aRef );
192 sipCpp->SetBoundaryPolyline( aRef );
199 * Returns reference boundary polyline object of calculation case.
201 HYDROData_PolylineXY GetBoundaryPolyline() const [Handle_HYDROData_PolylineXY ()];
203 Handle(HYDROData_PolylineXY) aRef;
205 Py_BEGIN_ALLOW_THREADS
206 aRef = sipSelfWasArg ? sipCpp->HYDROData_CalculationCase::GetBoundaryPolyline() :
207 sipCpp->GetBoundaryPolyline();
210 sipRes = (HYDROData_PolylineXY*)createPointer( aRef );
214 * Remove reference boundary polyline object from calculation case.
216 void RemoveBoundaryPolyline();
220 * Add new one child region for calculation case.
221 * The new region is added into the list of reference regions.
222 * The label of theZone is changed during this operation
223 * because of new region becomes the new parent for this zone.
225 HYDROData_Region AddNewRegion( HYDROData_Zone theZone ) [Handle_HYDROData_Region ( const Handle_HYDROData_Zone& )];
227 Handle(HYDROData_Zone) aRef =
228 Handle(HYDROData_Zone)::DownCast( createHandle( a0 ) );
229 Handle(HYDROData_Region) aRes;
231 if ( !aRef.IsNull() )
233 Py_BEGIN_ALLOW_THREADS
234 aRes = sipSelfWasArg ? sipCpp->HYDROData_CalculationCase::AddNewRegion( aRef ) :
235 sipCpp->AddNewRegion( aRef );
239 sipRes = (HYDROData_Region*)createPointer( aRes );
243 * Add new one reference region for calculation case.
244 * The label of theRegion is changed in case if old parent is not this calculation.
246 bool AddRegion( HYDROData_Region theRegion ) [bool ( const Handle_HYDROData_Region& )];
248 Handle(HYDROData_Region) aRef =
249 Handle(HYDROData_Region)::DownCast( createHandle( a0 ) );
250 if ( !aRef.IsNull() )
252 Py_BEGIN_ALLOW_THREADS
253 sipRes = sipSelfWasArg ? sipCpp->HYDROData_CalculationCase::AddRegion( aRef ):
254 sipCpp->AddRegion( aRef );
260 * Returns all reference regions of calculation case.
262 HYDROData_SequenceOfObjects GetRegions() const;
265 * Updates names of regions to correct order.
267 void UpdateRegionsOrder();
270 * Removes reference region from calculation case.
272 void RemoveRegion( HYDROData_Region theRegion ) [void ( const Handle_HYDROData_Region& )];
274 Handle(HYDROData_Region) aRef =
275 Handle(HYDROData_Region)::DownCast( createHandle( a0 ) );
276 if ( !aRef.IsNull() )
278 Py_BEGIN_ALLOW_THREADS
279 if ( sipSelfWasArg ) {
280 sipCpp->HYDROData_CalculationCase::RemoveRegion( aRef );
282 sipCpp->RemoveRegion( aRef );
289 * Removes all reference regions from calculation case.
291 void RemoveRegions();
295 * Returns all reference geometry groups of calculation case.
297 HYDROData_SequenceOfObjects GetSplittedGroups() const;
300 * Removes all reference geometry groups from calculation case.
302 void RemoveSplittedGroups();
306 * Exports the calculation case data (shell and groups) to GEOM module.
307 * \param theGeomEngine GEOM module engine
308 * \param theStudy SALOMEDS study, is used for publishing of GEOM objects
309 * \return true in case of success
311 //TODO: virtual bool Export( GEOM::GEOM_Gen_var theGeomEngine,
312 // SALOMEDS::Study_ptr theStudy );
314 QString Export( int theStudyId ) const;
317 // Public methods to work with Calculation services
320 * Returns strickler coefficient for given point.
321 * \param thePoint the point to examine
322 * \return result strickler coefficient
324 double GetStricklerCoefficientForPoint( const double theCoordX,
325 const double theCoordY ) const [double ( const gp_XY& ) ];
327 gp_XY aPnt( a0, a1 );
329 Py_BEGIN_ALLOW_THREADS
330 sipRes = sipSelfWasArg ? sipCpp->HYDROData_CalculationCase::GetStricklerCoefficientForPoint( aPnt ) :
331 sipCpp->GetStricklerCoefficientForPoint( aPnt );
336 * Returns altitude for given point.
337 * \param thePoint the point to examine
338 * \return result altitude value
340 double GetAltitudeForPoint( const double theCoordX,
341 const double theCoordY ) const [double ( const gp_XY& )];
343 gp_XY aPnt( a0, a1 );
345 Py_BEGIN_ALLOW_THREADS
346 sipRes = sipSelfWasArg ? sipCpp->HYDROData_CalculationCase::GetAltitudeForPoint( aPnt ) :
347 sipCpp->GetAltitudeForPoint( aPnt );
352 * Returns altitude for given point on given region.
353 * \param thePoint the point to examine
354 * \param theRegion reference region to check
355 * \return result altitude value
357 double GetAltitudeForPoint( const double theCoordX,
358 const double theCoordY,
359 HYDROData_Region theRegion ) const
360 [double ( const gp_XY&, const Handle_HYDROData_Region& )];
362 gp_XY aPnt( a0, a1 );
363 Handle(HYDROData_Region) aRefRegion =
364 Handle(HYDROData_Region)::DownCast( createHandle( a2 ) );
366 Py_BEGIN_ALLOW_THREADS
367 sipRes = sipSelfWasArg ? sipCpp->HYDROData_CalculationCase::GetAltitudeForPoint( aPnt, aRefRegion ) :
368 sipCpp->GetAltitudeForPoint( aPnt, aRefRegion );
373 * Returns altitude for given point on given zone.
374 * \param thePoint the point to examine
375 * \param theZone reference zone to check
376 * \return result altitude value
378 double GetAltitudeForPoint( const double theCoordX,
379 const double theCoordY,
380 HYDROData_Zone theZone ) const
381 [double ( const gp_XY&, const Handle_HYDROData_Zone& )];
383 gp_XY aPnt( a0, a1 );
384 Handle(HYDROData_Zone) aRefZone =
385 Handle(HYDROData_Zone)::DownCast( createHandle( a2 ) );
387 Py_BEGIN_ALLOW_THREADS
388 sipRes = sipSelfWasArg ? sipCpp->HYDROData_CalculationCase::GetAltitudeForPoint( aPnt, aRefZone ) :
389 sipCpp->GetAltitudeForPoint( aPnt, aRefZone );
394 * Returns altitudes for given points on given region.
395 * \param thePoints the points to examine
396 * \param theZone reference region to check
397 * \return result altitude value
399 NCollection_Sequence<double> GetAltitudesForPoints( const NCollection_Sequence<double>& theCoordsX,
400 const NCollection_Sequence<double>& theCoordsY,
401 HYDROData_Region theRegion ) const
402 [NCollection_Sequence<double> ( const NCollection_Sequence<gp_XY>&, const Handle_HYDROData_Region& )];
405 NCollection_Sequence<gp_XY> aPnts;
407 int aLen = qMin( a0->Length(), a1->Length() );
408 for ( int i = 1; i <= aLen; ++i )
410 gp_XY aPnt( a0->Value( i ), a1->Value( i ) );
411 aPnts.Append( aPnt );
414 Handle(HYDROData_Region) aRefRegion =
415 Handle(HYDROData_Region)::DownCast( createHandle( a2 ) );
417 NCollection_Sequence<double> aRes;
418 Py_BEGIN_ALLOW_THREADS
419 aRes = sipSelfWasArg ? sipCpp->HYDROData_CalculationCase::GetAltitudesForPoints( aPnts, aRefRegion ) :
420 sipCpp->GetAltitudesForPoints( aPnts, aRefRegion );
423 sipRes = new NCollection_Sequence<double>( aRes );
427 * Returns altitudes for given points on given zone.
428 * \param thePoints the points to examine
429 * \param theZone reference zone to check
430 * \return result altitude value
432 NCollection_Sequence<double> GetAltitudesForPoints( const NCollection_Sequence<double>& theCoordsX,
433 const NCollection_Sequence<double>& theCoordsY,
434 HYDROData_Zone theZone ) const
435 [NCollection_Sequence<double> ( const NCollection_Sequence<gp_XY>&, const Handle_HYDROData_Zone& )];
438 NCollection_Sequence<gp_XY> aPnts;
440 int aLen = qMin( a0->Length(), a1->Length() );
441 for ( int i = 1; i <= aLen; ++i )
443 gp_XY aPnt( a0->Value( i ), a1->Value( i ) );
444 aPnts.Append( aPnt );
447 Handle(HYDROData_Zone) aRefZone =
448 Handle(HYDROData_Zone)::DownCast( createHandle( a2 ) );
450 NCollection_Sequence<double> aRes;
451 Py_BEGIN_ALLOW_THREADS
452 aRes = sipSelfWasArg ? sipCpp->HYDROData_CalculationCase::GetAltitudesForPoints( aPnts, aRefZone ) :
453 sipCpp->GetAltitudesForPoints( aPnts, aRefZone );
456 sipRes = new NCollection_Sequence<double>( aRes );
460 * Returns region to which the point is belongs.
461 * \param thePoint the point to examine
462 * \return result region
464 HYDROData_Region GetRegionFromPoint( const double theCoordX,
465 const double theCoordY ) const
466 [Handle_HYDROData_Region ( const gp_XY& )];
468 Handle(HYDROData_Region) aRes;
470 gp_XY aPnt( a0, a1 );
472 Py_BEGIN_ALLOW_THREADS
473 aRes = sipSelfWasArg ? sipCpp->HYDROData_CalculationCase::GetRegionFromPoint( aPnt ) :
474 sipCpp->GetRegionFromPoint( aPnt );
477 sipRes = (HYDROData_Region*)createPointer( aRes );
481 * Returns zone to which the point is belongs.
482 * \param thePoint the point to examine
483 * \return result zone
485 HYDROData_Zone GetZoneFromPoint( const double theCoordX,
486 const double theCoordY ) const
487 [Handle_HYDROData_Zone ( const gp_XY& )];
489 Handle(HYDROData_Zone) aRes;
491 gp_XY aPnt( a0, a1 );
493 Py_BEGIN_ALLOW_THREADS
494 aRes = sipSelfWasArg ? sipCpp->HYDROData_CalculationCase::GetZoneFromPoint( aPnt ) :
495 sipCpp->GetZoneFromPoint( aPnt );
498 sipRes = (HYDROData_Zone*)createPointer( aRes );
502 * Returns classification of point for given zone.
503 * \param thePoint the point to examine
504 * \param theZone the zone to examine
505 * \return result classification
507 PointClassification GetPointClassification( const double theCoordX,
508 const double theCoordY,
509 HYDROData_Zone theZone ) const
510 [PointClassification ( const gp_XY&, const Handle_HYDROData_Zone& )];
512 gp_XY aPnt( a0, a1 );
514 Handle(HYDROData_Zone) aRef =
515 Handle(HYDROData_Zone)::DownCast( createHandle( a2 ) );
517 Py_BEGIN_ALLOW_THREADS
518 sipRes = sipSelfWasArg ? sipCpp->HYDROData_CalculationCase::GetPointClassification( aPnt, aRef ) :
519 sipCpp->GetPointClassification( aPnt, aRef );
524 void ClearRules( HYDROData_CalculationCase::DataTag theDataTag );
526 void AddRule( HYDROData_Entity theObject1,
527 HYDROData_PriorityType thePriority,
528 HYDROData_Entity theObject2,
529 HYDROData_Zone::MergeType theMergeType,
530 HYDROData_CalculationCase::DataTag theDataTag )
531 [void ( const Handle_HYDROData_Entity&, HYDROData_PriorityType, const Handle_HYDROData_Entity&, HYDROData_Zone::MergeType, HYDROData_CalculationCase::DataTag )];
533 Handle(HYDROData_Entity) anObject1 =
534 Handle(HYDROData_Entity)::DownCast( createHandle( a0 ) );
535 Handle(HYDROData_Entity) anObject2 =
536 Handle(HYDROData_Entity)::DownCast( createHandle( a2 ) );
538 Py_BEGIN_ALLOW_THREADS
539 sipSelfWasArg ? sipCpp->HYDROData_CalculationCase::AddRule( anObject1, a1, anObject2, a3, a4 ) :
540 sipCpp->AddRule( anObject1, a1, anObject2, a3, a4 );
546 void SetAssignmentMode( AssignmentMode theMode );
547 AssignmentMode GetAssignmentMode() const;
552 * Creates new object in the internal data structure. Use higher level objects
553 * to create objects with real content.
555 HYDROData_CalculationCase();
558 * Destructs properties of the object and object itself, removes it from the document.
560 ~HYDROData_CalculationCase();