0030675: Visualization - remove redundant proxy classes in hierarchy of PrsMgr_Presen...
[occt.git] / src / MeshVS / MeshVS_Mesh.hxx
1 // Created on: 2003-10-10
2 // Created by: Alexander SOLOVYOV
3 // Copyright (c) 2003-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 #ifndef _MeshVS_Mesh_HeaderFile
17 #define _MeshVS_Mesh_HeaderFile
18
19 #include <MeshVS_SequenceOfPrsBuilder.hxx>
20 #include <MeshVS_DataMapOfIntegerOwner.hxx>
21 #include <MeshVS_MeshSelectionMethod.hxx>
22 #include <AIS_InteractiveObject.hxx>
23 #include <SelectMgr_SequenceOfOwner.hxx>
24 #include <Quantity_NameOfColor.hxx>
25 #include <Standard_CString.hxx>
26
27 class MeshVS_PrsBuilder;
28 class TColStd_HPackedMapOfInteger;
29 class MeshVS_DataSource;
30 class MeshVS_Drawer;
31 class SelectMgr_EntityOwner;
32
33 DEFINE_STANDARD_HANDLE(MeshVS_Mesh, AIS_InteractiveObject)
34
35 //! the main class provides interface to create mesh presentation as a whole
36 class MeshVS_Mesh : public AIS_InteractiveObject
37 {
38
39 public:
40
41   //! Constructor.
42   //! theIsAllowOverlapped is Standard_True, if it is allowed to draw edges overlapped with beams
43   //! Its value is stored in drawer
44   Standard_EXPORT MeshVS_Mesh(const Standard_Boolean theIsAllowOverlapped = Standard_False);
45
46   //! Returns true for supported display modes basing on a list of defined builders.
47   Standard_EXPORT virtual Standard_Boolean AcceptDisplayMode (const Standard_Integer theMode) const Standard_OVERRIDE;
48
49   //! Computes presentation using builders added to sequence. Each builder computes
50   //! own part of mesh presentation according to its type.
51   Standard_EXPORT virtual void Compute (const Handle(PrsMgr_PresentationManager3d)& PM, const Handle(Prs3d_Presentation)& Prs, const Standard_Integer DisplayMode) Standard_OVERRIDE;
52   
53   //! Computes selection according to SelectMode
54   Standard_EXPORT virtual void ComputeSelection (const Handle(SelectMgr_Selection)& Sel, const Standard_Integer SelectMode) Standard_OVERRIDE;
55   
56   //! Draw selected owners presentation
57   Standard_EXPORT virtual void HilightSelected (const Handle(PrsMgr_PresentationManager3d)& PM, const SelectMgr_SequenceOfOwner& Owners) Standard_OVERRIDE;
58   
59   //! Draw hilighted owner presentation
60   Standard_EXPORT virtual void HilightOwnerWithColor (const Handle(PrsMgr_PresentationManager3d)& thePM,
61                                                       const Handle(Prs3d_Drawer)& theColor,
62                                                       const Handle(SelectMgr_EntityOwner)& theOwner) Standard_OVERRIDE;
63   
64   //! Clears internal selection presentation
65   Standard_EXPORT virtual void ClearSelected() Standard_OVERRIDE;
66   
67   //! How many builders there are in sequence
68   Standard_EXPORT Standard_Integer GetBuildersCount() const;
69   
70   //! Returns builder by its index in sequence
71   Standard_EXPORT Handle(MeshVS_PrsBuilder) GetBuilder (const Standard_Integer Index) const;
72   
73   //! Returns builder by its ID
74   Standard_EXPORT Handle(MeshVS_PrsBuilder) GetBuilderById (const Standard_Integer Id) const;
75   
76   //! Returns the smallest positive ID, not occupied by any builder.
77   //! This method using when builder is created with ID = -1
78   Standard_EXPORT Standard_Integer GetFreeId() const;
79   
80   //! Adds builder to tale of sequence.
81   //! PrsBuilder is builder to be added
82   //! If TreatAsHilighter is true, MeshVS_Mesh will use this builder to create
83   //! presentation of hilighted and selected owners.
84   //! Only one builder can be hilighter, so that if you call this method with
85   //! TreatAsHilighter = Standard_True some times, only last builder will be hilighter
86   //! WARNING: As minimum one builder must be added as hilighter, otherwise selection cannot be computed
87   Standard_EXPORT void AddBuilder (const Handle(MeshVS_PrsBuilder)& Builder, const Standard_Boolean TreatAsHilighter = Standard_False);
88   
89   //! Changes hilighter ( see above )
90   Standard_EXPORT void SetHilighter (const Handle(MeshVS_PrsBuilder)& Builder);
91   
92   //! Sets builder with sequence index "Index" as hilighter
93   Standard_EXPORT Standard_Boolean SetHilighter (const Standard_Integer Index);
94   
95   //! Sets builder with identificator "Id" as hilighter
96   Standard_EXPORT Standard_Boolean SetHilighterById (const Standard_Integer Id);
97   
98   //! Returns hilighter
99   Standard_EXPORT Handle(MeshVS_PrsBuilder) GetHilighter() const;
100   
101   //! Removes builder from sequence. If it is hilighter, hilighter will be NULL
102   //! ( Don't remember to set it to other after!!! )
103   Standard_EXPORT void RemoveBuilder (const Standard_Integer Index);
104   
105   //! Removes builder with identificator Id
106   Standard_EXPORT void RemoveBuilderById (const Standard_Integer Id);
107   
108   //! Finds builder by its type the string represents
109   Standard_EXPORT Handle(MeshVS_PrsBuilder) FindBuilder (const Standard_CString TypeString) const;
110   
111   //! Returns map of owners.
112   Standard_EXPORT const MeshVS_DataMapOfIntegerOwner& GetOwnerMaps (const Standard_Boolean IsElement);
113   
114   //! Returns default builders' data source
115   Standard_EXPORT Handle(MeshVS_DataSource) GetDataSource() const;
116   
117   //! Sets default builders' data source
118   Standard_EXPORT void SetDataSource (const Handle(MeshVS_DataSource)& aDataSource);
119   
120   //! Returns default builders' drawer
121   Standard_EXPORT Handle(MeshVS_Drawer) GetDrawer() const;
122   
123   //! Sets default builders' drawer
124   Standard_EXPORT void SetDrawer (const Handle(MeshVS_Drawer)& aDrawer);
125   
126   //! Returns True if specified element is hidden
127   //! By default no elements are hidden
128   Standard_EXPORT Standard_Boolean IsHiddenElem (const Standard_Integer ID) const;
129   
130   //! Returns True if specified node is hidden.
131   //! By default all nodes are hidden
132   Standard_EXPORT Standard_Boolean IsHiddenNode (const Standard_Integer ID) const;
133   
134   //! Returns True if specified element is not hidden
135   Standard_EXPORT Standard_Boolean IsSelectableElem (const Standard_Integer ID) const;
136   
137   //! Returns True if specified node is specified as selectable.
138   Standard_EXPORT Standard_Boolean IsSelectableNode (const Standard_Integer ID) const;
139   
140   //! Returns map of hidden nodes (may be null handle)
141   Standard_EXPORT const Handle(TColStd_HPackedMapOfInteger)& GetHiddenNodes() const;
142   
143   //! Sets map of hidden nodes, which shall not be displayed individually.
144   //! If nodes shared by some elements shall not be drawn,
145   //! they should be included into that map
146   Standard_EXPORT void SetHiddenNodes (const Handle(TColStd_HPackedMapOfInteger)& Ids);
147   
148   //! Returns map of hidden elements (may be null handle)
149   Standard_EXPORT const Handle(TColStd_HPackedMapOfInteger)& GetHiddenElems() const;
150   
151   //! Sets map of hidden elements
152   Standard_EXPORT void SetHiddenElems (const Handle(TColStd_HPackedMapOfInteger)& Ids);
153   
154   //! Returns map of selectable elements (may be null handle)
155   Standard_EXPORT const Handle(TColStd_HPackedMapOfInteger)& GetSelectableNodes() const;
156   
157   //! Sets map of selectable nodes.
158   Standard_EXPORT void SetSelectableNodes (const Handle(TColStd_HPackedMapOfInteger)& Ids);
159   
160   //! Automatically computes selectable nodes; the node is considered
161   //! as being selectable if it is either not hidden, or is hidden
162   //! but referred by at least one non-hidden element.
163   //! Thus all nodes that are visible (either individually, or as ends or
164   //! corners of elements) are selectable by default.
165   Standard_EXPORT void UpdateSelectableNodes();
166   
167   //! Returns set mesh selection method (see MeshVS.cdl)
168   Standard_EXPORT MeshVS_MeshSelectionMethod GetMeshSelMethod() const;
169   
170   //! Sets mesh selection method (see MeshVS.cdl)
171   Standard_EXPORT void SetMeshSelMethod (const MeshVS_MeshSelectionMethod M);
172   
173   //! Returns True if the given owner represents a whole mesh.
174   Standard_EXPORT virtual Standard_Boolean IsWholeMeshOwner (const Handle(SelectMgr_EntityOwner)& theOwner) const;
175
176 friend class MeshVS_PrsBuilder;
177
178
179   DEFINE_STANDARD_RTTIEXT(MeshVS_Mesh,AIS_InteractiveObject)
180
181 protected:
182
183   //! Stores all vertices that belong to one of the faces to the given map
184   //! @param theAllElements [in] the map of all mesh elements
185   //! @param theNbMaxFaceNodes [in] the maximum amount of nodes per face, retrieved from drawer
186   //! @param theSharedNodes [out] the result map of all vertices that belong to one face at least
187   Standard_EXPORT void scanFacesForSharedNodes (const TColStd_PackedMapOfInteger& theAllElements,
188                                                 const Standard_Integer theNbMaxFaceNodes,
189                                                 TColStd_PackedMapOfInteger& theSharedNodes) const;
190
191 protected:
192
193
194   MeshVS_DataMapOfIntegerOwner myNodeOwners;
195   MeshVS_DataMapOfIntegerOwner myElementOwners;
196   MeshVS_DataMapOfIntegerOwner my0DOwners;
197   MeshVS_DataMapOfIntegerOwner myLinkOwners;
198   MeshVS_DataMapOfIntegerOwner myFaceOwners;
199   MeshVS_DataMapOfIntegerOwner myVolumeOwners;
200   MeshVS_DataMapOfIntegerOwner myGroupOwners;
201   MeshVS_DataMapOfIntegerOwner myMeshOwners;
202   Handle(MeshVS_Drawer) myCurrentDrawer;
203   Handle(MeshVS_Drawer) mySelectionDrawer;
204   Handle(MeshVS_Drawer) myHilightDrawer;
205   Handle(SelectMgr_EntityOwner) myWholeMeshOwner;
206
207
208 private:
209
210
211   MeshVS_SequenceOfPrsBuilder myBuilders;
212   Handle(MeshVS_PrsBuilder) myHilighter;
213   Handle(TColStd_HPackedMapOfInteger) myHiddenElements;
214   Handle(TColStd_HPackedMapOfInteger) myHiddenNodes;
215   Handle(TColStd_HPackedMapOfInteger) mySelectableNodes;
216   Handle(MeshVS_DataSource) myDataSource;
217   MeshVS_MeshSelectionMethod mySelectionMethod;
218
219
220 };
221
222
223
224
225
226
227
228 #endif // _MeshVS_Mesh_HeaderFile