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