Salome HOME
Merge branch 'BR_v14_rc' into BR_quadtree
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_RecognizeContoursOp.cxx
index 8dd8cbf602608a1fe5b81457e5482de11b720507..9eb098fed541c823c562d616f07f6189ff9ddcc2 100644 (file)
@@ -24,6 +24,7 @@
 #include "HYDROGUI_Tool.h"
 #include "HYDROGUI_UpdateFlags.h"
 #include "HYDROGUI_OCCSelector.h"
+#include "HYDROGUI_ZLayers.h"
 
 #include <HYDROData_Document.h>
 #include <HYDROData_GeomTool.h>
@@ -52,6 +53,7 @@
 #include <gp_GTrsf.hxx>
 
 #include <QDialog>
+#include <QDir>
 #include <QTemporaryFile>
 
 /**
@@ -78,6 +80,12 @@ void HYDROGUI_RecognizeContoursOp::startOperation()
 {
   HYDROGUI_Operation::startOperation();
   
+  // Set preview view manager
+  if ( !getPreviewManager() ) {
+    setPreviewManager( ::qobject_cast<OCCViewer_ViewManager*>( 
+                       module()->getApp()->getViewManager( OCCViewer_Viewer::Type(), true ) ) );
+  }
+
   if ( !isApplyAndClose() ) {
     return;
   }
@@ -92,7 +100,7 @@ void HYDROGUI_RecognizeContoursOp::startOperation()
 
   // Create temporary graphics file
   QImage aQImage = myImage->Image();
-  myTmpImageFile = new QTemporaryFile( anImageName );
+  myTmpImageFile = new QTemporaryFile( QDir::tempPath() + QDir::separator() + anImageName );
   if ( !myTmpImageFile->open() || 
        !aQImage.save( myTmpImageFile->fileName(), "PNG", 100 ) ) {
     abort();
@@ -134,10 +142,10 @@ void HYDROGUI_RecognizeContoursOp::startOperation()
       // update the object browser
       module()->getApp()->updateObjectBrowser( true );
 
-      // select the picture
-      SUIT_DataOwnerPtrList aList( true );
-      aList.append( SUIT_DataOwnerPtr( new LightApp_DataOwner( aGeomPictureEntry ) ) );
-      selectionMgr()->setSelected(aList );
+      // browse the published GEOM picture
+      QStringList anEntries;
+      anEntries << aGeomPictureEntry;
+      browseObjects( anEntries );
 
       // Add GEOM picture object entry to the list of temporary geom objects
       myTmpGeomObjects << aGeomPictureEntry;
@@ -333,11 +341,6 @@ void HYDROGUI_RecognizeContoursOp::updateRecognizedPolylines()
     Handle(AIS_InteractiveContext) aCtx = NULL;
 
     // Display preview
-    if ( !getPreviewManager() ) {
-      setPreviewManager( ::qobject_cast<OCCViewer_ViewManager*>( 
-                          module()->getApp()->getViewManager( OCCViewer_Viewer::Type(), true ) ) );
-    }
-
     OCCViewer_ViewManager* aViewManager = getPreviewManager();
     if ( aViewManager ) {
       if ( OCCViewer_Viewer* aViewer = aViewManager->getOCCViewer() ) {
@@ -348,6 +351,15 @@ void HYDROGUI_RecognizeContoursOp::updateRecognizedPolylines()
       }
     }
 
+    QTransform aTrsf = myImage->Trsf();
+    QImage anImage = myImage->Image();
+    QRectF aRect( QPointF( 0, 0 ), QPointF( anImage.width(), anImage.height() ) );
+    aRect = aTrsf.mapRect( aRect );
+    aTrsf.setMatrix( aTrsf.m11(), aTrsf.m12(),  aTrsf.m13(),
+                     aTrsf.m21(), -aTrsf.m22(), aTrsf.m23(),
+                     aTrsf.m31() + aRect.width() * 0.5, aTrsf.m32 () - aRect.height() * 0.5, aTrsf.m33() );
+
+    /*
     QTransform aTrsf = myImage->Trsf();
     gp_Mat aMat( aTrsf.m11(), aTrsf.m21(), 0, 
                  aTrsf.m12(), -aTrsf.m22(), 0, 
@@ -359,28 +371,37 @@ void HYDROGUI_RecognizeContoursOp::updateRecognizedPolylines()
                  aTrsf.m32() - aRect.height() * 0.5, 0 );
 
     BRepBuilderAPI_GTransform aBuilder( gp_GTrsf( aMat, aVec ) );
+    */
 
+    Handle(HYDROData_PolylineXY) aPolylineObj = Handle(HYDROData_PolylineXY)::DownCast( doc()->CreateObject( KIND_POLYLINEXY ) );
     QStringList aNamesList;
     for ( int i = 1; i <= aSubShapes.Length(); i++ ) {
       TopoDS_Shape aSubShape = aSubShapes.Value( i );
 
       // Transform the sub-shape
+      aPolylineObj->ImportShape( aSubShape );
+      aPolylineObj->Transform( aTrsf );
+
+      /*
       aBuilder.Perform( aSubShape, Standard_True );
       if ( aBuilder.IsDone() ) {
         aSubShape = aBuilder.Shape();
-      }
+      }*/
       
       HYDROGUI_Shape* aShape = new HYDROGUI_Shape( aCtx, NULL, getPreviewZLayer() );
-      aShape->setShape( aSubShape, true, false );
+      aShape->setShape( aPolylineObj->GetShape(), true, false );
       aShape->setBorderColor( HYDROData_PolylineXY::DefaultWireColor(), false, false );
-
+      
       QString aPrefix = QString("%1_%2_%3").arg( myImage->GetName(), "Contour", QString::number( i ) );
       QString aName = HYDROGUI_Tool::GenerateObjectName( module(), aPrefix, QStringList(), true );
       myPolylineShapes.insert( aName, aShape);
       aNamesList << aName;
     }
 
+    aPolylineObj->Remove();
+
     if ( !aCtx.IsNull() ) {
+      UpdateZLayersOfHilightPresentationsOfDisplayedObjects( aCtx, Graphic3d_ZLayerId_TopOSD );
       aCtx->UpdateCurrentViewer();
     }