0024624: Lost word in license statement in source files
[occt.git] / src / BRepTools / BRepTools_GTrsfModification.cxx
1 // Created on: 1996-12-30
2 // Created by: Stagiaire Mary FABIEN
3 // Copyright (c) 1996-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 <BRepTools_GTrsfModification.ixx>
18
19 #include <Geom_Plane.hxx>
20 #include <Geom_Line.hxx>
21 #include <Geom_TrimmedCurve.hxx>
22 #include <Geom2d_TrimmedCurve.hxx>
23 #include <Geom_BSplineSurface.hxx>
24 #include <Geom_BezierSurface.hxx>
25 #include <Geom_BSplineCurve.hxx>
26 #include <Geom_BezierCurve.hxx>
27 #include <Standard_Type.hxx>
28 #include <BRep_Tool.hxx>
29 #include <gp_GTrsf2d.hxx>
30 #include <gp_XYZ.hxx>
31 #include <gp_TrsfForm.hxx>
32 #include <Standard_NoSuchObject.hxx>
33
34 #include <gp.hxx>
35 #include <GeomLib.hxx>
36 #include <TopAbs.hxx>
37
38 //=======================================================================
39 //function : BRepTools_GTrsfModification
40 //purpose  : 
41 //=======================================================================
42
43 BRepTools_GTrsfModification::BRepTools_GTrsfModification(const gp_GTrsf& T) :
44 myGTrsf(T)
45 {
46   // on prend comme dilatation maximale pour la tolerance la norme sup
47   Standard_Real loc1, loc2, loc3, loc4;
48
49   loc1 = Max(Abs(T.Value(1,1)), Abs(T.Value(1,2)));
50   loc2 = Max(Abs(T.Value(2,1)), Abs(T.Value(2,2)));
51   loc3 = Max(Abs(T.Value(3,1)), Abs(T.Value(3,2)));
52   loc4 = Max(Abs(T.Value(1,3)), Abs(T.Value(2,3)));
53
54   loc1 = Max(loc1, loc2);
55   loc2 = Max(loc3, loc4);
56
57   loc1 = Max(loc1, loc2);
58
59   myGScale = Max(loc1, Abs(T.Value(3,3)));
60 }
61
62
63 //=======================================================================
64 //function : GTrsf
65 //purpose  : 
66 //=======================================================================
67
68 gp_GTrsf& BRepTools_GTrsfModification::GTrsf ()
69 {
70   return myGTrsf;
71 }
72
73 //=======================================================================
74 //function : NewSurface
75 //purpose  : 
76 //=======================================================================
77
78 Standard_Boolean BRepTools_GTrsfModification::NewSurface
79       (const TopoDS_Face& F,
80        Handle(Geom_Surface)& S,
81        TopLoc_Location& L,
82        Standard_Real& Tol,
83        Standard_Boolean& RevWires,
84        Standard_Boolean& RevFace)
85 {
86   gp_GTrsf gtrsf;
87   gtrsf.SetVectorialPart(myGTrsf.VectorialPart());
88   gtrsf.SetTranslationPart(myGTrsf.TranslationPart());
89   S = Handle(Geom_Surface)::DownCast(BRep_Tool::Surface(F,L)->Copy());
90
91   Tol = BRep_Tool::Tolerance(F);
92   Tol *= myGScale;
93   RevWires = Standard_False;
94   RevFace = myGTrsf.IsNegative();
95   S = Handle(Geom_Surface)::DownCast(S->Transformed(L.Transformation()));
96   
97   Handle(Standard_Type) TheTypeS = S->DynamicType();
98   if (TheTypeS == STANDARD_TYPE(Geom_BSplineSurface)) {
99     Handle(Geom_BSplineSurface) S2 = Handle(Geom_BSplineSurface)::DownCast(S);
100     for(Standard_Integer i = 1; i <= S2->NbUPoles(); i++) 
101       for(Standard_Integer j = 1; j <= S2->NbVPoles(); j++) {
102         gp_XYZ coor(S2->Pole(i, j).Coord());
103         gtrsf.Transforms(coor);
104         gp_Pnt P(coor);
105         S2->SetPole(i, j, P);
106       }
107   }
108   else
109     if (TheTypeS == STANDARD_TYPE(Geom_BezierSurface)) {
110       Handle(Geom_BezierSurface) S2 = Handle(Geom_BezierSurface)::DownCast(S);
111       for(Standard_Integer i = 1; i <= S2->NbUPoles(); i++) 
112         for(Standard_Integer j = 1; j <= S2->NbVPoles(); j++) {
113           gp_XYZ coor(S2->Pole(i, j).Coord());
114           gtrsf.Transforms(coor);
115           gp_Pnt P(coor);
116           S2->SetPole(i, j, P);
117         }
118     }
119     else{
120       Standard_NoSuchObject::Raise("BRepTools_GTrsfModification : Pb no BSpline/Bezier Type Surface");
121     }
122
123   L.Identity();
124   return Standard_True;
125 }
126
127
128 //=======================================================================
129 //function : NewCurve
130 //purpose  : 
131 //=======================================================================
132
133 Standard_Boolean BRepTools_GTrsfModification::NewCurve
134 (const TopoDS_Edge& E, 
135  Handle(Geom_Curve)& C,
136  TopLoc_Location& L, 
137  Standard_Real& Tol)
138 {
139   Standard_Real f,l;
140   gp_GTrsf gtrsf;
141   gtrsf.SetVectorialPart(myGTrsf.VectorialPart());
142   gtrsf.SetTranslationPart(myGTrsf.TranslationPart());
143   Tol = BRep_Tool::Tolerance(E)*myGScale;
144   C = BRep_Tool::Curve(E, L, f, l);
145   
146   if (!C.IsNull()) {
147     C = Handle(Geom_Curve)::DownCast(C->Copy()->Transformed(L.Transformation()));
148     Handle(Standard_Type) TheTypeC = C->DynamicType();
149     if (TheTypeC == STANDARD_TYPE(Geom_BSplineCurve)) {
150       Handle(Geom_BSplineCurve) C2 = Handle(Geom_BSplineCurve)::DownCast(C);
151       for(Standard_Integer i = 1; i <= C2->NbPoles(); i++) {
152         gp_XYZ coor(C2->Pole(i).Coord());
153         gtrsf.Transforms(coor);
154         gp_Pnt P(coor);
155         C2->SetPole(i, P);
156       }
157     }
158     else
159       if(TheTypeC == STANDARD_TYPE(Geom_BezierCurve)) {
160         Handle(Geom_BezierCurve) C2 = Handle(Geom_BezierCurve)::DownCast(C);
161         for(Standard_Integer i = 1; i <= C2->NbPoles(); i++) {
162           gp_XYZ coor(C2->Pole(i).Coord());
163           gtrsf.Transforms(coor);
164           gp_Pnt P(coor);
165           C2->SetPole(i, P);
166         }
167       }
168       else {
169         Standard_NoSuchObject::Raise("BRepTools_GTrsfModification : Pb no BSpline/Bezier Type Curve");
170       }
171     C = new Geom_TrimmedCurve(C, f, l);
172   }
173   L.Identity() ;  
174   return Standard_True;
175 }
176
177 //=======================================================================
178 //function : NewPoint
179 //purpose  : 
180 //=======================================================================
181
182 Standard_Boolean BRepTools_GTrsfModification::NewPoint
183 (const TopoDS_Vertex& V, 
184  gp_Pnt& P, 
185  Standard_Real& Tol)
186 {
187   gp_Pnt Pnt = BRep_Tool::Pnt(V);
188   Tol = BRep_Tool::Tolerance(V);
189   Tol *= myGScale;
190   gp_XYZ coor(Pnt.Coord());
191   myGTrsf.Transforms(coor);
192   P.SetXYZ(coor);
193
194   return Standard_True;
195 }
196
197 //=======================================================================
198 //function : NewCurve2d
199 //purpose  : 
200 //=======================================================================
201
202 Standard_Boolean BRepTools_GTrsfModification::NewCurve2d
203     (const TopoDS_Edge& E, 
204      const TopoDS_Face& F, 
205      const TopoDS_Edge&, 
206      const TopoDS_Face&, 
207      Handle(Geom2d_Curve)& C,
208      Standard_Real& Tol)
209 {
210   TopLoc_Location loc;
211   Tol = BRep_Tool::Tolerance(E);
212   Tol *= myGScale;
213   Standard_Real f,l;
214   C = BRep_Tool::CurveOnSurface(E,F,f,l);
215   C = new Geom2d_TrimmedCurve(C, f, l);
216   return Standard_True;
217 }
218
219 //=======================================================================
220 //function : NewParameter
221 //purpose  : 
222 //=======================================================================
223
224 Standard_Boolean BRepTools_GTrsfModification::NewParameter
225    (const TopoDS_Vertex& V, 
226     const TopoDS_Edge& E, 
227     Standard_Real& P, 
228     Standard_Real& Tol)
229 {
230   Tol = BRep_Tool::Tolerance(V);
231   Tol *= myGScale;
232   P = BRep_Tool::Parameter(V,E);
233   return Standard_True;
234 }
235
236 //=======================================================================
237 //function : Continuity
238 //purpose  : 
239 //=======================================================================
240
241 GeomAbs_Shape BRepTools_GTrsfModification::Continuity
242   (const TopoDS_Edge& E,
243    const TopoDS_Face& F1,
244    const TopoDS_Face& F2,
245    const TopoDS_Edge&,
246    const TopoDS_Face&,
247    const TopoDS_Face&)
248 {
249   return BRep_Tool::Continuity(E,F1,F2);
250 }
251
252