Commit | Line | Data |
---|---|---|
7fd59977 | 1 | // Copyright: Matra-Datavision 1995 |
2 | // File: Select3D_SensitiveBox.cxx | |
3 | // Created: Thu Apr 13 10:28:17 1995 | |
4 | // Author: Robert COUBLANC | |
5 | // <rob> | |
6 | ||
7 | ||
8 | ||
9 | #include <Select3D_SensitiveBox.ixx> | |
10 | #include <gp_Pnt2d.hxx> | |
11 | #include <gp_Pnt.hxx> | |
12 | #include <Bnd_Box.hxx> | |
13 | #include <ElCLib.hxx> | |
14 | ||
15 | ||
16 | ||
17 | //================================================== | |
18 | // Function: Constructor | |
19 | // Purpose : | |
20 | //================================================== | |
21 | ||
22 | Select3D_SensitiveBox::Select3D_SensitiveBox(const Handle(SelectBasics_EntityOwner)& OwnerId, | |
ac04d101 | 23 | const Bnd_Box& BBox): |
7fd59977 | 24 | Select3D_SensitiveEntity(OwnerId), |
25 | mybox3d(BBox){} | |
26 | ||
7fd59977 | 27 | //================================================== |
28 | // Function: Constructor | |
29 | // Purpose : | |
30 | //================================================== | |
31 | ||
32 | Select3D_SensitiveBox:: | |
33 | Select3D_SensitiveBox(const Handle(SelectBasics_EntityOwner)& OwnerId, | |
ac04d101 SA |
34 | const Standard_Real XMin, |
35 | const Standard_Real YMin, | |
36 | const Standard_Real ZMin, | |
37 | const Standard_Real XMax, | |
38 | const Standard_Real YMax, | |
39 | const Standard_Real ZMax): | |
7fd59977 | 40 | Select3D_SensitiveEntity(OwnerId) |
41 | { | |
42 | mybox3d.Update(XMin,YMin,ZMin,XMax,YMax,ZMax); | |
43 | } | |
44 | ||
7fd59977 | 45 | //================================================== |
46 | // Function: Project | |
47 | // Purpose : | |
48 | //================================================== | |
ac04d101 | 49 | |
7fd59977 | 50 | void Select3D_SensitiveBox:: |
4952a30a | 51 | Project(const Handle(Select3D_Projector)& aProj) |
7fd59977 | 52 | { |
53 | Select3D_SensitiveEntity::Project(aProj); // to set the field last proj... | |
4952a30a | 54 | |
ac04d101 SA |
55 | if(HasLocation()) |
56 | { | |
7fd59977 | 57 | Bnd_Box B = mybox3d.Transformed(Location().Transformation()); |
58 | ProjectBox(aProj,B); | |
59 | } | |
60 | else | |
61 | ProjectBox(aProj,mybox3d); | |
62 | } | |
63 | ||
64 | //================================================== | |
ac04d101 | 65 | // Function: Areas |
7fd59977 | 66 | // Purpose : |
67 | //================================================== | |
ac04d101 | 68 | |
7fd59977 | 69 | void Select3D_SensitiveBox:: |
70 | Areas(SelectBasics_ListOfBox2d& aSeq) | |
71 | { aSeq.Append(mybox2d);} | |
72 | ||
7fd59977 | 73 | //======================================================================= |
74 | //function : GetConnected | |
75 | //purpose : | |
76 | //======================================================================= | |
77 | ||
78 | Handle(Select3D_SensitiveEntity) Select3D_SensitiveBox::GetConnected(const TopLoc_Location& aLoc) | |
79 | { | |
80 | Handle(Select3D_SensitiveBox) NiouEnt = new Select3D_SensitiveBox(myOwnerId,mybox3d); | |
81 | ||
82 | if(HasLocation()) NiouEnt->SetLocation(Location()); | |
83 | NiouEnt->UpdateLocation(aLoc); | |
84 | return NiouEnt; | |
85 | } | |
86 | ||
7fd59977 | 87 | //================================================== |
ac04d101 | 88 | // Function: Matches |
7fd59977 | 89 | // Purpose : |
90 | //================================================== | |
91 | Standard_Boolean Select3D_SensitiveBox:: | |
ac04d101 SA |
92 | Matches(const Standard_Real X, |
93 | const Standard_Real Y, | |
94 | const Standard_Real aTol, | |
95 | Standard_Real& DMin) | |
7fd59977 | 96 | { |
97 | Select3D_SensitiveEntity::Matches(X,Y,aTol,DMin); | |
98 | DMin=0.; | |
99 | ||
100 | return Standard_True; | |
7fd59977 | 101 | } |
102 | ||
103 | //================================================== | |
ac04d101 | 104 | // Function: Matches |
7fd59977 | 105 | // Purpose : |
106 | //================================================== | |
107 | ||
108 | Standard_Boolean Select3D_SensitiveBox:: | |
109 | Matches (const Standard_Real XMin, | |
ac04d101 SA |
110 | const Standard_Real YMin, |
111 | const Standard_Real XMax, | |
112 | const Standard_Real YMax, | |
113 | const Standard_Real aTol) | |
7fd59977 | 114 | { |
115 | Bnd_Box2d BoundBox; | |
116 | BoundBox.Update(XMin-aTol,YMin-aTol,XMax+aTol,YMax+aTol); | |
117 | return(!BoundBox.IsOut(mybox2d)); | |
118 | } | |
119 | ||
7fd59977 | 120 | //======================================================================= |
121 | //function : Matches | |
122 | //purpose : | |
123 | //======================================================================= | |
124 | ||
125 | Standard_Boolean Select3D_SensitiveBox:: | |
126 | Matches (const TColgp_Array1OfPnt2d& aPoly, | |
ac04d101 SA |
127 | const Bnd_Box2d& aBox, |
128 | const Standard_Real aTol) | |
129 | { | |
7fd59977 | 130 | return(!aBox.IsOut(mybox2d)); |
131 | } | |
132 | ||
7fd59977 | 133 | //======================================================================= |
134 | //function : Dump | |
135 | //purpose : | |
136 | //======================================================================= | |
137 | ||
138 | void Select3D_SensitiveBox::Dump(Standard_OStream& S,const Standard_Boolean FullDump) const | |
139 | { | |
140 | S<<"\tSensitiveBox 3D :\n"; | |
141 | if(HasLocation()) | |
142 | S<<"\t\tExisting Location"<<endl; | |
143 | ||
144 | Standard_Real XMin,YMin,ZMin,XMax,YMax,ZMax; | |
145 | mybox3d.Get(XMin,YMin,ZMin,XMax,YMax,ZMax); | |
146 | ||
147 | S<<"\t\t PMin [ "<<XMin<<" , "<<YMin<<" , "<<ZMin<<" ]"; | |
148 | S<<"\t\t PMax [ "<<XMax<<" , "<<YMax<<" , "<<ZMax<<" ]"<<endl; | |
149 | ||
ac04d101 SA |
150 | if(FullDump) |
151 | { | |
7fd59977 | 152 | // S<<"\t\t\tOwner:"<<myOwnerId<<endl; |
ac04d101 SA |
153 | Select3D_SensitiveEntity::DumpBox(S,mybox2d); |
154 | } | |
7fd59977 | 155 | } |
156 | ||
157 | ||
158 | //======================================================================= | |
159 | //function : ProjectBox | |
160 | //purpose : | |
161 | //======================================================================= | |
162 | ||
4952a30a | 163 | void Select3D_SensitiveBox::ProjectBox(const Handle(Select3D_Projector)& aPrj, |
ac04d101 | 164 | const Bnd_Box& aBox) |
7fd59977 | 165 | { |
166 | mybox2d.SetVoid(); | |
167 | gp_Pnt2d curp2d; | |
168 | Standard_Real XMin,YMin,ZMin,XMax,YMax,ZMax; | |
169 | aBox.Get(XMin,YMin,ZMin,XMax,YMax,ZMax); | |
4952a30a | 170 | |
171 | aPrj->Project(gp_Pnt(XMin,YMin,ZMin),curp2d); | |
7fd59977 | 172 | mybox2d.Update(curp2d.X(),curp2d.Y()); |
4952a30a | 173 | aPrj->Project(gp_Pnt(XMax,YMin,ZMin),curp2d); |
7fd59977 | 174 | mybox2d.Update(curp2d.X(),curp2d.Y()); |
4952a30a | 175 | aPrj->Project(gp_Pnt(XMax,YMax,ZMin),curp2d); |
7fd59977 | 176 | mybox2d.Update(curp2d.X(),curp2d.Y()); |
4952a30a | 177 | aPrj->Project(gp_Pnt(XMin,YMax,ZMin),curp2d); |
7fd59977 | 178 | mybox2d.Update(curp2d.X(),curp2d.Y()); |
4952a30a | 179 | aPrj->Project(gp_Pnt(XMin,YMin,ZMax),curp2d); |
7fd59977 | 180 | mybox2d.Update(curp2d.X(),curp2d.Y()); |
4952a30a | 181 | aPrj->Project(gp_Pnt(XMax,YMin,ZMax),curp2d); |
7fd59977 | 182 | mybox2d.Update(curp2d.X(),curp2d.Y()); |
4952a30a | 183 | aPrj->Project(gp_Pnt(XMax,YMax,ZMax),curp2d); |
7fd59977 | 184 | mybox2d.Update(curp2d.X(),curp2d.Y()); |
4952a30a | 185 | aPrj->Project(gp_Pnt(XMin,YMax,ZMax),curp2d); |
7fd59977 | 186 | mybox2d.Update(curp2d.X(),curp2d.Y()); |
187 | } | |
188 | ||
189 | //======================================================================= | |
190 | //function : ComputeDepth | |
191 | //purpose : | |
192 | //======================================================================= | |
193 | ||
194 | Standard_Real Select3D_SensitiveBox::ComputeDepth(const gp_Lin& EyeLine) const | |
195 | { | |
196 | Standard_Real XMin,YMin,ZMin,XMax,YMax,ZMax; | |
197 | mybox3d.Get(XMin,YMin,ZMin,XMax,YMax,ZMax); | |
198 | gp_Pnt PMid((XMin+XMax)/2.,(YMin+YMax)/2.,(ZMin+ZMax)/2.); | |
199 | return ElCLib::Parameter(EyeLine,PMid); | |
200 | } |