#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),
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 )
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