1 #include "HYDROGUI_ImagePrs.h"
3 #include <Prs3d_Root.hxx>
5 #include <Graphic3d_Group.hxx>
6 #include <Graphic3d_Texture2Dmanual.hxx>
7 #include <Graphic3d_ArrayOfTriangles.hxx>
8 #include <Graphic3d_AspectFillArea3d.hxx>
10 IMPLEMENT_STANDARD_TYPE(HYDROGUI_ImagePrs)
11 IMPLEMENT_STANDARD_SUPERTYPE_ARRAY()
12 STANDARD_TYPE(AIS_InteractiveObject),
13 STANDARD_TYPE(SelectMgr_SelectableObject),
14 STANDARD_TYPE(PrsMgr_PresentableObject),
15 STANDARD_TYPE(MMgt_TShared),
16 STANDARD_TYPE(Standard_Transient),
17 IMPLEMENT_STANDARD_SUPERTYPE_ARRAY_END()
18 IMPLEMENT_STANDARD_TYPE_END(HYDROGUI_ImagePrs)
20 IMPLEMENT_DOWNCAST(HYDROGUI_ImagePrs,Standard_Transient)
21 IMPLEMENT_STANDARD_RTTI(HYDROGUI_ImagePrs)
23 HYDROGUI_ImagePrs::HYDROGUI_ImagePrs()
24 : AIS_InteractiveObject()
26 // SetTransformPersistence( Graphic3d_TMF_2d );
27 // SetZLayer( Graphic3d_ZLayerId_TopOSD );
30 HYDROGUI_ImagePrs::HYDROGUI_ImagePrs( const Handle(Image_PixMap)& theImage, const QPolygonF& theContour )
31 : AIS_InteractiveObject(),
33 myContour( theContour )
37 HYDROGUI_ImagePrs::~HYDROGUI_ImagePrs()
41 QPolygonF HYDROGUI_ImagePrs::GetContour() const
46 void HYDROGUI_ImagePrs::SetContour( const QPolygonF& theRect )
48 if ( myContour != theRect )
54 Handle(Image_PixMap) HYDROGUI_ImagePrs::GetImage() const
59 void HYDROGUI_ImagePrs::SetImage( const Handle(Image_PixMap)& theImage )
61 if ( myImage != theImage )
67 void HYDROGUI_ImagePrs::ComputeSelection( const Handle(SelectMgr_Selection)&, const Standard_Integer )
71 void HYDROGUI_ImagePrs::Compute( const Handle(PrsMgr_PresentationManager3d)&,
72 const Handle(Prs3d_Presentation)& aPrs,
73 const Standard_Integer theMode )
75 if ( aPrs.IsNull() || myImage.IsNull() )
79 Handle(Graphic3d_Group) aGroup = Prs3d_Root::CurrentGroup( aPrs );
86 Graphic3d_MaterialAspect aMat( Graphic3d_NOM_PLASTIC );
87 aMat.SetTransparency( 0.5 );
88 Handle(Graphic3d_AspectFillArea3d) aFillAspect =
89 new Graphic3d_AspectFillArea3d( Aspect_IS_SOLID, Quantity_NOC_WHITE, Quantity_NOC_BLACK, Aspect_TOL_SOLID, 1.0, aMat, aMat );
91 Handle(Graphic3d_TextureMap) aTex = new Graphic3d_Texture2Dmanual( myImage );
92 aFillAspect->SetTextureMapOn();
93 aFillAspect->SetTextureMap( aTex );
95 Handle(Graphic3d_ArrayOfTriangles) aTriangles = new Graphic3d_ArrayOfTriangles( 6, 0, Standard_False, Standard_False, Standard_True );
97 aTriangles->AddVertex( convert( myContour[0] ), gp_Pnt2d( 0, myImage->IsTopDown() ? 0 : 1 ) );
98 aTriangles->AddVertex( convert( myContour[1] ), gp_Pnt2d( 1, myImage->IsTopDown() ? 0 : 1 ) );
99 aTriangles->AddVertex( convert( myContour[2] ), gp_Pnt2d( 1, myImage->IsTopDown() ? 1 : 0 ) );
101 aTriangles->AddVertex( convert( myContour[2] ), gp_Pnt2d( 1, myImage->IsTopDown() ? 1 : 0 ) );
102 aTriangles->AddVertex( convert( myContour[3] ), gp_Pnt2d( 0, myImage->IsTopDown() ? 1 : 0 ) );
103 aTriangles->AddVertex( convert( myContour[0] ), gp_Pnt2d( 0, myImage->IsTopDown() ? 0 : 1 ) );
105 aGroup->SetGroupPrimitivesAspect( aFillAspect );
106 aGroup->AddPrimitiveArray( aTriangles );
110 gp_Pnt HYDROGUI_ImagePrs::convert( const QPointF& thePoint ) const
112 return gp_Pnt( thePoint.x(), thePoint.y(), 0 );