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)
9 #include <OCAFSample_CommonDriver.ixx>
10 #include <OCAFSample_ICommon.hxx>
11 #include <OCAFSample_IShape.hxx>
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>
22 #include <BRepNaming_Common.hxx>
24 #include <TDataStd_TreeNode.hxx>
27 #include <BRepAlgo.hxx>
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
38 IMPLEMENT_STANDARD_RTTIEXT (OCAFSample_CommonDriver, OCAFSample_Driver)
40 //=======================================================================
41 //function : Constructor
43 //=======================================================================
45 OCAFSample_CommonDriver::OCAFSample_CommonDriver()
49 //=======================================================================
52 //=======================================================================
54 Standard_Integer OCAFSample_CommonDriver::Execute(Handle(TFunction_Logbook)& theLogbook) const
56 Handle(TDF_Reference) aReference;
57 TopoDS_Shape aMaster, aTool;
59 Handle(TDataStd_TreeNode) aNode;
60 if(!Label().FindAttribute(TDataStd_TreeNode::GetDefaultTreeID(), aNode)) return TREENODE_NOT_FOUND;
62 OCAFSample_ICommon anInterface(aNode);
63 aMaster = anInterface.GetContext();
64 aTool = anInterface.GetTool();
66 BRepAlgoAPI_Common mkCommon(aMaster, aTool);
67 if (!mkCommon.IsDone()) return OPERATION_NOT_DONE;
68 if (mkCommon.Shape().IsNull()) return NULL_OPERATION;
69 if (!BRepAlgo::IsValid(mkCommon.Shape()))
70 return OPERATION_NOT_DONE;
74 TDF_Label ResultLabel = Label().FindChild(RESULTS_TAG);
76 BRepNaming_Common aNaming(ResultLabel);
77 aNaming.Load(mkCommon);
79 OCAFSample_IShape::AddLabels(aNode, theLogbook);
81 TDocStd_Modified::Add(aNode->Father()->Label());
83 theLogbook->SetImpacted(Label());
84 TDocStd_Modified::Add(Label());
86 theLogbook->SetImpacted(ResultLabel);
88 TDF_ChildIterator anIterator(ResultLabel);
89 for(; anIterator.More(); anIterator.Next()) {
90 theLogbook->SetImpacted(anIterator.Value());