0029076: Visualization - implement element shrinking Shader
[occt.git] / src / Graphic3d / Graphic3d_AspectFillArea3d.hxx
index 57b4c56..48e2f8e 100644 (file)
@@ -255,19 +255,26 @@ public:
 public:
 
   //! Returns true if edges should be drawn (false by default).
-  bool ToDrawEdges() const { return myToDrawEdges; }
+  bool ToDrawEdges() const { return myToDrawEdges && myEdgeType != Aspect_TOL_EMPTY; }
 
   //! Set if edges should be drawn or not.
-  void SetDrawEdges (bool theToDraw) { myToDrawEdges = theToDraw; }
+  void SetDrawEdges (bool theToDraw)
+  {
+    myToDrawEdges = theToDraw;
+    if (myEdgeType == Aspect_TOL_EMPTY)
+    {
+      myEdgeType = Aspect_TOL_SOLID;
+    }
+  }
 
   //! Returns true if edges should be drawn.
-  bool Edge() const { return myToDrawEdges; }
+  bool Edge() const { return ToDrawEdges(); }
 
   //! The edges of FillAreas are drawn.
-  void SetEdgeOn() { myToDrawEdges = true; }
+  void SetEdgeOn() { SetDrawEdges (true); }
 
   //! The edges of FillAreas are not drawn.
-  void SetEdgeOff() { myToDrawEdges = false; }
+  void SetEdgeOff() { SetDrawEdges (false); }
 
   //! Return color of edges.
   const Quantity_Color& EdgeColor() const { return myEdgeColor.GetRGB(); }
@@ -278,6 +285,9 @@ public:
   //! Modifies the color of the edge of the face
   void SetEdgeColor (const Quantity_Color& theColor) { myEdgeColor.SetRGB (theColor); }
 
+  //! Modifies the color of the edge of the face
+  void SetEdgeColor (const Quantity_ColorRGBA& theColor) { myEdgeColor = theColor; }
+
   //! Return edges line type.
   Aspect_TypeOfLine EdgeLineType() const { return myEdgeType; }
 
@@ -298,6 +308,18 @@ public:
     myEdgeWidth = (float )theWidth;
   }
 
+  //! Returns TRUE if drawing element edges should discard first edge in triangle; FALSE by default.
+  //! Graphics hardware works mostly with triangles, so that wireframe presentation will draw triangle edges by default.
+  //! This flag allows rendering wireframe presentation of quad-only array split into triangles.
+  //! For this, quads should be split in specific order, so that the quad diagonal (to be NOT rendered) goes first:
+  //!     1------2
+  //!    /      /   Triangle #1: 2-0-1; Triangle #2: 0-2-3
+  //!   0------3
+  bool ToSkipFirstEdge() const { return myToSkipFirstEdge; }
+
+  //! Set skip first triangle edge flag for drawing wireframe presentation of quads array split into triangles.
+  void SetSkipFirstEdge (bool theToSkipFirstEdge) { myToSkipFirstEdge = theToSkipFirstEdge; }
+
 public:
 
   //! Returns the hatch type used when InteriorStyle is IS_HATCH
@@ -370,6 +392,7 @@ protected:
   Handle(Graphic3d_HatchStyle) myHatchStyle;
 
   Graphic3d_PolygonOffset myPolygonOffset;
+  bool                    myToSkipFirstEdge;
   bool                    myToDistinguishMaterials;
   bool                    myToDrawEdges;
   bool                    myToSuppressBackFaces;