0023824: Bad results of sweep operation when a path curve has unpredictable torsion...
[occt.git] / src / GeomFill / GeomFill_CorrectedFrenet.cdl
1 -- Created on: 1997-12-19
2 -- Created by: Philippe MANGIN
3 -- Copyright (c) 1997-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 CorrectedFrenet from GeomFill  
24     inherits TrihedronLaw  from  GeomFill 
25
26         ---Purpose:  Defined an Corrected Frenet  Trihedron  Law It is
27         --          like Frenet with an Torsion's minimization          
28
29 uses 
30  Frenet from  GeomFill,
31  HCurve from  Adaptor3d, 
32  Shape  from  GeomAbs, 
33  Array1OfReal   from TColStd, 
34  Function  from  Law, 
35  Vec    from  gp,
36  ---OCC78
37  HArray1OfReal  from TColStd, 
38  SequenceOfReal from TColStd, 
39  HArray1OfVec   from TColgp, 
40  SequenceOfVec  from TColgp,
41  Trihedron      from GeomFill
42  
43 raises
44  OutOfRange,  ConstructionError
45 is  
46
47    Create returns CorrectedFrenet from GeomFill;
48
49    Create (ForEvaluation: Boolean)
50    returns CorrectedFrenet from GeomFill;
51
52    Copy(me)   
53    returns  TrihedronLaw  from  GeomFill          
54    is  redefined;
55  
56    Init(me: mutable)
57    is  static  private; 
58  
59    InitInterval(me; First, Last, Step: Real;   
60                 startAng: in out Real;  
61                 prevTangent, prevNormal, aT, aN: out Vec from gp;  
62                 FuncInt: out Function from Law; 
63                 SeqPoles:   out SequenceOfReal from TColStd; 
64                 SeqAngle:   out SequenceOfReal from TColStd; 
65                 SeqTangent: out SequenceOfVec from TColgp; 
66                 SeqNormal:  out SequenceOfVec from TColgp)
67    returns Boolean 
68    --- Purpose:  Computes BSpline representation of Normal evolution at one  
69    --- interval of continuity of Frenet. Returns True if FuncInt = 0
70    is private;
71      
72    --- OCC78 
73    CalcAngleAT(me; Tangent, Normal, prevTangent, prevNormal: in Vec from gp)
74    returns Real
75    --- Purpose:  Computes angle of Normal evolution of Frenet between any two points on the curve.
76    is private;
77    GetAngleAT(me; P: in Real) 
78    returns Real
79    --- Purpose:  Get corrected value of angle of Normal evolution of Frenet
80    is private;
81
82    SetCurve(me : mutable;  C  :  HCurve  from  Adaptor3d) 
83    is  redefined;
84  
85    SetInterval(me: mutable; First, Last: Real) 
86    is  redefined;   
87 -- 
88 -- 
89 --========== To compute Location and derivatives Location
90 --              
91    D0(me : mutable; 
92       Param: Real; 
93       Tangent    : out  Vec  from  gp; 
94       Normal     : out  Vec  from  gp; 
95       BiNormal   : out  Vec  from  gp)
96       ---Purpose: compute Triedrhon on curve at parameter <Param>         
97    returns Boolean  is  redefined;
98         
99    D1(me : mutable;
100       Param: Real;       
101       Tangent    : out  Vec  from  gp;  
102       DTangent   : out  Vec  from  gp; 
103       Normal     : out  Vec  from  gp; 
104       DNormal    : out  Vec  from  gp;                 
105       BiNormal   : out  Vec  from  gp; 
106       DBiNormal  : out  Vec  from  gp)
107       ---Purpose: compute Triedrhon and  derivative Trihedron  on curve
108       --          at parameter <Param>                
109       --  Warning : It used only for C1 or C2 aproximation
110    returns Boolean  
111    is  redefined; 
112    
113    D2(me : mutable;
114       Param: Real;       
115       Tangent    : out  Vec  from  gp;  
116       DTangent   : out  Vec  from  gp; 
117       D2Tangent  : out  Vec  from  gp; 
118       Normal     : out  Vec  from  gp; 
119       DNormal    : out  Vec  from  gp;                 
120       D2Normal   : out  Vec  from  gp; 
121       BiNormal   : out  Vec  from  gp; 
122       DBiNormal  : out  Vec  from  gp; 
123       D2BiNormal : out  Vec  from  gp)    
124       ---Purpose: compute  Trihedron on curve          
125       --          first and seconde  derivatives.
126       --  Warning : It used only for C2 aproximation
127    returns Boolean
128    is  redefined; 
129 --
130 --  =================== Management  of  continuity  ===================
131 --                 
132    NbIntervals(me; S : Shape from GeomAbs) 
133         ---Purpose: Returns  the number  of  intervals for  continuity
134         --          <S>. 
135         --          May be one if Continuity(me) >= <S>
136    returns Integer  is  redefined;
137
138    Intervals(me; T : in out Array1OfReal from TColStd; 
139                  S : Shape from GeomAbs)
140         ---Purpose: Stores in <T> the  parameters bounding the intervals
141         --          of continuity <S>.
142         --          
143         --          The array must provide  enough room to  accomodate
144         --          for the parameters. i.e. T.Length() > NbIntervals()
145     raises
146         OutOfRange from Standard 
147     is redefined;  
148      
149      
150 --  ===================  To define the best trihedron mode  ===============
151      
152     EvaluateBestMode(me : mutable)
153     returns Trihedron from GeomFill;
154     ---Purpose: Tries to define the best trihedron mode
155     --          for the curve. It can be:
156     --          - Frenet
157     --          - CorrectedFrenet
158     --          - DiscreteTrihedron
159     --          Warning: the CorrectedFrenet must be constructed
160     --          with option ForEvaluation = True,
161     --          the curve must be set by method SetCurve.
162      
163           
164 --  ===================  To help   computation of  Tolerance   ===============   
165     GetAverageLaw(me  :  mutable;
166       ATangent    : out  Vec  from  gp; 
167       ANormal     : out  Vec  from  gp; 
168       ABiNormal   : out  Vec  from  gp) 
169      ---Purpose: Get average value of Tangent(t) and Normal(t) it is usfull to 
170      --          make fast approximation of rational  surfaces.        
171   is  redefined;
172
173 --   =================== To help Particular case   ===============      
174    
175     IsConstant(me) 
176     ---Purpose: Say if the law is Constant.        
177     returns  Boolean   
178     is redefined;
179  
180    IsOnlyBy3dCurve(me) 
181      ---Purpose: Return True.       
182     returns  Boolean   
183     is redefined;
184
185 fields 
186    frenet          : Frenet           from  GeomFill; 
187    EvolAroundT     : Function         from  Law; 
188    TLaw            : Function         from  Law; 
189    AT,  AN         : Vec              from  gp;
190    isFrenet        : Boolean; 
191    myForEvaluation : Boolean;
192    
193    ---OCC78
194    HArrPoles      : HArray1OfReal    from  TColStd;
195    HArrAngle      : HArray1OfReal    from  TColStd;
196    HArrTangent    : HArray1OfVec     from  TColgp;
197    HArrNormal     : HArray1OfVec     from  TColgp; 
198    
199 end CorrectedFrenet;