0023533: Unitialized variables used, IntTools_TopolTool.cxx
[occt.git] / src / ShapeAnalysis / ShapeAnalysis_TransferParameters.cxx
1 // Copyright (c) 1999-2012 OPEN CASCADE SAS
2 //
3 // The content of this file is subject to the Open CASCADE Technology Public
4 // License Version 6.5 (the "License"). You may not use the content of this file
5 // except in compliance with the License. Please obtain a copy of the License
6 // at http://www.opencascade.org and read it completely before using this file.
7 //
8 // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
9 // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
10 //
11 // The Original Code and all software distributed under the License is
12 // distributed on an "AS IS" basis, without warranty of any kind, and the
13 // Initial Developer hereby disclaims all such warranties, including without
14 // limitation, any warranties of merchantability, fitness for a particular
15 // purpose or non-infringement. Please see the License for the specific terms
16 // and conditions governing the rights and limitations under the License.
17
18 #include <ShapeAnalysis_TransferParameters.ixx>
19 #include <Geom_Curve.hxx>
20 #include <Geom2d_Curve.hxx>
21 #include <ShapeAnalysis_Edge.hxx>
22 #include <TColStd_HArray1OfReal.hxx>
23 #include <BRep_Tool.hxx>
24 #include <gp.hxx>
25 #include <ShapeBuild_Edge.hxx>
26
27
28 //=======================================================================
29 //function : ShapeAnalysis_TransferParameters
30 //purpose  : 
31 //=======================================================================
32
33 ShapeAnalysis_TransferParameters::ShapeAnalysis_TransferParameters()
34 {
35   myScale = 1.;
36   myShift = 0.;
37 }
38
39
40 //=======================================================================
41 //function : ShapeAnalysis_TransferParameters
42 //purpose  : 
43 //=======================================================================
44
45 ShapeAnalysis_TransferParameters::ShapeAnalysis_TransferParameters(const TopoDS_Edge& E,
46                                                                    const TopoDS_Face& F)
47 {
48   Init(E,F);
49 }
50
51 //=======================================================================
52 //function : Init
53 //purpose  : 
54 //=======================================================================
55
56 void ShapeAnalysis_TransferParameters::Init(const TopoDS_Edge& E, const TopoDS_Face& F) 
57 {
58   myScale = 1.;
59   myShift = 0.;
60   Standard_Real l,f,l2d = 0.0,f2d = 0.0;
61   TopLoc_Location L;
62   myEdge = E;
63   ShapeAnalysis_Edge sae;
64   Handle(Geom_Curve) curve3d;// = BRep_Tool::Curve (E,f,l);
65   sae.Curve3d ( E, curve3d, f, l ,Standard_False);
66   myFirst = f;
67   myLast = l;
68   Handle(Geom2d_Curve) curve2d;// = BRep_Tool::CurveOnSurface (E, F, f2d,l2d);
69   // ShapeAnalysis_Edge sae;
70   if (! F.IsNull() ) { // process free edges
71     sae.PCurve ( E, F, curve2d, f2d, l2d,Standard_False );
72   }
73   myFirst2d = f2d;
74   myLast2d = l2d;
75   myFace = F;
76   if ( curve3d.IsNull() || curve2d.IsNull() ) return;
77
78   Standard_Real ln2d  = l2d - f2d;
79   Standard_Real ln3d  = l - f;
80   myScale = ( ln3d <= gp::Resolution() ? 1. : ln2d / ln3d );
81   myShift =  f2d - f * myScale;
82 }
83
84 //=======================================================================
85 //function : SetMaxTolerance
86 //purpose  : 
87 //=======================================================================
88
89 void ShapeAnalysis_TransferParameters::SetMaxTolerance( const Standard_Real maxtol )
90 {
91   myMaxTolerance = maxtol;
92 }
93
94
95 //=======================================================================
96 //function : Perform
97 //purpose  : 
98 //=======================================================================
99
100
101 Handle(TColStd_HSequenceOfReal) ShapeAnalysis_TransferParameters::Perform
102         (const Handle(TColStd_HSequenceOfReal)& Params,
103          const Standard_Boolean To2d)
104 {
105   Handle(TColStd_HSequenceOfReal) res = new TColStd_HSequenceOfReal;
106   for (Standard_Integer i = 1 ; i <= Params->Length(); i++) 
107     res->Append(Perform(Params->Value(i),To2d));
108  return res; 
109   
110 }
111
112
113 //=======================================================================
114 //function : Perform
115 //purpose  : 
116 //=======================================================================
117
118 Standard_Real ShapeAnalysis_TransferParameters::Perform(const Standard_Real Param,
119                                                         const Standard_Boolean To2d) 
120 {
121   Standard_Real NewParam;
122   if(To2d) 
123     NewParam = myShift + Param*myScale;
124   else
125     NewParam =  -myShift/myScale + Param*1./myScale;
126   return NewParam;
127 }
128
129
130 //=======================================================================
131 //function : TransferRange
132 //purpose  : 
133 //=======================================================================
134
135 void ShapeAnalysis_TransferParameters::TransferRange(TopoDS_Edge& newEdge,
136                                                      const Standard_Real prevPar,
137                                                      const Standard_Real currPar,
138                                                      const Standard_Boolean Is2d) 
139 {
140   ShapeBuild_Edge sbe;
141   if(Is2d) {
142     Standard_Real span2d = myLast2d - myFirst2d;  
143     Standard_Real tmp1,tmp2;
144     if(prevPar > currPar) {
145       tmp1 = currPar;
146       tmp2 = prevPar;
147     }
148     else {
149       tmp1 = prevPar;
150       tmp2 = currPar;
151     }
152     Standard_Real alpha = (tmp1-myFirst2d) / span2d;
153     Standard_Real beta  = (tmp2 - myFirst2d) / span2d;
154       sbe.CopyRanges(newEdge,myEdge, alpha, beta);
155   }
156   else {
157     Standard_Real alpha = (prevPar-myFirst)/(myLast - myFirst);
158     Standard_Real beta  = (currPar - myFirst)/(myLast - myFirst);
159     sbe.CopyRanges(newEdge,myEdge, alpha, beta);
160  }
161 }
162
163
164 //=======================================================================
165 //function : IsSameRange
166 //purpose  : 
167 //=======================================================================
168
169 Standard_Boolean ShapeAnalysis_TransferParameters::IsSameRange() const
170 {
171   return myShift == 0. && myScale == 1.;
172 }