X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_ImagePrs.cxx;h=d9c0076ab1fc81f21b0d5374332f5023927da264;hb=e37037b0cca2ae883a605ddb242e36045e280e32;hp=b178b6f300dadbc979396f2760c1dca2b41d34c8;hpb=ca0608cb7f006c4c53ab5990c37be86457935b05;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_ImagePrs.cxx b/src/HYDROGUI/HYDROGUI_ImagePrs.cxx index b178b6f3..d9c0076a 100644 --- a/src/HYDROGUI/HYDROGUI_ImagePrs.cxx +++ b/src/HYDROGUI/HYDROGUI_ImagePrs.cxx @@ -1,30 +1,54 @@ +// Copyright (C) 2014-2015 EDF-R&D +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + #include "HYDROGUI_ImagePrs.h" #include +#include +#include +#include + #include +#include #include +#include #include #include +#include + IMPLEMENT_STANDARD_TYPE(HYDROGUI_ImagePrs) -IMPLEMENT_STANDARD_SUPERTYPE_ARRAY() - STANDARD_TYPE(AIS_InteractiveObject), - STANDARD_TYPE(SelectMgr_SelectableObject), - STANDARD_TYPE(PrsMgr_PresentableObject), - STANDARD_TYPE(MMgt_TShared), - STANDARD_TYPE(Standard_Transient), -IMPLEMENT_STANDARD_SUPERTYPE_ARRAY_END() -IMPLEMENT_STANDARD_TYPE_END(HYDROGUI_ImagePrs) - -IMPLEMENT_DOWNCAST(HYDROGUI_ImagePrs,Standard_Transient) -IMPLEMENT_STANDARD_RTTI(HYDROGUI_ImagePrs) - -HYDROGUI_ImagePrs::HYDROGUI_ImagePrs() + IMPLEMENT_STANDARD_SUPERTYPE_ARRAY() + STANDARD_TYPE(AIS_InteractiveObject), + STANDARD_TYPE(SelectMgr_SelectableObject), + STANDARD_TYPE(PrsMgr_PresentableObject), + STANDARD_TYPE(MMgt_TShared), + STANDARD_TYPE(Standard_Transient), + IMPLEMENT_STANDARD_SUPERTYPE_ARRAY_END() + IMPLEMENT_STANDARD_TYPE_END(HYDROGUI_ImagePrs) + + IMPLEMENT_DOWNCAST(HYDROGUI_ImagePrs,Standard_Transient) + 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,41 +88,67 @@ 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, Select3D_TOS_INTERIOR ); + theSelection->Add( aSensitiveFace ); + } } void HYDROGUI_ImagePrs::Compute( const Handle(PrsMgr_PresentationManager3d)&, - const Handle(Prs3d_Presentation)& aPrs, const Standard_Integer ) + const Handle(Prs3d_Presentation)& aPrs, + const Standard_Integer aMode ) { aPrs->Clear(); - - if ( aPrs.IsNull() || myImage.IsNull() ) - return; - Handle(Graphic3d_Group) aGroup = Prs3d_Root::CurrentGroup( aPrs ); - Graphic3d_MaterialAspect aMat( Graphic3d_NOM_PLASTIC ); - aMat.SetTransparency( 0.5 ); - 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_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[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 ); + if ( aMode == 0 ) + { + 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 + { + 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 ); + 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 ); + + 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 ) ); + + aGroup->AddPrimitiveArray( aTriangles ); + } } gp_Pnt HYDROGUI_ImagePrs::convert( const QPointF& thePoint ) const