0026922: Huge performance issue writing data to the output stream
[occt.git] / src / IntRes2d / IntRes2d_Transition.hxx
CommitLineData
42cf5bc1 1// Created on: 1992-04-03
2// Created by: Laurent BUCHARD
3// Copyright (c) 1992-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#ifndef _IntRes2d_Transition_HeaderFile
18#define _IntRes2d_Transition_HeaderFile
19
20#include <Standard.hxx>
21#include <Standard_DefineAlloc.hxx>
22#include <Standard_Handle.hxx>
23
24#include <Standard_Boolean.hxx>
25#include <IntRes2d_Position.hxx>
26#include <IntRes2d_TypeTrans.hxx>
27#include <IntRes2d_Situation.hxx>
28class Standard_DomainError;
29
30
31//! Definition of the type of transition near an
32//! intersection point between two curves. The transition
33//! is either a "true transition", which means that one of
34//! the curves goes inside or outside the area defined by
35//! the other curve near the intersection, or a "touch
36//! transition" which means that the first curve does not
37//! cross the other one, or an "undecided" transition,
38//! which means that the curves are superposed.
39class IntRes2d_Transition
40{
41public:
42
43 DEFINE_STANDARD_ALLOC
44
45
46 //! Empty constructor.
47 Standard_EXPORT IntRes2d_Transition();
48
49 //! Creates an IN or OUT transition.
50 IntRes2d_Transition(const Standard_Boolean Tangent, const IntRes2d_Position Pos, const IntRes2d_TypeTrans Type);
51
52 //! Creates a TOUCH transition.
53 IntRes2d_Transition(const Standard_Boolean Tangent, const IntRes2d_Position Pos, const IntRes2d_Situation Situ, const Standard_Boolean Oppos);
54
55 //! Creates an UNDECIDED transition.
56 IntRes2d_Transition(const IntRes2d_Position Pos);
57
58 //! Sets the values of an IN or OUT transition.
59 void SetValue (const Standard_Boolean Tangent, const IntRes2d_Position Pos, const IntRes2d_TypeTrans Type);
60
61 //! Sets the values of a TOUCH transition.
62 void SetValue (const Standard_Boolean Tangent, const IntRes2d_Position Pos, const IntRes2d_Situation Situ, const Standard_Boolean Oppos);
63
64 //! Sets the values of an UNDECIDED transition.
65 void SetValue (const IntRes2d_Position Pos);
66
67 //! Sets the value of the position.
68 void SetPosition (const IntRes2d_Position Pos);
69
70 //! Indicates if the intersection is at the beginning
71 //! (IntRes2d_Head), at the end (IntRes2d_End), or in
72 //! the middle (IntRes2d_Middle) of the curve.
73 IntRes2d_Position PositionOnCurve() const;
74
75 //! Returns the type of transition at the intersection.
76 //! It may be IN or OUT or TOUCH, or UNDECIDED if the
77 //! two first derivatives are not enough to give
78 //! the tangent to one of the two curves.
79 IntRes2d_TypeTrans TransitionType() const;
80
81 //! Returns TRUE when the 2 curves are tangent at the
82 //! intersection point.
83 //! Theexception DomainError is raised if the type of
84 //! transition is UNDECIDED.
85 Standard_Boolean IsTangent() const;
86
87 //! returns a significant value if TransitionType returns
88 //! TOUCH. In this case, the function returns :
89 //! INSIDE when the curve remains inside the other one,
90 //! OUTSIDE when it remains outside the other one,
91 //! UNKNOWN when the calculus, based on the second derivatives
92 //! cannot give the result.
93 //! If TransitionType returns IN or OUT or UNDECIDED, the
94 //! exception DomainError is raised.
95 IntRes2d_Situation Situation() const;
96
97 //! returns a significant value if TransitionType
98 //! returns TOUCH. In this case, the function returns
99 //! true when the 2 curves locally define two
100 //! different parts of the space. If TransitionType
101 //! returns IN or OUT or UNDECIDED, the exception
102 //! DomainError is raised.
103 Standard_Boolean IsOpposite() const;
104
105
106
107
108protected:
109
110
111
112
113
114private:
115
116
117
118 Standard_Boolean tangent;
119 IntRes2d_Position posit;
120 IntRes2d_TypeTrans typetra;
121 IntRes2d_Situation situat;
122 Standard_Boolean oppos;
123
124
125};
126
127
128#include <IntRes2d_Transition.lxx>
129
130
131
132
133
134#endif // _IntRes2d_Transition_HeaderFile