Salome HOME
ff5997c57430af002331706cc94ee456a5d3b8b5
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_ImagePrs.cxx
1 #include "HYDROGUI_ImagePrs.h"
2
3 #include <Prs3d_Root.hxx>
4
5 #include <Graphic3d_Group.hxx>
6 #include <Graphic3d_Texture2Dmanual.hxx>
7 #include <Graphic3d_ArrayOfTriangles.hxx>
8 #include <Graphic3d_AspectFillArea3d.hxx>
9
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)
19
20 IMPLEMENT_DOWNCAST(HYDROGUI_ImagePrs,Standard_Transient)
21 IMPLEMENT_STANDARD_RTTI(HYDROGUI_ImagePrs)
22
23 HYDROGUI_ImagePrs::HYDROGUI_ImagePrs()
24     : AIS_InteractiveObject()
25 {
26 //    SetTransformPersistence( Graphic3d_TMF_2d );
27 //    SetZLayer( Graphic3d_ZLayerId_TopOSD );
28 }
29
30 HYDROGUI_ImagePrs::HYDROGUI_ImagePrs( const Handle(Image_PixMap)& theImage, const QPolygonF& theContour )
31     : AIS_InteractiveObject(),
32     myImage( theImage ),
33     myContour( theContour )
34 {
35 }
36
37 HYDROGUI_ImagePrs::~HYDROGUI_ImagePrs()
38 {
39 }
40
41 QPolygonF HYDROGUI_ImagePrs::GetContour() const
42 {
43     return myContour;
44 }
45
46 void HYDROGUI_ImagePrs::SetContour( const QPolygonF& theRect )
47 {
48     if ( myContour != theRect )
49         SetToUpdate();
50
51     myContour = theRect;
52 }
53
54 Handle(Image_PixMap) HYDROGUI_ImagePrs::GetImage() const
55 {
56     return myImage;
57 }
58
59 void HYDROGUI_ImagePrs::SetImage( const Handle(Image_PixMap)& theImage )
60 {
61     if ( myImage != theImage )
62         SetToUpdate();
63
64     myImage = theImage;
65 }
66
67 void HYDROGUI_ImagePrs::ComputeSelection( const Handle(SelectMgr_Selection)&, const Standard_Integer )
68 {
69 }
70
71 void HYDROGUI_ImagePrs::Compute( const Handle(PrsMgr_PresentationManager3d)&,
72                                  const Handle(Prs3d_Presentation)& aPrs,
73                                  const Standard_Integer theMode )
74 {
75   if ( aPrs.IsNull() || myImage.IsNull() )
76     return;
77
78   aPrs->Clear();
79   Handle(Graphic3d_Group) aGroup = Prs3d_Root::CurrentGroup( aPrs );
80
81   if( theMode==0 )
82   {
83   }
84   else
85   {
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 );
90
91     Handle(Graphic3d_TextureMap) aTex = new Graphic3d_Texture2Dmanual( myImage );
92     aFillAspect->SetTextureMapOn();
93     aFillAspect->SetTextureMap( aTex );
94
95     Handle(Graphic3d_ArrayOfTriangles) aTriangles = new Graphic3d_ArrayOfTriangles( 6, 0, Standard_False, Standard_False, Standard_True );
96
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 ) );
100
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 ) );
104
105     aGroup->SetGroupPrimitivesAspect( aFillAspect );
106     aGroup->AddPrimitiveArray( aTriangles );
107   }
108 }
109
110 gp_Pnt HYDROGUI_ImagePrs::convert( const QPointF& thePoint ) const
111 {
112     return gp_Pnt( thePoint.x(), thePoint.y(), 0 );
113 }