0025748: Parallel version of progress indicator
[occt.git] / src / TopTools / TopTools_ShapeSet.cxx
1 // Created on: 1993-07-02
2 // Created by: Remi LEQUETTE
3 // Copyright (c) 1993-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17 // Modified:    02 Nov 2000: BUC60769. JMB, PTV.  In order to be able to read BRep 
18 //              is run, we need the following modifications.
19 //              On Unix platforms:
20 //              ------------------
21 //                In method Read(Standard_IStream &IS), during the version 
22 //                authentification we cut last '\r' in the line (which will
23 //                be present if file is in DOS coding)
24
25 #include <Message_ProgressScope.hxx>
26 #include <TCollection_AsciiString.hxx>
27 #include <TopoDS_Iterator.hxx>
28 #include <TopoDS_Shape.hxx>
29 #include <TopTools_LocationSet.hxx>
30 #include <TopTools_ShapeSet.hxx>
31
32 #include <locale.h>
33 #include <string.h>
34 static const char* Version  = "CASCADE Topology V1, (c) Matra-Datavision";
35 static const char* Version2 = "CASCADE Topology V2, (c) Matra-Datavision";
36
37 //=======================================================================
38 //function : TopTools_ShapeSet
39 //purpose  : 
40 //=======================================================================
41
42 TopTools_ShapeSet::TopTools_ShapeSet() : myFormatNb(1)
43 {
44 }
45
46 TopTools_ShapeSet::~TopTools_ShapeSet()
47 {}
48
49 //=======================================================================
50 //function : SetFormatNb
51 //purpose  : 
52 //=======================================================================
53 void TopTools_ShapeSet::SetFormatNb(const Standard_Integer theFormatNb)
54 {
55   myFormatNb = theFormatNb;
56 }
57
58 //=======================================================================
59 //function : FormatNb
60 //purpose  : 
61 //=======================================================================
62 Standard_Integer TopTools_ShapeSet::FormatNb() const
63 {
64   return myFormatNb;
65 }
66
67 //=======================================================================
68 //function : Clear
69 //purpose  : 
70 //=======================================================================
71
72 void  TopTools_ShapeSet::Clear()
73 {
74   myShapes.Clear();
75   myLocations.Clear();
76 }
77
78
79 //=======================================================================
80 //function : Add
81 //purpose  : 
82 //=======================================================================
83
84 Standard_Integer  TopTools_ShapeSet::Add(const TopoDS_Shape& S)
85 {
86   if (S.IsNull()) return 0;
87   myLocations.Add(S.Location());
88   TopoDS_Shape S2 = S;
89   S2.Location(TopLoc_Location());
90   Standard_Integer index = myShapes.FindIndex(S2);
91   if (index == 0) {
92     AddGeometry(S2);
93
94     for (TopoDS_Iterator its(S2,Standard_False,Standard_False);
95          its.More(); its.Next())
96       Add(its.Value());
97     index = myShapes.Add(S2);
98   }
99   return index;
100 }
101
102
103 //=======================================================================
104 //function : Shape
105 //purpose  : 
106 //=======================================================================
107
108 const TopoDS_Shape&  TopTools_ShapeSet::Shape(const Standard_Integer I)const 
109 {
110   return myShapes(I);
111 }
112
113 //=======================================================================
114 //function : Index
115 //purpose  : 
116 //=======================================================================
117
118 Standard_Integer TopTools_ShapeSet::Index(const TopoDS_Shape& S) const
119 {
120   return myShapes.FindIndex(S);
121 }
122
123 //=======================================================================
124 //function : Locations
125 //purpose  : 
126 //=======================================================================
127
128 const TopTools_LocationSet&  TopTools_ShapeSet::Locations()const 
129 {
130   return myLocations;
131 }
132
133
134 //=======================================================================
135 //function : ChangeLocations
136 //purpose  : 
137 //=======================================================================
138
139 TopTools_LocationSet&  TopTools_ShapeSet::ChangeLocations()
140 {
141   return myLocations;
142 }
143
144 //=======================================================================
145 //function : PrintShapeEnum
146 //purpose  : 
147 //=======================================================================
148
149 static void PrintShapeEnum(const TopAbs_ShapeEnum T, 
150                            Standard_OStream& S, 
151                            Standard_Boolean C)
152 {
153   switch(T) {
154     
155   case TopAbs_VERTEX :
156     if (C) S << "Ve"; else S << "VERTEX   ";
157     break;
158     
159   case TopAbs_EDGE :
160     if (C) S << "Ed"; else S << "EDGE     ";
161     break;
162     
163   case TopAbs_WIRE :
164     if (C) S << "Wi"; else S << "WIRE     ";
165     break;
166     
167   case TopAbs_FACE :
168     if (C) S << "Fa"; else S << "FACE     ";
169     break;
170     
171   case TopAbs_SHELL :
172     if (C) S << "Sh"; else S << "SHELL    ";
173     break;
174     
175   case TopAbs_SOLID :
176     if (C) S << "So"; else S << "SOLID    ";
177     break;
178     
179   case TopAbs_COMPSOLID :
180     if (C) S << "CS"; else S << "COMPSOLID";
181     break;
182     
183   case TopAbs_COMPOUND :
184     if (C) S << "Co"; else S << "COMPOUND ";
185     break;
186     
187   case TopAbs_SHAPE :
188     if (C) S << "Sp"; else S << "SHAPE";
189     break;
190   }
191 }
192
193 //=======================================================================
194 //function : PrintOrientation
195 //purpose  : 
196 //=======================================================================
197
198 static void PrintOrientation(const TopAbs_Orientation O, 
199                              Standard_OStream& S, 
200                              Standard_Boolean C)
201 {
202   switch(O) {
203     
204   case TopAbs_FORWARD :
205     if (C) S << "+"; else S << "FORWARD";
206     break;
207     
208   case TopAbs_REVERSED :
209     if (C) S << "-"; else S << "REVERSED";
210     break;
211     
212   case TopAbs_INTERNAL :
213     if (C) S << "i"; else S << "INTERNAL";
214     break;
215     
216   case TopAbs_EXTERNAL :
217     if (C) S << "e"; else S << "EXTERNAL";
218     break;
219   }
220 }
221
222 //=======================================================================
223 //function : DumpExtent 
224 //purpose  : Dump number of shapes.
225 //=======================================================================
226
227 Standard_OStream& TopTools_ShapeSet::DumpExtent(Standard_OStream& OS)const 
228 {
229
230  Standard_Integer nbVERTEX = 0;
231  Standard_Integer nbEDGE = 0;
232  Standard_Integer nbWIRE = 0;
233  Standard_Integer nbFACE = 0;
234  Standard_Integer nbSHELL = 0;
235  Standard_Integer nbSOLID = 0;
236  Standard_Integer nbCOMPSOLID = 0;
237  Standard_Integer nbCOMPOUND = 0;
238  Standard_Integer nbSHAPE = myShapes.Extent();
239
240  for (Standard_Integer i = 1; i <= nbSHAPE; i++) {
241
242    switch(myShapes(i).ShapeType()) {
243     
244    case TopAbs_VERTEX :
245      nbVERTEX++;
246      break;
247      
248    case TopAbs_EDGE :
249      nbEDGE++;
250      break;
251      
252    case TopAbs_WIRE :
253      nbWIRE++;
254      break;
255      
256    case TopAbs_FACE :
257      nbFACE++;
258      break;
259      
260    case TopAbs_SHELL :
261      nbSHELL++;
262      break;
263      
264    case TopAbs_SOLID :
265      nbSOLID++;
266      break;
267      
268    case TopAbs_COMPSOLID :
269      nbCOMPSOLID++;
270      break;
271      
272    case TopAbs_COMPOUND :
273      nbCOMPOUND++;
274      break;
275      
276    case TopAbs_SHAPE :
277      break;
278    }
279  }
280
281  
282  OS << " VERTEX    : " << nbVERTEX << "\n";
283  OS << " EDGE      : " << nbEDGE << "\n";
284  OS << " WIRE      : " << nbWIRE << "\n";
285  OS << " FACE      : " << nbFACE << "\n";
286  OS << " SHELL     : " << nbSHELL << "\n";
287  OS << " SOLID     : " << nbSOLID << "\n";
288  OS << " COMPSOLID : " << nbCOMPSOLID << "\n";
289  OS << " COMPOUND  : " << nbCOMPOUND << "\n";
290  OS << " SHAPE     : " << nbSHAPE << "\n";
291
292  return OS;
293 }
294
295 //=======================================================================
296 //function : DumpExtent 
297 //purpose  : Dump number of shapes.
298 //=======================================================================
299
300 void TopTools_ShapeSet::DumpExtent(TCollection_AsciiString& S)const 
301 {
302
303  Standard_Integer nbVERTEX = 0;
304  Standard_Integer nbEDGE = 0;
305  Standard_Integer nbWIRE = 0;
306  Standard_Integer nbFACE = 0;
307  Standard_Integer nbSHELL = 0;
308  Standard_Integer nbSOLID = 0;
309  Standard_Integer nbCOMPSOLID = 0;
310  Standard_Integer nbCOMPOUND = 0;
311  Standard_Integer nbSHAPE = myShapes.Extent();
312
313  for (Standard_Integer i = 1; i <= nbSHAPE; i++) {
314
315    switch(myShapes(i).ShapeType()) {
316     
317    case TopAbs_VERTEX :
318      nbVERTEX++;
319      break;
320      
321    case TopAbs_EDGE :
322      nbEDGE++;
323      break;
324      
325    case TopAbs_WIRE :
326      nbWIRE++;
327      break;
328      
329    case TopAbs_FACE :
330      nbFACE++;
331      break;
332      
333    case TopAbs_SHELL :
334      nbSHELL++;
335      break;
336      
337    case TopAbs_SOLID :
338      nbSOLID++;
339      break;
340      
341    case TopAbs_COMPSOLID :
342      nbCOMPSOLID++;
343      break;
344      
345    case TopAbs_COMPOUND :
346      nbCOMPOUND++;
347      break;
348      
349    case TopAbs_SHAPE :
350      break;
351    }
352  }
353
354  S = S + " VERTEX    : " + TCollection_AsciiString(nbVERTEX) + "\n";
355  S = S + " EDGE      : " + TCollection_AsciiString(nbEDGE) + "\n";
356  S = S + " WIRE      : " + TCollection_AsciiString(nbWIRE) + "\n";
357  S = S + " FACE      : " + TCollection_AsciiString(nbFACE) + "\n";
358  S = S + " SHELL     : " + TCollection_AsciiString(nbSHELL) + "\n";
359  S = S + " SOLID     : " + TCollection_AsciiString(nbSOLID) + "\n";
360  S = S + " COMPSOLID : " + TCollection_AsciiString(nbCOMPSOLID) + "\n";
361  S = S + " COMPOUND  : " + TCollection_AsciiString(nbCOMPOUND) + "\n";
362  S = S + " SHAPE     : " + TCollection_AsciiString(nbSHAPE) + "\n";
363 }
364
365
366 //=======================================================================
367 //function : Dump
368 //purpose  : 
369 //=======================================================================
370
371 void  TopTools_ShapeSet::Dump(Standard_OStream& OS)const 
372 {
373   //-----------------------------------------
374   // dump the shapes
375   //-----------------------------------------
376
377   Standard_Integer i, nbShapes = myShapes.Extent();
378   
379   OS << "\nDump of " << nbShapes << " TShapes";
380   OS << "\n\n-----------------\n\n";
381
382   OS << "Flags : Free, Modified, Checked, Orientable, Closed, Infinite, Convex, Locked";
383   OS << "\n\n";
384   
385   for (i = nbShapes; i >= 1; i--) {
386     
387     const TopoDS_Shape& S = myShapes(i);
388     OS << "TShape # " << nbShapes - i + 1 << " : ";
389     
390     // Type and flags
391
392     PrintShapeEnum(S.ShapeType(),OS,Standard_False);
393     OS << " ";
394     OS << (S.Free()       ? 1 : 0);
395     OS << (S.Modified()   ? 1 : 0);
396     OS << (S.Checked()    ? 1 : 0);
397     OS << (S.Orientable() ? 1 : 0);
398     OS << (S.Closed()     ? 1 : 0);
399     OS << (S.Infinite()   ? 1 : 0);
400     OS << (S.Convex()     ? 1 : 0);
401     OS << (S.Locked()     ? 1 : 0);
402     OS << " " << (void*) &(*S.TShape()) <<"\n";
403
404     // sub-shapes
405     OS << "    ";
406     TopoDS_Iterator its(S,Standard_False,Standard_False);
407     while (its.More()) {
408       const TopoDS_Shape& sub = its.Value();
409       PrintOrientation(sub.Orientation(),OS,Standard_True);
410       OS<<nbShapes - myShapes.FindIndex(sub.Located(TopLoc_Location())) + 1;
411       if (!sub.Location().IsIdentity()) 
412         OS << "(L" << myLocations.Index(sub.Location()) << ")";
413       OS << " ";
414       its.Next();
415     }
416     OS << "\n";
417
418     // Geometry
419
420     DumpGeometry(S,OS);
421   }
422     
423   
424   //-----------------------------------------
425   // dump the geometry
426   //-----------------------------------------
427
428   DumpGeometry(OS);
429
430   //-----------------------------------------
431   // dump the locations
432   //-----------------------------------------
433
434   myLocations.Dump(OS);
435
436   OS << "\n";
437 }
438
439
440 //=======================================================================
441 //function : Write
442 //purpose  : 
443 //=======================================================================
444
445 void  TopTools_ShapeSet::Write(Standard_OStream& OS, const Message_ProgressRange& theProgress)
446 {
447   // always use C locale for writing shapes
448   std::locale anOldLocale = OS.imbue (std::locale::classic());
449
450   // use 15-digit precision
451   std::streamsize prec = OS.precision(15);
452
453   // write the copyright
454   if (myFormatNb == 2)
455     OS << "\n" << Version2 << "\n";
456   else
457     OS << "\n" << Version << "\n";
458
459   //-----------------------------------------
460   // write the locations
461   //-----------------------------------------
462
463   Message_ProgressScope aPS(theProgress, "Writing", 100);
464
465   myLocations.Write(OS, aPS.Next(10));
466
467   if (aPS.UserBreak()) {
468     OS << "Interrupted by the user\n";
469     OS.imbue (anOldLocale);
470     return;
471   }
472
473   //-----------------------------------------
474   // write the geometry
475   //-----------------------------------------
476
477   WriteGeometry(OS, aPS.Next(75));
478
479   if (aPS.UserBreak()) {
480     OS << "Interrupted by the user\n";
481     OS.imbue(anOldLocale);
482     return;
483   }
484
485   //-----------------------------------------
486   // write the shapes
487   //-----------------------------------------
488
489   Standard_Integer i, nbShapes = myShapes.Extent();
490   
491   OS << "\nTShapes " << nbShapes << "\n";
492
493   // subshapes are written first
494   Message_ProgressScope aPS1 (aPS.Next(15), "Shapes", nbShapes);
495   for (i = 1; i <= nbShapes && aPS1.More(); i++, aPS1.Next()) {
496     const TopoDS_Shape& S = myShapes(i);
497     
498     // Type
499     PrintShapeEnum(S.ShapeType(),OS,Standard_True);
500     OS << "\n";
501
502     // Geometry
503     WriteGeometry(S,OS);
504
505     // Flags
506     OS << "\n";
507     OS << (S.Free()       ? 1 : 0);
508     OS << (S.Modified()   ? 1 : 0);
509     OS << (S.Checked()    ? 1 : 0);
510     OS << (S.Orientable() ? 1 : 0);
511     OS << (S.Closed()     ? 1 : 0);
512     OS << (S.Infinite()   ? 1 : 0);
513     OS << (S.Convex()     ? 1 : 0);
514     OS << "\n";
515
516     // sub-shapes
517
518     Standard_Integer l = 0;
519     TopoDS_Iterator its(S,Standard_False,Standard_False);
520     while (its.More()) {
521       Write(its.Value(),OS);
522       l++;
523       if (l == 10) {
524         OS << "\n";
525         l = 0;
526       }
527       its.Next();
528     }
529     Write(TopoDS_Shape(),OS); // Null shape to end the list
530     OS << "\n";
531   }
532   
533   OS << "\n";
534   OS.precision(prec);
535   OS.imbue (anOldLocale);
536
537   if (aPS.UserBreak())
538       OS << "Interrupted by the user\n";
539   }
540
541 //=======================================================================
542 //function : ReadShapeEnum
543 //purpose  : 
544 //=======================================================================
545
546 static TopAbs_ShapeEnum ReadShapeEnum(Standard_IStream& IS)
547 {
548   char buffer[255];
549   IS >> buffer;
550
551   switch (buffer[0]) {
552
553   case 'V' :
554     return TopAbs_VERTEX;
555
556   case 'E' :
557     return TopAbs_EDGE;
558
559   case 'W' :
560     return TopAbs_WIRE;
561
562   case 'F' :
563     return TopAbs_FACE;
564
565   case 'S' :
566     if (buffer[1] == 'h')
567       return TopAbs_SHELL;
568     else
569       return TopAbs_SOLID;
570
571   case 'C' :
572     if (buffer[1] == 'S')
573       return TopAbs_COMPSOLID;
574     else
575       return TopAbs_COMPOUND;
576
577   }
578   return TopAbs_COMPOUND;
579 }
580
581 //=======================================================================
582 //function : Read
583 //purpose  : 
584 //=======================================================================
585
586 void  TopTools_ShapeSet::Read(Standard_IStream& IS, const Message_ProgressRange& theProgress)
587 {
588   // always use C locale for reading shapes
589   std::locale anOldLocale = IS.imbue (std::locale::classic());
590
591   Clear();
592
593   // Check the version
594   char vers[101];
595   do {
596     IS.getline(vers,100,'\n');
597     // BUC60769 PTV 18.10.2000: remove possible '\r' at the end of the line
598     //Standard_Integer lv = strlen(vers);
599     //char *pm;
600     //if(pm = strchr(vers,'\r'))
601     //  *pm ='\0';
602     
603     Standard_Size lv = strlen(vers);
604     if (lv > 0) {
605       for (lv--; lv > 0 && (vers[lv] == '\r' || vers[lv] == '\n') ;lv--) 
606         vers[lv] = '\0';
607     }
608     
609   } while ( ! IS.fail() && strcmp(vers,Version) && strcmp(vers,Version2) );
610   if (IS.fail()) {
611     std::cout << "File was not written with this version of the topology"<<std::endl;
612     IS.imbue (anOldLocale);
613     return;
614   }
615   if (strcmp(vers,Version2) == 0) SetFormatNb(2);
616   else SetFormatNb(1);
617
618   //-----------------------------------------
619   // read the locations
620   //-----------------------------------------
621
622   Message_ProgressScope aPS(theProgress, "Reading", 100);
623
624   myLocations.Read(IS, aPS.Next(10));
625
626   if (aPS.UserBreak()) {
627     std::cout << "Interrupted by the user"<<std::endl;
628     // on remet le LC_NUMERIC a la precedente valeur
629     IS.imbue (anOldLocale);
630     return;
631   }
632
633   //-----------------------------------------
634   // read the geometry
635   //-----------------------------------------
636   ReadGeometry(IS, aPS.Next(75));
637
638   if (aPS.UserBreak()) {
639     std::cout << "Interrupted by the user"<<std::endl;
640     IS.imbue(anOldLocale);
641     return;
642   }
643
644   //-----------------------------------------
645   // read the shapes
646   //-----------------------------------------
647
648   char buffer[255];
649   IS >> buffer;
650   if (strcmp(buffer,"TShapes")) {
651     std::cout << "Not a TShape table"<<std::endl;
652     // on remet le LC_NUMERIC a la precedente valeur
653     IS.imbue (anOldLocale);
654     return;
655   }
656
657   Standard_Integer i, nbShapes;
658   IS >> nbShapes;
659
660   //OCC19559
661   Message_ProgressScope aPS1 (aPS.Next(15), "Shapes", nbShapes);
662   for (i = 1; i <= nbShapes && aPS1.More(); i++, aPS1.Next() ) {
663     TopoDS_Shape S;
664     
665     //Read type and create empty shape.
666
667     TopAbs_ShapeEnum T = ReadShapeEnum(IS);
668     ReadGeometry(T,IS,S);
669     
670     // Set the flags
671     IS >> buffer;
672
673     // sub-shapes
674     TopoDS_Shape SS;
675     do {
676       Read(SS,IS,nbShapes);
677       if (!SS.IsNull())
678         AddShapes(S,SS);
679     } while(!SS.IsNull());
680
681     S.Free      (buffer[0] == '1');
682     S.Modified  (buffer[1] == '1');
683
684     if (myFormatNb == 2)
685       S.Checked   (buffer[2] == '1');
686     else
687       S.Checked   (Standard_False);     // force check at reading.. 
688
689     S.Orientable(buffer[3] == '1');
690     S.Closed    (buffer[4] == '1');
691     S.Infinite  (buffer[5] == '1');
692     S.Convex    (buffer[6] == '1');
693
694     // check
695
696     if (myFormatNb == 1)
697       Check(T,S);
698
699     myShapes.Add(S);
700   }
701
702   // on remet le LC_NUMERIC a la precedente valeur
703   IS.imbue (anOldLocale);
704
705   if (aPS.UserBreak())
706     std::cout << "Interrupted by the user" << std::endl;
707 }
708
709 //=======================================================================
710 //function : Dump
711 //purpose  : 
712 //=======================================================================
713
714 void  TopTools_ShapeSet::Dump(const TopoDS_Shape& S,
715                               Standard_OStream& OS)const 
716 {
717   if (S.IsNull()) OS << "Null shape\n";
718   OS << "Shape : " << myShapes.FindIndex(S.Located(TopLoc_Location()));
719   OS << ", ";
720   PrintOrientation(S.Orientation(),OS,Standard_False);
721   if (!S.Location().IsIdentity())
722     OS <<", location : " << myLocations.Index(S.Location());
723   OS << "\n";
724 }
725
726
727 //=======================================================================
728 //function : Write
729 //purpose  : 
730 //=======================================================================
731
732 void  TopTools_ShapeSet::Write(const TopoDS_Shape& S, 
733                                Standard_OStream& OS)const 
734 {
735   if (S.IsNull()) OS << "*";
736   else {
737     PrintOrientation(S.Orientation(),OS,Standard_True);
738     OS << myShapes.Extent() - myShapes.FindIndex(S.Located(TopLoc_Location())) + 1;
739     OS << " " << myLocations.Index(S.Location()) << " ";
740   }    
741 }
742
743 //=======================================================================
744 //function : Read
745 //purpose  : 
746 //=======================================================================
747
748 void  TopTools_ShapeSet::Read(TopoDS_Shape& S, 
749                               Standard_IStream& IS)const 
750 {
751   Read(S,IS,myShapes.Extent());
752 }
753
754 //=======================================================================
755 //function : Read
756 //purpose  : 
757 //=======================================================================
758
759 void  TopTools_ShapeSet::Read(TopoDS_Shape& S, 
760                               Standard_IStream& IS,
761                               const Standard_Integer nbshapes)const 
762 {
763   if(nbshapes < 1)
764   {
765     S = TopoDS_Shape();
766     return;
767   }
768   char buffer[255];
769   IS >> buffer;
770   if (buffer[0] == '*') 
771     S = TopoDS_Shape();
772   else {
773     S = myShapes(nbshapes - atoi(buffer+1) + 1);
774     switch (buffer[0]) {
775
776     case '+' :
777       S.Orientation(TopAbs_FORWARD);
778       break;
779
780     case '-' :
781       S.Orientation(TopAbs_REVERSED);
782       break;
783
784     case 'i' :
785       S.Orientation(TopAbs_INTERNAL);
786       break;
787
788     case 'e' :
789       S.Orientation(TopAbs_EXTERNAL);
790       break;
791     }
792
793     Standard_Integer l;
794     IS >> l;
795     S.Location(myLocations.Location(l));
796   }
797 }
798
799 //=======================================================================
800 //function : AddGeometry
801 //purpose  : 
802 //=======================================================================
803
804 void TopTools_ShapeSet::AddGeometry(const TopoDS_Shape&)
805 {
806 }
807
808 //=======================================================================
809 //function : DumpGeometry
810 //purpose  : 
811 //=======================================================================
812
813 void  TopTools_ShapeSet::DumpGeometry(Standard_OStream&) const 
814 {
815 }
816
817
818 //=======================================================================
819 //function : WriteGeometry
820 //purpose  : 
821 //=======================================================================
822
823 void  TopTools_ShapeSet::WriteGeometry(Standard_OStream&, const Message_ProgressRange&)
824 {
825 }
826
827
828 //=======================================================================
829 //function : ReadGeometry
830 //purpose  : 
831 //=======================================================================
832
833 void  TopTools_ShapeSet::ReadGeometry(Standard_IStream&, const Message_ProgressRange&)
834 {
835 }
836
837
838 //=======================================================================
839 //function : DumpGeometry
840 //purpose  : 
841 //=======================================================================
842
843 void  TopTools_ShapeSet::DumpGeometry(const TopoDS_Shape&, 
844                                       Standard_OStream&)const 
845 {
846 }
847
848
849 //=======================================================================
850 //function : WriteGeometry
851 //purpose  : 
852 //=======================================================================
853
854 void  TopTools_ShapeSet::WriteGeometry(const TopoDS_Shape&, 
855                                        Standard_OStream&)const 
856 {
857 }
858
859
860 //=======================================================================
861 //function : ReadGeometry
862 //purpose  : 
863 //=======================================================================
864
865 void  TopTools_ShapeSet::ReadGeometry(const TopAbs_ShapeEnum,
866                                       Standard_IStream& ,
867                                       TopoDS_Shape&)
868 {
869 }
870
871
872
873
874 //=======================================================================
875 //function : AddShapes
876 //purpose  : 
877 //=======================================================================
878
879 void  TopTools_ShapeSet::AddShapes(TopoDS_Shape&,
880                                    const TopoDS_Shape&)
881 {
882 }
883
884
885
886 //=======================================================================
887 //function : Check
888 //purpose  : 
889 //=======================================================================
890
891 void  TopTools_ShapeSet::Check(const TopAbs_ShapeEnum,
892                                TopoDS_Shape&)
893 {
894 }
895
896 //=======================================================================
897 //function : NbShapes
898 //purpose  : 
899 //=======================================================================
900
901 Standard_Integer  TopTools_ShapeSet::NbShapes() const
902 {
903   return myShapes.Extent();
904 }