0026005: Problem with transient TFunction_Logbook
authorvro <vro@opencascade.com>
Tue, 24 Nov 2015 05:56:17 +0000 (08:56 +0300)
committerbugmaster <bugmaster@opencascade.com>
Fri, 27 Nov 2015 07:08:24 +0000 (10:08 +0300)
44 files changed:
samples/mfc/standard/06_Ocaf/src/OCAFSample_CommonDriver.cxx
samples/mfc/standard/06_Ocaf/src/OCAFSample_CommonDriver.hxx
samples/mfc/standard/06_Ocaf/src/OCAFSample_Driver.hxx
samples/mfc/standard/06_Ocaf/src/OcafDoc.cpp
samples/mfc/standard/06_Ocaf/src/TOcafFunction_BoxDriver.cxx
samples/mfc/standard/06_Ocaf/src/TOcafFunction_BoxDriver.hxx
samples/mfc/standard/06_Ocaf/src/TOcafFunction_CutDriver.cxx
samples/mfc/standard/06_Ocaf/src/TOcafFunction_CutDriver.hxx
samples/mfc/standard/06_Ocaf/src/TOcafFunction_CylDriver.cxx
samples/mfc/standard/06_Ocaf/src/TOcafFunction_CylDriver.hxx
samples/mfc/standard/06_Ocaf/src/TOcaf_Commands.cxx
samples/mfc/standard/06_Ocaf/src/TOcaf_Commands.hxx
src/DNaming/DNaming_BooleanOperationDriver.cxx
src/DNaming/DNaming_BooleanOperationDriver.hxx
src/DNaming/DNaming_BoxDriver.cxx
src/DNaming/DNaming_BoxDriver.hxx
src/DNaming/DNaming_CylinderDriver.cxx
src/DNaming/DNaming_CylinderDriver.hxx
src/DNaming/DNaming_FilletDriver.cxx
src/DNaming/DNaming_FilletDriver.hxx
src/DNaming/DNaming_Line3DDriver.cxx
src/DNaming/DNaming_Line3DDriver.hxx
src/DNaming/DNaming_ModelingCommands.cxx
src/DNaming/DNaming_PointDriver.cxx
src/DNaming/DNaming_PointDriver.hxx
src/DNaming/DNaming_PrismDriver.cxx
src/DNaming/DNaming_PrismDriver.hxx
src/DNaming/DNaming_RevolutionDriver.cxx
src/DNaming/DNaming_RevolutionDriver.hxx
src/DNaming/DNaming_SelectionDriver.cxx
src/DNaming/DNaming_SelectionDriver.hxx
src/DNaming/DNaming_SphereDriver.cxx
src/DNaming/DNaming_SphereDriver.hxx
src/DNaming/DNaming_TransformationDriver.cxx
src/DNaming/DNaming_TransformationDriver.hxx
src/TFunction/TFunction_Driver.cxx
src/TFunction/TFunction_Driver.hxx
src/TFunction/TFunction_IFunction.cxx
src/TFunction/TFunction_IFunction.hxx
src/TFunction/TFunction_Logbook.cxx
src/TFunction/TFunction_Logbook.hxx
src/TFunction/TFunction_Logbook.lxx
src/TFunction/TFunction_Scope.cxx
src/TFunction/TFunction_Scope.hxx

index eb4278a..07d1ac9 100755 (executable)
@@ -48,7 +48,7 @@ OCAFSample_CommonDriver::OCAFSample_CommonDriver()
 //purpose  :
 //=======================================================================
 
-Standard_Integer OCAFSample_CommonDriver::Execute(TFunction_Logbook& theLogbook) const
+Standard_Integer OCAFSample_CommonDriver::Execute(Handle(TFunction_Logbook)& theLogbook) const
 {
   Handle(TDF_Reference) aReference;
   TopoDS_Shape aMaster, aTool;
@@ -77,14 +77,14 @@ Standard_Integer OCAFSample_CommonDriver::Execute(TFunction_Logbook& theLogbook)
 
   TDocStd_Modified::Add(aNode->Father()->Label());
 
-  theLogbook.SetImpacted(Label());
+  theLogbook->SetImpacted(Label());
   TDocStd_Modified::Add(Label());  
 
-  theLogbook.SetImpacted(ResultLabel);
+  theLogbook->SetImpacted(ResultLabel);
 
   TDF_ChildIterator anIterator(ResultLabel);
   for(; anIterator.More(); anIterator.Next()) {
-    theLogbook.SetImpacted(anIterator.Value());
+    theLogbook->SetImpacted(anIterator.Value());
   }  
 
   return OK_OPERATION;
index 6baa193..7a2d860 100755 (executable)
@@ -55,7 +55,7 @@ public:
  // Methods PUBLIC
  // 
 Standard_EXPORT OCAFSample_CommonDriver();
-Standard_EXPORT virtual  Standard_Integer Execute(TFunction_Logbook& theLogbook) const;
+Standard_EXPORT virtual  Standard_Integer Execute(Handle(TFunction_Logbook)& theLogbook) const;
 Standard_EXPORT ~OCAFSample_CommonDriver();
 
 
index 6378870..704f37b 100755 (executable)
@@ -59,8 +59,8 @@ public:
  // Methods PUBLIC
  // 
 Standard_EXPORT   void Validate(TFunction_Logbook& log) const;
-Standard_EXPORT virtual  Standard_Boolean MustExecute(const TFunction_Logbook& log) const;
-Standard_EXPORT virtual  Standard_Integer Execute(TFunction_Logbook& log) const;
+Standard_EXPORT virtual  Standard_Boolean MustExecute(const Handle(TFunction_Logbook)& log) const;
+Standard_EXPORT virtual  Standard_Integer Execute(Handle(TFunction_Logbook)& log) const;
 Standard_EXPORT virtual  Standard_Boolean Arguments(TDF_LabelMap& theArgs) const;
 Standard_EXPORT virtual  Standard_Boolean Results(TDF_LabelMap& theRes) const;
 Standard_EXPORT ~OCAFSample_Driver();
index acd6e09..0ef62ed 100755 (executable)
@@ -336,7 +336,7 @@ void COcafDoc::OnModify()
        Standard_GUID myDriverID=TFF->GetDriverGUID();
 
        Handle(TDocStd_Document) D = GetOcafDoc();
-       TFunction_Logbook log;
+       Handle(TFunction_Logbook) log = TFunction_Logbook::Set(D->Main());
 
        TCollection_AsciiString Message("\
 //  Modification and recomputation of the selected object \n\
@@ -607,7 +607,7 @@ D->CommitCommand(); \n\
                // Recompute the cut object if it must be (look at the MustExecute function code)
 //             if (myCutDriver->MustExecute(log))
 //             {
-                       log.SetTouched(LabObject);
+                       log->SetTouched(LabObject);
                        if(myCutDriver->Execute(log))
                                MessageBoxW (AfxGetApp()->m_pMainWnd->m_hWnd, L"Recompute failed", L"Modify cut", MB_ICONEXCLAMATION);
 //             }
index e976b41..3a2c35d 100755 (executable)
@@ -37,10 +37,10 @@ TOcafFunction_BoxDriver::TOcafFunction_BoxDriver()
 //purpose  : Validation of the object label, its arguments and its results.
 //=======================================================================
 
-void TOcafFunction_BoxDriver::Validate(TFunction_Logbook& log) const
+void TOcafFunction_BoxDriver::Validate(Handle(TFunction_Logbook)& log) const
 {
   // We validate the object label ( Label() ), all the arguments and the results of the object:
-  log.SetValid(Label(), Standard_True);
+  log->SetValid(Label(), Standard_True);
 }
 
 //=======================================================================
@@ -49,10 +49,10 @@ void TOcafFunction_BoxDriver::Validate(TFunction_Logbook& log) const
 //         : be invoked. If the object label or an argument is modified,
 //         : we must recompute the object - to call the method Execute().
 //=======================================================================
-Standard_Boolean TOcafFunction_BoxDriver::MustExecute(const TFunction_Logbook& log) const
+Standard_Boolean TOcafFunction_BoxDriver::MustExecute(const Handle(TFunction_Logbook)& log) const
 {
        // If the object's label is modified:
-  if (log.IsModified(Label())) return Standard_True; 
+  if (log->IsModified(Label())) return Standard_True; 
 
   // Cut (in our simple case) has two arguments: The original shape, and the tool shape.
   // They are on the child labels of the box's label:
@@ -60,12 +60,12 @@ Standard_Boolean TOcafFunction_BoxDriver::MustExecute(const TFunction_Logbook& l
   //     ToolNShape - is attached to the second child label.
   // 
   // Let's check them:
-  if (log.IsModified(Label().FindChild(1))) return Standard_True; // width.
-  if (log.IsModified(Label().FindChild(2))) return Standard_True; // length,
-  if (log.IsModified(Label().FindChild(3))) return Standard_True; // width.
-  if (log.IsModified(Label().FindChild(4))) return Standard_True; // length,
-  if (log.IsModified(Label().FindChild(5))) return Standard_True; // width.
-  if (log.IsModified(Label().FindChild(6))) return Standard_True; // length,
+  if (log->IsModified(Label().FindChild(1))) return Standard_True; // width.
+  if (log->IsModified(Label().FindChild(2))) return Standard_True; // length,
+  if (log->IsModified(Label().FindChild(3))) return Standard_True; // width.
+  if (log->IsModified(Label().FindChild(4))) return Standard_True; // length,
+  if (log->IsModified(Label().FindChild(5))) return Standard_True; // width.
+  if (log->IsModified(Label().FindChild(6))) return Standard_True; // length,
   
  // if there are no any modifications concerned the box,
   // it's not necessary to recompute (to call the method Execute()):
@@ -83,7 +83,7 @@ Standard_Boolean TOcafFunction_BoxDriver::MustExecute(const TFunction_Logbook& l
 //         : if there are no any mistakes occurred we return 0:
 //         : 0 - no mistakes were found.
 //=======================================================================
-Standard_Integer TOcafFunction_BoxDriver::Execute(TFunction_Logbook& /*log*/) const
+Standard_Integer TOcafFunction_BoxDriver::Execute(Handle(TFunction_Logbook)& /*log*/) const
 {
        // Get the values of dimension and position attributes 
        Handle(TDataStd_Real) TSR;
index 48fd044..d249ad9 100755 (executable)
@@ -56,9 +56,9 @@ public:
  // 
 Standard_EXPORT static const Standard_GUID& GetID() ;
 Standard_EXPORT TOcafFunction_BoxDriver();
-Standard_EXPORT virtual  void Validate(TFunction_Logbook& log) const;
-Standard_EXPORT virtual  Standard_Boolean MustExecute(const TFunction_Logbook& log) const;
-Standard_EXPORT virtual  Standard_Integer Execute(TFunction_Logbook& log) const;
+Standard_EXPORT virtual  void Validate(Handle(TFunction_Logbook)& log) const;
+Standard_EXPORT virtual  Standard_Boolean MustExecute(const Handle(TFunction_Logbook)& log) const;
+Standard_EXPORT virtual  Standard_Integer Execute(Handle(TFunction_Logbook)& log) const;
 Standard_EXPORT ~TOcafFunction_BoxDriver();
 
 
index 0731e03..88fa765 100755 (executable)
@@ -42,10 +42,10 @@ TOcafFunction_CutDriver::TOcafFunction_CutDriver()
 //purpose  : Validation of the object label, its arguments and its results.
 //=======================================================================
 
-void TOcafFunction_CutDriver::Validate(TFunction_Logbook& log) const
+void TOcafFunction_CutDriver::Validate(Handle(TFunction_Logbook)& log) const
 {
   // We validate the object label ( Label() ), all the arguments and the results of the object:
-  log.SetValid(Label(), Standard_True);
+  log->SetValid(Label(), Standard_True);
 }
 
 //=======================================================================
@@ -55,10 +55,10 @@ void TOcafFunction_CutDriver::Validate(TFunction_Logbook& log) const
 //         : we must recompute the object - to call the method Execute().
 //=======================================================================
 
-Standard_Boolean TOcafFunction_CutDriver::MustExecute(const TFunction_Logbook& log) const
+Standard_Boolean TOcafFunction_CutDriver::MustExecute(const Handle(TFunction_Logbook)& log) const
 {
   // If the object's label is modified:
-  if (log.IsModified(Label())) return Standard_True; 
+  if (log->IsModified(Label())) return Standard_True; 
 
   // Cut (in our simple case) has two arguments: The original shape, and the tool shape.
   // They are on the child labels of the cut's label:
@@ -76,11 +76,11 @@ Standard_Boolean TOcafFunction_CutDriver::MustExecute(const TFunction_Logbook& l
   TDF_Tool::Entry(Label(), aEntry);
   cout << "Entry: "<<aEntry.ToCString()<<endl;
   Label().FindChild(1).FindAttribute(TDF_Reference::GetID(),OriginalRef);
-  if (log.IsModified(OriginalRef->Get()))   return Standard_True; // Original shape.
+  if (log->IsModified(OriginalRef->Get()))   return Standard_True; // Original shape.
 
   Handle(TDF_Reference) ToolRef;
   Label().FindChild(2).FindAttribute(TDF_Reference::GetID(),ToolRef);
-  if (log.IsModified(ToolRef->Get()))   return Standard_True; // Tool shape.
+  if (log->IsModified(ToolRef->Get()))   return Standard_True; // Tool shape.
   
   // if there are no any modifications concerned the cut,
   // it's not necessary to recompute (to call the method Execute()):
@@ -99,7 +99,7 @@ Standard_Boolean TOcafFunction_CutDriver::MustExecute(const TFunction_Logbook& l
 //         : 0 - no mistakes were found.
 //=======================================================================
 
-Standard_Integer TOcafFunction_CutDriver::Execute(TFunction_Logbook& /*log*/) const
+Standard_Integer TOcafFunction_CutDriver::Execute(Handle(TFunction_Logbook)& /*log*/) const
 {
   // Let's get the arguments (OriginalNShape, ToolNShape of the object):
 
index 098a1e6..da7ab59 100755 (executable)
@@ -56,9 +56,9 @@ public:
  // 
 Standard_EXPORT static const Standard_GUID& GetID() ;
 Standard_EXPORT TOcafFunction_CutDriver();
-Standard_EXPORT virtual  void Validate(TFunction_Logbook& log) const;
-Standard_EXPORT virtual  Standard_Boolean MustExecute(const TFunction_Logbook& log) const;
-Standard_EXPORT virtual  Standard_Integer Execute(TFunction_Logbook& log) const;
+Standard_EXPORT virtual  void Validate(Handle(TFunction_Logbook)& log) const;
+Standard_EXPORT virtual  Standard_Boolean MustExecute(const Handle(TFunction_Logbook)& log) const;
+Standard_EXPORT virtual  Standard_Integer Execute(Handle(TFunction_Logbook)& log) const;
 Standard_EXPORT ~TOcafFunction_CutDriver();
 
 
index ea5a9b2..467f149 100755 (executable)
@@ -39,10 +39,10 @@ TOcafFunction_CylDriver::TOcafFunction_CylDriver()
 //purpose  : Validation of the object label, its arguments and its results.
 //=======================================================================
 
-void TOcafFunction_CylDriver::Validate(TFunction_Logbook& log) const
+void TOcafFunction_CylDriver::Validate(Handle(TFunction_Logbook)& log) const
 {
   // We validate the object label ( Label() ), all the arguments and the results of the object:
-  log.SetValid(Label(), Standard_True);
+  log->SetValid(Label(), Standard_True);
 }
 
 //=======================================================================
@@ -51,19 +51,19 @@ void TOcafFunction_CylDriver::Validate(TFunction_Logbook& log) const
 //         : be invoked. If the object label or an argument is modified,
 //         : we must recompute the object - to call the method Execute().
 //=======================================================================
-Standard_Boolean TOcafFunction_CylDriver::MustExecute(const TFunction_Logbook& log) const
+Standard_Boolean TOcafFunction_CylDriver::MustExecute(const Handle(TFunction_Logbook)& log) const
 {
        // If the object's label is modified:
-  if (log.IsModified(Label())) return Standard_True; 
+  if (log->IsModified(Label())) return Standard_True; 
 
   // Cylinder (in our simple case) has 5 arguments: 
   // 
   // Let's check them:
-  if (log.IsModified(Label().FindChild(1))) return Standard_True; // radius.
-  if (log.IsModified(Label().FindChild(2))) return Standard_True; // height,
-  if (log.IsModified(Label().FindChild(3))) return Standard_True; // x.
-  if (log.IsModified(Label().FindChild(4))) return Standard_True; // y,
-  if (log.IsModified(Label().FindChild(5))) return Standard_True; // z.
+  if (log->IsModified(Label().FindChild(1))) return Standard_True; // radius.
+  if (log->IsModified(Label().FindChild(2))) return Standard_True; // height,
+  if (log->IsModified(Label().FindChild(3))) return Standard_True; // x.
+  if (log->IsModified(Label().FindChild(4))) return Standard_True; // y,
+  if (log->IsModified(Label().FindChild(5))) return Standard_True; // z.
   
  // if there are no any modifications concerned the Cyl,
   // it's not necessary to recompute (to call the method Execute()):
@@ -81,7 +81,7 @@ Standard_Boolean TOcafFunction_CylDriver::MustExecute(const TFunction_Logbook& l
 //         : if there are no any mistakes occurred we return 0:
 //         : 0 - no mistakes were found.
 //=======================================================================
-Standard_Integer TOcafFunction_CylDriver::Execute(TFunction_Logbook& /*log*/) const
+Standard_Integer TOcafFunction_CylDriver::Execute(Handle(TFunction_Logbook)& /*log*/) const
 {
        // Get the values of dimension and position attributes 
        Handle(TDataStd_Real) TSR;
index 165d21d..07b5f56 100755 (executable)
@@ -56,9 +56,9 @@ public:
  // 
 Standard_EXPORT static const Standard_GUID& GetID() ;
 Standard_EXPORT TOcafFunction_CylDriver();
-Standard_EXPORT virtual  void Validate(TFunction_Logbook& log) const;
-Standard_EXPORT virtual  Standard_Boolean MustExecute(const TFunction_Logbook& log) const;
-Standard_EXPORT virtual  Standard_Integer Execute(TFunction_Logbook& log) const;
+Standard_EXPORT virtual  void Validate(Handle(TFunction_Logbook)& log) const;
+Standard_EXPORT virtual  Standard_Boolean MustExecute(const Handle(TFunction_Logbook)& log) const;
+Standard_EXPORT virtual  Standard_Integer Execute(Handle(TFunction_Logbook)& log) const;
 Standard_EXPORT ~TOcafFunction_CylDriver();
 
 
index fa41e6b..7447a12 100755 (executable)
@@ -88,7 +88,7 @@ TDF_Label TOcaf_Commands::CreateBox(Standard_Real x, Standard_Real y, Standard_R
        Handle(TFunction_Function) myFunction = TFunction_Function::Set(L, TOcafFunction_BoxDriver::GetID());
 
        // Initialize and execute the box driver (look at the "Execute()" code)
-    TFunction_Logbook log;
+    Handle(TFunction_Logbook) log = TFunction_Logbook::Set(L);
 
        Handle(TOcafFunction_BoxDriver) myBoxDriver;
     // Find the TOcafFunction_BoxDriver in the TFunction_DriverTable using its GUID
@@ -143,7 +143,7 @@ TDF_Label TOcaf_Commands::CreateCyl(Standard_Real x, Standard_Real y, Standard_R
        Handle(TFunction_Function) myFunction = TFunction_Function::Set(L, TOcafFunction_CylDriver::GetID());
 
        // Initialize and execute the cylinder driver (look at the "Execute()" code)
-    TFunction_Logbook log;
+    Handle(TFunction_Logbook) log = TFunction_Logbook::Set(L);
 
        Handle(TOcafFunction_CylDriver) myCylDriver;
        // Find the TOcafFunction_CylDriver in the TFunction_DriverTable using its GUID
@@ -156,7 +156,7 @@ TDF_Label TOcaf_Commands::CreateCyl(Standard_Real x, Standard_Real y, Standard_R
 }
 
 
-TDF_Label TOcaf_Commands::ModifyBox(Standard_Real x, Standard_Real y, Standard_Real z, Standard_Real w, Standard_Real l, Standard_Real h, const TCollection_ExtendedString &Name, TFunction_Logbook &log)
+TDF_Label TOcaf_Commands::ModifyBox(Standard_Real x, Standard_Real y, Standard_Real z, Standard_Real w, Standard_Real l, Standard_Real h, const TCollection_ExtendedString &Name, Handle(TFunction_Logbook) &log)
 {
        // Set the name attribute (if it's not null)
        Handle(TDataStd_Name) myStdName;
@@ -170,7 +170,7 @@ TDF_Label TOcaf_Commands::ModifyBox(Standard_Real x, Standard_Real y, Standard_R
        {
                TDataStd_Real::Set(MainLab.FindChild(1), w);
                // Set the label of the attribute as touched for next recomputation
-               log.SetTouched(curReal->Label());
+               log->SetTouched(curReal->Label());
        }
 
        MainLab.FindChild(2).FindAttribute(TDataStd_Real::GetID(),curReal);
@@ -178,7 +178,7 @@ TDF_Label TOcaf_Commands::ModifyBox(Standard_Real x, Standard_Real y, Standard_R
        {
                TDataStd_Real::Set(MainLab.FindChild(2), l);
                // Set the label of the attribute as touched for next recomputation
-               log.SetTouched(curReal->Label());
+               log->SetTouched(curReal->Label());
        }
 
        MainLab.FindChild(3).FindAttribute(TDataStd_Real::GetID(),curReal);
@@ -186,7 +186,7 @@ TDF_Label TOcaf_Commands::ModifyBox(Standard_Real x, Standard_Real y, Standard_R
        {
                TDataStd_Real::Set(MainLab.FindChild(3), h);
                // Set the label of the attribute as touched for next recomputation
-               log.SetTouched(curReal->Label());
+               log->SetTouched(curReal->Label());
        }
 
        MainLab.FindChild(4).FindAttribute(TDataStd_Real::GetID(),curReal);
@@ -194,7 +194,7 @@ TDF_Label TOcaf_Commands::ModifyBox(Standard_Real x, Standard_Real y, Standard_R
        {
                TDataStd_Real::Set(MainLab.FindChild(4), x);
                // Set the label of the attribute as touched for next recomputation
-               log.SetTouched(curReal->Label());
+               log->SetTouched(curReal->Label());
        }
 
        MainLab.FindChild(5).FindAttribute(TDataStd_Real::GetID(),curReal);
@@ -202,7 +202,7 @@ TDF_Label TOcaf_Commands::ModifyBox(Standard_Real x, Standard_Real y, Standard_R
        {
                TDataStd_Real::Set(MainLab.FindChild(5), y);
                // Set the label of the attribute as touched for next recomputation
-               log.SetTouched(curReal->Label());
+               log->SetTouched(curReal->Label());
        }
 
        MainLab.FindChild(6).FindAttribute(TDataStd_Real::GetID(),curReal);
@@ -210,7 +210,7 @@ TDF_Label TOcaf_Commands::ModifyBox(Standard_Real x, Standard_Real y, Standard_R
        {
                TDataStd_Real::Set(MainLab.FindChild(6), z);
                // Set the label of the attribute as touched for next recomputation
-               log.SetTouched(curReal->Label());
+               log->SetTouched(curReal->Label());
        }
 
        // Get the TFunction_Function used to create the box
@@ -231,7 +231,7 @@ TDF_Label TOcaf_Commands::ModifyBox(Standard_Real x, Standard_Real y, Standard_R
        if (myBoxDriver->MustExecute(log))
        {
                // Set the box touched, it will be usefull to recompute an object which used this box as attribute
-               log.SetTouched(MainLab);
+               log->SetTouched(MainLab);
                if(myBoxDriver->Execute(log))
                        MessageBox (NULL, L"Recompute failed", L"Modify box", MB_ICONEXCLAMATION);
        }
@@ -239,7 +239,7 @@ TDF_Label TOcaf_Commands::ModifyBox(Standard_Real x, Standard_Real y, Standard_R
        return MainLab;
 }
 
-TDF_Label TOcaf_Commands::ModifyCyl(Standard_Real x, Standard_Real y, Standard_Real z, Standard_Real r, Standard_Real h, const TCollection_ExtendedString &Name, TFunction_Logbook &log)
+TDF_Label TOcaf_Commands::ModifyCyl(Standard_Real x, Standard_Real y, Standard_Real z, Standard_Real r, Standard_Real h, const TCollection_ExtendedString &Name, Handle(TFunction_Logbook) &log)
 {
        // Set the name attribute (if it's not null)
        Handle(TDataStd_Name) myStdName;
@@ -253,7 +253,7 @@ TDF_Label TOcaf_Commands::ModifyCyl(Standard_Real x, Standard_Real y, Standard_R
        {
                TDataStd_Real::Set(MainLab.FindChild(1), r);
                // Set the label of the attribute as touched for next recomputation
-               log.SetTouched(curReal->Label());
+               log->SetTouched(curReal->Label());
        }
 
        MainLab.FindChild(2).FindAttribute(TDataStd_Real::GetID(),curReal);
@@ -261,7 +261,7 @@ TDF_Label TOcaf_Commands::ModifyCyl(Standard_Real x, Standard_Real y, Standard_R
        {
                TDataStd_Real::Set(MainLab.FindChild(2), h);
                // Set the label of the attribute as touched for next recomputation
-               log.SetTouched(curReal->Label());
+               log->SetTouched(curReal->Label());
        }
 
        MainLab.FindChild(3).FindAttribute(TDataStd_Real::GetID(),curReal);
@@ -269,7 +269,7 @@ TDF_Label TOcaf_Commands::ModifyCyl(Standard_Real x, Standard_Real y, Standard_R
        {
                TDataStd_Real::Set(MainLab.FindChild(3), x);
                // Set the label of the attribute as touched for next recomputation
-               log.SetTouched(curReal->Label());
+               log->SetTouched(curReal->Label());
        }
 
        MainLab.FindChild(4).FindAttribute(TDataStd_Real::GetID(),curReal);
@@ -277,7 +277,7 @@ TDF_Label TOcaf_Commands::ModifyCyl(Standard_Real x, Standard_Real y, Standard_R
        {
                TDataStd_Real::Set(MainLab.FindChild(4), y);
                // Set the label of the attribute as touched for next recomputation
-               log.SetTouched(curReal->Label());
+               log->SetTouched(curReal->Label());
        }
 
        MainLab.FindChild(5).FindAttribute(TDataStd_Real::GetID(),curReal);
@@ -285,7 +285,7 @@ TDF_Label TOcaf_Commands::ModifyCyl(Standard_Real x, Standard_Real y, Standard_R
        {
                TDataStd_Real::Set(MainLab.FindChild(5), z);
                // Set the label of the attribute as touched for next recomputation
-               log.SetTouched(curReal->Label());
+               log->SetTouched(curReal->Label());
        }
 
        // Get the TFunction_Function used to create the cylinder
@@ -306,7 +306,7 @@ TDF_Label TOcaf_Commands::ModifyCyl(Standard_Real x, Standard_Real y, Standard_R
        if (myCylDriver->MustExecute(log))
        {
                // Set the cylinder touched, it will be usefull to recompute an object which used this cylinder as attribute
-               log.SetTouched(MainLab);
+               log->SetTouched(MainLab);
                if(myCylDriver->Execute(log))
                        MessageBoxW (NULL, L"Recompute failed", L"Modify cylinder", MB_ICONEXCLAMATION);
        }
@@ -344,7 +344,7 @@ TDF_Label TOcaf_Commands::Cut(TDF_Label ObjectLab, TDF_Label ToolObjectLab)
        Handle(TFunction_Function) myFunction = TFunction_Function::Set(L, TOcafFunction_CutDriver::GetID());
 
        // Initialize and execute the cut driver (look at the "Execute()" code)
-    TFunction_Logbook log;
+    Handle(TFunction_Logbook) log = TFunction_Logbook::Set(L);
 
        Handle(TOcafFunction_CutDriver) myCutDriver;
     // Find the TOcafFunction_CutDriver in the TFunction_DriverTable using its GUID 
index 9725a1d..6949224 100755 (executable)
@@ -43,9 +43,9 @@ class TOcaf_Commands  {
 
 public:
        TDF_Label Cut( TDF_Label ObjectLab, TDF_Label ToolObjectLab);
-       TDF_Label ModifyBox(Standard_Real x, Standard_Real y, Standard_Real z, Standard_Real w, Standard_Real l, Standard_Real h, const TCollection_ExtendedString& Name, TFunction_Logbook &log);
+       TDF_Label ModifyBox(Standard_Real x, Standard_Real y, Standard_Real z, Standard_Real w, Standard_Real l, Standard_Real h, const TCollection_ExtendedString& Name, Handle(TFunction_Logbook) &log);
        TDF_Label CreateBox(Standard_Real x, Standard_Real y, Standard_Real z, Standard_Real w, Standard_Real l, Standard_Real h, const TCollection_ExtendedString& Name);
-       TDF_Label ModifyCyl(Standard_Real x, Standard_Real y, Standard_Real z, Standard_Real r, Standard_Real h, const TCollection_ExtendedString &Name, TFunction_Logbook &log);
+       TDF_Label ModifyCyl(Standard_Real x, Standard_Real y, Standard_Real z, Standard_Real r, Standard_Real h, const TCollection_ExtendedString &Name, Handle(TFunction_Logbook) &log);
        TDF_Label CreateCyl(Standard_Real x, Standard_Real y, Standard_Real z, Standard_Real r, Standard_Real h, const TCollection_ExtendedString& Name);
 
  // Methods PUBLIC
index 7eb4fef..5e81376 100644 (file)
@@ -75,14 +75,14 @@ DNaming_BooleanOperationDriver::DNaming_BooleanOperationDriver()
 //function : Validate
 //purpose  : Validates labels of a function in <log>.
 //=======================================================================
-void DNaming_BooleanOperationDriver::Validate(TFunction_Logbook&) const
+void DNaming_BooleanOperationDriver::Validate(Handle(TFunction_Logbook)&) const
 {}
 
 //=======================================================================
 //function : MustExecute
 //purpose  : Analyse in <log> if the loaded function must be executed
 //=======================================================================
-Standard_Boolean DNaming_BooleanOperationDriver::MustExecute(const TFunction_Logbook&) const
+Standard_Boolean DNaming_BooleanOperationDriver::MustExecute(const Handle(TFunction_Logbook)&) const
 {
   return Standard_True;
 }
@@ -91,7 +91,7 @@ Standard_Boolean DNaming_BooleanOperationDriver::MustExecute(const TFunction_Log
 //function : Execute
 //purpose  : Execute the function and push in <log> the impacted labels
 //=======================================================================
-Standard_Integer DNaming_BooleanOperationDriver::Execute(TFunction_Logbook& theLog) const
+Standard_Integer DNaming_BooleanOperationDriver::Execute(Handle(TFunction_Logbook)& theLog) const
 {
   Handle(TFunction_Function) aFunction;
   Label().FindAttribute(TFunction_Function::GetID(),aFunction);
@@ -162,7 +162,7 @@ Standard_Integer DNaming_BooleanOperationDriver::Execute(TFunction_Logbook& theL
   }
   if(!anIsDone) return -1;
   else {
-    theLog.SetValid(RESPOSITION(aFunction),Standard_True);  
+    theLog->SetValid(RESPOSITION(aFunction),Standard_True);  
     aFunction->SetFailure(DONE);
     return 0;
   }
index ebc7ec6..3754ee2 100644 (file)
@@ -49,17 +49,17 @@ public:
   //! the valid label scope.
   //! execution of function
   //! ======================
-  Standard_EXPORT virtual void Validate (TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual void Validate (Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
   
   //! Analyse in <log> if the loaded function must be executed
   //! (i.e.arguments are modified) or not.
   //! If the Function label itself is modified, the function must
   //! be executed.
-  Standard_EXPORT virtual Standard_Boolean MustExecute (const TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual Standard_Boolean MustExecute (const Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
   
   //! Execute the function and push in <log> the impacted
   //! labels (see method SetImpacted).
-  Standard_EXPORT virtual Standard_Integer Execute (TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual Standard_Integer Execute (Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
 
 
 
index cbc4ba6..6002c2a 100644 (file)
@@ -44,14 +44,14 @@ DNaming_BoxDriver::DNaming_BoxDriver()
 //function : Validate
 //purpose  : Validates labels of a function in <log>.
 //=======================================================================
-void DNaming_BoxDriver::Validate(TFunction_Logbook&) const
+void DNaming_BoxDriver::Validate(Handle(TFunction_Logbook)&) const
 {}
 
 //=======================================================================
 //function : MustExecute
 //purpose  : Analyse in <log> if the loaded function must be executed
 //=======================================================================
-Standard_Boolean DNaming_BoxDriver::MustExecute(const TFunction_Logbook&) const
+Standard_Boolean DNaming_BoxDriver::MustExecute(const Handle(TFunction_Logbook)&) const
 {
   return Standard_True;
 }
@@ -60,7 +60,7 @@ Standard_Boolean DNaming_BoxDriver::MustExecute(const TFunction_Logbook&) const
 //function : Execute
 //purpose  : Execute the function and push in <log> the impacted labels
 //=======================================================================
-Standard_Integer DNaming_BoxDriver::Execute(TFunction_Logbook& theLog) const
+Standard_Integer DNaming_BoxDriver::Execute(Handle(TFunction_Logbook)& theLog) const
 {
   Handle(TFunction_Function) aFunction;
   Label().FindAttribute(TFunction_Function::GetID(),aFunction);
@@ -103,7 +103,7 @@ Standard_Integer DNaming_BoxDriver::Execute(TFunction_Logbook& theLog) const
   if(!aLocation.IsIdentity())
     TNaming::Displace(RESPOSITION(aFunction), aLocation, Standard_True);
 
-  theLog.SetValid(RESPOSITION(aFunction), Standard_True);  
+  theLog->SetValid(RESPOSITION(aFunction), Standard_True);  
 
   aFunction->SetFailure(DONE);
   return 0;
index 3749201..ba4f65d 100644 (file)
@@ -48,17 +48,17 @@ public:
   //! the valid label scope.
   //! execution of function
   //! ======================
-  Standard_EXPORT virtual void Validate (TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual void Validate (Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
   
   //! Analyse in <log> if the loaded function must be executed
   //! (i.e.arguments are modified) or not.
   //! If the Function label itself is modified, the function must
   //! be executed.
-  Standard_EXPORT virtual Standard_Boolean MustExecute (const TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual Standard_Boolean MustExecute (const Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
   
   //! Execute the function and push in <log> the impacted
   //! labels (see method SetImpacted).
-  Standard_EXPORT virtual Standard_Integer Execute (TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual Standard_Integer Execute (Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
 
 
 
index a3def40..d04eed4 100644 (file)
@@ -51,14 +51,14 @@ DNaming_CylinderDriver::DNaming_CylinderDriver()
 //function : Validate
 //purpose  : Validates labels of a function in <log>.
 //=======================================================================
-void DNaming_CylinderDriver::Validate(TFunction_Logbook&) const
+void DNaming_CylinderDriver::Validate(Handle(TFunction_Logbook)&) const
 {}
 
 //=======================================================================
 //function : MustExecute
 //purpose  : Analyse in <log> if the loaded function must be executed
 //=======================================================================
-Standard_Boolean DNaming_CylinderDriver::MustExecute(const TFunction_Logbook&) const
+Standard_Boolean DNaming_CylinderDriver::MustExecute(const Handle(TFunction_Logbook)&) const
 {
   return Standard_True;
 }
@@ -67,7 +67,7 @@ Standard_Boolean DNaming_CylinderDriver::MustExecute(const TFunction_Logbook&) c
 //function : Execute
 //purpose  : Execute the function and push in <log> the impacted labels
 //=======================================================================
-Standard_Integer DNaming_CylinderDriver::Execute(TFunction_Logbook& theLog) const
+Standard_Integer DNaming_CylinderDriver::Execute(Handle(TFunction_Logbook)& theLog) const
 {
   Handle(TFunction_Function) aFunction;
   Label().FindAttribute(TFunction_Function::GetID(),aFunction);
@@ -155,8 +155,7 @@ Standard_Integer DNaming_CylinderDriver::Execute(TFunction_Logbook& theLog) cons
   if(!aLocation.IsIdentity()) 
     TNaming::Displace(RESPOSITION(aFunction), aLocation, Standard_True);
 
-
-  theLog.SetValid(RESPOSITION(aFunction), Standard_True);  
+  theLog->SetValid(RESPOSITION(aFunction), Standard_True);  
   aFunction->SetFailure(DONE);
   return 0;
 }
index 56e4d5b..5c3ac22 100644 (file)
@@ -48,17 +48,17 @@ public:
   //! the valid label scope.
   //! execution of function
   //! ======================
-  Standard_EXPORT virtual void Validate (TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual void Validate (Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
   
   //! Analyse in <log> if the loaded function must be executed
   //! (i.e.arguments are modified) or not.
   //! If the Function label itself is modified, the function must
   //! be executed.
-  Standard_EXPORT virtual Standard_Boolean MustExecute (const TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual Standard_Boolean MustExecute (const Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
   
   //! Execute the function and push in <log> the impacted
   //! labels (see method SetImpacted).
-  Standard_EXPORT virtual Standard_Integer Execute (TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual Standard_Integer Execute (Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
 
 
 
index 003bc04..002eb07 100644 (file)
@@ -52,14 +52,14 @@ DNaming_FilletDriver::DNaming_FilletDriver()
 //function : Validate
 //purpose  : Validates labels of a function in <log>.
 //=======================================================================
-void DNaming_FilletDriver::Validate(TFunction_Logbook&) const
+void DNaming_FilletDriver::Validate(Handle(TFunction_Logbook)&) const
 {}
 
 //=======================================================================
 //function : MustExecute
 //purpose  : Analyse in <log> if the loaded function must be executed
 //=======================================================================
-Standard_Boolean DNaming_FilletDriver::MustExecute(const TFunction_Logbook&) const
+Standard_Boolean DNaming_FilletDriver::MustExecute(const Handle(TFunction_Logbook)&) const
 {
   return Standard_True;
 }
@@ -68,7 +68,7 @@ Standard_Boolean DNaming_FilletDriver::MustExecute(const TFunction_Logbook&) con
 //function : Execute
 //purpose  : Execute the function and push in <log> the impacted labels
 //=======================================================================
-Standard_Integer DNaming_FilletDriver::Execute(TFunction_Logbook& theLog) const
+Standard_Integer DNaming_FilletDriver::Execute(Handle(TFunction_Logbook)& theLog) const
 {
   Handle(TFunction_Function) aFunction;
   Label().FindAttribute(TFunction_Function::GetID(),aFunction);
@@ -160,7 +160,7 @@ Standard_Integer DNaming_FilletDriver::Execute(TFunction_Logbook& theLog) const
 // Naming
   LoadNamingDS(RESPOSITION(aFunction), aMkFillet, aCONTEXT);
 
-  theLog.SetValid(RESPOSITION(aFunction),Standard_True);  
+  theLog->SetValid(RESPOSITION(aFunction),Standard_True);  
   aFunction->SetFailure(DONE);
   return 0;
 }
index 05aa8f0..9a17250 100644 (file)
@@ -49,17 +49,17 @@ public:
   //! the valid label scope.
   //! execution of function
   //! ======================
-  Standard_EXPORT virtual void Validate (TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual void Validate (Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
   
   //! Analyse in <log> if the loaded function must be executed
   //! (i.e.arguments are modified) or not.
   //! If the Function label itself is modified, the function must
   //! be executed.
-  Standard_EXPORT virtual Standard_Boolean MustExecute (const TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual Standard_Boolean MustExecute (const Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
   
   //! Execute the function and push in <log> the impacted
   //! labels (see method SetImpacted).
-  Standard_EXPORT virtual Standard_Integer Execute (TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual Standard_Integer Execute (Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
 
 
 
index 3b03187..370bd28 100644 (file)
@@ -64,14 +64,14 @@ DNaming_Line3DDriver::DNaming_Line3DDriver()
 //function : Validate
 //purpose  : Validates labels of a function in <theLog>.
 //=======================================================================
-void DNaming_Line3DDriver::Validate(TFunction_Logbook&) const
+void DNaming_Line3DDriver::Validate(Handle(TFunction_Logbook)&) const
 {}
 
 //=======================================================================
 //function : MustExecute
 //purpose  : Analyse in <theLog> if the loaded function must be executed
 //=======================================================================
-Standard_Boolean DNaming_Line3DDriver::MustExecute(const TFunction_Logbook&) const
+Standard_Boolean DNaming_Line3DDriver::MustExecute(const Handle(TFunction_Logbook)&) const
 {
   return Standard_True;
 }
@@ -80,7 +80,7 @@ Standard_Boolean DNaming_Line3DDriver::MustExecute(const TFunction_Logbook&) con
 //function : Execute
 //purpose  : Execute the function
 //=======================================================================
-Standard_Integer DNaming_Line3DDriver::Execute(TFunction_Logbook& theLog) const
+Standard_Integer DNaming_Line3DDriver::Execute(Handle(TFunction_Logbook)& theLog) const
 {
   Handle(TFunction_Function) aFunction;
   Label().FindAttribute(TFunction_Function::GetID(),aFunction);
@@ -185,7 +185,7 @@ Standard_Integer DNaming_Line3DDriver::Execute(TFunction_Logbook& theLog) const
   if(!aLocation.IsIdentity())
     TNaming::Displace(aResultLabel, aLocation, Standard_True);
 
-  theLog.SetValid(aResultLabel, Standard_True);  
+  theLog->SetValid(aResultLabel, Standard_True);  
 
   aFunction->SetFailure(DONE);
   return 0;
index 956d692..9cbbddb 100644 (file)
@@ -49,17 +49,17 @@ public:
   //! the valid label scope.
   //! execution of function
   //! ======================
-  Standard_EXPORT virtual void Validate (TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual void Validate (Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
   
   //! Analyse in <log> if the loaded function must be executed
   //! (i.e.arguments are modified) or not.
   //! If the Function label itself is modified, the function must
   //! be executed.
-  Standard_EXPORT virtual Standard_Boolean MustExecute (const TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual Standard_Boolean MustExecute (const Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
   
   //! Execute the function and push in <log> the impacted
   //! labels (see method SetImpacted).
-  Standard_EXPORT virtual Standard_Integer Execute (TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual Standard_Integer Execute (Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
 
 
 
index 366df6c..475d198 100644 (file)
@@ -456,17 +456,11 @@ static Standard_Integer DNaming_BoxDZ (Draw_Interpretor& theDI,
 }
 
 //=======================================================================
-static TFunction_Logbook& GetLogBook ()
-{
-  static TFunction_Logbook myLog;
-  return myLog;
-}
-//=======================================================================
 //function : Compute
 //purpose  : Performs the calling to a driver with the given Function ID.
 //=======================================================================
 static Standard_Integer ComputeFunction(const Handle(TFunction_Function)& theFun, 
-                                       TFunction_Logbook& theLog)
+                                        Handle(TFunction_Logbook)& theLog)
 {
   Handle(TFunction_DriverTable) aTable = TFunction_DriverTable::Get();
   Handle(TFunction_Driver) aDriver;
@@ -506,6 +500,7 @@ static Standard_Integer DNaming_SolveFlatFrom (Draw_Interpretor& /*theDI*/,
 #ifdef OCCT_DEBUG
     cout << "DNaming_SolveFlatFrom: Father label = " << entry << endl;
 #endif
+    Handle(TFunction_Logbook) logbook = TFunction_Logbook::Set(FatherLab);
     Standard_Boolean found(Standard_False);
     TDF_ChildIterator it(FatherLab, Standard_False);  
     for(;it.More(); it.Next()) {
@@ -526,7 +521,9 @@ static Standard_Integer DNaming_SolveFlatFrom (Draw_Interpretor& /*theDI*/,
       else {
        TDF_Tool::Entry(funLabel, entry);
        try {
-         Standard_Integer aRes = ComputeFunction(aFun, GetLogBook());
+      // We clear the logbook because the execution starts not from the begining of the function list (some functions ar skipped).
+      logbook->Clear();
+         Standard_Integer aRes = ComputeFunction(aFun, logbook);
          if(aRes != 0) {
            cout << "DNaming_SolveFlatFrom: Driver failed at label = " << entry << endl;
            return 1;
@@ -558,13 +555,14 @@ static Standard_Integer DNaming_InitLogBook (Draw_Interpretor& /*theDI*/,
     Handle(TDocStd_Document) aDoc;   
     Standard_CString aDocS(theArg[1]);
     if (!DDocStd::GetDocument(aDocS, aDoc)) return 1;  
-    if(GetLogBook().IsEmpty()) {
+    Handle(TFunction_Logbook) logbook = TFunction_Logbook::Set(aDoc->Main());
+    if(logbook->IsEmpty()) {
 #ifdef OCCT_DEBUG
       cout << "DNaming_InitLogBook : is empty" <<endl;
 #endif
     }
     else {
-      GetLogBook().Clear();
+      logbook->Clear();
 #ifdef OCCT_DEBUG
       cout << "DNaming_InitLogBook : cleaned" <<endl;
 #endif
@@ -586,12 +584,12 @@ static Standard_Integer DNaming_CheckLogBook (Draw_Interpretor& /*theDI*/,
   if (theNb == 2) {
     Handle(TDocStd_Document) aDoc;   
     Standard_CString aDocS(theArg[1]);
-    if (!DDocStd::GetDocument(aDocS, aDoc)) return 1;  
-    if(GetLogBook().IsEmpty())
+    if (!DDocStd::GetDocument(aDocS, aDoc)) return 1;
+    Handle(TFunction_Logbook) logbook = TFunction_Logbook::Set(aDoc->Main());
+    if(logbook->IsEmpty())
       cout << "DNaming_CheckLogBook : is empty" <<endl;
     else {
-      TDF_LabelMap aMap;
-      aMap = GetLogBook().GetValid();
+      const TDF_LabelMap& aMap = logbook->GetValid();
       TDF_MapIteratorOfLabelMap it(aMap);
       TCollection_AsciiString entry;
       cout << "DNaming_CheckLogBook : LogBook current state:" <<endl;
@@ -625,7 +623,8 @@ static Standard_Integer DNaming_ComputeFun (Draw_Interpretor& /*theDI*/,
     funLabel.FindAttribute(TFunction_Function::GetID(), aFun);
     if(aFun.IsNull()) return 1;
     if(!aFun.IsNull()) {
-      Standard_Integer aRes = ComputeFunction(aFun, GetLogBook());
+      Handle(TFunction_Logbook) logbook = TFunction_Logbook::Set(funLabel);
+      Standard_Integer aRes = ComputeFunction(aFun, logbook);
       if(aRes != 0) {
         cout << "DNaming_ComputeFun : No Driver or Driver failed" << endl;
         return 1;
@@ -2169,7 +2168,7 @@ void DNaming::ModelingCommands (Draw_Interpretor& theCommands)
                   __FILE__, DNaming_AddObject, g2);
 
   theCommands.Add ("AddFunction", 
-                   "AddFunction D ObjEntry FunNane[Box|Sph|Cyl|Cut|Fuse|Prism|Revol|PMove|Fillet|Attach|XAttach]",
+                   "AddFunction D ObjEntry FunName[Box|Sph|Cyl|Cut|Fuse|Prism|Revol|PMove|Fillet|Attach|XAttach]",
                   __FILE__, DNaming_AddFunction, g2);
 
   theCommands.Add ("AddBox", "AddBox Doc dx dy dz",      __FILE__, DNaming_AddBox, g2);
index 9c6de11..21ac778 100644 (file)
@@ -47,14 +47,14 @@ DNaming_PointDriver::DNaming_PointDriver()
 //function : Validate
 //purpose  : Validates labels of a function in <log>.
 //=======================================================================
-void DNaming_PointDriver::Validate(TFunction_Logbook&) const
+void DNaming_PointDriver::Validate(Handle(TFunction_Logbook)&) const
 {}
 
 //=======================================================================
 //function : MustExecute
 //purpose  : Analyse in <log> if the loaded function must be executed
 //=======================================================================
-Standard_Boolean DNaming_PointDriver::MustExecute(const TFunction_Logbook&) const
+Standard_Boolean DNaming_PointDriver::MustExecute(const Handle(TFunction_Logbook)&) const
 {
   return Standard_True;
 }
@@ -63,7 +63,7 @@ Standard_Boolean DNaming_PointDriver::MustExecute(const TFunction_Logbook&) cons
 //function : Execute
 //purpose  : Execute the function and push in <log> the impacted labels
 //=======================================================================
-Standard_Integer DNaming_PointDriver::Execute(TFunction_Logbook& theLog) const
+Standard_Integer DNaming_PointDriver::Execute(Handle(TFunction_Logbook)& theLog) const
 {
   Handle(TFunction_Function) aFunction;
   Label().FindAttribute(TFunction_Function::GetID(),aFunction);
@@ -117,7 +117,7 @@ Standard_Integer DNaming_PointDriver::Execute(TFunction_Logbook& theLog) const
   if(!aLocation.IsIdentity())
     TNaming::Displace(aResultLabel, aLocation, Standard_True);
 
-  theLog.SetValid(aResultLabel, Standard_True);  
+  theLog->SetValid(aResultLabel, Standard_True);  
   
   aFunction->SetFailure(DONE);
   return 0;
index d6010ba..54b6c62 100644 (file)
@@ -46,17 +46,17 @@ public:
   //! the valid label scope.
   //! execution of function
   //! ======================
-  Standard_EXPORT virtual void Validate (TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual void Validate (Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
   
   //! Analyse in <log> if the loaded function must be executed
   //! (i.e.arguments are modified) or not.
   //! If the Function label itself is modified, the function must
   //! be executed.
-  Standard_EXPORT virtual Standard_Boolean MustExecute (const TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual Standard_Boolean MustExecute (const Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
   
   //! Execute the function and push in <log> the impacted
   //! labels (see method SetImpacted).
-  Standard_EXPORT virtual Standard_Integer Execute (TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual Standard_Integer Execute (Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
 
 
 
index b19d34a..85ad6a3 100644 (file)
@@ -66,14 +66,14 @@ DNaming_PrismDriver::DNaming_PrismDriver()
 //function : Validate
 //purpose  : Validates labels of a function in <theLog>.
 //=======================================================================
-void DNaming_PrismDriver::Validate(TFunction_Logbook&) const
+void DNaming_PrismDriver::Validate(Handle(TFunction_Logbook)&) const
 {}
 
 //=======================================================================
 //function : MustExecute
 //purpose  : Analyses in <theLog> if the loaded function must be executed
 //=======================================================================
-Standard_Boolean DNaming_PrismDriver::MustExecute(const TFunction_Logbook&) const
+Standard_Boolean DNaming_PrismDriver::MustExecute(const Handle(TFunction_Logbook)&) const
 {
   return Standard_True;
 }
@@ -94,7 +94,7 @@ static void Write(const TopoDS_Shape& shape,
 //function : Execute
 //purpose  : Executes the function 
 //=======================================================================
-Standard_Integer DNaming_PrismDriver::Execute(TFunction_Logbook& theLog) const {
+Standard_Integer DNaming_PrismDriver::Execute(Handle(TFunction_Logbook)& theLog) const {
   Handle(TFunction_Function) aFunction;
   Label().FindAttribute(TFunction_Function::GetID(), aFunction);
   if(aFunction.IsNull()) return -1;
@@ -206,7 +206,7 @@ Standard_Integer DNaming_PrismDriver::Execute(TFunction_Logbook& theLog) const {
   if(!aLocation.IsIdentity()) 
     TNaming::Displace(RESPOSITION(aFunction), aLocation, Standard_True);
 
-  theLog.SetValid(RESPOSITION(aFunction),Standard_True);  
+  theLog->SetValid(RESPOSITION(aFunction),Standard_True);  
   aFunction->SetFailure(DONE);
   return 0;
 }
index 55436d9..27ae8ad 100644 (file)
@@ -49,17 +49,17 @@ public:
   //! the valid label scope.
   //! execution of function
   //! ======================
-  Standard_EXPORT virtual void Validate (TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual void Validate (Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
   
   //! Analyse in <log> if the loaded function must be executed
   //! (i.e.arguments are modified) or not.
   //! If the Function label itself is modified, the function must
   //! be executed.
-  Standard_EXPORT virtual Standard_Boolean MustExecute (const TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual Standard_Boolean MustExecute (const Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
   
   //! Execute the function and push in <log> the impacted
   //! labels (see method SetImpacted).
-  Standard_EXPORT virtual Standard_Integer Execute (TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual Standard_Integer Execute (Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
 
 
 
index 9d13a8d..62fa95b 100644 (file)
@@ -70,14 +70,14 @@ DNaming_RevolutionDriver::DNaming_RevolutionDriver()
 //function : Validate
 //purpose  : Validates labels of a function in <theLog>.
 //=======================================================================
-void DNaming_RevolutionDriver::Validate(TFunction_Logbook&) const
+void DNaming_RevolutionDriver::Validate(Handle(TFunction_Logbook)&) const
 {}
 
 //=======================================================================
 //function : MustExecute
 //purpose  : Analyses in <theLog> if the loaded function must be executed
 //=======================================================================
-Standard_Boolean DNaming_RevolutionDriver::MustExecute(const TFunction_Logbook&) const
+Standard_Boolean DNaming_RevolutionDriver::MustExecute(const Handle(TFunction_Logbook)&) const
 {
   return Standard_True;
 }
@@ -86,7 +86,7 @@ Standard_Boolean DNaming_RevolutionDriver::MustExecute(const TFunction_Logbook&)
 //function : Execute
 //purpose  : Executes the function
 //=======================================================================
-Standard_Integer DNaming_RevolutionDriver::Execute(TFunction_Logbook& theLog) const {
+Standard_Integer DNaming_RevolutionDriver::Execute(Handle(TFunction_Logbook)& theLog) const {
   Handle(TFunction_Function) aFunction;
   Label().FindAttribute(TFunction_Function::GetID(), aFunction);
   if(aFunction.IsNull()) return -1;
@@ -259,7 +259,7 @@ Standard_Integer DNaming_RevolutionDriver::Execute(TFunction_Logbook& theLog) co
   if(!aLocation.IsIdentity())
     TNaming::Displace(RESPOSITION(aFunction), aLocation, Standard_True);
 
-  theLog.SetValid(RESPOSITION(aFunction),Standard_True);
+  theLog->SetValid(RESPOSITION(aFunction),Standard_True);
   aFunction->SetFailure(DONE);
   return 0;
 }
index 20b9f3a..6e00e0f 100644 (file)
@@ -49,17 +49,17 @@ public:
   //! the valid label scope.
   //! execution of function
   //! ======================
-  Standard_EXPORT virtual void Validate (TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual void Validate (Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
   
   //! Analyse in <log> if the loaded function must be executed
   //! (i.e.arguments are modified) or not.
   //! If the Function label itself is modified, the function must
   //! be executed.
-  Standard_EXPORT virtual Standard_Boolean MustExecute (const TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual Standard_Boolean MustExecute (const Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
   
   //! Execute the function and push in <log> the impacted
   //! labels (see method SetImpacted).
-  Standard_EXPORT virtual Standard_Integer Execute (TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual Standard_Integer Execute (Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
 
 
 
index ad1e152..7f5846d 100644 (file)
@@ -45,7 +45,7 @@ DNaming_SelectionDriver::DNaming_SelectionDriver()
 //function : Validate
 //purpose  : Validates labels of a function in <theLog>.
 //=======================================================================
-void DNaming_SelectionDriver::Validate(TFunction_Logbook& ) const
+void DNaming_SelectionDriver::Validate(Handle(TFunction_Logbook)& ) const
 {}
 
 //=======================================================================
@@ -53,7 +53,7 @@ void DNaming_SelectionDriver::Validate(TFunction_Logbook& ) const
 //purpose  : Analyse in <theLog> if the loaded function must be
 //           executed (i.e.arguments are modified) or not.
 //=======================================================================
-Standard_Boolean DNaming_SelectionDriver::MustExecute(const TFunction_Logbook& ) const {
+Standard_Boolean DNaming_SelectionDriver::MustExecute(const Handle(TFunction_Logbook)& ) const {
   return Standard_True;
 }
 
@@ -82,7 +82,7 @@ static void Write(const TopoDS_Shape& shape,
 #include <TCollection_AsciiString.hxx>
 #include <TDF_ChildIterator.hxx>
 
-Standard_Integer DNaming_SelectionDriver::Execute(TFunction_Logbook& theLog) const
+Standard_Integer DNaming_SelectionDriver::Execute(Handle(TFunction_Logbook)& theLog) const
 {
   Handle(TFunction_Function) aFunction;
   Label().FindAttribute(TFunction_Function::GetID(),aFunction);
@@ -105,7 +105,7 @@ Standard_Integer DNaming_SelectionDriver::Execute(TFunction_Logbook& theLog) con
   TNaming_Selector aSelector(aRLabel);
 
   TDF_LabelMap aMap;
-  aMap = theLog.ChangeValid();
+  theLog->GetValid(aMap);
 #ifdef OCCT_DEBUG
   cout <<"#E_DNaming_SelectionDriver:: Valid Label Map:"<<endl;
   TDF_MapIteratorOfLabelMap anItr(aMap);
@@ -126,7 +126,7 @@ Standard_Integer DNaming_SelectionDriver::Execute(TFunction_Logbook& theLog) con
 //***
 
   if(aSelector.Solve(aMap)) {
-    theLog.SetValid(aRLabel);    
+    theLog->SetValid(aRLabel);
     Handle(TNaming_NamedShape) aNS;
     if(!aRLabel.FindAttribute(TNaming_NamedShape::GetID(),aNS)) {
       cout <<"%%%WARNING: DNaming_SelectionDriver::NamedShape is not found"<<endl;
index 199879e..a7053d5 100644 (file)
@@ -46,17 +46,17 @@ public:
   //! the valid label scope.
   //! execution of function
   //! ======================
-  Standard_EXPORT virtual void Validate (TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual void Validate (Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
   
   //! Analyse in <log> if the loaded function must be executed
   //! (i.e.arguments are modified) or not.
   //! If the Function label itself is modified, the function must
   //! be executed.
-  Standard_EXPORT virtual Standard_Boolean MustExecute (const TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual Standard_Boolean MustExecute (const Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
   
   //! Execute the function and push in <log> the impacted
   //! labels (see method SetImpacted).
-  Standard_EXPORT virtual Standard_Integer Execute (TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual Standard_Integer Execute (Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
 
 
 
index 1c8366e..7e0aea7 100644 (file)
@@ -55,14 +55,14 @@ DNaming_SphereDriver::DNaming_SphereDriver()
 //function : Validate
 //purpose  : Validates labels of a function in <theLog>
 //=======================================================================
-void DNaming_SphereDriver::Validate(TFunction_Logbook&) const
+void DNaming_SphereDriver::Validate(Handle(TFunction_Logbook)&) const
 {}
 
 //=======================================================================
 //function : MustExecute
 //purpose  : Analyses in <theLog> if the loaded function must be executed
 //=======================================================================
-Standard_Boolean DNaming_SphereDriver::MustExecute(const TFunction_Logbook&) const {
+Standard_Boolean DNaming_SphereDriver::MustExecute(const Handle(TFunction_Logbook)&) const {
   return Standard_True;
 }
 
@@ -70,7 +70,7 @@ Standard_Boolean DNaming_SphereDriver::MustExecute(const TFunction_Logbook&) con
 //function : Execute
 //purpose  : Executes the function 
 //=======================================================================
-Standard_Integer DNaming_SphereDriver::Execute(TFunction_Logbook& theLog) const {
+Standard_Integer DNaming_SphereDriver::Execute(Handle(TFunction_Logbook)& theLog) const {
   Handle(TFunction_Function) aFunction;
   Label().FindAttribute(TFunction_Function::GetID(),aFunction);
   if(aFunction.IsNull()) return -1;
@@ -127,7 +127,7 @@ Standard_Integer DNaming_SphereDriver::Execute(TFunction_Logbook& theLog) const
   if(!aLocation.IsIdentity()) 
     TNaming::Displace(RESPOSITION(aFunction), aLocation, Standard_True);
   
-  theLog.SetValid(RESPOSITION(aFunction), Standard_True); 
+  theLog->SetValid(RESPOSITION(aFunction), Standard_True); 
   aFunction->SetFailure(DONE);
   return 0;
 }
index 5038f94..5715be1 100644 (file)
@@ -48,17 +48,17 @@ public:
   //! the valid label scope.
   //! execution of function
   //! ======================
-  Standard_EXPORT virtual void Validate (TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual void Validate (Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
   
   //! Analyse in <log> if the loaded function must be executed
   //! (i.e.arguments are modified) or not.
   //! If the Function label itself is modified, the function must
   //! be executed.
-  Standard_EXPORT virtual Standard_Boolean MustExecute (const TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual Standard_Boolean MustExecute (const Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
   
   //! Execute the function and push in <log> the impacted
   //! labels (see method SetImpacted).
-  Standard_EXPORT virtual Standard_Integer Execute (TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual Standard_Integer Execute (Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
 
 
 
index 698b09b..5f8761a 100644 (file)
@@ -86,14 +86,14 @@ DNaming_TransformationDriver::DNaming_TransformationDriver()
 //function : Validate
 //purpose  : Validates labels of a function in <log>.
 //=======================================================================
-void DNaming_TransformationDriver::Validate(TFunction_Logbook&) const
+void DNaming_TransformationDriver::Validate(Handle(TFunction_Logbook)&) const
 {}
 
 //=======================================================================
 //function : MustExecute
 //purpose  : Analyse in <log> if the loaded function must be executed
 //=======================================================================
-Standard_Boolean DNaming_TransformationDriver::MustExecute(const TFunction_Logbook&) const
+Standard_Boolean DNaming_TransformationDriver::MustExecute(const Handle(TFunction_Logbook)&) const
 {
   return Standard_True;
 }
@@ -103,7 +103,7 @@ Standard_Boolean DNaming_TransformationDriver::MustExecute(const TFunction_Logbo
 //function : Execute
 //purpose  : Execute the function and push in <log> the impacted labels
 //=======================================================================
-Standard_Integer DNaming_TransformationDriver::Execute(TFunction_Logbook& theLog) const
+Standard_Integer DNaming_TransformationDriver::Execute(Handle(TFunction_Logbook)& theLog) const
 {
   Handle(TFunction_Function) aFunction;
   Label().FindAttribute(TFunction_Function::GetID(),aFunction);
@@ -178,7 +178,7 @@ Standard_Integer DNaming_TransformationDriver::Execute(TFunction_Logbook& theLog
 // Naming
   LoadNamingDS(RESPOSITION(aFunction), aContextNS, aTransformation);
 
-  theLog.SetValid(RESPOSITION(aFunction),Standard_True);  
+  theLog->SetValid(RESPOSITION(aFunction),Standard_True);  
   aFunction->SetFailure(DONE);
   return 0;
 }
index 0756dcd..1231705 100644 (file)
@@ -49,17 +49,17 @@ public:
   //! the valid label scope.
   //! execution of function
   //! ======================
-  Standard_EXPORT virtual void Validate (TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual void Validate (Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
   
   //! Analyse in <log> if the loaded function must be executed
   //! (i.e.arguments are modified) or not.
   //! If the Function label itself is modified, the function must
   //! be executed.
-  Standard_EXPORT virtual Standard_Boolean MustExecute (const TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual Standard_Boolean MustExecute (const Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
   
   //! Execute the function and push in <log> the impacted
   //! labels (see method SetImpacted).
-  Standard_EXPORT virtual Standard_Integer Execute (TFunction_Logbook& theLog) const Standard_OVERRIDE;
+  Standard_EXPORT virtual Standard_Integer Execute (Handle(TFunction_Logbook)& theLog) const Standard_OVERRIDE;
 
 
 
index a3aa5bd..3e4859a 100644 (file)
@@ -47,14 +47,15 @@ void TFunction_Driver::Init(const TDF_Label& L)
 //purpose  : Validates labels of a function
 //=======================================================================
 
-void TFunction_Driver::Validate(TFunction_Logbook& log) const
+void TFunction_Driver::Validate(Handle(TFunction_Logbook)& log) const
 {
   TDF_LabelList res;
   Results(res);
+
   TDF_ListIteratorOfLabelList itr(res);
   for (; itr.More(); itr.Next())
   {
-    log.SetValid(itr.Value(), Standard_True);
+    log->SetValid(itr.Value(), Standard_True);
   }
 }
 
@@ -64,15 +65,16 @@ void TFunction_Driver::Validate(TFunction_Logbook& log) const
 //purpose  : Analyzes the labels in the logbook
 //=======================================================================
 
-Standard_Boolean TFunction_Driver::MustExecute(const TFunction_Logbook& log) const
+Standard_Boolean TFunction_Driver::MustExecute(const Handle(TFunction_Logbook)& log) const
 {
   // Check modification of arguments.
   TDF_LabelList args;
   Arguments(args);
+
   TDF_ListIteratorOfLabelList itr(args);
   for (; itr.More(); itr.Next())
   {
-    if (log.IsModified(itr.Value()))
+    if (log->IsModified(itr.Value()))
       return Standard_True;
   }
   return Standard_False;
index 8bfd9a2..9c0b555 100644 (file)
@@ -62,18 +62,18 @@ public:
   //! method even if the function is not executed.
   //! execution of function
   //! =====================
-  Standard_EXPORT virtual void Validate (TFunction_Logbook& log) const;
+  Standard_EXPORT virtual void Validate (Handle(TFunction_Logbook)& log) const;
   
   //! Analyzes the labels in the logbook log.
   //! Returns true if attributes have been modified.
   //! If the function label itself has been modified, the function must be executed.
-  Standard_EXPORT virtual Standard_Boolean MustExecute (const TFunction_Logbook& log) const;
+  Standard_EXPORT virtual Standard_Boolean MustExecute (const Handle(TFunction_Logbook)& log) const;
   
   //! Executes the function in this function driver and
   //! puts the impacted labels in the logbook log.
   //! arguments & results of functions
   //! ================================
-  Standard_EXPORT virtual Standard_Integer Execute (TFunction_Logbook& log) const = 0;
+  Standard_EXPORT virtual Standard_Integer Execute (Handle(TFunction_Logbook)& log) const = 0;
   
   //! The method fills-in the list by labels,
   //! where the arguments of the function are located.
index a2edd49..b2eb0ec 100644 (file)
@@ -406,7 +406,7 @@ const TFunction_DoubleMapOfIntegerLabel& TFunction_IFunction::GetAllFunctions()
 //purpose  : Returns the Logbook.
 //=======================================================================
 
-TFunction_Logbook& TFunction_IFunction::GetLogbook() const
+Handle(TFunction_Logbook) TFunction_IFunction::GetLogbook() const
 {
   return TFunction_Scope::Set(myLabel)->GetLogbook();
 }
index 10752c0..b469a68 100644 (file)
@@ -97,7 +97,7 @@ public:
   Standard_EXPORT const TFunction_DoubleMapOfIntegerLabel& GetAllFunctions() const;
   
   //! Returns the Logbook - keeper of modifications.
-  Standard_EXPORT TFunction_Logbook& GetLogbook() const;
+  Standard_EXPORT Handle(TFunction_Logbook) GetLogbook() const;
   
   //! Returns a driver of the function.
   Standard_EXPORT Handle(TFunction_Driver) GetDriver (const Standard_Integer thread = 0) const;
index 0f04ee5..81d197a 100644 (file)
 #include <TDF_Label.hxx>
 #include <TDF_LabelMap.hxx>
 #include <TDF_MapIteratorOfLabelMap.hxx>
+#include <TDF_RelocationTable.hxx>
 #include <TDF_Tool.hxx>
 #include <TFunction_Logbook.hxx>
+#include <Standard_GUID.hxx>
+
+//=======================================================================
+//function : GetID
+//purpose  : Static method to get an ID
+//=======================================================================
+const Standard_GUID& TFunction_Logbook::GetID() 
+{  
+  static Standard_GUID TFunction_LogbookID("CF519724-5CA4-4B90-835F-8919BE1DDE4B");
+  return TFunction_LogbookID; 
+}
+
+//=======================================================================
+//function : Set
+//purpose  : Finds or creates a Scope attribute
+//=======================================================================
+
+Handle(TFunction_Logbook) TFunction_Logbook::Set(const TDF_Label& Access)
+{
+  Handle(TFunction_Logbook) S;
+  if (!Access.Root().FindAttribute(TFunction_Logbook::GetID(), S)) 
+  {
+    S = new TFunction_Logbook();
+    Access.Root().AddAttribute(S);
+  }
+  return S;
+}
+
+//=======================================================================
+//function : ID
+//purpose  : Returns GUID of the function
+//=======================================================================
+
+const Standard_GUID& TFunction_Logbook::ID() const
+{ 
+  return GetID(); 
+}
 
 //=======================================================================
 //function : TFunction_Logbook
@@ -38,9 +76,13 @@ TFunction_Logbook::TFunction_Logbook():isDone(Standard_False)
 
 void TFunction_Logbook::Clear()
 {
-  myTouched.Clear();
-  myImpacted.Clear();
-  myValid.Clear();
+  if (!IsEmpty())
+  {
+    Backup();
+    myTouched.Clear();
+    myImpacted.Clear();
+    myValid.Clear();
+  }
 }
 
 //=======================================================================
@@ -59,15 +101,22 @@ Standard_Boolean TFunction_Logbook::IsEmpty () const
 //=======================================================================
 
 Standard_Boolean TFunction_Logbook::IsModified(const TDF_Label& L,
-                                              const Standard_Boolean WithChildren) const
+                                               const Standard_Boolean WithChildren) const
 {
-  if (myTouched.Contains(L)) return Standard_True;
-  if (myImpacted.Contains(L)) return Standard_True;
-  if (WithChildren) {
+  if (myTouched.Contains(L))
+    return Standard_True;
+  if (myImpacted.Contains(L))
+    return Standard_True;
+  if (WithChildren)
+  {
     TDF_ChildIterator itr(L);
     for (; itr.More(); itr.Next())
+    {
       if (IsModified(itr.Value(), Standard_True))
-       return Standard_True;
+      {
+        return Standard_True;
+      }
+    }
   }
   return Standard_False;
 }
@@ -78,35 +127,170 @@ Standard_Boolean TFunction_Logbook::IsModified(const TDF_Label& L,
 //=======================================================================
 
 void TFunction_Logbook::SetValid(const TDF_Label& L,
-                                const Standard_Boolean WithChildren)
+                                 const Standard_Boolean WithChildren)
 {
+  Backup();
   myValid.Add(L);
-  if (WithChildren) {
+  if (WithChildren)
+  {
     TDF_ChildIterator itr(L, Standard_True);
-    for (; itr.More(); itr.Next()) {
+    for (; itr.More(); itr.Next())
+    {
       myValid.Add(itr.Value());
     }
   }
 }
 
+void TFunction_Logbook::SetValid(const TDF_LabelMap& Ls)
+{
+  Backup();
+  TDF_MapIteratorOfLabelMap itrm(Ls);
+  for (; itrm.More(); itrm.Next())
+  {
+    const TDF_Label& L = itrm.Key();
+    myValid.Add(L);
+  }
+}
+
 //=======================================================================
 //function : SetImpacted
 //purpose  : 
 //=======================================================================
 
 void TFunction_Logbook::SetImpacted(const TDF_Label& L,
-                                   const Standard_Boolean WithChildren)
+                                    const Standard_Boolean WithChildren)
 {
+  Backup();
   myImpacted.Add(L);
-  if (WithChildren) {
+  if (WithChildren)
+  {
     TDF_ChildIterator itr(L, Standard_True);
-    for (; itr.More(); itr.Next()) {
+    for (; itr.More(); itr.Next())
+    {
       myImpacted.Add(itr.Value());
     }
   }  
 }
 
 //=======================================================================
+//function : GetValid
+//purpose  : Returns valid labels.
+//=======================================================================
+
+void TFunction_Logbook::GetValid(TDF_LabelMap& Ls) const
+{
+  // Copy valid labels.
+  TDF_MapIteratorOfLabelMap itrm(myValid);
+  for (; itrm.More(); itrm.Next())
+  {
+    const TDF_Label& L = itrm.Key();
+    Ls.Add(L);
+  }
+}
+
+//=======================================================================
+//function : Restore
+//purpose  : Undos (and redos) the attribute.
+//=======================================================================
+
+void TFunction_Logbook::Restore(const Handle(TDF_Attribute)& other) 
+{
+  Handle(TFunction_Logbook) logbook = Handle(TFunction_Logbook)::DownCast(other);
+
+  // Status.
+  isDone = logbook->isDone;
+
+  // Valid labels
+  TDF_MapIteratorOfLabelMap itrm;
+  for (itrm.Initialize(logbook->myValid); itrm.More(); itrm.Next())
+  {
+    myValid.Add(itrm.Key());
+  }
+  // Touched labels
+  for (itrm.Initialize(logbook->myTouched); itrm.More(); itrm.Next())
+  {
+    myTouched.Add(itrm.Key());
+  }
+  // Impacted labels
+  for (itrm.Initialize(logbook->myImpacted); itrm.More(); itrm.Next())
+  {
+    myImpacted.Add(itrm.Key());
+  }
+}
+
+//=======================================================================
+//function : Paste
+//purpose  : Method for Copy mechanism
+//=======================================================================
+
+void TFunction_Logbook::Paste(const Handle(TDF_Attribute)& into,
+                              const Handle(TDF_RelocationTable)& RT) const
+{
+  Handle(TFunction_Logbook) logbook = Handle(TFunction_Logbook)::DownCast(into);
+  
+  // Status.
+  logbook->isDone = isDone;
+
+  // Touched.
+  logbook->myTouched.Clear();
+  TDF_MapIteratorOfLabelMap itr(myTouched);
+  for (; itr.More(); itr.Next())
+  {
+    const TDF_Label& L = itr.Value();
+    if (!L.IsNull())
+    {
+      TDF_Label relocL;
+      if (RT->HasRelocation(L, relocL))
+        logbook->myTouched.Add(relocL);
+      else
+        logbook->myTouched.Add(L);
+    }
+  }
+
+  // Impacted.
+  logbook->myImpacted.Clear();
+  itr.Initialize(myImpacted);
+  for (; itr.More(); itr.Next())
+  {
+    const TDF_Label& L = itr.Value();
+    if (!L.IsNull())
+    {
+      TDF_Label relocL;
+      if (RT->HasRelocation(L, relocL))
+        logbook->myImpacted.Add(relocL);
+      else
+        logbook->myImpacted.Add(L);
+    }
+  }
+
+  // Valid.
+  logbook->myValid.Clear();
+  itr.Initialize(myValid);
+  for (; itr.More(); itr.Next())
+  {
+    const TDF_Label& L = itr.Value();
+    if (!L.IsNull())
+    {
+      TDF_Label relocL;
+      if (RT->HasRelocation(L, relocL))
+        logbook->myValid.Add(relocL);
+      else
+        logbook->myValid.Add(L);
+    }
+  }
+}
+
+//=======================================================================
+//function : NewEmpty
+//purpose  : Returns new empty graph node attribute
+//=======================================================================
+
+Handle(TDF_Attribute) TFunction_Logbook::NewEmpty() const
+{
+  return new TFunction_Logbook();
+}
+
+//=======================================================================
 //function : Dump
 //purpose  : Dump of modifications
 //=======================================================================
@@ -118,17 +302,20 @@ Standard_OStream& TFunction_Logbook::Dump(Standard_OStream& stream) const
   
   stream<<"Done = "<<isDone<<endl;
   stream<<"Touched labels: "<<endl;
-  for (itr.Initialize(myTouched); itr.More(); itr.Next()) {
+  for (itr.Initialize(myTouched); itr.More(); itr.Next())
+  {
     TDF_Tool::Entry(itr.Key(), as);
     stream<<as<<endl;
   }
   stream<<"Impacted labels: "<<endl;
-  for (itr.Initialize(myImpacted); itr.More(); itr.Next()) {
+  for (itr.Initialize(myImpacted); itr.More(); itr.Next())
+  {
     TDF_Tool::Entry(itr.Key(), as);
     stream<<as<<endl;
   }  
   stream<<"Valid labels: "<<endl;
-  for (itr.Initialize(myValid); itr.More(); itr.Next()) {
+  for (itr.Initialize(myValid); itr.More(); itr.Next())
+  {
     TDF_Tool::Entry(itr.Key(), as);
     stream<<as<<endl;
   }  
index 85572ca..4b8d602 100644 (file)
 #include <Standard_Handle.hxx>
 
 #include <TDF_LabelMap.hxx>
+#include <TDF_Attribute.hxx>
 #include <Standard_Boolean.hxx>
 #include <Standard_OStream.hxx>
 class TDF_Label;
+class Standard_GUID;
+class TFunction_Logbook;
+class TDF_Attribute;
+class TDF_RelocationTable;
 
+class TFunction_Logbook;
+DEFINE_STANDARD_HANDLE(TFunction_Logbook, TDF_Attribute)
 
 //! This class contains information which is written and
 //! read during the solving process. Information is divided
@@ -34,25 +41,32 @@ class TDF_Label;
 //! * Touched Labels  (modified by the end user),
 //! * Impacted Labels (modified during execution of the function),
 //! * Valid Labels    (within the valid label scope).
-class TFunction_Logbook 
+class TFunction_Logbook : public TDF_Attribute
 {
 public:
+  
+  //! Finds or Creates a TFunction_Logbook attribute at the root label accessed by <Access>.
+  //! Returns the attribute.
+  Standard_EXPORT static Handle(TFunction_Logbook) Set(const TDF_Label& Access);
+  
+  //! Returns the GUID for logbook attribute.
+  Standard_EXPORT static const Standard_GUID& GetID();
+  
 
-  DEFINE_STANDARD_ALLOC
+  //! The methods manipulating the data
+  //! (touched, impacted and valid labels)
+  //  ====================================
 
-  
-  //! next methods are solving declaration
-  //! ===================================
+  //! Constructor (empty).
   Standard_EXPORT TFunction_Logbook();
   
   //! Clears this logbook to its default, empty state.
   Standard_EXPORT void Clear();
-  
   Standard_EXPORT Standard_Boolean IsEmpty() const;
   
   //! Sets the label L as a touched label in this logbook.
   //! In other words, L is understood to have been modified by the end user.
-    void SetTouched (const TDF_Label& L);
+  Standard_EXPORT void SetTouched (const TDF_Label& L);
   
   //! Sets the label L as an impacted label in this logbook.
   //! This method is called by execution of the function driver.
@@ -60,62 +74,59 @@ public:
   
   //! Sets the label L as a valid label in this logbook.
   Standard_EXPORT void SetValid (const TDF_Label& L, const Standard_Boolean WithChildren = Standard_False);
-  
-    TDF_LabelMap& ChangeValid();
+  Standard_EXPORT void SetValid (const TDF_LabelMap& Ls);
   
   //! Returns True if the label L is touched  or impacted. This method
   //! is called by <TFunction_FunctionDriver::MustExecute>.
   //! If <WithChildren> is set to true, the method checks
   //! all the sublabels of <L> too.
-  //! next method to consult solving result
-  //! =====================================
   Standard_EXPORT Standard_Boolean IsModified (const TDF_Label& L, const Standard_Boolean WithChildren = Standard_False) const;
-  
 
   //! Returns the map of touched labels in this logbook.
   //! A touched label is the one modified by the end user.
-    const TDF_LabelMap& GetTouched() const;
-  
+  Standard_EXPORT const TDF_LabelMap& GetTouched() const;
 
   //! Returns the map of impacted labels contained in this logbook.
-    const TDF_LabelMap& GetImpacted() const;
+  Standard_EXPORT const TDF_LabelMap& GetImpacted() const;
   
   //! Returns the map of valid labels in this logbook.
-    const TDF_LabelMap& GetValid() const;
-  
-  //! Sets if the execution failed
-    void Done (const Standard_Boolean status);
+  Standard_EXPORT const TDF_LabelMap& GetValid() const;
+  Standard_EXPORT void GetValid(TDF_LabelMap& Ls) const;
   
-    Standard_Boolean IsDone() const;
+  //! Sets status of execution.
+  Standard_EXPORT void Done (const Standard_Boolean status);
   
-  Standard_EXPORT Standard_OStream& Dump (Standard_OStream& stream) const;
-
-
-
-
-protected:
+  //! Returns status of execution.
+  Standard_EXPORT Standard_Boolean IsDone() const;
 
 
+  //! The methods inherited from TDF_Attribute
+  //  ========================================
 
+  //! Returns the ID of the attribute.
+  Standard_EXPORT const Standard_GUID& ID() const;
+  
+  //! Undos (and redos) the attribute.
+  Standard_EXPORT virtual void Restore (const Handle(TDF_Attribute)& with);
+  
+  //! Pastes the attribute to another label.
+  Standard_EXPORT virtual void Paste (const Handle(TDF_Attribute)& into, const Handle(TDF_RelocationTable)& RT) const;
+  
+  //! Returns a new empty instance of the attribute.
+  Standard_EXPORT virtual Handle(TDF_Attribute) NewEmpty() const Standard_OVERRIDE;
+  
+  //! Prints th data of the attributes (touched, impacted and valid labels).
+  Standard_EXPORT virtual Standard_OStream& Dump (Standard_OStream& anOS) const Standard_OVERRIDE;
 
 
 private:
 
-
-
   TDF_LabelMap myTouched;
   TDF_LabelMap myImpacted;
   TDF_LabelMap myValid;
   Standard_Boolean isDone;
-
-
 };
 
-
 #include <TFunction_Logbook.lxx>
 
-
-
-
-
 #endif // _TFunction_Logbook_HeaderFile
index 6b6d9fb..b84c732 100644 (file)
 
 inline void TFunction_Logbook::SetTouched(const TDF_Label& L)
 {
-  myTouched.Add(L);
+  if (!myTouched.Contains(L))
+  {
+    Backup();
+    myTouched.Add(L);
+  }
 }
 
 inline const TDF_LabelMap& TFunction_Logbook::GetTouched() const
@@ -29,11 +33,6 @@ inline const TDF_LabelMap& TFunction_Logbook::GetImpacted() const
   return myImpacted;
 }
 
-inline TDF_LabelMap& TFunction_Logbook::ChangeValid()
-{
-  return myValid;
-}
-
 inline const TDF_LabelMap& TFunction_Logbook::GetValid() const
 {
   return myValid;
@@ -41,7 +40,11 @@ inline const TDF_LabelMap& TFunction_Logbook::GetValid() const
 
 inline void TFunction_Logbook::Done(const Standard_Boolean status)
 {
-  isDone = status;
+  if (isDone != status)
+  {
+    Backup();
+    isDone = status;
+  }
 }
 
 inline Standard_Boolean TFunction_Logbook::IsDone() const
index e773038..95e56be 100644 (file)
@@ -20,7 +20,6 @@
 #include <TDF_Label.hxx>
 #include <TDF_MapIteratorOfLabelMap.hxx>
 #include <TDF_RelocationTable.hxx>
-#include <TFunction_Logbook.hxx>
 #include <TFunction_Scope.hxx>
 
 //=======================================================================
@@ -175,9 +174,11 @@ const TDF_Label& TFunction_Scope::GetFunction(const Standard_Integer ID) const
 //purpose  : Returns the Logbook.
 //=======================================================================
 
-TFunction_Logbook& TFunction_Scope::GetLogbook()
+Handle(TFunction_Logbook) TFunction_Scope::GetLogbook() const 
 {
-  return myLogbook;
+  Handle(TFunction_Logbook) logbook;
+  FindAttribute(TFunction_Logbook::GetID(), logbook);
+  return logbook;
 }
 
 //=======================================================================
@@ -192,26 +193,6 @@ void TFunction_Scope::Restore(const Handle(TDF_Attribute)& other)
   // Functions
   myFunctions = S->myFunctions; // copying...
   myFreeID = S->myFreeID;
-
-  // Logbook
-  myLogbook.Clear();
-  TDF_MapIteratorOfLabelMap itrm;
-  // Valid labels
-  for (itrm.Initialize(S->myLogbook.GetValid()); itrm.More(); itrm.Next())
-  {
-    myLogbook.SetValid(itrm.Key(), Standard_False);
-  }
-  // Touched labels
-  for (itrm.Initialize(S->myLogbook.GetTouched()); itrm.More(); itrm.Next())
-  {
-    myLogbook.SetTouched(itrm.Key());
-  }
-  // Impacted labels
-  for (itrm.Initialize(S->myLogbook.GetImpacted()); itrm.More(); itrm.Next())
-  {
-    myLogbook.SetImpacted(itrm.Key(), Standard_False);
-  }
-  myLogbook.Done(S->myLogbook.IsDone());
 }
 
 //=======================================================================
index 73bbb86..faf4957 100644 (file)
@@ -83,7 +83,7 @@ public:
   //! Returns the Logbook used in TFunction_Driver methods.
   //! Implementation of Attribute methods
   //! ===================================
-  Standard_EXPORT TFunction_Logbook& GetLogbook();
+  Standard_EXPORT Handle(TFunction_Logbook) GetLogbook() const;
   
   Standard_EXPORT const Standard_GUID& ID() const Standard_OVERRIDE;
   
@@ -120,7 +120,6 @@ private:
 
 
   TFunction_DoubleMapOfIntegerLabel myFunctions;
-  TFunction_Logbook myLogbook;
   Standard_Integer myFreeID;