0024166: Unable to create file with "Save" menu of voxeldemo Qt sample
[occt.git] / src / OpenGl / OpenGl_Group.hxx
1 // Created on: 2011-08-01
2 // Created by: Sergey ZERCHANINOV
3 // Copyright (c) 2011-2012 OPEN CASCADE SAS
4 //
5 // The content of this file is subject to the Open CASCADE Technology Public
6 // License Version 6.5 (the "License"). You may not use the content of this file
7 // except in compliance with the License. Please obtain a copy of the License
8 // at http://www.opencascade.org and read it completely before using this file.
9 //
10 // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
11 // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
12 //
13 // The Original Code and all software distributed under the License is
14 // distributed on an "AS IS" basis, without warranty of any kind, and the
15 // Initial Developer hereby disclaims all such warranties, including without
16 // limitation, any warranties of merchantability, fitness for a particular
17 // purpose or non-infringement. Please see the License for the specific terms
18 // and conditions governing the rights and limitations under the License.
19
20 #ifndef _OpenGl_Group_Header
21 #define _OpenGl_Group_Header
22
23 #include <NCollection_List.hxx>
24 #include <InterfaceGraphic_Graphic3d.hxx>
25
26 #include <OpenGl_Element.hxx>
27
28 #include <OpenGl_AspectLine.hxx>
29 #include <OpenGl_AspectFace.hxx>
30 #include <OpenGl_AspectMarker.hxx>
31 #include <OpenGl_AspectText.hxx>
32
33 #include <OpenGl_tsm.hxx>
34
35 class OpenGl_Group;
36 class OpenGl_Structure;
37
38 typedef NCollection_List<const OpenGl_Group*     > OpenGl_ListOfGroup;
39
40 struct OpenGl_ElementNode
41 {
42   TelType type;
43   OpenGl_Element *elem;
44   OpenGl_ElementNode *next;
45   DEFINE_STANDARD_ALLOC
46 };
47
48 class OpenGl_Group : public OpenGl_Element
49 {
50 public:
51
52 #ifndef HAVE_OPENCL
53   OpenGl_Group();
54 #else
55   OpenGl_Group (const OpenGl_Structure* theAncestorStructure);
56 #endif
57
58   void SetAspectLine   (const CALL_DEF_CONTEXTLINE&     theAspect, const Standard_Boolean IsGlobal = Standard_True);
59   void SetAspectFace   (const CALL_DEF_CONTEXTFILLAREA& theAspect, const Standard_Boolean IsGlobal = Standard_True);
60   void SetAspectMarker (const CALL_DEF_CONTEXTMARKER&   theAspect, const Standard_Boolean IsGlobal = Standard_True);
61   void SetAspectText   (const CALL_DEF_CONTEXTTEXT&     theAspect, const Standard_Boolean IsGlobal = Standard_True);
62
63   void AddElement (const TelType, OpenGl_Element * );
64
65   virtual void Render  (const Handle(OpenGl_Workspace)& theWorkspace) const;
66   virtual void Release (const Handle(OpenGl_Context)&   theGlCtx);
67
68   //! Returns first OpenGL element node of the group.
69   const OpenGl_ElementNode* FirstNode() const { return myFirst; }
70
71   //! Returns OpenGL face aspect.
72   const OpenGl_AspectFace* AspectFace() const { return myAspectFace; }
73
74 #ifdef HAVE_OPENCL
75
76   //! Returns modification state for ray-tracing.
77   Standard_Size ModificationState() const { return myModificationState; }
78
79   //! Is the group ray-tracable (contains ray-tracable elements)?
80   Standard_Boolean IsRaytracable() const { return myIsRaytracable; }
81
82 #endif
83
84 protected:
85
86   virtual ~OpenGl_Group();
87
88 protected:
89
90   OpenGl_AspectLine*     myAspectLine;
91   OpenGl_AspectFace*     myAspectFace;
92   OpenGl_AspectMarker*   myAspectMarker;
93   OpenGl_AspectText*     myAspectText;
94
95   OpenGl_ElementNode*    myFirst;
96   OpenGl_ElementNode*    myLast;
97   
98 #ifdef HAVE_OPENCL
99   const OpenGl_Structure*  myAncestorStructure;
100   Standard_Boolean         myIsRaytracable;
101   Standard_Size            myModificationState;
102 #endif
103
104 public:
105
106   DEFINE_STANDARD_ALLOC
107
108 };
109
110 #endif //_OpenGl_Group_Header