1// Created on: 1991-12-13 2// Created by: Christophe MARION 3// Copyright (c) 1991-1999 Matra Datavision 4// Copyright (c) 1999-2014 OPEN CASCADE SAS 5// 6// This file is part of Open CASCADE Technology software library. 7// 8// This library is free software; you can redistribute it and/or modify it under 9// the terms of the GNU Lesser General Public License version 2.1 as published 10// by the Free Software Foundation, with special exception defined in the file 11// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT 12// distribution for complete text of the license and disclaimer of any warranty. 13// 14// Alternatively, this file may be used under the terms of Open CASCADE 15// commercial license or contractual agreement. 16 17// **-----------**** Other 18// ***-----* IsBefore 19// ***------------* IsJustBefore 20// ***-----------------* IsOverlappingAtStart 21// ***--------------------------* IsJustEnclosingAtEnd 22// ***-------------------------------------* IsEnclosing 23// ***----* IsJustOverlappingAtStart 24// ***-------------* IsSimilar 25// ***------------------------* IsJustEnclosingAtStart 26// ***-* IsInside 27// ***------* IsJustOverlappingAtEnd 28// ***-----------------* IsOverlappingAtEnd 29// ***--------* IsJustAfter 30// ***---* IsAfter 31 32//======================================================================= 33//function : Start 34//purpose : 35//======================================================================= 36 37inline Standard_Real Intrv_Interval::Start () const 38{ return myStart; } 39 40//======================================================================= 41//function : End 42//purpose : 43//======================================================================= 44 45inline Standard_Real Intrv_Interval::End () const 46{ return myEnd; } 47 48//======================================================================= 49//function : TolStart 50//purpose : 51//======================================================================= 52 53inline Standard_ShortReal Intrv_Interval::TolStart () const 54{ return myTolStart; } 55 56//======================================================================= 57//function : TolEnd 58//purpose : 59//======================================================================= 60 61inline Standard_ShortReal Intrv_Interval::TolEnd () const 62{ return myTolEnd; } 63 64//======================================================================= 65//function : Bounds 66//purpose : 67//======================================================================= 68 69inline void Intrv_Interval::Bounds 70 (Standard_Real& Start, Standard_ShortReal& TolStart, 71 Standard_Real& End , Standard_ShortReal& TolEnd) const 72{ 73 Start = myStart; 74 TolStart = myTolStart; 75 End = myEnd; 76 TolEnd = myTolEnd; 77} 78 79//======================================================================= 80//function : SetStart 81//purpose : 82//======================================================================= 83 84inline void Intrv_Interval::SetStart 85 (const Standard_Real Start, const Standard_ShortReal TolStart) 86{ 87 myStart = Start; 88 myTolStart = TolStart; 89} 90 91//======================================================================= 92//function : FuseAtStart 93// 94// ****+****--------------------> Old one 95// ****+****------------------------> New one to fuse 96// <<< <<< 97// ****+****------------------------> result 98// 99//======================================================================= 100 101inline void Intrv_Interval::FuseAtStart 102 (const Standard_Real Start, const Standard_ShortReal TolStart) 103{ 104 if (myStart != RealFirst()) { 105 Standard_Real a = Min(myStart-myTolStart,Start-TolStart); 106 Standard_Real b = Min(myStart+myTolStart,Start+TolStart); 107 myStart = (a+b)/2; 108 myTolStart = (Standard_ShortReal)(b-a)/2; 109 } 110} 111 112//======================================================================= 113//function : CutAtStart 114// 115// ****+****-----------> Old one 116// <----------**+** Tool for cutting 117// >>> >>> 118// ****+****-----------> result 119// 120//======================================================================= 121 122inline void Intrv_Interval::CutAtStart 123 (const Standard_Real Start, const Standard_ShortReal TolStart) 124{ 125 if (myStart != RealFirst()) { 126 Standard_Real a = Max(myStart-myTolStart,Start-TolStart); 127 Standard_Real b = Max(myStart+myTolStart,Start+TolStart); 128 myStart = (a+b)/2; 129 myTolStart = (Standard_ShortReal)(b-a)/2; 130 } 131} 132 133//======================================================================= 134//function : SetEnd 135//purpose : 136//======================================================================= 137 138inline void Intrv_Interval::SetEnd 139 (const Standard_Real End, const Standard_ShortReal TolEnd) 140{ 141 myEnd = End; 142 myTolEnd = TolEnd; 143} 144 145//======================================================================= 146//function : FuseAtEnd 147// 148// <---------------------****+**** Old one 149// <-----------------**+** New one to fuse 150// >>> >>> 151// <---------------------****+**** result 152// 153//======================================================================= 154 155inline void Intrv_Interval::FuseAtEnd 156 (const Standard_Real End, const Standard_ShortReal TolEnd) 157{ 158 if (myEnd != RealLast()) { 159 Standard_Real a = Max(myEnd-myTolEnd,End-TolEnd); 160 Standard_Real b = Max(myEnd+myTolEnd,End+TolEnd); 161 myEnd = (a+b)/2; 162 myTolEnd = (Standard_ShortReal)(b-a)/2; 163 } 164} 165 166//======================================================================= 167//function : CutAtEnd 168// 169// <-----****+**** Old one 170// **+**------> Tool for cutting 171// <<< <<< 172// <-----****+**** result 173// 174//======================================================================= 175 176inline void Intrv_Interval::CutAtEnd 177 (const Standard_Real End, const Standard_ShortReal TolEnd) 178{ 179 if (myEnd != RealLast()) { 180 Standard_Real a = Min(myEnd-myTolEnd,End-TolEnd); 181 Standard_Real b = Min(myEnd+myTolEnd,End+TolEnd); 182 myEnd = (a+b)/2; 183 myTolEnd = (Standard_ShortReal)(b-a)/2; 184 } 185} 186 187//======================================================================= 188//function : AreFused 189//purpose : 190//======================================================================= 191 192inline Standard_Boolean AreFused 193 (const Standard_Real c1,const Standard_ShortReal t1, 194 const Standard_Real c2,const Standard_ShortReal t2) 195{ return t1 + t2 >= Abs (c1 - c2); } 196 197//======================================================================= 198//function : IsProbablyEmpty 199//purpose : 200//======================================================================= 201 202inline Standard_Boolean Intrv_Interval::IsProbablyEmpty () const 203{ return AreFused (myStart, myTolStart, myEnd, myTolEnd); } 204 205//======================================================================= 206// **-----------**** Other 207// ***-----* IsBefore 208//======================================================================= 209 210inline Standard_Boolean Intrv_Interval::IsBefore 211 (const Intrv_Interval& Other) const 212{ return myTolEnd + Other.myTolStart < Other.myStart - myEnd; } 213 214//======================================================================= 215// **-----------**** Other 216// ***---* IsAfter 217//======================================================================= 218 219inline Standard_Boolean Intrv_Interval::IsAfter 220 (const Intrv_Interval& Other) const 221{ return myTolStart + Other.myTolEnd < myStart - Other.myEnd; } 222 223//======================================================================= 224// **-----------**** Other 225// ***-* IsInside 226//======================================================================= 227 228inline Standard_Boolean Intrv_Interval::IsInside 229 (const Intrv_Interval& Other) const 230{ return myTolStart + Other.myTolStart < myStart - Other.myStart && 231 myTolEnd + Other.myTolEnd < Other.myEnd - myEnd; } 232 233//======================================================================= 234// **-----------**** Other 235// ***-------------------------------------* IsEnclosing 236//======================================================================= 237 238inline Standard_Boolean Intrv_Interval::IsEnclosing 239 (const Intrv_Interval& Other) const 240{ return myTolStart + Other.myTolStart < Other.myStart - myStart && 241 myTolEnd + Other.myTolEnd < myEnd - Other.myEnd; } 242 243//======================================================================= 244// **-----------**** Other 245// ***------------------------* IsJustEnclosingAtStart 246//======================================================================= 247 248inline Standard_Boolean Intrv_Interval::IsJustEnclosingAtStart 249 (const Intrv_Interval& Other) const 250{ return AreFused (myStart, myTolStart, Other.myStart, Other.myTolStart) && 251 myTolEnd + Other.myTolEnd < myEnd - Other.myEnd; } 252 253//======================================================================= 254// **-----------**** Other 255// ***--------------------------* IsJustEnclosingAtEnd 256//======================================================================= 257 258inline Standard_Boolean Intrv_Interval::IsJustEnclosingAtEnd 259 (const Intrv_Interval& Other) const 260{ return myTolStart + Other.myTolStart < Other.myStart - myStart && 261 AreFused (Other.myEnd, Other.myTolEnd, myEnd, myTolEnd); } 262 263//======================================================================= 264// **-----------**** Other 265// ***------------* IsJustBefore 266//======================================================================= 267 268inline Standard_Boolean Intrv_Interval::IsJustBefore 269 (const Intrv_Interval& Other) const 270{ return AreFused (myEnd, myTolEnd, Other.myStart, Other.myTolStart); } 271 272//======================================================================= 273// **-----------**** Other 274// ***--------* IsJustAfter 275//======================================================================= 276 277inline Standard_Boolean Intrv_Interval::IsJustAfter 278 (const Intrv_Interval& Other) const 279{ return AreFused (Other.myEnd, Other.myTolEnd, myStart, myTolStart); } 280 281//======================================================================= 282// **-----------**** Other 283// ***-----------------* IsOverlappingAtStart 284//======================================================================= 285 286inline Standard_Boolean Intrv_Interval::IsOverlappingAtStart 287 (const Intrv_Interval& Other) const 288{ return myTolStart + Other.myTolStart < Other.myStart - myStart && 289 myTolEnd + Other.myTolStart < myEnd - Other.myStart && 290 myTolEnd + Other.myTolEnd < Other.myEnd - myEnd ; } 291 292//======================================================================= 293// **-----------**** Other 294// ***-----------------* IsOverlappingAtEnd 295//======================================================================= 296 297inline Standard_Boolean Intrv_Interval::IsOverlappingAtEnd 298 (const Intrv_Interval& Other) const 299{ return myTolStart + Other.myTolStart < myStart - Other.myStart && 300 myTolStart + Other.myTolEnd < Other.myEnd - myStart && 301 myTolEnd + Other.myTolEnd < myEnd - Other.myEnd; } 302 303//======================================================================= 304// **-----------**** Other 305// ***----* IsJustOverlappingAtStart 306//======================================================================= 307 308inline Standard_Boolean Intrv_Interval::IsJustOverlappingAtStart 309 (const Intrv_Interval& Other) const 310{ return AreFused (myStart, myTolStart, Other.myStart, Other.myTolStart) && 311 myTolEnd + Other.myTolEnd < Other.myEnd - myEnd; } 312 313//======================================================================= 314// **-----------**** Other 315// ***------* IsJustOverlappingAtEnd 316//======================================================================= 317 318inline Standard_Boolean Intrv_Interval::IsJustOverlappingAtEnd 319 (const Intrv_Interval& Other) const 320{ return myTolStart + Other.myTolStart < myStart - Other.myStart && 321 AreFused (Other.myEnd, Other.myTolEnd, myEnd, myTolEnd); } 322 323//======================================================================= 324// **-----------**** Other 325// ***-------------* IsSimilar 326//======================================================================= 327 328inline Standard_Boolean Intrv_Interval::IsSimilar 329 (const Intrv_Interval& Other) const 330{ 331 Standard_Boolean b1,b2; 332 b1 = AreFused (myStart,myTolStart,Other.myStart,Other.myTolStart); 333 b2 = AreFused (myEnd ,myTolEnd ,Other.myEnd ,Other.myTolEnd); 334 return b1 && b2; 335} 336 337