0024730: remove constructor for class TopOpeBRep_PointGeomTool
[occt.git] / src / TopOpeBRep / TopOpeBRep_GeomTool.cxx
1 // Created on: 1993-06-24
2 // Created by: Jean Yves LEBEY
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 #include <TopOpeBRep_GeomTool.ixx>
18
19 #include <BRep_Tool.hxx>
20 #include <TopoDS.hxx>
21 #include <TopOpeBRep_TypeLineCurve.hxx>
22 #include <TColStd_Array1OfReal.hxx>
23 #include <TColStd_Array1OfInteger.hxx>
24 #include <TColgp_Array1OfPnt.hxx>
25 #include <TColgp_Array1OfPnt2d.hxx>
26 #include <Standard_ProgramError.hxx>
27 #include <TopOpeBRep_WPointInter.hxx>
28 #include <TopOpeBRep_WPointInterIterator.hxx>
29 #include <TopOpeBRepTool_CurveTool.hxx>
30 #include <TopOpeBRepTool_ShapeTool.hxx>
31
32 //=======================================================================
33 //function : MakeCurves
34 //purpose  : 
35 //=======================================================================
36 void  TopOpeBRep_GeomTool::MakeCurves
37 (const Standard_Real min,
38  const Standard_Real max,
39  const TopOpeBRep_LineInter& L,
40  const TopoDS_Shape& /*S1*/,
41  const TopoDS_Shape& /*S2*/,
42  TopOpeBRepDS_Curve& C,
43  Handle(Geom2d_Curve)& PC1,
44  Handle(Geom2d_Curve)& PC2)
45 {
46   Standard_Boolean IsWalk = Standard_False;
47   Handle(Geom_Curve) C3D;
48   TopOpeBRep_TypeLineCurve typeline = L.TypeLineCurve();
49
50   switch (typeline) {
51     
52   case TopOpeBRep_WALKING : {
53     // make BSplines of degree 1
54     C3D = MakeBSpline1fromWALKING3d(L);
55     PC1 = MakeBSpline1fromWALKING2d(L,1);
56     PC2 = MakeBSpline1fromWALKING2d(L,2);
57     if (!PC1.IsNull())
58       C.Curve1(PC1);
59     if (!PC2.IsNull())
60       C.Curve2(PC2);
61     IsWalk = Standard_True;
62     break;
63   }
64   case TopOpeBRep_LINE : 
65   case TopOpeBRep_CIRCLE :
66   case TopOpeBRep_ELLIPSE : {
67     C3D = L.Curve();
68     break;
69   }
70   case TopOpeBRep_PARABOLA :
71   case TopOpeBRep_HYPERBOLA : {
72     C3D = L.Curve(min,max); // Trimmed
73     break;
74   }
75   case TopOpeBRep_ANALYTIC : 
76   case TopOpeBRep_RESTRICTION : 
77   case TopOpeBRep_OTHERTYPE :
78     default : 
79       Standard_ProgramError::Raise("TopOpeBRep_GeomTool::MakePrivateCurves");
80     break;
81   }
82
83   Standard_Real tol = C.Tolerance();
84   C.DefineCurve(C3D,tol,IsWalk);
85   C.SetRange(min,max);
86 }
87
88
89 //=======================================================================
90 //function : MakeCurve
91 //purpose  : 
92 //=======================================================================
93 void  TopOpeBRep_GeomTool::MakeCurve
94 (const Standard_Real min,const Standard_Real max,
95  const TopOpeBRep_LineInter& L,
96  Handle(Geom_Curve)& C3D)
97 {
98   TopOpeBRep_TypeLineCurve typeline = L.TypeLineCurve();
99   
100   switch (typeline) {
101     
102   case TopOpeBRep_WALKING : 
103     C3D = MakeBSpline1fromWALKING3d(L);
104     break;
105     
106   case TopOpeBRep_LINE : 
107     C3D = L.Curve();
108     break;
109
110   case TopOpeBRep_CIRCLE :
111   case TopOpeBRep_ELLIPSE :
112   case TopOpeBRep_PARABOLA :
113   case TopOpeBRep_HYPERBOLA :
114
115     if      (typeline == TopOpeBRep_CIRCLE) 
116       C3D = L.Curve();
117     else if (typeline == TopOpeBRep_ELLIPSE) 
118       C3D = L.Curve();
119     else if (typeline == TopOpeBRep_PARABOLA) 
120       C3D = L.Curve(min,max); // Trimmed
121     else if (typeline == TopOpeBRep_HYPERBOLA) 
122       C3D = L.Curve(min,max); //Trimmed
123
124     break;
125     
126   case TopOpeBRep_ANALYTIC : 
127   case TopOpeBRep_RESTRICTION : 
128   case TopOpeBRep_OTHERTYPE :
129   default : 
130     Standard_ProgramError::Raise("TopOpeBRep_GeomTool::MakePrivateCurves");
131     break;
132   }
133 }
134
135 //=======================================================================
136 //function : MakeBSpline1fromWALKING3d
137 //purpose  : 
138 //=======================================================================
139 Handle(Geom_Curve) TopOpeBRep_GeomTool::MakeBSpline1fromWALKING3d
140 (const TopOpeBRep_LineInter& L)
141 {
142   Standard_Integer ip;
143   TopOpeBRep_WPointInterIterator itW(L);
144   Standard_Integer nbpoints = L.NbWPoint();
145   // Define points3d with the walking 3d points of <L>
146   TColgp_Array1OfPnt points3d(1,nbpoints); 
147   for (ip = 1, itW.Init(); itW.More(); ip++, itW.Next()) {
148     points3d.SetValue(ip,itW.CurrentWP().Value());
149   }
150   Handle(Geom_Curve) C=TopOpeBRepTool_CurveTool::MakeBSpline1fromPnt(points3d);
151   return C;
152 }
153
154 //=======================================================================
155 //function : MakeBSpline1fromWALKING2d
156 //purpose  : 
157 //=======================================================================
158 Handle(Geom2d_Curve) TopOpeBRep_GeomTool::MakeBSpline1fromWALKING2d
159 (const TopOpeBRep_LineInter& L, const Standard_Integer SI)
160 {
161   Standard_Integer ip;
162   TopOpeBRep_WPointInterIterator itW(L);
163   Standard_Integer nbpoints = L.NbWPoint();
164   // Define points2d with the walking 2d points of <L>
165   TColgp_Array1OfPnt2d points2d(1,nbpoints);
166   for (ip = 1, itW.Init(); itW.More(); ip++, itW.Next()) {
167     if      (SI == 1) points2d.SetValue(ip,itW.CurrentWP().ValueOnS1());
168     else if (SI == 2) points2d.SetValue(ip,itW.CurrentWP().ValueOnS2());
169   }
170   Handle(Geom2d_Curve) C=TopOpeBRepTool_CurveTool::MakeBSpline1fromPnt2d(points2d);
171   return C;
172 }