Integration of OCCT 6.5.0 from SVN
[occt.git] / samples / mfc / standard / 06_Ocaf / src / OCAFSample_CommonDriver.cxx
1 // File:        OCAFSample_CommonDriver.cxx
2 // Created:     Wed Feb 13 18:24:21 2002
3 // Author:      Michael KUZMITCHEV
4 //              <mkv@russox.nnov.matra-dtv.fr>
5 //Modified by:  Sergey RUIN (Naming)
6
7 #include "stdafx.h"
8
9 #include <OCAFSample_CommonDriver.ixx>
10 #include <OCAFSample_ICommon.hxx>
11 #include <OCAFSample_IShape.hxx>
12
13 #include "Tags.h"
14
15 #include <BRepAlgoAPI_Common.hxx>
16 #include <TDF_Reference.hxx>
17 #include <TDocStd_Modified.hxx>
18 #include <TNaming_Builder.hxx>
19 #include <TNaming_NamedShape.hxx>
20 #include <TopoDS_Shape.hxx>
21
22 #include <BRepNaming_Common.hxx>
23
24 #include <TDataStd_TreeNode.hxx>
25 //#include <.hxx>
26
27 #include <BRepAlgo.hxx>
28
29 #define OK_OPERATION 0
30 #define TREENODE_NOT_FOUND 1
31 #define LABEL_NOT_FOUND 2
32 #define NAMED_SHAPE_NOT_FOUND 3
33 #define NAMED_SHAPE_EMPTY 4
34 #define OPERATION_NOT_DONE 8
35 #define NULL_OPERATION 9
36
37 //=======================================================================
38 //function : Constructor
39 //purpose  :
40 //=======================================================================
41
42 OCAFSample_CommonDriver::OCAFSample_CommonDriver()
43 {
44 }
45
46 //=======================================================================
47 //function : Execute
48 //purpose  :
49 //=======================================================================
50
51 Standard_Integer OCAFSample_CommonDriver::Execute(TFunction_Logbook& theLogbook) const
52 {
53   Handle(TDF_Reference) aReference;
54   TopoDS_Shape aMaster, aTool;
55
56   Handle(TDataStd_TreeNode) aNode;
57   if(!Label().FindAttribute(TDataStd_TreeNode::GetDefaultTreeID(), aNode)) return TREENODE_NOT_FOUND;
58
59   OCAFSample_ICommon anInterface(aNode);
60   aMaster = anInterface.GetContext();
61   aTool = anInterface.GetTool();
62
63   BRepAlgoAPI_Common mkCommon(aMaster, aTool);
64   if (!mkCommon.IsDone()) return OPERATION_NOT_DONE;
65   if (mkCommon.Shape().IsNull()) return NULL_OPERATION;
66   if (!BRepAlgo::IsValid(mkCommon.Shape()))
67           return OPERATION_NOT_DONE;
68
69
70   // Name result
71   TDF_Label ResultLabel = Label().FindChild(RESULTS_TAG);
72   
73   BRepNaming_Common aNaming(ResultLabel);
74   aNaming.Load(mkCommon);
75
76   OCAFSample_IShape::AddLabels(aNode, theLogbook);
77
78   TDocStd_Modified::Add(aNode->Father()->Label());
79
80   theLogbook.SetImpacted(Label());
81   TDocStd_Modified::Add(Label());  
82
83   theLogbook.SetImpacted(ResultLabel);
84
85   TDF_ChildIterator anIterator(ResultLabel);
86   for(; anIterator.More(); anIterator.Next()) {
87     theLogbook.SetImpacted(anIterator.Value());
88   }  
89
90   return OK_OPERATION;
91 }