1ed7f78fcb70dc19b8c6e12a9d409c944739c8f8
[occt.git] / src / SelectMgr / SelectMgr_Selection.cxx
1 // Created on: 1995-02-16
2 // Created by: Mister rmi
3 // Copyright (c) 1995-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 #include <Standard_NullObject.hxx>
18
19 #include <SelectBasics_EntityOwner.hxx>
20 #include <SelectMgr_Selection.hxx>
21
22 //==================================================
23 // Function: SelectMgr_Selection
24 // Purpose :
25 //==================================================
26 SelectMgr_Selection::SelectMgr_Selection (const Standard_Integer theModeIdx)
27 : myMode (theModeIdx),
28   mySelectionState (SelectMgr_SOS_Unknown),
29   myBVHUpdateStatus (SelectMgr_TBU_None),
30   mySensFactor (2)
31 {}
32
33 SelectMgr_Selection::~SelectMgr_Selection()
34 {
35   Destroy();
36 }
37
38 //==================================================
39 // Function: Destroy
40 // Purpose :
41 //==================================================
42 void SelectMgr_Selection::Destroy()
43 {
44   for (Standard_Integer anEntityIdx = 0; anEntityIdx < myEntities.Size(); ++anEntityIdx)
45   {
46     Handle(SelectMgr_SensitiveEntity)& anEntity = myEntities.ChangeValue (anEntityIdx);
47     anEntity->BaseSensitive()->Set (NULL);
48   }
49   mySensFactor = 2;
50 }
51
52 //==================================================
53 // Function: ADD
54 // Purpose :
55 //==================================================
56 void SelectMgr_Selection::Add (const Handle(SelectBasics_SensitiveEntity)& theSensitive)
57 {
58   // if input is null:
59   // in debug mode raise exception
60   Standard_NullObject_Raise_if
61     (theSensitive.IsNull(), "Null sensitive entity is added to the selection");
62
63   // in release mode do not add
64   if (!theSensitive.IsNull())
65   {
66     Handle(SelectMgr_SensitiveEntity) anEntity = new SelectMgr_SensitiveEntity (theSensitive);
67     myEntities.Append (anEntity);
68     if (mySelectionState == SelectMgr_SOS_Activated &&
69         !anEntity->IsActiveForSelection())
70     {
71       anEntity->SetActiveForSelection();
72     }
73
74     mySensFactor = Max (mySensFactor,
75                         anEntity->BaseSensitive()->SensitivityFactor());
76   }
77 }       
78
79 //==================================================
80 // Function: Clear
81 // Purpose :
82 //==================================================
83 void SelectMgr_Selection::Clear()
84 {
85   for (Standard_Integer anIdx = 0; anIdx < myEntities.Size(); ++anIdx)
86   {
87     Handle(SelectMgr_SensitiveEntity)& anEntity = myEntities.ChangeValue (anIdx);
88     anEntity->Clear();
89   }
90
91   myEntities.Clear();
92 }
93
94 //==================================================
95 // Function: IsEmpty 
96 // Purpose :
97 //==================================================
98 Standard_Boolean SelectMgr_Selection::IsEmpty() const
99 {
100   return myEntities.IsEmpty();
101 }
102
103 //==================================================
104 // function: GetEntityById
105 // purpose : Returns sensitive entity stored by
106 //           index theIdx in entites vector
107 //==================================================
108 Handle(SelectMgr_SensitiveEntity)& SelectMgr_Selection::GetEntityById (const Standard_Integer theIdx)
109 {
110   return myEntities.ChangeValue (theIdx);
111 }
112
113 //==================================================
114 // function: GetSelectionState
115 // purpose : Returns status of selection
116 //==================================================
117 const SelectMgr_StateOfSelection SelectMgr_Selection::GetSelectionState() const
118 {
119   return mySelectionState;
120 }
121
122 //==================================================
123 // function: SetSelectionState
124 // purpose : Sets status of selection
125 //==================================================
126 void SelectMgr_Selection::SetSelectionState (const SelectMgr_StateOfSelection theState) const
127 {
128   mySelectionState = theState;
129 }
130
131 //==================================================
132 // function: Sensitivity
133 // purpose : Returns sensitivity of the selection
134 //==================================================
135 Standard_Integer SelectMgr_Selection::Sensitivity() const
136 {
137   return mySensFactor;
138 }