0030609: Coding - eliminate warnings issued by gcc 8.1.0
[occt.git] / src / QABugs / QABugs_20.cxx
1 // Created on: 2015-10-26
2 // Created by: Nikolai BUKHALOV
3 // Copyright (c) 2002-2014 OPEN CASCADE SAS
4 //
5 // This file is part of Open CASCADE Technology software library.
6 //
7 // This library is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
12 //
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
15
16 #include <QABugs.hxx>
17
18 #include <gp_Ax2.hxx>
19 #include <Extrema_GenLocateExtPS.hxx>
20 #include <Geom_Circle.hxx>
21 #include <Geom_SurfaceOfLinearExtrusion.hxx>
22 #include <NCollection_List.hxx>
23 #include <TColgp_Array2OfPnt.hxx>
24 #include <TColStd_Array2OfReal.hxx>
25 #include <TColStd_Array1OfReal.hxx>
26 #include <TColStd_Array1OfInteger.hxx>
27 #include <Geom_BezierCurve.hxx>
28 #include <Geom_BSplineSurface.hxx>
29 #include <GeomConvert.hxx>
30 #include <Geom2d_Curve.hxx>
31 #include <Geom2d_Line.hxx>
32 #include <GeomFill_BSplineCurves.hxx>
33 #include <Draw.hxx>
34 #include <DrawTrSurf.hxx>
35 #include <ShapeConstruct_ProjectCurveOnSurface.hxx>
36
37 #include <TopExp.hxx>
38 #include <TopoDS_Vertex.hxx>
39 #include <BRep_Tool.hxx>
40 #include <TopoDS_Edge.hxx>
41 #include <BRep_Builder.hxx>
42 #include <BRepTools.hxx>
43 #include <BRepAdaptor_Surface.hxx>
44 #include <TopoDS.hxx>
45 #include <DBRep.hxx>
46
47 #include <BRepGProp.hxx>
48 #include <DDocStd.hxx>
49 #include <GProp_GProps.hxx>
50 #include <TDocStd_Document.hxx>
51 #include <XCAFDimTolObjects_DatumObject.hxx>
52 #include <XCAFDimTolObjects_DimensionObject.hxx>
53 #include <XCAFDimTolObjects_GeomToleranceObject.hxx>
54 #include <XCAFDoc_Datum.hxx>
55 #include <XCAFDoc_Dimension.hxx>
56 #include <XCAFDoc_DimTolTool.hxx>
57 #include <XCAFDoc_DocumentTool.hxx>
58 #include <XCAFDoc_GeomTolerance.hxx>
59 #include <XCAFDoc_ShapeTool.hxx>
60
61 #include <HLRAppli_ReflectLines.hxx>
62 #include <HLRBRep_PolyHLRToShape.hxx>
63 #include <HLRBRep_PolyAlgo.hxx>
64
65 #include <Standard_Failure.hxx>
66
67 #include <Bnd_OBB.hxx>
68 #include <BRepBndLib.hxx>
69 #include <OSD_Timer.hxx>
70
71 #include <limits>
72
73 //=======================================================================
74 //function : SurfaceGenOCC26675_1 
75 //purpose  : Generates a surface for intersect (in corresponding
76 //            test case). If we save these surfaces to the disk
77 //            then bug will not be reproduced. Therefore, this generator
78 //            is very important (despite its taking many lines of the code).
79 //=======================================================================
80 static Standard_Integer SurfaceGenOCC26675_1( Draw_Interpretor& theDI,
81                                               Standard_Integer  theNArg,
82                                               const char ** theArgVal)
83 {
84
85   if(theNArg < 2)
86   {
87     theDI << "Use OCC26675_1 result\n";
88     return 1;
89   }
90
91   const gp_Pnt aCircCenter(-112.93397037070100000000, +177.52792379072199000000, +10.63374076104853900000);
92   const gp_Dir aCircN(+0.00000000000000000000, +1.00000000000000000000, +0.00000000000000000000);
93   const gp_Dir aCircX(+0.00000000000000000000, -0.00000000000000000000, +1.00000000000000000000);
94   const gp_Dir anExtrDir(-500.00000000000000000000, -866.02540378443609000000, +0.00000000000000000000);
95   const gp_Ax2 aCircAxes(aCircCenter, aCircN, aCircX);
96   const Handle(Geom_Curve) aCurv = new Geom_Circle(aCircAxes, +50.00000000000000000000);
97
98   const Handle(Geom_Surface) aS2 = new Geom_SurfaceOfLinearExtrusion(aCurv, anExtrDir);
99
100   TColgp_Array2OfPnt aPoles(1, 7, 1, 81);
101   TColStd_Array2OfReal aWeights(1, 7, 1, 81);
102   TColStd_Array1OfReal aUKnots(1, 2), aVKnots(1, 12);
103   TColStd_Array1OfInteger aUMult(1, 2), aVMult(1, 12);
104   const Standard_Integer aUDegree = 6, aVDegree = 8;
105
106   aUKnots(1) = +0.00000000000000000000;
107   aUKnots(2) = +1.00000000000000000000;
108   aVKnots(1) = +0.08911853946147080300;
109   aVKnots(2) = +0.11779167587451674000;
110   aVKnots(3) = +0.14583467562325506000;
111   aVKnots(4) = +0.20255081178503931000;
112   aVKnots(5) = +0.25926694794682359000;
113   aVKnots(6) = +0.31598308410860781000;
114   aVKnots(7) = +0.34262437462234741000;
115   aVKnots(8) = +0.37067364397889985000;
116   aVKnots(9) = +0.39731552779654306000;
117   aVKnots(10) = +0.42536420384919182000;
118   aVKnots(11) = +0.45200329235672548000;
119   aVKnots(12) = +0.47802918742799144000;
120
121   aUMult(1) = 7;
122   aUMult(2) = 7;
123   aVMult(1) = 9;
124   aVMult(2) = 7;
125   aVMult(3) = 7;
126   aVMult(4) = 7;
127   aVMult(5) = 7;
128   aVMult(6) = 7;
129   aVMult(7) = 7;
130   aVMult(8) = 7;
131   aVMult(9) = 7;
132   aVMult(10) = 8;
133   aVMult(11) = 8;
134   aVMult(12) = 9;
135
136   ////
137   {
138     aWeights.ChangeValue(1, 1) = +1.02986327036737910000;
139     aPoles.ChangeValue(1, 1) = gp_Pnt(+131.75315905495660000000, +2.88570510351864900000, -66.24709307590461500000);
140     aWeights.ChangeValue(1, 2) = +1.02989244478761060000;
141     aPoles.ChangeValue(1, 2) = gp_Pnt(+128.70876344053133000000, +2.88791208181246970000, -67.92914281439198000000);
142     aWeights.ChangeValue(1, 3) = +1.02991676091113950000;
143     aPoles.ChangeValue(1, 3) = gp_Pnt(+125.64133203841195000000, +2.88975018186799830000, -69.56968825975690200000);
144     aWeights.ChangeValue(1, 4) = +1.02993613450133650000;
145     aPoles.ChangeValue(1, 4) = gp_Pnt(+122.55164101294532000000, +2.89121448973680460000, -71.16831921321855200000);
146     aWeights.ChangeValue(1, 5) = +1.02995970896170810000;
147     aPoles.ChangeValue(1, 5) = gp_Pnt(+119.44028474076808000000, +2.89299532863950050000, -72.72471137484106400000);
148     aWeights.ChangeValue(1, 6) = +1.02998196300928410000;
149     aPoles.ChangeValue(1, 6) = gp_Pnt(+116.30796917345266000000, +2.89467567823625730000, -74.23853925439507900000);
150     aWeights.ChangeValue(1, 7) = +1.02999781361772440000;
151     aPoles.ChangeValue(1, 7) = gp_Pnt(+113.15537818476763000000, +2.89587201010380560000, -75.70949847615843000000);
152     aWeights.ChangeValue(1, 8) = +1.03001626830283270000;
153     aPoles.ChangeValue(1, 8) = gp_Pnt(+109.98323502828077000000, +2.89726468512897210000, -77.13723994508107800000);
154     aWeights.ChangeValue(1, 9) = +1.03004822145815230000;
155     aPoles.ChangeValue(1, 9) = gp_Pnt(+103.60126699909762000000, +2.89967510685080440000, -79.90571269046952800000);
156     aWeights.ChangeValue(1, 10) = +1.03006364818936770000;
157     aPoles.ChangeValue(1, 10) = gp_Pnt(+100.39144092265354000000, +2.90083845616186050000, -81.24644132200651800000);
158     aWeights.ChangeValue(1, 11) = +1.03007725635592000000;
159     aPoles.ChangeValue(1, 11) = gp_Pnt(+97.16342330855667300000, +2.90186436688425700000, -82.54338871675531700000);
160     aWeights.ChangeValue(1, 12) = +1.03009045031501500000;
161     aPoles.ChangeValue(1, 12) = gp_Pnt(+93.91790293022438600000, +2.90285879918974650000, -83.79626764915399000000);
162     aWeights.ChangeValue(1, 13) = +1.03010285398183930000;
163     aPoles.ChangeValue(1, 13) = gp_Pnt(+90.65560197798836800000, +2.90379346029782100000, -85.00479786905465600000);
164     aWeights.ChangeValue(1, 14) = +1.03011393120350900000;
165     aPoles.ChangeValue(1, 14) = gp_Pnt(+87.37722618415423900000, +2.90462796925060120000, -86.16871841453435400000);
166     aWeights.ChangeValue(1, 15) = +1.03012484065787050000;
167     aPoles.ChangeValue(1, 15) = gp_Pnt(+84.08346762829417300000, +2.90544970249433290000, -87.28777941880029800000);
168     aWeights.ChangeValue(1, 16) = +1.03015471267321200000;
169     aPoles.ChangeValue(1, 16) = gp_Pnt(+74.15848807058078800000, +2.90769927244280210000, -90.50962423575197100000);
170     aWeights.ChangeValue(1, 17) = +1.03017194800922400000;
171     aPoles.ChangeValue(1, 17) = gp_Pnt(+67.48342008926763900000, +2.90899668032978950000, -92.47701903504494700000);
172     aWeights.ChangeValue(1, 18) = +1.03018680682765670000;
173     aPoles.ChangeValue(1, 18) = gp_Pnt(+60.75515833606132100000, +2.91011480947056490000, -94.26204121664201800000);
174     aWeights.ChangeValue(1, 19) = +1.03019958109549670000;
175     aPoles.ChangeValue(1, 19) = gp_Pnt(+53.97928154760177200000, +2.91107580930771360000, -95.86305268935117900000);
176     aWeights.ChangeValue(1, 20) = +1.03021050389503350000;
177     aPoles.ChangeValue(1, 20) = gp_Pnt(+47.16164692132413400000, +2.91189735380426780000, -97.27865560180262600000);
178     aWeights.ChangeValue(1, 21) = +1.03021974942385830000;
179     aPoles.ChangeValue(1, 21) = gp_Pnt(+40.30838837608569500000, +2.91259264267907050000, -98.50769317562559000000);
180     aWeights.ChangeValue(1, 22) = +1.03022743299486370000;
181     aPoles.ChangeValue(1, 22) = gp_Pnt(+33.42591476110869300000, +2.91317040233699530000, -99.54925039136011800000);
182     aWeights.ChangeValue(1, 23) = +1.03023979631718900000;
183     aPoles.ChangeValue(1, 23) = gp_Pnt(+19.61576136171939000000, +2.91409991934468550000, -101.25602945077115000000);
184     aWeights.ChangeValue(1, 24) = +1.03024450452679140000;
185     aPoles.ChangeValue(1, 24) = gp_Pnt(+12.68754355991407800000, +2.91445385083459700000, -101.92122234436175000000);
186     aWeights.ChangeValue(1, 25) = +1.03024781840890120000;
187     aPoles.ChangeValue(1, 25) = gp_Pnt(+5.74236948737514120000, +2.91470294045230770000, -102.39751844510502000000);
188     aWeights.ChangeValue(1, 26) = +1.03024979501192000000;
189     aPoles.ChangeValue(1, 26) = gp_Pnt(-1.21367831605073050000, +2.91485150371151920000, -102.68442590550356000000);
190     aWeights.ChangeValue(1, 27) = +1.03025046568879790000;
191     aPoles.ChangeValue(1, 27) = gp_Pnt(-8.17455041611474620000, +2.91490191238154670000, -102.78167594353056000000);
192     aWeights.ChangeValue(1, 28) = +1.03024983609703540000;
193     aPoles.ChangeValue(1, 28) = gp_Pnt(-15.13423127055194300000, +2.91485459458572780000, -102.68922293042964000000);
194     aWeights.ChangeValue(1, 29) = +1.03024788619868260000;
195     aPoles.ChangeValue(1, 29) = gp_Pnt(-22.08674002008992700000, +2.91470803482494080000, -102.40724441194320000000);
196     aWeights.ChangeValue(1, 30) = +1.03024126030624540000;
197     aPoles.ChangeValue(1, 30) = gp_Pnt(-35.96556766132121700000, +2.91420996731856930000, -101.46503408514069000000);
198     aWeights.ChangeValue(1, 31) = +1.03023657011944230000;
199     aPoles.ChangeValue(1, 31) = gp_Pnt(-42.89191729472150200000, +2.91385737699769360000, -100.80479886745856000000);
200     aWeights.ChangeValue(1, 32) = +1.03023047292900880000;
201     aPoles.ChangeValue(1, 32) = gp_Pnt(-49.79923779841396900000, +2.91339898565004060000, -99.95583114848535900000);
202     aWeights.ChangeValue(1, 33) = +1.03022290017099550000;
203     aPoles.ChangeValue(1, 33) = gp_Pnt(-56.68161614207340900000, +2.91282960709223810000, -98.91875138839027700000);
204     aWeights.ChangeValue(1, 34) = +1.03021374148842180000;
205     aPoles.ChangeValue(1, 34) = gp_Pnt(-63.53316994906088400000, +2.91214088593828220000, -97.69440448679608800000);
206     aWeights.ChangeValue(1, 35) = +1.03020284473128080000;
207     aPoles.ChangeValue(1, 35) = gp_Pnt(-70.34804877511381000000, +2.91132129711663760000, -96.28385939245710300000);
208     aWeights.ChangeValue(1, 36) = +1.03019001595653580000;
209     aPoles.ChangeValue(1, 36) = gp_Pnt(-77.12043535415037400000, +2.91035614521427500000, -94.68840860671046800000);
210     aWeights.ChangeValue(1, 37) = +1.03016805964614980000;
211     aPoles.ChangeValue(1, 37) = gp_Pnt(-86.96652166958519100000, +2.90870378328618400000, -92.08365976972685000000);
212     aWeights.ChangeValue(1, 38) = +1.03016062145972500000;
213     aPoles.ChangeValue(1, 38) = gp_Pnt(-90.07809790629383400000, +2.90814392820824040000, -91.21821667329717800000);
214     aWeights.ChangeValue(1, 39) = +1.03015268516758060000;
215     aPoles.ChangeValue(1, 39) = gp_Pnt(-93.17869710255469300000, +2.90754650188789080000, -90.31338955501080100000);
216     aWeights.ChangeValue(1, 40) = +1.03014422393874510000;
217     aPoles.ChangeValue(1, 40) = gp_Pnt(-96.26774201507643600000, +2.90690946644790090000, -89.36934028436292000000);
218     aWeights.ChangeValue(1, 41) = +1.03013520381253840000;
219     aPoles.ChangeValue(1, 41) = gp_Pnt(-99.34465666946248100000, +2.90623024256504880000, -88.38624129906430900000);
220     aWeights.ChangeValue(1, 42) = +1.03012558369857450000;
221     aPoles.ChangeValue(1, 42) = gp_Pnt(-102.40886646020824000000, +2.90550570939860810000, -87.36427556081821400000);
222     aWeights.ChangeValue(1, 43) = +1.03011531537676040000;
223     aPoles.ChangeValue(1, 43) = gp_Pnt(-105.45979824903711000000, +2.90473220450791560000, -86.30363650725728100000);
224     aWeights.ChangeValue(1, 44) = +1.03009266486593140000;
225     aPoles.ChangeValue(1, 44) = gp_Pnt(-111.76765655411073000000, +2.90302557752729130000, -84.02084620865503000000);
226     aWeights.ChangeValue(1, 45) = +1.03007954250893910000;
227     aPoles.ChangeValue(1, 45) = gp_Pnt(-115.02237879255169000000, +2.90203661863772000000, -82.79254553120374300000);
228     aWeights.ChangeValue(1, 46) = +1.03006700046846360000;
229     aPoles.ChangeValue(1, 46) = gp_Pnt(-118.26033551796380000000, +2.90109123094133370000, -81.51987347500843800000);
230     aWeights.ChangeValue(1, 47) = +1.03005153385518430000;
231     aPoles.ChangeValue(1, 47) = gp_Pnt(-121.48081153033489000000, +2.89992503429592440000, -80.20310945547186100000);
232     aWeights.ChangeValue(1, 48) = +1.03003663316288070000;
233     aPoles.ChangeValue(1, 48) = gp_Pnt(-124.68310204708784000000, +2.89880123910694910000, -78.84252385592422700000);
234     aWeights.ChangeValue(1, 49) = +1.03002002524051230000;
235     aPoles.ChangeValue(1, 49) = gp_Pnt(-127.86649232671233000000, +2.89754829341323060000, -77.43842231968982000000);
236     aWeights.ChangeValue(1, 50) = +1.03000192732161230000;
237     aPoles.ChangeValue(1, 50) = gp_Pnt(-131.03028254956638000000, +2.89618247462029290000, -75.99111259804850200000);
238     aWeights.ChangeValue(1, 51) = +1.02996526567113600000;
239     aPoles.ChangeValue(1, 51) = gp_Pnt(-137.09281139094972000000, +2.89341459629042360000, -73.11712223836046600000);
240     aWeights.ChangeValue(1, 52) = +1.02994403451589630000;
241     aPoles.ChangeValue(1, 52) = gp_Pnt(-139.99435839258939000000, +2.89181101472158900000, -71.69634981883045600000);
242     aWeights.ChangeValue(1, 53) = +1.02992866105538440000;
243     aPoles.ChangeValue(1, 53) = gp_Pnt(-142.87784656482347000000, +2.89064973421052680000, -70.23882874204873900000);
244     aWeights.ChangeValue(1, 54) = +1.02989968743283590000;
245     aPoles.ChangeValue(1, 54) = gp_Pnt(-145.74271824362268000000, +2.88845983550875030000, -68.74489127449217600000);
246     aWeights.ChangeValue(1, 55) = +1.02988222474524970000;
247     aPoles.ChangeValue(1, 55) = gp_Pnt(-148.58838121276386000000, +2.88713941077432070000, -67.21475112846350400000);
248     aWeights.ChangeValue(1, 56) = +1.02985386954408620000;
249     aPoles.ChangeValue(1, 56) = gp_Pnt(-151.41432118416620000000, +2.88499463682574180000, -65.64875099202183200000);
250     aWeights.ChangeValue(1, 57) = +1.02982704006090460000;
251     aPoles.ChangeValue(1, 57) = gp_Pnt(-154.21993049579214000000, +2.88296397171855910000, -64.04717955157212800000);
252     aWeights.ChangeValue(1, 58) = +1.02976639514278400000;
253     aPoles.ChangeValue(1, 58) = gp_Pnt(-160.00375832753414000000, +2.87837140815595260000, -60.64735416015690100000);
254     aWeights.ChangeValue(1, 59) = +1.02972545417711370000;
255     aPoles.ChangeValue(1, 59) = gp_Pnt(-162.97914403387477000000, +2.87526824819569480000, -58.84445149944087200000);
256     aWeights.ChangeValue(1, 60) = +1.02970377642253300000;
257     aPoles.ChangeValue(1, 60) = gp_Pnt(-165.92810584856278000000, +2.87362619373759860000, -56.99783055334398100000);
258     aWeights.ChangeValue(1, 61) = +1.02963665582001740000;
259     aPoles.ChangeValue(1, 61) = gp_Pnt(-168.85438185317770000000, +2.86853152516479340000, -55.11698298198095400000);
260     aWeights.ChangeValue(1, 62) = +1.02961756328192160000;
261     aPoles.ChangeValue(1, 62) = gp_Pnt(-171.75125340157436000000, +2.86708271055963240000, -53.19057330425229700000);
262     aWeights.ChangeValue(1, 63) = +1.02954937293527580000;
263     aPoles.ChangeValue(1, 63) = gp_Pnt(-174.62251681022158000000, +2.86190007017706360000, -51.22700225930964300000);
264     aWeights.ChangeValue(1, 64) = +1.02950097342691520000;
265     aPoles.ChangeValue(1, 64) = gp_Pnt(-177.46620192435449000000, +2.85821732043423180000, -49.22415777229338100000);
266     aWeights.ChangeValue(1, 65) = +1.02943612532291810000;
267     aPoles.ChangeValue(1, 65) = gp_Pnt(-180.28206426096281000000, +2.85327724467687100000, -47.18300981722491400000);
268     aWeights.ChangeValue(1, 66) = +1.02937840445786000000;
269     aPoles.ChangeValue(1, 66) = gp_Pnt(-182.89713737694305000000, +2.84888100315162470000, -45.28741010449485300000);
270     aWeights.ChangeValue(1, 67) = +1.02929786839840220000;
271     aPoles.ChangeValue(1, 67) = gp_Pnt(-185.48808576506855000000, +2.84272935508061810000, -43.35897595091199000000);
272     aWeights.ChangeValue(1, 68) = +1.02927785532845030000;
273     aPoles.ChangeValue(1, 68) = gp_Pnt(-188.05509745668041000000, +2.84122612975151250000, -41.39706700987362400000);
274     aWeights.ChangeValue(1, 69) = +1.02909457173363930000;
275     aPoles.ChangeValue(1, 69) = gp_Pnt(-190.59634219852757000000, +2.82717082550985440000, -39.40453806610211300000);
276     aWeights.ChangeValue(1, 70) = +1.02915656102508410000;
277     aPoles.ChangeValue(1, 70) = gp_Pnt(-193.11296933822229000000, +2.83195841118334000000, -37.37763511391345600000);
278     aWeights.ChangeValue(1, 71) = +1.02891246603941110000;
279     aPoles.ChangeValue(1, 71) = gp_Pnt(-195.60305999702362000000, +2.81322479805689340000, -35.32107774203857500000);
280     aWeights.ChangeValue(1, 72) = +1.02884001996307940000;
281     aPoles.ChangeValue(1, 72) = gp_Pnt(-198.06589030811097000000, +2.80764438138268390000, -33.23208121127716900000);
282     aWeights.ChangeValue(1, 73) = +1.02870418206103250000;
283     aPoles.ChangeValue(1, 73) = gp_Pnt(-200.50111697620073000000, +2.79717360924099090000, -31.11182660391394400000);
284     aWeights.ChangeValue(1, 74) = +1.02860417892814660000;
285     aPoles.ChangeValue(1, 74) = gp_Pnt(-202.93720652839650000000, +2.78949733525485710000, -28.99085629216911300000);
286     aWeights.ChangeValue(1, 75) = +1.02826579045547110000;
287     aPoles.ChangeValue(1, 75) = gp_Pnt(-205.34394850673777000000, +2.76315604312090550000, -26.83940109433629200000);
288     aWeights.ChangeValue(1, 76) = +1.02871793966742330000;
289     aPoles.ChangeValue(1, 76) = gp_Pnt(-207.72575255584553000000, +2.79855565223875710000, -24.65500081264426800000);
290     aWeights.ChangeValue(1, 77) = +1.02728787827176630000;
291     aPoles.ChangeValue(1, 77) = gp_Pnt(-210.07706367406874000000, +2.68725363743552850000, -22.43634910730148800000);
292     aWeights.ChangeValue(1, 78) = +1.02767535385809120000;
293     aPoles.ChangeValue(1, 78) = gp_Pnt(-212.39605978578481000000, +2.71705476277515070000, -20.20562112100595800000);
294     aWeights.ChangeValue(1, 79) = +1.02745809923169020000;
295     aPoles.ChangeValue(1, 79) = gp_Pnt(-214.68098626410506000000, +2.69985190382785320000, -17.91605900374278100000);
296     aWeights.ChangeValue(1, 80) = +1.02725110106359850000;
297     aPoles.ChangeValue(1, 80) = gp_Pnt(-216.94385389331507000000, +2.68435107488514250000, -15.61289037092123000000);
298     aWeights.ChangeValue(1, 81) = +1.02619749797986360000;
299     aPoles.ChangeValue(1, 81) = gp_Pnt(-219.16685583874414000000, +2.59983520096898510000, -13.28583956380401400000);
300     aWeights.ChangeValue(2, 1) = +1.00955713824395700000;
301     aPoles.ChangeValue(2, 1) = gp_Pnt(+131.76756408216349000000, +2.10451717388867540000, -66.27316135719137000000);
302     aWeights.ChangeValue(2, 2) = +1.00956608612165600000;
303     aPoles.ChangeValue(2, 2) = gp_Pnt(+128.72252404033563000000, +2.10631182699007670000, -67.95492700832653600000);
304     aWeights.ChangeValue(2, 3) = +1.00957354292813030000;
305     aPoles.ChangeValue(2, 3) = gp_Pnt(+125.65455798821807000000, +2.10780700070896730000, -69.59522708152212500000);
306     aWeights.ChangeValue(2, 4) = +1.00957948395970430000;
307     aPoles.ChangeValue(2, 4) = gp_Pnt(+122.56436007131990000000, +2.10899819276768510000, -71.19369911011085600000);
308     aWeights.ChangeValue(2, 5) = +1.00958671248272140000;
309     aPoles.ChangeValue(2, 5) = gp_Pnt(+119.45249930698063000000, +2.11044722765431250000, -72.74983445837314400000);
310     aWeights.ChangeValue(2, 6) = +1.00959353559448470000;
311     aPoles.ChangeValue(2, 6) = gp_Pnt(+116.31971419268339000000, +2.11181476538007030000, -74.26341133748536500000);
312     aWeights.ChangeValue(2, 7) = +1.00959839503054960000;
313     aPoles.ChangeValue(2, 7) = gp_Pnt(+113.16673272248508000000, +2.11278857229853930000, -75.73421464457315700000);
314     aWeights.ChangeValue(2, 8) = +1.00960405269294800000;
315     aPoles.ChangeValue(2, 8) = gp_Pnt(+109.99417142410560000000, +2.11392227976110990000, -77.16175403351917300000);
316     aWeights.ChangeValue(2, 9) = +1.00961384794963970000;
317     aPoles.ChangeValue(2, 9) = gp_Pnt(+103.61137952541701000000, +2.11588481923337430000, -79.92991318438167500000);
318     aWeights.ChangeValue(2, 10) = +1.00961857675621050000;
319     aPoles.ChangeValue(2, 10) = gp_Pnt(+100.40113044627800000000, +2.11683214779396200000, -81.27049552555527600000);
320     aWeights.ChangeValue(2, 11) = +1.00962274789480260000;
321     aPoles.ChangeValue(2, 11) = gp_Pnt(+97.17272090352022900000, +2.11766766635255620000, -82.56731642507010300000);
322     aWeights.ChangeValue(2, 12) = +1.00962679188946770000;
323     aPoles.ChangeValue(2, 12) = gp_Pnt(+93.92682593436140300000, +2.11847763961438810000, -83.82006598438695700000);
324     aWeights.ChangeValue(2, 13) = +1.00963059350869510000;
325     aPoles.ChangeValue(2, 13) = gp_Pnt(+90.66416580726762200000, +2.11923900414192050000, -85.02847304317147300000);
326     aWeights.ChangeValue(2, 14) = +1.00963398843777610000;
327     aPoles.ChangeValue(2, 14) = gp_Pnt(+87.38545325411524800000, +2.11991885797243330000, -86.19228543784532800000);
328     aWeights.ChangeValue(2, 15) = +1.00963733185346640000;
329     aPoles.ChangeValue(2, 15) = gp_Pnt(+84.09136475788710600000, +2.12058835416503610000, -87.31123582184922300000);
330     aWeights.ChangeValue(2, 16) = +1.00964648640037450000;
331     aPoles.ChangeValue(2, 16) = gp_Pnt(+74.16530685267888100000, +2.12242134451684360000, -90.53282418399284400000);
332     aWeights.ChangeValue(2, 17) = +1.00965176794147850000;
333     aPoles.ChangeValue(2, 17) = gp_Pnt(+67.48955141808187400000, +2.12347869023601370000, -92.50007118315201600000);
334     aWeights.ChangeValue(2, 18) = +1.00965632094816660000;
335     aPoles.ChangeValue(2, 18) = gp_Pnt(+60.76066172731987800000, +2.12439006790716880000, -94.28495774595940300000);
336     aWeights.ChangeValue(2, 19) = +1.00966023501695720000;
337     aPoles.ChangeValue(2, 19) = gp_Pnt(+53.98420072674593900000, +2.12517346720689600000, -95.88584819516199800000);
338     aWeights.ChangeValue(2, 20) = +1.00966358166845400000;
339     aPoles.ChangeValue(2, 20) = gp_Pnt(+47.16601123883578600000, +2.12584324589548320000, -97.30134659055448800000);
340     aWeights.ChangeValue(2, 21) = +1.00966641434734730000;
341     aPoles.ChangeValue(2, 21) = gp_Pnt(+40.31221541713015500000, +2.12641013013135180000, -98.53029698991525700000);
342     aWeights.ChangeValue(2, 22) = +1.00966876842241260000;
343     aPoles.ChangeValue(2, 22) = gp_Pnt(+33.42921418500849000000, +2.12688121470786750000, -99.57178366381829400000);
344     aWeights.ChangeValue(2, 23) = +1.00967255617655650000;
345     aPoles.ChangeValue(2, 23) = gp_Pnt(+19.61796125907087400000, +2.12763915883061920000, -101.27845724558523000000);
346     aWeights.ChangeValue(2, 24) = +1.00967399859793750000;
347     aPoles.ChangeValue(2, 24) = gp_Pnt(+12.68919279606528900000, +2.12792777824197280000, -101.94361028295506000000);
348     aWeights.ChangeValue(2, 25) = +1.00967501382968900000;
349     aPoles.ChangeValue(2, 25) = gp_Pnt(+5.74348853231593990000, +2.12813091177048630000, -102.41987704106546000000);
350     aWeights.ChangeValue(2, 26) = +1.00967561936957820000;
351     aPoles.ChangeValue(2, 26) = gp_Pnt(-1.21307744928976070000, +2.12825206894226590000, -102.70676666240287000000);
352     aWeights.ChangeValue(2, 27) = +1.00967582483410380000;
353     aPoles.ChangeValue(2, 27) = gp_Pnt(-8.17446448579617170000, +2.12829317854427910000, -102.80401081431219000000);
354     aWeights.ChangeValue(2, 28) = +1.00967563195849760000;
355     aPoles.ChangeValue(2, 28) = gp_Pnt(-15.13466558037753100000, +2.12825458864942170000, -102.71156371647888000000);
356     aWeights.ChangeValue(2, 29) = +1.00967503459672270000;
357     aPoles.ChangeValue(2, 29) = gp_Pnt(-22.08770764998126900000, +2.12813506662251010000, -102.42960214757312000000);
358     aWeights.ChangeValue(2, 30) = +1.00967300468446490000;
359     aPoles.ChangeValue(2, 30) = gp_Pnt(-35.96760988752987500000, +2.12772890088942160000, -101.48744752427969000000);
360     aWeights.ChangeValue(2, 31) = +1.00967156777535580000;
361     aPoles.ChangeValue(2, 31) = gp_Pnt(-42.89448004815705000000, +2.12744138030294440000, -100.82725372327035000000);
362     aWeights.ChangeValue(2, 32) = +1.00966969979090780000;
363     aPoles.ChangeValue(2, 32) = gp_Pnt(-49.80232400744441900000, +2.12706759457740000000, -99.97834162579670200000);
364     aWeights.ChangeValue(2, 33) = +1.00966737970297200000;
365     aPoles.ChangeValue(2, 33) = gp_Pnt(-56.68523628384353000000, +2.12660332632729520000, -98.94133225857957800000);
366     aWeights.ChangeValue(2, 34) = +1.00966457365849260000;
367     aPoles.ChangeValue(2, 34) = gp_Pnt(-63.53734456971785200000, +2.12604178346724470000, -97.71706998895581400000);
368     aWeights.ChangeValue(2, 35) = +1.00966123497950600000;
369     aPoles.ChangeValue(2, 35) = gp_Pnt(-70.35281013187348300000, +2.12537359908900880000, -96.30662240267085400000);
370     aWeights.ChangeValue(2, 36) = +1.00965730416314050000;
371     aPoles.ChangeValue(2, 36) = gp_Pnt(-77.12582820180557500000, +2.12458683129447450000, -94.71128014840769500000);
372     aWeights.ChangeValue(2, 37) = +1.00965057624220010000;
373     aPoles.ChangeValue(2, 37) = gp_Pnt(-86.97287762202962800000, +2.12324005462031540000, -92.10671540000876700000);
374     aWeights.ChangeValue(2, 38) = +1.00964829695753690000;
375     aPoles.ChangeValue(2, 38) = gp_Pnt(-90.08473551349412400000, +2.12278376932639290000, -91.24134329153459100000);
376     aWeights.ChangeValue(2, 39) = +1.00964586498084840000;
377     aPoles.ChangeValue(2, 39) = gp_Pnt(-93.18562459494498300000, +2.12229689243319890000, -90.33659169532975900000);
378     aWeights.ChangeValue(2, 40) = +1.00964327207694590000;
379     aPoles.ChangeValue(2, 40) = gp_Pnt(-96.27496896689456200000, +2.12177776971417840000, -89.39262240039663300000);
380     aWeights.ChangeValue(2, 41) = +1.00964050782222770000;
381     aPoles.ChangeValue(2, 41) = gp_Pnt(-99.35219429474524600000, +2.12122430736176200000, -88.40960770124299000000);
382     aWeights.ChangeValue(2, 42) = +1.00963755960468140000;
383     aPoles.ChangeValue(2, 42) = gp_Pnt(-102.41672784011750000000, +2.12063397196916760000, -87.38773038403248000000);
384     aWeights.ChangeValue(2, 43) = +1.00963441262388320000;
385     aPoles.ChangeValue(2, 43) = gp_Pnt(-105.46799849165807000000, +2.12000379050942020000, -86.32718371153289600000);
386     aWeights.ChangeValue(2, 44) = +1.00962747055142050000;
387     aPoles.ChangeValue(2, 44) = gp_Pnt(-111.77654530973133000000, +2.11861352771318150000, -84.04460889409097000000);
388     aWeights.ChangeValue(2, 45) = +1.00962344856326270000;
389     aPoles.ChangeValue(2, 45) = gp_Pnt(-115.03162075269803000000, +2.11780798556167320000, -82.81644583890866300000);
390     aWeights.ChangeValue(2, 46) = +1.00961960432211730000;
391     aPoles.ChangeValue(2, 46) = gp_Pnt(-118.26993104545312000000, +2.11703799459344700000, -81.54389579486141300000);
392     aWeights.ChangeValue(2, 47) = +1.00961486342011010000;
393     aPoles.ChangeValue(2, 47) = gp_Pnt(-121.49080060905077000000, +2.11608829135299810000, -80.22729418526657200000);
394     aWeights.ChangeValue(2, 48) = +1.00961029578343630000;
395     aPoles.ChangeValue(2, 48) = gp_Pnt(-124.69348951442340000000, +2.11517321690879800000, -78.86685283462101400000);
396     aWeights.ChangeValue(2, 49) = +1.00960520454014850000;
397     aPoles.ChangeValue(2, 49) = gp_Pnt(-127.87731027004676000000, +2.11415312105035590000, -77.46291256687052900000);
398     aWeights.ChangeValue(2, 50) = +1.00959965618773250000;
399     aPoles.ChangeValue(2, 50) = gp_Pnt(-131.04156234039974000000, +2.11304129636208420000, -76.01577573259778800000);
400     aWeights.ChangeValue(2, 51) = +1.00958841592243690000;
401     aPoles.ChangeValue(2, 51) = gp_Pnt(-137.10496896782513000000, +2.11078854745601690000, -73.14215015354327000000);
402     aWeights.ChangeValue(2, 52) = +1.00958190609540830000;
403     aPoles.ChangeValue(2, 52) = gp_Pnt(-140.00695092509352000000, +2.10948365684345340000, -71.72161996530125800000);
404     aWeights.ChangeValue(2, 53) = +1.00957719225994170000;
405     aPoles.ChangeValue(2, 53) = gp_Pnt(-142.89082065884315000000, +2.10853873486620720000, -70.26423921243410600000);
406     aWeights.ChangeValue(2, 54) = +1.00956830737110970000;
407     aPoles.ChangeValue(2, 54) = gp_Pnt(-145.75622246387837000000, +2.10675729535240960000, -68.77065477701791000000);
408     aWeights.ChangeValue(2, 55) = +1.00956295195561060000;
409     aPoles.ChangeValue(2, 55) = gp_Pnt(-148.60233584192389000000, +2.10568335609513650000, -67.24065593702246700000);
410     aWeights.ChangeValue(2, 56) = +1.00955425555818930000;
411     aPoles.ChangeValue(2, 56) = gp_Pnt(-151.42883073983140000000, +2.10393921590561070000, -65.67497260857376800000);
412     aWeights.ChangeValue(2, 57) = +1.00954602613011150000;
413     aPoles.ChangeValue(2, 57) = gp_Pnt(-154.23502547473331000000, +2.10228833319884910000, -64.07366145615235100000);
414     aWeights.ChangeValue(2, 58) = +1.00952742278729300000;
415     aPoles.ChangeValue(2, 58) = gp_Pnt(-160.02004322449872000000, +2.09855561509982950000, -60.67448614970191300000);
416     aWeights.ChangeValue(2, 59) = +1.00951486183164940000;
417     aPoles.ChangeValue(2, 59) = gp_Pnt(-162.99613088380306000000, +2.09603444654779600000, -58.87207545484513800000);
418     aWeights.ChangeValue(2, 60) = +1.00950821186194630000;
419     aPoles.ChangeValue(2, 60) = gp_Pnt(-165.94554723216726000000, +2.09470002788322150000, -57.02566663092176900000);
420     aWeights.ChangeValue(2, 61) = +1.00948761363819010000;
421     aPoles.ChangeValue(2, 61) = gp_Pnt(-168.87287521283019000000, +2.09056345777511910000, -55.14566924440539700000);
422     aWeights.ChangeValue(2, 62) = +1.00948175483840210000;
423     aPoles.ChangeValue(2, 62) = gp_Pnt(-171.77025983587509000000, +2.08938700649796160000, -53.21936605947655600000);
424     aWeights.ChangeValue(2, 63) = +1.00946082358399410000;
425     aPoles.ChangeValue(2, 63) = gp_Pnt(-174.64262250370552000000, +2.08518149324171190000, -51.25662423685646700000);
426     aWeights.ChangeValue(2, 64) = +1.00944596410269540000;
427     aPoles.ChangeValue(2, 64) = gp_Pnt(-177.48726621628353000000, +2.08219461660139650000, -49.25423871740036900000);
428     aWeights.ChangeValue(2, 65) = +1.00942605045267530000;
429     aPoles.ChangeValue(2, 65) = gp_Pnt(-180.30433731845508000000, +2.07819005191471670000, -47.21374002625280800000);
430     aWeights.ChangeValue(2, 66) = +1.00940832657289500000;
431     aPoles.ChangeValue(2, 66) = gp_Pnt(-182.92026834009920000000, +2.07462614892136180000, -45.31887901738367200000);
432     aWeights.ChangeValue(2, 67) = +1.00938358350026620000;
433     aPoles.ChangeValue(2, 67) = gp_Pnt(-185.51252638985017000000, +2.06964535925843180000, -43.39137009339865600000);
434     aWeights.ChangeValue(2, 68) = +1.00937745534293180000;
435     aPoles.ChangeValue(2, 68) = gp_Pnt(-188.07970214515959000000, +2.06841969296490240000, -41.42984981640538000000);
436     aWeights.ChangeValue(2, 69) = +1.00932110415642830000;
437     aPoles.ChangeValue(2, 69) = gp_Pnt(-190.62397551723822000000, +2.05705915800362950000, -39.43932945784815300000);
438     aWeights.ChangeValue(2, 70) = +1.00934018958961060000;
439     aPoles.ChangeValue(2, 70) = gp_Pnt(-193.13969442040633000000, +2.06091733419064350000, -37.41169132931209200000);
440     aWeights.ChangeValue(2, 71) = +1.00926513417552190000;
441     aPoles.ChangeValue(2, 71) = gp_Pnt(-195.63329272671066000000, +2.04578165519120160000, -35.35822241980492500000);
442     aWeights.ChangeValue(2, 72) = +1.00924284324010150000;
443     aPoles.ChangeValue(2, 72) = gp_Pnt(-198.09761820165846000000, +2.04128022217386820000, -33.26975126412686700000);
444     aWeights.ChangeValue(2, 73) = +1.00920104311988150000;
445     aPoles.ChangeValue(2, 73) = gp_Pnt(-200.53514329838038000000, +2.03283693524956680000, -31.15087616958502200000);
446     aWeights.ChangeValue(2, 74) = +1.00917029694372660000;
447     aPoles.ChangeValue(2, 74) = gp_Pnt(-202.97255799662608000000, +2.02663657044316060000, -29.03126127135719200000);
448     aWeights.ChangeValue(2, 75) = +1.00906597799637380000;
449     aPoles.ChangeValue(2, 75) = gp_Pnt(-205.38430250588374000000, +2.00548607046822540000, -26.88375382824776200000);
450     aWeights.ChangeValue(2, 76) = +1.00920552993214340000;
451     aPoles.ChangeValue(2, 76) = gp_Pnt(-207.76049754988114000000, +2.03384304897263670000, -24.69318019977189100000);
452     aWeights.ChangeValue(2, 77) = +1.00876475817298510000;
453     aPoles.ChangeValue(2, 77) = gp_Pnt(-210.12674832523484000000, +1.94448851661030540000, -22.49703905023471500000);
454     aWeights.ChangeValue(2, 78) = +1.00888387250469380000;
455     aPoles.ChangeValue(2, 78) = gp_Pnt(-212.44800842772909000000, +1.96852329008748410000, -20.25405344977475500000);
456     aWeights.ChangeValue(2, 79) = +1.00881670070680670000;
457     aPoles.ChangeValue(2, 79) = gp_Pnt(-214.73260668420895000000, +1.95481624964232450000, -17.97008076073228700000);
458     aWeights.ChangeValue(2, 80) = +1.00875338528797620000;
459     aPoles.ChangeValue(2, 80) = gp_Pnt(-216.99878954601004000000, +1.94217039944868790000, -15.66960286452947800000);
460     aWeights.ChangeValue(2, 81) = +1.00842683370719490000;
461     aPoles.ChangeValue(2, 81) = gp_Pnt(-219.23765241170187000000, +1.87520469423183880000, -13.35291936652889800000);
462     aWeights.ChangeValue(3, 1) = +0.99802424639217791000;
463     aPoles.ChangeValue(3, 1) = gp_Pnt(+131.89876890515018000000, +1.35189067474276530000, -66.51059820355672500000);
464     aWeights.ChangeValue(3, 2) = +0.99802234515929278000;
465     aPoles.ChangeValue(3, 2) = gp_Pnt(+128.85071311608803000000, +1.35313353595059940000, -68.19368716153405800000);
466     aWeights.ChangeValue(3, 3) = +0.99802076064203826000;
467     aPoles.ChangeValue(3, 3) = gp_Pnt(+125.77977143028471000000, +1.35416922698475650000, -69.83529373030198400000);
468     aWeights.ChangeValue(3, 4) = +0.99801949820651126000;
469     aPoles.ChangeValue(3, 4) = gp_Pnt(+122.68659332837821000000, +1.35499438550965670000, -71.43508181423516100000);
470     aWeights.ChangeValue(3, 5) = +0.99801796211084914000;
471     aPoles.ChangeValue(3, 5) = gp_Pnt(+119.57173533591266000000, +1.35599832254451200000, -72.99244308799212900000);
472     aWeights.ChangeValue(3, 6) = +0.99801651211145281000;
473     aPoles.ChangeValue(3, 6) = gp_Pnt(+116.43595392098000000000, +1.35694592285710100000, -74.50721127326711700000);
474     aWeights.ChangeValue(3, 7) = +0.99801547938002733000;
475     aPoles.ChangeValue(3, 7) = gp_Pnt(+113.28000153804584000000, +1.35762078417993900000, -75.97921900496575600000);
476     aWeights.ChangeValue(3, 8) = +0.99801427699595313000;
477     aPoles.ChangeValue(3, 8) = gp_Pnt(+110.10443724854701000000, +1.35840649430771500000, -77.40790012997213400000);
478     aWeights.ChangeValue(3, 9) = +0.99801219521191387000;
479     aPoles.ChangeValue(3, 9) = gp_Pnt(+103.71561277285424000000, +1.35976677896647580000, -80.17831514578958300000);
480     aWeights.ChangeValue(3, 10) = +0.99801119017200446000;
481     aPoles.ChangeValue(3, 10) = gp_Pnt(+100.50232486897988000000, +1.36042346207845170000, -81.51999289835789900000);
482     aWeights.ChangeValue(3, 11) = +0.99801030363459775000;
483     aPoles.ChangeValue(3, 11) = gp_Pnt(+97.27087733082035500000, +1.36100269005924380000, -82.81788136334564900000);
484     aWeights.ChangeValue(3, 12) = +0.99800944410125381000;
485     aPoles.ChangeValue(3, 12) = gp_Pnt(+94.02193936655145000000, +1.36156425167614130000, -84.07165794609035500000);
486     aWeights.ChangeValue(3, 13) = +0.99800863606857426000;
487     aPoles.ChangeValue(3, 13) = gp_Pnt(+90.75622955795523700000, +1.36209214789795310000, -85.28105659074749700000);
488     aWeights.ChangeValue(3, 14) = +0.99800791446328430000;
489     aPoles.ChangeValue(3, 14) = gp_Pnt(+87.47446474935537700000, +1.36256356235759690000, -86.44582972368263500000);
490     aWeights.ChangeValue(3, 15) = +0.99800720379689600000;
491     aPoles.ChangeValue(3, 15) = gp_Pnt(+84.17731596959211500000, +1.36302781837419680000, -87.56569962027794000000);
492     aWeights.ChangeValue(3, 16) = +0.99800525790220496000;
493     aPoles.ChangeValue(3, 16) = gp_Pnt(+74.24198734063921300000, +1.36429897306986340000, -90.78996991844945800000);
494     aWeights.ChangeValue(3, 17) = +0.99800413521623321000;
495     aPoles.ChangeValue(3, 17) = gp_Pnt(+67.56001809965197000000, +1.36503231983535440000, -92.75885901427626800000);
496     aWeights.ChangeValue(3, 18) = +0.99800316736440942000;
497     aPoles.ChangeValue(3, 18) = gp_Pnt(+60.82490109578901600000, +1.36566449260567850000, -94.54523441794054900000);
498     aWeights.ChangeValue(3, 19) = +0.99800233531441818000;
499     aPoles.ChangeValue(3, 19) = gp_Pnt(+54.04219505707111900000, +1.36620793936844790000, -96.14746061467829500000);
500     aWeights.ChangeValue(3, 20) = +0.99800162387306934000;
501     aPoles.ChangeValue(3, 20) = gp_Pnt(+47.21773986109732800000, +1.36667259642912180000, -97.56414160157402200000);
502     aWeights.ChangeValue(3, 21) = +0.99800102168630012000;
503     aPoles.ChangeValue(3, 21) = gp_Pnt(+40.35765665228271400000, +1.36706588836418840000, -98.79412083143951400000);
504     aWeights.ChangeValue(3, 22) = +0.99800052123917371000;
505     aPoles.ChangeValue(3, 22) = gp_Pnt(+33.46834796257081700000, +1.36739272798589770000, -99.83648116661171900000);
506     aWeights.ChangeValue(3, 23) = +0.99799971600020576000;
507     aPoles.ChangeValue(3, 23) = gp_Pnt(+19.64441706716387900000, +1.36791861440644060000, -101.54459131896159000000);
508     aWeights.ChangeValue(3, 24) = +0.99799940935225717000;
509     aPoles.ChangeValue(3, 24) = gp_Pnt(+12.70928858254282900000, +1.36811887624638580000, -102.21030492597274000000);
510     aWeights.ChangeValue(3, 25) = +0.99799919351964705000;
511     aPoles.ChangeValue(3, 25) = gp_Pnt(+5.75722078489831280000, +1.36825982711689180000, -102.68697252648171000000);
512     aWeights.ChangeValue(3, 26) = +0.99799906478455291000;
513     aPoles.ChangeValue(3, 26) = gp_Pnt(-1.20571159764999210000, +1.36834389755229970000, -102.97410341218257000000);
514     aWeights.ChangeValue(3, 27) = +0.99799902110371730000;
515     aPoles.ChangeValue(3, 27) = gp_Pnt(-8.17346746041202720000, +1.36837242333404090000, -103.07142929357101000000);
516     aWeights.ChangeValue(3, 28) = +0.99799906210844536000;
517     aPoles.ChangeValue(3, 28) = gp_Pnt(-15.14003926915473600000, +1.36834564548690430000, -102.97890429403182000000);
518     aWeights.ChangeValue(3, 29) = +0.99799918910460783000;
519     aPoles.ChangeValue(3, 29) = gp_Pnt(-22.09945300681867100000, +1.36826271027814080000, -102.69670494840925000000);
520     aWeights.ChangeValue(3, 30) = +0.99799962065035785000;
521     aPoles.ChangeValue(3, 30) = gp_Pnt(-35.99208002634647800000, +1.36798088374117890000, -101.75375562004130000000);
522     aWeights.ChangeValue(3, 31) = +0.99799992612548816000;
523     aPoles.ChangeValue(3, 31) = gp_Pnt(-42.92529183965938000000, +1.36778138671521220000, -101.09300634269859000000);
524     aWeights.ChangeValue(3, 32) = +0.99800032324181509000;
525     aPoles.ChangeValue(3, 32) = gp_Pnt(-49.83946240643516700000, +1.36752203923507090000, -100.24338136864999000000);
526     aWeights.ChangeValue(3, 33) = +0.99800081646744487000;
527     aPoles.ChangeValue(3, 33) = gp_Pnt(-56.72868525600537000000, +1.36719992054037180000, -99.20550257416397200000);
528     aWeights.ChangeValue(3, 34) = +0.99800141299480705000;
529     aPoles.ChangeValue(3, 34) = gp_Pnt(-63.58708851299418500000, +1.36681032802942060000, -97.98021473616272200000);
530     aWeights.ChangeValue(3, 35) = +0.99800212274065336000;
531     aPoles.ChangeValue(3, 35) = gp_Pnt(-70.40883481115771800000, +1.36634677727753220000, -96.56858555851044900000);
532     aWeights.ChangeValue(3, 36) = +0.99800295834605834000;
533     aPoles.ChangeValue(3, 36) = gp_Pnt(-77.18812120943384500000, +1.36580100206191160000, -94.97190570545618000000);
534     aWeights.ChangeValue(3, 37) = +0.99800438851666018000;
535     aPoles.ChangeValue(3, 37) = gp_Pnt(-87.04430869357409500000, +1.36486684103840930000, -92.36516064771883800000);
536     aWeights.ChangeValue(3, 38) = +0.99800487302440710000;
537     aPoles.ChangeValue(3, 38) = gp_Pnt(-90.15904180478642600000, +1.36455036334574700000, -91.49906951050012100000);
538     aWeights.ChangeValue(3, 39) = +0.99800538998403165000;
539     aPoles.ChangeValue(3, 39) = gp_Pnt(-93.26280104894121300000, +1.36421268117563340000, -90.59356682763008500000);
540     aWeights.ChangeValue(3, 40) = +0.99800594114472085000;
541     aPoles.ChangeValue(3, 40) = gp_Pnt(-96.35501076566437500000, +1.36385265030680070000, -89.64881447076304300000);
542     aWeights.ChangeValue(3, 41) = +0.99800652872047668000;
543     aPoles.ChangeValue(3, 41) = gp_Pnt(-99.43509702281136200000, +1.36346882243976730000, -88.66498478868943800000);
544     aWeights.ChangeValue(3, 42) = +0.99800715539011531000;
545     aPoles.ChangeValue(3, 42) = gp_Pnt(-102.50248760972849000000, +1.36305944519955100000, -87.64226061031386900000);
546     aWeights.ChangeValue(3, 43) = +0.99800782429726853000;
547     aPoles.ChangeValue(3, 43) = gp_Pnt(-105.55661203062589000000, +1.36262246213878830000, -86.58083524789229600000);
548     aWeights.ChangeValue(3, 44) = +0.99800929984388531000;
549     aPoles.ChangeValue(3, 44) = gp_Pnt(-111.87105232543304000000, +1.36165848631400000000, -84.29637819122412200000);
550     aWeights.ChangeValue(3, 45) = +0.99801015470554688000;
551     aPoles.ChangeValue(3, 45) = gp_Pnt(-115.12916723990907000000, +1.36109998387148300000, -83.06721412498791300000);
552     aWeights.ChangeValue(3, 46) = +0.99801097177629106000;
553     aPoles.ChangeValue(3, 46) = gp_Pnt(-118.37050305702043000000, +1.36056615831231790000, -81.79361556056927900000);
554     aWeights.ChangeValue(3, 47) = +0.99801197939908182000;
555     aPoles.ChangeValue(3, 47) = gp_Pnt(-121.59440429164877000000, +1.35990780214188640000, -80.47594855348815200000);
556     aWeights.ChangeValue(3, 48) = +0.99801295017732938000;
557     aPoles.ChangeValue(3, 48) = gp_Pnt(-124.80011198391350000000, +1.35927349774917520000, -79.11439339164216700000);
558     aWeights.ChangeValue(3, 49) = +0.99801403220993246000;
559     aPoles.ChangeValue(3, 49) = gp_Pnt(-127.98695272451793000000, +1.35856646260703170000, -77.70931006235629500000);
560     aWeights.ChangeValue(3, 50) = +0.99801521135673477000;
561     aPoles.ChangeValue(3, 50) = gp_Pnt(-131.15422466608416000000, +1.35779592883408770000, -76.26099835790641600000);
562     aWeights.ChangeValue(3, 51) = +0.99801760008173268000;
563     aPoles.ChangeValue(3, 51) = gp_Pnt(-137.22341426940562000000, +1.35623488186342090000, -73.38505097675174200000);
564     aWeights.ChangeValue(3, 52) = +0.99801898347031770000;
565     aPoles.ChangeValue(3, 52) = gp_Pnt(-140.12817143218851000000, +1.35533077140178190000, -71.96340636458091900000);
566     aWeights.ChangeValue(3, 53) = +0.99801998518653323000;
567     aPoles.ChangeValue(3, 53) = gp_Pnt(-143.01477271081365000000, +1.35467609324036100000, -70.50482384325539400000);
568     aWeights.ChangeValue(3, 54) = +0.99802187318341851000;
569     aPoles.ChangeValue(3, 54) = gp_Pnt(-145.88296929650440000000, +1.35344206211285110000, -69.01011970904052400000);
570     aWeights.ChangeValue(3, 55) = +0.99802301113749214000;
571     aPoles.ChangeValue(3, 55) = gp_Pnt(-148.73181832948791000000, +1.35269822187277230000, -67.47885556090747600000);
572     aWeights.ChangeValue(3, 56) = +0.99802485896116799000;
573     aPoles.ChangeValue(3, 56) = gp_Pnt(-151.56108889838526000000, +1.35149030610332030000, -65.91196867904423600000);
574     aWeights.ChangeValue(3, 57) = +0.99802660746081140000;
575     aPoles.ChangeValue(3, 57) = gp_Pnt(-154.37005843077941000000, +1.35034719652907540000, -64.30939181125272300000);
576     aWeights.ChangeValue(3, 58) = +0.99803055992501810000;
577     aPoles.ChangeValue(3, 58) = gp_Pnt(-160.16078498432634000000, +1.34776300585323040000, -60.90758294114521500000);
578     aWeights.ChangeValue(3, 59) = +0.99803322842151521000;
579     aPoles.ChangeValue(3, 59) = gp_Pnt(-163.13986451909619000000, +1.34601805132734250000, -59.10384793755353900000);
580     aWeights.ChangeValue(3, 60) = +0.99803464125751229000;
581     aPoles.ChangeValue(3, 60) = gp_Pnt(-166.09208359425281000000, +1.34509430571165490000, -57.25595351707911400000);
582     aWeights.ChangeValue(3, 61) = +0.99803901668572381000;
583     aPoles.ChangeValue(3, 61) = gp_Pnt(-169.02259847263389000000, +1.34223252516315280000, -55.37471701865561600000);
584     aWeights.ChangeValue(3, 62) = +0.99804026123487555000;
585     aPoles.ChangeValue(3, 62) = gp_Pnt(-171.92274649713781000000, +1.34141857200850120000, -53.44681670722970100000);
586     aWeights.ChangeValue(3, 63) = +0.99804470691034153000;
587     aPoles.ChangeValue(3, 63) = gp_Pnt(-174.79824691248783000000, +1.33851025764084610000, -51.48277226031661500000);
588     aWeights.ChangeValue(3, 64) = +0.99804786265209489000;
589     aPoles.ChangeValue(3, 64) = gp_Pnt(-177.64589658566118000000, +1.33644541377468110000, -49.47887210970986900000);
590     aWeights.ChangeValue(3, 65) = +0.99805209132461004000;
591     aPoles.ChangeValue(3, 65) = gp_Pnt(-180.46609411219177000000, +1.33367801102763010000, -47.43691639460438100000);
592     aWeights.ChangeValue(3, 66) = +0.99805585511720041000;
593     aPoles.ChangeValue(3, 66) = gp_Pnt(-183.08478109176986000000, +1.33121501172845690000, -45.54077967192022000000);
594     aWeights.ChangeValue(3, 67) = +0.99806110806405779000;
595     aPoles.ChangeValue(3, 67) = gp_Pnt(-185.68001727848417000000, +1.32777577033982250000, -43.61205685047624300000);
596     aWeights.ChangeValue(3, 68) = +0.99806241123000117000;
597     aPoles.ChangeValue(3, 68) = gp_Pnt(-188.24953622256075000000, +1.32692526187276720000, -41.64902509374122300000);
598     aWeights.ChangeValue(3, 69) = +0.99807437025077705000;
599     aPoles.ChangeValue(3, 69) = gp_Pnt(-190.79766796840426000000, +1.31909012471800140000, -39.65777616520052400000);
600     aWeights.ChangeValue(3, 70) = +0.99807032269259688000;
601     aPoles.ChangeValue(3, 70) = gp_Pnt(-193.31511620328166000000, +1.32174544077043810000, -37.62798636408343400000);
602     aWeights.ChangeValue(3, 71) = +0.99808625039380772000;
603     aPoles.ChangeValue(3, 71) = gp_Pnt(-195.81278252670535000000, +1.31130937814640340000, -35.57429171163009600000);
604     aWeights.ChangeValue(3, 72) = +0.99809097922828749000;
605     aPoles.ChangeValue(3, 72) = gp_Pnt(-198.28008499427182000000, +1.30820906528388470000, -33.48422839734306700000);
606     aWeights.ChangeValue(3, 73) = +0.99809984631895698000;
607     aPoles.ChangeValue(3, 73) = gp_Pnt(-200.72099421295775000000, +1.30239515227575060000, -31.36416391357070300000);
608     aWeights.ChangeValue(3, 74) = +0.99810637147759285000;
609     aPoles.ChangeValue(3, 74) = gp_Pnt(-203.16127009409345000000, +1.29812048781277520000, -29.24337154392900800000);
610     aWeights.ChangeValue(3, 75) = +0.99812847998895315000;
611     aPoles.ChangeValue(3, 75) = gp_Pnt(-205.57777363915829000000, +1.28359951668439790000, -27.09591401257074100000);
612     aWeights.ChangeValue(3, 76) = +0.99809892249848597000;
613     aPoles.ChangeValue(3, 76) = gp_Pnt(-207.95321979211485000000, +1.30303533816127510000, -24.90029856221717000000);
614     aWeights.ChangeValue(3, 77) = +0.99819234539248169000;
615     aPoles.ChangeValue(3, 77) = gp_Pnt(-210.32920376311637000000, +1.24168994973372330000, -22.71372419603407900000);
616     aWeights.ChangeValue(3, 78) = +0.99816706733577565000;
617     aPoles.ChangeValue(3, 78) = gp_Pnt(-212.65404345030839000000, +1.25824740351837460000, -20.46200135460381000000);
618     aWeights.ChangeValue(3, 79) = +0.99818127776964660000;
619     aPoles.ChangeValue(3, 79) = gp_Pnt(-214.94032188963598000000, +1.24888524402456480000, -18.17894168737611000000);
620     aWeights.ChangeValue(3, 80) = +0.99819475509197664000;
621     aPoles.ChangeValue(3, 80) = gp_Pnt(-217.21049138159862000000, +1.24010538580557930000, -15.87773552075580100000);
622     aWeights.ChangeValue(3, 81) = +0.99826376750414003000;
623     aPoles.ChangeValue(3, 81) = gp_Pnt(-219.45963474898130000000, +1.19454909379966280000, -13.56324778739743800000);
624     aWeights.ChangeValue(4, 1) = +0.99424302042862245000;
625     aPoles.ChangeValue(4, 1) = gp_Pnt(+132.13618409480023000000, +0.70840889522526063000, -66.94024029007874800000);
626     aWeights.ChangeValue(4, 2) = +0.99423758610938695000;
627     aPoles.ChangeValue(4, 2) = gp_Pnt(+129.08297406972278000000, +0.70909252303575865000, -68.62615176496952100000);
628     aWeights.ChangeValue(4, 3) = +0.99423305718875432000;
629     aPoles.ChangeValue(4, 3) = gp_Pnt(+126.00685240811242000000, +0.70966228194967051000, -70.27050713058781600000);
630     aWeights.ChangeValue(4, 4) = +0.99422944886444642000;
631     aPoles.ChangeValue(4, 4) = gp_Pnt(+122.90845587213282000000, +0.71011623149435366000, -71.87297804945868100000);
632     aWeights.ChangeValue(4, 5) = +0.99422505844796127000;
633     aPoles.ChangeValue(4, 5) = gp_Pnt(+119.78834767262531000000, +0.71066859395963999000, -73.43294438704307900000);
634     aWeights.ChangeValue(4, 6) = +0.99422091417503022000;
635     aPoles.ChangeValue(4, 6) = gp_Pnt(+116.64728496160824000000, +0.71119000548737488000, -74.95024473036627900000);
636     aWeights.ChangeValue(4, 7) = +0.99421796254996875000;
637     aPoles.ChangeValue(4, 7) = gp_Pnt(+113.48602386120655000000, +0.71156137519735096000, -76.42471498016054500000);
638     aWeights.ChangeValue(4, 8) = +0.99421452605999638000;
639     aPoles.ChangeValue(4, 8) = gp_Pnt(+110.30511547520040000000, +0.71199375553590705000, -77.85578472764748900000);
640     aWeights.ChangeValue(4, 9) = +0.99420857626658776000;
641     aPoles.ChangeValue(4, 9) = gp_Pnt(+103.90553506044348000000, +0.71274238201017392000, -80.63083668700706100000);
642     aWeights.ChangeValue(4, 10) = +0.99420570386914531000;
643     aPoles.ChangeValue(4, 10) = gp_Pnt(+100.68683453164211000000, +0.71310380757531833000, -81.97476109354066400000);
644     aWeights.ChangeValue(4, 11) = +0.99420317017586146000;
645     aPoles.ChangeValue(4, 11) = gp_Pnt(+97.44994659335081600000, +0.71342262156961334000, -83.27482261755635300000);
646     aWeights.ChangeValue(4, 12) = +0.99420071368291341000;
647     aPoles.ChangeValue(4, 12) = gp_Pnt(+94.19554253170841200000, +0.71373172711717636000, -84.53069694549194000000);
648     aWeights.ChangeValue(4, 13) = +0.99419840439350793000;
649     aPoles.ChangeValue(4, 13) = gp_Pnt(+90.92433917217061900000, +0.71402231445757036000, -85.74211902365664200000);
650     aWeights.ChangeValue(4, 14) = +0.99419634212229768000;
651     aPoles.ChangeValue(4, 14) = gp_Pnt(+87.63705473050230000000, +0.71428182289044062000, -86.90884124933938900000);
652     aWeights.ChangeValue(4, 15) = +0.99419431112670464000;
653     aPoles.ChangeValue(4, 15) = gp_Pnt(+84.33436439436984200000, +0.71453739893908408000, -88.03058362353205300000);
654     aWeights.ChangeValue(4, 16) = +0.99418875003915341000;
655     aPoles.ChangeValue(4, 16) = gp_Pnt(+74.38231313217285400000, +0.71523720648163680000, -91.26025430410756200000);
656     aWeights.ChangeValue(4, 17) = +0.99418554160984429000;
657     aPoles.ChangeValue(4, 17) = gp_Pnt(+67.68910051798944500000, +0.71564096751482986000, -93.23244050128337800000);
658     aWeights.ChangeValue(4, 18) = +0.99418277570171931000;
659     aPoles.ChangeValue(4, 18) = gp_Pnt(+60.94265918181897500000, +0.71598904839509359000, -95.02180567308657500000);
660     aWeights.ChangeValue(4, 19) = +0.99418039790864621000;
661     aPoles.ChangeValue(4, 19) = gp_Pnt(+54.14855416044807900000, +0.71628829211206946000, -96.62671289123449000000);
662     aWeights.ChangeValue(4, 20) = +0.99417836479981814000;
663     aPoles.ChangeValue(4, 20) = gp_Pnt(+47.31263275511362600000, +0.71654416141740851000, -98.04576467050098600000);
664     aWeights.ChangeValue(4, 21) = +0.99417664391975691000;
665     aPoles.ChangeValue(4, 21) = gp_Pnt(+40.44102486854357200000, +0.71676073875086976000, -99.27780280738555500000);
666     aWeights.ChangeValue(4, 22) = +0.99417521378830997000;
667     aPoles.ChangeValue(4, 22) = gp_Pnt(+33.54014335198198900000, +0.71694072618465221000, -100.32190824729783000000);
668     aWeights.ChangeValue(4, 23) = +0.99417291266204433000;
669     aPoles.ChangeValue(4, 23) = gp_Pnt(+19.69298272358705000000, +0.71723033475882103000, -102.03287833894613000000);
670     aWeights.ChangeValue(4, 24) = +0.99417203636017570000;
671     aPoles.ChangeValue(4, 24) = gp_Pnt(+12.74619890889187300000, +0.71734062296661449000, -102.69970663658552000000);
672     aWeights.ChangeValue(4, 25) = +0.99417141958182476000;
673     aPoles.ChangeValue(4, 25) = gp_Pnt(+5.78245043030823250000, +0.71741824902277995000, -103.17717197796689000000);
674     aWeights.ChangeValue(4, 26) = +0.99417105170022846000;
675     aPoles.ChangeValue(4, 26) = gp_Pnt(-1.19217909208406270000, +0.71746454980293017000, -103.46478315098152000000);
676     aWeights.ChangeValue(4, 27) = +0.99417092687508068000;
677     aPoles.ChangeValue(4, 27) = gp_Pnt(-8.17163978203099180000, +0.71748026003105458000, -103.56227159755184000000);
678     aWeights.ChangeValue(4, 28) = +0.99417104405253187000;
679     aPoles.ChangeValue(4, 28) = gp_Pnt(-15.14991535484593800000, +0.71746551227361877000, -103.46959139663633000000);
680     aWeights.ChangeValue(4, 29) = +0.99417140696519068000;
681     aPoles.ChangeValue(4, 29) = gp_Pnt(-22.12102296425817400000, +0.71741983693815459000, -103.18691926012113000000);
682     aWeights.ChangeValue(4, 30) = +0.99417264018315676000;
683     aPoles.ChangeValue(4, 30) = gp_Pnt(-36.03699423807252300000, +0.71726462804712465000, -102.24239043165372000000);
684     aWeights.ChangeValue(4, 31) = +0.99417351313460955000;
685     aPoles.ChangeValue(4, 31) = gp_Pnt(-42.98185258768797500000, +0.71715476185170723000, -101.58053487832193000000);
686     aWeights.ChangeValue(4, 32) = +0.99417464796983568000;
687     aPoles.ChangeValue(4, 32) = gp_Pnt(-49.90763755490115700000, +0.71701193671091712000, -100.72948788576410000000);
688     aWeights.ChangeValue(4, 33) = +0.99417605745995530000;
689     aPoles.ChangeValue(4, 33) = gp_Pnt(-56.80843390632649900000, +0.71683454604177377000, -99.68987236817491700000);
690     aWeights.ChangeValue(4, 34) = +0.99417776216385467000;
691     aPoles.ChangeValue(4, 34) = gp_Pnt(-63.67836146608049600000, +0.71662000367742562000, -98.46253420440308400000);
692     aWeights.ChangeValue(4, 35) = +0.99417979042818705000;
693     aPoles.ChangeValue(4, 35) = gp_Pnt(-70.51157486810592400000, +0.71636474389607163000, -97.04854231351581000000);
694     aWeights.ChangeValue(4, 36) = +0.99418217838737100000;
695     aPoles.ChangeValue(4, 36) = gp_Pnt(-77.30226331485057800000, +0.71606422146024096000, -95.44918875092946600000);
696     aWeights.ChangeValue(4, 37) = +0.99418626551507883000;
697     aPoles.ChangeValue(4, 37) = gp_Pnt(-87.17503156127875700000, +0.71554987190288122000, -92.83807781738744300000);
698     aWeights.ChangeValue(4, 38) = +0.99418765014289556000;
699     aPoles.ChangeValue(4, 38) = gp_Pnt(-90.29499963358738100000, +0.71537562386381059000, -91.97053762881716900000);
700     aWeights.ChangeValue(4, 39) = +0.99418912751868260000;
701     aPoles.ChangeValue(4, 39) = gp_Pnt(-93.40397633478176000000, +0.71518970580821706000, -91.06351986664817800000);
702     aWeights.ChangeValue(4, 40) = +0.99419070264287346000;
703     aPoles.ChangeValue(4, 40) = gp_Pnt(-96.50138523104767800000, +0.71499148886670094000, -90.11718659777564300000);
704     aWeights.ChangeValue(4, 41) = +0.99419238184469383000;
705     aPoles.ChangeValue(4, 41) = gp_Pnt(-99.58665166110419900000, +0.71478017704711161000, -89.13171035602891800000);
706     aWeights.ChangeValue(4, 42) = +0.99419417278216393000;
707     aPoles.ChangeValue(4, 42) = gp_Pnt(-102.65920271683186000000, +0.71455480723882170000, -88.10727415073346000000);
708     aWeights.ChangeValue(4, 43) = +0.99419608444209617000;
709     aPoles.ChangeValue(4, 43) = gp_Pnt(-105.71846722422283000000, +0.71431424921765596000, -87.04407147601585800000);
710     aWeights.ChangeValue(4, 44) = +0.99420030141669824000;
711     aPoles.ChangeValue(4, 44) = gp_Pnt(-112.04353021881408000000, +0.71378360593609291000, -84.75579106017932000000);
712     aWeights.ChangeValue(4, 45) = +0.99420274455295243000;
713     aPoles.ChangeValue(4, 45) = gp_Pnt(-115.30712351688430000000, +0.71347617951477893000, -83.52457168950516600000);
714     aWeights.ChangeValue(4, 46) = +0.99420507969516914000;
715     aPoles.ChangeValue(4, 46) = gp_Pnt(-118.55391065270935000000, +0.71318234625457844000, -82.24884224143599500000);
716     aWeights.ChangeValue(4, 47) = +0.99420795946419460000;
717     aPoles.ChangeValue(4, 47) = gp_Pnt(-121.78323693095153000000, +0.71281998990170370000, -80.92897147787398600000);
718     aWeights.ChangeValue(4, 48) = +0.99421073394729520000;
719     aPoles.ChangeValue(4, 48) = gp_Pnt(-124.99434061394447000000, +0.71247088780699119000, -79.56513754354314500000);
720     aWeights.ChangeValue(4, 49) = +0.99421382643715051000;
721     aPoles.ChangeValue(4, 49) = gp_Pnt(-128.18654935306802000000, +0.71208178090166396000, -78.15770189412481300000);
722     aWeights.ChangeValue(4, 50) = +0.99421719652005114000;
723     aPoles.ChangeValue(4, 50) = gp_Pnt(-131.35915951555538000000, +0.71165775668839981000, -76.70696466864815500000);
724     aWeights.ChangeValue(4, 51) = +0.99422402375653052000;
725     aPoles.ChangeValue(4, 51) = gp_Pnt(-137.43857370930490000000, +0.71079877890710363000, -73.82620311743470200000);
726     aWeights.ChangeValue(4, 52) = +0.99422797768691740000;
727     aPoles.ChangeValue(4, 52) = gp_Pnt(-140.34822128390073000000, +0.71030132584778982000, -72.40218284379008700000);
728     aWeights.ChangeValue(4, 53) = +0.99423084075610579000;
729     aPoles.ChangeValue(4, 53) = gp_Pnt(-143.23968120103163000000, +0.70994112075449667000, -70.94115847846593700000);
730     aWeights.ChangeValue(4, 54) = +0.99423623706224973000;
731     aPoles.ChangeValue(4, 54) = gp_Pnt(-146.11271315064005000000, +0.70926223398833632000, -69.44395856663618400000);
732     aWeights.ChangeValue(4, 55) = +0.99423948964319253000;
733     aPoles.ChangeValue(4, 55) = gp_Pnt(-148.96636467875118000000, +0.70885305306993507000, -67.91012785943519200000);
734     aWeights.ChangeValue(4, 56) = +0.99424477127021760000;
735     aPoles.ChangeValue(4, 56) = gp_Pnt(-151.80041102174371000000, +0.70818863107582075000, -66.34061951491401000000);
736     aWeights.ChangeValue(4, 57) = +0.99424976912431906000;
737     aPoles.ChangeValue(4, 57) = gp_Pnt(-154.61412826195317000000, +0.70755993553172780000, -64.73535576374381200000);
738     aWeights.ChangeValue(4, 58) = +0.99426106692542415000;
739     aPoles.ChangeValue(4, 58) = gp_Pnt(-160.41462700323274000000, +0.70613881146866808000, -61.32785485541679500000);
740     aWeights.ChangeValue(4, 59) = +0.99426869485276259000;
741     aPoles.ChangeValue(4, 59) = gp_Pnt(-163.39874797129167000000, +0.70517937516238605000, -59.52109641918814000000);
742     aWeights.ChangeValue(4, 60) = +0.99427273335051769000;
743     aPoles.ChangeValue(4, 60) = gp_Pnt(-166.35588428707737000000, +0.70467140031138198000, -57.67014968010805400000);
744     aWeights.ChangeValue(4, 61) = +0.99428524121150996000;
745     aPoles.ChangeValue(4, 61) = gp_Pnt(-169.29147402675417000000, +0.70309833118760823000, -55.78569706052214600000);
746     aWeights.ChangeValue(4, 62) = +0.99428879891231192000;
747     aPoles.ChangeValue(4, 62) = gp_Pnt(-172.19641321622018000000, +0.70265088960130029000, -53.85463096447261900000);
748     aWeights.ChangeValue(4, 63) = +0.99430150819260854000;
749     aPoles.ChangeValue(4, 63) = gp_Pnt(-175.07684836851479000000, +0.70105264832187786000, -51.88726956537038900000);
750     aWeights.ChangeValue(4, 64) = +0.99431053021705873000;
751     aPoles.ChangeValue(4, 64) = gp_Pnt(-177.92932492963632000000, +0.69991818857623234000, -49.88000737868681300000);
752     aWeights.ChangeValue(4, 65) = +0.99432262020918794000;
753     aPoles.ChangeValue(4, 65) = gp_Pnt(-180.75433885652521000000, +0.69839807993520564000, -47.83460859504128800000);
754     aWeights.ChangeValue(4, 66) = +0.99433338093448842000;
755     aPoles.ChangeValue(4, 66) = gp_Pnt(-183.37745173242254000000, +0.69704510882650861000, -45.93530736698277700000);
756     aWeights.ChangeValue(4, 67) = +0.99434840096468768000;
757     aPoles.ChangeValue(4, 67) = gp_Pnt(-185.97711214268182000000, +0.69515696483250133000, -44.00334265992864100000);
758     aWeights.ChangeValue(4, 68) = +0.99435212441487342000;
759     aPoles.ChangeValue(4, 68) = gp_Pnt(-188.55092060214918000000, +0.69468843290184534000, -42.03706245316480100000);
760     aWeights.ChangeValue(4, 69) = +0.99438632495837886000;
761     aPoles.ChangeValue(4, 69) = gp_Pnt(-191.10351948864678000000, +0.69039032514405918000, -40.04240176159244400000);
762     aWeights.ChangeValue(4, 70) = +0.99437474610357146000;
763     aPoles.ChangeValue(4, 70) = gp_Pnt(-193.62512272227769000000, +0.69184483548244469000, -38.00925246210125900000);
764     aWeights.ChangeValue(4, 71) = +0.99442029730057158000;
765     aPoles.ChangeValue(4, 71) = gp_Pnt(-196.12715745709386000000, +0.68612074693666814000, -35.95207510226987300000);
766     aWeights.ChangeValue(4, 72) = +0.99443382321708784000;
767     aPoles.ChangeValue(4, 72) = gp_Pnt(-198.59871781224271000000, +0.68442148883790921000, -33.85842837168388500000);
768     aWeights.ChangeValue(4, 73) = +0.99445918644353237000;
769     aPoles.ChangeValue(4, 73) = gp_Pnt(-201.04387700918369000000, +0.68123533540985159000, -31.73471330438436400000);
770     aWeights.ChangeValue(4, 74) = +0.99447784672499884000;
771     aPoles.ChangeValue(4, 74) = gp_Pnt(-203.48830197003542000000, +0.67889067518118906000, -29.61036197082074800000);
772     aWeights.ChangeValue(4, 75) = +0.99454111417144087000;
773     aPoles.ChangeValue(4, 75) = gp_Pnt(-205.90905874701556000000, +0.67094847421818948000, -27.45911353863423800000);
774     aWeights.ChangeValue(4, 76) = +0.99445650432969468000;
775     aPoles.ChangeValue(4, 76) = gp_Pnt(-208.28851122415659000000, +0.68156618053615436000, -25.25989914496455000000);
776     aWeights.ChangeValue(4, 77) = +0.99472383917628937000;
777     aPoles.ChangeValue(4, 77) = gp_Pnt(-210.66819860636727000000, +0.64801004101885640000, -23.06997485052475800000);
778     aWeights.ChangeValue(4, 78) = +0.99465154011060308000;
779     aPoles.ChangeValue(4, 78) = gp_Pnt(-212.99829629837927000000, +0.65709020698928045000, -20.81293704958459000000);
780     aWeights.ChangeValue(4, 79) = +0.99469225299704522000;
781     aPoles.ChangeValue(4, 79) = gp_Pnt(-215.28778722004142000000, +0.65198647566642243000, -18.52648999480212300000);
782     aWeights.ChangeValue(4, 80) = +0.99473072608314816000;
783     aPoles.ChangeValue(4, 80) = gp_Pnt(-217.56233176434088000000, +0.64714607636795729000, -16.22125679272672700000);
784     aWeights.ChangeValue(4, 81) = +0.99492849872148770000;
785     aPoles.ChangeValue(4, 81) = gp_Pnt(-219.81591407133737000000, +0.62237708094437050000, -13.90082269618381800000);
786     aWeights.ChangeValue(5, 1) = +0.99802424639217535000;
787     aPoles.ChangeValue(5, 1) = gp_Pnt(+132.45622778603641000000, +0.24240580374773624000, -67.51941232824347600000);
788     aWeights.ChangeValue(5, 2) = +0.99802234515930366000;
789     aPoles.ChangeValue(5, 2) = gp_Pnt(+129.39621499227619000000, +0.24264599956164210000, -69.20932849809996400000);
790     aWeights.ChangeValue(5, 3) = +0.99802076064199163000;
791     aPoles.ChangeValue(5, 3) = gp_Pnt(+126.31320722587012000000, +0.24284620475411531000, -70.85757023346207000000);
792     aWeights.ChangeValue(5, 4) = +0.99801949820656444000;
793     aPoles.ChangeValue(5, 4) = gp_Pnt(+123.20785947444472000000, +0.24300571706284735000, -72.46379895615213200000);
794     aWeights.ChangeValue(5, 5) = +0.99801796211084626000;
795     aPoles.ChangeValue(5, 5) = gp_Pnt(+120.08075545981777000000, +0.24319982314295371000, -74.02745916652884300000);
796     aWeights.ChangeValue(5, 6) = +0.99801651211139986000;
797     aPoles.ChangeValue(5, 6) = gp_Pnt(+116.93263892914923000000, +0.24338306180645181000, -75.54835063375608700000);
798     aWeights.ChangeValue(5, 7) = +0.99801547938007906000;
799     aPoles.ChangeValue(5, 7) = gp_Pnt(+113.76425167349765000000, +0.24351357797625062000, -77.02627451676777100000);
800     aWeights.ChangeValue(5, 8) = +0.99801427699593348000;
801     aPoles.ChangeValue(5, 8) = gp_Pnt(+110.57618061475338000000, +0.24366553774363486000, -78.46071663606139200000);
802     aWeights.ChangeValue(5, 9) = +0.99801219521177365000;
803     aPoles.ChangeValue(5, 9) = gp_Pnt(+104.16217613984874000000, +0.24392865233284403000, -81.24228081548614000000);
804     aWeights.ChangeValue(5, 10) = +0.99801119017243534000;
805     aPoles.ChangeValue(5, 10) = gp_Pnt(+100.93622072836907000000, +0.24405568433254640000, -82.58935804874866400000);
806     aWeights.ChangeValue(5, 11) = +0.99801030363411136000;
807     aPoles.ChangeValue(5, 11) = gp_Pnt(+97.69202612265307600000, +0.24416774311013159000, -83.89246252379766100000);
808     aWeights.ChangeValue(5, 12) = +0.99800944410126124000;
809     aPoles.ChangeValue(5, 12) = gp_Pnt(+94.43027249107268500000, +0.24427639255629080000, -85.15127753548810600000);
810     aWeights.ChangeValue(5, 13) = +0.99800863606905588000;
811     aPoles.ChangeValue(5, 13) = gp_Pnt(+91.15167507122404800000, +0.24437853537532742000, -86.36553541507953500000);
812     aWeights.ChangeValue(5, 14) = +0.99800791446282866000;
813     aPoles.ChangeValue(5, 14) = gp_Pnt(+87.85695090009397700000, +0.24446975628264125000, -87.53498464352057300000);
814     aWeights.ChangeValue(5, 15) = +0.99800720379704511000;
815     aPoles.ChangeValue(5, 15) = gp_Pnt(+84.54678770958248900000, +0.24455959646371978000, -88.65934979276558200000);
816     aWeights.ChangeValue(5, 16) = +0.99800525790220262000;
817     aPoles.ChangeValue(5, 16) = gp_Pnt(+74.57222162875666500000, +0.24480559775636487000, -91.89655746079053200000);
818     aWeights.ChangeValue(5, 17) = +0.99800413521623044000;
819     aPoles.ChangeValue(5, 17) = gp_Pnt(+67.86385477996348900000, +0.24494753702776123000, -93.87334138726605200000);
820     aWeights.ChangeValue(5, 18) = +0.99800316736440708000;
821     aPoles.ChangeValue(5, 18) = gp_Pnt(+61.10212188651380700000, +0.24506990714535715000, -95.66687639706128700000);
822     aWeights.ChangeValue(5, 19) = +0.99800233531441618000;
823     aPoles.ChangeValue(5, 19) = gp_Pnt(+54.29260355218377000000, +0.24517511152453569000, -97.27552257290322800000);
824     aWeights.ChangeValue(5, 20) = +0.99800162387306812000;
825     aPoles.ChangeValue(5, 20) = gp_Pnt(+47.44116356008504500000, +0.24526506890417449000, -98.69787956398771200000);
826     aWeights.ChangeValue(5, 21) = +0.99800102168629923000;
827     aPoles.ChangeValue(5, 21) = gp_Pnt(+40.55394899036769400000, +0.24534121333759545000, -99.93278652962781900000);
828     aWeights.ChangeValue(5, 22) = +0.99800052123917249000;
829     aPoles.ChangeValue(5, 22) = gp_Pnt(+33.63739034141031700000, +0.24540449418574758000, -100.97932209286283000000);
830     aWeights.ChangeValue(5, 23) = +0.99799971600020576000;
831     aPoles.ChangeValue(5, 23) = gp_Pnt(+19.75877904385457000000, +0.24550631764576064000, -102.69427034587730000000);
832     aWeights.ChangeValue(5, 24) = +0.99799940935225595000;
833     aPoles.ChangeValue(5, 24) = gp_Pnt(+12.79621461719473900000, +0.24554509442498113000, -103.36264862290150000000);
834     aWeights.ChangeValue(5, 25) = +0.99799919351964361000;
835     aPoles.ChangeValue(5, 25) = gp_Pnt(+5.81664173483571470000, +0.24557238768930081000, -103.84122357926364000000);
836     aWeights.ChangeValue(5, 26) = +0.99799906478454914000;
837     aPoles.ChangeValue(5, 26) = gp_Pnt(-1.17384006705611750000, +0.24558866712534574000, -104.12950288114470000000);
838     aWeights.ChangeValue(5, 27) = +0.99799902110371452000;
839     aPoles.ChangeValue(5, 27) = gp_Pnt(-8.16916502467035950000, +0.24559419086566145000, -104.22721740658889000000);
840     aWeights.ChangeValue(5, 28) = +0.99799906210844525000;
841     aPoles.ChangeValue(5, 28) = gp_Pnt(-15.16330109337111900000, +0.24558900548798951000, -104.13432123956672000000);
842     aWeights.ChangeValue(5, 29) = +0.99799918910460916000;
843     aPoles.ChangeValue(5, 29) = gp_Pnt(-22.15024989420349800000, +0.24557294601509544000, -103.85099166853988000000);
844     aWeights.ChangeValue(5, 30) = +0.99799962065035952000;
845     aPoles.ChangeValue(5, 30) = gp_Pnt(-36.09784025928350100000, +0.24551837507724711000, -102.90426687944763000000);
846     aWeights.ChangeValue(5, 31) = +0.99799992612548860000;
847     aPoles.ChangeValue(5, 31) = gp_Pnt(-43.05848024708384300000, +0.24547974681812620000, -102.24087223758063000000);
848     aWeights.ChangeValue(5, 32) = +0.99800032324181287000;
849     aPoles.ChangeValue(5, 32) = gp_Pnt(-50.00000136683811300000, +0.24542953068576923000, -101.38784584473753000000);
850     aWeights.ChangeValue(5, 33) = +0.99800081646744143000;
851     aPoles.ChangeValue(5, 33) = gp_Pnt(-56.91647304260395400000, +0.24536716218422927000, -100.34581179308852000000);
852     aWeights.ChangeValue(5, 34) = +0.99800141299480460000;
853     aPoles.ChangeValue(5, 34) = gp_Pnt(-63.80199929133657100000, +0.24529173277606747000, -99.11561770524215800000);
854     aWeights.ChangeValue(5, 35) = +0.99800212274065292000;
855     aPoles.ChangeValue(5, 35) = gp_Pnt(-70.65071863638867500000, +0.24520198988589620000, -97.69833476064030700000);
856     aWeights.ChangeValue(5, 36) = +0.99800295834605834000;
857     aPoles.ChangeValue(5, 36) = gp_Pnt(-77.45680402323041800000, +0.24509633690518939000, -96.09525772913629300000);
858     aWeights.ChangeValue(5, 37) = +0.99800438851665707000;
859     aPoles.ChangeValue(5, 37) = gp_Pnt(-87.35194268844766400000, +0.24491551610541196000, -93.47806376363495000000);
860     aWeights.ChangeValue(5, 38) = +0.99800487302440644000;
861     aPoles.ChangeValue(5, 38) = gp_Pnt(-90.47898339307414500000, +0.24485425955861742000, -92.60850028621504700000);
862     aWeights.ChangeValue(5, 39) = +0.99800538998403221000;
863     aPoles.ChangeValue(5, 39) = gp_Pnt(-93.59500505694055100000, +0.24478890139349116000, -91.69936647202810300000);
864     aWeights.ChangeValue(5, 40) = +0.99800594114472096000;
865     aPoles.ChangeValue(5, 40) = gp_Pnt(-96.69942959625443300000, +0.24471922075774133000, -90.75082469114758500000);
866     aWeights.ChangeValue(5, 41) = +0.99800652872047502000;
867     aPoles.ChangeValue(5, 41) = gp_Pnt(-99.79168063143930600000, +0.24464493811196314000, -89.76304779373697300000);
868     aWeights.ChangeValue(5, 42) = +0.99800715539011187000;
869     aPoles.ChangeValue(5, 42) = gp_Pnt(-102.87118348036965000000, +0.24456571523016235000, -88.73621911304020700000);
870     aWeights.ChangeValue(5, 43) = +0.99800782429726465000;
871     aPoles.ChangeValue(5, 43) = gp_Pnt(-105.93736515171811000000, +0.24448115520035879000, -87.67053246863201800000);
872     aWeights.ChangeValue(5, 44) = +0.99800929984371112000;
873     aPoles.ChangeValue(5, 44) = gp_Pnt(-112.27672847568951000000, +0.24429462970498794000, -85.37690123862388700000);
874     aWeights.ChangeValue(5, 45) = +0.99801015470633669000;
875     aPoles.ChangeValue(5, 45) = gp_Pnt(-115.54769755356581000000, +0.24418656943131900000, -84.14279592325505100000);
876     aWeights.ChangeValue(5, 46) = +0.99801097177455889000;
877     aPoles.ChangeValue(5, 46) = gp_Pnt(-118.80182311076892000000, +0.24408328894344730000, -82.86408351153079400000);
878     aWeights.ChangeValue(5, 47) = +0.99801197940129383000;
879     aPoles.ChangeValue(5, 47) = gp_Pnt(-122.03843417449148000000, +0.24395592759703674000, -81.54111184389478200000);
880     aWeights.ChangeValue(5, 48) = +0.99801295017559344000;
881     aPoles.ChangeValue(5, 48) = gp_Pnt(-125.25678060282321000000, +0.24383322797751039000, -80.17408187890907800000);
882     aWeights.ChangeValue(5, 49) = +0.99801403221073270000;
883     aPoles.ChangeValue(5, 49) = gp_Pnt(-128.45617956663568000000, +0.24369647262362162000, -78.76334161483092100000);
884     aWeights.ChangeValue(5, 50) = +0.99801521135655380000;
885     aPoles.ChangeValue(5, 50) = gp_Pnt(-131.63592529803751000000, +0.24354745092247693000, -77.30919404502431300000);
886     aWeights.ChangeValue(5, 51) = +0.99801760008187401000;
887     aPoles.ChangeValue(5, 51) = gp_Pnt(-137.72900951211963000000, +0.24324557860805471000, -74.42165429070698200000);
888     aWeights.ChangeValue(5, 52) = +0.99801898346970708000;
889     aPoles.ChangeValue(5, 52) = gp_Pnt(-140.64518873661288000000, +0.24307076523393223000, -72.99426192178911800000);
890     aWeights.ChangeValue(5, 53) = +0.99801998518786039000;
891     aPoles.ChangeValue(5, 53) = gp_Pnt(-143.54316005505726000000, +0.24294418386170585000, -71.52981926220020600000);
892     aWeights.ChangeValue(5, 54) = +0.99802187318168345000;
893     aPoles.ChangeValue(5, 54) = gp_Pnt(-146.42260629144496000000, +0.24270562978064991000, -70.02903356238938700000);
894     aWeights.ChangeValue(5, 55) = +0.99802301113888081000;
895     aPoles.ChangeValue(5, 55) = gp_Pnt(-149.28266198929455000000, +0.24256185427332766000, -68.49161271016626500000);
896     aWeights.ChangeValue(5, 56) = +0.99802485896051119000;
897     aPoles.ChangeValue(5, 56) = gp_Pnt(-152.12302992679020000000, +0.24232840183433180000, -66.91836178765569800000);
898     aWeights.ChangeValue(5, 57) = +0.99802660746095961000;
899     aPoles.ChangeValue(5, 57) = gp_Pnt(-154.94301695331424000000, +0.24210751871096883000, -65.30929034698890200000);
900     aWeights.ChangeValue(5, 58) = +0.99803055992501044000;
901     aPoles.ChangeValue(5, 58) = gp_Pnt(-160.75642720778953000000, +0.24160825342055195000, -61.89368007550259400000);
902     aWeights.ChangeValue(5, 59) = +0.99803322842160846000;
903     aPoles.ChangeValue(5, 59) = gp_Pnt(-163.74717060555361000000, +0.24127121961594802000, -60.08255013672670200000);
904     aWeights.ChangeValue(5, 60) = +0.99803464125717123000;
905     aPoles.ChangeValue(5, 60) = gp_Pnt(-166.71086689375946000000, +0.24109275824918924000, -58.22731479955884700000);
906     aWeights.ChangeValue(5, 61) = +0.99803901668628470000;
907     aPoles.ChangeValue(5, 61) = gp_Pnt(-169.65297207222594000000, +0.24054025241076704000, -56.33806928337021700000);
908     aWeights.ChangeValue(5, 62) = +0.99804026123435818000;
909     aPoles.ChangeValue(5, 62) = gp_Pnt(-172.56427255537395000000, +0.24038308942389072000, -54.40260496408483000000);
910     aWeights.ChangeValue(5, 63) = +0.99804470691060532000;
911     aPoles.ChangeValue(5, 63) = gp_Pnt(-175.45101016300779000000, +0.23982181928534163000, -52.43032166263763100000);
912     aWeights.ChangeValue(5, 64) = +0.99804786265202527000;
913     aPoles.ChangeValue(5, 64) = gp_Pnt(-178.30970270493245000000, +0.23942347201733374000, -50.41823769283568900000);
914     aWeights.ChangeValue(5, 65) = +0.99805209132460959000;
915     aPoles.ChangeValue(5, 65) = gp_Pnt(-181.14080917168710000000, +0.23888978094458979000, -48.36782293133622100000);
916     aWeights.ChangeValue(5, 66) = +0.99805585511722006000;
917     aPoles.ChangeValue(5, 66) = gp_Pnt(-183.76963089028271000000, +0.23841474156011525000, -46.46384963887197700000);
918     aWeights.ChangeValue(5, 67) = +0.99806110806389992000;
919     aPoles.ChangeValue(5, 67) = gp_Pnt(-186.37480135254410000000, +0.23775204017864099000, -44.52702607060874100000);
920     aWeights.ChangeValue(5, 68) = +0.99806241123039841000;
921     aPoles.ChangeValue(5, 68) = gp_Pnt(-188.95443339023049000000, +0.23758721013871806000, -42.55611011320790700000);
922     aWeights.ChangeValue(5, 69) = +0.99807437025022461000;
923     aPoles.ChangeValue(5, 69) = gp_Pnt(-191.51185439080101000000, +0.23607937004601673000, -40.55588840407725800000);
924     aWeights.ChangeValue(5, 70) = +0.99807032269304363000;
925     aPoles.ChangeValue(5, 70) = gp_Pnt(-194.03956238778505000000, +0.23658914396266717000, -38.51843887702921200000);
926     aWeights.ChangeValue(5, 71) = +0.99808625039358922000;
927     aPoles.ChangeValue(5, 71) = gp_Pnt(-196.54607703546344000000, +0.23458111537982981000, -36.45513422497234800000);
928     aWeights.ChangeValue(5, 72) = +0.99809097922833689000;
929     aPoles.ChangeValue(5, 72) = gp_Pnt(-199.02284030117690000000, +0.23398526561785285000, -34.35633603568415100000);
930     aWeights.ChangeValue(5, 73) = +0.99809984631895676000;
931     aPoles.ChangeValue(5, 73) = gp_Pnt(-201.47284391020807000000, +0.23286808083306546000, -32.22700780168109700000);
932     aWeights.ChangeValue(5, 74) = +0.99810637147739267000;
933     aPoles.ChangeValue(5, 74) = gp_Pnt(-203.92239692899503000000, +0.23204542949601353000, -30.09717639714928000000);
934     aWeights.ChangeValue(5, 75) = +0.99812847998973830000;
935     aPoles.ChangeValue(5, 75) = gp_Pnt(-206.34684289021220000000, +0.22926391512904498000, -27.93902362306789300000);
936     aWeights.ChangeValue(5, 76) = +0.99809892249694432000;
937     aPoles.ChangeValue(5, 76) = gp_Pnt(-208.73420674519565000000, +0.23297935369059405000, -25.73750919512989600000);
938     aWeights.ChangeValue(5, 77) = +0.99819234539430379000;
939     aPoles.ChangeValue(5, 77) = gp_Pnt(-211.11258262007470000000, +0.22122441504945897000, -23.53328220960779800000);
940     aWeights.ChangeValue(5, 78) = +0.99816706733442118000;
941     aPoles.ChangeValue(5, 78) = gp_Pnt(-213.44890831521380000000, +0.22441150695403267000, -21.27426418813643800000);
942     aWeights.ChangeValue(5, 79) = +0.99818127777024523000;
943     aPoles.ChangeValue(5, 79) = gp_Pnt(-215.74298068197336000000, +0.22262736656649654000, -18.98075706196405200000);
944     aWeights.ChangeValue(5, 80) = +0.99819475509184485000;
945     aPoles.ChangeValue(5, 80) = gp_Pnt(-218.02209738817496000000, +0.22092240555297402000, -16.66880151580776100000);
946     aWeights.ChangeValue(5, 81) = +0.99826376750413803000;
947     aPoles.ChangeValue(5, 81) = gp_Pnt(-220.27506837008727000000, +0.21227676902692139000, -14.33587171753685400000);
948     aWeights.ChangeValue(6, 1) = +1.00955713824395920000;
949     aPoles.ChangeValue(6, 1) = gp_Pnt(+132.82497533600920000000, -0.00000000000000355271, -68.18672206105269100000);
950     aWeights.ChangeValue(6, 2) = +1.00956608612165510000;
951     aPoles.ChangeValue(6, 2) = gp_Pnt(+129.75720107675980000000, -0.00000000000001501048, -69.88134023490506800000);
952     aWeights.ChangeValue(6, 3) = +1.00957354292813720000;
953     aPoles.ChangeValue(6, 3) = gp_Pnt(+126.66630562875893000000, +0.00000000000001468880, -71.53414324810810900000);
954     aWeights.ChangeValue(6, 4) = +1.00957948395969920000;
955     aPoles.ChangeValue(6, 4) = gp_Pnt(+123.55299204973852000000, -0.00000000000002420214, -73.14476521965842400000);
956     aWeights.ChangeValue(6, 5) = +1.00958671248272540000;
957     aPoles.ChangeValue(6, 5) = gp_Pnt(+120.41786571412476000000, +0.00000000000000774289, -74.71276629883676900000);
958     aWeights.ChangeValue(6, 6) = +1.00959353559449030000;
959     aPoles.ChangeValue(6, 6) = gp_Pnt(+117.26165038381876000000, +0.00000000000002827238, -76.23787924846354300000);
960     aWeights.ChangeValue(6, 7) = +1.00959839503053540000;
961     aPoles.ChangeValue(6, 7) = gp_Pnt(+114.08506189168672000000, -0.00000000000002567399, -77.71984701658058700000);
962     aWeights.ChangeValue(6, 8) = +1.00960405269295440000;
963     aPoles.ChangeValue(6, 8) = gp_Pnt(+110.88875430250306000000, +0.00000000000001531652, -79.15824703626482500000);
964     aWeights.ChangeValue(6, 9) = +1.00961384794965610000;
965     aPoles.ChangeValue(6, 9) = gp_Pnt(+104.45816547225203000000, +0.00000000000002372811, -81.94743615023858800000);
966     aWeights.ChangeValue(6, 10) = +1.00961857675613920000;
967     aPoles.ChangeValue(6, 10) = gp_Pnt(+101.22387341781818000000, -0.00000000000003253030, -83.29820264563102200000);
968     aWeights.ChangeValue(6, 11) = +1.00962274789490230000;
969     aPoles.ChangeValue(6, 11) = gp_Pnt(+97.97127406275538400000, +0.00000000000002165813, -84.60486564781918200000);
970     aWeights.ChangeValue(6, 12) = +1.00962679188945900000;
971     aPoles.ChangeValue(6, 12) = gp_Pnt(+94.70106106239124700000, +0.00000000000003307844, -85.86712155505158300000);
972     aWeights.ChangeValue(6, 13) = +1.00963059350859920000;
973     aPoles.ChangeValue(6, 13) = gp_Pnt(+91.41394873512904000000, -0.00000000000001002370, -87.08469757155246800000);
974     aWeights.ChangeValue(6, 14) = +1.00963398843787310000;
975     aPoles.ChangeValue(6, 14) = gp_Pnt(+88.11065082060795800000, -0.00000000000001620026, -88.25733602781997400000);
976     aWeights.ChangeValue(6, 15) = +1.00963733185343440000;
977     aPoles.ChangeValue(6, 15) = gp_Pnt(+84.79187377942922400000, +0.00000000000001387836, -89.38476986722990600000);
978     aWeights.ChangeValue(6, 16) = +1.00964648640037490000;
979     aPoles.ChangeValue(6, 16) = gp_Pnt(+74.79138897281484300000, +0.00000000000001147648, -92.63077806554609600000);
980     aWeights.ChangeValue(6, 17) = +1.00965176794147980000;
981     aPoles.ChangeValue(6, 17) = gp_Pnt(+68.06556894151637500000, +0.00000000000001348105, -94.61292925638954900000);
982     aWeights.ChangeValue(6, 18) = +1.00965632094816880000;
983     aPoles.ChangeValue(6, 18) = gp_Pnt(+61.28620656548358900000, +0.00000000000001132208, -96.41133393799678700000);
984     aWeights.ChangeValue(6, 19) = +1.00966023501695920000;
985     aPoles.ChangeValue(6, 19) = gp_Pnt(+54.45890525472331200000, +0.00000000000000779610, -98.02434736777235000000);
986     aWeights.ChangeValue(6, 20) = +1.00966358166845540000;
987     aPoles.ChangeValue(6, 20) = gp_Pnt(+47.58955228763309700000, +0.00000000000000496426, -99.45056478986435900000);
988     aWeights.ChangeValue(6, 21) = +1.00966641434734750000;
989     aPoles.ChangeValue(6, 21) = gp_Pnt(+40.68431826182812500000, +0.00000000000000415229, -100.68882169811890000000);
990     aWeights.ChangeValue(6, 22) = +1.00966876842241240000;
991     aPoles.ChangeValue(6, 22) = gp_Pnt(+33.74965652868991100000, +0.00000000000000595055, -101.73819405254569000000);
992     aWeights.ChangeValue(6, 23) = +1.00967255617655690000;
993     aPoles.ChangeValue(6, 23) = gp_Pnt(+19.83474481990451800000, +0.00000000000000626687, -103.45778313292877000000);
994     aWeights.ChangeValue(6, 24) = +1.00967399859793900000;
995     aPoles.ChangeValue(6, 24) = gp_Pnt(+12.85396744583563800000, +0.00000000000000961706, -104.12796934503771000000);
996     aWeights.ChangeValue(6, 25) = +1.00967501382969150000;
997     aPoles.ChangeValue(6, 25) = gp_Pnt(+5.85612456199985140000, +0.00000000000001451316, -104.60783896197547000000);
998     aWeights.ChangeValue(6, 26) = +1.00967561936958040000;
999     aPoles.ChangeValue(6, 26) = gp_Pnt(-1.15266320632332260000, +0.00000000000001739414, -104.89689790453474000000);
1000     aWeights.ChangeValue(6, 27) = +1.00967582483410530000;
1001     aPoles.ChangeValue(6, 27) = gp_Pnt(-8.16630892272242730000, +0.00000000000001688939, -104.99487618531697000000);
1002     aWeights.ChangeValue(6, 28) = +1.00967563195849790000;
1003     aPoles.ChangeValue(6, 28) = gp_Pnt(-15.17875958769639600000, +0.00000000000001381871, -104.90172793642448000000);
1004     aWeights.ChangeValue(6, 29) = +1.00967503459672230000;
1005     aPoles.ChangeValue(6, 29) = gp_Pnt(-22.18399638815323600000, +0.00000000000001119232, -104.61763141615558000000);
1006     aWeights.ChangeValue(6, 30) = +1.00967300468446440000;
1007     aPoles.ChangeValue(6, 30) = gp_Pnt(-36.16808769247344200000, +0.00000000000001926896, -103.66834538209933000000);
1008     aWeights.ChangeValue(6, 31) = +1.00967156777535520000;
1009     aPoles.ChangeValue(6, 31) = gp_Pnt(-43.14695215605046700000, +0.00000000000002086710, -103.00315490229345000000);
1010     aWeights.ChangeValue(6, 32) = +1.00966969979090850000;
1011     aPoles.ChangeValue(6, 32) = gp_Pnt(-50.10664482445217500000, +0.00000000000002115378, -102.14781821392242000000);
1012     aWeights.ChangeValue(6, 33) = +1.00966737970297340000;
1013     aPoles.ChangeValue(6, 33) = gp_Pnt(-57.04121502398449900000, +0.00000000000002158031, -101.10296070558179000000);
1014     aWeights.ChangeValue(6, 34) = +1.00966457365849420000;
1015     aPoles.ChangeValue(6, 34) = gp_Pnt(-63.94474533155499800000, +0.00000000000002290082, -99.86943240681669900000);
1016     aWeights.ChangeValue(6, 35) = +1.00966123497950670000;
1017     aPoles.ChangeValue(6, 35) = gp_Pnt(-70.81135197820185600000, +0.00000000000002517228, -98.44830786498150100000);
1018     aWeights.ChangeValue(6, 36) = +1.00965730416314160000;
1019     aPoles.ChangeValue(6, 36) = gp_Pnt(-77.63518524225725100000, +0.00000000000002775445, -96.84088598857995600000);
1020     aWeights.ChangeValue(6, 37) = +1.00965057624219750000;
1021     aPoles.ChangeValue(6, 37) = gp_Pnt(-87.55609990295042200000, +0.00000000000002423047, -94.21659328767886200000);
1022     aWeights.ChangeValue(6, 38) = +1.00964829695753600000;
1023     aPoles.ChangeValue(6, 38) = gp_Pnt(-90.69129861847109500000, +0.00000000000002587407, -93.34466557470412300000);
1024     aWeights.ChangeValue(6, 39) = +1.00964586498085130000;
1025     aPoles.ChangeValue(6, 39) = gp_Pnt(-93.81544408055053500000, +0.00000000000003006614, -92.43305897005754400000);
1026     aWeights.ChangeValue(6, 40) = +1.00964327207695040000;
1027     aPoles.ChangeValue(6, 40) = gp_Pnt(-96.92795589621758300000, +0.00000000000003388207, -91.48193626907418300000);
1028     aWeights.ChangeValue(6, 41) = +1.00964050782223150000;
1029     aPoles.ChangeValue(6, 41) = gp_Pnt(-100.02825520717420000000, +0.00000000000003564727, -90.49147079864104600000);
1030     aWeights.ChangeValue(6, 42) = +1.00963755960468200000;
1031     aPoles.ChangeValue(6, 42) = gp_Pnt(-103.11576472135789000000, +0.00000000000003493709, -89.46184640324143800000);
1032     aWeights.ChangeValue(6, 43) = +1.00963441262388120000;
1033     aPoles.ChangeValue(6, 43) = gp_Pnt(-106.18990874397944000000, +0.00000000000003257692, -88.39325742978746800000);
1034     aWeights.ChangeValue(6, 44) = +1.00962747055172470000;
1035     aPoles.ChangeValue(6, 44) = gp_Pnt(-112.54574015681582000000, +0.00000000000006160655, -86.09336936272072200000);
1036     aWeights.ChangeValue(6, 45) = +1.00962344856191890000;
1037     aPoles.ChangeValue(6, 45) = gp_Pnt(-115.82520602454126000000, -0.00000000000003931317, -84.85588414554271700000);
1038     aWeights.ChangeValue(6, 46) = +1.00961960432502520000;
1039     aPoles.ChangeValue(6, 46) = gp_Pnt(-119.08778487668772000000, +0.00000000000016494845, -83.57368219250022900000);
1040     aWeights.ChangeValue(6, 47) = +1.00961486341637220000;
1041     aPoles.ChangeValue(6, 47) = gp_Pnt(-122.33277704237545000000, -0.00000000000006102663, -82.24707666574315100000);
1042     aWeights.ChangeValue(6, 48) = +1.00961029578642010000;
1043     aPoles.ChangeValue(6, 48) = gp_Pnt(-125.55945424028559000000, +0.00000000000005443726, -80.87630621413205700000);
1044     aWeights.ChangeValue(6, 49) = +1.00960520453872830000;
1045     aPoles.ChangeValue(6, 49) = gp_Pnt(-128.76711471386264000000, +0.00000000000006731284, -79.46169679871513800000);
1046     aWeights.ChangeValue(6, 50) = +1.00959965618806670000;
1047     aPoles.ChangeValue(6, 50) = gp_Pnt(-131.95505034236234000000, +0.00000000000001744703, -78.00355594499717400000);
1048     aWeights.ChangeValue(6, 51) = +1.00958841592259230000;
1049     aPoles.ChangeValue(6, 51) = gp_Pnt(-138.06383173526737000000, +0.00000000000005091738, -75.10807262033468100000);
1050     aWeights.ChangeValue(6, 52) = +1.00958190609477040000;
1051     aPoles.ChangeValue(6, 52) = gp_Pnt(-140.98751167669514000000, +0.00000000000001249767, -73.67671445695528100000);
1052     aWeights.ChangeValue(6, 53) = +1.00957719226123470000;
1053     aPoles.ChangeValue(6, 53) = gp_Pnt(-143.89297197091258000000, +0.00000000000004304958, -72.20827197874005800000);
1054     aWeights.ChangeValue(6, 54) = +1.00956830736954160000;
1055     aPoles.ChangeValue(6, 54) = gp_Pnt(-146.77976177895343000000, +0.00000000000014315600, -70.70325097869228200000);
1056     aWeights.ChangeValue(6, 55) = +1.00956295195680430000;
1057     aPoles.ChangeValue(6, 55) = gp_Pnt(-149.64716302220674000000, -0.00000000000013374459, -69.16163316263994400000);
1058     aWeights.ChangeValue(6, 56) = +1.00955425555763600000;
1059     aPoles.ChangeValue(6, 56) = gp_Pnt(-152.49476001470052000000, +0.00000000000014982315, -67.58397318476696100000);
1060     aWeights.ChangeValue(6, 57) = +1.00954602613024340000;
1061     aPoles.ChangeValue(6, 57) = gp_Pnt(-155.32190503332637000000, -0.00000000000000021066, -65.97043121899140800000);
1062     aWeights.ChangeValue(6, 58) = +1.00952742278739690000;
1063     aPoles.ChangeValue(6, 58) = gp_Pnt(-161.15007234465017000000, -0.00000000000001992904, -62.54527347940126700000);
1064     aWeights.ChangeValue(6, 59) = +1.00951486183122910000;
1065     aPoles.ChangeValue(6, 59) = gp_Pnt(-164.14837014605524000000, +0.00000000000023572067, -60.72896647597298900000);
1066     aWeights.ChangeValue(6, 60) = +1.00950821186278380000;
1067     aPoles.ChangeValue(6, 60) = gp_Pnt(-167.11960531963629000000, -0.00000000000028988207, -58.86870049528032900000);
1068     aWeights.ChangeValue(6, 61) = +1.00948761363721440000;
1069     aPoles.ChangeValue(6, 61) = gp_Pnt(-170.06906478280905000000, +0.00000000000040689923, -56.97372124744497800000);
1070     aWeights.ChangeValue(6, 62) = +1.00948175483910860000;
1071     aPoles.ChangeValue(6, 62) = gp_Pnt(-172.98765254825670000000, -0.00000000000024250881, -55.03312548926784600000);
1072     aWeights.ChangeValue(6, 63) = +1.00946082358368820000;
1073     aPoles.ChangeValue(6, 63) = gp_Pnt(-175.88148729884773000000, +0.00000000000015443744, -53.05496328096450000000);
1074     aWeights.ChangeValue(6, 64) = +1.00944596410276510000;
1075     aPoles.ChangeValue(6, 64) = gp_Pnt(-178.74719668858941000000, +0.00000000000002184305, -51.03719587787818300000);
1076     aWeights.ChangeValue(6, 65) = +1.00942605045267690000;
1077     aPoles.ChangeValue(6, 65) = gp_Pnt(-181.58512029181043000000, +0.00000000000003863576, -48.98084041218928800000);
1078     aWeights.ChangeValue(6, 66) = +1.00940832657292460000;
1079     aPoles.ChangeValue(6, 66) = gp_Pnt(-184.22041885135505000000, +0.00000000000012642202, -47.07128183802177500000);
1080     aWeights.ChangeValue(6, 67) = +1.00938358350016230000;
1081     aPoles.ChangeValue(6, 67) = gp_Pnt(-186.83172267077580000000, -0.00000000000026075896, -45.12863792869809700000);
1082     aWeights.ChangeValue(6, 68) = +1.00937745534316470000;
1083     aPoles.ChangeValue(6, 68) = gp_Pnt(-189.41814135962036000000, +0.00000000000050815389, -43.15221363464823400000);
1084     aWeights.ChangeValue(6, 69) = +1.00932110415609880000;
1085     aPoles.ChangeValue(6, 69) = gp_Pnt(-191.98049421722968000000, -0.00000000000036869153, -41.14519558079494000000);
1086     aWeights.ChangeValue(6, 70) = +1.00934018958992230000;
1087     aPoles.ChangeValue(6, 70) = gp_Pnt(-194.51554398045388000000, +0.00000000000024701945, -39.10283303403318900000);
1088     aWeights.ChangeValue(6, 71) = +1.00926513417534820000;
1089     aPoles.ChangeValue(6, 71) = gp_Pnt(-197.02654362639632000000, +0.00000000000002378284, -37.03182458375535900000);
1090     aWeights.ChangeValue(6, 72) = +1.00924284324015100000;
1091     aPoles.ChangeValue(6, 72) = gp_Pnt(-199.50902604112426000000, +0.00000000000001468063, -34.92696457232537500000);
1092     aWeights.ChangeValue(6, 73) = +1.00920104311988210000;
1093     aPoles.ChangeValue(6, 73) = gp_Pnt(-201.96417476016930000000, +0.00000000000004485301, -32.79087292323346500000);
1094     aWeights.ChangeValue(6, 74) = +1.00917029694376930000;
1095     aPoles.ChangeValue(6, 74) = gp_Pnt(-204.41947086956830000000, +0.00000000000007013856, -30.65436716589900700000);
1096     aWeights.ChangeValue(6, 75) = +1.00906597799622610000;
1097     aPoles.ChangeValue(6, 75) = gp_Pnt(-206.84718146821811000000, -0.00000000000006381675, -28.48746943619916600000);
1098     aWeights.ChangeValue(6, 76) = +1.00920552993238920000;
1099     aPoles.ChangeValue(6, 76) = gp_Pnt(-209.24487385523256000000, +0.00000000000020688933, -26.28443183778934900000);
1100     aWeights.ChangeValue(6, 77) = +1.00876475817276390000;
1101     aPoles.ChangeValue(6, 77) = gp_Pnt(-211.61934752962611000000, -0.00000000000012087895, -24.05869960942788700000);
1102     aWeights.ChangeValue(6, 78) = +1.00888387250480620000;
1103     aPoles.ChangeValue(6, 78) = gp_Pnt(-213.96155431166437000000, +0.00000000000019025578, -21.80066237623914200000);
1104     aWeights.ChangeValue(6, 79) = +1.00881670070678450000;
1105     aPoles.ChangeValue(6, 79) = gp_Pnt(-216.26151615033589000000, -0.00000000000009572292, -19.49741392382435400000);
1106     aWeights.ChangeValue(6, 80) = +1.00875338528797620000;
1107     aPoles.ChangeValue(6, 80) = gp_Pnt(-218.54531424806936000000, +0.00000000000008182630, -17.17704407009146500000);
1108     aWeights.ChangeValue(6, 81) = +1.00842683370719580000;
1109     aPoles.ChangeValue(6, 81) = gp_Pnt(-220.79435406720884000000, +0.00000000000004973799, -14.82789528118522200000);
1110     aWeights.ChangeValue(7, 1) = +1.02986327036737910000;
1111     aPoles.ChangeValue(7, 1) = gp_Pnt(+133.20307692191452000000, -0.00000000000000177636, -68.87095947031473000000);
1112     aWeights.ChangeValue(7, 2) = +1.02989244478762340000;
1113     aPoles.ChangeValue(7, 2) = gp_Pnt(+130.12738123407763000000, -0.00000000000000516390, -70.57040146390383500000);
1114     aWeights.ChangeValue(7, 3) = +1.02991676091110000000;
1115     aPoles.ChangeValue(7, 3) = gp_Pnt(+127.02840986317391000000, +0.00000000000000554535, -72.22789464235242500000);
1116     aWeights.ChangeValue(7, 4) = +1.02993613450137910000;
1117     aPoles.ChangeValue(7, 4) = gp_Pnt(+123.90694758506712000000, -0.00000000000000702621, -73.84302715009133100000);
1118     aWeights.ChangeValue(7, 5) = +1.02995970896171030000;
1119     aPoles.ChangeValue(7, 5) = gp_Pnt(+120.76360256847768000000, -0.00000000000000047370, -75.41549467632542300000);
1120     aWeights.ChangeValue(7, 6) = +1.02998196300924330000;
1121     aPoles.ChangeValue(7, 6) = gp_Pnt(+117.59908279457284000000, +0.00000000000000772901, -76.94495426059752700000);
1122     aWeights.ChangeValue(7, 7) = +1.02999781361776170000;
1123     aPoles.ChangeValue(7, 7) = gp_Pnt(+114.41407453952652000000, -0.00000000000000327310, -78.43108601253017300000);
1124     aWeights.ChangeValue(7, 8) = +1.03001626830282000000;
1125     aPoles.ChangeValue(7, 8) = gp_Pnt(+111.20931631680004000000, +0.00000000000000421483, -79.87356087705671800000);
1126     aWeights.ChangeValue(7, 9) = +1.03004822145821140000;
1127     aPoles.ChangeValue(7, 9) = gp_Pnt(+104.76172782897289000000, +0.00000000000000259283, -82.67059011797552200000);
1128     aWeights.ChangeValue(7, 10) = +1.03006364818919470000;
1129     aPoles.ChangeValue(7, 10) = gp_Pnt(+101.51889932580750000000, +0.00000000000000793496, -84.02514647707548100000);
1130     aWeights.ChangeValue(7, 11) = +1.03007725635610380000;
1131     aPoles.ChangeValue(7, 11) = gp_Pnt(+98.25768758130365700000, +0.00000000000000127608, -85.33546669488836800000);
1132     aWeights.ChangeValue(7, 12) = +1.03009045031501540000;
1133     aPoles.ChangeValue(7, 12) = gp_Pnt(+94.97880175952953200000, +0.00000000000000289709, -86.60126064632369500000);
1134     aWeights.ChangeValue(7, 13) = +1.03010285398165520000;
1135     aPoles.ChangeValue(7, 13) = gp_Pnt(+91.68295682468645700000, +0.00000000000000548904, -87.82224920548925700000);
1136     aWeights.ChangeValue(7, 14) = +1.03011393120368040000;
1137     aPoles.ChangeValue(7, 14) = gp_Pnt(+88.37086140882031800000, -0.00000000000000004450, -88.99816853898946100000);
1138     aWeights.ChangeValue(7, 15) = +1.03012484065781210000;
1139     aPoles.ChangeValue(7, 15) = gp_Pnt(+85.04324466385365600000, +0.00000000000000407116, -90.12875955698966400000);
1140     aWeights.ChangeValue(7, 16) = +1.03015471267321310000;
1141     aPoles.ChangeValue(7, 16) = gp_Pnt(+75.01621211174902700000, +0.00000000000001208092, -93.38380423550353300000);
1142     aWeights.ChangeValue(7, 17) = +1.03017194800922480000;
1143     aPoles.ChangeValue(7, 17) = gp_Pnt(+68.27251352067813200000, +0.00000000000001147779, -95.37146758037383200000);
1144     aWeights.ChangeValue(7, 18) = +1.03018680682765580000;
1145     aPoles.ChangeValue(7, 18) = gp_Pnt(+61.47507566136914600000, +0.00000000000000851456, -97.17487791831784700000);
1146     aWeights.ChangeValue(7, 19) = +1.03019958109549560000;
1147     aPoles.ChangeValue(7, 19) = gp_Pnt(+54.62953031922813800000, +0.00000000000000645560, -98.79238303220959900000);
1148     aWeights.ChangeValue(7, 20) = +1.03021050389503310000;
1149     aPoles.ChangeValue(7, 20) = gp_Pnt(+47.74179355100338300000, +0.00000000000000683493, -100.22257163394704000000);
1150     aWeights.ChangeValue(7, 21) = +1.03021974942385920000;
1151     aPoles.ChangeValue(7, 21) = gp_Pnt(+40.81806392732334400000, +0.00000000000000945638, -101.46427420633951000000);
1152     aWeights.ChangeValue(7, 22) = +1.03022743299486530000;
1153     aPoles.ChangeValue(7, 22) = gp_Pnt(+33.86482072309787100000, +0.00000000000001239365, -102.51656369616552000000);
1154     aWeights.ChangeValue(7, 23) = +1.03023979631718960000;
1155     aPoles.ChangeValue(7, 23) = gp_Pnt(+19.91267581058432200000, +0.00000000000001269021, -104.24092170462040000000);
1156     aWeights.ChangeValue(7, 24) = +1.03024450452679180000;
1157     aPoles.ChangeValue(7, 24) = gp_Pnt(+12.91322103073442500000, +0.00000000000001310657, -104.91296575233191000000);
1158     aWeights.ChangeValue(7, 25) = +1.03024781840890150000;
1159     aPoles.ChangeValue(7, 25) = gp_Pnt(+5.89663552968925500000, +0.00000000000001362222, -105.39416639705574000000);
1160     aWeights.ChangeValue(7, 26) = +1.03024979501191980000;
1161     aPoles.ChangeValue(7, 26) = gp_Pnt(-1.13093554742009240000, +0.00000000000001442955, -105.68402704533355000000);
1162     aWeights.ChangeValue(7, 27) = +1.03025046568879810000;
1163     aPoles.ChangeValue(7, 27) = gp_Pnt(-8.16338049757019310000, +0.00000000000001553070, -105.78227646648484000000);
1164     aWeights.ChangeValue(7, 28) = +1.03024983609703620000;
1165     aPoles.ChangeValue(7, 28) = gp_Pnt(-15.19462185431612500000, +0.00000000000001673746, -105.68886888131540000000);
1166     aWeights.ChangeValue(7, 29) = +1.03024788619868390000;
1167     aPoles.ChangeValue(7, 29) = gp_Pnt(-22.21861718693262200000, +0.00000000000001767135, -105.40398398356824000000);
1168     aWeights.ChangeValue(7, 30) = +1.03024126030624560000;
1169     aPoles.ChangeValue(7, 30) = gp_Pnt(-36.24014829916134100000, +0.00000000000002019891, -104.45206611492652000000);
1170     aWeights.ChangeValue(7, 31) = +1.03023657011944200000;
1171     aPoles.ChangeValue(7, 31) = gp_Pnt(-43.23771519136024500000, +0.00000000000002161068, -103.78502949380328000000);
1172     aWeights.ChangeValue(7, 32) = +1.03023047292900840000;
1173     aPoles.ChangeValue(7, 32) = gp_Pnt(-50.21605719916001900000, +0.00000000000002249329, -102.92731708926736000000);
1174     aWeights.ChangeValue(7, 33) = +1.03022290017099440000;
1175     aPoles.ChangeValue(7, 33) = gp_Pnt(-57.16920057960702200000, +0.00000000000002320995, -101.87955571848956000000);
1176     aWeights.ChangeValue(7, 34) = +1.03021374148842140000;
1177     aPoles.ChangeValue(7, 34) = gp_Pnt(-64.09120253994868200000, +0.00000000000002399266, -100.64259867222304000000);
1178     aWeights.ChangeValue(7, 35) = +1.03020284473128120000;
1179     aPoles.ChangeValue(7, 35) = gp_Pnt(-70.97615252947152000000, +0.00000000000002494226, -99.21752532044712300000);
1180     aWeights.ChangeValue(7, 36) = +1.03019001595653670000;
1181     aPoles.ChangeValue(7, 36) = gp_Pnt(-77.81817349811507300000, +0.00000000000002602838, -97.60564061068184600000);
1182     aWeights.ChangeValue(7, 37) = +1.03016805964614980000;
1183     aPoles.ChangeValue(7, 37) = gp_Pnt(-87.76549855749630100000, +0.00000000000002703745, -94.97405836608523100000);
1184     aWeights.ChangeValue(7, 38) = +1.03016062145972500000;
1185     aPoles.ChangeValue(7, 38) = gp_Pnt(-90.90906843451735100000, +0.00000000000002735353, -94.09969925934423400000);
1186     aWeights.ChangeValue(7, 39) = +1.03015268516758060000;
1187     aPoles.ChangeValue(7, 39) = gp_Pnt(-94.04154842308000200000, +0.00000000000002795160, -93.18554984223239000000);
1188     aWeights.ChangeValue(7, 40) = +1.03014422393874510000;
1189     aPoles.ChangeValue(7, 40) = gp_Pnt(-97.16235536263198500000, +0.00000000000002873660, -92.23177350871787900000);
1190     aWeights.ChangeValue(7, 41) = +1.03013520381253840000;
1191     aPoles.ChangeValue(7, 41) = gp_Pnt(-100.27090735629974000000, +0.00000000000002960449, -91.23854430518403500000);
1192     aWeights.ChangeValue(7, 42) = +1.03012558369857450000;
1193     aPoles.ChangeValue(7, 42) = gp_Pnt(-103.36662387191370000000, +0.00000000000003044224, -90.20604688574815100000);
1194     aWeights.ChangeValue(7, 43) = +1.03011531537676040000;
1195     aPoles.ChangeValue(7, 43) = gp_Pnt(-106.44892584135401000000, +0.00000000000003112785, -89.13447646370049400000);
1196     aWeights.ChangeValue(7, 44) = +1.03009266486582220000;
1197     aPoles.ChangeValue(7, 44) = gp_Pnt(-112.82164316087234000000, +0.00000000000002877514, -86.82815610446842000000);
1198     aWeights.ChangeValue(7, 45) = +1.03007954250937140000;
1199     aPoles.ChangeValue(7, 45) = gp_Pnt(-116.10982863064515000000, +0.00000000000005217709, -85.58719260568324200000);
1200     aWeights.ChangeValue(7, 46) = +1.03006700046765860000;
1201     aPoles.ChangeValue(7, 46) = gp_Pnt(-119.38108228759732000000, -0.00000000000000364635, -84.30140001571530200000);
1202     aWeights.ChangeValue(7, 47) = +1.03005153385603830000;
1203     aPoles.ChangeValue(7, 47) = gp_Pnt(-122.63466837574235000000, +0.00000000000007773224, -82.97105629274108200000);
1204     aWeights.ChangeValue(7, 48) = +1.03003663316235050000;
1205     aPoles.ChangeValue(7, 48) = gp_Pnt(-125.86988610286646000000, +0.00000000000000501775, -81.59643931580511400000);
1206     aWeights.ChangeValue(7, 49) = +1.03002002524069390000;
1207     aPoles.ChangeValue(7, 49) = gp_Pnt(-129.08600965998806000000, +0.00000000000004872530, -80.17785297868806500000);
1208     aWeights.ChangeValue(7, 50) = +1.03000192732158440000;
1209     aPoles.ChangeValue(7, 50) = gp_Pnt(-132.28232849510800000000, +0.00000000000003627431, -78.71561001568775900000);
1210     aWeights.ChangeValue(7, 51) = +1.02996526567106140000;
1211     aPoles.ChangeValue(7, 51) = gp_Pnt(-138.40719443250111000000, +0.00000000000004030865, -75.81195871455292900000);
1212     aWeights.ChangeValue(7, 52) = +1.02994403451619650000;
1213     aPoles.ChangeValue(7, 52) = gp_Pnt(-141.33856968181306000000, +0.00000000000003444592, -74.37651555974527200000);
1214     aWeights.ChangeValue(7, 53) = +1.02992866105480000000;
1215     aPoles.ChangeValue(7, 53) = gp_Pnt(-144.25171811139330000000, +0.00000000000003429445, -72.90395453557894700000);
1216     aWeights.ChangeValue(7, 54) = +1.02989968743351530000;
1217     aPoles.ChangeValue(7, 54) = gp_Pnt(-147.14603336223070000000, +0.00000000000004355038, -71.39457006641885100000);
1218     aWeights.ChangeValue(7, 55) = +1.02988222474475720000;
1219     aPoles.ChangeValue(7, 55) = gp_Pnt(-150.02095857157173000000, +0.00000000000003217269, -69.84863841933133700000);
1220     aWeights.ChangeValue(7, 56) = +1.02985386954430420000;
1221     aPoles.ChangeValue(7, 56) = gp_Pnt(-152.87595706513403000000, +0.00000000000003648661, -68.26644064265008200000);
1222     aWeights.ChangeValue(7, 57) = +1.02982704006085530000;
1223     aPoles.ChangeValue(7, 57) = gp_Pnt(-155.71041601974636000000, +0.00000000000003591181, -66.64830754728993200000);
1224     aWeights.ChangeValue(7, 58) = +1.02976639514271140000;
1225     aPoles.ChangeValue(7, 58) = gp_Pnt(-161.55369960091491000000, +0.00000000000003646415, -63.21332070345936700000);
1226     aWeights.ChangeValue(7, 59) = +1.02972545417744080000;
1227     aPoles.ChangeValue(7, 59) = gp_Pnt(-164.55974256681068000000, +0.00000000000003294676, -61.39167299907511900000);
1228     aWeights.ChangeValue(7, 60) = +1.02970377642180270000;
1229     aPoles.ChangeValue(7, 60) = gp_Pnt(-167.53873683551103000000, +0.00000000000002190344, -59.52621075357659900000);
1230     aWeights.ChangeValue(7, 61) = +1.02963665582099750000;
1231     aPoles.ChangeValue(7, 61) = gp_Pnt(-170.49570646978711000000, +0.00000000000009010479, -57.62531748377598000000);
1232     aWeights.ChangeValue(7, 62) = +1.02961756328110620000;
1233     aPoles.ChangeValue(7, 62) = gp_Pnt(-173.42176702363508000000, -0.00000000000003499440, -55.67944052993496500000);
1234     aWeights.ChangeValue(7, 63) = +1.02954937293567860000;
1235     aPoles.ChangeValue(7, 63) = gp_Pnt(-176.32284460610933000000, +0.00000000000007636921, -53.69521656711459900000);
1236     aWeights.ChangeValue(7, 64) = +1.02950097342681770000;
1237     aPoles.ChangeValue(7, 64) = gp_Pnt(-179.19569709355173000000, +0.00000000000003273955, -51.67161593723249500000);
1238     aWeights.ChangeValue(7, 65) = +1.02943612532291810000;
1239     aPoles.ChangeValue(7, 65) = gp_Pnt(-182.04053139917158000000, +0.00000000000003996803, -49.60917258111981500000);
1240     aWeights.ChangeValue(7, 66) = +1.02937840445762090000;
1241     aPoles.ChangeValue(7, 66) = gp_Pnt(-184.68250151172640000000, +0.00000000000004112926, -47.69381589112448700000);
1242     aWeights.ChangeValue(7, 67) = +1.02929786839945800000;
1243     aPoles.ChangeValue(7, 67) = gp_Pnt(-187.30004443981446000000, +0.00000000000003629801, -45.74517623046489900000);
1244     aWeights.ChangeValue(7, 68) = +1.02927785532615720000;
1245     aPoles.ChangeValue(7, 68) = gp_Pnt(-189.89358418563035000000, +0.00000000000003708012, -43.76295173174737800000);
1246     aWeights.ChangeValue(7, 69) = +1.02909457173661250000;
1247     aPoles.ChangeValue(7, 69) = gp_Pnt(-192.46070903458983000000, +0.00000000000005500515, -41.74904085552218200000);
1248     aWeights.ChangeValue(7, 70) = +1.02915656102268340000;
1249     aPoles.ChangeValue(7, 70) = gp_Pnt(-195.00353322314638000000, +0.00000000000002645256, -39.70148425813464900000);
1250     aWeights.ChangeValue(7, 71) = +1.02891246604057510000;
1251     aPoles.ChangeValue(7, 71) = gp_Pnt(-197.51895024482548000000, +0.00000000000005006422, -37.62251287581096900000);
1252     aWeights.ChangeValue(7, 72) = +1.02884001996279940000;
1253     aPoles.ChangeValue(7, 72) = gp_Pnt(-200.00717902020989000000, +0.00000000000003866246, -35.51147139839754600000);
1254     aWeights.ChangeValue(7, 73) = +1.02870418206103280000;
1255     aPoles.ChangeValue(7, 73) = gp_Pnt(-202.46745722827831000000, +0.00000000000003996803, -33.36845405838467800000);
1256     aWeights.ChangeValue(7, 74) = +1.02860417892808040000;
1257     aPoles.ChangeValue(7, 74) = gp_Pnt(-204.92874075079348000000, +0.00000000000003952569, -31.22492832365916000000);
1258     aWeights.ChangeValue(7, 75) = +1.02826579045574770000;
1259     aPoles.ChangeValue(7, 75) = gp_Pnt(-207.35951843182116000000, +0.00000000000002864861, -29.04902036970887700000);
1260     aWeights.ChangeValue(7, 76) = +1.02871793966685040000;
1261     aPoles.ChangeValue(7, 76) = gp_Pnt(-209.76815931164757000000, +0.00000000000007786791, -26.84449461829588300000);
1262     aWeights.ChangeValue(7, 77) = +1.02728787827248790000;
1263     aPoles.ChangeValue(7, 77) = gp_Pnt(-212.13952611955784000000, -0.00000000000002645359, -24.59453985262025100000);
1264     aWeights.ChangeValue(7, 78) = +1.02767535385751650000;
1265     aPoles.ChangeValue(7, 78) = gp_Pnt(-214.48523983715771000000, +0.00000000000011316462, -22.34028621398329100000);
1266     aWeights.ChangeValue(7, 79) = +1.02745809923196680000;
1267     aPoles.ChangeValue(7, 79) = gp_Pnt(-216.79261871005519000000, -0.00000000000002978790, -20.02558452892611700000);
1268     aWeights.ChangeValue(7, 80) = +1.02725110106353260000;
1269     aPoles.ChangeValue(7, 80) = gp_Pnt(-219.08116944862113000000, +0.00000000000005732296, -17.69632354506026700000);
1270     aWeights.ChangeValue(7, 81) = +1.02619749797986360000;
1271     aPoles.ChangeValue(7, 81) = gp_Pnt(-221.32510969435936000000, +0.00000000000004618528, -15.33078661161192400000);
1272   }
1273   ////
1274
1275   const Handle(Geom_Surface) aS1 = new Geom_BSplineSurface(aPoles, aWeights, aUKnots, aVKnots, aUMult, aVMult, aUDegree, aVDegree);
1276
1277   char buff[1024];
1278
1279   Sprintf(buff, "%s_1", theArgVal[1]);
1280   DrawTrSurf::Set(buff, aS1);
1281   theDI << buff << " ";
1282
1283   Sprintf(buff, "%s_2", theArgVal[1]);
1284   DrawTrSurf::Set(buff, aS2);
1285   theDI << buff << "\n";
1286
1287   return 0;
1288 }
1289
1290 namespace AllocTest
1291 {
1292   // The test is based of occupying of all available virtual memory.
1293   // Obviously it has no sense on 64-bit platforms.
1294
1295   enum AllocTestStatus
1296   {
1297     NotApplicable = 0x1,
1298     OUMCatchOK    = 0x2,
1299     OUMCatchFail  = 0x4
1300   };
1301
1302   template<int> int test()
1303   {
1304     // non-32-bit implementation
1305     return NotApplicable;
1306   }
1307   
1308   template<> int test<4>()
1309   {
1310     // 32-bit implementation
1311     NCollection_List<Standard_Address> aList;
1312     const Standard_Integer aBlockSizes[] = {100000, 10000, 10};
1313     int aStatus = 0;
1314
1315     // start populate memory with blocks of large size, then
1316     // smaller ones and so on according to content of the array aBlockSizes
1317     for (size_t i=0; i < sizeof(aBlockSizes)/sizeof(int); i++)
1318     {
1319       try
1320       {
1321         for (;;)
1322           aList.Append(Standard::Allocate(aBlockSizes[i]));
1323       }
1324       catch (Standard_Failure const&)
1325       {
1326         aStatus |= OUMCatchOK;
1327       }
1328       catch (...)
1329       {
1330         aStatus |= OUMCatchFail;
1331         break;
1332       }
1333     }
1334     // release all allocated blocks
1335     for (NCollection_List<Standard_Address>::Iterator it(aList); it.More(); it.Next())
1336     {
1337       Standard::Free(it.Value());
1338     }
1339     return aStatus;
1340   }
1341 }
1342
1343 //=======================================================================
1344 //function : OCC24836
1345 //purpose :
1346 //=======================================================================
1347 static Standard_Integer OCC24836 (Draw_Interpretor& theDI, Standard_Integer n, const char** a)
1348 {
1349   if (n != 1)
1350   {
1351     theDI << "Usage : " << a[0] << "\n";
1352     return 1;
1353   }
1354
1355   int aStatus = AllocTest::test<sizeof(size_t)>();
1356
1357   if (aStatus & AllocTest::NotApplicable)
1358     theDI << "This test case is not applicable for 64-bit and higher platforms\n";
1359   if (aStatus & AllocTest::OUMCatchOK)
1360     theDI << "out-of-memory has been caught: OK\n";
1361   if (aStatus & AllocTest::OUMCatchFail)
1362     theDI << "Error: out-of-memory is not always caught\n";
1363   return 0;
1364 }
1365
1366
1367 //=======================================================================
1368 //function : OCC27021 
1369 //purpose  : Tests performance of obtaining geometry (points) via topological
1370 //           exploring or fetching the geometry.
1371 //=======================================================================
1372
1373 // Fetch via topology
1374 static std::pair<gp_Pnt, gp_Pnt> getVerticesA(const TopoDS_Edge& theEdge)
1375 {
1376   std::pair<gp_Pnt, gp_Pnt> result;
1377
1378   static TopoDS_Vertex aFirst, aLast;
1379   TopExp::Vertices(theEdge, aFirst, aLast, Standard_True);
1380
1381   result.first = BRep_Tool::Pnt(aFirst);
1382   result.second = BRep_Tool::Pnt(aLast);
1383
1384   return result;
1385 }
1386
1387 //Geometrical way
1388 static std::pair<gp_Pnt, gp_Pnt> getVerticesB(const TopoDS_Edge& theEdge)
1389 {
1390   Standard_Real first;
1391   Standard_Real last;
1392
1393   Handle(Geom_Curve) curve = BRep_Tool::Curve(theEdge, first, last);
1394
1395   std::pair<gp_Pnt, gp_Pnt> result;
1396
1397   if (theEdge.Orientation() == TopAbs_REVERSED)
1398   {
1399     curve->D0(first, result.second);
1400     curve->D0(last, result.first);
1401   }
1402   else
1403   {
1404     curve->D0(first, result.first);
1405     curve->D0(last, result.second);
1406   }
1407   return result;
1408 }
1409
1410
1411
1412 static Standard_Integer OCC27021(Draw_Interpretor& theDI,
1413                                  Standard_Integer  theNArg,
1414                                  const char ** theArgVal)
1415 {
1416   if (theNArg != 2)
1417   {
1418     std::cout << "Use: " << theArgVal[0] << " shape" << std::endl;
1419     return 1;
1420   }
1421
1422   TopoDS_Shape shape (DBRep::Get(theArgVal[1]));
1423
1424   TopTools_IndexedMapOfShape shape_faces;
1425   TopExp::MapShapes(shape, TopAbs_FACE, shape_faces);
1426
1427   // Pick a single face which shows the problem.
1428   TopoDS_Face face = TopoDS::Face(shape_faces(10));
1429   TopTools_IndexedMapOfShape face_edges;
1430   TopExp::MapShapes(face, TopAbs_EDGE, face_edges);
1431   TopoDS_Edge edge = TopoDS::Edge(face_edges(2));
1432
1433   Standard_Integer iterations = 100000000;
1434
1435   std::pair<gp_Pnt, gp_Pnt> vertices;
1436   clock_t t = clock();
1437
1438   theDI << "\nRetrieving " << iterations << " vertices using approach A)...\n";
1439   for (int i = 0; i < iterations; ++i)
1440   {
1441     vertices = getVerticesA(edge);
1442   }
1443   theDI << "COUNTER RetrievingVertA" << ": " << (clock() - t) / (double)CLOCKS_PER_SEC << "\n";
1444   t = clock();
1445
1446   theDI << "\nRetrieving " << iterations << " vertices using approach B)...\n";
1447   for (int i = 0; i < iterations; ++i)
1448   {
1449     vertices = getVerticesB(edge);
1450   }
1451   theDI << "COUNTER RetrievingVertB" << ": " << (clock() - t) / (double)CLOCKS_PER_SEC << "\n";
1452
1453   return 0;
1454 }
1455
1456 //=======================================================================
1457 //function : OCC27235
1458 //purpose : check presentation in GDT document
1459 //=======================================================================
1460 static Standard_Integer OCC27235 (Draw_Interpretor& theDI, Standard_Integer n, const char** a)
1461 {
1462   if (n < 2) {
1463     theDI<<"Use: OCC27235 Doc";
1464     return 1;
1465   }
1466
1467   Handle(TDocStd_Document) Doc;
1468   DDocStd::GetDocument(a[1], Doc);
1469   if ( Doc.IsNull() ) { theDI << a[1] << " is not a document\n"; return 1; }
1470   Handle(XCAFDoc_DimTolTool) aDimTolTool= XCAFDoc_DocumentTool::DimTolTool(Doc->Main());
1471   Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main());
1472   TopoDS_Compound aPresentations;
1473   BRep_Builder B;
1474   B.MakeCompound(aPresentations);
1475
1476   TDF_LabelSequence aLabels;
1477   aShapeTool->GetShapes(aLabels);
1478   for ( Standard_Integer i=1; i <= aLabels.Length(); i++ )
1479   {
1480     aShapeTool->GetSubShapes(aLabels.Value(i), aLabels);
1481   }
1482
1483   TDF_LabelSequence aGDTs;
1484   aDimTolTool->GetDimensionLabels(aGDTs);
1485   for (Standard_Integer i = 1; i <= aGDTs.Length(); i++) {
1486     Handle(XCAFDoc_Dimension) aDimAttr;
1487     if (!aGDTs.Value(i).FindAttribute(XCAFDoc_Dimension::GetID(),aDimAttr)) 
1488       continue;
1489     Handle(XCAFDimTolObjects_DimensionObject) anObject = aDimAttr->GetObject();
1490     if (anObject.IsNull())
1491       continue;
1492     TopoDS_Shape aShape = anObject->GetPresentation();
1493     if (!aShape.IsNull())
1494       B.Add(aPresentations, aShape);
1495   }
1496
1497   aGDTs.Clear();
1498   aDimTolTool->GetGeomToleranceLabels(aGDTs);
1499   for (Standard_Integer i = 1; i <= aGDTs.Length(); i++) {
1500     Handle(XCAFDoc_GeomTolerance) aGTAttr;
1501     if (!aGDTs.Value(i).FindAttribute(XCAFDoc_GeomTolerance::GetID(),aGTAttr)) 
1502       continue;
1503     Handle(XCAFDimTolObjects_GeomToleranceObject) anObject = aGTAttr->GetObject();
1504     if (anObject.IsNull())
1505       continue;
1506     TopoDS_Shape aShape = anObject->GetPresentation();
1507     if (!aShape.IsNull())
1508       B.Add(aPresentations, aShape);
1509   }
1510
1511   for ( Standard_Integer i=1; i <= aLabels.Length(); i++ )
1512   {
1513     TDF_LabelSequence aDatL;
1514     if(aDimTolTool->GetRefDatumLabel(aLabels.Value(i), aDatL))
1515     {
1516       for(Standard_Integer j = aDatL.Lower(); j <= aDatL.Upper(); j++)
1517       {
1518         Handle(XCAFDoc_Datum) aDat;
1519         if(!aDatL.Value(j).FindAttribute(XCAFDoc_Datum::GetID(), aDat))
1520           continue;
1521         Handle(XCAFDimTolObjects_DatumObject) anObject = aDat->GetObject();
1522         if (anObject.IsNull())
1523           continue;
1524         TopoDS_Shape aShape = anObject->GetPresentation();
1525         if (!aShape.IsNull())
1526           B.Add(aPresentations, aShape);
1527       }
1528     }
1529   }
1530
1531   GProp_GProps aG;
1532   BRepGProp::LinearProperties(aPresentations, aG);
1533   gp_Pnt aPnt = aG.CentreOfMass();
1534   theDI << "Centre of mass: " << aPnt.X() << " " << aPnt.Y() << " " << aPnt.Z() << "\n";
1535   theDI << "Mass: " << aG.Mass() << "\n";
1536
1537   return 0;
1538 }
1539
1540 //=======================================================================
1541 //function : OCC24836
1542 //purpose :
1543 //=======================================================================
1544 static Standard_Integer OCC26930(Draw_Interpretor& theDI,
1545                                  Standard_Integer  theNArg,
1546                                  const char ** theArgVal)
1547 {
1548   if (theNArg != 5)
1549   {
1550     std::cout << "Use: " << theArgVal[0] <<" surface curve start end" << std::endl;
1551     return 1;
1552   }
1553
1554
1555
1556
1557
1558   Handle(Geom_Surface) aSurface = DrawTrSurf::GetSurface(theArgVal[1]);
1559   Handle(Geom_Curve) aCurve = DrawTrSurf::GetCurve(theArgVal[2]);
1560   Standard_Real aStart = Draw::Atof(theArgVal[3]);
1561   Standard_Real anEnd = Draw::Atof(theArgVal[4]);
1562
1563   //project
1564   Handle (Geom2d_Curve) aPCurve;
1565
1566   ShapeConstruct_ProjectCurveOnSurface aProj;
1567   aProj.Init(aSurface, Precision::Confusion());
1568   {
1569     try {
1570         Handle (Geom_Curve) aTmpCurve = aCurve; //to use reference in Perform()
1571         aProj.Perform (aTmpCurve, aStart, anEnd, aPCurve);
1572     } catch (const Standard_Failure&) {
1573     }
1574   }
1575
1576   //check results
1577   if (aPCurve.IsNull()) {
1578     theDI << "Error: pcurve is null\n";
1579   }
1580   else {
1581     if (aPCurve->IsKind(STANDARD_TYPE(Geom2d_Line))) {
1582       theDI << "Pcurve is line: OK\n";
1583     }
1584     else {
1585       theDI << "Error: PCurve is not line\n";
1586     }
1587   }
1588
1589   return 0;
1590 }
1591
1592 //=======================================================================
1593 //function : OCC27466
1594 //purpose :
1595 //=======================================================================
1596 static Standard_Integer OCC27466(Draw_Interpretor& theDI,
1597   Standard_Integer  theNArg,
1598   const char ** theArgVal)
1599 {
1600   if (theNArg != 4)
1601   {
1602     std::cout << "Use: " << theArgVal[0] << " face point start_pnt2d" << std::endl;
1603     return 1;
1604   }
1605
1606   TopoDS_Face aFace = TopoDS::Face(DBRep::Get(theArgVal[1], TopAbs_FACE, Standard_True));
1607   if (aFace.IsNull())
1608     return 1;
1609   gp_Pnt aPnt;
1610   if (!DrawTrSurf::GetPoint(theArgVal[2], aPnt))
1611     return 1;
1612   gp_Pnt2d aUV;
1613   if (!DrawTrSurf::GetPoint2d(theArgVal[3], aUV))
1614     return 1;
1615   BRepAdaptor_Surface aSurf(aFace);
1616
1617   Standard_Real aTolU = Precision::PConfusion();
1618   Standard_Real aTolV = Precision::PConfusion();
1619
1620   Extrema_GenLocateExtPS anExtrema(aSurf, aTolU, aTolV);
1621   anExtrema.Perform(aPnt, aUV.X(), aUV.Y(), Standard_True);
1622
1623   if (!anExtrema.IsDone())
1624   {
1625     theDI << "Error: Extrema is not done";
1626   }
1627   else
1628   {
1629     Standard_Real aSqDist = anExtrema.SquareDistance();
1630     gp_Pnt aResPnt = anExtrema.Point().Value();
1631     Standard_Real u, v;
1632     anExtrema.Point().Parameter(u, v);
1633     gp_Pnt2d aResUV(u, v);
1634     DrawTrSurf::Set((TCollection_AsciiString(theArgVal[2]) + "_res").ToCString(), aResPnt);
1635     DrawTrSurf::Set((TCollection_AsciiString(theArgVal[3]) + "_res").ToCString(), aResUV);
1636     theDI << theArgVal[2] << "_res and " << theArgVal[3] << "_res are created, dist=" << sqrt(aSqDist);
1637   }
1638   return 0;
1639 }
1640
1641 #include <GCE2d_MakeParabola.hxx>
1642 #include <gp_Ax22d.hxx>
1643 #include <Geom2d_Parabola.hxx>
1644 #include <gp_Parab2d.hxx>
1645
1646 namespace Parab2d_Bug26747
1647 {
1648   //Directrix and X-axe direction
1649   gp_Ax2d Axes;
1650
1651   //Focus
1652   gp_Pnt2d FocusPoint;
1653
1654   //Focal length
1655   Standard_Real FocalLength;
1656
1657   //Coordiantes of the vertex
1658   Standard_Real VertX, VertY;
1659
1660   //Parameter
1661   Standard_Real Parameter;
1662
1663   //Coefficients
1664   Standard_Real Coeffs[6];
1665 }
1666
1667 //========================================================================
1668 //function : OCC26747_CheckParabola
1669 //purpose  : Checks if created parabola is correct
1670 //========================================================================
1671 static void OCC26747_CheckParabola(Draw_Interpretor& theDI,
1672                                    const char *theName,
1673                                    const Standard_Boolean theSense = Standard_True)
1674 {
1675   const Standard_Real aCompareTol = 1.0e-12;
1676
1677   //                      Directrix,                    Focus
1678   GCE2d_MakeParabola aPrb(Parab2d_Bug26747::Axes, Parab2d_Bug26747::FocusPoint, theSense);
1679
1680   DrawTrSurf::Set(theName, aPrb.Value());
1681
1682   gp_Pnt2d aVert(aPrb.Value()->Parab2d().Location());
1683
1684   theDI << "Focal Length: " << aPrb.Value()->Parab2d().Focal() << "\n";
1685   theDI << "Vertex (" << aVert.X() << ", " << aVert.Y() << ")\n";
1686   theDI << "Parameter = " << aPrb.Value()->Parab2d().Parameter() << "\n";
1687
1688   Standard_Real aF[6] = {RealLast(), RealLast(), RealLast(),
1689                          RealLast(), RealLast(), RealLast()};  
1690   aPrb.Value()->Parab2d().Coefficients(aF[0], aF[1], aF[2], aF[3], aF[4], aF[5]);
1691   theDI << "A = " << aF[0] << ", B = " << aF[1] << ", C = " << aF[2] <<
1692            ", D = " << aF[3] << ", E = " << aF[4] << ", F = " << aF[5] << "\n";
1693
1694   if(Abs(aPrb.Value()->Parab2d().Focal() - 
1695                         Parab2d_Bug26747::FocalLength) > aCompareTol)
1696     theDI << "Error in focal length computation!\n";
1697
1698   if( (Abs(aVert.X() - Parab2d_Bug26747::VertX) > aCompareTol) ||
1699       (Abs(aVert.Y() - Parab2d_Bug26747::VertY) > aCompareTol))
1700     theDI << "Error in vertex computation!\n";
1701
1702   if(Abs(aPrb.Value()->Parab2d().Parameter() -
1703                         Parab2d_Bug26747::Parameter) > aCompareTol)
1704     theDI << "Error in parameter computation!\n";
1705
1706   for(int i = 0; i < 6; i++)
1707   {
1708     if(Abs(aF[i] - Parab2d_Bug26747::Coeffs[i]) > aCompareTol)
1709     {
1710       theDI << "Error in " << i << "-th coefficient computation!\n";
1711     }
1712   }
1713 }
1714
1715 //========================================================================
1716 //function : OCC26747_1
1717 //purpose  : Creates a 2D-parabola for testing
1718 //========================================================================
1719 static Standard_Integer OCC26747_1(Draw_Interpretor& theDI, 
1720                                    Standard_Integer  theNArg, 
1721                                    const char **     theArgVal)
1722 {
1723   if(theNArg < 2)
1724   {
1725     theDI << "Use: OCC26747_1 result\n";
1726     return 1;
1727   }
1728
1729   //Expected parabola:
1730
1731   //  ^ Y
1732   //  |
1733   //  |
1734   //  |
1735   //  |
1736   //  |                 o
1737   //  |    A   o   F
1738   //  |     o     x
1739   //  |        o
1740   //  |                 o
1741   //  |
1742   //  ---------------------------> X
1743
1744   //  where
1745   //  Y-axe is the directrix of the parabola,
1746   //  A(0.5, 3.0) is a Vertex of the parabola,
1747   //  F(1.0, 3.0) is the focus of the parabola,
1748   //  Focal length is 0.5,
1749   //  Parameter of the parabola is 1.
1750   //  Equation: (y-3)^2=2*p*(x-0.5), i.e. (y-3)^2=2*(x-0.5)
1751   //  A * X^2 + B * Y^2 + 2*C*X*Y + 2*D*X    + 2*E*Y    + F = 0.
1752   //                  OR
1753   //  0 * X^2 + 1 * Y^2 + 2*0*X*Y + 2*(-1)*X + 2*(-3)*Y + 10 = 0.
1754
1755   Parab2d_Bug26747::Axes = gp_Ax2d(gp_Pnt2d(0.0, 3.0), gp_Dir2d(0.0, 1.0));
1756   Parab2d_Bug26747::FocusPoint.SetCoord(1.0, 3.0);
1757
1758   Parab2d_Bug26747::FocalLength = 0.5;
1759
1760   Parab2d_Bug26747::VertX = 0.5;
1761   Parab2d_Bug26747::VertY = 3.0;
1762
1763   Parab2d_Bug26747::Parameter = 1.0;
1764
1765   Parab2d_Bug26747::Coeffs[0] = 0.0;
1766   Parab2d_Bug26747::Coeffs[1] = 1.0;
1767   Parab2d_Bug26747::Coeffs[2] = 0.0;
1768   Parab2d_Bug26747::Coeffs[3] = -1.0;
1769   Parab2d_Bug26747::Coeffs[4] = -3.0;
1770   Parab2d_Bug26747::Coeffs[5] = 10.0;
1771
1772   OCC26747_CheckParabola(theDI, theArgVal[1]);
1773
1774   return 0;
1775 }
1776
1777 //=======================================================================
1778 //function : OCC26747_2
1779 //purpose  : Creates a 2D-parabola for testing
1780 //=======================================================================
1781 static Standard_Integer OCC26747_2(Draw_Interpretor& theDI,
1782                                    Standard_Integer  theNArg,
1783                                    const char **     theArgVal)
1784 {
1785   if(theNArg < 2)
1786   {
1787     theDI << "Use: OCC26747_2 result\n";
1788     return 1;
1789   }
1790
1791   //Expected parabola:
1792
1793   //                          ^ Y
1794   //                          |
1795   //        o                 |
1796   //                 o        |
1797   //            F x     o A   |
1798   //                 o        |
1799   //        o                 |
1800   //                          |
1801   //  <------------------------
1802   //  X
1803
1804   //  where (in UCS - User Coordinate System, - which
1805   //  is shown in the picture):
1806   //    Y-axe is the directrix of the parabola,
1807   //    A(0.5, 3.0) is a Vertex of the parabola,
1808   //    F(1.0, 3.0) is the focus of the parabola.
1809   //
1810   //  In WCS (World Coordinate System) these points have coordinates:
1811   //    A(-0.5, 3.0), F(-1.0, 3.0).
1812   //
1813   //  Focal length is 0.5,
1814   //  Parameter of the parabola is 1.
1815   //  Equation (in WCS): (y-3)^2=2*p*(-x-0.5), i.e. (y-3)^2=2*(-x-0.5)
1816   //  A * X^2 + B * (Y^2) + 2*C*(X*Y) + 2*D*X + 2*E*Y    + F = 0.
1817   //  0 * X^2 + 1 * (Y^2) + 2*0*(X*Y) + 2*1*X + 2*(-3)*Y + 10 = 0.
1818
1819
1820   Parab2d_Bug26747::Axes = gp_Ax2d(gp_Pnt2d(0.0, 0.0), gp_Dir2d(0.0, 1.0));
1821   Parab2d_Bug26747::FocusPoint.SetCoord(-1.0, 3.0);
1822
1823   Parab2d_Bug26747::FocalLength = 0.5;
1824
1825   Parab2d_Bug26747::VertX = -0.5;
1826   Parab2d_Bug26747::VertY = 3.0;
1827
1828   Parab2d_Bug26747::Parameter = 1.0;
1829
1830   Parab2d_Bug26747::Coeffs[0] = 0.0;
1831   Parab2d_Bug26747::Coeffs[1] = 1.0;
1832   Parab2d_Bug26747::Coeffs[2] = 0.0;
1833   Parab2d_Bug26747::Coeffs[3] = 1.0;
1834   Parab2d_Bug26747::Coeffs[4] = -3.0;
1835   Parab2d_Bug26747::Coeffs[5] = 10.0;
1836
1837   OCC26747_CheckParabola(theDI, theArgVal[1], Standard_False);
1838
1839   return 0;
1840 }
1841
1842 //=======================================================================
1843 //function : OCC26747_3
1844 //purpose  : Creates a 2D-parabola for testing
1845 //=======================================================================
1846 static Standard_Integer OCC26747_3(Draw_Interpretor& theDI,
1847                                    Standard_Integer  theNArg,
1848                                    const char **     theArgVal)
1849 {
1850   if(theNArg < 2)
1851   {
1852     theDI << "Use: OCC26747_2 result\n";
1853     return 1;
1854   }
1855
1856   //Expected parabola:
1857
1858   //                    ^ Y
1859   //                    |
1860   //        o           |
1861   //                 o  |
1862   //            F x     o A
1863   //                 o  |
1864   //        o           |
1865   //                    |
1866   //  <------------------
1867   //  X
1868
1869   //  where (in UCS - User Coordinate System, - which
1870   //  is shown in the picture):
1871   //    Y-axe is the directrix of the parabola,
1872   //    A(0.0, 3.0) is a Vertex of the parabola,
1873   //    F(0.0, 3.0) is the focus of the parabola (the Focus
1874   //                matches with the Apex).
1875   //
1876   //  In WCS (World Coordinate System) these points have coordinates:
1877   //    A(0.0, 3.0), F(0.0, 3.0).
1878   //
1879   //  Focal length is 0.0,
1880   //  Parameter of the parabola is 0.0.
1881   //  Equation (in WCS): (y-3)^2=2*p*(-x-0.0), i.e. (y-3)^2=0 (looks like a line y=3)
1882   //  A * X^2 + B * (Y^2) + 2*C*(X*Y) + 2*D*X + 2*E*Y    + F = 0.
1883   //  0 * X^2 + 1 * (Y^2) + 2*0*(X*Y) + 2*0*X + 2*(-3)*Y + 9 = 0.
1884
1885   Parab2d_Bug26747::Axes = gp_Ax2d(gp_Pnt2d(0.0, 0.0), gp_Dir2d(0.0, 1.0));
1886   Parab2d_Bug26747::FocusPoint.SetCoord(0.0, 3.0);
1887
1888   Parab2d_Bug26747::FocalLength = 0.0;
1889
1890   Parab2d_Bug26747::VertX = 0.0;
1891   Parab2d_Bug26747::VertY = 3.0;
1892
1893   Parab2d_Bug26747::Parameter = 0.0;
1894
1895   Parab2d_Bug26747::Coeffs[0] = 0.0;
1896   Parab2d_Bug26747::Coeffs[1] = 1.0;
1897   Parab2d_Bug26747::Coeffs[2] = 0.0;
1898   Parab2d_Bug26747::Coeffs[3] = 0.0;
1899   Parab2d_Bug26747::Coeffs[4] = -3.0;
1900   Parab2d_Bug26747::Coeffs[5] = 9.0;
1901
1902   OCC26747_CheckParabola(theDI, theArgVal[1], Standard_False);
1903
1904   return 0;
1905 }
1906
1907 #include "Geom2d_BezierCurve.hxx"
1908 #include "Geom2dGcc_QualifiedCurve.hxx"
1909 #include "Geom2dAdaptor_Curve.hxx"
1910 #include "Geom2dAPI_ProjectPointOnCurve.hxx"
1911 #include "Geom2dGcc_Circ2d2TanOn.hxx"
1912 //=======================================================================
1913 //function : OCC27357
1914 //purpose :
1915 //=======================================================================
1916 static Standard_Integer OCC27357(Draw_Interpretor& theDI,
1917                                  Standard_Integer,
1918                                  const char **)
1919 {
1920   TColgp_Array1OfPnt2d aPoles(1,3);
1921   aPoles.SetValue(1, gp_Pnt2d(0.,0.));
1922   aPoles.SetValue(2, gp_Pnt2d(0.,1.));
1923   aPoles.SetValue(3, gp_Pnt2d(6.,0.));
1924
1925   Handle(Geom2d_BezierCurve) aCurve1 = new Geom2d_BezierCurve(aPoles);
1926   aPoles.SetValue(2, gp_Pnt2d(0.,1.5));
1927   Handle(Geom2d_BezierCurve) aCurve2 = new Geom2d_BezierCurve(aPoles);
1928   NCollection_List<Standard_Integer> aDuumyList;
1929   int nP = 100;
1930   for(int i = 0 ; i < nP ; i++){
1931     Standard_Real u = i / (nP-1.);
1932     gp_Pnt2d aP1;
1933     gp_Vec2d aTangent;
1934     aCurve1->D1(u,aP1,aTangent);
1935     gp_Vec2d aNormal(-aTangent.Y(),aTangent.X());
1936     Handle(Geom2d_Line) normalLine=new Geom2d_Line(aP1, gp_Dir2d(aNormal));
1937     Geom2dGcc_QualifiedCurve qualifiedC1(Geom2dAdaptor_Curve(aCurve1),GccEnt_unqualified);
1938     Geom2dGcc_QualifiedCurve qualifiedC2(Geom2dAdaptor_Curve(aCurve2),GccEnt_unqualified);
1939
1940     try
1941     {
1942       Geom2dAPI_ProjectPointOnCurve projPc1(aP1, aCurve1);
1943       double g1 = projPc1.LowerDistanceParameter();
1944       Geom2dAPI_ProjectPointOnCurve projPc3(aP1, normalLine);
1945       double g3 = projPc3.LowerDistanceParameter();
1946       Geom2dGcc_Circ2d2TanOn aCircleBuilder(qualifiedC1,qualifiedC2,
1947         Geom2dAdaptor_Curve(normalLine),1e-9,g1,g1,g3);
1948       aDuumyList.Append(aCircleBuilder.NbSolutions());
1949     }
1950     catch(Standard_Failure const&)
1951     {
1952       theDI << "Exception was caught\n";
1953     }
1954   }
1955   return 0;
1956 }
1957 #include <Standard_ErrorHandler.hxx>
1958 #include <TColGeom_SequenceOfCurve.hxx>
1959 #include <GeomFill_NSections.hxx>
1960 #include <Geom_TrimmedCurve.hxx>
1961 #include <TopExp_Explorer.hxx>
1962 #include <BRepBuilderAPI_MakeFace.hxx>
1963 //=======================================================================
1964 //function : OCC26270
1965 //purpose :
1966 //=======================================================================
1967 static Standard_Integer OCC26270(Draw_Interpretor& theDI,
1968                                  Standard_Integer theNArg,
1969                                  const char **theArgVal)
1970 {
1971   if (theNArg != 3)
1972   {
1973     theDI << "Usage :" << theArgVal[0] << " shape result\n";
1974     return 0;
1975   }
1976   TopoDS_Shape aShape = DBRep::Get(theArgVal[1]);
1977   TopExp_Explorer anExp(aShape, TopAbs_EDGE);
1978   TColGeom_SequenceOfCurve aCurveSeq;
1979   for (; anExp.More(); anExp.Next())
1980   {
1981     Standard_Real f, l;
1982     Handle(Geom_Curve) aCurve = BRep_Tool::Curve(TopoDS::Edge(anExp.Current()), f, l);
1983     if (!aCurve.IsNull())
1984     {
1985       aCurve = new Geom_TrimmedCurve(aCurve, f, l);
1986       aCurveSeq.Append(aCurve);
1987     }
1988   }
1989   if (aCurveSeq.Length() > 1)
1990   {
1991     try
1992     {
1993       OCC_CATCH_SIGNALS
1994         GeomFill_NSections aBSurface(aCurveSeq);
1995       Handle(Geom_BSplineSurface) aRes = aBSurface.BSplineSurface();
1996       if (!aRes.IsNull())
1997       {
1998         BRepBuilderAPI_MakeFace b_face1(aRes, Precision::Confusion());
1999         TopoDS_Face bsp_face1 = b_face1.Face();
2000         DBRep::Set(theArgVal[2], bsp_face1);
2001       }
2002     }
2003     catch (Standard_Failure const&)
2004     {
2005       theDI << "ERROR: Exception in GeomFill_NSections\n";
2006     }
2007   }
2008   return 0;
2009 }
2010
2011 #include "BRepBuilderAPI_MakeWire.hxx"
2012 #include "BRepBuilderAPI_MakeEdge.hxx"
2013 static Standard_Integer OCC27552(Draw_Interpretor&,
2014                                    Standard_Integer,
2015                                    const char **  )
2016 {
2017   BRep_Builder BB;
2018   TopoDS_Vertex V1, V2, V3;
2019   TopoDS_Edge E1, E2;
2020   BB.MakeVertex(V1, gp_Pnt(0,0,0), 0.1);
2021   BB.MakeVertex(V2, gp_Pnt(5,0,0), 0.1);
2022   BB.MakeVertex(V3, gp_Pnt(10,0,0), 0.1);
2023   E1 = BRepBuilderAPI_MakeEdge(V1, V2).Edge();
2024   E2 = BRepBuilderAPI_MakeEdge(V2, V3).Edge();
2025   BRepBuilderAPI_MakeWire MW;
2026   MW.Add(E1);
2027   MW.Add(E2);
2028   TopoDS_Vertex V4, V5, V6, V7;
2029   TopoDS_Edge E3, E4;
2030   BB.MakeVertex(V4, gp_Pnt(10,0+0.05,0), 0.07);
2031   BB.MakeVertex(V5, gp_Pnt(10,0-0.05,0), 0.07);
2032   BB.MakeVertex(V6, gp_Pnt(10,0+2,0), 0.07);
2033   BB.MakeVertex(V7, gp_Pnt(10,0-2,0), 0.07);
2034   E3 = BRepBuilderAPI_MakeEdge(V4, V6).Edge();
2035   E4 = BRepBuilderAPI_MakeEdge(V5, V7).Edge();
2036   TopTools_ListOfShape LLE;
2037   LLE.Append(E3);
2038   LLE.Append(E4);
2039   MW.Add(LLE);
2040   TopoDS_Shape W = MW.Wire();
2041   DBRep::Set("outw", W);
2042
2043   return 0;
2044 }
2045
2046 #include <NCollection_IncAllocator.hxx>
2047 static Standard_Integer OCC27875(Draw_Interpretor& theDI,
2048                                  Standard_Integer theNArg,
2049                                  const char ** theArgVal)
2050 {
2051   if (theNArg < 2)
2052   {
2053     theDI << "Use: OCC27875 curve\n";
2054   }
2055
2056   TColGeom_SequenceOfCurve aNC(new NCollection_IncAllocator());
2057
2058   const Handle(Geom_Curve) aC = Handle(Geom_Curve)::DownCast(DrawTrSurf::Get(theArgVal[1]));
2059
2060   aNC.Append(aC);
2061
2062   GeomFill_NSections aNS(aNC);
2063
2064   if (aNS.BSplineSurface().IsNull())
2065   {
2066     theDI << "GeomFill_NSections is not done.\n";
2067   }
2068
2069   return 0;
2070 }
2071
2072
2073 #include <TDF_Tool.hxx>
2074 #include <XCAFDoc_View.hxx>
2075 #include <XCAFDoc_ViewTool.hxx>
2076 #include <XCAFView_Object.hxx>
2077 #include <XCAFView_ProjectionType.hxx>
2078 static Standard_Integer OCC28389(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
2079 {
2080   if (argc < 20) {
2081     di << "Use: OCC28389 Doc label nb_shapes nb_GDT nb_planes name type pp_x pp_y pp_z vd_x vd_y vd_z ud_x ud_y ud_z zoom width height";
2082     return 1;
2083   }
2084   Handle(TDocStd_Document) aDoc;
2085   DDocStd::GetDocument(argv[1], aDoc);
2086   if (aDoc.IsNull()) {
2087     di << "Error: Wrong document";
2088     return 1;
2089   }
2090   Handle(XCAFDoc_ViewTool) aViewTool = XCAFDoc_DocumentTool::ViewTool(aDoc->Main());
2091
2092   TDF_Label aLabel;
2093   TDF_Tool::Label(aDoc->GetData(), argv[2], aLabel);
2094   if (aLabel.IsNull()) {
2095     di << "Error: Wrong label";
2096     return 1;
2097   }
2098   Handle(XCAFDoc_View) aView;
2099   if (!aLabel.FindAttribute(XCAFDoc_View::GetID(), aView)) {
2100     di << "Error: Wrong label";
2101     return 1;
2102   }
2103   Handle(XCAFView_Object) anObj = aView->GetObject();
2104   if (anObj.IsNull()) {
2105     di << "Error: Wrong label";
2106     return 1;
2107   }
2108
2109   Standard_Boolean isOK = Standard_True;
2110   // check links
2111   Standard_Integer nbShapes = Draw::Atoi(argv[3]);
2112   Standard_Integer nbGDTs = Draw::Atoi(argv[4]);
2113   Standard_Integer nbPlanes = Draw::Atoi(argv[5]);
2114   TDF_LabelSequence aSequence;
2115   aViewTool->GetRefShapeLabel(aLabel, aSequence);
2116   if (aSequence.Length() != nbShapes)
2117     isOK = Standard_False;
2118   aSequence.Clear();
2119   aViewTool->GetRefGDTLabel(aLabel, aSequence);
2120   if (aSequence.Length() != nbGDTs)
2121     isOK = Standard_False;
2122   aSequence.Clear();
2123   aViewTool->GetRefClippingPlaneLabel(aLabel, aSequence);
2124   if (aSequence.Length() != nbPlanes)
2125     isOK = Standard_False;
2126   if (!isOK) {
2127     di << "Error: Wrong references";
2128     return 1;
2129   }
2130
2131   if (anObj->Name()->IsDifferent(new TCollection_HAsciiString(argv[6]))) {
2132     di << "Error: Wrong name";
2133     return 1;
2134   }
2135
2136   XCAFView_ProjectionType aType = XCAFView_ProjectionType_NoCamera;
2137   if (argv[7][0] == 'p')
2138     aType = XCAFView_ProjectionType_Parallel;
2139   else if (argv[7][0] == 'c')
2140     aType = XCAFView_ProjectionType_Central;
2141
2142   if (anObj->Type()!= aType) {
2143     di << "Error: Wrong type";
2144     return 1;
2145   }
2146
2147   gp_Pnt aPP(Draw::Atof(argv[8]), Draw::Atof(argv[9]), Draw::Atof(argv[10]));
2148   if (aPP.Distance(anObj->ProjectionPoint()) > Precision::Confusion()) {
2149     di << "Error: Wrong projection point";
2150     return 1;
2151   }
2152
2153   gp_Dir aVD(Draw::Atof(argv[11]), Draw::Atof(argv[12]), Draw::Atof(argv[13]));
2154   if (!aVD.IsEqual(anObj->ViewDirection(), Precision::Angular())) {
2155     di << "Error: Wrong view direction";
2156     return 1;
2157   }
2158
2159   gp_Dir aUD(Draw::Atof(argv[14]), Draw::Atof(argv[15]), Draw::Atof(argv[16]));
2160   if (!aUD.IsEqual(anObj->UpDirection(), Precision::Angular())) {
2161     di << "Error: Wrong up direction";
2162     return 1;
2163   }
2164
2165   if (fabs(anObj->ZoomFactor() - Draw::Atof(argv[17])) > Precision::Confusion()) {
2166     di << "Error: Wrong zoom factor";
2167     return 1;
2168   }
2169
2170   if (fabs(anObj->WindowHorizontalSize() - Draw::Atof(argv[18])) > Precision::Confusion())
2171     isOK = Standard_False;
2172   if (fabs(anObj->WindowVerticalSize() - Draw::Atof(argv[19])) > Precision::Confusion())
2173     isOK = Standard_False;
2174   if (!isOK) {
2175     di << "Error: Wrong Window size";
2176     return 1;
2177   }
2178
2179   di << argv[2] << " OK";
2180   return 0;
2181 }
2182
2183 #include <TColgp_HArray1OfPnt2d.hxx>
2184 #include <TColgp_Array1OfVec2d.hxx>
2185 #include <TColStd_HArray1OfBoolean.hxx>
2186 #include <Geom2d_BSplineCurve.hxx>
2187 #include <Geom2dAPI_Interpolate.hxx>
2188 #include <GeomAPI.hxx>
2189 #include <BRepBuilderAPI_MakeEdge2d.hxx>
2190
2191 static Standard_Integer OCC28594(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
2192 {
2193   if (argc != 3)
2194   {
2195     di << "Usage :" << argv[0] << " curve_with_scale curve_without_scale\n";
2196     return 0;
2197   }
2198   Handle(TColgp_HArray1OfPnt2d) points_2d = new TColgp_HArray1OfPnt2d(1, 6);
2199   (*points_2d)(1) = gp_Pnt2d(-30.4, 8);
2200   (*points_2d)(2) = gp_Pnt2d(-16.689912, 17.498217);
2201   (*points_2d)(3) = gp_Pnt2d(-23.803064, 24.748543);
2202   (*points_2d)(4) = gp_Pnt2d(-16.907466, 32.919615);
2203   (*points_2d)(5) = gp_Pnt2d(-8.543829, 26.549421);
2204   (*points_2d)(6) = gp_Pnt2d(0, 39.200000);
2205
2206   TColgp_Array1OfVec2d tangent_2d(1, 6);
2207   (tangent_2d)(1) = gp_Vec2d(0.3, 0.4);
2208   (tangent_2d)(2) = gp_Vec2d(0, 0);
2209   (tangent_2d)(3) = gp_Vec2d(0, 0);
2210   (tangent_2d)(4) = gp_Vec2d(0, 0);
2211   (tangent_2d)(5) = gp_Vec2d(0, 0);
2212   (tangent_2d)(6) = gp_Vec2d(1, 0);
2213
2214   Handle(TColStd_HArray1OfBoolean) tangent_flags = new TColStd_HArray1OfBoolean(1, 6);
2215   (*tangent_flags)(1) = true;
2216   (*tangent_flags)(2) = false;
2217   (*tangent_flags)(3) = false;
2218   (*tangent_flags)(4) = false;
2219   (*tangent_flags)(5) = false;
2220   (*tangent_flags)(6) = true;
2221
2222   Geom2dAPI_Interpolate interp_2d_with_scale(points_2d, Standard_False, Precision::Confusion());
2223   interp_2d_with_scale.Load(tangent_2d, tangent_flags);
2224   interp_2d_with_scale.Perform();
2225   Handle(Geom2d_BSplineCurve) curve_2d_with_scale = interp_2d_with_scale.Curve();
2226
2227   Geom2dAPI_Interpolate interp_2d_without_scale(points_2d, Standard_False, Precision::Confusion());
2228   interp_2d_without_scale.Load(tangent_2d, tangent_flags, Standard_False);
2229   interp_2d_without_scale.Perform();
2230   Handle(Geom2d_BSplineCurve) curve_2d_without_scale = interp_2d_without_scale.Curve();
2231
2232   DrawTrSurf::Set(argv[1], curve_2d_with_scale);
2233   DrawTrSurf::Set(argv[2], curve_2d_without_scale);
2234   return 0;
2235 }
2236
2237 static Standard_Integer OCC28784(Draw_Interpretor&, Standard_Integer argc, const char** argv)
2238 {
2239   if (argc < 3)
2240     return 1;
2241
2242   TopoDS_Shape aShape =  DBRep::Get(argv[2]);
2243   if (aShape.IsNull())
2244     return 1;
2245
2246   gp_Ax2 aPlane (gp::Origin(), gp::DX(), -gp::DZ());
2247   HLRAlgo_Projector aProjector(aPlane);
2248
2249   Handle(HLRBRep_PolyAlgo) aHLR = new HLRBRep_PolyAlgo(aShape);
2250   aHLR->Projector(aProjector);
2251   aHLR->Update();
2252
2253   HLRBRep_PolyHLRToShape aHLRtoShape;
2254   aHLRtoShape.Update(aHLR);
2255
2256   TopoDS_Shape aHidden = aHLRtoShape.HCompound();
2257   
2258   DBRep::Set(argv[1], aHidden);
2259
2260   return 0;
2261 }
2262
2263 static Standard_Integer OCC28829 (Draw_Interpretor&, Standard_Integer, const char**)
2264 {
2265   // do something that causes FPE exception
2266   std::cout << "sqrt(-1) = " << sqrt (-1.) << std::endl;
2267   return 0;
2268 }
2269
2270 #include <NCollection_Buffer.hxx>
2271 #include <DDocStd_DrawDocument.hxx>
2272 #include <OSD_OpenFile.hxx>
2273 #include <Standard_ArrayStreamBuffer.hxx>
2274 #include <TDataStd_Name.hxx>
2275 #include <TDocStd_Application.hxx>
2276
2277 #ifdef max
2278   #undef max
2279 #endif
2280
2281 static Standard_Integer OCC28887 (Draw_Interpretor&, Standard_Integer theNbArgs, const char** theArgVec)
2282 {
2283   if (theNbArgs < 3)
2284   {
2285     std::cout << "Syntax error: wrong number of arguments!\n";
2286     return 1;
2287   }
2288
2289   const TCollection_AsciiString aFilePath (theArgVec[1]);
2290   const TCollection_AsciiString aName     (theArgVec[2]);
2291   Handle(NCollection_Buffer) aBuffer;
2292   {
2293     std::ifstream aFile;
2294     OSD_OpenStream (aFile, aFilePath.ToCString(), std::ios::binary | std::ios::in);
2295     if (!aFile.is_open())
2296     {
2297       std::cout << "Error: input file '" << aFilePath << "' cannot be read\n";
2298       return 1;
2299     }
2300     aFile.seekg (0, std::ios_base::end);
2301     const int64_t aFileLength = int64_t (aFile.tellg());
2302     if (aFileLength > int64_t (std::numeric_limits<ptrdiff_t>::max())
2303      || aFileLength < 1)
2304     {
2305       std::cout << "Error: input file '" << aFilePath << "' is too large\n";
2306       return 1;
2307     }
2308     aFile.seekg (0, std::ios_base::beg);
2309
2310     aBuffer = new NCollection_Buffer (NCollection_BaseAllocator::CommonBaseAllocator());
2311     if (!aBuffer->Allocate (size_t(aFileLength)))
2312     {
2313       std::cout << "Error: memory allocation (" << aFileLength << ") has failed\n";
2314       return 1;
2315     }
2316
2317     aFile.read ((char* )aBuffer->ChangeData(), aBuffer->Size());
2318     if (!aFile.good())
2319     {
2320       std::cout << "Error: input file '" << aFilePath << "' reading failure\n";
2321       return 1;
2322     }
2323   }
2324
2325   Standard_ArrayStreamBuffer aStreamBuffer ((const char* )aBuffer->ChangeData(), aBuffer->Size());
2326   std::istream aStream (&aStreamBuffer);
2327   // just play with seeking
2328   aStream.seekg (0, std::ios_base::end);
2329   aStream.seekg (0, std::ios_base::beg);
2330   if (aFilePath.EndsWith (".brep")
2331    || aFilePath.EndsWith (".rle"))
2332   {
2333     TopoDS_Shape aShape;
2334     BRep_Builder aBuilder;
2335     BRepTools::Read (aShape, aStream, aBuilder);
2336     DBRep::Set (aName.ToCString(), aShape);
2337   }
2338   else
2339   {
2340     Handle(TDocStd_Document) aDoc;
2341     Handle(TDocStd_Application) anApp = DDocStd::GetApplication();
2342     Standard_CString aNameVar = aName.ToCString();
2343     if (DDocStd::GetDocument (aNameVar, aDoc, Standard_False))
2344     {
2345       std::cout << "Error: document with name " << aName << " already exists\n";
2346       return 1;
2347     }
2348
2349     if (anApp->Open (aStream, aDoc) != PCDM_RS_OK)
2350     {
2351       std::cout << "Error: cannot open XDE document\n";
2352       return 1;
2353     }
2354
2355     Handle(DDocStd_DrawDocument) aDrawDoc = new DDocStd_DrawDocument (aDoc);
2356     TDataStd_Name::Set (aDoc->GetData()->Root(), aName.ToCString());
2357     Draw::Set (aName.ToCString(), aDrawDoc);
2358   }
2359
2360   return 0;
2361 }
2362
2363 static Standard_Integer OCC28131 (Draw_Interpretor&, Standard_Integer theNbArgs, const char** theArgVec)
2364 {
2365   if (theNbArgs != 2)
2366   {
2367     std::cerr << "Error: wrong number of arguments" << std::endl;
2368     return 1;
2369   }
2370
2371   double height = 8.5;
2372   gp_Pnt JiZhunXian2_v0 = gp_Pnt(-17.6, 0.0, 0.0);
2373   gp_Pnt JiZhunXian2_v1 = gp_Pnt(0, 32.8, 0.0);
2374
2375   // Outline
2376   TColgp_Array1OfPnt outer_e_bzr_geom_v(1, 4);
2377   {
2378     outer_e_bzr_geom_v(1) = JiZhunXian2_v0;
2379     outer_e_bzr_geom_v(4) = JiZhunXian2_v1;
2380
2381     Standard_Real ratio1 = 5.4 / 13.2;
2382     outer_e_bzr_geom_v(2) = gp_Pnt(outer_e_bzr_geom_v(1).X(), ratio1*outer_e_bzr_geom_v(4).Y(), 0);
2383     Standard_Real ratio2 = 6.0 / 6.8;
2384     outer_e_bzr_geom_v(3) = gp_Pnt(ratio2*outer_e_bzr_geom_v(1).X(), outer_e_bzr_geom_v(4).Y(), 0);
2385   }
2386
2387   Handle(Geom_BezierCurve) outer_e_bzr_geom = new Geom_BezierCurve(outer_e_bzr_geom_v);
2388   Handle(Geom_BSplineCurve) outer_e_bsp_geom = GeomConvert::CurveToBSplineCurve(outer_e_bzr_geom);
2389   TopoDS_Edge outer_e = BRepBuilderAPI_MakeEdge(outer_e_bsp_geom);
2390
2391   Handle(Geom_BSplineCurve) curve1;
2392   {
2393     Handle(TColgp_HArray1OfPnt2d) harray = new TColgp_HArray1OfPnt2d(1, 2); // sizing harray
2394     harray->SetValue(1, gp_Pnt2d(-JiZhunXian2_v1.Y(), 0));
2395     harray->SetValue(2, gp_Pnt2d(0, height + height / 2));
2396
2397     Geom2dAPI_Interpolate anInterpolation(harray, Standard_False, 1e-6);
2398
2399     gp_Vec2d vtangent1(0, 1);
2400     gp_Vec2d vtangent2(1, 0);
2401     anInterpolation.Load(vtangent1, vtangent2);
2402     anInterpolation.Perform();
2403
2404     Handle(Geom2d_BSplineCurve) c = anInterpolation.Curve();
2405
2406     gp_Pln pln(gp_Ax3(gp_Pnt(), gp_Dir(1, 0, 0), gp_Dir(0, -1, 0)));
2407
2408     Handle(Geom_BSplineCurve) c3d = Handle(Geom_BSplineCurve)::DownCast(GeomAPI::To3d(c, pln));
2409     curve1 = c3d;
2410   }
2411
2412   Handle(Geom_BSplineCurve) curve2;
2413   {
2414     Handle(TColgp_HArray1OfPnt2d) harray = new TColgp_HArray1OfPnt2d(1, 3); // sizing harray
2415     harray->SetValue(1, gp_Pnt2d(-JiZhunXian2_v0.X(), 0));
2416     harray->SetValue(2, gp_Pnt2d(-JiZhunXian2_v0.X() - 2.6, height));
2417     harray->SetValue(3, gp_Pnt2d(0, height + height / 2));
2418
2419     Geom2dAPI_Interpolate anInterpolation(harray, Standard_False, 1e-6);
2420     anInterpolation.Perform();
2421
2422     Handle(Geom2d_BSplineCurve) c = anInterpolation.Curve();
2423     gp_Pln pln(gp_Ax3(gp_Pnt(), gp_Dir(0, -1, 0), gp_Dir(-1, 0, 0)));
2424     Handle(Geom_BSplineCurve) c3d = Handle(Geom_BSplineCurve)::DownCast(GeomAPI::To3d(c, pln));
2425     curve2 = c3d;
2426   }
2427
2428   //////////////////////////////////////
2429   GeomFill_BSplineCurves fill2;
2430   fill2.Init(outer_e_bsp_geom, curve1, curve2, GeomFill_CoonsStyle);
2431
2432   const Handle(Geom_BSplineSurface)& surf_geom = fill2.Surface();
2433
2434   TopoDS_Shape filled_face = BRepBuilderAPI_MakeFace(surf_geom, 0);
2435
2436   DBRep::Set (theArgVec[1], filled_face);
2437
2438 /*
2439   ///////////////////////////////////////////////////////////////////////
2440   TopoDS_Solid first_solid;
2441   {
2442     BRepOffset_MakeOffset myOffsetShape(filled_face, -offset_thick, 1e-4,
2443       BRepOffset_Skin, //Mode
2444       Standard_False, //Intersection
2445       Standard_False, //SelfInter
2446       GeomAbs_Intersection, //Join
2447       Standard_True, //Thickening
2448       Standard_False //RemoveIntEdges
2449       ); //RemoveInvalidFaces
2450     first_solid = TopoDS::Solid(myOffsetShape.Shape());
2451   }
2452 */
2453   return 0;
2454 }
2455 #include <math_NewtonFunctionRoot.hxx>
2456 #include <math_TrigonometricFunctionRoots.hxx>
2457 #include <math_TrigonometricEquationFunction.hxx>
2458 #include <gp_Elips2d.hxx>
2459 #include <Geom2d_Ellipse.hxx>
2460 #include <Geom2dAPI_InterCurveCurve.hxx>
2461 static Standard_Integer OCC29289(Draw_Interpretor&, Standard_Integer , const char** )
2462 {
2463   gp_Elips2d e1(gp_Ax2d(gp_Pnt2d(0., 0.), gp_Dir2d(1., 0)), 2., 1.);
2464   Handle(Geom2d_Ellipse) Ge1 = new Geom2d_Ellipse(e1);
2465   gp_Elips2d e2(gp_Ax2d(gp_Pnt2d(0.5, 0.5), gp_Dir2d(1., 1.)), 2., 1.);
2466   Handle(Geom2d_Ellipse) Ge2 = new Geom2d_Ellipse(e2);
2467
2468   Standard_Integer err = 0;
2469   Geom2dAPI_InterCurveCurve Intersector;
2470   Intersector.Init(Ge1, Ge2, 1.e-7);
2471   if (Intersector.NbPoints() == 0)
2472   {
2473     std::cout << "Error: intersector is not done  \n";
2474     err = 1;
2475   }
2476
2477
2478   Standard_Real A, B, C, D, E;
2479   A = 1.875;
2480   B = -.75;
2481   C = -.5;
2482   D = -.25;
2483   E = -.25;
2484   math_TrigonometricEquationFunction MyF(A, B, C, D, E);
2485   Standard_Real X, Tol1, Eps, Teta, TetaNewton;
2486   Tol1 = 1.e-15;
2487   Eps = 1.5e-12;
2488   Standard_Integer Nit[] = { 5, 6, 7, 6 };
2489
2490   Standard_Real TetaPrev = 0.;
2491   Standard_Integer i;
2492   for (i = 1; i <= Intersector.NbPoints(); i++) {
2493     Teta = Intersector.Intersector().Point(i).ParamOnFirst();
2494     X = Teta - 0.1 * (Teta - TetaPrev);
2495     TetaPrev = Teta;
2496     math_NewtonFunctionRoot Resol(MyF, X, Tol1, Eps, Nit[i-1]);
2497     if (Resol.IsDone()) {
2498       TetaNewton = Resol.Root();
2499       if (Abs(Teta - TetaNewton) > 1.e-7)
2500       {
2501         std::cout << "Error: Newton root is wrong for " << Teta << " \n";
2502         err = 1;
2503       }
2504     }
2505     else
2506     {
2507       std::cout << "Error: Newton is not done for " << Teta << " \n";
2508       err = 1;
2509     }
2510   }
2511
2512   return err;
2513 }
2514
2515 //===============================================================================================
2516 Standard_Boolean IsSameGuid (const Standard_GUID& aGuidNull, const Standard_GUID& aGuid2)
2517 {
2518   Standard_Boolean isSame (Standard_False);
2519   if(Standard_GUID::IsEqual(aGuidNull, aGuid2)) {
2520     aGuid2.ShallowDump(std::cout);
2521     isSame = Standard_True;
2522   } else {
2523     aGuid2.ShallowDump(std::cout);
2524     std::cout <<std::endl;
2525   }
2526   return isSame;
2527 }
2528
2529 #include <TDataStd_AsciiString.hxx>
2530 #include <TDataStd_BooleanArray.hxx>
2531 #include <TDataStd_BooleanList.hxx>
2532 #include <TDataStd_ByteArray.hxx>
2533 #include <TDataStd_ExtStringArray.hxx>
2534 #include <TDataStd_ExtStringList.hxx>
2535 #include <TDataStd_Integer.hxx>
2536 #include <TDataStd_IntegerArray.hxx>
2537 #include <TDataStd_IntegerList.hxx>
2538 #include <TDataStd_Name.hxx>
2539 #include <TDataStd_Real.hxx>
2540 #include <TDataStd_RealArray.hxx>
2541 #include <TDataStd_RealList.hxx>
2542 #include <TDataStd_ReferenceArray.hxx>
2543 #include <TDataStd_ReferenceList.hxx>
2544
2545 #define QCOMPARE(val1, val2) \
2546   di << "Checking " #val1 " == " #val2 << \
2547         ((val1) == (val2) ? ": OK\n" : ": Error\n")
2548
2549 static Standard_Integer OCC29371 (Draw_Interpretor& di, Standard_Integer n, const char** a)
2550 {
2551   if (n != 1)
2552   {
2553     std::cout << "Usage : " << a[0] << "\n";
2554     return 1;
2555   }
2556
2557   Handle(TDocStd_Application) anApp = DDocStd::GetApplication();
2558   Handle(TDocStd_Document) aDoc;
2559   anApp->NewDocument ("BinOcaf", aDoc);
2560   TDF_Label aLab = aDoc->Main();
2561   Standard_GUID aNullGuid("00000000-0000-0000-0000-000000000000");
2562   Standard_Boolean IsNullGuid(Standard_False);
2563
2564   try {
2565     //1. Set TDataStd_AsciiString
2566     Handle(TDataStd_AsciiString) aStrAtt = new TDataStd_AsciiString();
2567     aLab.AddAttribute(aStrAtt);
2568     if(!aStrAtt.IsNull()) {
2569       Standard_GUID aGuid = aStrAtt->ID();
2570       IsNullGuid = IsSameGuid(aNullGuid, aGuid);
2571     }
2572
2573     //2. Set TDataStd_BooleanArray
2574     Handle(TDataStd_BooleanArray) aBArAtt = new TDataStd_BooleanArray();
2575     aLab.AddAttribute(aBArAtt);
2576     if(!aBArAtt.IsNull()) {
2577       Standard_GUID aGuid = aBArAtt->ID();
2578       IsNullGuid = IsSameGuid(aNullGuid, aGuid);
2579     }
2580
2581     //3. Set TDataStd_BooleanList
2582     Handle(TDataStd_BooleanList) aBListAtt = new TDataStd_BooleanList();
2583     aLab.AddAttribute(aBListAtt);
2584     if(!aBListAtt.IsNull()) {
2585       Standard_GUID aGuid = aBListAtt->ID();
2586       IsNullGuid = IsSameGuid(aNullGuid, aGuid);
2587     }
2588
2589     //4. Set TDataStd_ByteArray
2590     Handle(TDataStd_ByteArray) aByteArAtt = new TDataStd_ByteArray();
2591     aLab.AddAttribute(aByteArAtt);
2592     if(!aByteArAtt.IsNull()) {
2593       Standard_GUID aGuid = aByteArAtt->ID();
2594       IsNullGuid = IsSameGuid(aNullGuid, aGuid);
2595     }
2596
2597     //5. Set TDataStd_ExtStringArray
2598     Handle(TDataStd_ExtStringArray) anExtStrArAtt = new TDataStd_ExtStringArray();
2599     aLab.AddAttribute(anExtStrArAtt);
2600     if(!anExtStrArAtt.IsNull()) {
2601       Standard_GUID aGuid = anExtStrArAtt->ID();
2602       IsNullGuid = IsSameGuid(aNullGuid, aGuid);
2603     }
2604
2605     //6. Set TDataStd_ExtStringList
2606     Handle(TDataStd_ExtStringList) anExtStrListAtt = new TDataStd_ExtStringList();
2607     aLab.AddAttribute(anExtStrListAtt);
2608     if(!anExtStrListAtt.IsNull()) {
2609       Standard_GUID aGuid = anExtStrListAtt->ID();
2610       IsNullGuid = IsSameGuid(aNullGuid, aGuid);
2611     }
2612
2613     //7. Set TDataStd_Integer
2614     Handle(TDataStd_Integer) anIntAtt = new TDataStd_Integer();
2615     aLab.AddAttribute(anIntAtt);
2616     if(!anIntAtt.IsNull()) {
2617       Standard_GUID aGuid = anIntAtt->ID();
2618       IsNullGuid = IsSameGuid(aNullGuid, aGuid);
2619     }
2620
2621     //8. Set TDataStd_IntegerArray
2622     Handle(TDataStd_IntegerArray) anIntArrAtt = new TDataStd_IntegerArray();
2623     aLab.AddAttribute(anIntArrAtt);
2624     if(!anIntArrAtt.IsNull()) {
2625       Standard_GUID aGuid = anIntArrAtt->ID();
2626       IsNullGuid = IsSameGuid(aNullGuid, aGuid);
2627     }
2628
2629     //9. Set TDataStd_IntegerList
2630     Handle(TDataStd_IntegerList) anIntListAtt = new TDataStd_IntegerList();
2631     aLab.AddAttribute(anIntListAtt);
2632     if(!anIntListAtt.IsNull()) {
2633       Standard_GUID aGuid = anIntListAtt->ID();
2634       IsNullGuid = IsSameGuid(aNullGuid, aGuid);
2635     }
2636
2637     //10. Set TDataStd_Name
2638     Handle(TDataStd_Name) aNameAtt = new TDataStd_Name();
2639     aLab.AddAttribute(aNameAtt);
2640     if(!aNameAtt.IsNull()) {
2641       Standard_GUID aGuid = aNameAtt->ID();
2642       IsNullGuid = IsSameGuid(aNullGuid, aGuid);
2643     }
2644
2645     //11. Set TDataStd_Real
2646     Handle(TDataStd_Real) aRealAtt = new TDataStd_Real();
2647     aLab.AddAttribute(aRealAtt);
2648     if(!aRealAtt.IsNull()) {
2649       Standard_GUID aGuid = aRealAtt->ID();
2650       IsNullGuid = IsSameGuid(aNullGuid, aGuid);
2651     }
2652
2653     //12. Set TDataStd_RealArray
2654     Handle(TDataStd_RealArray) aRealArrAtt = new TDataStd_RealArray();
2655     aLab.AddAttribute(aRealArrAtt);
2656     if(!aRealArrAtt.IsNull()) {
2657       Standard_GUID aGuid = aRealArrAtt->ID();
2658       IsNullGuid = IsSameGuid(aNullGuid, aGuid);
2659     }
2660
2661     //13. Set TDataStd_RealList
2662     Handle(TDataStd_RealList) aRealListAtt = new TDataStd_RealList();
2663     aLab.AddAttribute(aRealListAtt);
2664     if(!aRealListAtt.IsNull()) {
2665       Standard_GUID aGuid = aRealListAtt->ID();
2666       IsNullGuid = IsSameGuid(aNullGuid, aGuid);
2667     }
2668
2669     //14. Set TDataStd_ReferenceArray
2670     Handle(TDataStd_ReferenceArray) aRefArrAtt = new TDataStd_ReferenceArray();
2671     aLab.AddAttribute(aRefArrAtt);
2672     if(!aRefArrAtt.IsNull()) {
2673       Standard_GUID aGuid = aRefArrAtt->ID();
2674       IsNullGuid = IsSameGuid(aNullGuid, aGuid);
2675     }
2676
2677     //15. Set TDataStd_ReferenceList
2678     Handle(TDataStd_ReferenceList) aRefListAtt = new TDataStd_ReferenceList();
2679     aLab.AddAttribute(aRefListAtt);
2680     if(!aRefListAtt.IsNull()) {
2681       Standard_GUID aGuid = aRefListAtt->ID();
2682       IsNullGuid = IsSameGuid(aNullGuid, aGuid);
2683     }
2684   } catch (...)
2685   {
2686     IsNullGuid = Standard_True;
2687   }
2688   QCOMPARE (IsNullGuid, Standard_False);
2689   anApp->Close(aDoc);
2690   return 0;
2691 }
2692
2693 #include <NCollection_DoubleMap.hxx>
2694 #include <NCollection_IndexedMap.hxx>
2695 #include <NCollection_DataMap.hxx>
2696 #include <NCollection_IndexedDataMap.hxx>
2697 #include <OSD_MemInfo.hxx>
2698
2699 // check that copying of empty maps does not allocate extra memory
2700 template<typename T> void AllocDummyArr (Draw_Interpretor& theDI, int theN1, int theN2)
2701 {
2702   NCollection_Array1<T> aMapArr1(0, theN1), aMapArr2(0, theN2);
2703
2704   OSD_MemInfo aMemTool;
2705   Standard_Size aMem0 = aMemTool.Value (OSD_MemInfo::MemHeapUsage);
2706
2707   for (int i = 1; i < theN1; i++)
2708     aMapArr1(i) = aMapArr1(i-1);
2709   for (int i = 1; i < theN2; i++)
2710     aMapArr2(i) = aMapArr2(0);
2711
2712   aMemTool.Update();
2713   Standard_Size aMem1 = aMemTool.Value (OSD_MemInfo::MemHeapUsage);
2714
2715   theDI << "Heap usage before copy = " << (int)aMem0 << ", after = " << (int)aMem1 << "\n";
2716   
2717   if (aMem1 > aMem0)
2718     theDI << "Error: memory increased by " << (int)(aMem1 - aMem0) << " bytes\n";
2719 };
2720
2721 static Standard_Integer OCC29064 (Draw_Interpretor& theDI, Standard_Integer theArgc, const char** theArgv)
2722 {
2723   if (theArgc < 2)
2724   {
2725     std::cout << "Error: give argument indicating type of map (map, doublemap, datamap, indexedmap, indexeddatamap)" << std::endl;
2726     return 1;
2727   }
2728
2729   const int nbm1 = 10000, nbm2 = 10000;
2730   if (strcasecmp (theArgv[1], "map") == 0)
2731     AllocDummyArr<NCollection_Map<int> > (theDI, nbm1, nbm2);
2732   else if (strcasecmp (theArgv[1], "doublemap") == 0)
2733     AllocDummyArr<NCollection_DoubleMap<int, int> > (theDI, nbm1, nbm2);
2734   else if (strcasecmp (theArgv[1], "datamap") == 0)
2735     AllocDummyArr<NCollection_DataMap<int, int> > (theDI, nbm1, nbm2);
2736   else if (strcasecmp (theArgv[1], "indexedmap") == 0)
2737     AllocDummyArr<NCollection_IndexedMap<int> > (theDI, nbm1, nbm2);
2738   else if (strcasecmp (theArgv[1], "indexeddatamap") == 0)
2739     AllocDummyArr<NCollection_IndexedDataMap<int, int> > (theDI, nbm1, nbm2);
2740   else
2741   {
2742     std::cout << "Error: unrecognized argument " << theArgv[1] << std::endl;
2743     return 1;
2744   }
2745   return 0;
2746 }
2747
2748 #include <BRepOffsetAPI_MakePipeShell.hxx>
2749 #include <GC_MakeArcOfCircle.hxx>
2750 #include <BRepAdaptor_CompCurve.hxx>
2751 #include <gp_Circ.hxx>
2752 //=======================================================================
2753 //function : OCC29430
2754 //purpose  : 
2755 //=======================================================================
2756 static Standard_Integer OCC29430(Draw_Interpretor& theDI,
2757                                  Standard_Integer /*theNArg*/,
2758                                  const char** theArgVal)
2759 {
2760   const Standard_Real r45 = M_PI / 4.0, r225 = 3.0*M_PI / 4.0;
2761
2762   GC_MakeArcOfCircle arcMaker(gp_Circ(gp_Ax2(gp_Pnt(0.0, 0.0, 0.0), gp_Dir(0.0, 0.0, 1.0), gp_Dir(1.0, 0.0, 0.0)), 1.0), r45, r225, Standard_True);
2763   BRepBuilderAPI_MakeEdge edgeMaker(arcMaker.Value());
2764   BRepBuilderAPI_MakeWire wireMaker(edgeMaker.Edge());
2765   const TopoDS_Wire circle = wireMaker.Wire();
2766
2767   DBRep::Set(theArgVal[1], circle);
2768
2769   BRepAdaptor_CompCurve curve(circle);
2770   theDI << "Curve.FirstParameter() = " << curve.FirstParameter() << "\n";
2771   theDI << "Curve.LastParameter() = " << curve.LastParameter() << "\n";
2772   theDI << "Curve.Period() = " << (curve.IsPeriodic()? curve.Period() : 0.0) << "\n";
2773   const gp_Pnt aStartPt = curve.Value(curve.FirstParameter());
2774   const gp_Pnt anEndPt = curve.Value(curve.LastParameter());
2775
2776   DrawTrSurf::Set(theArgVal[2], aStartPt);
2777   DrawTrSurf::Set(theArgVal[3], anEndPt);
2778
2779   return 0;
2780 }
2781
2782 #include <STEPCAFControl_Reader.hxx>
2783
2784 //=======================================================================
2785 //function : OCC29531
2786 //purpose  : 
2787 //=======================================================================
2788 static Standard_Integer OCC29531(Draw_Interpretor&, Standard_Integer, const char** theArgV)
2789 {
2790   Handle(TDocStd_Application) anApp = DDocStd::GetApplication();
2791   Handle(TDocStd_Document) aDoc;
2792   anApp->NewDocument("BinOcaf", aDoc);
2793   aDoc->SetUndoLimit(1);
2794
2795   STEPCAFControl_Reader Reader;
2796   Reader.ReadFile(theArgV[1]);
2797   Reader.Transfer(aDoc);
2798   TDF_Label aShL, aDL;
2799   TDF_Tool::Label(aDoc->GetData(), "0:1:1:2:672", aShL);
2800   TDF_Tool::Label(aDoc->GetData(), "0:1:4:10", aDL);
2801
2802   aDoc->OpenCommand();
2803
2804   Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(aDoc->Main());
2805   aDimTolTool->SetDimension(aShL, aDL);
2806
2807   aDoc->CommitCommand();
2808
2809   aDoc->Undo();
2810   aDoc->Redo();
2811   return 0;
2812 }
2813
2814 //=======================================================================
2815 //function : OCC29807
2816 //purpose  : 
2817 //=======================================================================
2818 #include <GeomAdaptor_HSurface.hxx>
2819 #include <IntPatch_PointLine.hxx>
2820 #include <IntSurf_PntOn2S.hxx>
2821 static Standard_Integer OCC29807(Draw_Interpretor& theDI, Standard_Integer theNArg, const char** theArgV)
2822 {
2823   if (theNArg != 7)
2824   {
2825     theDI << "Use: " << theArgV[0] << "surface1 surface2 u1 v1 u2 v2\n";
2826     return 1;
2827   }
2828
2829   const Handle(Geom_Surface) aS1 = DrawTrSurf::GetSurface(theArgV[1]);
2830   const Handle(Geom_Surface) aS2 = DrawTrSurf::GetSurface(theArgV[2]);
2831
2832   if (aS1.IsNull() || aS2.IsNull())
2833   {
2834     theDI << "Error. Null surface is not supported.\n";
2835     return 1;
2836   }
2837
2838   const Standard_Real aU1 = Draw::Atof(theArgV[3]);
2839   const Standard_Real aV1 = Draw::Atof(theArgV[4]);
2840   const Standard_Real aU2 = Draw::Atof(theArgV[5]);
2841   const Standard_Real aV2 = Draw::Atof(theArgV[6]);
2842
2843   const Handle(GeomAdaptor_HSurface) anAS1 = new GeomAdaptor_HSurface(aS1);
2844   const Handle(GeomAdaptor_HSurface) anAS2 = new GeomAdaptor_HSurface(aS2);
2845
2846   const gp_Pnt aP1 = anAS1->Value(aU1, aV1);
2847   const gp_Pnt aP2 = anAS2->Value(aU2, aV2);
2848
2849   if (aP1.SquareDistance(aP2) > Precision::SquareConfusion())
2850   {
2851     theDI << "Error. True intersection point must be specified. "
2852              "Please check parameters: u1 v1 u2 v2.\n";
2853     return 1;
2854   }
2855
2856   IntSurf_PntOn2S aPOn2S;
2857   aPOn2S.SetValue(0.5*(aP1.XYZ() + aP2.XYZ()), aU1, aV1, aU2, aV2);
2858
2859   const Standard_Real aCurvatureRadius = IntPatch_PointLine::CurvatureRadiusOfIntersLine(anAS1, anAS2, aPOn2S);
2860   theDI << "Radius of curvature is " << aCurvatureRadius << "\n";
2861   return 0;
2862 }
2863
2864 //=======================================================================
2865 //function : OCC29925
2866 //purpose  : check safety of functions like IsSpace(), LowerCase(), etc. for all chars
2867 //=======================================================================
2868 static Standard_Integer OCC29925 (Draw_Interpretor& theDI, Standard_Integer, const char**)
2869 {
2870   // iterate by all valid ASCII chars (including extended)
2871   for (int i = 0; i < 256; i++)
2872   {
2873     Standard_Character c = (char)(unsigned char)i;
2874 //    if (c != i) theDI << c << " != " << i << "\n";
2875     const char* anOp = "";
2876     try {
2877       anOp = "IsAlphabetic";
2878       IsAlphabetic (c);
2879       anOp = "IsDigit";
2880       IsDigit (c);
2881       anOp = "IsXDigit";
2882       IsXDigit (c);
2883       anOp = "IsAlphanumeric";
2884       IsAlphanumeric (c);
2885       anOp = "IsControl";
2886       IsControl (c);
2887       anOp = "IsGraphic";
2888       IsGraphic (c);
2889       anOp = "IsLowerCase";
2890       IsLowerCase (c);
2891       anOp = "IsPrintable";
2892       IsPrintable (c);
2893       anOp = "IsPunctuation";
2894       IsPunctuation (c);
2895       anOp = "IsSpace";
2896       IsSpace (c);
2897       anOp = "IsUpperCase";
2898       IsUpperCase (c);
2899       anOp = "LowerCase";
2900       LowerCase (c);
2901       anOp = "UpperCase";
2902       UpperCase (c);
2903     }
2904     catch (const Handle(Standard_Failure)& e)
2905     {
2906       theDI << anOp << "() fails for " << c << " (" << e->DynamicType()->Name() << ")\n";
2907     }
2908   }
2909
2910   return 0;
2911 }
2912
2913 //=======================================================================
2914 //function : OCC29311
2915 //purpose  : check performance of OBB calculations
2916 //=======================================================================
2917 static Standard_Integer OCC29311 (Draw_Interpretor& theDI, Standard_Integer theArgc, const char** theArgv)
2918 {
2919   if (theArgc < 4)
2920   {
2921     std::cerr << "Use: " << theArgv[0] << " shape counter_name nb_iterations" << std::endl;
2922     return 1;
2923   }
2924
2925   TopoDS_Shape aShape = DBRep::Get (theArgv[1]);
2926   Standard_Integer aNbIter = Draw::Atoi (theArgv[3]);
2927
2928   Bnd_OBB anOBB;
2929   OSD_Timer aTimer;
2930   aTimer.Start ();
2931   for (Standard_Integer aN = aNbIter; aN > 0; --aN)
2932   {
2933     anOBB.SetVoid ();
2934     BRepBndLib::AddOBB (aShape, anOBB, Standard_False, Standard_False, Standard_False);
2935   }
2936   aTimer.Stop ();
2937
2938   theDI << "COUNTER " << theArgv[2] << ": " << aTimer.ElapsedTime() << "\n";
2939
2940   return 0;
2941 }
2942
2943 //=======================================================================
2944 //function : OCC30391
2945 //purpose  : 
2946 //=======================================================================
2947 #include <BRepOffset_Tool.hxx>
2948 static Standard_Integer OCC30391(Draw_Interpretor& theDI,
2949                                  Standard_Integer theNArg,
2950                                  const char** theArgV)
2951 {
2952   if (theNArg < 7)
2953   {
2954     theDI << "Use: " << theArgV[0] << "result face LenBeforeUfirst LenAfterUlast LenBeforeVfirst LenAfterVlast\n";
2955     return 1;
2956   }
2957
2958   TopoDS_Shape aShape = DBRep::Get(theArgV[2], TopAbs_FACE);
2959   if (aShape.IsNull())
2960     return 1;
2961
2962   const TopoDS_Face& aFace = TopoDS::Face(aShape);
2963
2964   Standard_Real aLenBeforeUfirst = atof(theArgV[3]);
2965   Standard_Real aLenAfterUlast   = atof(theArgV[4]);
2966   Standard_Real aLenBeforeVfirst = atof(theArgV[5]);
2967   Standard_Real aLenAfterVlast   = atof(theArgV[6]);
2968
2969   TopoDS_Face Result;
2970   BRepOffset_Tool::EnLargeFace(aFace, Result,
2971                                Standard_True,Standard_True,Standard_True,Standard_True,Standard_True,1,
2972                                aLenBeforeUfirst, aLenAfterUlast,
2973                                aLenBeforeVfirst, aLenAfterVlast);
2974
2975   DBRep::Set(theArgV[1], Result);
2976   return 0;
2977 }
2978
2979 //=======================================================================
2980 //function : QAStartsWith string startstring
2981 //=======================================================================
2982 static Standard_Integer QAStartsWith(Draw_Interpretor& di, Standard_Integer n, const char** a)
2983 {
2984   if (n == 3)
2985   {
2986     TCollection_ExtendedString str = a[1];
2987     TCollection_ExtendedString startstr = a[2];
2988     if (str.StartsWith(startstr))
2989       di << "Yes";
2990     else
2991       di << "No";
2992     return 0;
2993   }
2994   std::cerr << "Syntax error\n";
2995   return 1;
2996 }
2997
2998 //=======================================================================
2999 //function : QAEndsWith string endstring
3000 //=======================================================================
3001 static Standard_Integer QAEndsWith(Draw_Interpretor& di, Standard_Integer n, const char** a)
3002 {
3003   if (n == 3)
3004   {
3005     TCollection_ExtendedString str = a[1];
3006     TCollection_ExtendedString endstr = a[2];
3007     if (str.EndsWith(endstr))
3008       di << "Yes";
3009     else
3010       di << "No";
3011     return 0;
3012   }
3013   std::cerr << "Syntax error\n";
3014   return 1;
3015 }
3016
3017 //Class is used in OCC30435
3018 #include <AppCont_Function.hxx>
3019 #include <Adaptor3d_HCurve.hxx>
3020 class CurveEvaluator : public AppCont_Function
3021
3022 {
3023
3024 public:
3025   Handle(Adaptor3d_HCurve) myCurve;
3026
3027   CurveEvaluator(const Handle(Adaptor3d_HCurve)& C)
3028     : myCurve(C)
3029   {
3030     myNbPnt = 1;
3031     myNbPnt2d = 0;
3032   }
3033
3034   Standard_Real FirstParameter() const
3035   {
3036     return myCurve->FirstParameter();
3037   }
3038
3039   Standard_Real LastParameter() const
3040   {
3041     return myCurve->LastParameter();
3042   }
3043
3044   Standard_Boolean Value(const Standard_Real   theT,
3045     NCollection_Array1<gp_Pnt2d>& /*thePnt2d*/,
3046     NCollection_Array1<gp_Pnt>&   thePnt) const
3047   {
3048     thePnt(1) = myCurve->Value(theT);
3049     return Standard_True;
3050   }
3051
3052   Standard_Boolean D1(const Standard_Real   theT,
3053     NCollection_Array1<gp_Vec2d>& /*theVec2d*/,
3054     NCollection_Array1<gp_Vec>&   theVec) const
3055   {
3056     gp_Pnt aDummyPnt;
3057     myCurve->D1(theT, aDummyPnt, theVec(1));
3058     return Standard_True;
3059   }
3060 };
3061
3062 #include <GeomAdaptor_HCurve.hxx>
3063 #include <Approx_FitAndDivide.hxx>
3064 #include <Convert_CompBezierCurvesToBSplineCurve.hxx>
3065 static Standard_Integer OCC30435(Draw_Interpretor& di, Standard_Integer, const char** a)
3066 {
3067
3068   Handle(Geom_Curve) GC;
3069   GC = DrawTrSurf::GetCurve(a[2]);
3070   if (GC.IsNull())
3071     return 1;
3072
3073   Standard_Integer Dmin = 3;
3074   Standard_Integer Dmax = 12;
3075   Standard_Real Tol3d = 1.e-7;
3076   Standard_Boolean inverse = Standard_True;
3077
3078
3079   Standard_Integer inv = atoi(a[3]);
3080   if (inv > 0)
3081   {
3082     inverse = Standard_True;
3083   }
3084   else
3085   {
3086     inverse = Standard_False;
3087   }
3088
3089   Standard_Integer maxit = atoi(a[4]);
3090
3091   Handle(GeomAdaptor_HCurve) aGAC = new GeomAdaptor_HCurve(GC);
3092
3093   CurveEvaluator aCE(aGAC);
3094
3095   Approx_FitAndDivide anAppro(Dmin, Dmax, Tol3d, 0., Standard_True);
3096   anAppro.SetInvOrder(inverse);
3097   Standard_Integer i;
3098   for (i = 1; i <= maxit; ++i)
3099     anAppro.Perform(aCE);
3100
3101   if (!anAppro.IsAllApproximated())
3102   {
3103     di << "Approximation failed \n";
3104     return 1;
3105   }
3106   Standard_Integer NbCurves = anAppro.NbMultiCurves();
3107
3108   Convert_CompBezierCurvesToBSplineCurve Conv;
3109
3110   Standard_Real tol3d, tol2d, tolreached = 0.;
3111   for (i = 1; i <= NbCurves; i++) {
3112     anAppro.Error(i, tol3d, tol2d);
3113     tolreached = Max(tolreached, tol3d);
3114     AppParCurves_MultiCurve MC = anAppro.Value(i);
3115     TColgp_Array1OfPnt Poles(1, MC.Degree() + 1);
3116     MC.Curve(1, Poles);
3117     Conv.AddCurve(Poles);
3118   }
3119   Conv.Perform();
3120   Standard_Integer NbPoles = Conv.NbPoles();
3121   Standard_Integer NbKnots = Conv.NbKnots();
3122
3123   TColgp_Array1OfPnt      NewPoles(1, NbPoles);
3124   TColStd_Array1OfReal    NewKnots(1, NbKnots);
3125   TColStd_Array1OfInteger NewMults(1, NbKnots);
3126
3127   Conv.KnotsAndMults(NewKnots, NewMults);
3128   Conv.Poles(NewPoles);
3129
3130   BSplCLib::Reparametrize(GC->FirstParameter(),
3131     GC->LastParameter(),
3132     NewKnots);
3133   Handle(Geom_BSplineCurve) TheCurve = new Geom_BSplineCurve(NewPoles, NewKnots, NewMults, Conv.Degree());
3134
3135   DrawTrSurf::Set(a[1], TheCurve);
3136   di << a[1] << ": tolreached = " << tolreached << "\n";
3137
3138   return 0;
3139
3140 }
3141
3142 //=======================================================================
3143 //function : OCC30708_1 
3144 //purpose  : Tests initialization of the TopoDS_Iterator with null shape
3145 //=======================================================================
3146 static Standard_Integer OCC30708_1 (Draw_Interpretor& di, Standard_Integer, const char**)
3147 {
3148   TopoDS_Iterator it;
3149   try
3150   {
3151     OCC_CATCH_SIGNALS
3152
3153     TopoDS_Shape empty;
3154     it.Initialize (empty);
3155
3156   }
3157   catch (const Standard_Failure&)
3158   {
3159     di << "Cannot initialize TopoDS_Iterator with null shape\n";
3160     return 0;
3161   }
3162
3163   if (it.More())
3164     di << "Incorrect Iterator initialization: method More() returns true on null shape\n";
3165
3166   return 0;
3167 }
3168
3169 //=======================================================================
3170 //function : OCC30708_2
3171 //purpose  : Tests initialization of the BRepLib_MakeWire with null wire
3172 //=======================================================================
3173 static Standard_Integer OCC30708_2 (Draw_Interpretor& di, Standard_Integer, const char**)
3174 {
3175   try
3176   {
3177     OCC_CATCH_SIGNALS
3178
3179     TopoDS_Wire empty;
3180     BRepLib_MakeWire aWBuilder (empty);
3181   }
3182   catch (const Standard_Failure&)
3183   {
3184     di << "Cannot initialize BRepLib_MakeWire with null wire\n";
3185   }
3186
3187   return 0;
3188 }
3189
3190 //=======================================================================
3191 //function : OCC30869
3192 //purpose  :
3193 //=======================================================================
3194 static Standard_Integer OCC30869 (Draw_Interpretor& theDI, Standard_Integer theArgc, const char** theArgv)
3195 {
3196   if (theArgc != 2)
3197   {
3198     theDI.PrintHelp (theArgv[0]);
3199     return 1;
3200   }
3201
3202   TopoDS_Shape aWire = DBRep::Get (theArgv[1]);
3203   if (aWire.IsNull() || aWire.ShapeType() != TopAbs_WIRE)
3204   {
3205     theDI << theArgv[1] << " is not a wire.\n";
3206     return 1;
3207   }
3208
3209   BRepAdaptor_CompCurve aBACC (TopoDS::Wire (aWire));
3210
3211   Standard_Real aFirst = aBACC.FirstParameter();
3212   Standard_Real aLast  = aBACC.LastParameter();
3213
3214   gp_Pnt aPFirst, aPLast;
3215   gp_Vec aVFirst, aVLast;
3216
3217   aBACC.D1 (aFirst, aPFirst, aVFirst);
3218   aBACC.D1 (aLast,  aPLast,  aVLast);
3219
3220   if (aVFirst.SquareMagnitude() > gp::Resolution())
3221     aVFirst.Normalize();
3222   if (aVLast.SquareMagnitude() > gp::Resolution())
3223     aVLast.Normalize();
3224
3225   theDI << aFirst << ": point " << aPFirst.X() << " "
3226                                 << aPFirst.Y() << " "
3227                                 << aPFirst.Z()
3228                   << ", tangent " << aVFirst.X() << " "
3229                                   << aVFirst.Y() << " "
3230                                   << aVFirst.Z() << "\n";
3231
3232   theDI << aLast << ": point " << aPLast.X() << " "
3233                               << aPLast.Y() << " "
3234                               << aPLast.Z()
3235                  << ", tangent " << aVLast.X() << " "
3236                                  << aVLast.Y() << " "
3237                                  << aVLast.Z() << "\n";
3238
3239   return 0;
3240 }
3241
3242 #include <BRepExtrema_ExtCF.hxx>
3243 //=======================================================================
3244 //function : OCC30880
3245 //purpose  :
3246 //=======================================================================
3247 static Standard_Integer OCC30880 (Draw_Interpretor& theDI, Standard_Integer theArgc, const char** theArgv)
3248 {
3249   if (theArgc != 3)
3250   {
3251     theDI.PrintHelp (theArgv[0]);
3252     return 1;
3253   }
3254
3255   TopoDS_Shape anEdge = DBRep::Get (theArgv[1]);
3256   if (anEdge.IsNull() || anEdge.ShapeType() != TopAbs_EDGE)
3257   {
3258     theDI << theArgv[1] << " is not an edge.\n";
3259     return 1;
3260   }
3261
3262   TopoDS_Shape aFace = DBRep::Get (theArgv[2]);
3263   if (aFace.IsNull() || aFace.ShapeType() != TopAbs_FACE)
3264   {
3265     theDI << theArgv[2] << " is not a face.\n";
3266     return 1;
3267   }
3268
3269   BRepExtrema_ExtCF anExtCF (TopoDS::Edge (anEdge),
3270                              TopoDS::Face (aFace));
3271   if (!anExtCF.IsDone())
3272   {
3273     theDI << "Not done\n";
3274     return 0;
3275   }
3276
3277   if (!anExtCF.NbExt())
3278   {
3279     theDI << "No solutions\n";
3280     return 0;
3281   }
3282
3283   if (anExtCF.IsParallel())
3284   {
3285     theDI << "Infinite number of solutions, distance - " << Sqrt (anExtCF.SquareDistance (1)) << "\n";
3286     return 0;
3287   }
3288
3289   Standard_Real aDistMin = RealLast();
3290   Standard_Integer aSolMin = -1;
3291   // Look for the minimal solution
3292   for (int i = 1; i <= anExtCF.NbExt(); ++i)
3293   {
3294     Standard_Real aDist = anExtCF.SquareDistance (i);
3295     if (aDist < aDistMin)
3296     {
3297       aDistMin = aDist;
3298       aSolMin = i;
3299     }
3300   }
3301
3302   if (aSolMin < 0)
3303   {
3304     theDI << "Failed\n";
3305     return 0;
3306   }
3307
3308   theDI << "Minimal distance - " << Sqrt (aDistMin) << "\n";
3309   return 0;
3310 }
3311
3312 #include <BRepPrimAPI_MakeBox.hxx>
3313 static Standard_Integer OCC30704(Draw_Interpretor& di, Standard_Integer, const char**)
3314 {
3315   // Make a shape somewhere far from (0, 0, 0).
3316   BRepPrimAPI_MakeBox mkBox(gp_Pnt(100, 100, 100), 100, 100, 100);
3317   const TopoDS_Shape& box = mkBox.Shape();
3318
3319   // Add a bounding box of a shape to a void bounding box.
3320   Bnd_OBB aVoidBox, aBox;
3321   BRepBndLib::AddOBB(box, aBox, Standard_False, Standard_False, Standard_False);
3322   aVoidBox.Add(aBox);
3323
3324   // Print the center point of the bounding box.
3325   const gp_XYZ& center = aVoidBox.Center();
3326   di << center.X() << " " << center.Y() << " " << center.Z();
3327   return 0;
3328 }
3329 static Standard_Integer OCC30704_1(Draw_Interpretor& di, Standard_Integer, const char**)
3330 {
3331   // A point.
3332   gp_Pnt aP(100, 200, 300);
3333
3334   // Add the point to a void bounding box.
3335   Bnd_OBB aVoidBox;
3336   aVoidBox.Add(aP);
3337
3338   // Print the center point of the bounding box.
3339   const gp_XYZ& center = aVoidBox.Center();
3340   di << center.X() << " " << center.Y() << " " << center.Z();
3341   return 0;
3342 }
3343
3344 //=======================================================================
3345 //function : OCC30990
3346 //purpose  : check consistency of implementation of cache in B-Spline surfaces
3347 //           with respect to update of the cache for points located exactly
3348 //           on boundary between bspline spans (i.e. at knots)
3349 //=======================================================================
3350 static Standard_Integer OCC30990 (Draw_Interpretor& theDI, Standard_Integer theNArg, const char** theArgV)
3351 {
3352   if (theNArg != 2)
3353   {
3354     std::cerr << "Use: " << theArgV[0] << "surface\n";
3355     return 1;
3356   }
3357
3358   const Handle(Geom_BSplineSurface) aSurf = 
3359     Handle(Geom_BSplineSurface)::DownCast (DrawTrSurf::GetSurface(theArgV[1]));
3360   if (aSurf.IsNull())
3361   {
3362     theDI << "Error: " << theArgV[1] << " is not a B-Spline surface";
3363     return 0;
3364   }
3365   GeomAdaptor_Surface aS (aSurf);
3366
3367   // Evaluate points for U and V located exactly at b-spline knots,
3368   // after evaluation of points inside the spans before and after the knot,
3369   // and ensure that result at the knot is exactly the same regardless
3370   // of previous evaluation (i.e. the cache is updated as necessary).
3371   // Note: the points (D0) computed on different spans are slighly different
3372   // due to rounding, which allows us to detect this situation without
3373   // analysis of higher derivatives (which would show non-negligible difference).
3374   Standard_Integer aNbErr = 0;
3375
3376   theDI << "U knots: ";
3377   for (int i = 1; i <= aSurf->NbUKnots(); i++)
3378   {
3379     theDI << aSurf->UKnot(i);
3380     if (i < aSurf->NbUKnots()) theDI << ",";
3381   }
3382   theDI << "\n";
3383   for (int i = 2; i < aSurf->NbUKnots(); i++)
3384   {
3385     Standard_Real aUknot = aSurf->UKnot(i);
3386     Standard_Real aUprev = 0.5 * (aUknot + aSurf->UKnot(i-1));
3387     Standard_Real aUnext = 0.5 * (aUknot + aSurf->UKnot(i+1));
3388     for (int j = 1; j < aSurf->NbVKnots(); j++)
3389     {
3390       Standard_Real aV = 0.5 * (aSurf->VKnot(j) + aSurf->VKnot(j + 1));
3391       aS.Value (aUprev, aV);
3392       gp_Pnt aValue1 = aS.Value (aUknot, aV);
3393       aS.Value (aUnext, aV);
3394       gp_Pnt aValue2 = aS.Value (aUknot, aV);
3395       for (int k = 1; k <= 3; k++)
3396       {
3397         if (aValue1.Coord(k) != aValue2.Coord(k))
3398         {
3399           Standard_SStream aStr;
3400           aStr.precision(20);
3401           aStr << "Error evaluating point at UV = (" << aUknot << ", " << aV << "):\n";
3402           aStr << "probe 1: " << (char)('X' + k - 1) << " = " << aValue1.Coord(k) << "\n";
3403           aStr << "probe 2: " << (char)('X' + k - 1) << " = " << aValue2.Coord(k) << "\n";
3404           theDI << aStr.str().c_str();
3405           aNbErr++;
3406         }
3407       }
3408     }
3409   }
3410
3411   theDI << "V knots: ";
3412   for (int j = 1; j <= aSurf->NbVKnots(); j++)
3413   {
3414     theDI << aSurf->VKnot(j);
3415     if (j < aSurf->NbVKnots()) theDI << ",";
3416   }
3417   theDI << "\n";
3418   for (int j = 2; j < aSurf->NbVKnots(); j++)
3419   {
3420     Standard_Real aVknot = aSurf->VKnot(j);
3421     Standard_Real aVprev = 0.5 * (aVknot + aSurf->VKnot(j-1));
3422     Standard_Real aVnext = 0.5 * (aVknot + aSurf->VKnot(j+1));
3423     for (int i = 1; i < aSurf->NbUKnots(); i++)
3424     {
3425       Standard_Real aU = 0.5 * (aSurf->UKnot(i) + aSurf->UKnot(i + 1));
3426       aS.Value (aU, aVprev);
3427       gp_Pnt aValue1 = aS.Value (aU, aVknot);
3428       aS.Value (aU, aVnext);
3429       gp_Pnt aValue2 = aS.Value (aU, aVknot);
3430       for (int k = 1; k <= 3; k++)
3431       {
3432         if (aValue1.Coord(k) != aValue2.Coord(k))
3433         {
3434           Standard_SStream aStr;
3435           aStr.precision(20);
3436           aStr << "Error evaluating point at UV = (" << aU << ", " << aVknot << "):\n";
3437           aStr << "probe 1: " << (char)('X' + k - 1) << " = " << aValue1.Coord(k) << "\n";
3438           aStr << "probe 2: " << (char)('X' + k - 1) << " = " << aValue2.Coord(k) << "\n";
3439           theDI << aStr.str().c_str();
3440           aNbErr++;
3441         }
3442       }
3443     }
3444   }
3445
3446   theDI << "Total " << aNbErr << " deviations detected";
3447   return 0;
3448 }
3449
3450 void QABugs::Commands_20(Draw_Interpretor& theCommands) {
3451   const char *group = "QABugs";
3452
3453   theCommands.Add ("OCC26675_1", "OCC26675_1 result", __FILE__, SurfaceGenOCC26675_1, group);
3454   theCommands.Add ("OCC24836", "OCC24836", __FILE__, OCC24836, group);
3455   theCommands.Add("OCC27021", "OCC27021", __FILE__, OCC27021, group);
3456   theCommands.Add("OCC27235", "OCC27235", __FILE__, OCC27235, group);
3457   theCommands.Add("OCC26930", "OCC26930", __FILE__, OCC26930, group);
3458   theCommands.Add("OCC27466", "OCC27466", __FILE__, OCC27466, group);
3459   theCommands.Add ("OCC26747_1", "OCC26747_1 result", __FILE__, OCC26747_1, group);
3460   theCommands.Add ("OCC26747_2", "OCC26747_2 result", __FILE__, OCC26747_2, group);
3461   theCommands.Add ("OCC26747_3", "OCC26747_3 result", __FILE__, OCC26747_3, group);
3462   theCommands.Add ("OCC27357", "OCC27357", __FILE__, OCC27357, group);
3463   theCommands.Add("OCC26270", "OCC26270 shape result", __FILE__, OCC26270, group);
3464   theCommands.Add ("OCC27552", "OCC27552", __FILE__, OCC27552, group); 
3465   theCommands.Add("OCC27875", "OCC27875 curve", __FILE__, OCC27875, group);
3466   theCommands.Add("OCC28389", "OCC28389", __FILE__, OCC28389, group);
3467   theCommands.Add("OCC28594", "OCC28594", __FILE__, OCC28594, group);
3468   theCommands.Add("OCC28784", "OCC28784 result shape", __FILE__, OCC28784, group);
3469   theCommands.Add("OCC28829", "OCC28829: perform invalid FPE operation", __FILE__, OCC28829, group);
3470   theCommands.Add("OCC28887",
3471                   "OCC28887 filePath result"
3472                   "\n\t\t: Check interface for reading BRep from memory.",
3473                   __FILE__, OCC28887, group);
3474   theCommands.Add("OCC28131", "OCC28131 name: creates face problematic for offset", __FILE__, OCC28131, group);
3475   theCommands.Add("OCC29289", "OCC29289 : searching trigonometric root by Newton iterations", __FILE__, OCC29289, group);
3476   theCommands.Add ("OCC29371", "OCC29371", __FILE__, OCC29371, group);
3477   theCommands.Add("OCC29430", "OCC29430 <result wire> "
3478                               "<result first point> <result last point>",
3479                               __FILE__, OCC29430, group);
3480   theCommands.Add("OCC29531", "OCC29531 <step file name>", __FILE__, OCC29531, group);
3481
3482   theCommands.Add ("OCC29064", "OCC29064: test memory usage by copying empty maps", __FILE__, OCC29064, group);
3483   theCommands.Add ("OCC29925", "OCC29925: check safety of character classification functions", __FILE__, OCC29925, group);
3484   theCommands.Add("OCC29807", "OCC29807 surface1 surface2 u1 v1 u2 v2", __FILE__, OCC29807, group);
3485   theCommands.Add("OCC29311", "OCC29311 shape counter nbiter: check performance of OBB calculation", __FILE__, OCC29311, group);
3486   theCommands.Add("OCC30391", "OCC30391 result face LenBeforeUfirst LenAfterUlast LenBeforeVfirst LenAfterVlast", __FILE__, OCC30391, group);
3487   theCommands.Add("OCC30435", "OCC30435 result curve inverse nbit", __FILE__, OCC30435, group);
3488   theCommands.Add("OCC30990", "OCC30990 surface", __FILE__, OCC30990, group);
3489
3490   theCommands.Add("QAStartsWith",
3491                   "QAStartsWith string startstring",
3492                   __FILE__, QAStartsWith, group);
3493
3494   theCommands.Add("QAEndsWith",
3495                   "QAEndsWith string endstring",
3496                   __FILE__, QAEndsWith, group);
3497
3498   theCommands.Add ("OCC30708_1", "Tests initialization of the TopoDS_Iterator with null shape",
3499                    __FILE__, OCC30708_1, group);
3500
3501   theCommands.Add ("OCC30708_2", "Tests initialization of the BRepLib_MakeWire with null shape",
3502                    __FILE__, OCC30708_2, group);
3503
3504   theCommands.Add ("OCC30869", "Prints bounding points of the given wire and tangent vectors at these points.\n"
3505                                "Usage: OCC30869 wire",
3506                    __FILE__, OCC30869, group);
3507
3508   theCommands.Add ("OCC30880", "Looks for extrema between edge and face.\n"
3509                                "Usage: OCC30880 edge face",
3510                    __FILE__, OCC30880, group);
3511
3512   theCommands.Add("OCC30704", "OCC30704", __FILE__, OCC30704, group);