X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_Profile.cxx;h=85f5fd72f07ae74bf124245c180134735e364f2b;hb=424f8230c9003d00fb27499b2441c4b3a2a28292;hp=4374e043bdb59cfe61ceb3ad407242bebe7a3fd3;hpb=7e825ec456c9331ef0df1cb59865cc55f0d8516a;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_Profile.cxx b/src/HYDROData/HYDROData_Profile.cxx index 4374e043..85f5fd72 100755 --- a/src/HYDROData/HYDROData_Profile.cxx +++ b/src/HYDROData/HYDROData_Profile.cxx @@ -62,8 +62,10 @@ TopoDS_Shape HYDROData_Profile::GetShape3D() const return getShape3D(); } -void HYDROData_Profile::UpdateShape3D() +void HYDROData_Profile::Update() { + HYDROData_Object::Update(); + BRepBuilderAPI_MakeWire aMakeWire; ProfilePoints aProfilePoints = GetProfilePoints(); @@ -129,6 +131,8 @@ void HYDROData_Profile::SetFirstPoint( const gp_XY& thePoint ) anArray->SetValue( 0, thePoint.X() ); anArray->SetValue( 1, thePoint.Y() ); + + SetToUpdate( true ); } bool HYDROData_Profile::GetFirstPoint( gp_XY& thePoint ) const @@ -157,6 +161,8 @@ void HYDROData_Profile::SetLastPoint( const gp_XY& thePoint ) anArray->SetValue( 0, thePoint.X() ); anArray->SetValue( 1, thePoint.Y() ); + + SetToUpdate( true ); } bool HYDROData_Profile::GetLastPoint( gp_XY& thePoint ) const @@ -175,6 +181,19 @@ bool HYDROData_Profile::GetLastPoint( gp_XY& thePoint ) const return true; } +void HYDROData_Profile::Invalidate() +{ + TDF_Label aFirstLabel = myLab.FindChild( DataTag_FirstPoint, false ); + if ( !aFirstLabel.IsNull() ) + aFirstLabel.ForgetAllAttributes(); + + TDF_Label aLastLabel = myLab.FindChild( DataTag_LastPoint, false ); + if ( !aLastLabel.IsNull() ) + aLastLabel.ForgetAllAttributes(); + + SetToUpdate( true ); +} + Handle(HYDROData_ProfileUZ) HYDROData_Profile::GetProfileUZ( const bool theIsCreate ) const { Handle(HYDROData_ProfileUZ) aProfileUZ; @@ -196,40 +215,37 @@ Handle(HYDROData_ProfileUZ) HYDROData_Profile::GetProfileUZ( const bool theIsCre int HYDROData_Profile::NbPoints() const { Handle(HYDROData_ProfileUZ) aProfileUZ = GetProfileUZ( false ); - return aProfileUZ.IsNull() ? 0 : aProfileUZ->getNbPoints(); + return aProfileUZ.IsNull() ? 0 : aProfileUZ->NbPoints(); } void HYDROData_Profile::RemovePoints() { Handle(HYDROData_ProfileUZ) aProfileUZ = GetProfileUZ( false ); if ( !aProfileUZ.IsNull() ) - aProfileUZ->clear(); + { + aProfileUZ->RemoveSections(); + SetToUpdate( true ); + } } -void HYDROData_Profile::SetParametricPoints( const CurveCreator::Coordinates& theCoords ) +void HYDROData_Profile::SetParametricPoints( const HYDROData_ProfileUZ::PointsList& thePoints ) { RemovePoints(); Handle(HYDROData_ProfileUZ) aProfileUZ = GetProfileUZ(); - - CurveCreator::Coordinates::const_iterator aBegIter = theCoords.begin(); - CurveCreator::Coordinates::const_iterator anEndIter = theCoords.end(); - while ( aBegIter != anEndIter ) + for ( int i = 1, n = thePoints.Length(); i <= n ; ++i ) { - const CurveCreator::TypeCoord& aCoordX = *aBegIter++; - if ( aBegIter == anEndIter ) - break; - - const CurveCreator::TypeCoord& aCoordY = *aBegIter++; - - aProfileUZ->addPoint( aCoordX, aCoordY, 0 ); + const HYDROData_ProfileUZ::Point& aPoint = thePoints.Value( i ); + aProfileUZ->AddPoint( 0, aPoint ); } + + SetToUpdate( true ); } -CurveCreator::Coordinates HYDROData_Profile::GetParametricPoints() const +HYDROData_ProfileUZ::PointsList HYDROData_Profile::GetParametricPoints() const { Handle(HYDROData_ProfileUZ) aProfileUZ = GetProfileUZ( false ); - return aProfileUZ.IsNull() ? CurveCreator::Coordinates() : aProfileUZ->getPoints(); + return aProfileUZ.IsNull() ? HYDROData_ProfileUZ::PointsList() : aProfileUZ->GetPoints(); } void HYDROData_Profile::SetProfilePoints( const ProfilePoints& thePoints ) @@ -253,7 +269,8 @@ void HYDROData_Profile::SetProfilePoints( const ProfilePoints& thePoints ) double aDistance = gp_Pnt2d( aFirstPoint ).Distance( aPointXY ); - aProfileUZ->addPoint( 0, aDistance, aPoint.Z() ); + HYDROData_ProfileUZ::Point aParPoint( aDistance, aPoint.Z() ); + aProfileUZ->AddPoint( 0, aParPoint ); } SetFirstPoint( aFirstPoint ); @@ -268,15 +285,12 @@ HYDROData_Profile::ProfilePoints HYDROData_Profile::GetProfilePoints() const if ( !GetFirstPoint( aFirstPoint ) || !GetLastPoint( aLastPoint ) ) return aResPoints; - CurveCreator::Coordinates aParametricPoints = GetParametricPoints(); - if ( aParametricPoints.size() < 4 ) + HYDROData_ProfileUZ::PointsList aParametricPoints = GetParametricPoints(); + if ( aParametricPoints.Length() < 2 ) return aResPoints; - CurveCreator::Coordinates::const_iterator aBegIter = aParametricPoints.begin(); - CurveCreator::Coordinates::const_iterator anEndIter = aParametricPoints.end()--; - - gp_Pnt2d aFirstParPoint( *aBegIter++, *aBegIter++ ); - gp_Pnt2d aLastParPoint( *anEndIter--, *anEndIter ); + const HYDROData_ProfileUZ::Point& aFirstParPoint = aParametricPoints.First(); + const HYDROData_ProfileUZ::Point& aLastParPoint = aParametricPoints.Last(); double aGeoDistance = gp_Pnt2d( aFirstPoint ).Distance( aLastPoint ); double aParCommonDist = gp_Pnt2d( aFirstParPoint.X(), 0 ).Distance( gp_Pnt2d( aLastParPoint.X(), 0 ) ); @@ -285,13 +299,11 @@ HYDROData_Profile::ProfilePoints HYDROData_Profile::GetProfilePoints() const aResPoints.Append( ProfilePoint( aFirstPoint.X(), aFirstPoint.Y(), aFirstParPoint.Y() ) ); // Compute all other points - while ( aBegIter != anEndIter ) + for ( int i = 2, n = aParametricPoints.Length(); i < n ; ++i ) { - const CurveCreator::TypeCoord& aCoordU = *aBegIter++; - if ( aBegIter == anEndIter ) - break; + const HYDROData_ProfileUZ::Point& aParPoint = aParametricPoints.Value( i ); - double aParPointDist = gp_Pnt2d( aFirstParPoint.X(), 0 ).Distance( gp_Pnt2d( aCoordU, 0 ) ); + double aParPointDist = gp_Pnt2d( aFirstParPoint.X(), 0 ).Distance( gp_Pnt2d( aParPoint.X(), 0 ) ); double aParLen = ( aParPointDist / aParCommonDist ) * aGeoDistance; @@ -300,10 +312,7 @@ HYDROData_Profile::ProfilePoints HYDROData_Profile::GetProfilePoints() const double aParX = ( aFirstPoint.X() + aRatio * aLastPoint.X() ) / ( 1 + aRatio ); double aParY = ( aFirstPoint.Y() + aRatio * aLastPoint.Y() ) / ( 1 + aRatio ); - - const CurveCreator::TypeCoord& aCoordZ = *aBegIter++; - - ProfilePoint aCompPoint( aParX, aParY, aCoordZ ); + ProfilePoint aCompPoint( aParX, aParY, aParPoint.Y() ); aResPoints.Append( aCompPoint ); } @@ -343,40 +352,38 @@ bool HYDROData_Profile::ImportFromFile( const Handle(HYDROData_Document)& theDoc if ( !aFile.IsOpen() ) return false; - bool aRes = true; - NCollection_Sequence aCreatedProfiles; - while ( aRes && !aFile.IsAtEnd() ) + Handle(HYDROData_Profile) aNewProfile; + while ( !aFile.IsAtEnd() ) { - Handle(HYDROData_Profile) aNewProfile = - Handle(HYDROData_Profile)::DownCast( theDoc->CreateObject( KIND_PROFILE ) ); + if ( aNewProfile.IsNull() ) + aNewProfile = Handle(HYDROData_Profile)::DownCast( theDoc->CreateObject( KIND_PROFILE ) ); - aRes = aNewProfile->ImportFromFile( aFile ); - - aCreatedProfiles.Append( aNewProfile ); + if ( aNewProfile->ImportFromFile( aFile ) ) + { + aCreatedProfiles.Append( aNewProfile ); + aNewProfile.Nullify(); + } } + if ( !aNewProfile.IsNull() ) + aNewProfile->Remove(); + // Close the file aFile.Close(); - for ( int i = 1, n = aCreatedProfiles.Length(); i < n ; ++i ) + for ( int i = 1, n = aCreatedProfiles.Length(); i <= n ; ++i ) { Handle(HYDROData_Profile) aProfile = aCreatedProfiles.Value( i ); - if ( aRes ) - { - QString aProfileName = HYDROData_Tool::GenerateObjectName( theDoc, "Profile" ); - aProfile->SetName( aProfileName ); - aProfile->SetFilePath( theFileName ); - } - else - { - aProfile->Remove(); - } + QString aProfileName = HYDROData_Tool::GenerateObjectName( theDoc, "Profile" ); + aProfile->SetName( aProfileName ); + + aProfile->SetFilePath( theFileName ); } - return aRes; + return !aCreatedProfiles.IsEmpty(); } bool HYDROData_Profile::ImportFromFile( const TCollection_AsciiString& theFileName ) @@ -414,8 +421,8 @@ bool HYDROData_Profile::ImportFromFile( OSD_File& theFile ) bool anIsParametric = false; bool anIsGeoref = false; - CurveCreator::Coordinates aPointsUZ; - ProfilePoints aPointsXYZ; + HYDROData_ProfileUZ::PointsList aPointsUZ; + ProfilePoints aPointsXYZ; double aPrevVal = -DBL_MAX; while ( !theFile.IsAtEnd() ) @@ -426,7 +433,12 @@ bool HYDROData_Profile::ImportFromFile( OSD_File& theFile ) aLine.LeftAdjust(); aLine.RightAdjust(); if ( aLine.IsEmpty() ) - continue; + { + if ( !anIsParametric && !anIsGeoref ) + continue; // Definition is not started yet + + break; // Next profile started + } TCollection_AsciiString aValX = aLine.Token( " \t", 1 ); TCollection_AsciiString aValY = aLine.Token( " \t", 2 ); @@ -457,8 +469,8 @@ bool HYDROData_Profile::ImportFromFile( OSD_File& theFile ) break; } - aPointsUZ.push_back( aCoordX ); - aPointsUZ.push_back( aCoordY ); + HYDROData_ProfileUZ::Point aPoint( aCoordX, aCoordY ); + aPointsUZ.Append( aPoint ); aPrevVal = aCoordX; } @@ -477,7 +489,7 @@ bool HYDROData_Profile::ImportFromFile( OSD_File& theFile ) } } - aRes = aRes && ( anIsParametric && !aPointsUZ.empty() || + aRes = aRes && ( anIsParametric && !aPointsUZ.IsEmpty() || anIsGeoref && !aPointsXYZ.IsEmpty() ); if ( aRes ) { @@ -489,6 +501,7 @@ bool HYDROData_Profile::ImportFromFile( OSD_File& theFile ) else if ( anIsGeoref ) { SetProfilePoints( aPointsXYZ ); + Update(); } }