Back to home page

EIC code displayed by LXR

 
 

    


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