90057515aec225828d7306f55487dca83b7973c7
[occt.git] / src / IGESCAFControl / IGESCAFControl_Reader.cxx
1 // Created on: 2000-08-16
2 // Created by: Andrey BETENEV
3 // Copyright (c) 2000-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
17 #include <BRep_Builder.hxx>
18 #include <IGESBasic_SubfigureDef.hxx>
19 #include <IGESCAFControl.hxx>
20 #include <IGESCAFControl_Reader.hxx>
21 #include <IGESData_IGESEntity.hxx>
22 #include <IGESData_LevelListEntity.hxx>
23 #include <IGESGraph_Color.hxx>
24 #include <Interface_InterfaceModel.hxx>
25 #include <Quantity_Color.hxx>
26 #include <TCollection_AsciiString.hxx>
27 #include <TCollection_ExtendedString.hxx>
28 #include <TCollection_HAsciiString.hxx>
29 #include <TDataStd_Name.hxx>
30 #include <TDF_Label.hxx>
31 #include <TDocStd_Document.hxx>
32 #include <TopoDS_Compound.hxx>
33 #include <TopoDS_Iterator.hxx>
34 #include <TopoDS_Shape.hxx>
35 #include <TopTools_MapOfShape.hxx>
36 #include <Transfer_Binder.hxx>
37 #include <Transfer_TransientProcess.hxx>
38 #include <TransferBRep.hxx>
39 #include <XCAFDoc_ColorTool.hxx>
40 #include <XCAFDoc_DocumentTool.hxx>
41 #include <XCAFDoc_LayerTool.hxx>
42 #include <XCAFDoc_ShapeMapTool.hxx>
43 #include <XCAFDoc_ShapeTool.hxx>
44 #include <XSControl_TransferReader.hxx>
45 #include <XSControl_WorkSession.hxx>
46
47 //=======================================================================
48 //function : IGESCAFControl_Reader
49 //purpose  : 
50 //=======================================================================
51 IGESCAFControl_Reader::IGESCAFControl_Reader () :
52        myColorMode( Standard_True ),
53        myNameMode ( Standard_True ),
54        myLayerMode( Standard_True )
55 {
56 }
57
58
59 //=======================================================================
60 //function : IGESCAFControl_Reader
61 //purpose  : 
62 //=======================================================================
63
64 IGESCAFControl_Reader::IGESCAFControl_Reader (const Handle(XSControl_WorkSession)& WS,
65                                               const Standard_Boolean scratch)
66 {
67   SetWS (WS,scratch);
68   myColorMode = Standard_True;
69   myNameMode = Standard_True;
70   myLayerMode = Standard_True;
71 }
72
73
74 //=======================================================================
75 //function : Transfer
76 //purpose  : basic working method
77 //=======================================================================
78 static void checkColorRange (Standard_Real& theCol)
79 {
80   if ( theCol < 0. ) theCol = 0.;
81   if ( theCol > 100. ) theCol = 100.;
82 }
83
84 static inline Standard_Boolean IsComposite (const TopoDS_Shape& theShape)
85 {
86   if( theShape.ShapeType() == TopAbs_COMPOUND)
87   {
88     if(!theShape.Location().IsIdentity())
89       return Standard_True;
90     TopoDS_Iterator anIt( theShape, Standard_False, Standard_False );
91     
92     for (; anIt.More() ; anIt.Next()) 
93     {
94       if( IsComposite (anIt.Value()))
95         return Standard_True;
96     }
97
98   }
99   return Standard_False;
100 }
101
102 //=======================================================================
103 //function : AddCompositeShape
104 //purpose  : Recursively adds composite shapes (TopoDS_Compounds) into the XDE document.
105 //           If the compound does not contain nested compounds then adds it
106 //           as no-assembly (i.e. no individual labels for sub-shapes), as this
107 //           combination is often encountered in IGES (e.g. Group of Trimmed Surfaces).
108 //           If the compound does contain nested compounds then adds it as an
109 //           assembly.
110 //           The construction happens bottom-up, i.e. the most deep sub-shapes are added
111 //           first.
112 //           If theIsTop is False (in a recursive call) then sub-shapes are added without
113 //           a location. This is to ensure that no extra label in the XDE document is
114 //           created for an instance (as otherwise, XDE will consider it as a free
115 //           shape). Correct location and instance will be created when adding a parent
116 //           compound.
117 //           theMap is used to avoid visiting the same compound.
118 //=======================================================================
119 static void AddCompositeShape (const Handle(XCAFDoc_ShapeTool)& theSTool,
120                                const TopoDS_Shape& theShape,
121                                Standard_Boolean theConsiderLoc,
122                                TopTools_MapOfShape& theMap)
123 {
124   TopoDS_Shape aShape = theShape;
125   TopLoc_Location aLoc = theShape.Location();
126   if (!theConsiderLoc && !aLoc.IsIdentity())
127     aShape.Location( TopLoc_Location() );
128   if (!theMap.Add (aShape)) 
129     return;
130
131   TopoDS_Iterator anIt( theShape, Standard_False, Standard_False );
132   Standard_Boolean aHasCompositeSubShape = Standard_False;
133   TopoDS_Compound aSimpleShape;
134   BRep_Builder aB;
135   aB.MakeCompound( aSimpleShape);
136   TopoDS_Compound aCompShape;
137   aB.MakeCompound( aCompShape);
138   Standard_Integer nbSimple = 0;
139
140   for (; anIt.More(); anIt.Next()) {
141     const TopoDS_Shape& aSubShape = anIt.Value();
142     if (IsComposite (aSubShape)) {
143       aHasCompositeSubShape = Standard_True;
144       AddCompositeShape( theSTool, aSubShape,Standard_False ,theMap );
145       aB.Add( aCompShape, aSubShape);
146     }
147     else
148     {
149       aB.Add(aSimpleShape, aSubShape);
150       nbSimple++;
151     }
152   }
153   //case of hybrid shape
154   if( nbSimple && aHasCompositeSubShape)
155   {
156     theSTool->AddShape( aSimpleShape,  Standard_False, Standard_False  );
157     TopoDS_Compound aNewShape;
158     aB.MakeCompound(aNewShape);
159     aB.Add(aNewShape, aSimpleShape);
160     aB.Add(aNewShape,aCompShape);
161     //if (!aLoc.IsIdentity())
162     //  aNewShape.Location(aLoc );
163     aNewShape.Orientation(theShape.Orientation());
164     theSTool->AddShape( aNewShape,  aHasCompositeSubShape, Standard_False  );
165   }
166   else
167     theSTool->AddShape( aShape,  aHasCompositeSubShape, Standard_False  );
168   return;
169 }
170
171 Standard_Boolean IGESCAFControl_Reader::Transfer (Handle(TDocStd_Document) &doc)
172 {
173   // read all shapes
174   Standard_Integer num;// = NbRootsForTransfer();
175   //if ( num <=0 ) return Standard_False;
176   //for ( Standard_Integer i=1; i <= num; i++ ) {
177   //  TransferOneRoot ( i );
178   //}
179   
180   TransferRoots(); // replaces the above
181   num = NbShapes();
182   if ( num <=0 ) return Standard_False;
183
184   // and insert them to the document
185   Handle(XCAFDoc_ShapeTool) STool = XCAFDoc_DocumentTool::ShapeTool( doc->Main() );
186   if(STool.IsNull()) return Standard_False;
187   Standard_Integer i;
188   for(i=1; i<=num; i++) {
189     TopoDS_Shape sh = Shape ( i );
190     // ---- HERE -- to add check [ assembly / hybrid model ]
191     if( !IsComposite (sh))
192       STool->AddShape( sh, Standard_False );
193     else {
194       TopTools_MapOfShape aMap;
195       AddCompositeShape( STool, sh,Standard_True, aMap );
196       
197     }
198   }
199   
200   // added by skl 13.10.2003
201   Handle(Interface_InterfaceModel) Model = WS()->Model();
202   //WS()->TransferReader()->SetTransientProcess(TransientProcess());
203   Handle(XSControl_TransferReader) TR = WS()->TransferReader();
204   Handle(Transfer_TransientProcess) TP = TR->TransientProcess();
205   Standard_Boolean IsCTool = Standard_True;
206   Handle(XCAFDoc_ColorTool) CTool = XCAFDoc_DocumentTool::ColorTool(doc->Main());
207   if(CTool.IsNull()) IsCTool = Standard_False;
208   Standard_Boolean IsLTool = Standard_True;
209   Handle(XCAFDoc_LayerTool) LTool = XCAFDoc_DocumentTool::LayerTool(doc->Main());
210   if(LTool.IsNull()) IsLTool = Standard_False;
211
212   Standard_Integer nb = Model->NbEntities();
213   for(i=1; i<=nb; i++) {
214     Handle(IGESData_IGESEntity) ent = Handle(IGESData_IGESEntity)::DownCast ( Model->Value(i) );
215     if ( ent.IsNull() ) continue;
216     Handle(Transfer_Binder) binder = TP->Find ( ent );
217     if ( binder.IsNull() ) continue;
218     TopoDS_Shape S = TransferBRep::ShapeResult (binder);
219     if ( S.IsNull() ) continue;
220
221     Standard_Boolean IsColor = Standard_False;
222     Quantity_Color col;
223     if( GetColorMode() && IsCTool ) {
224       // read colors
225       if(ent->DefColor()==IGESData_DefValue ||
226          ent->DefColor()==IGESData_DefReference) {
227         // color is assigned
228         // decode color and set to document
229         IsColor = Standard_True;
230         if ( ent->DefColor() == IGESData_DefValue ) {
231           col = IGESCAFControl::DecodeColor ( ent->RankColor() );
232         }
233         else {
234           Handle(IGESGraph_Color) color = Handle(IGESGraph_Color)::DownCast ( ent->Color() );
235           if ( color.IsNull() ) {
236 #ifdef OCCT_DEBUG
237             cout << "Error: Unrecognized type of color definition" << endl;
238 #endif
239             IsColor = Standard_False;
240           }
241           else {
242             Standard_Real r, g, b;
243             color->RGBIntensity ( r, g, b );
244             checkColorRange ( r );
245             checkColorRange ( g );
246             checkColorRange ( b );
247             col.SetValues ( 0.01*r, 0.01*g, 0.01*b, Quantity_TOC_RGB );
248           }
249         }
250       }
251     }
252
253     TDF_Label L;
254
255     Standard_Boolean IsFound;
256     if(IsColor) {
257       CTool->AddColor(col);
258       IsFound = STool->SearchUsingMap(S,L,Standard_False,Standard_True);
259     }
260     else {
261       IsFound = STool->SearchUsingMap(S,L,Standard_False,Standard_False);
262     }
263     if(!IsFound) {
264       if(IsColor) {
265         for (TopoDS_Iterator it(S); it.More(); it.Next()) {
266           if(STool->SearchUsingMap(it.Value(),L,Standard_False,Standard_True)) {
267             CTool->SetColor(L,col,XCAFDoc_ColorGen);
268             if( GetLayerMode() && IsLTool ) {
269               // read layers
270               // set a layers to the document
271               IGESData_DefList aDeflist = ent->DefLevel();
272               switch (aDeflist) {
273               case IGESData_DefOne : {
274                 TCollection_ExtendedString aLayerName ( ent->Level() );
275                 LTool->SetLayer( L, aLayerName );
276                 break;
277               }
278               case IGESData_DefSeveral : {
279                 Handle(IGESData_LevelListEntity) aLevelList = ent->LevelList();
280                 Standard_Integer layerNb = aLevelList->NbLevelNumbers();
281                 for ( Standard_Integer ilev = 1; ilev <= layerNb; ilev++ ) {
282                   TCollection_ExtendedString aLayerName ( aLevelList->LevelNumber(ilev) );
283                   LTool->SetLayer( L, aLayerName );
284                 }
285                 break;
286               }
287                 default : break;
288               }
289             }
290           }
291         }
292       }
293     }
294     else {
295       if(IsColor) {
296         CTool->SetColor(L,col,XCAFDoc_ColorGen);
297       }
298       if(GetNameMode()) {
299         // read names
300         if(ent->HasName()) {
301           TCollection_AsciiString string = ent->NameValue()->String();
302           string.LeftAdjust();
303           string.RightAdjust();
304           TCollection_ExtendedString str(string);
305           TDataStd_Name::Set(L,str);
306         }
307       }
308       if( GetLayerMode() && IsLTool ) {
309         // read layers
310         // set a layers to the document
311         IGESData_DefList aDeflist = ent->DefLevel();
312         switch (aDeflist) {
313         case IGESData_DefOne : {
314           TCollection_ExtendedString aLayerName ( ent->Level() );
315           LTool->SetLayer( L, aLayerName );
316           break;
317         }
318         case IGESData_DefSeveral : {
319           Handle(IGESData_LevelListEntity) aLevelList = ent->LevelList();
320           Standard_Integer layerNb = aLevelList->NbLevelNumbers();
321           for ( Standard_Integer ilev = 1; ilev <= layerNb; ilev++ ) {
322             TCollection_ExtendedString aLayerName ( aLevelList->LevelNumber(ilev) );
323             LTool->SetLayer( L, aLayerName );
324           }
325           break;
326         }
327           default : break;
328         }
329       }
330     }
331
332     //Checks that current entity is a subfigure
333     Handle(IGESBasic_SubfigureDef) aSubfigure = Handle(IGESBasic_SubfigureDef)::DownCast (ent);
334     if (GetNameMode() && !aSubfigure.IsNull() && STool->Search (S, L, Standard_True, Standard_True))
335     {
336       //In this case we attach subfigure name to the label, instead of default "COMPOUND"
337       Handle(TCollection_HAsciiString) aName = aSubfigure->Name();
338       aName->LeftAdjust();
339       aName->RightAdjust();
340       TCollection_ExtendedString anExtStrName (aName->ToCString());
341       TDataStd_Name::Set (L, anExtStrName);
342     }
343
344   }
345
346   CTool->ReverseChainsOfTreeNodes();
347
348   // end added by skl 13.10.2003
349
350   // read colors
351 //  if ( GetColorMode() )
352 //    ReadColors ( doc );
353   
354   // read names
355 //  if ( GetNameMode() )
356 //    ReadNames ( doc );
357   
358   // read layers
359 //  if ( GetLayerMode() )
360 //    ReadLayers ( doc );
361     
362
363   return Standard_True;
364 }
365   
366
367 //=======================================================================
368 //function : Perform
369 //purpose  : 
370 //=======================================================================
371
372 Standard_Boolean IGESCAFControl_Reader::Perform (const Standard_CString filename,
373                                                  Handle(TDocStd_Document) &doc)
374 {
375   if ( ReadFile ( filename ) != IFSelect_RetDone ) return Standard_False;
376   return Transfer ( doc );
377 }
378   
379
380 //=======================================================================
381 //function : Perform
382 //purpose  : 
383 //=======================================================================
384
385 Standard_Boolean IGESCAFControl_Reader::Perform (const TCollection_AsciiString &filename,
386                                                  Handle(TDocStd_Document) &doc)
387 {
388   if ( ReadFile ( filename.ToCString() ) != IFSelect_RetDone ) return Standard_False;
389   return Transfer ( doc );
390 }
391
392
393 //=======================================================================
394 //function : ReadColors
395 //purpose  : 
396 //=======================================================================
397
398 Standard_Boolean IGESCAFControl_Reader::ReadColors (Handle(TDocStd_Document)& Doc) const
399 {
400
401   Handle(Interface_InterfaceModel) Model = WS()->Model();
402
403   //WS()->TransferReader()->SetTransientProcess(TransientProcess()); // !!!!!!!!!
404   
405   Handle(XSControl_TransferReader) TR = WS()->TransferReader();
406   Handle(Transfer_TransientProcess) TP = /*TransientProcess();*/TR->TransientProcess();
407   Handle(XCAFDoc_ColorTool) CTool = XCAFDoc_DocumentTool::ColorTool( Doc->Main() );
408 /*
409   Handle(XCAFDoc_ShapeTool) STool = XCAFDoc_DocumentTool::ShapeTool( Doc->Main() );
410   if ( STool.IsNull() ) return Standard_False;
411   Handle(XCAFDoc_ShapeMapTool) SMTool = XCAFDoc_ShapeMapTool::Set(STool->Label());
412   SMTool->ComputeMaps();
413
414   Standard_Integer nb = Model->NbEntities();
415   for (Standard_Integer i = 1; i <= nb; i ++) {
416     Handle(IGESData_IGESEntity) ent = Handle(IGESData_IGESEntity)::DownCast ( Model->Value(i) );
417     if ( ent.IsNull() ) continue;
418     if ( ent->DefColor() != IGESData_DefValue && 
419          ent->DefColor() != IGESData_DefReference ) continue; // no color assigned
420
421     // find tartet shape
422     Handle(Transfer_Binder) binder = TP->Find ( ent );
423     if ( binder.IsNull() ) continue;
424     TopoDS_Shape S = TransferBRep::ShapeResult (binder);
425     if ( S.IsNull() ) continue;
426
427     // decode color and set to document
428     Quantity_Color col;
429     if ( ent->DefColor() == IGESData_DefValue ) {
430       col = IGESCAFControl::DecodeColor ( ent->RankColor() );
431     }
432     else {
433       Handle(IGESGraph_Color) color = Handle(IGESGraph_Color)::DownCast ( ent->Color() );
434       if ( color.IsNull() ) {
435         cout << "Error: Unrecognized type of color definition" << endl;
436         continue;
437       }
438       
439       Standard_Real r, g, b;
440       color->RGBIntensity ( r, g, b );
441       col.SetValues ( 0.01*r, 0.01*g, 0.01*b, Quantity_TOC_RGB );
442     }
443     
444     TDF_Label L;
445     cout<<"i="<<i<<endl;
446     if(SMTool->Search(S,L)) {
447       cout<<"      find Instance"<<endl;
448       CTool->SetColor(L, col, XCAFDoc_ColorGen);
449     }
450     if(L.IsNull()) {
451       cout<<"L1 is Null"<<endl;
452       if(STool->Search(S,L,Standard_False,Standard_False,Standard_True)) {
453         cout<<"     add new label1 :"<<L<<endl;
454         CTool->SetColor(L, col, XCAFDoc_ColorGen);
455       }
456     }
457     if(L.IsNull()) {
458     //else {
459       cout<<"      try to find splitting"<<endl;
460       // may be S is compound of shapes resulting from splitting
461       for (TopoDS_Iterator it(S); it.More(); it.Next()) {
462         //TDF_Label L1;
463         if(!SMTool->Search(it.Value(),L)) continue; //break-?
464         cout<<"      find splitting"<<endl;
465         CTool->SetColor(L, col, XCAFDoc_ColorGen);
466       }
467       if(L.IsNull()) {
468         for (TopoDS_Iterator it(S); it.More(); it.Next()) {
469           if(STool->Search(S,L,Standard_False,Standard_False,Standard_True)) {
470             cout<<"     add new label2 :"<<L<<endl;
471             CTool->SetColor(L, col, XCAFDoc_ColorGen);
472           }
473         }
474       }
475     }
476 //    cout<<"L.Dump():"<<L<<endl;
477 //    if(L.IsNull()) {
478 //      cout<<"L2 is Null"<<endl;
479 //      if(STool->Search(S,L,Standard_False,Standard_False,Standard_True)) {
480 //        cout<<"     add new label2 :"<<L<<endl;
481 //      CTool->SetColor(L, col, XCAFDoc_ColorGen);
482 //      }
483 //    }
484   }
485 */  
486   return Standard_True;
487 }
488
489 //=======================================================================
490 //function : ReadNames
491 //purpose  : 
492 //=======================================================================
493
494 Standard_Boolean IGESCAFControl_Reader::ReadNames (Handle(TDocStd_Document)& /*Doc*/) const
495 {
496   Handle(Interface_InterfaceModel) Model = WS()->Model();
497
498   //WS()->TransferReader()->SetTransientProcess(TransientProcess()); // !!!!!!!!!
499   
500   Handle(XSControl_TransferReader) TR = WS()->TransferReader();
501   Handle(Transfer_TransientProcess) TP = /*TransientProcess();*/TR->TransientProcess();
502 /*
503   Handle(XCAFDoc_ShapeTool) STool = XCAFDoc_DocumentTool::ShapeTool( Doc->Main() );
504   if ( STool.IsNull() ) return Standard_False;
505   Handle(XCAFDoc_ShapeMapTool) SMTool = XCAFDoc_ShapeMapTool::Set(STool->Label());
506   SMTool->ComputeMaps();
507
508   Standard_Integer nb = Model->NbEntities();
509   for (Standard_Integer i = 1; i <= nb; i ++) {
510     Handle(IGESData_IGESEntity) ent = Handle(IGESData_IGESEntity)::DownCast ( Model->Value(i) );
511     if ( ent.IsNull() || ! ent->HasName() ) continue; //not only Entity Label (f.18) but Name Property also
512
513     // find target shape
514     Handle(Transfer_Binder) binder = TP->Find ( ent );
515     if ( binder.IsNull() ) continue;
516     TopoDS_Shape S = TransferBRep::ShapeResult (binder);
517     if ( S.IsNull() ) continue;
518
519     TDF_Label L;
520     //if ( ! STool->Search ( S, L, Standard_True, Standard_True, Standard_False ) ) continue;
521     if ( ! SMTool->Search ( S, L, Standard_True, Standard_True) ) continue;
522     
523     // set a name to the document
524     TCollection_AsciiString string = ent->NameValue()->String();
525     string.LeftAdjust();
526     string.RightAdjust();
527     TCollection_ExtendedString str ( string );
528     TDataStd_Name::Set ( L, str );
529   }
530 */
531   return Standard_True;
532 }
533
534 //=======================================================================
535 //function : ReadLayers
536 //purpose  : 
537 //=======================================================================
538
539 Standard_Boolean IGESCAFControl_Reader::ReadLayers (Handle(TDocStd_Document)& /*Doc*/) const
540 {
541   Handle(Interface_InterfaceModel) Model = WS()->Model();
542
543   //WS()->TransferReader()->SetTransientProcess(TransientProcess()); // !!!!!!!!!
544   
545   Handle(XSControl_TransferReader) TR = WS()->TransferReader();
546   Handle(Transfer_TransientProcess) TP = /*TransientProcess();*/TR->TransientProcess();
547 /*
548   Handle(XCAFDoc_ShapeTool) STool = XCAFDoc_DocumentTool::ShapeTool( Doc->Main() );
549   if ( STool.IsNull() ) return Standard_False;
550   Handle(XCAFDoc_ShapeMapTool) SMTool = XCAFDoc_ShapeMapTool::Set(STool->Label());
551   SMTool->ComputeMaps();
552
553   Handle(XCAFDoc_LayerTool) LTool = XCAFDoc_DocumentTool::LayerTool( Doc->Main() );
554   if ( LTool.IsNull() ) return Standard_False;
555
556   Standard_Integer nb = Model->NbEntities();
557   for (Standard_Integer i = 1; i <= nb; i ++) {
558     Handle(IGESData_IGESEntity) ent = Handle(IGESData_IGESEntity)::DownCast ( Model->Value(i) );
559
560     if ( ent.IsNull() ) continue;
561
562     // find target shape
563     Handle(Transfer_Binder) binder = TP->Find ( ent );
564     if ( binder.IsNull() ) continue;
565     TopoDS_Shape S = TransferBRep::ShapeResult (binder);
566     if ( S.IsNull() ) continue;
567
568     TDF_Label L;
569     //if ( ! STool->Search ( S, L, Standard_True, Standard_True, Standard_False ) ) continue;
570     if( !SMTool->Search(S, L, Standard_True, Standard_True) ) continue;
571     
572     // set a layers to the document
573     IGESData_DefList aDeflist = ent->DefLevel();
574     
575     switch (aDeflist) {
576     case IGESData_DefOne : {
577       TCollection_ExtendedString aLayerName ( ent->Level() );
578       LTool->SetLayer( L, aLayerName );
579 #ifdef OCCT_DEBUG
580 //      cout << "Added layer " << aLayerName << endl;
581 #endif
582       break;
583     }
584     case IGESData_DefSeveral : {
585       Handle(IGESData_LevelListEntity) aLevelList = ent->LevelList();
586       Standard_Integer layerNb = aLevelList->NbLevelNumbers();
587       for ( Standard_Integer ilev = 1; ilev <= layerNb; ilev++ ) {
588         TCollection_ExtendedString aLayerName ( aLevelList->LevelNumber(ilev) );
589         LTool->SetLayer( L, aLayerName );
590 #ifdef OCCT_DEBUG
591 //      cout << "Added layer " << aLayerName << endl;
592 #endif
593       }
594       break;
595     }
596       default : break;
597     }
598           
599   }
600 */
601   return Standard_True;
602 }
603
604
605 //=======================================================================
606 //function : SetColorMode
607 //purpose  : 
608 //=======================================================================
609
610 void IGESCAFControl_Reader::SetColorMode (const Standard_Boolean colormode)
611 {
612   myColorMode = colormode;
613 }
614
615 //=======================================================================
616 //function : GetColorMode
617 //purpose  : 
618 //=======================================================================
619
620 Standard_Boolean IGESCAFControl_Reader::GetColorMode () const
621 {
622   return myColorMode;
623 }
624
625 //=======================================================================
626 //function : SetNameMode
627 //purpose  : 
628 //=======================================================================
629
630 void IGESCAFControl_Reader::SetNameMode (const Standard_Boolean namemode)
631 {
632   myNameMode = namemode;
633 }
634
635 //=======================================================================
636 //function : GetNameMode
637 //purpose  : 
638 //=======================================================================
639
640 Standard_Boolean IGESCAFControl_Reader::GetNameMode () const
641 {
642   return myNameMode;
643 }
644
645 //=======================================================================
646 //function : SetLayerMode
647 //purpose  : 
648 //=======================================================================
649
650 void IGESCAFControl_Reader::SetLayerMode (const Standard_Boolean layermode)
651 {
652   myLayerMode = layermode;
653 }
654
655 //=======================================================================
656 //function : GetLayerMode
657 //purpose  : 
658 //=======================================================================
659
660 Standard_Boolean IGESCAFControl_Reader::GetLayerMode () const
661 {
662   return myLayerMode;
663 }
664