0028010: Visualization, Prs3d_Arrow - add Shading presentation builder
[occt.git] / src / AIS / AIS_Shape.hxx
1 // Created on: 1996-12-20
2 // Created by: Robert COUBLANC
3 // Copyright (c) 1996-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17 #ifndef _AIS_Shape_HeaderFile
18 #define _AIS_Shape_HeaderFile
19
20 #include <Standard.hxx>
21 #include <Standard_Type.hxx>
22
23 #include <TopoDS_Shape.hxx>
24 #include <Bnd_Box.hxx>
25 #include <Standard_Boolean.hxx>
26 #include <Standard_Real.hxx>
27 #include <AIS_InteractiveObject.hxx>
28 #include <Standard_Integer.hxx>
29 #include <AIS_KindOfInteractive.hxx>
30 #include <Prs3d_TypeOfHLR.hxx>
31 #include <PrsMgr_PresentationManager3d.hxx>
32 #include <SelectMgr_Selection.hxx>
33 #include <Quantity_NameOfColor.hxx>
34 #include <Graphic3d_NameOfMaterial.hxx>
35 #include <TopAbs_ShapeEnum.hxx>
36 #include <Prs3d_Drawer.hxx>
37 class TopoDS_Shape;
38 class Prs3d_Presentation;
39 class Prs3d_Projector;
40 class Geom_Transformation;
41 class Quantity_Color;
42 class Graphic3d_MaterialAspect;
43 class Bnd_Box;
44
45
46 class AIS_Shape;
47 DEFINE_STANDARD_HANDLE(AIS_Shape, AIS_InteractiveObject)
48
49 //! A framework to manage presentation and selection of shapes.
50 //! AIS_Shape is the interactive object which is used the
51 //! most by   applications. There are standard functions
52 //! available which allow you to prepare selection
53 //! operations on the constituent elements of shapes -
54 //! vertices, edges, faces etc - in an open local context.
55 //! The selection modes specific to "Shape" type objects
56 //! are referred to as Standard Activation Mode. These
57 //! modes are only taken into account in open local
58 //! context and only act on Interactive Objects which
59 //! have redefined the virtual method
60 //! AcceptShapeDecomposition so that it returns true.
61 //! Several advanced functions are also available. These
62 //! include functions to manage deviation angle and
63 //! deviation coefficient - both HLR and non-HLR - of
64 //! an inheriting shape class. These services allow you to
65 //! select one type of shape interactive object for higher
66 //! precision drawing. When you do this, the
67 //! Prs3d_Drawer::IsOwn... functions corresponding to the
68 //! above deviation angle and coefficient functions return
69 //! true indicating that there is a local setting available
70 //! for the specific object.
71 class AIS_Shape : public AIS_InteractiveObject
72 {
73
74 public:
75
76   
77   //! Initializes construction of the shape shap from wires,
78   //! edges and vertices.
79   Standard_EXPORT AIS_Shape(const TopoDS_Shape& shap);
80   
81   //! Returns index 0. This value refers to SHAPE from TopAbs_ShapeEnum
82   Standard_EXPORT virtual Standard_Integer Signature() const Standard_OVERRIDE;
83   
84   //! Returns Object as the type of Interactive Object.
85   Standard_EXPORT virtual AIS_KindOfInteractive Type() const Standard_OVERRIDE;
86   
87   //! Returns true if the Interactive Object accepts shape decomposition.
88   Standard_EXPORT virtual Standard_Boolean AcceptShapeDecomposition() const Standard_OVERRIDE;
89   
90   //! Constructs an instance of the shape object ashape.
91     void Set (const TopoDS_Shape& ashap);
92   
93   //! Returns this shape object.
94     const TopoDS_Shape& Shape() const;
95   
96   //! Sets a local value for deviation coefficient for this specific shape.
97   Standard_EXPORT Standard_Boolean SetOwnDeviationCoefficient();
98   
99   //! Sets a local value for HLR deviation coefficient for this specific shape.
100   Standard_EXPORT Standard_Boolean SetOwnHLRDeviationCoefficient();
101   
102   //! Sets a local value for deviation angle for this specific shape.
103   Standard_EXPORT Standard_Boolean SetOwnDeviationAngle();
104   
105   //! Sets a local value for HLR deviation angle for this specific shape.
106   Standard_EXPORT Standard_Boolean SetOwnHLRDeviationAngle();
107   
108   //! Sets a local value for deviation coefficient for this specific shape.
109   Standard_EXPORT void SetOwnDeviationCoefficient (const Standard_Real aCoefficient);
110   
111   //! sets myOwnHLRDeviationCoefficient field in Prs3d_Drawer &
112   //! recomputes presentation
113   Standard_EXPORT void SetOwnHLRDeviationCoefficient (const Standard_Real aCoefficient);
114   
115   //! this compute a new angle and Deviation from the value anAngle
116   //! and set the values stored in myDrawer with these that become local to the shape
117   Standard_EXPORT void SetAngleAndDeviation (const Standard_Real anAngle);
118   
119   //! gives back the angle initial value put by the User.
120   Standard_EXPORT Standard_Real UserAngle() const;
121   
122   //! sets myOwnDeviationAngle field in Prs3d_Drawer & recomputes presentation
123   Standard_EXPORT void SetOwnDeviationAngle (const Standard_Real anAngle);
124   
125   //! this compute a new Angle and Deviation from the value anAngle for HLR
126   //! and set the values stored in myDrawer for with these that become local to the shape
127   Standard_EXPORT void SetHLRAngleAndDeviation (const Standard_Real anAngle);
128   
129   //! sets myOwnHLRDeviationAngle field in Prs3d_Drawer & recomputes presentation
130   Standard_EXPORT void SetOwnHLRDeviationAngle (const Standard_Real anAngle);
131   
132   //! Returns true and the values of the deviation
133   //! coefficient aCoefficient and the previous deviation
134   //! coefficient aPreviousCoefficient. If these values are
135   //! not already set, false is returned.
136   Standard_EXPORT Standard_Boolean OwnDeviationCoefficient (Standard_Real& aCoefficient, Standard_Real& aPreviousCoefficient) const;
137   
138   //! Returns   true and the values of the HLR deviation
139   //! coefficient aCoefficient and the previous HLR
140   //! deviation coefficient aPreviousCoefficient. If these
141   //! values are not already set, false is returned.
142   Standard_EXPORT Standard_Boolean OwnHLRDeviationCoefficient (Standard_Real& aCoefficient, Standard_Real& aPreviousCoefficient) const;
143   
144   //! Returns true and the values of the deviation angle
145   //! anAngle and the previous deviation angle aPreviousAngle.
146   //! If these values are not already set, false is returned.
147   Standard_EXPORT Standard_Boolean OwnDeviationAngle (Standard_Real& anAngle, Standard_Real& aPreviousAngle) const;
148   
149   //! Returns true and the values   of the HLR deviation
150   //! angle anAngle and of the previous HLR deviation
151   //! angle aPreviousAngle. If these values are not
152   //! already set, false is returned.
153   Standard_EXPORT Standard_Boolean OwnHLRDeviationAngle (Standard_Real& anAngle, Standard_Real& aPreviousAngle) const;
154   
155   //! Sets the type of HLR algorithm used by the shape
156     void SetTypeOfHLR (const Prs3d_TypeOfHLR theTypeOfHLR);
157   
158   //! Gets the type of HLR algorithm
159     Prs3d_TypeOfHLR TypeOfHLR() const;
160   
161   //! Sets the color aColor in the reconstructed
162   //! compound shape. Acts via the Drawer methods below on the appearance of:
163   //! -   free boundaries:
164   //! Prs3d_Drawer_FreeBoundaryAspect,
165   //! -   isos: Prs3d_Drawer_UIsoAspect,
166   //! Prs3dDrawer_VIsoAspect,
167   //! -   shared boundaries:
168   //! Prs3d_Drawer_UnFreeBoundaryAspect,
169   //! -   shading: Prs3d_Drawer_ShadingAspect,
170   //! -   visible line color in hidden line mode:
171   //! Prs3d_Drawer_SeenLineAspect
172   //! -   hidden line color in hidden line mode:
173   //! Prs3d_Drawer_HiddenLineAspect.
174   Standard_EXPORT virtual void SetColor (const Quantity_NameOfColor aColor) Standard_OVERRIDE;
175   
176   Standard_EXPORT virtual void SetColor (const Quantity_Color& aColor) Standard_OVERRIDE;
177   
178   //! Removes settings for color in the reconstructed compound shape.
179   Standard_EXPORT virtual void UnsetColor() Standard_OVERRIDE;
180   
181   //! Sets the value aValue for line width in the reconstructed compound shape.
182   //! Changes line aspects for lines-only presentation modes like Wireframe and Bounding Box.
183   //! Doesn't change face boundary line aspect.
184   Standard_EXPORT virtual void SetWidth (const Standard_Real aValue) Standard_OVERRIDE;
185   
186   //! Removes the setting for line width in the reconstructed compound shape.
187   Standard_EXPORT virtual void UnsetWidth() Standard_OVERRIDE;
188   
189   Standard_EXPORT virtual void SetMaterial (const Graphic3d_NameOfMaterial aName) Standard_OVERRIDE;
190   
191   //! Allows you to provide settings for the material aName
192   //! in the reconstructed compound shape.
193   Standard_EXPORT virtual void SetMaterial (const Graphic3d_MaterialAspect& aName) Standard_OVERRIDE;
194   
195   //! Removes settings for material in the reconstructed compound shape.
196   Standard_EXPORT virtual void UnsetMaterial() Standard_OVERRIDE;
197   
198   //! Sets the value aValue for transparency in the reconstructed compound shape.
199   Standard_EXPORT virtual void SetTransparency (const Standard_Real aValue = 0.6) Standard_OVERRIDE;
200   
201   //! Removes the setting for transparency in the reconstructed compound shape.
202   Standard_EXPORT virtual void UnsetTransparency() Standard_OVERRIDE;
203   
204   //! Constructs a bounding box with which to reconstruct
205   //! compound topological shapes for presentation.
206   Standard_EXPORT virtual const Bnd_Box& BoundingBox();
207   
208   //! AIS_InteractiveObject defines another virtual method BoundingBox,
209   //! which is not the same as above; keep it visible.
210   using AIS_InteractiveObject::BoundingBox;
211
212   //! Returns the NameOfColor attributes of the shape accordingly to
213   //! the current facing model;
214   Standard_EXPORT virtual Quantity_NameOfColor Color() const Standard_OVERRIDE;
215   
216   //! Returns the Color attributes of the shape accordingly to
217   //! the current facing model;
218   Standard_EXPORT virtual void Color (Quantity_Color& aColor) const Standard_OVERRIDE;
219   
220   //! Returns the NameOfMaterial attributes of the shape accordingly to
221   //! the current facing model;
222   Standard_EXPORT virtual Graphic3d_NameOfMaterial Material() const Standard_OVERRIDE;
223   
224   //! Returns the transparency attributes of the shape accordingly to
225   //! the current facing model;
226   Standard_EXPORT virtual Standard_Real Transparency() const Standard_OVERRIDE;
227   
228   //! Activates the same TopAbs shape enumerations as
229   //! those used by SelectionMode assigning a type to the mode aDecompositionMode.
230   Standard_EXPORT static TopAbs_ShapeEnum SelectionType (const Standard_Integer aDecompositionMode);
231   
232   //! Establishes an equivalence between a mode and the
233   //! type, aShapeType,   of selection. The correspondences are as follows:
234   //! -   mode 0 - Shape
235   //! -   mode 1 - Vertex
236   //! -   mode 2 - Edge
237   //! -   mode 3 - Wire
238   //! -   mode 4 - Face
239   //! -   mode 5 - Shell
240   //! -   mode 6 - Solid
241   //! -   mode 7 - Compsolid
242   //! -   mode 8 - Compound
243   Standard_EXPORT static Standard_Integer SelectionMode (const TopAbs_ShapeEnum aShapeType);
244
245
246
247
248   DEFINE_STANDARD_RTTIEXT(AIS_Shape,AIS_InteractiveObject)
249
250 protected:
251
252   
253   Standard_EXPORT virtual void Compute (const Handle(PrsMgr_PresentationManager3d)& aPresentationManager, const Handle(Prs3d_Presentation)& aPresentation, const Standard_Integer aMode = 0) Standard_OVERRIDE;
254   
255   Standard_EXPORT virtual void Compute (const Handle(Prs3d_Projector)& aProjector, const Handle(Prs3d_Presentation)& aPresentation) Standard_OVERRIDE;
256   
257   Standard_EXPORT virtual void Compute (const Handle(Prs3d_Projector)& aProjector, const Handle(Geom_Transformation)& aTrsf, const Handle(Prs3d_Presentation)& aPresentation) Standard_OVERRIDE;
258   
259   Standard_EXPORT virtual void ComputeSelection (const Handle(SelectMgr_Selection)& aSelection, const Standard_Integer aMode) Standard_OVERRIDE;
260   
261   Standard_EXPORT void LoadRecomputable (const Standard_Integer TheMode);
262   
263   Standard_EXPORT void setColor (const Handle(Prs3d_Drawer)& theDrawer, const Quantity_Color& theColor) const;
264   
265   Standard_EXPORT void setWidth (const Handle(Prs3d_Drawer)& theDrawer, const Standard_Real theWidth) const;
266   
267   Standard_EXPORT void setTransparency (const Handle(Prs3d_Drawer)& theDrawer, const Standard_Real theValue) const;
268   
269   Standard_EXPORT void setMaterial (const Handle(Prs3d_Drawer)& theDrawer, const Graphic3d_MaterialAspect& theMaterial, const Standard_Boolean theToKeepColor, const Standard_Boolean theToKeepTransp) const;
270
271   TopoDS_Shape myshape;
272   Bnd_Box myBB;
273   Standard_Boolean myCompBB;
274
275
276 private:
277
278   
279   Standard_EXPORT void Compute (const Handle(Prs3d_Projector)& aProjector, const Handle(Prs3d_Presentation)& aPresentation, const TopoDS_Shape& ashape);
280
281   Standard_Real myInitAng;
282
283
284 };
285
286
287 #include <AIS_Shape.lxx>
288
289
290
291
292
293 #endif // _AIS_Shape_HeaderFile