0024704: Visualization - inherit OpenGl_Structure from Graphic3d_CStructure
[occt.git] / src / OpenGl / OpenGl_GraphicDriver_4.cxx
1 // Created on: 2011-10-20
2 // Created by: Sergey ZERCHANINOV
3 // Copyright (c) 2011-2014 OPEN CASCADE SAS
4 //
5 // This file is part of Open CASCADE Technology software library.
6 //
7 // This library is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
12 //
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
15
16 #include <OpenGl_GraphicDriver.hxx>
17
18 #include <NCollection_DataMap.hxx>
19 #include <OpenGl_Structure.hxx>
20 #include <OpenGl_CView.hxx>
21
22 void OpenGl_GraphicDriver::DisplayStructure (const Graphic3d_CView& theCView,
23                                              Graphic3d_CStructure&  theCStructure,
24                                              const Standard_Integer thePriority)
25 {
26   const OpenGl_CView* aCView     = (const OpenGl_CView* )theCView.ptrView;
27   OpenGl_Structure*   aStructure = (OpenGl_Structure* )&theCStructure;
28   if (aCView == NULL)
29     return;
30
31   aCView->View->DisplayStructure (aStructure, thePriority);
32 }
33
34 void OpenGl_GraphicDriver::EraseStructure (const Graphic3d_CView& theCView,
35                                            Graphic3d_CStructure&  theCStructure)
36 {
37   const OpenGl_CView* aCView     = (const OpenGl_CView* )theCView.ptrView;
38   OpenGl_Structure*   aStructure = (OpenGl_Structure* )&theCStructure;
39   if (aCView == NULL || aStructure == NULL)
40     return;
41
42   aCView->View->EraseStructure (aStructure);
43 }
44
45 void OpenGl_GraphicDriver::RemoveStructure (Handle(Graphic3d_CStructure)& theCStructure)
46 {
47   OpenGl_Structure* aStructure = NULL;
48   if (!myMapOfStructure.Find (theCStructure->Id, aStructure))
49   {
50     return;
51   }
52
53   myMapOfStructure.UnBind (theCStructure->Id);
54   aStructure->Release (GetSharedContext());
55   theCStructure.Nullify();
56 }
57
58 Handle(Graphic3d_CStructure) OpenGl_GraphicDriver::Structure (const Handle(Graphic3d_StructureManager)& theManager)
59 {
60   Handle(OpenGl_Structure) aStructure = new OpenGl_Structure (theManager);
61   myMapOfStructure.Bind (aStructure->Id, aStructure.operator->());
62   return aStructure;
63 }
64
65 //=======================================================================
66 //function : ChangeZLayer
67 //purpose  :
68 //=======================================================================
69
70 void OpenGl_GraphicDriver::ChangeZLayer (const Graphic3d_CStructure& theCStructure,
71                                          const Standard_Integer theLayer)
72 {
73   if (!myMapOfStructure.IsBound (theCStructure.Id))
74     return;
75
76   OpenGl_Structure* aStructure = myMapOfStructure.Find (theCStructure.Id);
77
78   aStructure->SetZLayer (theLayer);
79 }
80
81 //=======================================================================
82 //function : ChangeZLayer
83 //purpose  :
84 //=======================================================================
85
86 void OpenGl_GraphicDriver::ChangeZLayer (const Graphic3d_CStructure& theCStructure,
87                                          const Graphic3d_CView& theCView,
88                                          const Standard_Integer theNewLayerId)
89 {
90   const OpenGl_CView *aCView = (const OpenGl_CView *)theCView.ptrView;
91
92   if (!myMapOfStructure.IsBound (theCStructure.Id) || !aCView)
93     return;
94
95   OpenGl_Structure* aStructure = myMapOfStructure.Find (theCStructure.Id);
96
97   aCView->View->ChangeZLayer (aStructure, theNewLayerId);
98 }
99
100 //=======================================================================
101 //function : GetZLayer
102 //purpose  :
103 //=======================================================================
104
105 Standard_Integer OpenGl_GraphicDriver::GetZLayer (const Graphic3d_CStructure& theCStructure) const
106 {
107   if (!myMapOfStructure.IsBound (theCStructure.Id))
108     return -1;
109
110   OpenGl_Structure* aStructure = myMapOfStructure.Find (theCStructure.Id);
111
112   return aStructure->GetZLayer();
113 }
114
115 //=======================================================================
116 //function : UnsetZLayer
117 //purpose  :
118 //=======================================================================
119
120 void OpenGl_GraphicDriver::UnsetZLayer (const Standard_Integer theLayerId)
121 {
122   NCollection_DataMap<Standard_Integer, OpenGl_Structure*>::Iterator aStructIt (myMapOfStructure);
123   for( ; aStructIt.More (); aStructIt.Next ())
124   {
125     OpenGl_Structure* aStruct = aStructIt.ChangeValue ();
126     if (aStruct->GetZLayer () == theLayerId)
127       aStruct->SetZLayer (0);
128   }
129 }