0025124: [Feature request] Removal of continuity checks for offset geometries
[occt.git] / src / Geom / Geom_OffsetCurve.cdl
1 -- Created on: 1993-03-10
2 -- Created by: JCV
3 -- Copyright (c) 1993-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 class OffsetCurve from Geom inherits Curve from Geom
18
19     
20         ---Purpose :
21         --  This class implements the basis services for an offset curve
22         --  in 3D space. The Offset curve in this package can be a self
23         --  intersecting curve even if the basis curve does not 
24         --  self-intersect. The self intersecting portions are not deleted
25         --  at the construction time.
26         --  An offset curve is a curve at constant distance (Offset) from
27         --  a basis curve in a reference direction V. The offset curve 
28         --  takes its parametrization from the basis curve.
29         --  The Offset curve is in the direction of the normal N 
30         --  defined with the cross product  T^V, where the vector T
31         --  is given by the first derivative on the basis curve with 
32         --  non zero length.
33         --  The distance offset may be positive or negative to indicate the
34         --  preferred side of the curve :
35         --  . distance offset >0 => the curve is in the direction of N
36         --  . distance offset <0 => the curve is in the direction of - N
37         --  
38         --  On the Offset curve :
39         --  Value (U) = BasisCurve.Value(U) + (Offset * (T ^ V)) / ||T ^ V||
40         --  
41         --  At any point the Offset direction V must not be parallel to the
42         --  vector T and the vector T must not have null length else the
43         --  offset curve is not defined. So the offset curve has not the 
44         --  same continuity as the basis curve.
45         -- 
46         --   Warnings :
47         --  
48         --  In this package we suppose that the continuity of the offset
49         --  curve is one degree less than the continuity of the basis 
50         --  curve and we don't check that at any point ||T^V|| != 0.0
51         --  
52         --  So to evaluate the curve it is better to check that the offset
53         --  curve is well defined at any point because an exception could 
54         --  be raised. The check is not done in this package at the creation
55         --  of the offset curve because the control needs the use of an
56         --  algorithm which cannot be implemented in this package.
57         -- 
58         --  The OffsetCurve is closed if the first point and the last point
59         --  are the same (The distance between these two points is lower or
60         --  equal to the Resolution sea package gp) . The OffsetCurve can be
61         --  closed even if the basis curve is not closed. 
62
63
64 uses Dir      from gp,
65      Pnt      from gp,
66      Trsf     from gp,
67      Vec      from gp,
68      Curve    from Geom,
69      Geometry from Geom,
70      Shape    from GeomAbs
71
72
73 raises ConstructionError   from Standard,
74        RangeError          from Standard,
75        NoSuchObject        from Standard,
76        UndefinedDerivative from Geom,
77        UndefinedValue      from Geom
78
79
80
81
82 is
83
84
85
86
87   Create (C : Curve from Geom;
88           Offset : Real;
89           V : Dir;
90           isNotCheckC0 : Boolean = Standard_False)
91      returns OffsetCurve
92         ---Purpose :
93         --  C is the basis curve, Offset is the distance between <me> and
94         --  the basis curve at any point. V defines the fixed reference 
95         --  direction (offset direction). If P is a point on the basis
96         --  curve and T the first derivative with non zero length
97         --  at this point, the corresponding point on the offset curve is
98         --  in the direction of the vector-product N = V ^ T   where
99         --  N is a unitary vector.
100         --  If isNotCheckC0 = TRUE checking if basis curve has C0-continuity
101         --  is not made.
102         --  Warnings :
103         --  In this package the entities are not shared. The OffsetCurve is
104         --  built with a copy of the curve C. So when C is modified the
105         --  OffsetCurve is not modified
106      raises ConstructionError;
107         ---Purpose :
108         --  Raised if the basis curve C is not at least C1.
109         --  Warnings :
110         --  No check is done to know if ||V^T|| != 0.0 at any point.
111         
112
113
114   Reverse (me : mutable);
115         ---Purpose  : Changes the orientation of this offset curve.
116         -- As a result:
117         -- - the basis curve is reversed,
118         -- - the start point of the initial curve becomes the
119         --   end point of the reversed curve,
120         -- - the end point of the initial curve becomes the
121         --   start point of the reversed curve, and
122         -- - the first and last parameters are recomputed.
123   
124
125   ReversedParameter(me; U : Real) returns Real;
126         ---Purpose: Computes the parameter on the reversed curve for
127         -- the point of parameter U on this offset curve.
128  
129
130   SetBasisCurve ( me : mutable;
131                   C : Curve from Geom;
132                   isNotCheckC0 : Boolean = Standard_False)
133      raises ConstructionError;
134         ---Purpose :  Changes this offset curve by assigning C
135         --            as the basis curve from which it is built.
136         --            If isNotCheckC0 = TRUE checking if basis curve
137         --            has C0-continuity is not made.
138         -- Exceptions
139         -- Standard_ConstructionError if the curve C is not at least "C1" continuous.
140       
141
142   SetDirection (me : mutable; V : Dir);
143         ---Purpose : Changes this offset curve by assigning V as the
144         -- reference vector used to compute the offset direction.
145
146   SetOffsetValue (me : mutable; D : Real);
147         ---Purpose :  Changes this offset curve by assigning D as the offset value.
148
149
150   BasisCurve (me) returns Curve from Geom;
151         ---Purpose : Returns the basis curve of this offset curve.
152         -- Note: The basis curve can be an offset curve.
153
154
155   Continuity (me)  returns Shape from GeomAbs;
156         ---Purpose : Returns the global continuity of this offset curve as a
157         -- value of the GeomAbs_Shape enumeration.
158         -- The degree of continuity of this offset curve is equal
159         -- to the degree of continuity of the basis curve minus 1.
160         --  Continuity of the Offset curve :
161         --  C0 : only geometric continuity,
162         --  C1 : continuity of the first derivative all along the Curve,
163         --  C2 : continuity of the second derivative all along the Curve,
164         --  C3 : continuity of the third derivative all along the Curve,
165         --  G1 : tangency continuity all along the Curve,
166         --  G2 : curvature continuity all along the Curve,
167         --  CN : the order of continuity is infinite.
168         --  Warnings :
169         --  Returns the continuity of the basis curve - 1. 
170         --  The offset curve must have a unique offset direction defined
171         --  at any point.
172
173
174   Direction (me)  returns Dir;
175         ---Purpose : Returns the reference vector of this offset curve.
176         ---C++: return const&
177    
178         ---Purpose  : Value and derivatives
179         --  Warnings :
180         --  The exception UndefinedValue or UndefinedDerivative is 
181         --  raised if it is not possible to compute a unique offset
182         --  direction.
183         --  If T is the first derivative with not null length and
184         --  V the offset direction the relation ||T(U) ^ V|| != 0
185         --  must be satisfied to evaluate the offset curve.
186         --  No check is done at the creation time and we suppose
187         --  in this package that the offset curve is well defined.
188
189
190   D0(me; U : Real; P : out Pnt);
191         ---Purpose:  Warning! this should not be called 
192         --          if the basis curve is not at least C1. Nevertheless
193         --          if used on portion where the curve is C1, it is OK
194
195
196   D1 (me; U : Real; P : out Pnt; V1 : out Vec)
197      raises UndefinedDerivative;
198         ---Purpose:  Warning! this should not be called 
199         --           if the continuity of the basis curve is not C2.
200         --           Nevertheless, it's OK to use it  on portion 
201         --           where the curve is C2
202
203
204   D2 (me; U : Real; P : out Pnt; V1, V2 : out Vec)
205      raises UndefinedDerivative;
206         ---Purpose:  Warning! this should not be called 
207         --           if the continuity of the basis curve is not C3.
208         --           Nevertheless, it's OK to use it  on portion 
209         --           where the curve is C3  
210        
211
212
213   D3 (me; U : Real; P : out Pnt; V1, V2, V3 : out Vec)
214      raises UndefinedDerivative;
215         ---Warning:
216         --         this should not be called 
217         --           if the continuity of the basis curve is not C4.
218         --           Nevertheless, it's OK to use it  on portion 
219         --           where the curve is C4  
220        
221
222         
223
224   DN (me; U : Real; N : Integer)   returns Vec
225         ---Purpose :
226         --  The returned vector gives the value of the derivative
227         --  for the order of derivation N.    
228         --Warning!
229         --         this should not be called 
230         --           if the continuity of the basis curve is not CN+1.
231         --           Nevertheless, it's OK to use it  on portion 
232         --           where the curve is CN+1  
233        
234      raises UndefinedDerivative,
235
236
237
238
239         ---Purpose  : 
240         --  The following functions compute the value and derivatives
241         --  on the offset curve and returns the derivatives on the
242         --  basis curve too.  
243         --  The computation of the value and derivatives on the basis
244         --  curve are used to evaluate the offset curve
245         --  
246         --  Warning:
247         --  The exception UndefinedValue or UndefinedDerivative is 
248         --  raised if it is not possible to compute a unique offset
249         --  direction.
250     
251             RangeError;
252         ---Purpose : Raised if N < 1.
253         --         
254
255   Value (me; U : Real; P, Pbasis : out Pnt; V1basis : out Vec)
256      raises UndefinedValue;
257
258         ---Purpose:  Warning! this should not be called 
259         --          if the basis curve is not at least C1. Nevertheless
260         --          if used on portion where the curve is C1, it is OK 
261   
262   D0 (me; U : Real; P, Pbasis : out Pnt; V1basis : out Vec)
263      raises UndefinedValue;
264         ---Purpose:  Warning! this should not be called 
265         --           if the continuity of the basis curve is not C1.
266         --           Nevertheless, it's OK to use it  on portion 
267         --           where the curve is C1
268
269   
270
271   D1 (me; U : Real; P, Pbasis : out Pnt; V1, V1basis, V2basis : out Vec)
272      raises UndefinedDerivative;
273         ---Purpose:  Warning! this should not be called 
274         --           if the continuity of the basis curve is not C1.
275         --           Nevertheless, it's OK to use it  on portion 
276         --           where the curve is C1
277
278   D2 (me; U : Real; P, Pbasis : out Pnt;  V1, V2, V1basis, V2basis, 
279       V3basis : out Vec)
280      raises UndefinedDerivative;
281
282         ---Purpose:  Warning!  this should not be called 
283         --           if the continuity of the basis curve is not C3.
284         --           Nevertheless, it's OK to use it  on portion 
285         --           where the curve is C3  
286   FirstParameter (me)  returns Real;
287
288   LastParameter (me)   returns Real;
289
290         --- Purpose: Returns the value of the first or last parameter of this
291         -- offset curve. The first parameter corresponds to the
292         -- start point of the curve. The last parameter
293         -- corresponds to the end point.
294         -- Note: the first and last parameters of this offset curve
295         -- are also the ones of its basis curve.
296     
297   Offset (me)          returns Real;
298         ---Purpose: Returns the offset value of this offset curve.
299     
300   IsClosed (me)   returns Boolean;
301         ---Purpose : Returns True if the distance between the start point 
302         --  and the end point of the curve is lower or equal to 
303         --  Resolution from package gp.
304
305
306   IsCN (me; N : Integer)  returns Boolean
307         ---Purpose : Returns true if the degree of continuity of the basis
308         -- curve of this offset curve is at least N + 1.
309         --  This method answer True if the continuity of the basis curve 
310         --  is N + 1.  We suppose in this class that a normal direction
311         --  to the basis curve (used to compute the offset curve) is 
312         --  defined at any point on the basis curve.
313      raises RangeError;
314         ---Purpose : Raised if N < 0.
315
316
317   IsPeriodic (me)  returns Boolean;
318         ---Purpose : Returns true if this offset curve is periodic, i.e. if the
319         -- basis curve of this offset curve is periodic.
320
321
322   Period (me) returns Real from Standard
323         ---Purpose: Returns the period of this offset curve, i.e. the period
324         -- of the basis curve of this offset curve.
325         -- Exceptions
326         -- Standard_NoSuchObject if the basis curve is not periodic.
327   raises
328         NoSuchObject from Standard
329   is redefined;
330
331
332   Transform (me : mutable; T : Trsf);
333         --- Purpose: Applies the transformation T to this offset curve.
334         -- Note: the basis curve is also modified.
335
336   TransformedParameter(me; U : Real; T : Trsf from gp) returns Real
337         ---Purpose: Returns the  parameter on the  transformed  curve for
338         --       the transform of the point of parameter U on <me>.
339         --      me->Transformed(T)->Value(me->TransformedParameter(U,T))
340         --          is the same point as
341         --          me->Value(U).Transformed(T)
342         --          This methods calls the basis curve method.
343      is redefined;  
344
345   ParametricTransformation(me; T : Trsf from gp) returns Real
346         ---Purpose: Returns a  coefficient to compute the parameter on
347         --          the transformed  curve  for  the transform  of the
348         --          point on <me>.
349         --          
350         --          Transformed(T)->Value(U * ParametricTransformation(T))
351         --          is the same point as
352         --          Value(U).Transformed(T)
353         --          This methods calls the basis curve method.
354      is redefined;  
355
356              
357
358   Copy (me)  returns like me;
359         ---Purpose: Creates a new object which is a copy of this offset curve.
360
361   GetBasisCurveContinuity(me)
362     returns Shape from GeomAbs;
363         ---Purpose: Returns continuity of the basis curve.   
364       
365 fields
366
367   basisCurve  : Curve from Geom;
368   direction   : Dir;
369   offsetValue : Real;
370   myBasisCurveContinuity : Shape from GeomAbs;
371   
372 end;