+ if ( !HasLocalPoints() || !HasGlobalPoints() )
+ return false;
+
+ QPoint aPointA, aPointB, aPointC;
+ GetLocalPoints( aPointA, aPointB, aPointC );
+
+ return aPointC.x() < 0 && aPointC.y() < 0;
+}
+
+bool HYDROData_Image::HasReferences() const
+{
+ Handle(HYDROData_Image) aRefImage = GetTrsfReferenceImage();
+ int aNbReferences = NbReferences();
+
+ return !aRefImage.IsNull() || aNbReferences > 0;
+}
+
+void HYDROData_Image::RemoveAllReferences()
+{
+ if ( !HasReferences() )
+ return;
+
+ Handle(HYDROData_Image) aRefImage = GetTrsfReferenceImage();
+ if ( !aRefImage.IsNull() )
+ {
+ RemoveTrsfReferenceImage();
+ }
+ else
+ {
+ ClearReferences();
+ SetOperatorName( "" );
+ SetArgs( "" );
+ SetIsSelfSplitted( false );
+ }
+
+ bool anIsByTwoPoints = IsByTwoPoints();
+
+ QImage anImage = Image();
+ if ( anImage.isNull() )
+ {
+ SetToUpdate( false );
+ return;
+ }
+
+ // Set local points to default position
+ QPoint aLocalPointA = QPoint( 0, 0 );
+ QPoint aLocalPointB = QPoint( anImage.width(), 0 );
+ QPoint aLocalPointC = anIsByTwoPoints ? QPoint( INT_MIN, INT_MIN ) : QPoint( 0, anImage.height() );
+
+ SetLocalPoints( aLocalPointA, aLocalPointB, aLocalPointC, false );
+
+ // Calculate global points
+ QTransform aTransform = Trsf();
+
+ QPointF aTrsfPointA = QPointF( aTransform.map( aLocalPointA ) );
+ QPointF aTrsfPointB = QPointF( aTransform.map( aLocalPointB ) );
+ QPointF aTrsfPointC = anIsByTwoPoints ? QPointF( INT_MIN, INT_MIN ) :
+ QPointF( aTransform.map( aLocalPointC ) );
+
+ SetGlobalPoints( ManualCartesian, aTrsfPointA, aTrsfPointB, aTrsfPointC );
+
+ SetToUpdate( false );
+}
+
+void HYDROData_Image::SetLocalPoints( const QPoint& thePointA,
+ const QPoint& thePointB,
+ const QPoint& thePointC,
+ const bool theIsUpdate )
+{
+ Handle(TDataStd_RealArray) anArray;
+ if ( !myLab.FindChild( DataTag_TrsfPoints ).FindAttribute( TDataStd_RealArray::GetID(), anArray ) )
+ anArray = TDataStd_RealArray::Set( myLab.FindChild( DataTag_TrsfPoints ), 1, 12 );
+
+ anArray->SetValue( 1, thePointA.x() );
+ anArray->SetValue( 2, thePointA.y() );
+ anArray->SetValue( 3, thePointB.x() );
+ anArray->SetValue( 4, thePointB.y() );
+ anArray->SetValue( 5, thePointC.x() );
+ anArray->SetValue( 6, thePointC.y() );
+
+ TDataStd_UAttribute::Set( myLab.FindChild( DataTag_TrsfPoints ), GUID_HAS_LOCAL_POINTS );
+
+ if ( theIsUpdate )
+ UpdateTrsf();
+
+ SetToUpdate( true );
+}
+
+bool HYDROData_Image::GetLocalPoints( QPoint& thePointA,
+ QPoint& thePointB,
+ QPoint& thePointC ) const
+{
+ if ( !HasLocalPoints() )
+ return false;
+
+ Handle(TDataStd_RealArray) anArray;
+ myLab.FindChild( DataTag_TrsfPoints ).FindAttribute( TDataStd_RealArray::GetID(), anArray );
+
+ thePointA = QPointF( anArray->Value( 1 ), anArray->Value( 2 ) ).toPoint();
+ thePointB = QPointF( anArray->Value( 3 ), anArray->Value( 4 ) ).toPoint();
+ thePointC = QPointF( anArray->Value( 5 ), anArray->Value( 6 ) ).toPoint();
+
+ return true;
+}
+
+bool HYDROData_Image::HasLocalPoints() const
+{
+ TDF_Label aLabel = myLab.FindChild( DataTag_TrsfPoints, false );
+ if ( aLabel.IsNull() || !aLabel.IsAttribute( GUID_HAS_LOCAL_POINTS ) )
+ return false;
+
+ Handle(TDataStd_RealArray) anArray;
+ return aLabel.FindAttribute( TDataStd_RealArray::GetID(), anArray );
+}
+
+
+void HYDROData_Image::SetGlobalPoints( const TransformationMode& theMode,
+ const QPointF& thePointA,
+ const QPointF& thePointB,
+ const QPointF& thePointC,
+ const bool theIsUpdate )
+{
+ Handle(TDataStd_RealArray) anArray;
+ if ( !myLab.FindChild( DataTag_TrsfPoints ).FindAttribute( TDataStd_RealArray::GetID(), anArray ) )
+ anArray = TDataStd_RealArray::Set( myLab.FindChild( DataTag_TrsfPoints ), 1, 12 );
+
+ anArray->SetValue( 7, thePointA.x() );
+ anArray->SetValue( 8, thePointA.y() );
+ anArray->SetValue( 9, thePointB.x() );
+ anArray->SetValue( 10, thePointB.y() );
+ anArray->SetValue( 11, thePointC.x() );
+ anArray->SetValue( 12, thePointC.y() );
+
+ SetTrsfMode( theMode );
+
+ TDataStd_UAttribute::Set( myLab.FindChild( DataTag_TrsfPoints ), GUID_HAS_GLOBAL_POINTS );
+
+ if ( theIsUpdate )
+ UpdateTrsf();
+
+ SetToUpdate( true );
+}
+
+bool HYDROData_Image::GetGlobalPoints( TransformationMode& theMode,
+ QPointF& thePointA,
+ QPointF& thePointB,
+ QPointF& thePointC ) const
+{
+ if ( !HasGlobalPoints() )
+ return false;
+
+ theMode = GetTrsfMode();
+