0028643: Coding rules - eliminate GCC compiler warnings -Wmisleading-indentation
[occt.git] / src / XDEDRAW / XDEDRAW_Layers.cxx
1 // Created on: 2000-08-04
2 // Created by: Pavel TELKOV
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 <DBRep.hxx>
18 #include <DDocStd.hxx>
19 #include <Draw.hxx>
20 #include <TCollection_AsciiString.hxx>
21 #include <TColStd_HSequenceOfExtendedString.hxx>
22 #include <TDF_Label.hxx>
23 #include <TDF_LabelSequence.hxx>
24 #include <TDF_Tool.hxx>
25 #include <TDocStd_Document.hxx>
26 #include <TopoDS_Shape.hxx>
27 #include <XCAFDoc_DocumentTool.hxx>
28 #include <XCAFDoc_LayerTool.hxx>
29 #include <XCAFDoc_ShapeTool.hxx>
30 #include <XDEDRAW_Layers.hxx>
31
32 //=======================================================================
33 // Section: Work with layers
34 //=======================================================================
35 static Standard_Integer addLayer (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
36 {
37   if (argc!=3) {
38     di<<"Use: "<<argv[0]<<" DocName StringLayer \n";
39     return 1;
40   }
41   Handle(TDocStd_Document) Doc;
42   DDocStd::GetDocument(argv[1], Doc);
43   if ( Doc.IsNull() ) { di << argv[1] << " is not a document\n"; return 1; }
44   Handle(XCAFDoc_LayerTool) localLayerTool = XCAFDoc_DocumentTool::LayerTool(Doc->Main());
45   
46   TCollection_ExtendedString aLayer = argv[2];
47   TDF_Label aLabel = localLayerTool->AddLayer(aLayer);
48   TCollection_AsciiString Entry;
49   TDF_Tool::Entry(aLabel, Entry);
50   di << Entry.ToCString();
51   return 0;
52 }
53
54 static Standard_Integer findLayer (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
55 {
56   if (argc!=3) {
57     di<<"Use: "<<argv[0]<<" DocName StringLayer \n";
58     return 1;
59   }
60   Handle(TDocStd_Document) Doc;
61   DDocStd::GetDocument(argv[1], Doc);
62   if ( Doc.IsNull() ) { di << argv[1] << " is not a document\n"; return 1; }
63   Handle(XCAFDoc_LayerTool) localLayerTool = XCAFDoc_DocumentTool::LayerTool(Doc->Main());
64   
65   TCollection_ExtendedString aLayer = argv[2];
66   TDF_Label aLabel = localLayerTool->FindLayer(aLayer);
67   TCollection_AsciiString Entry;
68   TDF_Tool::Entry(aLabel, Entry);
69   di << Entry.ToCString();
70   return 0;
71 }
72
73 static Standard_Integer removeLayer (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
74 {
75   if (argc!=3) {
76     di<<"Use: "<<argv[0]<<" DocName {Label|string}\n";
77     return 1;
78   }
79   Handle(TDocStd_Document) Doc;
80   DDocStd::GetDocument(argv[1], Doc);
81   if ( Doc.IsNull() ) { di << argv[1] << " is not a document\n"; return 1; }
82   Handle(XCAFDoc_LayerTool) localLayerTool = XCAFDoc_DocumentTool::LayerTool(Doc->Main());
83
84   TDF_Label aLabel;
85   TDF_Tool::Label(Doc->GetData(), argv[2], aLabel);
86   if ( aLabel.IsNull() ) {
87     TCollection_ExtendedString aLayer = argv[2];
88     aLabel = localLayerTool->FindLayer(aLayer);
89   }
90   if ( aLabel.IsNull() ) return 1;
91   localLayerTool->RemoveLayer( aLabel);
92   return 0;
93 }
94
95
96 static Standard_Integer setLayer (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
97 {
98   if (argc<4) {
99     di<<"Use: "<<argv[0]<<" DocName {Shape|Label} StringLayer [shapeInOneLayer(0/1)]\n";
100     return 1;
101   }
102   Standard_Boolean shapeInOneLayer = Standard_False;
103   if ( (argc==5) && (Draw::Atoi(argv[4])==1) ) shapeInOneLayer = Standard_True;
104   Handle(TDocStd_Document) Doc;
105   DDocStd::GetDocument(argv[1], Doc);
106   if ( Doc.IsNull() ) { di << argv[1] << " is not a document\n"; return 1; }
107   Handle(XCAFDoc_LayerTool) localLayerTool = XCAFDoc_DocumentTool::LayerTool(Doc->Main());
108   TDF_Label aLabel;
109   TCollection_ExtendedString aLayer = argv[3];
110
111   TDF_Tool::Label(Doc->GetData(), argv[2], aLabel);
112   if ( !aLabel.IsNull() ) {
113     localLayerTool->SetLayer(aLabel, aLayer, shapeInOneLayer);
114   }
115   else {
116     TopoDS_Shape aShape= DBRep::Get(argv[2]);
117     if ( !aShape.IsNull() ) {
118       localLayerTool->SetLayer(aShape, aLayer, shapeInOneLayer);
119     }
120   }
121   return 0;
122 }
123
124
125 static Standard_Integer getLayers (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
126 {
127   if (argc!=3) {
128     di<<"Use: "<<argv[0]<<" DocName {Shape|Label} \n";
129     return 1;
130   }
131   //
132   Handle(TDocStd_Document) Doc;
133   DDocStd::GetDocument(argv[1], Doc);
134   if ( Doc.IsNull() ) { di << argv[1] << " is not a document\n"; return 1; }
135   Handle(XCAFDoc_LayerTool) localLayerTool = XCAFDoc_DocumentTool::LayerTool(Doc->Main());
136   TDF_Label aLabel;
137   Handle(TColStd_HSequenceOfExtendedString) aLayerS;
138   TDF_Tool::Label(Doc->GetData(), argv[2], aLabel);
139   if ( !aLabel.IsNull() ) {
140     localLayerTool->GetLayers(aLabel, aLayerS);
141   }
142   else {
143     TopoDS_Shape aShape= DBRep::Get(argv[2]);
144     if ( !aShape.IsNull() ) {
145       localLayerTool->GetLayers(aShape, aLayerS);
146     }
147   }
148   Standard_Integer i = 1;
149   if (!aLayerS.IsNull() && aLayerS->Length()!=0)
150     for (; i <= aLayerS->Length(); i++) {
151       TCollection_AsciiString Entry(aLayerS->Value(i),'?');
152       di << "\"" << Entry.ToCString() << "\" ";
153     }
154   return 0;
155 }
156
157
158 static Standard_Integer getLayerLabels (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
159 {
160   if (argc!=2) {
161     di<<"Use: "<<argv[0]<<" DocName\n";
162     return 1;
163   }
164   Handle(TDocStd_Document) Doc;
165   DDocStd::GetDocument(argv[1], Doc);
166   if ( Doc.IsNull() ) { di << argv[1] << " is not a document\n"; return 1; }
167   Handle(XCAFDoc_LayerTool) localLayerTool = XCAFDoc_DocumentTool::LayerTool(Doc->Main());
168   TDF_LabelSequence aLabs;
169   localLayerTool->GetLayerLabels(aLabs);
170   if (aLabs.Length() ==0 ) {
171     return 0;
172   }
173   Standard_Integer i = 1;
174   for (; i <= aLabs.Length(); i++) {
175     TDF_Label L = aLabs.Value(i);
176     if ( !L.IsNull() ) {
177       TCollection_AsciiString Entry;
178       TDF_Tool::Entry(L, Entry);
179       di << Entry.ToCString() << " ";
180     }
181   }
182   return 0;
183 }
184
185
186 static Standard_Integer getOneLayer (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
187 {
188   if (argc!=3) {
189     di<<"Use: "<<argv[0]<<" DocName LayerLabel\n";
190     return 1;
191   }
192   Handle(TDocStd_Document) Doc;
193   DDocStd::GetDocument(argv[1], Doc);
194   if ( Doc.IsNull() ) { di << argv[1] << " is not a document\n"; return 1; }
195   Handle(XCAFDoc_LayerTool) localLayerTool = XCAFDoc_DocumentTool::LayerTool(Doc->Main());
196   TDF_Label aLabel;
197   TDF_Tool::Label(Doc->GetData(), argv[2], aLabel);
198   if ( !aLabel.IsNull() ) {
199     TCollection_ExtendedString layerName;
200     localLayerTool->GetLayer(aLabel, layerName);
201     TCollection_AsciiString Entry(layerName,'?');
202     di << "\"" << Entry.ToCString() <<"\"";
203   }
204   return 0;
205 }
206
207
208 static Standard_Integer setLinkLayer (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
209 {
210   if (argc<4) {
211     di<<"Use: "<<argv[0]<<" DocName {Shape|Label} LayerL [shapeInOneLayer(0/1)]\n";
212     return 1;
213   }
214   Standard_Boolean shapeInOneLayer = Standard_False;
215   if ( (argc==5) && (Draw::Atoi(argv[4])==1) ) shapeInOneLayer = Standard_True;
216   Handle(TDocStd_Document) Doc;
217   DDocStd::GetDocument(argv[1], Doc);
218   if ( Doc.IsNull() ) { di << argv[1] << " is not a document\n"; return 1; }
219   Handle(XCAFDoc_LayerTool) localLayerTool = XCAFDoc_DocumentTool::LayerTool(Doc->Main());
220   TDF_Label aLabel, layerLabel;
221   TDF_Tool::Label(Doc->GetData(), argv[3], layerLabel);
222
223   TDF_Tool::Label(Doc->GetData(), argv[2], aLabel);
224   if ( !layerLabel.IsNull() ) {
225     if ( !aLabel.IsNull() ) {
226       localLayerTool->SetLayer(aLabel, layerLabel, shapeInOneLayer);
227     }
228     else {
229       TopoDS_Shape aShape= DBRep::Get(argv[2]);
230       if ( !aShape.IsNull() ) {
231         localLayerTool->SetLayer(aShape, layerLabel, shapeInOneLayer);
232       }
233     }
234   }
235   return 0;
236 }
237
238
239 static Standard_Integer getAllLayers (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
240 {
241   if (argc!=2) {
242     di<<"Use: "<<argv[0]<<" DocName\n";
243     return 1;
244   }
245   Handle(TDocStd_Document) Doc;
246   DDocStd::GetDocument(argv[1], Doc);
247   if ( Doc.IsNull() ) { di << argv[1] << " is not a document\n"; return 1; }
248   Handle(XCAFDoc_LayerTool) localLayerTool = XCAFDoc_DocumentTool::LayerTool(Doc->Main());
249   TDF_LabelSequence aLabs;
250   localLayerTool->GetLayerLabels(aLabs);
251   if (aLabs.Length() ==0 ) {
252     return 0;
253   }
254   Standard_Integer i = 1;
255   TCollection_ExtendedString layerName;
256   
257   for (; i <= aLabs.Length(); i++) {
258     TDF_Label L = aLabs.Value(i);
259     if ( !L.IsNull() ) {
260       localLayerTool->GetLayer(L, layerName);
261       TCollection_AsciiString Entry(layerName,'?');
262       di << "\"" << Entry.ToCString() <<"\"";
263       di << " ";
264     }
265   }
266   return 0;
267 }
268
269
270 static Standard_Integer unSetLayer (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
271 {
272   if (argc!=4) {
273     di<<"Use: "<<argv[0]<<" DocName {Shape|Label} stringL\n";
274     return 1;
275   }
276   Handle(TDocStd_Document) Doc;
277   DDocStd::GetDocument(argv[1], Doc);
278   if ( Doc.IsNull() ) { di << argv[1] << " is not a document\n"; return 1; }
279   Handle(XCAFDoc_LayerTool) localLayerTool = XCAFDoc_DocumentTool::LayerTool(Doc->Main());
280   TDF_Label aLabel;
281   TCollection_ExtendedString aLayer = argv[3];
282
283   TDF_Tool::Label(Doc->GetData(), argv[2], aLabel);
284   if ( !aLabel.IsNull() ) {
285     localLayerTool->UnSetOneLayer(aLabel, aLayer);
286   }
287   else {
288     TopoDS_Shape aShape= DBRep::Get(argv[2]);
289     if ( !aShape.IsNull() ) {
290       localLayerTool->UnSetOneLayer(aShape, aLayer);
291     }
292   }
293   return 0;
294 }
295
296
297 static Standard_Integer unSetAllLayers (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
298 {
299   if (argc!=3) {
300     di<<"Use: "<<argv[0]<<" DocName {Shape|Label}\n";
301     return 1;
302   }
303   Handle(TDocStd_Document) Doc;
304   DDocStd::GetDocument(argv[1], Doc);
305   if ( Doc.IsNull() ) { di << argv[1] << " is not a document\n"; return 1; }
306   Handle(XCAFDoc_LayerTool) localLayerTool = XCAFDoc_DocumentTool::LayerTool(Doc->Main());
307   TDF_Label aLabel;
308
309   TDF_Tool::Label(Doc->GetData(), argv[2], aLabel);
310   if ( !aLabel.IsNull() ) {
311     localLayerTool->UnSetLayers(aLabel);
312   }
313   else {
314     TopoDS_Shape aShape= DBRep::Get(argv[2]);
315     if ( !aShape.IsNull() ) {
316       localLayerTool->UnSetLayers(aShape);
317     }
318   }
319   return 0;
320 }
321
322
323 static Standard_Integer removeAllLayers (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
324 {
325   if (argc!=2) {
326     di<<"Use: "<<argv[0]<<" DocName\n";
327     return 1;
328   }
329   Handle(TDocStd_Document) Doc;
330   DDocStd::GetDocument(argv[1], Doc);
331   if ( Doc.IsNull() ) { di << argv[1] << " is not a document\n"; return 1; }
332   Handle(XCAFDoc_LayerTool) localLayerTool = XCAFDoc_DocumentTool::LayerTool(Doc->Main());
333   
334   TDF_LabelSequence aLabs;
335   localLayerTool->GetLayerLabels(aLabs);
336   if (aLabs.Length() ==0 ) {
337     return 0;
338   }
339   Standard_Integer i = 1;
340   for (; i <= aLabs.Length(); i++) {
341     TDF_Label L = aLabs.Value(i);
342     if ( !L.IsNull() ) {
343       localLayerTool->RemoveLayer(L);
344     }
345   }
346   return 0;
347 }
348
349 static Standard_Integer setVisibility (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
350 {
351   if (argc<3) {
352     di<<"Use: "<<argv[0]<<"DocName {layerLable|StringLayer} [isvisible(1/0)]\n";
353     return 1;
354   }
355   Handle(TDocStd_Document) Doc;
356   DDocStd::GetDocument(argv[1], Doc);
357   if ( Doc.IsNull() ) { di << argv[1] << " is not a document\n"; return 1; }
358   Handle(XCAFDoc_LayerTool) localLayerTool = XCAFDoc_DocumentTool::LayerTool(Doc->Main());
359   Standard_Boolean isvisible = Standard_False;
360   if ( (argc==4) && (Draw::Atoi(argv[3])==1) ) isvisible = Standard_True;
361   
362   TDF_Label aLabel;
363   TDF_Tool::Label(Doc->GetData(), argv[2], aLabel);
364   if ( aLabel.IsNull() ) {
365     TCollection_ExtendedString aLayer = argv[2];
366     aLabel = localLayerTool->FindLayer(aLayer);
367   }
368   if ( aLabel.IsNull() ) return 1;
369   localLayerTool->SetVisibility(aLabel, isvisible);
370   return 0;
371 }
372
373
374 static Standard_Integer isVisible (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
375 {
376   if (argc!=3) {
377     di<<"Use: "<<argv[0]<<" DocName {layerLable|StringLayer}\n";
378     return 1;
379   }
380   Handle(TDocStd_Document) Doc;
381   DDocStd::GetDocument(argv[1], Doc);
382   if ( Doc.IsNull() ) { di << argv[1] << " is not a document\n"; return 1; }
383   Handle(XCAFDoc_LayerTool) localLayerTool = XCAFDoc_DocumentTool::LayerTool(Doc->Main());
384
385   TDF_Label aLabel;
386   TDF_Tool::Label(Doc->GetData(), argv[2], aLabel);
387   if ( aLabel.IsNull() ) {
388     TCollection_ExtendedString aLayer = argv[2];
389     aLabel = localLayerTool->FindLayer(aLayer);
390   }
391   if ( aLabel.IsNull() ) return 1;
392   if (localLayerTool->IsVisible( aLabel) ) di << 1;
393   else di << 0;
394   return 0;
395 }
396
397 //=======================================================================
398 //function : InitCommands
399 //purpose  : 
400 //=======================================================================
401
402 void XDEDRAW_Layers::InitCommands(Draw_Interpretor& di) 
403 {
404   static Standard_Boolean initactor = Standard_False;
405   if (initactor)
406   {
407     return;
408   }
409   initactor = Standard_True;
410
411   //=====================================
412   // Work with layers
413   //=====================================  
414   
415   Standard_CString g = "XDE layer's commands";
416   
417   di.Add ("XSetLayer","DocName {Shape|Label} StringLayer [shapeInOneLayer(0/1)] \t: Set reference between Shape and Layer (add layer if nesessary). shapeInOneLayer 0 is default",
418                    __FILE__, setLayer, g);
419
420   di.Add ("XGetLayers","DocName {Shape|Label} \t: Get layers of indicated shape",
421                    __FILE__, getLayers, g);
422
423   di.Add ("XGetOneLayer","DocName LayerLabel \t: Print name of layer.",
424                    __FILE__, getOneLayer, g);
425
426   di.Add ("XAddLayer","DocName StringLayer \t: Adding layer in XCAFDocument.",
427                    __FILE__, addLayer, g);
428
429   di.Add ("XSetLinkLayer","DocName {Shape|Label} LayerL [shapeInOneLayer(0/1)] \t: Set reference between shape and existing layer. shapeInOneLayer 0 is default",
430                    __FILE__, setLinkLayer, g);
431
432   di.Add ("XGetAllLayers","DocName \t: Get all layers in XCAFDocument.",
433                    __FILE__, getAllLayers, g);
434
435   di.Add ("XUnSetLayer","DocName {Shape|Label} stringL \t: unset shape from indicated layer.",
436                    __FILE__, unSetLayer, g);
437
438   di.Add ("XUnSetAllLayers","DocName {Shape|Label} \t: unset shape from all layers.",
439                    __FILE__, unSetAllLayers, g);
440
441   di.Add ("XRemoveLayer","DocName {Label|string} \t:remove layer from XCAFDocument.",
442                    __FILE__, removeLayer, g);
443
444   di.Add ("XRemoveAllLayers","DocName \t: remove all layers from XCAFDocument.",
445                    __FILE__, removeAllLayers, g);
446
447   di.Add ("XFindLayer","DocName string \t: Print label where are layer is situated.",
448                    __FILE__, findLayer, g);
449
450   di.Add ("XGetLayerLabels","DocName \t: Print labels from layertable.",
451                    __FILE__, getLayerLabels, g);
452
453   di.Add ("XSetVisibility","DocName {layerLable|StringLayer} [isvisible(1/0)] \t: Set visibility of layer",
454                    __FILE__, setVisibility, g);
455
456   di.Add ("XIsVisible","DocName {layerLable|StringLayer} \t: Return 1 if layer is visible, 0 if not",
457                    __FILE__, isVisible, g);
458 }