Integration of OCCT 6.5.0 from SVN
[occt.git] / src / TopCnx / TopCnx_EdgeFaceTransition.cxx
1 // File:        TopCnx_EdgeFaceTransition.cxx
2 // Created:     Wed Aug 12 17:08:45 1992
3 // Author:      Remi LEQUETTE
4 //              <rle@phylox>
5
6
7 #include <TopCnx_EdgeFaceTransition.ixx>
8
9
10 //=======================================================================
11 //function : TopCnx_EdgeFaceTransition
12 //purpose  : 
13 //=======================================================================
14
15 TopCnx_EdgeFaceTransition::TopCnx_EdgeFaceTransition() :
16        nbBoundForward(0),
17        nbBoundReversed(0)
18 {
19 }
20
21 //=======================================================================
22 //function : Reset
23 //purpose  : 
24 //=======================================================================
25
26 void  TopCnx_EdgeFaceTransition::Reset(const gp_Dir& Tgt,
27                                        const gp_Dir& Norm,
28                                        const Standard_Real Curv)
29 {
30   myCurveTransition.Reset(Tgt,Norm,Curv);
31   nbBoundForward = nbBoundReversed = 0;
32 }
33
34 //=======================================================================
35 //function : Reset
36 //purpose  : 
37 //=======================================================================
38
39 void  TopCnx_EdgeFaceTransition::Reset(const gp_Dir& Tgt)
40 {
41   myCurveTransition.Reset(Tgt);
42   nbBoundForward = nbBoundReversed = 0;
43 }
44
45 //=======================================================================
46 //function : AddInterference
47 //purpose  : 
48 //=======================================================================
49
50 void  TopCnx_EdgeFaceTransition::AddInterference(const Standard_Real Tole,
51                                                  const gp_Dir& Tang,
52                                                  const gp_Dir& Norm,
53                                                  const Standard_Real Curv, 
54                                                  const TopAbs_Orientation Or,
55                                                  const TopAbs_Orientation Tr,
56                                                  const TopAbs_Orientation BTr)
57 {
58   myCurveTransition.Compare(Tole,Tang,Norm,Curv,Tr,Or);
59   switch (BTr) {
60     
61   case TopAbs_FORWARD :
62     nbBoundForward++;
63     break;
64
65   case TopAbs_REVERSED :
66     nbBoundReversed++;
67     break;
68
69   case TopAbs_INTERNAL :
70   case TopAbs_EXTERNAL :
71     break;
72   }
73 }
74
75 //=======================================================================
76 //function : Transition
77 //purpose  : 
78 //=======================================================================
79
80 TopAbs_Orientation  TopCnx_EdgeFaceTransition::Transition()const 
81 {
82   TopAbs_State Bef = myCurveTransition.StateBefore();
83   TopAbs_State Aft = myCurveTransition.StateAfter();
84   if (Bef == TopAbs_IN) {
85     if      (Aft == TopAbs_IN ) 
86       return TopAbs_INTERNAL;
87     else if (Aft == TopAbs_OUT) 
88       return TopAbs_REVERSED;
89     else
90       cout << "\n*** Complex Transition : unprocessed state"<<endl;
91   }
92   else if (Bef == TopAbs_OUT) {
93     if      (Aft == TopAbs_IN ) 
94       return TopAbs_FORWARD;
95     else if (Aft == TopAbs_OUT) 
96       return TopAbs_EXTERNAL;
97     else 
98       cout << "\n*** Complex Transition : unprocessed state"<<endl;
99   }
100   else 
101     cout << "\n*** Complex Transition : unprocessed state"<<endl;
102   return TopAbs_INTERNAL;
103 }
104
105 //=======================================================================
106 //function : BoundaryTransition
107 //purpose  : 
108 //=======================================================================
109
110 TopAbs_Orientation  TopCnx_EdgeFaceTransition::BoundaryTransition()const 
111 {
112   if (nbBoundForward > nbBoundReversed) 
113     return TopAbs_FORWARD;
114   else if (nbBoundForward < nbBoundReversed) 
115     return TopAbs_REVERSED;
116   else if ((nbBoundReversed % 2) == 0)
117     return TopAbs_EXTERNAL;
118   else
119     return TopAbs_EXTERNAL;
120 }
121
122