1 // Copyright: Matra-Datavision 1995
2 // File: Select3D_SensitiveBox.cxx
3 // Created: Thu Apr 13 10:28:17 1995
4 // Author: Robert COUBLANC
9 #include <Select3D_SensitiveBox.ixx>
10 #include <gp_Pnt2d.hxx>
12 #include <Bnd_Box.hxx>
17 //==================================================
18 // Function: Constructor
20 //==================================================
22 Select3D_SensitiveBox::Select3D_SensitiveBox(const Handle(SelectBasics_EntityOwner)& OwnerId,
24 Select3D_SensitiveEntity(OwnerId),
28 //==================================================
29 // Function: Constructor
31 //==================================================
33 Select3D_SensitiveBox::
34 Select3D_SensitiveBox(const Handle(SelectBasics_EntityOwner)& OwnerId,
35 const Standard_Real XMin,
36 const Standard_Real YMin,
37 const Standard_Real ZMin,
38 const Standard_Real XMax,
39 const Standard_Real YMax,
40 const Standard_Real ZMax):
41 Select3D_SensitiveEntity(OwnerId)
43 mybox3d.Update(XMin,YMin,ZMin,XMax,YMax,ZMax);
47 //==================================================
50 //==================================================
51 void Select3D_SensitiveBox::
52 Project(const Select3D_Projector& aProj)
54 Select3D_SensitiveEntity::Project(aProj); // to set the field last proj...
57 Bnd_Box B = mybox3d.Transformed(Location().Transformation());
61 ProjectBox(aProj,mybox3d);
64 //==================================================
67 //==================================================
68 void Select3D_SensitiveBox::
69 Areas(SelectBasics_ListOfBox2d& aSeq)
70 { aSeq.Append(mybox2d);}
73 //=======================================================================
74 //function : GetConnected
76 //=======================================================================
78 Handle(Select3D_SensitiveEntity) Select3D_SensitiveBox::GetConnected(const TopLoc_Location& aLoc)
80 Handle(Select3D_SensitiveBox) NiouEnt = new Select3D_SensitiveBox(myOwnerId,mybox3d);
82 if(HasLocation()) NiouEnt->SetLocation(Location());
83 NiouEnt->UpdateLocation(aLoc);
89 //==================================================
92 //==================================================
93 Standard_Boolean Select3D_SensitiveBox::
94 Matches(const Standard_Real X,
95 const Standard_Real Y,
96 const Standard_Real aTol,
99 Select3D_SensitiveEntity::Matches(X,Y,aTol,DMin);
102 return Standard_True;
106 //==================================================
109 //==================================================
111 Standard_Boolean Select3D_SensitiveBox::
112 Matches (const Standard_Real XMin,
113 const Standard_Real YMin,
114 const Standard_Real XMax,
115 const Standard_Real YMax,
116 const Standard_Real aTol)
119 BoundBox.Update(XMin-aTol,YMin-aTol,XMax+aTol,YMax+aTol);
120 return(!BoundBox.IsOut(mybox2d));
124 //=======================================================================
127 //=======================================================================
129 Standard_Boolean Select3D_SensitiveBox::
130 Matches (const TColgp_Array1OfPnt2d& aPoly,
131 const Bnd_Box2d& aBox,
132 const Standard_Real aTol)
134 return(!aBox.IsOut(mybox2d));
138 //=======================================================================
141 //=======================================================================
143 void Select3D_SensitiveBox::Dump(Standard_OStream& S,const Standard_Boolean FullDump) const
145 S<<"\tSensitiveBox 3D :\n";
147 S<<"\t\tExisting Location"<<endl;
149 Standard_Real XMin,YMin,ZMin,XMax,YMax,ZMax;
150 mybox3d.Get(XMin,YMin,ZMin,XMax,YMax,ZMax);
152 S<<"\t\t PMin [ "<<XMin<<" , "<<YMin<<" , "<<ZMin<<" ]";
153 S<<"\t\t PMax [ "<<XMax<<" , "<<YMax<<" , "<<ZMax<<" ]"<<endl;
156 // S<<"\t\t\tOwner:"<<myOwnerId<<endl;
157 Select3D_SensitiveEntity::DumpBox(S,mybox2d);}
162 //=======================================================================
163 //function : ProjectBox
165 //=======================================================================
167 void Select3D_SensitiveBox::ProjectBox(const Select3D_Projector& aPrj,
172 Standard_Real XMin,YMin,ZMin,XMax,YMax,ZMax;
173 aBox.Get(XMin,YMin,ZMin,XMax,YMax,ZMax);
175 aPrj.Project(gp_Pnt(XMin,YMin,ZMin),curp2d);
176 mybox2d.Update(curp2d.X(),curp2d.Y());
177 aPrj.Project(gp_Pnt(XMax,YMin,ZMin),curp2d);
178 mybox2d.Update(curp2d.X(),curp2d.Y());
179 aPrj.Project(gp_Pnt(XMax,YMax,ZMin),curp2d);
180 mybox2d.Update(curp2d.X(),curp2d.Y());
181 aPrj.Project(gp_Pnt(XMin,YMax,ZMin),curp2d);
182 mybox2d.Update(curp2d.X(),curp2d.Y());
183 aPrj.Project(gp_Pnt(XMin,YMin,ZMax),curp2d);
184 mybox2d.Update(curp2d.X(),curp2d.Y());
185 aPrj.Project(gp_Pnt(XMax,YMin,ZMax),curp2d);
186 mybox2d.Update(curp2d.X(),curp2d.Y());
187 aPrj.Project(gp_Pnt(XMax,YMax,ZMax),curp2d);
188 mybox2d.Update(curp2d.X(),curp2d.Y());
189 aPrj.Project(gp_Pnt(XMin,YMax,ZMax),curp2d);
190 mybox2d.Update(curp2d.X(),curp2d.Y());
193 //=======================================================================
194 //function : ComputeDepth
196 //=======================================================================
198 Standard_Real Select3D_SensitiveBox::ComputeDepth(const gp_Lin& EyeLine) const
200 Standard_Real XMin,YMin,ZMin,XMax,YMax,ZMax;
201 mybox3d.Get(XMin,YMin,ZMin,XMax,YMax,ZMax);
202 gp_Pnt PMid((XMin+XMax)/2.,(YMin+YMax)/2.,(ZMin+ZMax)/2.);
203 return ElCLib::Parameter(EyeLine,PMid);