+ HYDROGUI_ImportImageDlg* aPanel = (HYDROGUI_ImportImageDlg*)inputPanel();
+
+ QString anImageName = aPanel->getImageName();
+ if( anImageName.isEmpty() )
+ return false;
+
+ if( !myIsEdit || ( !myEditedObject.IsNull() && myEditedObject->GetName() != anImageName ) )
+ {
+ // check that there are no other objects with the same name in the document
+ Handle(HYDROData_Entity) anObject = HYDROGUI_Tool::FindObjectByName( module(), anImageName );
+ if( !anObject.IsNull() )
+ {
+ theErrorMsg = tr( "OBJECT_EXISTS_IN_DOCUMENT" ).arg( anImageName );
+ return false;
+ }
+ }
+
+ HYDROData_Image::TransformationMode aTransformationMode =
+ (HYDROData_Image::TransformationMode)aPanel->getTransformationMode();
+
+ QPoint aPointA, aPointB, aPointC;
+ QPointF aTrsfPointA, aTrsfPointB, aTrsfPointC( INT_MIN, INT_MIN );
+ Handle(HYDROData_Image) aRefImageObj;
+
+ if ( aTransformationMode != HYDROData_Image::CartesianFromFile ) {
+ HYDROGUI_ImportImageDlg::TransformationDataMap aMap;
+ if( !aPanel->getTransformationDataMap( aMap ) )
+ return false;
+
+ bool anIsByTwoPoints = aPanel->isByTwoPoints();
+
+ aPointA = aMap[ HYDROGUI_PrsImage::PointA ].ImagePoint;
+ aPointB = aMap[ HYDROGUI_PrsImage::PointB ].ImagePoint;
+ aPointC = anIsByTwoPoints ? QPoint( INT_MIN, INT_MIN ) :
+ aMap[ HYDROGUI_PrsImage::PointC ].ImagePoint;
+
+ // first, we check correctness of image points
+ if ( !checkPoints( aPointA, aPointB, aPointC, anIsByTwoPoints,
+ tr( "POINTS_A_B_C_BELONG_TO_SINGLE_LINE" ),
+ tr( "POINTS_A_B_ARE_IDENTICAL" ),
+ theErrorMsg, true ) )
+ return false;
+
+ if ( aTransformationMode == HYDROData_Image::ReferenceImage )
+ {
+ QString aRefImageName = aPanel->getRefImageName();
+ if( aRefImageName.isEmpty() )
+ {
+ theErrorMsg = tr( "REFERENCE_IMAGE_IS_NOT_SELECTED" );
+ return false;
+ }
+
+ HYDROGUI_ImportImageDlg::TransformationDataMap aRefMap;
+ if( !aPanel->getTransformationDataMap( aRefMap, true ) )
+ return false;
+
+ aRefImageObj = Handle(HYDROData_Image)::DownCast(
+ HYDROGUI_Tool::FindObjectByName( module(), aRefImageName, KIND_IMAGE ) );
+ if( aRefImageObj.IsNull() ) {
+ return false;
+ }
+ else if ( !isReferenceCorrect() ) {
+ aRefImageObj->RemoveAllReferences();
+ }
+
+ aTrsfPointA = aRefMap[ HYDROGUI_PrsImage::PointA ].ImagePoint;
+ aTrsfPointB = aRefMap[ HYDROGUI_PrsImage::PointB ].ImagePoint;
+ if ( !anIsByTwoPoints )
+ aTrsfPointC = aRefMap[ HYDROGUI_PrsImage::PointC ].ImagePoint;
+
+ // the same check of correctness for the reference points
+ if ( !checkPoints( aTrsfPointA, aTrsfPointB, aTrsfPointC, anIsByTwoPoints,
+ tr( "REFERENCE_POINTS_A_B_C_BELONG_TO_SINGLE_LINE" ),
+ tr( "REFERENCE_POINTS_A_B_ARE_IDENTICAL" ),
+ theErrorMsg, false ) )
+ return false;
+ }
+ else
+ {
+ if ( aTransformationMode == HYDROData_Image::ManualGeodesic )
+ {
+ aTrsfPointA = aMap[ HYDROGUI_PrsImage::PointA ].GeodesicPoint;
+ aTrsfPointB = aMap[ HYDROGUI_PrsImage::PointB ].GeodesicPoint;
+ if ( !anIsByTwoPoints )
+ aTrsfPointC = aMap[ HYDROGUI_PrsImage::PointC ].GeodesicPoint;
+ }
+ else
+ {
+ aTrsfPointA = aMap[ HYDROGUI_PrsImage::PointA ].CartesianPoint;
+ aTrsfPointB = aMap[ HYDROGUI_PrsImage::PointB ].CartesianPoint;
+ if ( !anIsByTwoPoints )
+ aTrsfPointC = aMap[ HYDROGUI_PrsImage::PointC ].CartesianPoint;
+ }
+ }
+ }
+
+ Handle(HYDROData_Image) anImageObj;
+ if( myIsEdit )
+ anImageObj = myEditedObject;
+ else
+ {
+ anImageObj = Handle(HYDROData_Image)::DownCast( doc()->CreateObject( KIND_IMAGE ) );
+ QString anEntry = HYDROGUI_DataObject::dataObjectEntry( anImageObj );
+ theBrowseObjectsEntries.append( anEntry );
+ }
+
+ if( anImageObj.IsNull() )
+ return false;
+
+ anImageObj->SetName( anImageName );
+ anImageObj->SetImage( myImage );
+
+ if ( aTransformationMode == HYDROData_Image::CartesianFromFile ) {
+ QString aGeoreferencementFileName = aPanel->getGeoreferencementFileName();
+ if ( aGeoreferencementFileName.isEmpty() ) {
+ return false;
+ }
+
+ QPoint aLocalPointA( 0, 0 ),
+ aLocalPointB( anImageObj->Image().width(), 0 ),
+ aLocalPointC( INT_MIN, INT_MIN );
+ anImageObj->SetLocalPoints( aLocalPointA, aLocalPointB, aLocalPointC, false );
+ if ( !anImageObj->SetGlobalPointsFromFile( aGeoreferencementFileName ) ) {
+ theErrorMsg = tr( "CANT_LOAD_GEOREFERENCEMENT_FILE" );
+ return false;
+ }
+ } else {
+ anImageObj->SetLocalPoints( aPointA, aPointB, aPointC, false );
+
+ if ( aTransformationMode == HYDROData_Image::ReferenceImage )
+ {
+ anImageObj->SetReferencePoints( aRefImageObj,
+ aTrsfPointA, aTrsfPointB, aTrsfPointC );
+ }
+ else
+ {
+ anImageObj->SetGlobalPoints( aTransformationMode,
+ aTrsfPointA, aTrsfPointB, aTrsfPointC );
+ }
+ }
+
+ if( !myIsEdit )
+ {
+ // Set imported file name for image
+ QString aFilePath = aPanel->getFileName();
+ anImageObj->SetFilePath( aFilePath );
+ }
+
+ // must be done after all checks and before calling SetVisible() method below
+ if ( isApplyAndClose() )
+ closePreview();
+
+ if( !myIsEdit )
+ module()->setObjectVisible( HYDROGUI_Tool::GetActiveGraphicsViewId( module() ), anImageObj, true );
+
+ anImageObj->Update();
+
+ theUpdateFlags = UF_Model;
+ if ( isApplyAndClose() )
+ theUpdateFlags |= UF_Viewer | UF_GV_Forced | UF_OCCViewer | UF_OCC_Forced;
+
+ if( isApplyAndClose() )
+ {
+ commitDocOperation(); // to save the modifications in the data model
+ return true;
+ }
+
+ if( SetNextFile() )
+ {
+ theErrorMsg = "";
+ module()->updateObjBrowser();
+ return false; // and to continue the operation
+ }
+
+ /*if( myFiles.count() > 1 )
+ {
+ setIsApplyAndClose( true );
+ }*/
+ return true;