1feb2e4a424f1067e00a8bb0e7f31dc44ed1e093
[occt.git] / src / IVtk / IVtk_IShapePickerAlgo.hxx
1 // Created on: 2011-10-12 
2 // Created by: Roman KOZLOV
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 #ifndef __IVTK_ISHAPEPICKERALGO_H__
17 #define __IVTK_ISHAPEPICKERALGO_H__
18
19 #include <IVtk_IView.hxx>
20 #include <IVtk_IShape.hxx>
21
22 DEFINE_STANDARD_HANDLE( IVtk_IShapePickerAlgo, IVtk_Interface )
23
24 //! @class IVtk_IShapePickerAlgo 
25 //! @brief Interface for 3D shapes picking algorithm.
26 class IVtk_IShapePickerAlgo : public IVtk_Interface
27 {
28 public:
29   typedef Handle(IVtk_IShapePickerAlgo) Handle;
30
31   virtual ~IVtk_IShapePickerAlgo() { }
32
33   DEFINE_STANDARD_RTTI(IVtk_IShapePickerAlgo, IVtk_Interface)
34
35   virtual void SetView (const IVtk_IView::Handle& theView) = 0;
36   virtual int  NbPicked() = 0;
37
38   //! Get activated selection modes for a shape.
39   //! @param [in] theShape a shape with activated selection mode(s)
40   //! @return list of active selection modes
41   virtual IVtk_SelectionModeList GetSelectionModes (const IVtk_IShape::Handle& theShape) const = 0;
42
43 public: // @name Set selectable shapes and selection modes
44
45   //! Activates/deactivates the given selection mode for the shape.
46   //! If mode == SM_None, the shape becomes non-selectable and 
47   //! is removed from the internal selection data.
48   //! @param [in] theShape Shape for which the selection mode should be activated
49   //! @param [in] theMode Selection mode to be activated
50   //! @param [in] theIsTurnOn Flag to turn on/off the selection mode
51   virtual void SetSelectionMode (const IVtk_IShape::Handle& theShape,
52                                  const IVtk_SelectionMode theMode,
53                                  const bool theIsTurnOn = true) = 0;
54
55   //! Activates/deactivates the given selection mode for the shape.
56   //! If mode == SM_None, the shape becomes non-selectable and 
57   //! is removed from the internal selection data.
58   //! @param [in] theShapes List of shapes for which the selection mode should be activated
59   //! @param [in] theMode Selection mode to be activated
60   //! @param [in] theIsTurnOn Flag to turn on/off the selection mode
61   virtual void SetSelectionMode (const IVtk_ShapePtrList& theShapes,
62                                  const IVtk_SelectionMode theMode,
63                                  const bool theIsTurnOn = true) = 0;
64
65 public: // @name Picking methods
66
67   virtual bool Pick (const double theX, const double theY) = 0;
68   virtual bool Pick (const double theXMin,
69                      const double theYMin,
70                      const double theXMax,
71                      const double theYMax) = 0;
72                      
73   virtual bool Pick (double** /* double poly[][3]*/, const int theNbPoints) = 0;
74
75 public: // @name Obtain picking results
76
77   //! @return the list of picked top-level shape IDs,
78   //! in the order of increasing depth (the ID of the shape closest to the eye 
79   //! is the first in the list)
80   virtual const IVtk_ShapeIdList& ShapesPicked() const = 0;
81
82   //! @param [in] theId Top-level shape ID
83   //! @param [out] theShapeList the list of picked sub-shape IDs for the given top-level shape ID,
84   //! in the order of increasing depth (the ID of the sub-shape closest to the eye 
85   //! is the first in the list)
86   virtual void SubShapesPicked (const IVtk_IdType theId, IVtk_ShapeIdList& theShapeList) const = 0;
87 };
88
89 #endif // __IVTK_ISHAPEPICKERALGO_H__