From 9c3749501bcf6c4eed78966cb69934bab0a1a3b9 Mon Sep 17 00:00:00 2001 From: stv Date: Tue, 31 Mar 2015 08:32:45 +0300 Subject: [PATCH] Separate action "Find bottom" for context menu. --- src/HYDROGUI/HYDROGUI_ImagePrs.cxx | 115 ++++++++++++++++++++------- src/HYDROGUI/HYDROGUI_ImagePrs.h | 3 + src/HYDROGUI/HYDROGUI_Module.cxx | 6 +- src/HYDROGUI/HYDROGUI_Operations.cxx | 2 + src/HYDROGUI/HYDROGUI_Operations.h | 1 + 5 files changed, 97 insertions(+), 30 deletions(-) diff --git a/src/HYDROGUI/HYDROGUI_ImagePrs.cxx b/src/HYDROGUI/HYDROGUI_ImagePrs.cxx index ff5997c5..03061e55 100644 --- a/src/HYDROGUI/HYDROGUI_ImagePrs.cxx +++ b/src/HYDROGUI/HYDROGUI_ImagePrs.cxx @@ -2,11 +2,19 @@ #include +#include +#include +#include + #include +#include #include +#include #include #include +#include + 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 diff --git a/src/HYDROGUI/HYDROGUI_ImagePrs.h b/src/HYDROGUI/HYDROGUI_ImagePrs.h index 3ad570f9..a9ea5768 100644 --- a/src/HYDROGUI/HYDROGUI_ImagePrs.h +++ b/src/HYDROGUI/HYDROGUI_ImagePrs.h @@ -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: diff --git a/src/HYDROGUI/HYDROGUI_Module.cxx b/src/HYDROGUI/HYDROGUI_Module.cxx index 85ac5a68..17679d87 100644 --- a/src/HYDROGUI/HYDROGUI_Module.cxx +++ b/src/HYDROGUI/HYDROGUI_Module.cxx @@ -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(); } diff --git a/src/HYDROGUI/HYDROGUI_Operations.cxx b/src/HYDROGUI/HYDROGUI_Operations.cxx index 12106628..9f440a6a 100644 --- a/src/HYDROGUI/HYDROGUI_Operations.cxx +++ b/src/HYDROGUI/HYDROGUI_Operations.cxx @@ -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: diff --git a/src/HYDROGUI/HYDROGUI_Operations.h b/src/HYDROGUI/HYDROGUI_Operations.h index 84ffd714..ac51a871 100644 --- a/src/HYDROGUI/HYDROGUI_Operations.h +++ b/src/HYDROGUI/HYDROGUI_Operations.h @@ -108,6 +108,7 @@ enum OperationId EditLocalCSId, RiverBottom, + RiverBottomContext, ProfileInterpolate }; -- 2.39.2