]> OCCT Git - occt-copy.git/commitdiff
0030791: Visualization - possibility to display materials by different hatching style...
authorage <age@opencascade.com>
Thu, 1 Oct 2020 09:48:24 +0000 (12:48 +0300)
committerage <age@opencascade.com>
Fri, 2 Oct 2020 11:47:02 +0000 (14:47 +0300)
# added check if capping plane should be rendered

src/OpenGl/OpenGl_CappingAlgo.cxx

index 8076946136a93de77be52a4edd1fa570d574dad8..da513bca692945046f6afe435c1683c22b3ff6b6 100755 (executable)
@@ -244,6 +244,28 @@ namespace
       // clear stencil only if something has been actually drawn
       theStencilSentry.Init();
 
+      const OpenGl_Aspects*              aGroupAspectFace    = aGroupIter.Value()->GlAspects();
+      const OpenGl_CappingPlaneResource* aGroupAspectCapping = aGroupIter.Value()->AspectFillCapping();
+      const OpenGl_CappingPlaneResource* anAspectCapping =
+          thePlane && (!aGroupAspectCapping || aGroupAspectCapping->Aspect().IsNull() || aPlane->ToOverrideCappingAspect())
+        ? thePlane.get()
+        : aGroupAspectCapping;
+
+      if (anAspectCapping == NULL)
+      {
+        anAspectCapping = THE_DEFAULT_ASPECT;
+      }
+
+      const OpenGl_Aspects*  anAspectFace = anAspectCapping->CappingFaceAspect (aGroupAspectFace);
+
+      // check if capping plane should be rendered within current pass (only opaque / only transparent)
+      theWorkspace->SetAspects (anAspectFace);
+      theWorkspace->SetRenderFilter (aPrevFilter);
+      if (!theWorkspace->ShouldRender (theQuad))
+      {
+        continue;
+      }
+
       // suppress only opaque/transparent filter since for filling stencil the whole geometry should be drawn
       theWorkspace->SetRenderFilter (anAnyFilter);
 
@@ -294,19 +316,6 @@ namespace
         glEnable (GL_DEPTH_TEST);
       }
 
-      const OpenGl_Aspects*              aGroupAspectFace    = aGroupIter.Value()->GlAspects();
-      const OpenGl_CappingPlaneResource* aGroupAspectCapping = aGroupIter.Value()->AspectFillCapping();
-      const OpenGl_CappingPlaneResource* anAspectCapping =
-          thePlane && (!aGroupAspectCapping || aGroupAspectCapping->Aspect().IsNull() || aPlane->ToOverrideCappingAspect())
-        ? thePlane.get()
-        : aGroupAspectCapping;
-
-      if (anAspectCapping == NULL)
-      {
-        anAspectCapping = THE_DEFAULT_ASPECT;
-      }
-
-      const OpenGl_Aspects*  anAspectFace     = anAspectCapping->CappingFaceAspect (aGroupAspectFace);
       const Standard_Boolean hasHatch         = anAspectCapping->Aspect()->ToDrawHatch();
       const OpenGl_Aspects*  anAspectHatching = hasHatch ? anAspectCapping->HatchingFaceAspect() : NULL;
       const Standard_Boolean hasTextureHatch  = hasHatch && !anAspectCapping->Aspect()->TextureHatch().IsNull();