Integration of OCCT 6.5.0 from SVN
[occt.git] / src / Adaptor3d / Adaptor3d_HSurfaceTool.cxx
1 // File      : Adaptor3d_HSurfaceTool.cxx
2 // Created   : Wed Jui 7 18:00:00 1993
3 // Author    : Laurent BUCHARD
4 // Copyright : Matra Datavision 1993
5
6 #include <Adaptor3d_HSurfaceTool.ixx>
7
8 Standard_Integer Adaptor3d_HSurfaceTool::NbSamplesU(const Handle(Adaptor3d_HSurface)& S)
9 {
10   switch (S->GetType())
11   {
12     case GeomAbs_Plane: return 2;
13     case GeomAbs_BezierSurface: return (3 + S->NbUPoles());
14     case GeomAbs_BSplineSurface:
15     {
16       const Standard_Integer nbs = S->NbUKnots() * S->UDegree();
17       return (nbs < 2 ? 2 : nbs);
18     }
19     case GeomAbs_Torus: return 20;
20   }
21   return 10;
22 }
23
24 Standard_Integer Adaptor3d_HSurfaceTool::NbSamplesV(const Handle(Adaptor3d_HSurface)& S)
25 {
26   switch (S->GetType())
27   {
28     case GeomAbs_Plane: return 2;
29     case GeomAbs_BezierSurface: return (3 + S->NbVPoles());
30     case GeomAbs_BSplineSurface: 
31     {
32       const Standard_Integer nbs = S->NbVKnots() * S->VDegree();
33       return (nbs < 2 ? 2 : nbs);
34     }
35     case GeomAbs_Cylinder:
36     case GeomAbs_Cone:
37     case GeomAbs_Sphere:
38     case GeomAbs_Torus:
39     case GeomAbs_SurfaceOfRevolution:
40     case GeomAbs_SurfaceOfExtrusion: return 15;
41   }
42   return 10;
43 }
44
45 Standard_Integer Adaptor3d_HSurfaceTool::NbSamplesU(const Handle(Adaptor3d_HSurface)& S,
46                                                     const Standard_Real u1,
47                                                     const Standard_Real u2)
48 {
49   const Standard_Integer nbs = NbSamplesU(S);
50   Standard_Integer n = nbs;
51   if(nbs>10)
52   { 
53     const Standard_Real uf = FirstUParameter(S);
54     const Standard_Real ul = LastUParameter(S);
55     n *= (Standard_Integer)((u2-u1)/(ul-uf));
56     if (n>nbs || n>50) n = nbs;
57     if (n<5)   n = 5;
58   }
59   return n;
60 }
61
62 Standard_Integer Adaptor3d_HSurfaceTool::NbSamplesV(const Handle(Adaptor3d_HSurface)& S,
63                                                     const Standard_Real v1,
64                                                     const Standard_Real v2)
65 {
66   const Standard_Integer nbs = NbSamplesV(S);
67   Standard_Integer n = nbs;
68   if(nbs>10)
69   {
70     const Standard_Real vf = FirstVParameter(S);
71     const Standard_Real vl = LastVParameter(S);
72     n *= (Standard_Integer)((v2-v1)/(vl-vf));
73     if (n>nbs || n>50) n = nbs;
74     if (n<5)   n = 5;
75   }
76   return n;
77 }