]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
Separate action "Find bottom" for context menu.
authorstv <stv@opencascade.com>
Tue, 31 Mar 2015 05:32:45 +0000 (08:32 +0300)
committerstv <stv@opencascade.com>
Tue, 31 Mar 2015 05:36:08 +0000 (08:36 +0300)
src/HYDROGUI/HYDROGUI_ImagePrs.cxx
src/HYDROGUI/HYDROGUI_ImagePrs.h
src/HYDROGUI/HYDROGUI_Module.cxx
src/HYDROGUI/HYDROGUI_Operations.cxx
src/HYDROGUI/HYDROGUI_Operations.h

index ff5997c57430af002331706cc94ee456a5d3b8b5..03061e550029348acad46561bedb344652f00307 100644 (file)
@@ -2,11 +2,19 @@
 
 #include <Prs3d_Root.hxx>
 
+#include <SelectMgr_Selection.hxx>
+#include <SelectMgr_EntityOwner.hxx>
+#include <Select3D_SensitiveFace.hxx>
+
 #include <Graphic3d_Group.hxx>
+#include <Graphic3d_AspectLine3d.hxx>
 #include <Graphic3d_Texture2Dmanual.hxx>
+#include <Graphic3d_ArrayOfPolylines.hxx>
 #include <Graphic3d_ArrayOfTriangles.hxx>
 #include <Graphic3d_AspectFillArea3d.hxx>
 
+#include <TColgp_Array1OfPnt.hxx>
+
 IMPLEMENT_STANDARD_TYPE(HYDROGUI_ImagePrs)
 IMPLEMENT_STANDARD_SUPERTYPE_ARRAY()
   STANDARD_TYPE(AIS_InteractiveObject),
@@ -23,8 +31,6 @@ IMPLEMENT_STANDARD_RTTI(HYDROGUI_ImagePrs)
 HYDROGUI_ImagePrs::HYDROGUI_ImagePrs()
     : AIS_InteractiveObject()
 {
-//    SetTransformPersistence( Graphic3d_TMF_2d );
-//    SetZLayer( Graphic3d_ZLayerId_TopOSD );
 }
 
 HYDROGUI_ImagePrs::HYDROGUI_ImagePrs( const Handle(Image_PixMap)& theImage, const QPolygonF& theContour )
@@ -64,47 +70,102 @@ void HYDROGUI_ImagePrs::SetImage( const Handle(Image_PixMap)& theImage )
     myImage = theImage;
 }
 
-void HYDROGUI_ImagePrs::ComputeSelection( const Handle(SelectMgr_Selection)&, const Standard_Integer )
+void HYDROGUI_ImagePrs::ComputeSelection( const Handle(SelectMgr_Selection)& theSelection, const Standard_Integer theMode )
+{
+    if ( myContour.isEmpty() )
+        return;
+
+    if ( theMode == 0 )
+    {
+        Handle(SelectMgr_EntityOwner) anOwner = new SelectMgr_EntityOwner( this );
+
+        TColgp_Array1OfPnt aPoints( 0, myContour.size() - 1 );
+        for ( int i = 0; i < myContour.size(); i++ )
+            aPoints.SetValue( aPoints.Lower() + i, convert( myContour[i] ) );
+
+        Handle(Select3D_SensitiveFace) aSensitiveFace = new Select3D_SensitiveFace( anOwner, aPoints );
+        theSelection->Add( aSensitiveFace );
+    }
+}
+
+void HYDROGUI_ImagePrs::HilightSelected( const Handle(PrsMgr_PresentationManager3d)& aPrsMgr, const SelectMgr_SequenceOfOwner& )
+{
+    Handle(Prs3d_Presentation) aPrs = GetSelectPresentation( aPrsMgr );
+    if ( aPrs.IsNull() )
+        return;
+
+    Handle(Graphic3d_Group) aGroup = Prs3d_Root::CurrentGroup( aPrs );
+
+    Handle(Graphic3d_AspectLine3d) aLineAspect =
+        new Graphic3d_AspectLine3d( Quantity_NOC_WHITE, Aspect_TOL_SOLID, 1.0 );
+
+    aGroup->SetGroupPrimitivesAspect( aLineAspect );
+
+    Handle(Graphic3d_ArrayOfPolylines) aSegments = new Graphic3d_ArrayOfPolylines( 5 );
+    aSegments->AddVertex( convert( myContour[0] ) );
+    aSegments->AddVertex( convert( myContour[1] ) );
+    aSegments->AddVertex( convert( myContour[2] ) );
+    aSegments->AddVertex( convert( myContour[3] ) );
+    aSegments->AddVertex( convert( myContour[0] ) );
+
+    aGroup->AddPrimitiveArray( aSegments );
+}
+
+void HYDROGUI_ImagePrs::ClearSelected()
 {
+  Handle(Prs3d_Presentation) aSelectionPrs = GetSelectPresentation( 0 );
+  if ( !aSelectionPrs.IsNull() )
+    aSelectionPrs->Clear();
 }
 
 void HYDROGUI_ImagePrs::Compute( const Handle(PrsMgr_PresentationManager3d)&,
                                  const Handle(Prs3d_Presentation)& aPrs,
                                  const Standard_Integer theMode )
 {
-  if ( aPrs.IsNull() || myImage.IsNull() )
-    return;
-
   aPrs->Clear();
   Handle(Graphic3d_Group) aGroup = Prs3d_Root::CurrentGroup( aPrs );
 
-  if( theMode==0 )
-  {
-  }
-  else
-  {
-    Graphic3d_MaterialAspect aMat( Graphic3d_NOM_PLASTIC );
-    aMat.SetTransparency( 0.5 );
-    Handle(Graphic3d_AspectFillArea3d) aFillAspect =
+    if ( aMode == 0 )
+    {
+        Handle(Graphic3d_AspectLine3d) aLineAspect =
+            new Graphic3d_AspectLine3d( Quantity_NOC_WHITE, Aspect_TOL_SOLID, 1.0 );
+
+        aGroup->SetGroupPrimitivesAspect( aLineAspect );
+
+        Handle(Graphic3d_ArrayOfPolylines) aSegments = new Graphic3d_ArrayOfPolylines( 5 );
+        aSegments->AddVertex( convert( myContour[0] ) );
+        aSegments->AddVertex( convert( myContour[1] ) );
+        aSegments->AddVertex( convert( myContour[2] ) );
+        aSegments->AddVertex( convert( myContour[3] ) );
+        aSegments->AddVertex( convert( myContour[0] ) );
+
+        aGroup->AddPrimitiveArray( aSegments );
+    }
+    else if ( aMode == 3 )
+    {
+        Graphic3d_MaterialAspect aMat( Graphic3d_NOM_PLASTIC );
+        Handle(Graphic3d_AspectFillArea3d) aFillAspect =
       new Graphic3d_AspectFillArea3d( Aspect_IS_SOLID, Quantity_NOC_WHITE, Quantity_NOC_BLACK, Aspect_TOL_SOLID, 1.0, aMat, aMat );
 
-    Handle(Graphic3d_TextureMap) aTex = new Graphic3d_Texture2Dmanual( myImage );
-    aFillAspect->SetTextureMapOn();
-    aFillAspect->SetTextureMap( aTex );
+        Handle(Graphic3d_TextureMap) aTex = new Graphic3d_Texture2Dmanual( myImage );
+        aTex->DisableModulate();
+        aFillAspect->SetTextureMapOn();
+        aFillAspect->SetTextureMap( aTex );
+
+        aGroup->SetGroupPrimitivesAspect( aFillAspect );
 
-    Handle(Graphic3d_ArrayOfTriangles) aTriangles = new Graphic3d_ArrayOfTriangles( 6, 0, Standard_False, Standard_False, Standard_True );
+        Handle(Graphic3d_ArrayOfTriangles) aTriangles = new Graphic3d_ArrayOfTriangles( 6, 0, Standard_False, Standard_False, Standard_True );
 
-    aTriangles->AddVertex( convert( myContour[0] ), gp_Pnt2d( 0, myImage->IsTopDown() ? 0 : 1 ) );
-    aTriangles->AddVertex( convert( myContour[1] ), gp_Pnt2d( 1, myImage->IsTopDown() ? 0 : 1 ) );
-    aTriangles->AddVertex( convert( myContour[2] ), gp_Pnt2d( 1, myImage->IsTopDown() ? 1 : 0 ) );
+        aTriangles->AddVertex( convert( myContour[0] ), gp_Pnt2d( 0, myImage->IsTopDown() ? 0 : 1 ) );
+        aTriangles->AddVertex( convert( myContour[1] ), gp_Pnt2d( 1, myImage->IsTopDown() ? 0 : 1 ) );
+        aTriangles->AddVertex( convert( myContour[2] ), gp_Pnt2d( 1, myImage->IsTopDown() ? 1 : 0 ) );
 
-    aTriangles->AddVertex( convert( myContour[2] ), gp_Pnt2d( 1, myImage->IsTopDown() ? 1 : 0 ) );
-    aTriangles->AddVertex( convert( myContour[3] ), gp_Pnt2d( 0, myImage->IsTopDown() ? 1 : 0 ) );
-    aTriangles->AddVertex( convert( myContour[0] ), gp_Pnt2d( 0, myImage->IsTopDown() ? 0 : 1 ) );
+        aTriangles->AddVertex( convert( myContour[2] ), gp_Pnt2d( 1, myImage->IsTopDown() ? 1 : 0 ) );
+        aTriangles->AddVertex( convert( myContour[3] ), gp_Pnt2d( 0, myImage->IsTopDown() ? 1 : 0 ) );
+        aTriangles->AddVertex( convert( myContour[0] ), gp_Pnt2d( 0, myImage->IsTopDown() ? 0 : 1 ) );
 
-    aGroup->SetGroupPrimitivesAspect( aFillAspect );
-    aGroup->AddPrimitiveArray( aTriangles );
-  }
+        aGroup->AddPrimitiveArray( aTriangles );
+    }
 }
 
 gp_Pnt HYDROGUI_ImagePrs::convert( const QPointF& thePoint ) const
index 3ad570f9679312bcbeb21f76694e89d22e70db47..a9ea5768d7732d614a5647e576d2a6120f7a2b9c 100644 (file)
@@ -29,6 +29,9 @@ public:
                                     const Handle(Prs3d_Presentation)&, const Standard_Integer = 0 );
     virtual void           ComputeSelection( const Handle(SelectMgr_Selection)&, const Standard_Integer );
 
+    virtual void           ClearSelected();
+    virtual void           HilightSelected( const Handle(PrsMgr_PresentationManager3d)&, const SelectMgr_SequenceOfOwner& );
+
     DEFINE_STANDARD_RTTI(HYDROGUI_ImagePrs)
 
 private:
index 85ac5a680af6b18190de351ec2df411681aefc7b..17679d8755d7cd608fdb2478b28efb42ef95d56f 100644 (file)
@@ -608,10 +608,10 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient,
       else if( anIsStream )
       {
         theMenu->addAction( action( EditStreamId ) );
-        if ( action( RiverBottom ) )
+        if ( action( RiverBottomContext ) )
         {
-            theMenu->addAction( action( RiverBottom ) );
-            action( RiverBottom )->setEnabled( !isStreamHasBottom );
+            theMenu->addAction( action( RiverBottomContext ) );
+            action( RiverBottomContext )->setEnabled( !isStreamHasBottom );
         }
         theMenu->addSeparator();
       }
index 12106628e9b83560b222905895e7ba4edbee6828..9f440a6a3407e5a413e6adfdc26755c4231145e7 100644 (file)
@@ -184,6 +184,7 @@ void HYDROGUI_Module::createActions()
   createAction( HideAllId, "HIDE_ALL" );
 
   createAction( RiverBottom, "CREATE_RIVER_BOTTOM", "CREATE_RIVER_BOTTOM_ICO" );
+  createAction( RiverBottomContext, "CREATE_RIVER_BOTTOM", "CREATE_RIVER_BOTTOM_ICO" );
   createAction( ProfileInterpolate, "PROFILE_INTERPOLATE", "PROFILE_INTERPOLATE_ICO" );
 }
 
@@ -516,6 +517,7 @@ LightApp_Operation* HYDROGUI_Module::createOperation( const int theId ) const
     anOp = new HYDROGUI_LocalCSOp( aModule );
     break;
   case RiverBottom:
+  case RiverBottomContext:
     anOp = new HYDROGUI_RiverBottomOp( aModule );
     break;
   case ShowId:
index 84ffd714ef05493c276055892e428e9e63d30962..ac51a871a77ceb3efa6063dfd80d1097d0fc9cc6 100644 (file)
@@ -108,6 +108,7 @@ enum OperationId
   EditLocalCSId,
 
   RiverBottom,
+  RiverBottomContext,
   ProfileInterpolate
 };