0023824: Bad results of sweep operation when a path curve has unpredictable torsion...
[occt.git] / src / BRepFill / BRepFill_PipeShell.cdl
1 -- Created on: 1998-07-22
2 -- Created by: Philippe MANGIN
3 -- Copyright (c) 1998-1999 Matra Datavision
4 -- Copyright (c) 1999-2012 OPEN CASCADE SAS
5 --
6 -- The content of this file is subject to the Open CASCADE Technology Public
7 -- License Version 6.5 (the "License"). You may not use the content of this file
8 -- except in compliance with the License. Please obtain a copy of the License
9 -- at http://www.opencascade.org and read it completely before using this file.
10 --
11 -- The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
12 -- main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
13 --
14 -- The Original Code and all software distributed under the License is
15 -- distributed on an "AS IS" basis, without warranty of any kind, and the
16 -- Initial Developer hereby disclaims all such warranties, including without
17 -- limitation, any warranties of merchantability, fitness for a particular
18 -- purpose or non-infringement. Please see the License for the specific terms
19 -- and conditions governing the rights and limitations under the License.
20
21
22
23 class PipeShell from BRepFill inherits  TShared from MMgt 
24
25         ---Purpose: Perform general sweeping construction
26 uses  
27  Dir  from  gp,
28  Ax2  from  gp,
29  Trsf from  gp,
30  Function from Law,  
31  ListOfShape  from  TopTools, 
32  HArray2OfShape   from  TopTools,
33  Shape from  TopoDS,
34  Wire  from  TopoDS,
35  Vertex  from  TopoDS, 
36  TransitionStyle  from BRepFill, 
37  Trihedron        from  GeomFill,   
38  PipeError        from  GeomFill,  
39  LocationLaw       from  BRepFill, 
40  SectionLaw        from  BRepFill,  
41  Section           from  BRepFill, 
42  Sweep             from BRepFill,
43  DataMapOfShapeListOfShape from TopTools,
44  SequenceOfSection from  BRepFill 
45
46
47 raises
48  DomainError from Standard, 
49  NotDone  from  StdFail
50
51 is    
52     Create( Spine   : Wire  from TopoDS)
53         ---Level: Public
54     returns PipeShell from BRepFill;
55
56 -- =================================
57 --  Methodes Set
58 -- ================================= 
59   ---Purpose: Set an sweep's mode
60    --         If no mode are setted, the mode use in MakePipe is used
61    ---See Also: GeomFill_IsCorrectedFrenet  
62
63     Set(me  :  mutable; Frenet  :  Boolean  =  Standard_False);
64         ---Purpose: Set an Frenet or an CorrectedFrenet trihedron  
65         --          to  perform  the  sweeping
66         ---Level:  Public   
67         ---See Also:GeomFill_IsCorrectedFrenet
68     
69     SetDiscrete(me  :  mutable);
70         ---Purpose: Set a Discrete trihedron  
71         --          to  perform  the  sweeping
72         ---Level:  Public   
73         ---See Also:GeomFill_IsDiscreteTrihedron
74     
75     Set(me  :  mutable;  Axe  :  Ax2  from  gp); 
76         ---Purpose: Set  an  fixed  trihedron  to  perform  the  sweeping 
77          --         all sections will be parallel.
78         ---Level: Public       
79         ---See Also: GeomFill_IsFixed
80
81     Set(me  :  mutable;  BiNormal  :  Dir  from  gp); 
82         ---Purpose: Set an fixed  BiNormal  direction to  perform   
83                 --  the sweeping        
84         ---Level: Public      
85         ---See Also: GeomFill_IsConstantNormal
86
87     Set(me  :  mutable;  SpineSupport : Shape  from  TopoDS) 
88         ---Purpose: Set support to the spine to define the BiNormal
89         --           at   the spine, like    the  normal the surfaces.
90         --  Warning: To  be  effective,  Each  edge  of  the  <spine>  must  
91                 --  have an  representaion  on   one   face  of<SpineSupport>         
92         ---Level: Public 
93         ---See Also: GeomFill_IsDarboux
94     returns  Boolean;
95
96     Set(me  :  mutable;   
97         AuxiliarySpine  :  Wire  from  TopoDS; 
98         CurvilinearEquivalence :  Boolean  =  Standard_True; 
99         KeepContact  : Boolean  =  Standard_False );
100
101         ---Purpose: Set  an  auxiliary  spine  to  define  the Normal
102         --  For  each  Point  of  the  Spine  P,  an  Point  Q  is  evalued
103         --    on  <AuxiliarySpine>           
104         -- If <CurvilinearEquivalence>  
105         --   Q split <AuxiliarySpine> with  the  same  length ratio
106         --   than P split  <Spline>. 
107         -- Else  the  plan  define  by  P  and  the  tangent  to  the  <Spine> 
108         --       intersect <AuxiliarySpine> in Q.
109         -- If <KeepContact> the  Normal  is  defined to  assume like  the  sweeped 
110         --                  section is  in  contact to  the  <AuxiliarySpine>
111         -- Else  the  Normal  is  defined  by the vector  PQ. 
112
113         ---Level: Public
114
115     SetForceApproxC1(me  :  mutable;
116                      ForceApproxC1 : Boolean from Standard);
117         ---Purpose: Set the flag that indicates attempt to approximate
118         --          a C1-continuous surface if a swept surface proved
119         --          to be C0.
120
121
122 -- =================================
123 --  Methodes to define section(s)
124 -- ================================= 
125   ---Purpose: Give section to sweep.
126    -- Possibilities are :
127    --   - Give one or sevral profile
128    --     - Give one profile and an homotetic law.
129    --     - Automatic compute of correspondance beetween profile, and section 
130    --                 on the sweeped shape
131    --     - correspondance beetween profile, and section on the sweeped shape
132    --       defined by a vertex of the spine
133
134    --    -"WithCorrection" The profile is  rotated to have a Normal --
135    --     parallel   to  the  trihedron's    normal and   have tangent
136    --    perpendicular to the trihedron's  tangent.
137     
138
139     Add(me:mutable; 
140         Profile  : Shape  from TopoDS; 
141         WithContact    :  Boolean  =  Standard_False; 
142         WithCorrection :  Boolean  =  Standard_False ); 
143         ---Purpose: Set an section. The corespondance with the spine, will
144         --          be automaticaly performed.
145         ---Level: Public
146   
147     Add(me:mutable; 
148         Profile : Shape  from TopoDS;   
149         Location  :  Vertex from  TopoDS; 
150         WithContact    :  Boolean =  Standard_False; 
151         WithCorrection :  Boolean =  Standard_False) 
152         ---Purpose: Set an section.   The corespondance with the spine, is
153         --          given by  <Location>
154
155         ---Level: Public
156     raises DomainError;  -- if the <Spine> do not contain <Location>
157
158     SetLaw(me  :mutable; 
159            Profile  :  Shape  from TopoDS; 
160            L : Function from Law; 
161            WithContact    :  Boolean =  Standard_False; 
162            WithCorrection :  Boolean  =  Standard_False);
163         ---Purpose: Set  an    section  and  an   homotetic    law. 
164         -- The  homotetie's  centers  is  given  by  point  on  the  <Spine>.
165         ---Level:  Public
166
167
168     SetLaw(me  :mutable; 
169            Profile  :  Shape  from TopoDS; 
170            L : Function from Law; 
171            Location  :  Vertex from  TopoDS; 
172            WithContact    :  Boolean =  Standard_False; 
173            WithCorrection :  Boolean  =  Standard_False);
174         ---Purpose: Set  an    section  and  an   homotetic    law. 
175         --   The  homotetie  center  is  given  by  point  on  the  <Spine>
176         ---Level:  Public
177
178  
179     Delete(me  :  mutable;  Profile : Shape from TopoDS);  
180         ---Purpose: Delete an section.
181         ---Level: Public    
182     
183      
184 --  ======================================== 
185 --  Methodes  to perform  and  read   shape
186 --  ========================================
187     IsReady(me)
188      ---Purpose: Say if <me> is ready to build the shape
189      --          return False if <me> do not have section definition        
190     returns  Boolean;   
191
192     GetStatus(me) 
193     ---Purpose: Get a status, when Simulate or Build failed.        
194     returns  PipeError  from  GeomFill;
195
196     SetTolerance(me  :  mutable; 
197                  Tol3d  :  Real  =  1.0e-4; 
198                  BoundTol   : Real  =  1.0e-4;
199                  TolAngular : Real  =  1.0e-2); 
200                   
201     SetTransition(me  :  mutable;  
202                   Mode  :TransitionStyle  from  BRepFill   
203                         =  BRepFill_Modified; 
204                   Angmin  :  Real  =  1.0e-2; 
205                   Angmax  :  Real  =  6.0)    
206         ---Purpose: Set the  Transition Mode to manage discontinuities
207         --          on the sweep.
208         ---Level: Public
209     is  static; 
210         
211     Simulate(me : mutable;   
212              NumberOfSection  :  Integer; 
213              Sections         : out   ListOfShape from TopTools)
214         ---Purpose: Perform simulation of the sweep : 
215          --         Somes Section are returned.
216         ---Level: Public 
217     raises  NotDone;  --  If  <me> it is not Ready
218      
219                                                        
220     Build(me : mutable)
221         ---Purpose: Builds the resulting shape (redefined from MakeShape).
222         ---Level: Public
223     returns Boolean 
224     raises  NotDone  --  If  <me> it is not Ready
225     is static; 
226
227     MakeSolid(me :  mutable) 
228          ---Purpose: Transform the sweeping Shell in Solid. 
229          --          If the section are not closed returns False        
230          ---Level: Public
231     returns  Boolean 
232     raises  NotDone;  --  If  <me> is not Builded;           
233     
234     Shape (me)
235     ---Purpose: Returns the result Shape.
236     ---C++: return const & 
237     ---Level: Public 
238     returns Shape from TopoDS
239     is  static;    
240     
241     FirstShape (me)
242     ---Purpose: Returns the  TopoDS  Shape of the bottom of the sweep.
243     ---C++: return const & 
244     ---Level: Public 
245     returns Shape from TopoDS
246     is  static;
247
248     LastShape (me)
249     ---Purpose: Returns the TopoDS Shape of the top of the sweep.
250     ---C++: return const & 
251     ---Level: Public
252     returns Shape from TopoDS   
253     is  static; 
254      
255     Generated (me: mutable; 
256                S : Shape from TopoDS;
257                L : out ListOfShape from TopTools)
258         ---Purpose: Returns the  list   of shapes generated   from the
259         --          shape <S>. 
260         ---Level: Public
261     is static;  
262     
263     Prepare(me:  mutable)  is  private; 
264      
265     Place(me : mutable;  
266           Sec  :  Section  from  BRepFill; 
267           W    :  out  Wire   from  TopoDS; 
268           Trsf :  out  Trsf   from  gp; 
269         param  :  out  Real  from  Standard)  is  private; 
270            
271     ResetLoc(me  :  mutable)  is  private;
272
273     BuildHistory(me: mutable; theSweep: Sweep from BRepFill)
274         is private;
275           
276 fields      
277   mySpine       :  Wire  from  TopoDS;
278   myFirst       :  Shape  from  TopoDS; 
279   myLast        :  Shape  from  TopoDS;  
280   myShape       :  Shape  from  TopoDS;   
281   mySeq         :  SequenceOfSection from BRepFill; 
282
283   myGenMap      :  DataMapOfShapeListOfShape from TopTools;
284
285   myTol3d       :  Real; 
286   myBoundTol    :  Real;  
287   myTolAngular  :  Real;
288   angmin,  angmax  :  Real; 
289   myForceApproxC1 : Boolean;
290   
291   myLaw         :  Function         from  Law;    
292   myLocation    :  LocationLaw      from  BRepFill; 
293   mySection     :  SectionLaw       from  BRepFill; 
294   myFaces       :  HArray2OfShape   from  TopTools;
295   myTrihedron   :  Trihedron        from  GeomFill;
296   myTransition  :  TransitionStyle  from  BRepFill; 
297   myStatus      :  PipeError        from  GeomFill;
298 end PipeShell;
299
300
301
302
303