0029768: Visualization, TKOpenGl - structure is entirely clipped by suppressed clipping
authorkgv <kgv@opencascade.com>
Mon, 14 May 2018 16:25:16 +0000 (19:25 +0300)
committerabv <abv@opencascade.com>
Thu, 24 May 2018 12:36:23 +0000 (15:36 +0300)
OpenGl_Structure::Render(), added missing check for disabled state of the plane.
vclipplane command has been extended with new option -setOverrideGlobal.

src/OpenGl/OpenGl_Structure.cxx
src/ViewerTest/ViewerTest_ViewerCommands.cxx
tests/bugs/vis/bug29768 [new file with mode: 0644]

index bfb9938..60b5aec 100644 (file)
@@ -605,7 +605,7 @@ void OpenGl_Structure::Render (const Handle(OpenGl_Workspace) &theWorkspace) con
       for (OpenGl_ClippingIterator aPlaneIt (aCtx->Clipping()); aPlaneIt.More(); aPlaneIt.Next())
       {
         const Handle(Graphic3d_ClipPlane)& aPlane = aPlaneIt.Value();
-        if (!aPlane->IsOn())
+        if (aPlaneIt.IsDisabled())
         {
           continue;
         }
index d1c8f2e..8fea4aa 100644 (file)
@@ -8681,10 +8681,12 @@ static int VClipPlane (Draw_Interpretor& theDi, Standard_Integer theArgsNb, cons
       return 0;
     }
     else if (aChangeArg == "-set"
-          || aChangeArg == "-unset")
+          || aChangeArg == "-unset"
+          || aChangeArg == "-setoverrideglobal")
     {
       // set / unset plane command
-      Standard_Boolean toSet = aChangeArg == "-set";
+      const Standard_Boolean toSet            = aChangeArg.StartsWith ("-set");
+      const Standard_Boolean toOverrideGlobal = aChangeArg == "-setoverrideglobal";
       Standard_Integer anIt = 1;
       for (; anIt < aNbChangeArgs; ++anIt)
       {
@@ -8694,7 +8696,8 @@ static int VClipPlane (Draw_Interpretor& theDi, Standard_Integer theArgsNb, cons
         {
           break;
         }
-        else if (ViewerTest_myViews.IsBound1 (anEntityName))
+        else if (!toOverrideGlobal
+               && ViewerTest_myViews.IsBound1 (anEntityName))
         {
           Handle(V3d_View) aView = ViewerTest_myViews.Find1 (anEntityName);
           if (toSet)
@@ -8718,6 +8721,10 @@ static int VClipPlane (Draw_Interpretor& theDi, Standard_Integer theArgsNb, cons
           {
             aIObj->RemoveClipPlane (aClipPlane);
           }
+          if (!aIObj->ClipPlanes().IsNull())
+          {
+            aIObj->ClipPlanes()->SetOverrideGlobal (toOverrideGlobal);
+          }
         }
         else
         {
@@ -12387,7 +12394,7 @@ void ViewerTest::ViewerCommands(Draw_Interpretor& theCommands)
   theCommands.Add("vclipplane",
               "vclipplane planeName [{0|1}]"
       "\n\t\t:   [-equation A B C D]"
-      "\n\t\t:   [-set|-unset [objects|views]]"
+      "\n\t\t:   [-set|-unset|-setOverrideGlobal [objects|views]]"
       "\n\t\t:   [-maxPlanes]"
       "\n\t\t:   [-capping {0|1}]"
       "\n\t\t:     [-color R G B] [-hatch {on|off|ID}]"
diff --git a/tests/bugs/vis/bug29768 b/tests/bugs/vis/bug29768
new file mode 100644 (file)
index 0000000..6c48bad
--- /dev/null
@@ -0,0 +1,23 @@
+puts "============"
+puts "0029768: Visualization, TKOpenGl - structure is entirely clipped by suppressed clipping"
+puts "============"
+puts ""
+
+vclear
+vinit View1
+vaxo
+vpoint p0 0 0 0
+vzbufftrihedron
+box b0 0 0 0 1 1 1
+box b1 3 0 0 1 1 1
+vdisplay -dispMode 1 b0 b1
+vsetcolor b0 RED
+vsetcolor b1 GREEN
+vfit
+
+vclipplane pv  equation -1 0 0  0.5 -set
+vclipplane pb0 equation  0 1 0 -0.5 -set b0
+vclipplane pb1 equation  0 1 0 -0.5 -setOverrideGlobal b1
+
+if { [vreadpixel 300 200 rgb name] != "GREEN3" } { puts "Error: box b1 is fully clipped" }
+vdump $imagedir/${casename}.png