Warning, /include/opencascade/Intrv_Interval.lxx is written in an unsupported language. File is not indexed.
0001 // Created on: 1991-12-13
0002 // Created by: Christophe MARION
0003 // Copyright (c) 1991-1999 Matra Datavision
0004 // Copyright (c) 1999-2014 OPEN CASCADE SAS
0005 //
0006 // This file is part of Open CASCADE Technology software library.
0007 //
0008 // This library is free software; you can redistribute it and/or modify it under
0009 // the terms of the GNU Lesser General Public License version 2.1 as published
0010 // by the Free Software Foundation, with special exception defined in the file
0011 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
0012 // distribution for complete text of the license and disclaimer of any warranty.
0013 //
0014 // Alternatively, this file may be used under the terms of Open CASCADE
0015 // commercial license or contractual agreement.
0016
0017 // **-----------**** Other
0018 // ***-----* IsBefore
0019 // ***------------* IsJustBefore
0020 // ***-----------------* IsOverlappingAtStart
0021 // ***--------------------------* IsJustEnclosingAtEnd
0022 // ***-------------------------------------* IsEnclosing
0023 // ***----* IsJustOverlappingAtStart
0024 // ***-------------* IsSimilar
0025 // ***------------------------* IsJustEnclosingAtStart
0026 // ***-* IsInside
0027 // ***------* IsJustOverlappingAtEnd
0028 // ***-----------------* IsOverlappingAtEnd
0029 // ***--------* IsJustAfter
0030 // ***---* IsAfter
0031
0032 //=======================================================================
0033 //function : Start
0034 //purpose :
0035 //=======================================================================
0036
0037 inline Standard_Real Intrv_Interval::Start () const
0038 { return myStart; }
0039
0040 //=======================================================================
0041 //function : End
0042 //purpose :
0043 //=======================================================================
0044
0045 inline Standard_Real Intrv_Interval::End () const
0046 { return myEnd; }
0047
0048 //=======================================================================
0049 //function : TolStart
0050 //purpose :
0051 //=======================================================================
0052
0053 inline Standard_ShortReal Intrv_Interval::TolStart () const
0054 { return myTolStart; }
0055
0056 //=======================================================================
0057 //function : TolEnd
0058 //purpose :
0059 //=======================================================================
0060
0061 inline Standard_ShortReal Intrv_Interval::TolEnd () const
0062 { return myTolEnd; }
0063
0064 //=======================================================================
0065 //function : Bounds
0066 //purpose :
0067 //=======================================================================
0068
0069 inline void Intrv_Interval::Bounds
0070 (Standard_Real& Start, Standard_ShortReal& TolStart,
0071 Standard_Real& End , Standard_ShortReal& TolEnd) const
0072 {
0073 Start = myStart;
0074 TolStart = myTolStart;
0075 End = myEnd;
0076 TolEnd = myTolEnd;
0077 }
0078
0079 //=======================================================================
0080 //function : SetStart
0081 //purpose :
0082 //=======================================================================
0083
0084 inline void Intrv_Interval::SetStart
0085 (const Standard_Real Start, const Standard_ShortReal TolStart)
0086 {
0087 myStart = Start;
0088 myTolStart = TolStart;
0089 }
0090
0091 //=======================================================================
0092 //function : FuseAtStart
0093 //
0094 // ****+****--------------------> Old one
0095 // ****+****------------------------> New one to fuse
0096 // <<< <<<
0097 // ****+****------------------------> result
0098 //
0099 //=======================================================================
0100
0101 inline void Intrv_Interval::FuseAtStart
0102 (const Standard_Real Start, const Standard_ShortReal TolStart)
0103 {
0104 if (myStart != RealFirst()) {
0105 Standard_Real a = Min(myStart-myTolStart,Start-TolStart);
0106 Standard_Real b = Min(myStart+myTolStart,Start+TolStart);
0107 myStart = (a+b)/2;
0108 myTolStart = (Standard_ShortReal)(b-a)/2;
0109 }
0110 }
0111
0112 //=======================================================================
0113 //function : CutAtStart
0114 //
0115 // ****+****-----------> Old one
0116 // <----------**+** Tool for cutting
0117 // >>> >>>
0118 // ****+****-----------> result
0119 //
0120 //=======================================================================
0121
0122 inline void Intrv_Interval::CutAtStart
0123 (const Standard_Real Start, const Standard_ShortReal TolStart)
0124 {
0125 if (myStart != RealFirst()) {
0126 Standard_Real a = Max(myStart-myTolStart,Start-TolStart);
0127 Standard_Real b = Max(myStart+myTolStart,Start+TolStart);
0128 myStart = (a+b)/2;
0129 myTolStart = (Standard_ShortReal)(b-a)/2;
0130 }
0131 }
0132
0133 //=======================================================================
0134 //function : SetEnd
0135 //purpose :
0136 //=======================================================================
0137
0138 inline void Intrv_Interval::SetEnd
0139 (const Standard_Real End, const Standard_ShortReal TolEnd)
0140 {
0141 myEnd = End;
0142 myTolEnd = TolEnd;
0143 }
0144
0145 //=======================================================================
0146 //function : FuseAtEnd
0147 //
0148 // <---------------------****+**** Old one
0149 // <-----------------**+** New one to fuse
0150 // >>> >>>
0151 // <---------------------****+**** result
0152 //
0153 //=======================================================================
0154
0155 inline void Intrv_Interval::FuseAtEnd
0156 (const Standard_Real End, const Standard_ShortReal TolEnd)
0157 {
0158 if (myEnd != RealLast()) {
0159 Standard_Real a = Max(myEnd-myTolEnd,End-TolEnd);
0160 Standard_Real b = Max(myEnd+myTolEnd,End+TolEnd);
0161 myEnd = (a+b)/2;
0162 myTolEnd = (Standard_ShortReal)(b-a)/2;
0163 }
0164 }
0165
0166 //=======================================================================
0167 //function : CutAtEnd
0168 //
0169 // <-----****+**** Old one
0170 // **+**------> Tool for cutting
0171 // <<< <<<
0172 // <-----****+**** result
0173 //
0174 //=======================================================================
0175
0176 inline void Intrv_Interval::CutAtEnd
0177 (const Standard_Real End, const Standard_ShortReal TolEnd)
0178 {
0179 if (myEnd != RealLast()) {
0180 Standard_Real a = Min(myEnd-myTolEnd,End-TolEnd);
0181 Standard_Real b = Min(myEnd+myTolEnd,End+TolEnd);
0182 myEnd = (a+b)/2;
0183 myTolEnd = (Standard_ShortReal)(b-a)/2;
0184 }
0185 }
0186
0187 //=======================================================================
0188 //function : AreFused
0189 //purpose :
0190 //=======================================================================
0191
0192 inline Standard_Boolean AreFused
0193 (const Standard_Real c1,const Standard_ShortReal t1,
0194 const Standard_Real c2,const Standard_ShortReal t2)
0195 { return t1 + t2 >= Abs (c1 - c2); }
0196
0197 //=======================================================================
0198 //function : IsProbablyEmpty
0199 //purpose :
0200 //=======================================================================
0201
0202 inline Standard_Boolean Intrv_Interval::IsProbablyEmpty () const
0203 { return AreFused (myStart, myTolStart, myEnd, myTolEnd); }
0204
0205 //=======================================================================
0206 // **-----------**** Other
0207 // ***-----* IsBefore
0208 //=======================================================================
0209
0210 inline Standard_Boolean Intrv_Interval::IsBefore
0211 (const Intrv_Interval& Other) const
0212 { return myTolEnd + Other.myTolStart < Other.myStart - myEnd; }
0213
0214 //=======================================================================
0215 // **-----------**** Other
0216 // ***---* IsAfter
0217 //=======================================================================
0218
0219 inline Standard_Boolean Intrv_Interval::IsAfter
0220 (const Intrv_Interval& Other) const
0221 { return myTolStart + Other.myTolEnd < myStart - Other.myEnd; }
0222
0223 //=======================================================================
0224 // **-----------**** Other
0225 // ***-* IsInside
0226 //=======================================================================
0227
0228 inline Standard_Boolean Intrv_Interval::IsInside
0229 (const Intrv_Interval& Other) const
0230 { return myTolStart + Other.myTolStart < myStart - Other.myStart &&
0231 myTolEnd + Other.myTolEnd < Other.myEnd - myEnd; }
0232
0233 //=======================================================================
0234 // **-----------**** Other
0235 // ***-------------------------------------* IsEnclosing
0236 //=======================================================================
0237
0238 inline Standard_Boolean Intrv_Interval::IsEnclosing
0239 (const Intrv_Interval& Other) const
0240 { return myTolStart + Other.myTolStart < Other.myStart - myStart &&
0241 myTolEnd + Other.myTolEnd < myEnd - Other.myEnd; }
0242
0243 //=======================================================================
0244 // **-----------**** Other
0245 // ***------------------------* IsJustEnclosingAtStart
0246 //=======================================================================
0247
0248 inline Standard_Boolean Intrv_Interval::IsJustEnclosingAtStart
0249 (const Intrv_Interval& Other) const
0250 { return AreFused (myStart, myTolStart, Other.myStart, Other.myTolStart) &&
0251 myTolEnd + Other.myTolEnd < myEnd - Other.myEnd; }
0252
0253 //=======================================================================
0254 // **-----------**** Other
0255 // ***--------------------------* IsJustEnclosingAtEnd
0256 //=======================================================================
0257
0258 inline Standard_Boolean Intrv_Interval::IsJustEnclosingAtEnd
0259 (const Intrv_Interval& Other) const
0260 { return myTolStart + Other.myTolStart < Other.myStart - myStart &&
0261 AreFused (Other.myEnd, Other.myTolEnd, myEnd, myTolEnd); }
0262
0263 //=======================================================================
0264 // **-----------**** Other
0265 // ***------------* IsJustBefore
0266 //=======================================================================
0267
0268 inline Standard_Boolean Intrv_Interval::IsJustBefore
0269 (const Intrv_Interval& Other) const
0270 { return AreFused (myEnd, myTolEnd, Other.myStart, Other.myTolStart); }
0271
0272 //=======================================================================
0273 // **-----------**** Other
0274 // ***--------* IsJustAfter
0275 //=======================================================================
0276
0277 inline Standard_Boolean Intrv_Interval::IsJustAfter
0278 (const Intrv_Interval& Other) const
0279 { return AreFused (Other.myEnd, Other.myTolEnd, myStart, myTolStart); }
0280
0281 //=======================================================================
0282 // **-----------**** Other
0283 // ***-----------------* IsOverlappingAtStart
0284 //=======================================================================
0285
0286 inline Standard_Boolean Intrv_Interval::IsOverlappingAtStart
0287 (const Intrv_Interval& Other) const
0288 { return myTolStart + Other.myTolStart < Other.myStart - myStart &&
0289 myTolEnd + Other.myTolStart < myEnd - Other.myStart &&
0290 myTolEnd + Other.myTolEnd < Other.myEnd - myEnd ; }
0291
0292 //=======================================================================
0293 // **-----------**** Other
0294 // ***-----------------* IsOverlappingAtEnd
0295 //=======================================================================
0296
0297 inline Standard_Boolean Intrv_Interval::IsOverlappingAtEnd
0298 (const Intrv_Interval& Other) const
0299 { return myTolStart + Other.myTolStart < myStart - Other.myStart &&
0300 myTolStart + Other.myTolEnd < Other.myEnd - myStart &&
0301 myTolEnd + Other.myTolEnd < myEnd - Other.myEnd; }
0302
0303 //=======================================================================
0304 // **-----------**** Other
0305 // ***----* IsJustOverlappingAtStart
0306 //=======================================================================
0307
0308 inline Standard_Boolean Intrv_Interval::IsJustOverlappingAtStart
0309 (const Intrv_Interval& Other) const
0310 { return AreFused (myStart, myTolStart, Other.myStart, Other.myTolStart) &&
0311 myTolEnd + Other.myTolEnd < Other.myEnd - myEnd; }
0312
0313 //=======================================================================
0314 // **-----------**** Other
0315 // ***------* IsJustOverlappingAtEnd
0316 //=======================================================================
0317
0318 inline Standard_Boolean Intrv_Interval::IsJustOverlappingAtEnd
0319 (const Intrv_Interval& Other) const
0320 { return myTolStart + Other.myTolStart < myStart - Other.myStart &&
0321 AreFused (Other.myEnd, Other.myTolEnd, myEnd, myTolEnd); }
0322
0323 //=======================================================================
0324 // **-----------**** Other
0325 // ***-------------* IsSimilar
0326 //=======================================================================
0327
0328 inline Standard_Boolean Intrv_Interval::IsSimilar
0329 (const Intrv_Interval& Other) const
0330 {
0331 Standard_Boolean b1,b2;
0332 b1 = AreFused (myStart,myTolStart,Other.myStart,Other.myTolStart);
0333 b2 = AreFused (myEnd ,myTolEnd ,Other.myEnd ,Other.myTolEnd);
0334 return b1 && b2;
0335 }
0336