35866d073b944f863d3a711d8555a7b1dd48088c
[occt.git] / src / IntCurveSurface / IntCurveSurface_SurfaceTool.gxx
1 // Created by: Laurent BUCHARD
2 // Copyright (c) 1993-1999 Matra Datavision
3 // Copyright (c) 1999-2014 OPEN CASCADE SAS
4 //
5 // This file is part of Open CASCADE Technology software library.
6 //
7 // This library is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
12 //
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
15
16 //--              <lbr@nonox>
17
18 #include TheSurface_hxx
19
20
21 Standard_Integer  IntCurveSurface_SurfaceTool::NbSamplesU(const TheSurface& S) { 
22   Standard_Integer nbs;
23   GeomAbs_SurfaceType typS = S.GetType();
24   switch(typS) { 
25   case GeomAbs_Plane:
26     {
27       nbs = 2;
28     }
29     break;
30   case GeomAbs_BezierSurface: 
31     {
32       nbs =  3 + S.NbUPoles();
33     }
34     break;
35   case GeomAbs_BSplineSurface: 
36     {
37       nbs = S.NbUKnots();
38       nbs*= S.UDegree();
39       if(nbs < 2) nbs=2;
40       
41     }
42     break;
43   case GeomAbs_Torus: 
44     {
45       nbs = 20;
46     }
47     break;
48   case GeomAbs_Cylinder:
49   case GeomAbs_Cone:
50   case GeomAbs_Sphere:
51   case GeomAbs_SurfaceOfRevolution:
52   case GeomAbs_SurfaceOfExtrusion:
53     {
54       nbs = 10;
55     }
56     break;
57     
58   default: 
59     {
60       nbs = 10;
61     }
62     break;
63   }
64   return(nbs);
65 }
66
67 Standard_Integer  IntCurveSurface_SurfaceTool::NbSamplesV(const TheSurface& S) { 
68   Standard_Integer nbs;
69   GeomAbs_SurfaceType typS = S.GetType();
70   switch(typS) { 
71   case GeomAbs_Plane:
72     {
73       nbs = 2;
74     }
75     break;
76   case GeomAbs_BezierSurface: 
77     {
78       nbs =  3 + S.NbVPoles();
79     }
80     break;
81   case GeomAbs_BSplineSurface: 
82     {
83       nbs = S.NbVKnots();
84       nbs*= S.VDegree();
85       if(nbs < 2) nbs=2;
86       
87     }
88     break;
89   case GeomAbs_Cylinder:
90   case GeomAbs_Cone:
91   case GeomAbs_Sphere:
92   case GeomAbs_Torus:
93   case GeomAbs_SurfaceOfRevolution:
94   case GeomAbs_SurfaceOfExtrusion:
95     {
96       nbs = 15;
97     }
98     break;
99     
100   default: 
101     {
102       nbs = 10;
103     }
104     break;
105   }
106   return(nbs);
107 }
108
109 Standard_Integer  IntCurveSurface_SurfaceTool::NbSamplesU(const TheSurface& S,
110                                                       const Standard_Real u1,
111                                                       const Standard_Real u2) { 
112   Standard_Integer nbs = NbSamplesU(S);
113   Standard_Integer n = nbs;
114   if(nbs>10) { 
115     Standard_Real uf = FirstUParameter(S);
116     Standard_Real ul = LastUParameter(S);
117     n*= (Standard_Integer)((u2-u1)/(uf-ul));
118     if(n>nbs) n = nbs;
119     if(n<5)   n = 5;
120   }
121   return(n);
122 }
123
124 Standard_Integer  IntCurveSurface_SurfaceTool::NbSamplesV(const TheSurface& S,
125                                                       const Standard_Real v1,
126                                                       const Standard_Real v2) { 
127   Standard_Integer nbs = NbSamplesV(S);
128   Standard_Integer n = nbs;
129   if(nbs>10) { 
130     Standard_Real vf = FirstVParameter(S);
131     Standard_Real vl = LastVParameter(S);
132     n*= (Standard_Integer)((v2-v1)/(vf-vl));
133     if(n>nbs) n = nbs;
134     if(n<5)   n = 5;
135   }
136   return(n);
137 }
138
139