0031668: Visualization - WebGL sample doesn't work on Emscripten 1.39
[occt.git] / src / TObj / TObj_ModelIterator.cxx
CommitLineData
b311480e 1// Created on: 2004-11-23
2// Created by: Pavel TELKOV
973c2be1 3// Copyright (c) 2004-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.
b311480e 15
7fd59977 16// The original implementation Copyright: (C) RINA S.p.A
17
18#include <TObj_ModelIterator.hxx>
19
20#include <TObj_Model.hxx>
21
7fd59977 22
92efcf78 23IMPLEMENT_STANDARD_RTTIEXT(TObj_ModelIterator,TObj_ObjectIterator)
24
7fd59977 25//=======================================================================
26//function : Constructor
27//purpose :
28//=======================================================================
29
30TObj_ModelIterator::TObj_ModelIterator(const Handle(TObj_Model)& theModel)
31{
32 myObject = theModel->GetRoot();
33 if ( ! myObject.IsNull() )
34 addIterator(myObject);
35}
36
37//=======================================================================
38//function : addIterator
39//purpose :
40//=======================================================================
41
42void TObj_ModelIterator::addIterator(const Handle(TObj_Object)& theObj)
43{
44 Handle(TObj_ObjectIterator) anIter = theObj->GetChildren();
45 if (anIter.IsNull() )
46 return; // object has no children.
47 myIterSeq.Append(anIter);
48}
49
50//=======================================================================
51//function : More
52//purpose :
53//=======================================================================
54
55Standard_Boolean TObj_ModelIterator::More() const
56{
57 return ! myObject.IsNull();
58}
59
60//=======================================================================
61//function : Value
62//purpose :
63//=======================================================================
64
65Handle(TObj_Object) TObj_ModelIterator::Value() const
66{
67 return myObject;
68}
69
70//=======================================================================
71//function : Next
72//purpose :
73//=======================================================================
74
75void TObj_ModelIterator::Next()
76{
77 myObject.Nullify();
78 while ( myIterSeq.Length() >0 )
79 {
80 if ( myIterSeq.Last()->More() )
81 {
82 myObject = myIterSeq.Last()->Value();
83 myIterSeq.Last()->Next();
84 addIterator ( myObject );
85 return;
86 }
87 else myIterSeq.Remove(myIterSeq.Length());
88 }
89}