1 // Created on: 2000-08-04
2 // Created by: Pavel TELKOV
3 // Copyright (c) 2000-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.
18 #include <DDocStd.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>
32 //=======================================================================
33 // Section: Work with layers
34 //=======================================================================
35 static Standard_Integer addLayer (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
38 di<<"Use: "<<argv[0]<<" DocName StringLayer \n";
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());
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();
54 static Standard_Integer findLayer (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
57 di<<"Use: "<<argv[0]<<" DocName StringLayer \n";
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());
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();
73 static Standard_Integer removeLayer (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
76 di<<"Use: "<<argv[0]<<" DocName {Label|string}\n";
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());
85 TDF_Tool::Label(Doc->GetData(), argv[2], aLabel);
86 if ( aLabel.IsNull() ) {
87 TCollection_ExtendedString aLayer = argv[2];
88 aLabel = localLayerTool->FindLayer(aLayer);
90 if ( aLabel.IsNull() ) return 1;
91 localLayerTool->RemoveLayer( aLabel);
96 static Standard_Integer setLayer (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
99 di<<"Use: "<<argv[0]<<" DocName {Shape|Label} StringLayer [shapeInOneLayer(0/1)]\n";
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());
109 TCollection_ExtendedString aLayer = argv[3];
111 TDF_Tool::Label(Doc->GetData(), argv[2], aLabel);
112 if ( !aLabel.IsNull() ) {
113 localLayerTool->SetLayer(aLabel, aLayer, shapeInOneLayer);
116 TopoDS_Shape aShape= DBRep::Get(argv[2]);
117 if ( !aShape.IsNull() ) {
118 localLayerTool->SetLayer(aShape, aLayer, shapeInOneLayer);
125 static Standard_Integer getLayers (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
128 di<<"Use: "<<argv[0]<<" DocName {Shape|Label} \n";
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());
137 Handle(TColStd_HSequenceOfExtendedString) aLayerS;
138 TDF_Tool::Label(Doc->GetData(), argv[2], aLabel);
139 if ( !aLabel.IsNull() ) {
140 localLayerTool->GetLayers(aLabel, aLayerS);
143 TopoDS_Shape aShape= DBRep::Get(argv[2]);
144 if ( !aShape.IsNull() ) {
145 localLayerTool->GetLayers(aShape, aLayerS);
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() << "\" ";
158 static Standard_Integer getLayerLabels (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
161 di<<"Use: "<<argv[0]<<" DocName\n";
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 ) {
173 Standard_Integer i = 1;
174 for (; i <= aLabs.Length(); i++) {
175 TDF_Label L = aLabs.Value(i);
177 TCollection_AsciiString Entry;
178 TDF_Tool::Entry(L, Entry);
179 di << Entry.ToCString() << " ";
186 static Standard_Integer getOneLayer (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
189 di<<"Use: "<<argv[0]<<" DocName LayerLabel\n";
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());
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() <<"\"";
208 static Standard_Integer setLinkLayer (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
211 di<<"Use: "<<argv[0]<<" DocName {Shape|Label} LayerL [shapeInOneLayer(0/1)]\n";
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);
223 TDF_Tool::Label(Doc->GetData(), argv[2], aLabel);
224 if ( !layerLabel.IsNull() ) {
225 if ( !aLabel.IsNull() ) {
226 localLayerTool->SetLayer(aLabel, layerLabel, shapeInOneLayer);
229 TopoDS_Shape aShape= DBRep::Get(argv[2]);
230 if ( !aShape.IsNull() ) {
231 localLayerTool->SetLayer(aShape, layerLabel, shapeInOneLayer);
239 static Standard_Integer getAllLayers (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
242 di<<"Use: "<<argv[0]<<" DocName\n";
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 ) {
254 Standard_Integer i = 1;
255 TCollection_ExtendedString layerName;
257 for (; i <= aLabs.Length(); i++) {
258 TDF_Label L = aLabs.Value(i);
260 localLayerTool->GetLayer(L, layerName);
261 TCollection_AsciiString Entry(layerName,'?');
262 di << "\"" << Entry.ToCString() <<"\"";
270 static Standard_Integer unSetLayer (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
273 di<<"Use: "<<argv[0]<<" DocName {Shape|Label} stringL\n";
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());
281 TCollection_ExtendedString aLayer = argv[3];
283 TDF_Tool::Label(Doc->GetData(), argv[2], aLabel);
284 if ( !aLabel.IsNull() ) {
285 localLayerTool->UnSetOneLayer(aLabel, aLayer);
288 TopoDS_Shape aShape= DBRep::Get(argv[2]);
289 if ( !aShape.IsNull() ) {
290 localLayerTool->UnSetOneLayer(aShape, aLayer);
297 static Standard_Integer unSetAllLayers (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
300 di<<"Use: "<<argv[0]<<" DocName {Shape|Label}\n";
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());
309 TDF_Tool::Label(Doc->GetData(), argv[2], aLabel);
310 if ( !aLabel.IsNull() ) {
311 localLayerTool->UnSetLayers(aLabel);
314 TopoDS_Shape aShape= DBRep::Get(argv[2]);
315 if ( !aShape.IsNull() ) {
316 localLayerTool->UnSetLayers(aShape);
323 static Standard_Integer removeAllLayers (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
326 di<<"Use: "<<argv[0]<<" DocName\n";
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());
334 TDF_LabelSequence aLabs;
335 localLayerTool->GetLayerLabels(aLabs);
336 if (aLabs.Length() ==0 ) {
339 Standard_Integer i = 1;
340 for (; i <= aLabs.Length(); i++) {
341 TDF_Label L = aLabs.Value(i);
343 localLayerTool->RemoveLayer(L);
349 static Standard_Integer setVisibility (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
352 di<<"Use: "<<argv[0]<<"DocName {layerLable|StringLayer} [isvisible(1/0)]\n";
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;
363 TDF_Tool::Label(Doc->GetData(), argv[2], aLabel);
364 if ( aLabel.IsNull() ) {
365 TCollection_ExtendedString aLayer = argv[2];
366 aLabel = localLayerTool->FindLayer(aLayer);
368 if ( aLabel.IsNull() ) return 1;
369 localLayerTool->SetVisibility(aLabel, isvisible);
374 static Standard_Integer isVisible (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
377 di<<"Use: "<<argv[0]<<" DocName {layerLable|StringLayer}\n";
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());
386 TDF_Tool::Label(Doc->GetData(), argv[2], aLabel);
387 if ( aLabel.IsNull() ) {
388 TCollection_ExtendedString aLayer = argv[2];
389 aLabel = localLayerTool->FindLayer(aLayer);
391 if ( aLabel.IsNull() ) return 1;
392 if (localLayerTool->IsVisible( aLabel) ) di << 1;
397 //=======================================================================
398 //function : InitCommands
400 //=======================================================================
402 void XDEDRAW_Layers::InitCommands(Draw_Interpretor& di)
404 static Standard_Boolean initactor = Standard_False;
409 initactor = Standard_True;
411 //=====================================
413 //=====================================
415 Standard_CString g = "XDE layer's commands";
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);
420 di.Add ("XGetLayers","DocName {Shape|Label} \t: Get layers of indicated shape",
421 __FILE__, getLayers, g);
423 di.Add ("XGetOneLayer","DocName LayerLabel \t: Print name of layer.",
424 __FILE__, getOneLayer, g);
426 di.Add ("XAddLayer","DocName StringLayer \t: Adding layer in XCAFDocument.",
427 __FILE__, addLayer, g);
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);
432 di.Add ("XGetAllLayers","DocName \t: Get all layers in XCAFDocument.",
433 __FILE__, getAllLayers, g);
435 di.Add ("XUnSetLayer","DocName {Shape|Label} stringL \t: unset shape from indicated layer.",
436 __FILE__, unSetLayer, g);
438 di.Add ("XUnSetAllLayers","DocName {Shape|Label} \t: unset shape from all layers.",
439 __FILE__, unSetAllLayers, g);
441 di.Add ("XRemoveLayer","DocName {Label|string} \t:remove layer from XCAFDocument.",
442 __FILE__, removeLayer, g);
444 di.Add ("XRemoveAllLayers","DocName \t: remove all layers from XCAFDocument.",
445 __FILE__, removeAllLayers, g);
447 di.Add ("XFindLayer","DocName string \t: Print label where are layer is situated.",
448 __FILE__, findLayer, g);
450 di.Add ("XGetLayerLabels","DocName \t: Print labels from layertable.",
451 __FILE__, getLayerLabels, g);
453 di.Add ("XSetVisibility","DocName {layerLable|StringLayer} [isvisible(1/0)] \t: Set visibility of layer",
454 __FILE__, setVisibility, g);
456 di.Add ("XIsVisible","DocName {layerLable|StringLayer} \t: Return 1 if layer is visible, 0 if not",
457 __FILE__, isVisible, g);