0026393: Add draw commands to evaluate history of modifications of BOP
authoremv <emv@opencascade.com>
Tue, 28 Jul 2015 08:44:27 +0000 (11:44 +0300)
committerbugmaster <bugmaster@opencascade.com>
Tue, 28 Jul 2015 14:59:13 +0000 (17:59 +0300)
DRAW commands bmodified, bisdeleted, bgenerated have been implemented to track
the history of shapes modifications in Boolean and General Fuse operations.

Test-case for issue #26393

src/BOPTest/BOPTest.cxx
src/BOPTest/BOPTest.hxx
src/BOPTest/BOPTest_HistoryCommands.cxx [new file with mode: 0644]
src/BOPTest/BOPTest_PartitionCommands.cxx
src/BOPTest/FILES
tests/bugs/modalg_6/bug26393 [new file with mode: 0644]

index 5417b42..9955481 100644 (file)
@@ -39,8 +39,9 @@ void  BOPTest::AllCommands(Draw_Interpretor& theCommands)
   BOPTest::TolerCommands     (theCommands);
   BOPTest::ObjCommands       (theCommands);
   BOPTest::PartitionCommands (theCommands);
-  BOPTest::APICommands      (theCommands);
-  BOPTest::OptionCommands   (theCommands);
+  BOPTest::APICommands       (theCommands);
+  BOPTest::OptionCommands    (theCommands);
+  BOPTest::HistoryCommands   (theCommands);
 }
 //=======================================================================
 //function : Factory
index 6096bda..94d55ae 100644 (file)
@@ -53,6 +53,7 @@ public:
   
   Standard_EXPORT static void Factory (Draw_Interpretor& aDI);
 
+  Standard_EXPORT static void HistoryCommands  (Draw_Interpretor& aDI);
 
 
 
diff --git a/src/BOPTest/BOPTest_HistoryCommands.cxx b/src/BOPTest/BOPTest_HistoryCommands.cxx
new file mode 100644 (file)
index 0000000..131e215
--- /dev/null
@@ -0,0 +1,184 @@
+// Created by: Eugeny MALTCHIKOV
+// Copyright (c) 2015 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#include <BOPTest.ixx>
+//
+#include <Draw.hxx>
+#include <DBRep.hxx>
+//
+#include <BRep_Builder.hxx>
+//
+#include <TopoDS_Compound.hxx>
+//
+#include <BOPAlgo_Builder.hxx>
+//
+#include <TopTools_ListOfShape.hxx>
+#include <TopTools_ListIteratorOfListOfShape.hxx>
+//
+#include <BOPTest_DrawableShape.hxx>
+#include <BOPTest_Objects.hxx>
+
+//
+static Standard_Integer bmodified  (Draw_Interpretor&, Standard_Integer, const char**); 
+static Standard_Integer bgenerated (Draw_Interpretor&, Standard_Integer, const char**);
+static Standard_Integer bisdeleted (Draw_Interpretor&, Standard_Integer, const char**);
+
+//=======================================================================
+//function : HistoryCommands
+//purpose  : 
+//=======================================================================
+void BOPTest::HistoryCommands(Draw_Interpretor& theCommands)
+{
+  static Standard_Boolean done = Standard_False;
+  if (done) return;
+  done = Standard_True;
+  // Chapter's name
+  const char* g = "BOPTest commands";
+  // Commands  
+  theCommands.Add("bmodified" , "Use: bmodified  rc shape", __FILE__, bmodified , g);
+  theCommands.Add("bgenerated", "Use: bgenerated rc shape", __FILE__, bgenerated, g);
+  theCommands.Add("bisdeleted", "Use: bisdeleted shape"   , __FILE__, bisdeleted, g);
+}
+
+//=======================================================================
+//function : bmodified
+//purpose  : 
+//=======================================================================
+Standard_Integer bmodified(Draw_Interpretor& di, 
+                           Standard_Integer n, 
+                           const char** a) 
+{ 
+  if (n < 3) {
+    di << "Use: bmodified rc shape\n";
+    return 1;
+  }
+  //
+  TopoDS_Shape aS = DBRep::Get(a[2]);
+  if (aS.IsNull()) {
+    di << "Null shape\n";
+    return 1;
+  }
+  //
+  TopAbs_ShapeEnum aType = aS.ShapeType();
+  if (!(aType==TopAbs_VERTEX || aType==TopAbs_EDGE || 
+        aType==TopAbs_FACE   || aType==TopAbs_SOLID)) {
+    di << "The shape must be one of the following types: VERTEX, EDGE, FACE or SOLID\n";
+    return 1;
+  } 
+  //
+  BOPAlgo_Builder& aBuilder = BOPTest_Objects::Builder();
+  const TopTools_ListOfShape& aLS = aBuilder.Modified(aS);
+  //
+  if (aLS.IsEmpty()) {
+    di << "The shape has not been modified\n";
+    return 0;
+  }
+  //
+  BRep_Builder aBB;
+  TopoDS_Compound aRes;
+  //
+  aBB.MakeCompound(aRes);
+  TopTools_ListIteratorOfListOfShape aIt(aLS);
+  for (; aIt.More(); aIt.Next()) {
+    const TopoDS_Shape& aS = aIt.Value();
+    aBB.Add(aRes, aS);
+  }
+  //
+  DBRep::Set(a[1], aRes);
+  //
+  return 0;
+}
+
+//=======================================================================
+//function : bgenerated
+//purpose  : 
+//=======================================================================
+Standard_Integer bgenerated(Draw_Interpretor& di, 
+                            Standard_Integer n, 
+                            const char** a) 
+{ 
+  if (n < 3) {
+    di << "Use: bgenerated rc shape\n";
+    return 1;
+  }
+  //
+  TopoDS_Shape aS = DBRep::Get(a[2]);
+  if (aS.IsNull()) {
+    di << "Null shape\n";
+    return 1;
+  }
+  //
+  TopAbs_ShapeEnum aType = aS.ShapeType();
+  if (!(aType==TopAbs_VERTEX || aType==TopAbs_EDGE || 
+        aType==TopAbs_FACE   || aType==TopAbs_SOLID)) {
+    di << "The shape must be one of the following types: VERTEX, EDGE, FACE or SOLID\n";
+    return 1;
+  } 
+  //
+  BOPAlgo_Builder& aBuilder = BOPTest_Objects::Builder();
+  const TopTools_ListOfShape& aLS = aBuilder.Generated(aS);
+  //
+  if (aLS.IsEmpty()) {
+    di << "No shapes were generated from the shape\n";
+    return 0;
+  }
+  //
+  BRep_Builder aBB;
+  TopoDS_Compound aRes;
+  //
+  aBB.MakeCompound(aRes);
+  TopTools_ListIteratorOfListOfShape aIt(aLS);
+  for (; aIt.More(); aIt.Next()) {
+    const TopoDS_Shape& aS = aIt.Value();
+    aBB.Add(aRes, aS);
+  }
+  //
+  DBRep::Set(a[1], aRes);
+  //
+  return 0;
+}
+
+//=======================================================================
+//function : bisdeleted
+//purpose  : 
+//=======================================================================
+Standard_Integer bisdeleted(Draw_Interpretor& di, 
+                            Standard_Integer n, 
+                            const char** a) 
+{ 
+  if (n < 2) {
+    di << "Use: bisdeleted shape\n";
+    return 1;
+  }
+  //
+  TopoDS_Shape aS = DBRep::Get(a[1]);
+  if (aS.IsNull()) {
+    di << "Null shape\n";
+    return 1;
+  }
+  //
+  TopAbs_ShapeEnum aType = aS.ShapeType();
+  if (!(aType==TopAbs_VERTEX || aType==TopAbs_EDGE || 
+        aType==TopAbs_FACE   || aType==TopAbs_SOLID)) {
+    di << "The shape must be one of the following types: VERTEX, EDGE, FACE or SOLID\n";
+    return 1;
+  } 
+  //
+  BOPAlgo_Builder& aBuilder = BOPTest_Objects::Builder();
+  Standard_Boolean isDeleted = aBuilder.IsDeleted(aS);
+  //
+  di << (isDeleted ? "Deleted" : "Not deleted") << "\n";
+  //
+  return 0;
+}
index 35dabe1..b03a019 100644 (file)
@@ -158,6 +158,7 @@ Standard_Integer bbuild(Draw_Interpretor& di,
   //
   BOPAlgo_PaveFiller& aPF=BOPTest_Objects::PaveFiller();
   //
+  BOPTest_Objects::SetBuilderDefault();
   BOPAlgo_Builder& aBuilder=BOPTest_Objects::Builder();
   aBuilder.Clear();
   //
@@ -320,6 +321,8 @@ Standard_Integer bbop(Draw_Interpretor& di,
     return 0;
   }
   //
+  BOPTest_Objects::SetBuilder(pBuilder);
+  //
   DBRep::Set(a[1], aR);
   return 0;
 }
index a371eb4..244f6c1 100755 (executable)
@@ -12,3 +12,4 @@ BOPTest_Objects.hxx
 BOPTest_OptionCommands.cxx
 BOPTest_PartitionCommands.cxx
 BOPTest_TolerCommands.cxx
+BOPTest_HistoryCommands.cxx
\ No newline at end of file
diff --git a/tests/bugs/modalg_6/bug26393 b/tests/bugs/modalg_6/bug26393
new file mode 100644 (file)
index 0000000..9c731be
--- /dev/null
@@ -0,0 +1,102 @@
+puts "========"
+puts "OCC26393"
+puts "========"
+puts ""
+#################################################################
+# Add draw commands to evaluate history of modifications of BOP
+#################################################################
+
+restore [locate_data_file OCC26393-w.brep] w
+restore [locate_data_file OCC26393-v1.brep] v0
+restore [locate_data_file OCC26393-v2.brep] v1
+
+bclearobjects
+bcleartools
+baddobjects w
+baddtools v0 v1
+bfillds
+bbuild r
+
+set bug_info [bmodified v0m v0]
+set bug_info [string trim [string range $bug_info 0 [expr {[string first "\n" $bug_info] - 1}]]]
+if {$bug_info != "The shape has not been modified"} {
+  puts "ERROR: OCC26393 is reproduced. Command bmodified does not work."
+}
+
+set bug_info [bmodified v1m v1]
+set bug_info [string trim [string range $bug_info 0 [expr {[string first "\n" $bug_info] - 1}]]]
+if {$bug_info != "The shape has not been modified"} {
+  puts "ERROR: OCC26393 is reproduced. Command bmodified does not work."
+}
+
+set bug_info [bisdeleted v0]
+set bug_info [string trim [string range $bug_info 0 [expr {[string first "\n" $bug_info] - 1}]]]
+if {$bug_info != "Not deleted"} {
+  puts "ERROR: OCC26393 is reproduced. Command bisdeleted does not work."
+}
+
+set bug_info [bisdeleted v1]
+set bug_info [string trim [string range $bug_info 0 [expr {[string first "\n" $bug_info] - 1}]]]
+if {$bug_info != "Not deleted"} {
+  puts "ERROR: OCC26393 is reproduced. Command bisdeleted does not work."
+}
+
+explode w e
+
+set bug_info [bmodified w1m w_1]
+if {$bug_info != ""} {
+  puts "ERROR: OCC26393 is reproduced. Command bmodified does not work correctly."
+}
+
+set bug_info [bisdeleted w_1]
+set bug_info [string trim [string range $bug_info 0 [expr {[string first "\n" $bug_info] - 1}]]]
+if {$bug_info != "Not deleted"} {
+  puts "ERROR: OCC26393 is reproduced. Command bisdeleted does not work."
+}
+
+set bug_info [bmodified w2m w_2]
+set bug_info [string trim [string range $bug_info 0 [expr {[string first "\n" $bug_info] - 1}]]]
+if {$bug_info != "The shape has not been modified"} {
+  puts "ERROR: OCC26393 is reproduced. Command bmodified does not work."
+}
+
+set bug_info [bisdeleted w_2]
+set bug_info [string trim [string range $bug_info 0 [expr {[string first "\n" $bug_info] - 1}]]]
+if {$bug_info != "Not deleted"} {
+  puts "ERROR: OCC26393 is reproduced. Command bisdeleted does not work."
+}
+
+set bug_info [bmodified w3m w_3]
+set bug_info [string trim [string range $bug_info 0 [expr {[string first "\n" $bug_info] - 1}]]]
+if {$bug_info != "The shape has not been modified"} {
+  puts "ERROR: OCC26393 is reproduced. Command bmodified does not work."
+}
+
+set bug_info [bisdeleted w_3]
+set bug_info [string trim [string range $bug_info 0 [expr {[string first "\n" $bug_info] - 1}]]]
+if {$bug_info != "Not deleted"} {
+  puts "ERROR: OCC26393 is reproduced. Command bisdeleted does not work."
+}
+
+set bug_info [bmodified w4m w_4]
+if {$bug_info != ""} {
+  puts "ERROR: OCC26393 is reproduced. Command bmodified does not work correctly."
+}
+
+set bug_info [bisdeleted w_4]
+set bug_info [string trim [string range $bug_info 0 [expr {[string first "\n" $bug_info] - 1}]]]
+if {$bug_info != "Not deleted"} {
+  puts "ERROR: OCC26393 is reproduced. Command bisdeleted does not work."
+}
+
+set bug_info [bmodified w5m w_5]
+set bug_info [string trim [string range $bug_info 0 [expr {[string first "\n" $bug_info] - 1}]]]
+if {$bug_info != "The shape has not been modified"} {
+  puts "ERROR: OCC26393 is reproduced. Command bmodified does not work."
+}
+
+set bug_info [bisdeleted w_5]
+set bug_info [string trim [string range $bug_info 0 [expr {[string first "\n" $bug_info] - 1}]]]
+if {$bug_info != "Not deleted"} {
+  puts "ERROR: OCC26393 is reproduced. Command bisdeleted does not work."
+}