blob: 481ca9c052d8a71ea7d64975db419c406f770aa2 (
plain)
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
|
// File: Intrv_Interval.cxx
// Created: Fri Dec 13 14:56:47 1991
// Author: Christophe MARION
// <cma@sdsun1>
#include <Intrv_Interval.ixx>
// **-----------**** Other
// ***-----* Before
// ***------------* JustBefore
// ***-----------------* OverlappingAtStart
// ***--------------------------* JustEnclosingAtEnd
// ***-------------------------------------* Enclosing
// ***----* JustOverlappingAtStart
// ***-------------* Similar
// ***------------------------* JustEnclosingAtStart
// ***-* Inside
// ***------* JustOverlappingAtEnd
// ***-----------------* OverlappingAtEnd
// ***--------* JustAfter
// ***---* After
//=======================================================================
//function : Intrv_Interval
//purpose :
//=======================================================================
Intrv_Interval::Intrv_Interval
() : myStart(RealFirst()), myEnd (RealLast ())
{
myTolStart = (Standard_ShortReal)Epsilon(RealFirst());
myTolEnd = (Standard_ShortReal)Epsilon(RealLast ());
}
//=======================================================================
//function : Intrv_Interval
//purpose :
//=======================================================================
Intrv_Interval::Intrv_Interval
(const Standard_Real Start, const Standard_Real End) :
myStart(Start), myEnd (End)
{
myTolStart = (Standard_ShortReal)Epsilon(myStart);
myTolEnd = (Standard_ShortReal)Epsilon(myEnd);
}
//=======================================================================
//function : Intrv_Interval
//purpose :
//=======================================================================
Intrv_Interval::Intrv_Interval
(const Standard_Real Start, const Standard_ShortReal TolStart,
const Standard_Real End , const Standard_ShortReal TolEnd) :
myStart(Start), myEnd (End),
myTolStart(TolStart),myTolEnd (TolEnd)
{
Standard_ShortReal epsStart = (Standard_ShortReal)Epsilon(myStart);
Standard_ShortReal epsEnd = (Standard_ShortReal)Epsilon(myEnd);
if (myTolStart < epsStart) myTolStart = epsStart;
if (myTolEnd < epsEnd ) myTolEnd = epsEnd;
}
//=======================================================================
//function : Position
//purpose :
//=======================================================================
Intrv_Position Intrv_Interval::Position (const Intrv_Interval& Other) const
{
Standard_Real mySMin = myStart - myTolStart;
Standard_Real mySMax = myStart + myTolStart;
Standard_Real myEMin = myEnd - myTolEnd ;
Standard_Real myEMax = myEnd + myTolEnd ;
Standard_Real otSMin = Other.myStart - Other.myTolStart;
Standard_Real otSMax = Other.myStart + Other.myTolStart;
Standard_Real otEMin = Other.myEnd - Other.myTolEnd ;
Standard_Real otEMax = Other.myEnd + Other.myTolEnd ;
Intrv_Position P;
if ( mySMax < otSMin ) {
if ( myEMax < otSMin ) P = Intrv_Before;
else if ( otSMax >= myEMin ) P = Intrv_JustBefore;
else if ( myEMax < otEMin ) P = Intrv_OverlappingAtStart;
else if ( otEMax >= myEMin ) P = Intrv_JustEnclosingAtEnd;
else P = Intrv_Enclosing;
}
else if ( otSMax >= mySMin ) {
if ( myEMax < otEMin ) P = Intrv_JustOverlappingAtStart;
else if ( otEMax >= myEMin ) P = Intrv_Similar;
else P = Intrv_JustEnclosingAtStart;
}
else if ( mySMax < otEMin ) {
if ( myEMax < otEMin ) P = Intrv_Inside;
else if ( otEMax >= myEMin ) P = Intrv_JustOverlappingAtEnd;
else P = Intrv_OverlappingAtEnd;
}
else if ( otEMax >= mySMin ) P = Intrv_JustAfter;
else P = Intrv_After;
return P;
}
|