0022627: Change OCCT memory management defaults
[occt.git] / src / AdvApp2Var / AdvApp2Var_Network.cxx
CommitLineData
7fd59977 1// File: AdvApp2Var_Network.cxx
2// Created: Tue Jul 2 12:12:24 1996
3// Author: Joelle CHAUVET
4// <jct@sgi38>
5// Modified: Mon Dec 9 11:39:13 1996
6// by: Joelle CHAUVET
7// G1135 : empty constructor
8
9
10#include <AdvApp2Var_Network.ixx>
11#include <AdvApp2Var_Patch.hxx>
12#include <AdvApp2Var_SequenceOfPatch.hxx>
13#include <TColStd_SequenceOfReal.hxx>
14
15//==========================================================================================
16//function : AdvApp2Var_Network
17//purpose :
18//==========================================================================================
19
20AdvApp2Var_Network::AdvApp2Var_Network()
21{
22}
23
24
25//==========================================================================================
26//function : AdvApp2Var_Network
27//purpose :
28//==========================================================================================
29
30AdvApp2Var_Network::AdvApp2Var_Network(const AdvApp2Var_SequenceOfPatch& Net,
31 const TColStd_SequenceOfReal& TheU,
32 const TColStd_SequenceOfReal& TheV)
33{
34 myNet=Net;
35 myUParameters=TheU;
36 myVParameters=TheV;
37}
38
39//==========================================================================================
40//function : FirstNotApprox
41//purpose : return the first Patch not approximated
42//==========================================================================================
43
44Standard_Boolean AdvApp2Var_Network::FirstNotApprox(Standard_Integer& Index) const
45{
46 Standard_Boolean good = Standard_True;
47 Standard_Integer i;
48 for (i = 1; i <= myNet.Length() && good; i++) {
49 good = myNet.Value(i).IsApproximated();
50 if (!good) {Index = i;}
51 }
52 return !good;
53}
54
55//==========================================================================================
56//function : UpdateInU
57//purpose : modification and insertion of patches and parameters
58//==========================================================================================
59
60void AdvApp2Var_Network::UpdateInU(const Standard_Real CuttingValue)
61{
62
63// insertion du nouveau parametre de decoupe
64 Standard_Integer i=1,j;
65 while (myUParameters.Value(i)<CuttingValue) {
66 i++;
67 }
68 myUParameters.InsertBefore(i,CuttingValue);
69
70 Standard_Integer indice;
71 for (j=1; j< myVParameters.Length() ; j++){
72
73// modification des patches concernes par la decoupe
74 AdvApp2Var_Patch Pat;
75 indice = (myUParameters.Length()-1) * (j-1) + i - 1;
76 Pat = myNet.Value(indice);
77 Pat.ChangeDomain(Pat.U0(), CuttingValue, Pat.V0(), Pat.V1());
78 Pat.ResetApprox();
79 myNet.SetValue(indice, Pat);
80
81// insertion des nouveaux patches
82 AdvApp2Var_Patch NewPat(CuttingValue,myUParameters.Value(i+1),
83 myVParameters.Value(j),myVParameters.Value(j+1),
84 Pat.UOrder(),Pat.VOrder());
85 NewPat.ResetApprox();
86 myNet.InsertAfter(indice, NewPat);
87 }
88
89}
90
91//==========================================================================================
92//function : UpdateInV
93//purpose : modification and insertion of patches and parameters
94//==========================================================================================
95
96void AdvApp2Var_Network::UpdateInV(const Standard_Real CuttingValue)
97{
98
99// insertion du nouveau parametre de decoupe
100 Standard_Integer i,j=1;
101 AdvApp2Var_Patch Pat;
102 while (myVParameters.Value(j)<CuttingValue) {
103 j++;
104 }
105 myVParameters.InsertBefore(j,CuttingValue);
106
107// modification des patches concernes par la decoupe
108 Standard_Integer indice;
109 for (i=1; i< myUParameters.Length() ; i++){
110 indice = (myUParameters.Length()-1) * (j-2) + i;
111 Pat = myNet.Value(indice);
112 Pat.ChangeDomain(Pat.U0(), Pat.U1(), Pat.V0(), CuttingValue);
113 Pat.ResetApprox();
114 myNet.SetValue(indice,Pat);
115 }
116
117// insertion des nouveaux patches
118 for (i=1; i< myUParameters.Length() ; i++){
119 indice = (myUParameters.Length()-1) * (j-1) + i-1;
120 AdvApp2Var_Patch NewPat(myUParameters.Value(i), myUParameters.Value(i+1),
121 CuttingValue,myVParameters.Value(j+1),
122 Pat.UOrder(),Pat.VOrder());
123 NewPat.ResetApprox();
124 myNet.InsertAfter(indice,NewPat);
125 }
126}
127
128//=======================================================================
129//function : SameDegree
130//purpose : same numbers of coefficients for all patches
131//=======================================================================
132
133void AdvApp2Var_Network::SameDegree(const Standard_Integer iu,
134 const Standard_Integer iv,
135 Standard_Integer& ncfu,
136 Standard_Integer& ncfv)
137{
138
139// calcul des coeff. max avec init selon l'ordre de continuite
140 Standard_Integer IndPat;
141 ncfu = 2*iu+2;
142 ncfv = 2*iv+2;
143 for (IndPat=1;IndPat<=myNet.Length();IndPat++) {
144 ncfu = Max(ncfu,myNet.Value(IndPat).NbCoeffInU());
145 ncfv = Max(ncfv,myNet.Value(IndPat).NbCoeffInV());
146 }
147
148// augmentation des nombres de coeff.
149 AdvApp2Var_Patch Pat;
150 for (IndPat=1;IndPat<=myNet.Length();IndPat++) {
151 Pat = myNet.Value(IndPat);
152 Pat.ChangeNbCoeff(ncfu,ncfv);
153 myNet.SetValue(IndPat,Pat);
154 }
155
156}
157
158//=======================================================================
159//function : NbPatch
160//purpose :
161//=======================================================================
162
163Standard_Integer AdvApp2Var_Network::NbPatch() const
164{
165 return myNet.Length();
166}
167
168//=======================================================================
169//function : NbPatchInU
170//purpose :
171//=======================================================================
172
173Standard_Integer AdvApp2Var_Network::NbPatchInU() const
174{
175 return myUParameters.Length()-1;
176}
177
178//=======================================================================
179//function : NbPatchInV
180//purpose :
181//=======================================================================
182
183Standard_Integer AdvApp2Var_Network::NbPatchInV() const
184{
185 return myVParameters.Length()-1;
186}
187
188//=======================================================================
189//function : UParameter
190//purpose :
191//=======================================================================
192
193Standard_Real AdvApp2Var_Network::UParameter(const Standard_Integer Index) const
194{
195 return myUParameters.Value(Index);
196}
197
198//=======================================================================
199//function : VParameter
200//purpose :
201//=======================================================================
202
203Standard_Real AdvApp2Var_Network::VParameter(const Standard_Integer Index) const
204{
205 return myVParameters.Value(Index);
206}
207