{
const QString& anObjName = aSplitData.ObjectNames.at( i );
- Handle(HYDROData_Object) aRefObject = Handle(HYDROData_Object)::DownCast(
- HYDROData_Tool::FindObjectByName( aDocument, anObjName ) );
+ Handle(HYDROData_Object) aRefObject =
+ Handle(HYDROData_Object)::DownCast( aDocument->FindObjectByName( anObjName ) );
if ( aRefObject.IsNull() )
continue;
QString anObjName = aSplitData.ObjectNames.first();
if ( anObjName.isEmpty() )
continue;
-
+#ifdef DEB_CALCULATION
+ QString aStr = aSplitData.ObjectNames.join(" ");
+ cout << " CCase: Names = "<<aStr.toStdString() << " size = " <<aSplitData.ObjectNames.size() <<endl;
+#endif
Handle(HYDROData_SplittedShapesGroup) aSplittedGroup;
if ( !aSplittedEdgesGroupsMap.contains( anObjName ) )
{
double HYDROData_CalculationCase::GetAltitudeForPoint( const gp_XY& thePoint ) const
{
- double aResAltitude = HYDROData_IAltitudeObject::GetInvalidAltitude();
-
Handle(HYDROData_Zone) aZone = GetZoneFromPoint( thePoint );
- if ( aZone.IsNull() )
+ return GetAltitudeForPoint( thePoint, aZone );
+}
+
+double HYDROData_CalculationCase::GetAltitudeForPoint( const gp_XY& thePoint,
+ const Handle(HYDROData_Zone)& theZone ) const
+{
+ double aResAltitude = HYDROData_IAltitudeObject::GetInvalidAltitude();
+ if ( theZone.IsNull() )
return aResAltitude;
- HYDROData_Zone::MergeAltitudesType aZoneMergeType = aZone->GetMergeType();
- if ( !aZone->IsMergingNeed() )
+ HYDROData_Zone::MergeAltitudesType aZoneMergeType = theZone->GetMergeType();
+ if ( !theZone->IsMergingNeed() )
{
aZoneMergeType = HYDROData_Zone::Merge_UNKNOWN;
}
return aResAltitude;
}
+ HYDROData_IInterpolator* aZoneInterpolator = theZone->GetInterpolator();
if ( aZoneMergeType == HYDROData_Zone::Merge_Object )
{
- Handle(HYDROData_IAltitudeObject) aMergeAltitude = aZone->GetMergeAltitude();
+ Handle(HYDROData_IAltitudeObject) aMergeAltitude = theZone->GetMergeAltitude();
if ( !aMergeAltitude.IsNull() )
- aResAltitude = aMergeAltitude->GetAltitudeForPoint( thePoint );
+ {
+ if ( aZoneInterpolator != NULL )
+ {
+ aZoneInterpolator->SetAltitudeObject( aMergeAltitude );
+ aResAltitude = aZoneInterpolator->GetAltitudeForPoint( thePoint );
+ }
+ else
+ aResAltitude = aMergeAltitude->GetAltitudeForPoint( thePoint );
+ }
}
else
{
- HYDROData_SequenceOfObjects aZoneObjects = aZone->GetGeometryObjects();
+ HYDROData_SequenceOfObjects aZoneObjects = theZone->GetGeometryObjects();
HYDROData_SequenceOfObjects::Iterator anIter( aZoneObjects );
for ( ; anIter.More(); anIter.Next() )
{
if ( anObjAltitude.IsNull() )
continue;
- double aPointAltitude = anObjAltitude->GetAltitudeForPoint( thePoint );
+ double aPointAltitude = 0.0;
+ if ( aZoneInterpolator != NULL )
+ {
+ aZoneInterpolator->SetAltitudeObject( anObjAltitude );
+ aPointAltitude = aZoneInterpolator->GetAltitudeForPoint( thePoint );
+ }
+ else
+ aPointAltitude = anObjAltitude->GetAltitudeForPoint( thePoint );
+
if ( ValuesEquals( aPointAltitude, HYDROData_IAltitudeObject::GetInvalidAltitude() ) )
continue;
return aResAltitude;
}
+NCollection_Sequence<double> HYDROData_CalculationCase::GetAltitudesForPoints(
+ const NCollection_Sequence<gp_XY>& thePoints,
+ const Handle(HYDROData_Zone)& theZone ) const
+{
+ NCollection_Sequence<double> aResSeq;
+
+ for ( int i = 1, n = thePoints.Length(); i <= n; ++i )
+ {
+ const gp_XY& thePnt = thePoints.Value( i );
+
+ double anAltitude = GetAltitudeForPoint( thePnt, theZone );
+ aResSeq.Append( anAltitude );
+ }
+
+ return aResSeq;
+}
+
Handle(HYDROData_Zone) HYDROData_CalculationCase::GetZoneFromPoint( const gp_XY& thePoint ) const
{
Handle(HYDROData_Zone) aResZone;
TopoDS_Face aZoneFace = TopoDS::Face( theZone->GetShape() );
if ( aZoneFace.IsNull() )
return aRes;
-
- BRepTopAdaptor_FClass2d aClassifier( aZoneFace, Precision::Confusion() );
- TopAbs_State State = aClassifier.Perform( gp_Pnt2d(thePoint), Standard_False );
+
+ TopAbs_State State = HYDROData_Tool::ComputePointState(thePoint, aZoneFace);
if (State == TopAbs_OUT)
aRes = POINT_OUT;
else if(State == TopAbs_IN)