0027961: Visualization - remove unused and no more working OpenGl_AVIWriter
[occt.git] / src / XCAFDoc / XCAFDoc_LayerTool.cxx
CommitLineData
b311480e 1// Created on: 2000-10-02
2// Created by: Pavel TELKOV
973c2be1 3// Copyright (c) 2000-2014 OPEN CASCADE SAS
b311480e 4//
973c2be1 5// This file is part of Open CASCADE Technology software library.
b311480e 6//
d5f74e42 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
973c2be1 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.
b311480e 12//
973c2be1 13// Alternatively, this file may be used under the terms of Open CASCADE
14// commercial license or contractual agreement.
7fd59977 15
42cf5bc1 16
17#include <Standard_GUID.hxx>
18#include <Standard_Type.hxx>
19#include <TCollection_ExtendedString.hxx>
7fd59977 20#include <TDataStd_Name.hxx>
42cf5bc1 21#include <TDataStd_UAttribute.hxx>
22#include <TDF_Attribute.hxx>
7fd59977 23#include <TDF_ChildIDIterator.hxx>
24#include <TDF_ChildIterator.hxx>
42cf5bc1 25#include <TDF_Label.hxx>
26#include <TDF_RelocationTable.hxx>
27#include <TopoDS_Shape.hxx>
7fd59977 28#include <XCAFDoc.hxx>
42cf5bc1 29#include <XCAFDoc_DocumentTool.hxx>
30#include <XCAFDoc_GraphNode.hxx>
31#include <XCAFDoc_LayerTool.hxx>
32#include <XCAFDoc_ShapeTool.hxx>
7fd59977 33
92efcf78 34IMPLEMENT_STANDARD_RTTIEXT(XCAFDoc_LayerTool,TDF_Attribute)
35
7fd59977 36//=======================================================================
37//function : Constructor
38//purpose :
39//=======================================================================
7fd59977 40XCAFDoc_LayerTool::XCAFDoc_LayerTool()
41{
42}
43
44
45//=======================================================================
46//function : Set
47//purpose :
48//=======================================================================
49
50Handle(XCAFDoc_LayerTool) XCAFDoc_LayerTool::Set(const TDF_Label& L)
51{
52 Handle(XCAFDoc_LayerTool) A;
53 if (!L.FindAttribute (XCAFDoc_LayerTool::GetID(), A)) {
54 A = new XCAFDoc_LayerTool ();
55 L.AddAttribute(A);
56 A->myShapeTool = XCAFDoc_DocumentTool::ShapeTool(L);
57 }
58 return A;
59}
60
61
62//=======================================================================
63//function : GetID
64//purpose :
65//=======================================================================
66
67const Standard_GUID& XCAFDoc_LayerTool::GetID()
68{
69 static Standard_GUID LayerTblID ("efd212f4-6dfd-11d4-b9c8-0060b0ee281b");
70 return LayerTblID;
71}
72
73
74//=======================================================================
75//function : BaseLabel
76//purpose :
77//=======================================================================
78
79TDF_Label XCAFDoc_LayerTool::BaseLabel() const
80{
81 return Label();
82}
83
84
85//=======================================================================
86//function : ShapeTool
87//purpose :
88//=======================================================================
89
90const Handle(XCAFDoc_ShapeTool)& XCAFDoc_LayerTool::ShapeTool()
91{
92 if (myShapeTool.IsNull())
93 myShapeTool = XCAFDoc_DocumentTool::ShapeTool( Label() );
94 return myShapeTool;
95}
96
97
98//=======================================================================
99//function : IsLayer
100//purpose :
101//=======================================================================
102
103Standard_Boolean XCAFDoc_LayerTool::IsLayer(const TDF_Label& lab) const
104{
105 TCollection_ExtendedString aLayer;
106 return GetLayer ( lab, aLayer);
107}
108
109
110//=======================================================================
111//function : GetLayer
112//purpose :
113//=======================================================================
114
115Standard_Boolean XCAFDoc_LayerTool::GetLayer(const TDF_Label& lab,
116 TCollection_ExtendedString& aLayer) const
117{
118 if ( lab.Father() != Label() ) return Standard_False;
119// Handle(XCAFDoc_GraphNode) aGN;
120// if (! lab.FindAttribute (XCAFDoc::LayerRefGUID(), aGN))
121// return Standard_False;
122 Handle(TDataStd_Name) aName;
123 Standard_Boolean status = Standard_False;
124 if ( lab.FindAttribute (TDataStd_Name::GetID(), aName) ) {
125 aLayer = aName->Get();
126 status = Standard_True;
127 }
128 return status;
129}
130
131//=======================================================================
132//function : FindLayer
133//purpose :
134//=======================================================================
135
136Standard_Boolean XCAFDoc_LayerTool::FindLayer(const TCollection_ExtendedString& aLayer,
137 TDF_Label& lab) const
138{
139 lab = FindLayer(aLayer);
140 return ( !lab.IsNull() );
141}
142
143
144//=======================================================================
145//function : FindLayer
146//purpose :
147//=======================================================================
148
149TDF_Label XCAFDoc_LayerTool::FindLayer(const TCollection_ExtendedString& aLayer) const
150{
151 TDF_ChildIterator it( Label() );
152 TDF_Label lab;
153 for (; it.More(); it.Next()) {
154 TDF_Label aLabel = it.Value();
155 Handle(TDataStd_Name) aName;
156 if ( aLabel.FindAttribute (TDataStd_Name::GetID(), aName) && (aName->Get().IsEqual(aLayer)) ) {
157 lab = aLabel;
158 break;
159 }
160 }
161 return lab;
162}
163
164
165//=======================================================================
166//function : AddLayer
167//purpose :
168//=======================================================================
169
170TDF_Label XCAFDoc_LayerTool::AddLayer(const TCollection_ExtendedString& aLayer) const
171{
172 TDF_Label lab;
173 if ( FindLayer(aLayer, lab) )
174 return lab;
175 TDF_TagSource aTag;
176 TDF_Label aLabel = aTag.NewChild( Label() );
177 Handle(TDataStd_Name) aName = new TDataStd_Name;
178 aName->Set(aLabel, aLayer);
179 return aLabel;
180}
181
182
183//=======================================================================
184//function : RemoveLayer
185//purpose :
186//=======================================================================
187
188void XCAFDoc_LayerTool::RemoveLayer(const TDF_Label& lab) const
189{
190 lab.ForgetAllAttributes (Standard_True);
191}
192
193
194//=======================================================================
195//function : GetLayerLabels
196//purpose :
197//=======================================================================
198
199void XCAFDoc_LayerTool::GetLayerLabels(TDF_LabelSequence& Labels) const
200{
201 Labels.Clear();
202 TDF_ChildIterator ChildIterator( Label() );
203 for (; ChildIterator.More(); ChildIterator.Next()) {
204 TDF_Label L = ChildIterator.Value();
205 if ( IsLayer(L)) Labels.Append(L);
206 }
207}
208
209
210//=======================================================================
211//function : SetLayer
212//purpose :
213//=======================================================================
214
215void XCAFDoc_LayerTool::SetLayer(const TDF_Label& L,
216 const TDF_Label& LayerL,
217 const Standard_Boolean shapeInOneLayer) const
218{
219 if (shapeInOneLayer) UnSetLayers( L );
220 Handle(XCAFDoc_GraphNode) FGNode;
221 Handle(XCAFDoc_GraphNode) ChGNode;
222 if (! LayerL.FindAttribute( XCAFDoc::LayerRefGUID(), FGNode) ) {
223 FGNode = new XCAFDoc_GraphNode;
224 FGNode = XCAFDoc_GraphNode::Set(LayerL);
225 }
226 if (! L.FindAttribute( XCAFDoc::LayerRefGUID(), ChGNode) ) {
227 ChGNode = new XCAFDoc_GraphNode;
228 ChGNode = XCAFDoc_GraphNode::Set(L);
229 }
230 FGNode->SetGraphID( XCAFDoc::LayerRefGUID() );
231 ChGNode->SetGraphID( XCAFDoc::LayerRefGUID() );
232 FGNode->SetChild(ChGNode);
233 ChGNode->SetFather(FGNode);
234}
235
236
237//=======================================================================
238//function : SetLayer
239//purpose :
240//=======================================================================
241
242void XCAFDoc_LayerTool::SetLayer(const TDF_Label& L,
243 const TCollection_ExtendedString& aLayer,
244 const Standard_Boolean shapeInOneLayer) const
245{
246 TDF_Label aLayerL = AddLayer(aLayer);
247 SetLayer(L, aLayerL, shapeInOneLayer);
248}
249
250
251//=======================================================================
252//function : UnSetLayers
253//purpose :
254//=======================================================================
255
256void XCAFDoc_LayerTool::UnSetLayers(const TDF_Label& L) const
257{
258 Handle(XCAFDoc_GraphNode) ChGNode, FGNode;
259 if ( L.FindAttribute (XCAFDoc::LayerRefGUID(), ChGNode) ) {
260 while (ChGNode->NbFathers()!= 0) {
261 FGNode = ChGNode->GetFather(1);
262 FGNode-> UnSetChild(ChGNode);
263// ChGNode->GetFather(1)->UnSetChild(ChGNode);
264 }
265 L.ForgetAttribute ( XCAFDoc::LayerRefGUID() );
266 }
267}
268
269
270//=======================================================================
271//function : UnSetOneLayer
272//purpose :
273//=======================================================================
274
275Standard_Boolean XCAFDoc_LayerTool::UnSetOneLayer(const TDF_Label& L,
276 const TCollection_ExtendedString& aLayer) const
277{
278 TDF_Label alab;
279 if ( !FindLayer(aLayer, alab) ) return Standard_False;
a28d5778
RL
280 return UnSetOneLayer (L, alab);
281}
282
283//=======================================================================
284//function : UnSetOneLayer
285//purpose :
286//=======================================================================
287
288Standard_Boolean XCAFDoc_LayerTool::UnSetOneLayer(const TDF_Label& L,
289 const TDF_Label& aLayerL) const
290{
7fd59977 291 Handle(XCAFDoc_GraphNode) FGNode, ChGNode;
292 if ( !L.FindAttribute (XCAFDoc::LayerRefGUID(), ChGNode) ) return Standard_False;
a28d5778 293 if ( !aLayerL.FindAttribute (XCAFDoc::LayerRefGUID(), FGNode) ) return Standard_False;
7fd59977 294 ChGNode->UnSetFather(FGNode);
295 return Standard_True;
296}
a28d5778 297
7fd59977 298//=======================================================================
299//function : IsSet
300//purpose :
301//=======================================================================
302
303Standard_Boolean XCAFDoc_LayerTool::IsSet(const TDF_Label& L,
304 const TCollection_ExtendedString& aLayer) const
305{
306 Handle(XCAFDoc_GraphNode) Node;
307 Handle(TDataStd_Name) aName;
308 TDF_Label lab;
309 if (L.FindAttribute(XCAFDoc::LayerRefGUID(), Node) && (Node->NbFathers() != 0 ) ) {
310 Standard_Integer i = 1;
311 for (; i <= Node->NbFathers(); i++) {
312 lab = Node->GetFather(i)->Label();
313 if (lab.FindAttribute(TDataStd_Name::GetID(), aName) && ( aName->Get().IsEqual(aLayer) ) )
314 return Standard_True;
315 }
316 }
317 return Standard_False;
318}
319
320
a28d5778
RL
321//=======================================================================
322//function : IsSet
323//purpose :
324//=======================================================================
325
326Standard_Boolean XCAFDoc_LayerTool::IsSet(const TDF_Label& L,
327 const TDF_Label& aLayerL) const
328{
329 Handle(XCAFDoc_GraphNode) Node;
330 Handle(TDataStd_Name) aName;
331 TDF_Label lab;
332 if (L.FindAttribute(XCAFDoc::LayerRefGUID(), Node) && (Node->NbFathers() != 0 ) ) {
333 Standard_Integer i = 1;
334 for (; i <= Node->NbFathers(); i++) {
335 lab = Node->GetFather(i)->Label();
336 if (lab == aLayerL)
337 return Standard_True;
338 }
339 }
340 return Standard_False;
341}
342
7fd59977 343//=======================================================================
344//function : GetLayers
345//purpose :
346//=======================================================================
347
348Standard_Boolean XCAFDoc_LayerTool::GetLayers(const TDF_Label& L,
349 Handle(TColStd_HSequenceOfExtendedString)& aLayerS)
350{
351 aLayerS = GetLayers(L);
a28d5778 352 return (aLayerS->Length() != 0);
7fd59977 353}
354
7fd59977 355//=======================================================================
356//function : GetLayers
357//purpose :
358//=======================================================================
359
a28d5778
RL
360Standard_Boolean XCAFDoc_LayerTool::GetLayers(const TDF_Label& L,
361 TDF_LabelSequence& aLayerLS)
7fd59977 362{
a28d5778 363 aLayerLS.Clear();
7fd59977 364 Handle(XCAFDoc_GraphNode) aGNode;
365 if ( L.FindAttribute( XCAFDoc::LayerRefGUID(), aGNode) ) {
a28d5778
RL
366 for (Standard_Integer i = 1; i <= aGNode->NbFathers(); i++) {
367 aLayerLS.Append (aGNode->GetFather(i)->Label());
7fd59977 368 }
a28d5778
RL
369 }
370 return aLayerLS.Length() > 0;
371}
372
373//=======================================================================
374//function : GetLayers
375//purpose :
376//=======================================================================
377
378Handle(TColStd_HSequenceOfExtendedString) XCAFDoc_LayerTool::GetLayers(const TDF_Label& L)
379{
380 Handle(TColStd_HSequenceOfExtendedString) aLayerS = new TColStd_HSequenceOfExtendedString;
381 TDF_LabelSequence aLayerLS;
382 if ( GetLayers( L, aLayerLS ) ) {
383 for (Standard_Integer i = 1; i <= aLayerLS.Length(); ++i) {
384 const TDF_Label& aLab = aLayerLS(i);
385 Handle(TDataStd_Name) aName;
386 if ( aLab.FindAttribute( TDataStd_Name::GetID(), aName ) ) {
387 aLayerS->Append( aName->Get() );
7fd59977 388 }
389 }
390 }
391 return aLayerS;
392}
393
394//=======================================================================
395//function : GetShapesOfLayer
396//purpose :
397//=======================================================================
398
399void XCAFDoc_LayerTool::GetShapesOfLayer(const TDF_Label& layerL,
400 TDF_LabelSequence& ShLabels) const
401{
402 ShLabels.Clear();
403 Handle(XCAFDoc_GraphNode) aGNode;
404 if ( layerL.FindAttribute( XCAFDoc::LayerRefGUID(), aGNode) ) {
405 for (Standard_Integer i = 1; i <= aGNode->NbChildren(); i++) {
406 ShLabels.Append( aGNode->GetChild(i)->Label() );
407 }
408 }
409}
410
411
412//=======================================================================
413//function : IsVisible
414//purpose :
415//=======================================================================
416
417Standard_Boolean XCAFDoc_LayerTool::IsVisible (const TDF_Label& layerL) const
418{
419 Handle(TDataStd_UAttribute) aUAttr;
420 return (!layerL.FindAttribute(XCAFDoc::InvisibleGUID(), aUAttr));
421}
422
423
424//=======================================================================
425//function : SetVisibility
426//purpose :
427//=======================================================================
428
429void XCAFDoc_LayerTool::SetVisibility (const TDF_Label& layerL,
430 const Standard_Boolean isvisible) const
431{
432 Handle(TDataStd_UAttribute) aUAttr;
433 if (! isvisible ) {
434 if (!layerL.FindAttribute(XCAFDoc::InvisibleGUID(), aUAttr)) {
435 aUAttr->Set( layerL, XCAFDoc::InvisibleGUID() );
436 }
437 }
438 else layerL.ForgetAttribute( XCAFDoc::InvisibleGUID() );
439}
440
441
442//=======================================================================
443//function : SetLayer
444//purpose :
445//=======================================================================
446
447Standard_Boolean XCAFDoc_LayerTool::SetLayer(const TopoDS_Shape& Sh,
448 const TDF_Label& LayerL,
449 const Standard_Boolean shapeInOneLayer)
450{
451 TDF_Label aLab;
452// if (! myShapeTool->FindShape(Sh, aLab) ) return Standard_False;
453 // PTV 22.01.2003 set layer for shape with location if it is necessary
454 if (! myShapeTool->Search( Sh, aLab ) ) return Standard_False;
455 SetLayer(aLab, LayerL, shapeInOneLayer);
456 return Standard_True;
457}
458
459
460//=======================================================================
461//function : SetLayer
462//purpose :
463//=======================================================================
464
465Standard_Boolean XCAFDoc_LayerTool::SetLayer(const TopoDS_Shape& Sh,
466 const TCollection_ExtendedString& aLayer,
467 const Standard_Boolean shapeInOneLayer)
468{
469 TDF_Label aLayerL = AddLayer(aLayer);
470 return SetLayer(Sh, aLayerL, shapeInOneLayer);
471}
472
473
474//=======================================================================
475//function : UnSetLayers
476//purpose :
477//=======================================================================
478
479Standard_Boolean XCAFDoc_LayerTool::UnSetLayers(const TopoDS_Shape& Sh)
480{
481 TDF_Label aLab;
482 if (! myShapeTool->FindShape(Sh, aLab) ) return Standard_False;
483 UnSetLayers(aLab);
484 return Standard_True;
485}
486
487
488//=======================================================================
489//function : UnSetOneLayer
490//purpose :
491//=======================================================================
492
493Standard_Boolean XCAFDoc_LayerTool::UnSetOneLayer(const TopoDS_Shape& Sh,
494 const TCollection_ExtendedString& aLayer)
495{
496 TDF_Label aLab;
497 if (! myShapeTool->FindShape(Sh, aLab) ) return Standard_False;
498 return UnSetOneLayer(aLab, aLayer);
499}
500
a28d5778
RL
501//=======================================================================
502//function : UnSetOneLayer
503//purpose :
504//=======================================================================
505
506Standard_Boolean XCAFDoc_LayerTool::UnSetOneLayer(const TopoDS_Shape& Sh,
507 const TDF_Label& aLayerL)
508{
509 TDF_Label aLab;
510 if (! myShapeTool->FindShape(Sh, aLab) ) return Standard_False;
511 return UnSetOneLayer(aLab, aLayerL);
512}
513
7fd59977 514//=======================================================================
515//function : IsSet
516//purpose :
517//=======================================================================
518
519Standard_Boolean XCAFDoc_LayerTool::IsSet(const TopoDS_Shape& Sh,
520 const TCollection_ExtendedString& aLayer)
521{
522 TDF_Label aLab;
523 if (! myShapeTool->FindShape(Sh, aLab) ) return Standard_False;
524 return IsSet(aLab, aLayer);
525}
526
527
a28d5778
RL
528//=======================================================================
529//function : IsSet
530//purpose :
531//=======================================================================
532
533Standard_Boolean XCAFDoc_LayerTool::IsSet(const TopoDS_Shape& Sh,
534 const TDF_Label& aLayerL)
535{
536 TDF_Label aLab;
537 if (! myShapeTool->FindShape(Sh, aLab) ) return Standard_False;
538 return IsSet(aLab, aLayerL);
539}
540
7fd59977 541//=======================================================================
542//function : GetLayers
543//purpose :
544//=======================================================================
545
546Standard_Boolean XCAFDoc_LayerTool::GetLayers(const TopoDS_Shape& Sh,
547 Handle(TColStd_HSequenceOfExtendedString)& aLayerS)
548{
549 TDF_Label aLab;
550 if (! myShapeTool->FindShape(Sh, aLab) ) return Standard_False;
551 return GetLayers(aLab, aLayerS);
552}
553
a28d5778
RL
554//=======================================================================
555//function : GetLayers
556//purpose :
557//=======================================================================
558
559Standard_Boolean XCAFDoc_LayerTool::GetLayers(const TopoDS_Shape& Sh,
560 TDF_LabelSequence& aLayerLS)
561{
562 TDF_Label aLab;
563 if (! myShapeTool->FindShape(Sh, aLab) ) return Standard_False;
564 return GetLayers(aLab, aLayerLS);
565}
566
7fd59977 567
568//=======================================================================
569//function : GetLayers
570//purpose :
571//=======================================================================
572
573Handle(TColStd_HSequenceOfExtendedString) XCAFDoc_LayerTool::GetLayers(const TopoDS_Shape& Sh)
574{
575 Handle(TColStd_HSequenceOfExtendedString) aLayerS = new TColStd_HSequenceOfExtendedString;
576 TDF_Label aLab;
577 if ( myShapeTool->FindShape(Sh, aLab) )
578 aLayerS = GetLayers(aLab);
579 return aLayerS;
580}
581
582
583//=======================================================================
584//function : ID
585//purpose :
586//=======================================================================
587
588const Standard_GUID& XCAFDoc_LayerTool::ID() const
589{
590 return GetID();
591}
592
593
594//=======================================================================
595//function : Restore
596//purpose :
597//=======================================================================
598
599void XCAFDoc_LayerTool::Restore(const Handle(TDF_Attribute)& /* with */)
600{
601}
602
603
604//=======================================================================
605//function : NewEmpty
606//purpose :
607//=======================================================================
608
609Handle(TDF_Attribute) XCAFDoc_LayerTool::NewEmpty() const
610{
611 return new XCAFDoc_LayerTool;
612}
613
614
615//=======================================================================
616//function : Paste
617//purpose :
618//=======================================================================
619
620void XCAFDoc_LayerTool::Paste(const Handle(TDF_Attribute)& /* into */,
621 const Handle(TDF_RelocationTable)& /* RT */) const
622{
623}
624