QString aGap = QString().fill( ' ', aPntsListName.length() + 5 );
if ( anIsValidProfile )
{
- HYDROData_Profile::ProfilePoints aPointsList = GetProfilePoints();
+ HYDROData_Profile::ProfilePoints aPointsList = GetProfilePoints( true );
for ( int k = 1, aNbPoints = aPointsList.Size(); k <= aNbPoints; ++k )
{
const ProfilePoint& aPoint = aPointsList.Value( k );
TopoDS_Wire aWire;
gp_XY aFirstPoint, aLastPoint;
- if ( !GetLeftPoint( aFirstPoint ) || !GetRightPoint( aLastPoint ) )
+ if ( !GetLeftPoint( aFirstPoint, false ) || !GetRightPoint( aLastPoint, false ) )
return aWire;
gp_Pnt aPnt1( aFirstPoint.X(), aFirstPoint.Y(), 0 );
Handle(HYDROData_ProfileUZ) aProfile = GetProfileUZ( false );
if ( !aProfile.IsNull() )
{
- ProfilePoints aProfilePoints = GetProfilePoints();
+ ProfilePoints aProfilePoints = GetProfilePoints( false );
HYDROData_IPolyline::SectionType aSectionType = aProfile->GetSectionType( 0 );
aWire = HYDROData_PolylineXY::BuildWire( aSectionType, false, aProfilePoints );
bool HYDROData_Profile::IsValid() const
{
gp_XY aFirstPoint, aLastPoint;
- if ( !GetLeftPoint( aFirstPoint ) || !GetRightPoint( aLastPoint ) )
+ if ( !GetLeftPoint( aFirstPoint, false ) || !GetRightPoint( aLastPoint, false ) )
return false;
int aNbPoints = NbPoints();
return aNbPoints > 1;
}
-void HYDROData_Profile::SetLeftPoint( const gp_XY& thePoint )
+void HYDROData_Profile::SetLeftPoint( const gp_XY& theGPoint, bool IsConvertFromGlobal )
{
TDF_Label aLabel = myLab.FindChild( DataTag_FirstPoint );
+ if ( aLabel.IsNull() )
+ return;
+
+ Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( Label() );
+ gp_XY aLPoint = theGPoint;
+ if( IsConvertFromGlobal )
+ aDoc->Transform( aLPoint, true );
Handle(TDataStd_RealArray) anArray;
if ( !aLabel.FindAttribute( TDataStd_RealArray::GetID(), anArray ) )
anArray = TDataStd_RealArray::Set( aLabel, 0, 1 );
- anArray->SetValue( 0, thePoint.X() );
- anArray->SetValue( 1, thePoint.Y() );
+ anArray->SetValue( 0, aLPoint.X() );
+ anArray->SetValue( 1, aLPoint.Y() );
SetToUpdate( true );
}
-bool HYDROData_Profile::GetLeftPoint( gp_XY& thePoint ) const
+bool HYDROData_Profile::GetLeftPoint( gp_XY& thePoint, bool IsConvertToGlobal ) const
{
TDF_Label aLabel = myLab.FindChild( DataTag_FirstPoint, false );
if ( aLabel.IsNull() )
return false;
+ Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( myLab );
Handle(TDataStd_RealArray) anArray;
if ( !aLabel.FindAttribute( TDataStd_RealArray::GetID(), anArray ) )
return false;
thePoint.SetX( anArray->Value( 0 ) );
thePoint.SetY( anArray->Value( 1 ) );
+ if( IsConvertToGlobal )
+ aDoc->Transform( thePoint, false );
+
return true;
}
-void HYDROData_Profile::SetRightPoint( const gp_XY& thePoint )
+void HYDROData_Profile::SetRightPoint( const gp_XY& theGPoint, bool IsConvertFromGlobal )
{
TDF_Label aLabel = myLab.FindChild( DataTag_LastPoint );
+ Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( Label() );
+ gp_XY aLPoint = theGPoint;
+ if( IsConvertFromGlobal )
+ aDoc->Transform( aLPoint, true );
+
Handle(TDataStd_RealArray) anArray;
if ( !aLabel.FindAttribute( TDataStd_RealArray::GetID(), anArray ) )
anArray = TDataStd_RealArray::Set( aLabel, 0, 1 );
- anArray->SetValue( 0, thePoint.X() );
- anArray->SetValue( 1, thePoint.Y() );
+ anArray->SetValue( 0, aLPoint.X() );
+ anArray->SetValue( 1, aLPoint.Y() );
SetToUpdate( true );
}
-bool HYDROData_Profile::GetRightPoint( gp_XY& thePoint ) const
+bool HYDROData_Profile::GetRightPoint( gp_XY& thePoint, bool IsConvertToGlobal ) const
{
TDF_Label aLabel = myLab.FindChild( DataTag_LastPoint, false );
if ( aLabel.IsNull() )
return false;
+ Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( myLab );
Handle(TDataStd_RealArray) anArray;
if ( !aLabel.FindAttribute( TDataStd_RealArray::GetID(), anArray ) )
return false;
thePoint.SetX( anArray->Value( 0 ) );
thePoint.SetY( anArray->Value( 1 ) );
+ if( IsConvertToGlobal )
+ aDoc->Transform( thePoint, false );
+
return true;
}
return aProfileUZ.IsNull() ? HYDROData_ProfileUZ::PointsList() : aProfileUZ->GetPoints();
}
-void HYDROData_Profile::SetProfilePoints( const ProfilePoints& thePoints )
+void HYDROData_Profile::SetProfilePoints( const ProfilePoints& thePoints, bool IsConvertFromGlobal )
{
RemovePoints();
if ( thePoints.Length() < 2 )
gp_XY aFirstPoint, aLastPoint;
+ Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( Label() );
Handle(HYDROData_ProfileUZ) aProfileUZ = GetProfileUZ();
for ( int i = 1, n = thePoints.Length(); i <= n ; ++i )
{
- const ProfilePoint& aPoint = thePoints.Value( i );
+ ProfilePoint aPoint = thePoints.Value( i );
+ if( IsConvertFromGlobal )
+ aDoc->Transform( aPoint, true );
+
gp_XY aPointXY( aPoint.X(), aPoint.Y() );
if ( i == 1 )
aProfileUZ->AddPoint( 0, aParPoint );
}
- SetLeftPoint( aFirstPoint );
- SetRightPoint( aLastPoint );
+ SetLeftPoint( aFirstPoint, false );//already converted to local CS
+ SetRightPoint( aLastPoint, false );
}
-HYDROData_Profile::ProfilePoints HYDROData_Profile::GetProfilePoints() const
+HYDROData_Profile::ProfilePoints HYDROData_Profile::GetProfilePoints( bool IsConvertToGlobal ) const
{
ProfilePoints aResPoints;
gp_XY aFirstPoint, aLastPoint;
- if ( !GetLeftPoint( aFirstPoint ) || !GetRightPoint( aLastPoint ) )
+ if ( !GetLeftPoint( aFirstPoint, IsConvertToGlobal ) ||
+ !GetRightPoint( aLastPoint, IsConvertToGlobal ) )
return aResPoints;
HYDROData_ProfileUZ::PointsList aParametricPoints = GetParametricPoints();
}
else if ( anIsGeoref )
{
- SetProfilePoints( aPointsXYZ );
+ SetProfilePoints( aPointsXYZ, true );
}
Update();
* Set first(left) point for profile.
* \param thePoint the point
*/
- HYDRODATA_EXPORT void SetLeftPoint( const gp_XY& thePoint );
+ HYDRODATA_EXPORT void SetLeftPoint( const gp_XY& thePoint, bool IsConvertFromGlobal = false );
/**
* Returns first(left) point of profile.
* \param thePoint[out] profile first point
* \return true if point has been set
*/
- HYDRODATA_EXPORT bool GetLeftPoint( gp_XY& thePoint ) const;
+ HYDRODATA_EXPORT bool GetLeftPoint( gp_XY& thePoint, bool IsConvertToGlobal = false ) const;
/**
* Set last(right) point for profile.
* \param thePoint the point
*/
- HYDRODATA_EXPORT void SetRightPoint( const gp_XY& thePoint );
+ HYDRODATA_EXPORT void SetRightPoint( const gp_XY& thePoint, bool IsConvertFromGlobal = false );
/**
* Returns last(right) point of profile.
* \param thePoint[out] profile last point
* \return true if point has been set
*/
- HYDRODATA_EXPORT bool GetRightPoint( gp_XY& thePoint ) const;
+ HYDRODATA_EXPORT bool GetRightPoint( gp_XY& thePoint, bool IsConvertToGlobal = false ) const;
/**
* First and last points will be automatically updated.
* \param thePoints the list with new profile points
*/
- HYDRODATA_EXPORT void SetProfilePoints( const ProfilePoints& thePoints );
+ HYDRODATA_EXPORT void SetProfilePoints( const ProfilePoints& thePoints, bool IsConvertFromGlobal = true );
/**
* Returns profile points.
* Empty sequence is returned if first or last point was not set.
* \return profile points list
*/
- HYDRODATA_EXPORT ProfilePoints GetProfilePoints() const;
-
+ HYDRODATA_EXPORT ProfilePoints GetProfilePoints( bool IsConvertToGlobal = false ) const;
public:
// Public methods to work with files.
Standard_Real aResAlt = 0.0;
gp_XY aFirstPoint, aLastPoint;
- if ( !theProfile->GetLeftPoint( aFirstPoint ) ||
- !theProfile->GetRightPoint( aLastPoint ) )
+ if ( !theProfile->GetLeftPoint( aFirstPoint, false ) ||
+ !theProfile->GetRightPoint( aLastPoint, false ) )
return aResAlt;
gp_Pnt aPnt1( aFirstPoint.X(), aFirstPoint.Y(), 0 );
gp_Pnt aPrevPoint;
gp_Lin aPrevNormal;
- HYDROData_Profile::ProfilePoints aProfilePoints = theProfile->GetProfilePoints();
+ HYDROData_Profile::ProfilePoints aProfilePoints = theProfile->GetProfilePoints( false );
for ( int i = 1, n = aProfilePoints.Length(); i <= n; ++i )
{
gp_Pnt aProfPoint( aProfilePoints.Value( i ) );
continue;
gp_XY aFirstPoint, aLastPoint;
- if ( !aProfile->GetLeftPoint( aFirstPoint ) || !aProfile->GetRightPoint( aLastPoint ) )
+ if ( !aProfile->GetLeftPoint( aFirstPoint, false ) ||
+ !aProfile->GetRightPoint( aLastPoint, false ) )
continue;
gp_Pnt aPnt1( aFirstPoint.X(), aFirstPoint.Y(), 0 );
// Interpolate altitudes
// Left profile line ( the segment between the firts and the last profile point )
- HYDROData_Profile::ProfilePoints aLeftProfilePoints = aLeftProfile->GetProfilePoints();
+ HYDROData_Profile::ProfilePoints aLeftProfilePoints = aLeftProfile->GetProfilePoints( false );
gp_Pnt aLeftProfileP1( aLeftProfilePoints.First() );
aLeftProfileP1.SetZ( 0 );
gp_Pnt aLeftProfileP2( aLeftProfilePoints.Last() );
gp_Vec aLeftProfileVec( aLeftProfileP1, aLeftProfileP2 );
Handle(Geom_Line) aLeftProfileLine = new Geom_Line( gp_Ax1( aLeftProfileP1, aLeftProfileVec ) );
// Right profile line
- HYDROData_Profile::ProfilePoints aRightProfilePoints = aRightProfile->GetProfilePoints();
+ HYDROData_Profile::ProfilePoints aRightProfilePoints = aRightProfile->GetProfilePoints( false );
gp_Pnt aRightProfileP1( aRightProfilePoints.First() );
aRightProfileP1.SetZ( 0 );
gp_Pnt aRightProfileP2( aRightProfilePoints.Last() );