0027870: Modeling - refactoring of HLR algorithms
[occt.git] / src / HLRBRep / HLRBRep_EdgeData.hxx
1 // Created on: 1997-04-17
2 // Created by: Christophe MARION
3 // Copyright (c) 1997-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 _HLRBRep_EdgeData_HeaderFile
18 #define _HLRBRep_EdgeData_HeaderFile
19
20 #include <HLRAlgo_WiresBlock.hxx>
21
22 #include <Standard.hxx>
23 #include <Standard_DefineAlloc.hxx>
24 #include <Standard_Handle.hxx>
25
26 #include <Standard_Boolean.hxx>
27 #include <Standard_Integer.hxx>
28 #include <HLRAlgo_EdgeStatus.hxx>
29 #include <HLRBRep_Curve.hxx>
30 #include <Standard_ShortReal.hxx>
31 #include <Standard_Real.hxx>
32 class TopoDS_Edge;
33 class HLRAlgo_EdgeStatus;
34 class HLRBRep_Curve;
35
36
37
38 class HLRBRep_EdgeData 
39 {
40 public:
41
42   DEFINE_STANDARD_ALLOC
43
44   HLRBRep_EdgeData() :
45     myFlags(0),
46     myHideCount(0)
47   {
48     Selected(Standard_True);
49   }
50
51   Standard_EXPORT void Set (const Standard_Boolean Reg1, const Standard_Boolean RegN, const TopoDS_Edge& EG, const Standard_Integer V1, const Standard_Integer V2, const Standard_Boolean Out1, const Standard_Boolean Out2, const Standard_Boolean Cut1, const Standard_Boolean Cut2, const Standard_Real Start, const Standard_ShortReal TolStart, const Standard_Real End, const Standard_ShortReal TolEnd);
52   
53     Standard_Boolean Selected() const;
54   
55     void Selected (const Standard_Boolean B);
56   
57     Standard_Boolean Rg1Line() const;
58   
59     void Rg1Line (const Standard_Boolean B);
60   
61     Standard_Boolean RgNLine() const;
62   
63     void RgNLine (const Standard_Boolean B);
64   
65     Standard_Boolean Vertical() const;
66   
67     void Vertical (const Standard_Boolean B);
68   
69     Standard_Boolean Simple() const;
70   
71     void Simple (const Standard_Boolean B);
72   
73     Standard_Boolean OutLVSta() const;
74   
75     void OutLVSta (const Standard_Boolean B);
76   
77     Standard_Boolean OutLVEnd() const;
78   
79     void OutLVEnd (const Standard_Boolean B);
80   
81     Standard_Boolean CutAtSta() const;
82   
83     void CutAtSta (const Standard_Boolean B);
84   
85     Standard_Boolean CutAtEnd() const;
86   
87     void CutAtEnd (const Standard_Boolean B);
88   
89     Standard_Boolean VerAtSta() const;
90   
91     void VerAtSta (const Standard_Boolean B);
92   
93     Standard_Boolean VerAtEnd() const;
94   
95     void VerAtEnd (const Standard_Boolean B);
96   
97     Standard_Boolean AutoIntersectionDone() const;
98   
99     void AutoIntersectionDone (const Standard_Boolean B);
100   
101     Standard_Boolean Used() const;
102   
103     void Used (const Standard_Boolean B);
104   
105     Standard_Integer HideCount() const;
106   
107     void HideCount (const Standard_Integer I);
108   
109     Standard_Integer VSta() const;
110   
111     void VSta (const Standard_Integer I);
112   
113     Standard_Integer VEnd() const;
114   
115     void VEnd (const Standard_Integer I);
116   
117   void UpdateMinMax (const HLRAlgo_EdgesBlock::MinMaxIndices& theTotMinMax)
118   {
119     myMinMax = theTotMinMax;
120   }
121   
122   HLRAlgo_EdgesBlock::MinMaxIndices& MinMax()
123   {
124     return myMinMax;
125   }
126   
127     HLRAlgo_EdgeStatus& Status();
128   
129     HLRBRep_Curve& ChangeGeometry();
130   
131     const HLRBRep_Curve& Geometry() const;
132   
133     HLRBRep_Curve* Curve()
134     {
135       return &myGeometry;
136     }
137
138     Standard_ShortReal Tolerance() const;
139
140 protected:
141
142   enum EMaskFlags
143   {
144     EMaskSelected = 1,
145     EMaskUsed     = 2,
146     EMaskRg1Line  = 4,
147     EMaskVertical = 8,
148     EMaskSimple   = 16,
149     EMaskOutLVSta = 32,
150     EMaskOutLVEnd = 64,
151     EMaskIntDone  = 128,
152     EMaskCutAtSta = 256,
153     EMaskCutAtEnd = 512,
154     EMaskVerAtSta = 1024,
155     EMaskVerAtEnd = 2048,
156     EMaskRgNLine  = 4096
157   };
158
159 private:
160
161   Standard_Integer myFlags;
162   Standard_Integer myHideCount;
163   Standard_Integer myVSta;
164   Standard_Integer myVEnd;
165   HLRAlgo_EdgesBlock::MinMaxIndices myMinMax;
166   HLRAlgo_EdgeStatus myStatus;
167   HLRBRep_Curve myGeometry;
168   Standard_ShortReal myTolerance;
169
170 };
171
172 #include <HLRBRep_EdgeData.lxx>
173
174 #endif // _HLRBRep_EdgeData_HeaderFile