OCC22357 Hidden face selection
[occt.git] / src / Select3D / Select3D_SensitivePoly.cxx
1 #include <Select3D_SensitivePoly.ixx>
2 #include <gp_Pnt2d.hxx>
3 #include <gp_Pnt.hxx>
4 #include <Select3D_Pnt.hxx>
5 #include <Select3D_Pnt2d.hxx>
6 #include <Select3D_Box2d.hxx>
7 #include <TopLoc_Location.hxx>
8
9
10 //==================================================
11 // Function: faire disparaitre ce constructeur a la prochaine version...
12 // Purpose : simplement garde pour ne pas perturber la version update
13 //==================================================
14
15 Select3D_SensitivePoly::
16 Select3D_SensitivePoly(const Handle(SelectBasics_EntityOwner)& OwnerId,
17                const TColgp_Array1OfPnt& ThePoints):
18 Select3D_SensitiveEntity(OwnerId)
19 {
20   mynbpoints = ThePoints.Upper()-ThePoints.Lower()+1;
21   mypolyg3d = new Select3D_Pnt[mynbpoints];
22   mypolyg2d = new Select3D_Pnt2d[mynbpoints];
23   for(Standard_Integer i=0;i<mynbpoints;i++)
24     ((Select3D_Pnt*)mypolyg3d)[i] = ThePoints.Value(ThePoints.Lower()+i); 
25 }
26
27 //==================================================
28 // Function: 
29 // Purpose :
30 //==================================================
31
32 Select3D_SensitivePoly::
33 Select3D_SensitivePoly(const Handle(SelectBasics_EntityOwner)& OwnerId,
34                const Handle(TColgp_HArray1OfPnt)& ThePoints):
35 Select3D_SensitiveEntity(OwnerId)
36 {
37   mynbpoints = ThePoints->Upper()-ThePoints->Lower()+1;
38   mypolyg3d = new Select3D_Pnt[mynbpoints];
39   mypolyg2d = new Select3D_Pnt2d[mynbpoints];
40   for(Standard_Integer i=0;i<mynbpoints;i++)
41     ((Select3D_Pnt*)mypolyg3d)[i] = ThePoints->Value(ThePoints->Lower()+i); 
42 }
43
44 //==================================================
45 // Function: 
46 // Purpose :
47 //==================================================
48
49 Select3D_SensitivePoly::
50 Select3D_SensitivePoly(const Handle(SelectBasics_EntityOwner)& OwnerId, 
51              const Standard_Integer NbPoints):
52 Select3D_SensitiveEntity(OwnerId)
53 {
54   mynbpoints = NbPoints;
55   mypolyg3d = new Select3D_Pnt[mynbpoints];
56   mypolyg2d = new Select3D_Pnt2d[mynbpoints];
57 }
58
59 //==================================================
60 // Function: 
61 // Purpose :
62 //==================================================
63
64 void Select3D_SensitivePoly::Project(const Handle(Select3D_Projector)& aProj)
65 {
66   Select3D_SensitiveEntity::Project(aProj); // to set the field last proj...
67   mybox2d.SetVoid();
68
69   Standard_Boolean hasloc = HasLocation();
70   gp_Pnt2d aPnt2d;
71   for(Standard_Integer i=0;i<mynbpoints;i++)
72     {
73       gp_Pnt aPnt(((Select3D_Pnt*)mypolyg3d)[i].x, ((Select3D_Pnt*)mypolyg3d)[i].y, ((Select3D_Pnt*)mypolyg3d)[i].z);
74       if (hasloc)
75       {
76         aProj->Project(aPnt.Transformed(Location().Transformation()),aPnt2d);
77       }
78       else
79       {
80         aProj->Project(aPnt,aPnt2d);
81       }
82       mybox2d.Update(aPnt2d);
83       ((Select3D_Pnt2d*)mypolyg2d)[i] = aPnt2d;
84     }
85 }
86
87 //==================================================
88 // Function: 
89 // Purpose :
90 //==================================================
91 void Select3D_SensitivePoly
92 ::Areas(SelectBasics_ListOfBox2d& aSeq)
93 {
94   aSeq.Append(mybox2d);
95 }
96
97 //==================================================
98 // Function: 
99 // Purpose :
100 //==================================================
101 void Select3D_SensitivePoly::Destroy() 
102 {
103   delete[] (Select3D_Pnt*)mypolyg3d;
104   delete[] (Select3D_Pnt2d*)mypolyg2d;
105 }
106