Salome HOME
Merge branch 'master' of newgeom:newgeom
[modules/shaper.git] / src / Model / Model_Iterator.cpp
1 // File:        Model_Iterator.hxx
2 // Created:     1 Apr 2014
3 // Author:      Mikhail PONIKAROV
4
5 #include "Model_Iterator.h"
6 #include "Model_Document.h"
7 #include "ModelAPI_Feature.h"
8 #include "Model_Data.h"
9 #include <TDataStd_Comment.hxx>
10 #include <TDataStd_Name.hxx>
11
12 using namespace std;
13
14 void Model_Iterator::next()
15 {
16   return myIter.Next();
17 }
18
19 bool Model_Iterator::more()
20 {
21   return myIter.More() == Standard_True;
22 }
23
24 shared_ptr<ModelAPI_Feature> Model_Iterator::current()
25 {
26   TDF_Label aLab = myIter.Value()->Label();
27   return myDoc->feature(aLab);
28 }
29
30 string Model_Iterator::currentKind()
31 {
32   return string(TCollection_AsciiString(
33     Handle(TDataStd_Comment)::DownCast(myIter.Value())->Get()).ToCString());
34 }
35
36 string Model_Iterator::currentName()
37 {
38   TDF_Label aLab = myIter.Value()->Label();
39   Handle(TDataStd_Name) aName;
40   if (aLab.FindAttribute(TDataStd_Name::GetID(), aName))
41     return string(TCollection_AsciiString(aName->Get()).ToCString());
42   return ""; // name is not found
43 }
44
45 int Model_Iterator::numIterationsLeft()
46 {
47   int aResult = 0;
48   TDF_ChildIDIterator aTempIter(myIter);
49   for(; aTempIter.More(); aTempIter.Next())
50     aResult++;
51   return aResult;
52 }
53
54 bool Model_Iterator::isEqual(std::shared_ptr<ModelAPI_Feature> theFeature)
55 {
56   return (myIter.Value()->Label() == 
57     dynamic_pointer_cast<Model_Data>(theFeature->data())->label()) == Standard_True;
58
59 }
60
61 Model_Iterator::Model_Iterator()
62 {
63 }
64
65 Model_Iterator::Model_Iterator(std::shared_ptr<Model_Document> theDoc, TDF_Label theLab)
66   : myDoc(theDoc), myIter(theLab, TDataStd_Comment::GetID(), Standard_False)
67 {}