1 // Created on: 2004-05-20
2 // Created by: Sergey ZARITCHNY
3 // Copyright (c) 2004-2014 OPEN CASCADE SAS
5 // This file is part of Open CASCADE Technology software library.
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.
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
17 #include <BinTools.hxx>
18 #include <BinTools_CurveSet.hxx>
19 #include <BinTools_SurfaceSet.hxx>
20 #include <Geom_BezierSurface.hxx>
21 #include <Geom_BSplineSurface.hxx>
22 #include <Geom_ConicalSurface.hxx>
23 #include <Geom_CylindricalSurface.hxx>
24 #include <Geom_OffsetSurface.hxx>
25 #include <Geom_Plane.hxx>
26 #include <Geom_RectangularTrimmedSurface.hxx>
27 #include <Geom_SphericalSurface.hxx>
28 #include <Geom_Surface.hxx>
29 #include <Geom_SurfaceOfLinearExtrusion.hxx>
30 #include <Geom_SurfaceOfRevolution.hxx>
31 #include <Geom_ToroidalSurface.hxx>
32 #include <gp_Cone.hxx>
33 #include <gp_Cylinder.hxx>
35 #include <gp_Sphere.hxx>
36 #include <gp_Torus.hxx>
37 #include <Standard_ErrorHandler.hxx>
38 #include <Standard_Failure.hxx>
39 #include <Standard_OutOfRange.hxx>
40 #include <TColgp_Array1OfPnt.hxx>
41 #include <TColgp_Array2OfPnt.hxx>
42 #include <TColStd_Array1OfInteger.hxx>
43 #include <TColStd_Array1OfReal.hxx>
44 #include <TColStd_Array2OfReal.hxx>
51 #define LINEAREXTRUSION 6
55 #define RECTANGULAR 10
58 //=======================================================================
59 //function : BinTools_SurfaceSet
61 //=======================================================================
63 BinTools_SurfaceSet::BinTools_SurfaceSet()
68 //=======================================================================
71 //=======================================================================
73 void BinTools_SurfaceSet::Clear()
79 //=======================================================================
82 //=======================================================================
84 Standard_Integer BinTools_SurfaceSet::Add(const Handle(Geom_Surface)& S)
90 //=======================================================================
93 //=======================================================================
95 Handle(Geom_Surface) BinTools_SurfaceSet::Surface
96 (const Standard_Integer I)const
98 return Handle(Geom_Surface)::DownCast(myMap(I));
102 //=======================================================================
105 //=======================================================================
107 Standard_Integer BinTools_SurfaceSet::Index
108 (const Handle(Geom_Surface)& S)const
110 return myMap.FindIndex(S);
113 //=======================================================================
114 //function : operator << (gp_Pnt)
116 //=======================================================================
118 static Standard_OStream& operator <<(Standard_OStream& OS, const gp_Pnt P)
120 BinTools::PutReal(OS, P.X());
121 BinTools::PutReal(OS, P.Y());
122 BinTools::PutReal(OS, P.Z());
126 //=======================================================================
127 //function : operator << (gp_Dir)
129 //=======================================================================
131 static Standard_OStream& operator <<(Standard_OStream& OS, const gp_Dir D)
133 BinTools::PutReal(OS, D.X());
134 BinTools::PutReal(OS, D.Y());
135 BinTools::PutReal(OS, D.Z());
140 //=======================================================================
141 //function : operator <<(Geom_Plane)
143 //=======================================================================
145 static Standard_OStream& operator <<(Standard_OStream& OS, const Handle(Geom_Plane)& S)
147 OS << (Standard_Byte)PLANE;
149 OS << P.Location();//Pnt
150 OS << P.Axis().Direction();
151 OS << P.XAxis().Direction();
152 OS << P.YAxis().Direction();
157 //=======================================================================
158 //function : operator <<(Geom_CylindricalSurface)
160 //=======================================================================
162 static Standard_OStream& operator <<(Standard_OStream& OS, const Handle(Geom_CylindricalSurface)& S)
164 OS << (Standard_Byte)CYLINDER;
165 gp_Cylinder P = S->Cylinder();
166 OS << P.Location();//Pnt
167 OS << P.Axis().Direction();
168 OS << P.XAxis().Direction();
169 OS << P.YAxis().Direction();
170 BinTools::PutReal(OS, P.Radius());
175 //=======================================================================
176 //function : operator <<(Geom_ConicalSurface)
178 //=======================================================================
180 static Standard_OStream& operator <<(Standard_OStream& OS, const Handle(Geom_ConicalSurface)& S)
182 OS << (Standard_Byte)CONE;
183 gp_Cone P = S->Cone();
184 OS << P.Location();//Pnt
185 OS << P.Axis().Direction();
186 OS << P.XAxis().Direction();
187 OS << P.YAxis().Direction();
188 BinTools::PutReal(OS, P.RefRadius());
189 BinTools::PutReal(OS, P.SemiAngle());
194 //=======================================================================
195 //function : operator <<(Geom_SphericalSurface)
197 //=======================================================================
199 static Standard_OStream& operator <<(Standard_OStream& OS, const Handle(Geom_SphericalSurface)& S)
201 OS << (Standard_Byte)SPHERE;
202 gp_Sphere P = S->Sphere();
203 OS << P.Location();//Pnt
204 OS << P.Position().Axis().Direction();
205 OS << P.XAxis().Direction();
206 OS << P.YAxis().Direction();
207 BinTools::PutReal(OS, P.Radius());
212 //=======================================================================
213 //function : operator <<(Geom_ToroidalSurface)
215 //=======================================================================
217 static Standard_OStream& operator <<(Standard_OStream& OS, const Handle(Geom_ToroidalSurface)& S)
219 OS << (Standard_Byte)TORUS;
220 gp_Torus P = S->Torus();
221 OS << P.Location();//Pnt
222 OS << P.Axis().Direction();
223 OS << P.XAxis().Direction();
224 OS << P.YAxis().Direction();
225 BinTools::PutReal(OS, P.MajorRadius());
226 BinTools::PutReal(OS, P.MinorRadius());
231 //=======================================================================
232 //function : operator <<(Geom_SurfaceOfLinearExtrusion)
234 //=======================================================================
236 static Standard_OStream& operator <<(Standard_OStream& OS, const Handle(Geom_SurfaceOfLinearExtrusion)& S)
238 OS << (Standard_Byte)LINEAREXTRUSION;
239 OS << S->Direction();
240 BinTools_CurveSet::WriteCurve(S->BasisCurve(),OS);
245 //=======================================================================
246 //function : operator <<(Geom_SurfaceOfRevolution)
248 //=======================================================================
250 static Standard_OStream& operator <<(Standard_OStream& OS, const Handle(Geom_SurfaceOfRevolution)& S)
252 OS << (Standard_Byte)REVOLUTION;
254 OS << S->Direction();
255 BinTools_CurveSet::WriteCurve(S->BasisCurve(),OS);
260 //=======================================================================
261 //function : operator <<(Geom_BezierSurface)
263 //=======================================================================
265 static Standard_OStream& operator <<(Standard_OStream& OS, const Handle(Geom_BezierSurface)& S)
267 OS << (Standard_Byte)BEZIER;
268 Standard_Boolean urational = S->IsURational() ? 1:0;
269 Standard_Boolean vrational = S->IsVRational() ? 1:0;
270 BinTools::PutBool(OS, urational); //rational
271 BinTools::PutBool(OS, vrational);
272 // cout << "Bezier Surface:"<< endl;
273 // cout << "\turational = "<<urational<<" vrational = " <<vrational<<endl;
276 Standard_Integer i,j,udegree,vdegree;
277 udegree = S->UDegree();
278 vdegree = S->VDegree();
279 BinTools::PutExtChar(OS, (Standard_ExtCharacter)udegree);
280 BinTools::PutExtChar(OS, (Standard_ExtCharacter)vdegree);
281 for (i = 1; i <= udegree+1; i++) {
282 for (j = 1; j <= vdegree+1; j++) {
283 OS << S->Pole(i,j); //Pnt
284 if (urational || vrational) {
285 BinTools::PutReal(OS, S->Weight(i,j));//Real
293 //=======================================================================
294 //function : operator <<(Geom_BSplineSurface)
296 //=======================================================================
298 static Standard_OStream& operator <<(Standard_OStream& OS, const Handle(Geom_BSplineSurface)& S)
300 OS << (Standard_Byte)BSPLINE;
301 Standard_Boolean urational = S->IsURational() ? 1:0;
302 Standard_Boolean vrational = S->IsVRational() ? 1:0;
303 Standard_Boolean uperiodic = S->IsUPeriodic() ? 1:0;
304 Standard_Boolean vperiodic = S->IsVPeriodic() ? 1:0;
305 BinTools::PutBool(OS, urational);
306 BinTools::PutBool(OS, vrational);
307 BinTools::PutBool(OS, uperiodic);
308 BinTools::PutBool(OS, vperiodic);
311 Standard_Integer i,j,udegree,vdegree,nbupoles,nbvpoles,nbuknots,nbvknots;
312 udegree = S->UDegree();
313 vdegree = S->VDegree();
314 nbupoles = S->NbUPoles();
315 nbvpoles = S->NbVPoles();
316 nbuknots = S->NbUKnots();
317 nbvknots = S->NbVKnots();
318 BinTools::PutExtChar(OS, (Standard_ExtCharacter) udegree);
319 BinTools::PutExtChar(OS, (Standard_ExtCharacter) vdegree);
320 BinTools::PutInteger(OS, nbupoles);
321 BinTools::PutInteger(OS, nbvpoles);
322 BinTools::PutInteger(OS, nbuknots);
323 BinTools::PutInteger(OS, nbvknots);
324 for (i = 1; i <= nbupoles; i++) {
325 for (j = 1; j <= nbvpoles; j++) {
326 OS << S->Pole(i,j); //Pnt
327 if (urational || vrational)
328 BinTools::PutReal(OS, S->Weight(i,j));//Real
332 for (i = 1; i <= nbuknots; i++) {
333 BinTools::PutReal(OS,S->UKnot(i));
334 BinTools::PutInteger(OS, S->UMultiplicity(i));
337 for (i = 1; i <= nbvknots; i++) {
338 BinTools::PutReal(OS,S->VKnot(i));
339 BinTools::PutInteger(OS, S->VMultiplicity(i));
345 //=======================================================================
346 //function : operator <<(Geom_RectangularTrimmedSurface)
348 //=======================================================================
350 static Standard_OStream& operator <<(Standard_OStream& OS, const Handle(Geom_RectangularTrimmedSurface)& S)
352 OS << (Standard_Byte)RECTANGULAR;
353 Standard_Real U1,U2,V1,V2;
354 S->Bounds(U1,U2,V1,V2);
355 BinTools::PutReal(OS, U1);
356 BinTools::PutReal(OS, U2);
357 BinTools::PutReal(OS, V1);
358 BinTools::PutReal(OS, V2);
359 BinTools_SurfaceSet::WriteSurface(S->BasisSurface(),OS);
364 //=======================================================================
365 //function : operator <<(Geom_OffsetSurface)
367 //=======================================================================
369 static Standard_OStream& operator <<(Standard_OStream& OS, const Handle(Geom_OffsetSurface)& S)
371 OS << (Standard_Byte)OFFSET;
372 BinTools::PutReal(OS, S->Offset());
373 BinTools_SurfaceSet::WriteSurface(S->BasisSurface(),OS);
378 //=======================================================================
379 //function : WriteSurface
381 //=======================================================================
383 void BinTools_SurfaceSet::WriteSurface(const Handle(Geom_Surface)& S,
384 Standard_OStream& OS)
386 Standard_SStream aMsg;
387 Handle(Standard_Type) TheType = S->DynamicType();
390 if ( TheType == STANDARD_TYPE(Geom_Plane)) {
391 OS << Handle(Geom_Plane)::DownCast(S);
393 else if ( TheType == STANDARD_TYPE(Geom_CylindricalSurface)) {
394 OS << Handle(Geom_CylindricalSurface)::DownCast(S);
396 else if ( TheType == STANDARD_TYPE(Geom_ConicalSurface)) {
397 OS << Handle(Geom_ConicalSurface)::DownCast(S);
399 else if ( TheType == STANDARD_TYPE(Geom_SphericalSurface)) {
400 OS << Handle(Geom_SphericalSurface)::DownCast(S);
402 else if ( TheType == STANDARD_TYPE(Geom_ToroidalSurface)) {
403 OS << Handle(Geom_ToroidalSurface)::DownCast(S);
405 else if ( TheType == STANDARD_TYPE(Geom_SurfaceOfLinearExtrusion)) {
406 OS << Handle(Geom_SurfaceOfLinearExtrusion)::DownCast(S);
408 else if ( TheType == STANDARD_TYPE(Geom_SurfaceOfRevolution)) {
409 OS << Handle(Geom_SurfaceOfRevolution)::DownCast(S);
411 else if ( TheType == STANDARD_TYPE(Geom_BezierSurface)) {
412 OS << Handle(Geom_BezierSurface)::DownCast(S);
414 else if ( TheType == STANDARD_TYPE(Geom_BSplineSurface)) {
415 OS << Handle(Geom_BSplineSurface)::DownCast(S);
417 else if ( TheType == STANDARD_TYPE(Geom_RectangularTrimmedSurface)) {
418 OS << Handle(Geom_RectangularTrimmedSurface)::DownCast(S);
420 else if ( TheType == STANDARD_TYPE(Geom_OffsetSurface)) {
421 OS << Handle(Geom_OffsetSurface)::DownCast(S);
424 aMsg <<"UNKNOWN SURFACE TYPE" <<endl;
425 Standard_Failure::Raise(aMsg);
428 catch(Standard_Failure) {
429 aMsg << "EXCEPTION in BinTools_SurfaceSet::WriteSurface(..)" << endl;
430 Handle(Standard_Failure) anExc = Standard_Failure::Caught();
431 aMsg << anExc << endl;
432 Standard_Failure::Raise(aMsg);
436 //=======================================================================
439 //=======================================================================
441 void BinTools_SurfaceSet::Write(Standard_OStream& OS)const
444 Standard_Integer i, nbsurf = myMap.Extent();
445 OS << "Surfaces "<< nbsurf << "\n";
446 for (i = 1; i <= nbsurf; i++) {
447 WriteSurface(Handle(Geom_Surface)::DownCast(myMap(i)),OS);
453 //=======================================================================
456 //=======================================================================
458 static Standard_IStream& operator>>(Standard_IStream& IS, gp_Pnt& P)
460 Standard_Real X=0.,Y=0.,Z=0.;
461 BinTools::GetReal(IS, X);
462 BinTools::GetReal(IS, Y);
463 BinTools::GetReal(IS, Z);
468 //=======================================================================
471 //=======================================================================
473 static Standard_IStream& operator>>(Standard_IStream& IS, gp_Dir& D)
475 Standard_Real X=0.,Y=0.,Z=0.;
476 BinTools::GetReal(IS, X);
477 BinTools::GetReal(IS, Y);
478 BinTools::GetReal(IS, Z);
483 //=======================================================================
486 //=======================================================================
488 static Standard_IStream& operator>>(Standard_IStream& IS, gp_Ax3& A3)
491 gp_Dir A(1.,0.,0.),AX(1.,0.,0.),AY(1.,0.,0.);
492 IS >> P >> A >> AX >> AY;
494 if (AY.DotCross(A,AX) < 0)
501 //=======================================================================
502 //function : operator>>
504 //=======================================================================
506 static Standard_IStream& operator>>(Standard_IStream& IS,
507 Handle(Geom_Plane)& S)
511 S = new Geom_Plane(A);
515 //=======================================================================
516 //function : operator>>
518 //=======================================================================
520 static Standard_IStream& operator>>(Standard_IStream& IS,
521 Handle(Geom_CylindricalSurface)& S)
526 BinTools::GetReal(IS, R);
527 S = new Geom_CylindricalSurface(A,R);
531 //=======================================================================
532 //function : operator>>
534 //=======================================================================
536 static Standard_IStream& operator>>(Standard_IStream& IS,
537 Handle(Geom_ConicalSurface)& S)
540 Standard_Real R=0.,Ang=0.;
542 BinTools::GetReal(IS, R);
543 BinTools::GetReal(IS, Ang);
544 S = new Geom_ConicalSurface(A,Ang,R);
548 //=======================================================================
549 //function : operator>>
551 //=======================================================================
553 static Standard_IStream& operator>>(Standard_IStream& IS,
554 Handle(Geom_SphericalSurface)& S)
559 BinTools::GetReal(IS, R);
560 S = new Geom_SphericalSurface(A,R);
564 //=======================================================================
565 //function : operator>>
567 //=======================================================================
569 static Standard_IStream& operator>>(Standard_IStream& IS,
570 Handle(Geom_ToroidalSurface)& S)
573 Standard_Real R1=0.,R2=0.;
575 BinTools::GetReal(IS, R1);
576 BinTools::GetReal(IS, R2);
577 S = new Geom_ToroidalSurface(A,R1,R2);
581 //=======================================================================
582 //function : operator>>
584 //=======================================================================
586 static Standard_IStream& operator>>(Standard_IStream& IS,
587 Handle(Geom_SurfaceOfLinearExtrusion)& S)
590 Handle(Geom_Curve) C;
592 BinTools_CurveSet::ReadCurve(IS,C);
593 S = new Geom_SurfaceOfLinearExtrusion(C,D);
597 //=======================================================================
598 //function : operator>>
600 //=======================================================================
602 static Standard_IStream& operator>>(Standard_IStream& IS,
603 Handle(Geom_SurfaceOfRevolution)& S)
607 Handle(Geom_Curve) C;
609 BinTools_CurveSet::ReadCurve(IS, C);
610 S = new Geom_SurfaceOfRevolution(C,gp_Ax1(P,D));
614 //=======================================================================
615 //function : operator>>
617 //=======================================================================
619 static Standard_IStream& operator>>(Standard_IStream& IS,
620 Handle(Geom_BezierSurface)& S)
622 // cout << "BezierSurface:" <<endl;
623 Standard_Boolean urational=Standard_False, vrational=Standard_False;
624 BinTools::GetBool(IS, urational);
625 BinTools::GetBool(IS, vrational);
627 // cout << "\turational = " << urational << " vrational = " << vrational<<endl;
628 Standard_Integer udegree=0, vdegree=0;
629 Standard_ExtCharacter aVal='\0';
630 BinTools::GetExtChar(IS, aVal);
632 udegree = (Standard_Integer)aVal;
633 BinTools::GetExtChar(IS, aVal);
634 vdegree = (Standard_Integer)aVal;
635 // cout << "\ttudegree = " << udegree << ", vdegree = " << vdegree << endl;
637 TColgp_Array2OfPnt poles(1,udegree+1,1,vdegree+1);
638 TColStd_Array2OfReal weights(1,udegree+1,1,vdegree+1);
640 Standard_Integer i,j;
641 for (i = 1; i <= udegree+1; i++) {
642 for (j = 1; j <= vdegree+1; j++) {
643 IS >> poles(i,j);//Pnt
644 // cout <<"Pole X = " <<poles(i,j).X()<< " Y = " <<poles(i,j).Y()<< " Z = " << poles(i,j).Z()<<endl;
645 if (urational || vrational)
646 BinTools::GetReal(IS, weights(i,j));
650 if (urational || vrational)
651 S = new Geom_BezierSurface(poles,weights);
653 S = new Geom_BezierSurface(poles);
657 //=======================================================================
658 //function : operator>>
660 //=======================================================================
662 static Standard_IStream& operator>>(Standard_IStream& IS,
663 Handle(Geom_BSplineSurface)& S)
665 Standard_Boolean urational=Standard_False, vrational=Standard_False,
666 uperiodic=Standard_False, vperiodic=Standard_False;
667 BinTools::GetBool(IS, urational);
668 BinTools::GetBool(IS, vrational);
669 BinTools::GetBool(IS, uperiodic);
670 BinTools::GetBool(IS, vperiodic);
672 Standard_Integer udegree=0, vdegree=0,nbupoles=0,nbvpoles=0,nbuknots=0,nbvknots=0;
673 Standard_ExtCharacter aVal='\0';
674 BinTools::GetExtChar(IS, aVal);
675 udegree = (Standard_Integer)aVal;
676 BinTools::GetExtChar(IS, aVal);
677 vdegree = (Standard_Integer)aVal;
678 BinTools::GetInteger(IS, nbupoles);
679 BinTools::GetInteger(IS, nbvpoles);
680 BinTools::GetInteger(IS, nbuknots);
681 BinTools::GetInteger(IS, nbvknots);
683 TColgp_Array2OfPnt poles(1,nbupoles,1,nbvpoles);
684 TColStd_Array2OfReal weights(1,nbupoles,1,nbvpoles);
686 Standard_Integer i,j;
687 for (i = 1; i <= nbupoles; i++) {
688 for (j = 1; j <= nbvpoles; j++) {
689 IS >> poles(i,j);//Pnt
690 if (urational || vrational)
691 BinTools::GetReal(IS, weights(i,j));
695 TColStd_Array1OfReal uknots(1,nbuknots);
696 TColStd_Array1OfInteger umults(1,nbuknots);
697 for (i = 1; i <= nbuknots; i++) {
698 BinTools::GetReal(IS, uknots(i));
699 BinTools::GetInteger(IS, umults(i));
702 TColStd_Array1OfReal vknots(1,nbvknots);
703 TColStd_Array1OfInteger vmults(1,nbvknots);
704 for (i = 1; i <= nbvknots; i++) {
705 BinTools::GetReal(IS, vknots(i));
706 BinTools::GetInteger(IS, vmults(i));
709 if (urational || vrational)
710 S = new Geom_BSplineSurface(poles,weights,uknots,vknots,umults,vmults,
711 udegree,vdegree,uperiodic,vperiodic);
713 S = new Geom_BSplineSurface(poles,uknots,vknots,umults,vmults,
714 udegree,vdegree,uperiodic,vperiodic);
718 //=======================================================================
719 //function : operator>>
721 //=======================================================================
723 static Standard_IStream& operator>>(Standard_IStream& IS,
724 Handle(Geom_RectangularTrimmedSurface)& S)
726 Standard_Real U1=0.,U2=0.,V1=0.,V2=0.;
727 BinTools::GetReal(IS, U1);
728 BinTools::GetReal(IS, U2);
729 BinTools::GetReal(IS, V1);
730 BinTools::GetReal(IS, V2);
731 Handle(Geom_Surface) BS;
732 BinTools_SurfaceSet::ReadSurface(IS, BS);
733 S = new Geom_RectangularTrimmedSurface(BS,U1,U2,V1,V2);
737 //=======================================================================
738 //function : operator>>
740 //=======================================================================
742 static Standard_IStream& operator>>(Standard_IStream& IS,
743 Handle(Geom_OffsetSurface)& S)
746 BinTools::GetReal(IS, O);
747 Handle(Geom_Surface) BS;
748 BinTools_SurfaceSet::ReadSurface(IS, BS);
749 S = new Geom_OffsetSurface(BS,O);
754 //=======================================================================
755 //function : ReadSurface
757 //=======================================================================
759 Standard_IStream& BinTools_SurfaceSet::ReadSurface(Standard_IStream& IS,
760 Handle(Geom_Surface)& S)
762 Standard_SStream aMsg;
765 const Standard_Byte stype = (Standard_Byte) IS.get();
770 Handle(Geom_Plane) SS;
778 Handle(Geom_CylindricalSurface) SS;
786 Handle(Geom_ConicalSurface) SS;
794 Handle(Geom_SphericalSurface) SS;
802 Handle(Geom_ToroidalSurface) SS;
808 case LINEAREXTRUSION :
810 Handle(Geom_SurfaceOfLinearExtrusion) SS;
818 Handle(Geom_SurfaceOfRevolution) SS;
826 Handle(Geom_BezierSurface) SS;
834 Handle(Geom_BSplineSurface) SS;
842 Handle(Geom_RectangularTrimmedSurface) SS;
850 Handle(Geom_OffsetSurface) SS;
859 aMsg << "UNKNOWN SURFACE TYPE" << endl;
860 Standard_Failure::Raise(aMsg);
865 catch(Standard_Failure) {
867 aMsg << "EXCEPTION in BinTools_SurfaceSet::ReadSurface(..)" << endl;
868 Handle(Standard_Failure) anExc = Standard_Failure::Caught();
869 aMsg << anExc << endl;
870 Standard_Failure::Raise(aMsg);
875 //=======================================================================
878 //=======================================================================
880 void BinTools_SurfaceSet::Read(Standard_IStream& IS)
884 if (IS.fail() || strcmp(buffer,"Surfaces")) {
885 Standard_SStream aMsg;
886 aMsg << "BinTools_SurfaceSet::Read: Not a surface table"<<endl;
888 cout <<"SurfaceSet buffer: " << buffer << endl;
890 Standard_Failure::Raise(aMsg);
894 Handle(Geom_Surface) S;
895 Standard_Integer i, nbsurf;
897 IS.get ();//remove <lf>
898 for (i = 1; i <= nbsurf; i++) {
899 BinTools_SurfaceSet::ReadSurface(IS,S);