0027202: Visualization - add sensitivity Select3D_SensitivePrimitiveArray for Graphic...
[occt.git] / src / AIS / AIS_PointCloud.hxx
1 // Created on: 2014-08-13
2 // Created by: Maxim GLIBIN
3 // Copyright (c) 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 _AIS_PointCloud_HeaderFile
17 #define _AIS_PointCloud_HeaderFile
18
19 #include <AIS.hxx>
20 #include <AIS_InteractiveObject.hxx>
21 #include <Bnd_Box.hxx>
22 #include <Graphic3d_ArrayOfPoints.hxx>
23 #include <Quantity_HArray1OfColor.hxx>
24 #include <Standard.hxx>
25 #include <Standard_Type.hxx>
26 #include <Standard_Macro.hxx>
27 #include <TColgp_HArray1OfDir.hxx>
28 #include <TColgp_HArray1OfPnt.hxx>
29
30 class AIS_PointCloud;
31 DEFINE_STANDARD_HANDLE(AIS_PointCloud, AIS_InteractiveObject)
32
33 //! Interactive object for set of points.
34 //! The presentation supports two display modes:
35 //! - Points.
36 //! - Bounding box for highlighting.
37 //! Presentation provides selection by bouding box.
38 //! Selection and consequently highlighting can disabled by
39 //! setting default selection mode to -1. There will be no way
40 //! to select object from interactive view. Any calls to
41 //! AIS_InteractiveContext::AddOrRemoveSelected should be also prohibited,
42 //! to avoid programmatic highlighting (workaround is setting non-supported
43 //! hilight mode, e.g. 100);
44 class AIS_PointCloud : public AIS_InteractiveObject
45 {
46
47 public:
48
49   //! Display modes supported by this Point Cloud object
50   enum DisplayMode
51   {
52     DM_Points = 0, //!< display as normal points, default presentation
53     DM_BndBox = 2  //!< display as bounding box,  default for highlighting
54   };
55
56   //! Selection modes supported by this Point Cloud object
57   enum SelectionMode
58   {
59     SM_Points = 0, //!< detected by points
60     SM_BndBox = 2  //!< detected by bounding box
61   };
62
63 public:
64
65   //! Constructor.
66   Standard_EXPORT AIS_PointCloud();
67
68   //! Sets the points from array of points.
69   //! Method will not copy the input data - array will be stored as handle.
70   //! @param thePoints [in] the array of points
71   Standard_EXPORT virtual void SetPoints (const Handle(Graphic3d_ArrayOfPoints)& thePoints);
72
73   //! Sets the points with optional colors.
74   //! The input data will be copied into internal buffer.
75   //! The input arrays should have equal length, otherwise
76   //! the presentation will not be computed and displayed.
77   //! @param theCoords  [in] the array of coordinates
78   //! @param theColors  [in] optional array of colors
79   //! @param theNormals [in] optional array of normals
80   Standard_EXPORT virtual void SetPoints (const Handle(TColgp_HArray1OfPnt)&     theCoords,
81                                           const Handle(Quantity_HArray1OfColor)& theColors  = NULL,
82                                           const Handle(TColgp_HArray1OfDir)&     theNormals = NULL);
83
84 public:
85
86   //! Get the points array.
87   //! Method might be overridden to fill in points array dynamically from application data structures.
88   //! @return the array of points
89   Standard_EXPORT virtual const Handle(Graphic3d_ArrayOfPoints) GetPoints() const;
90
91   //! Get bounding box for presentation.
92   Standard_EXPORT virtual Bnd_Box GetBoundingBox() const;
93
94 public:
95
96   //! Setup custom color. Affects presentation only when no per-point color attribute has been assigned.
97   Standard_EXPORT virtual void SetColor (const Quantity_NameOfColor theColor) Standard_OVERRIDE;
98
99   //! Setup custom color. Affects presentation only when no per-point color attribute has been assigned.
100   Standard_EXPORT virtual void SetColor (const Quantity_Color& theColor) Standard_OVERRIDE;
101
102   //! Restore default color.
103   Standard_EXPORT virtual void UnsetColor() Standard_OVERRIDE;
104
105   //! Setup custom material. Affects presentation only when normals are defined.
106   Standard_EXPORT virtual void SetMaterial (const Graphic3d_NameOfMaterial theMatName) Standard_OVERRIDE;
107
108   //! Setup custom material. Affects presentation only when normals are defined.
109   Standard_EXPORT virtual void SetMaterial (const Graphic3d_MaterialAspect& theMat) Standard_OVERRIDE;
110
111   //! Restore default material.
112   Standard_EXPORT virtual void UnsetMaterial() Standard_OVERRIDE;
113
114 protected:
115
116   //! Prepare presentation for this object.
117   Standard_EXPORT virtual void Compute (const Handle(PrsMgr_PresentationManager3d)& thePrsMgr,
118                                         const Handle(Prs3d_Presentation)&           thePrs,
119                                         const Standard_Integer                      theMode) Standard_OVERRIDE;
120
121   //! Prepare selection for this object.
122   Standard_EXPORT virtual void ComputeSelection (const Handle(SelectMgr_Selection)& theSelection,
123                                                  const Standard_Integer             theMode) Standard_OVERRIDE;
124
125 private:
126
127   Handle(Graphic3d_ArrayOfPoints) myPoints;    //!< points array for presentation
128   Bnd_Box                         myBndBox;    //!< bounding box for presentation
129
130 public:
131
132   DEFINE_STANDARD_RTTIEXT(AIS_PointCloud,AIS_InteractiveObject)
133
134 };
135
136 #endif // _AIS_PointCloud_HeaderFile