Cosmetic fixes.
glDepthFunc fix.
Graphic3d_Vec4.hxx
Graphic3d_Mat4.hxx
Graphic3d_Mat4d.hxx
+Graphic3d_ZLayerSettings.hxx
Graphic3d_Vertex.hxx
Graphic3d_Vertex.cxx
Graphic3d_MarkerImage.hxx
imported Mat4;
imported Mat4d;
+ imported ZLayerSettings;
+
--------------------
-- Category: Classes
--------------------
PrintAlgo from Aspect,
DisplayConnection_Handle from Aspect,
+ ZLayerSettings from Graphic3d,
+
AspectLine3d from Graphic3d,
AspectMarker3d from Graphic3d,
AspectText3d from Graphic3d,
---Purpose: Get Z layer ID of structure. If the structure doesn't
-- exists in graphic driver, the method returns -1.
+ SetZLayerSettings( me : mutable;
+ theCView : CView from Graphic3d;
+ theLayerId : Integer from Standard;
+ theSettings : ZLayerSettings from Graphic3d)
+ is deferred;
+ ---Purpose: Sets the settings for a single Z layer of specified view.
+
-----------------------------
-- Category: Internal methods
-----------------------------
TypeOfHighlightMethod from Aspect,
TypeOfUpdate from Aspect,
+ ZLayerSettings from Graphic3d,
+
DataStructureManager from Graphic3d,
AspectFillArea3d from Graphic3d,
AspectLine3d from Graphic3d,
---Purpose: Get Z layer ID assigned to structure. If the structure
-- has no layer ID (deleted from graphic driver), the method returns -1.
+ SetZLayerSettings ( me : mutable;
+ theLayerId : Integer from Standard;
+ theSettings : ZLayerSettings from Graphic3d )
+ is deferred;
+ ---Purpose: Sets the settings for a single Z layer for all managed views.
+
+ ZLayerSettings ( me : mutable;
+ theLayerId : Integer from Standard )
+ returns ZLayerSettings from Graphic3d is deferred;
+ ---Purpose: Returns the settings of a single Z layer.
+
AddZLayer ( me : mutable;
theLayerId : in out Integer from Standard )
returns Boolean from Standard is deferred;
--- /dev/null
+// Copyright (c) 2014 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 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.
+
+#ifndef _Graphic3d_ZLayerSettings_HeaderFile
+#define _Graphic3d_ZLayerSettings_HeaderFile
+
+#include <Standard_TypeDef.hxx>
+
+enum Graphic3d_ZLayerSetting
+{
+ Graphic3d_ZLayerDepthTest = 1,
+ Graphic3d_ZLayerDepthWrite = 2,
+ Graphic3d_ZLayerDepthClear = 4,
+ Graphic3d_ZLayerDepthOffset = 8
+};
+
+struct Graphic3d_ZLayerSettings
+{
+ Graphic3d_ZLayerSettings()
+ : DepthOffsetFactor (1.0f),
+ DepthOffsetUnits (1.0f),
+ Flags (Graphic3d_ZLayerDepthTest
+ | Graphic3d_ZLayerDepthWrite
+ | Graphic3d_ZLayerDepthClear)
+ {}
+
+ //! Returns true if theSetting is enabled.
+ const Standard_Boolean IsSettingEnabled (const Graphic3d_ZLayerSetting theSetting) const
+ {
+ return (Flags & theSetting) == theSetting;
+ }
+
+ //! Enables theSetting
+ void EnableSetting (const Graphic3d_ZLayerSetting theSetting)
+ {
+ Flags = Flags | theSetting;
+ }
+
+ //! Disables theSetting
+ void DisableSetting (const Graphic3d_ZLayerSetting theSetting)
+ {
+ Flags = Flags & (~theSetting);
+ }
+
+ //! Sets minimal possible positive depth offset.
+ //! Access DepthOffsetFactor and DepthOffsetUnits values for manual offset control.
+ void SetDepthOffsetPositive()
+ {
+ DepthOffsetFactor = 1.f;
+ DepthOffsetUnits = 1.f;
+ EnableSetting (Graphic3d_ZLayerDepthOffset);
+ }
+
+ //! Sets minimal possible negative depth offset.
+ //! Access DepthOffsetFactor and DepthOffsetUnits values for manual offset control.
+ void SetDepthOffsetNegative()
+ {
+ DepthOffsetFactor = 1.f;
+ DepthOffsetUnits = -1.f;
+ EnableSetting (Graphic3d_ZLayerDepthOffset);
+ }
+
+ Standard_ShortReal DepthOffsetFactor; //!< Factor argument value for OpenGl glPolygonOffset function.
+ Standard_ShortReal DepthOffsetUnits; //!< Units argument value for OpenGl glPolygonOffset function.
+
+ Standard_Integer Flags; //!< Storage field for settings.
+};
+
+#endif // _Graphic3d_ZLayerSettings_HeaderFile
OpenGl_LayerList.hxx
OpenGl_IndexBuffer.hxx
OpenGl_IndexBuffer.cxx
+OpenGl_Layer.cxx
+OpenGl_Layer.hxx
OpenGl_TextureBufferArb.hxx
OpenGl_TextureBufferArb.cxx
OpenGl_Vec.hxx
//! Get Z layer ID of the structure. If the structure doesn't exists in graphic driver, the method returns -1.
Standard_EXPORT Standard_Integer GetZLayer (const Graphic3d_CStructure& theCStructure) const;
+ //! Sets the settings for a single Z layer of specified view.
+ Standard_EXPORT void SetZLayerSettings (const Graphic3d_CView& theCView,
+ const Standard_Integer theLayerId,
+ const Graphic3d_ZLayerSettings& theSettings);
+
public:
//! @return the visualization options
//function : RemoveZLayer
//purpose :
//=======================================================================
-
void OpenGl_GraphicDriver::RemoveZLayer (const Graphic3d_CView& theCView,
const Standard_Integer theLayerId)
{
if (aCView)
aCView->View->RemoveZLayer (theLayerId);
}
+
+//=======================================================================
+//function : SetZLayerSettings
+//purpose :
+//=======================================================================
+Standard_EXPORT void OpenGl_GraphicDriver::SetZLayerSettings (const Graphic3d_CView& theCView,
+ const Standard_Integer theLayerId,
+ const Graphic3d_ZLayerSettings& theSettings)
+{
+ const OpenGl_CView* aCView = (const OpenGl_CView* )theCView.ptrView;
+ if (aCView)
+ aCView->View->SetZLayerSettings (theLayerId, theSettings);
+}
--- /dev/null
+// Created on: 2014-03-31
+// Created by: Danila ULYANOV
+// Copyright (c) 2014 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 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 <OpenGl_Layer.hxx>
+
+#include <OpenGl_GlCore11.hxx>
+
+//=======================================================================
+//function : OpenGl_Layer
+//purpose :
+//=======================================================================
+OpenGl_Layer::OpenGl_Layer (const Standard_Integer theNbPriorities)
+ : myPriorityList (theNbPriorities)
+{
+ //
+}
+
+//=======================================================================
+//function : Render
+//purpose :
+//=======================================================================
+void OpenGl_Layer::Render (const Handle(OpenGl_Workspace) &AWorkspace, int theDefaultDepthFunc) const
+{
+ // separate depth buffers
+ if (IsSettingEnabled (Graphic3d_ZLayerDepthClear))
+ {
+ glClear (GL_DEPTH_BUFFER_BIT);
+ }
+
+ // handle depth test
+ if (IsSettingEnabled (Graphic3d_ZLayerDepthTest))
+ {
+ glDepthFunc (theDefaultDepthFunc);
+ }
+ else
+ {
+ glDepthFunc (GL_ALWAYS);
+ }
+
+ // handle depth offset
+ if (IsSettingEnabled (Graphic3d_ZLayerDepthOffset))
+ {
+ glPolygonOffset (myLayerSettings.DepthOffsetFactor, myLayerSettings.DepthOffsetUnits);
+ }
+ else
+ {
+ glPolygonOffset (0.0f, 0.0f);
+ }
+
+ // handle depth write
+ if (IsSettingEnabled (Graphic3d_ZLayerDepthWrite))
+ {
+ glDepthMask (GL_TRUE);
+ }
+ else
+ {
+ glDepthMask (GL_FALSE);
+ }
+
+ // render priority list
+ myPriorityList.Render (AWorkspace);
+}
--- /dev/null
+// Created on: 2014-03-31
+// Created by: Danila ULYANOV
+// Copyright (c) 2014 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 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.
+
+#ifndef _OpenGl_Layer_Header
+#define _OpenGl_Layer_Header
+
+#include <OpenGl_PriorityList.hxx>
+#include <Graphic3d_ZLayerSettings.hxx>
+
+class Handle(OpenGl_Workspace);
+
+class OpenGl_Layer
+{
+public:
+
+ //! Initializes associated priority list and layer properties
+ OpenGl_Layer (const Standard_Integer theNbPriorities = 11);
+
+ //! Returns settings of the layer object.
+ const Graphic3d_ZLayerSettings LayerSettings() const { return myLayerSettings; };
+
+ //! Sets settings of the layer object.
+ void SetLayerSettings (Graphic3d_ZLayerSettings theSettings)
+ {
+ myLayerSettings = theSettings;
+ }
+
+ //! Returns true if theSetting is enabled for the layer.
+ const Standard_Boolean IsSettingEnabled (const Graphic3d_ZLayerSetting theSetting) const
+ {
+ return myLayerSettings.IsSettingEnabled (theSetting);
+ }
+
+ //! Returns reference to associated priority list.
+ OpenGl_PriorityList& PriorityList() { return myPriorityList; }
+
+ //! Returns const reference to associated priority list.
+ const OpenGl_PriorityList& PriorityList() const { return myPriorityList; }
+
+ void Render (const Handle(OpenGl_Workspace) &AWorkspace, int theDefaultDepthFunc) const;
+
+private:
+
+ OpenGl_PriorityList myPriorityList; //!< Associated priority list object.
+
+ Graphic3d_ZLayerSettings myLayerSettings; //!< Layer setting flags.
+};
+#endif //_OpenGl_Layer_Header
myNbStructures (0)
{
// insert default priority layer
- myLayers.Append (OpenGl_PriorityList (myNbPriorities));
+ myLayers.Append (OpenGl_Layer (myNbPriorities));
myLayerIds.Bind (0, myLayers.Length());
}
//purpose :
//=======================================================================
-OpenGl_PriorityList& OpenGl_LayerList::defaultLayer()
+OpenGl_Layer& OpenGl_LayerList::defaultLayer()
{
return myLayers.ChangeValue (1);
}
return;
// add the new layer
- myLayers.Append (OpenGl_PriorityList (myNbPriorities));
+ myLayers.Append (OpenGl_Layer (myNbPriorities));
myLayerIds.Bind (theLayerId, myLayers.Length());
}
return myLayerIds.IsBound (theLayerId);
}
+//=======================================================================
+//function : Layer
+//purpose :
+//=======================================================================
+OpenGl_Layer& OpenGl_LayerList::Layer (const Standard_Integer theLayerId)
+{
+ return myLayers.ChangeValue (myLayerIds.Find (theLayerId));
+}
+
+//=======================================================================
+//function : Layer
+//purpose :
+//=======================================================================
+const OpenGl_Layer& OpenGl_LayerList::Layer (const Standard_Integer theLayerId) const
+{
+ return myLayers.Value (myLayerIds.Find (theLayerId));
+}
+
//=======================================================================
//function : RemoveLayer
//purpose :
Standard_Integer aRemovePos = myLayerIds.Find (theLayerId);
// move all displayed structures to first layer
- const OpenGl_PriorityList& aList = myLayers.Value (aRemovePos);
- defaultLayer ().Append (aList);
+ const OpenGl_PriorityList& aList = myLayers.Value (aRemovePos).PriorityList();
+ defaultLayer ().PriorityList().Append (aList);
// remove layer
myLayers.Remove (aRemovePos);
{
// add structure to associated layer,
// if layer doesn't exists, display structure in default layer
- OpenGl_PriorityList& aList = !HasLayer (theLayerId) ? defaultLayer () :
- myLayers.ChangeValue (myLayerIds.Find (theLayerId));
+ OpenGl_PriorityList& aList = !HasLayer (theLayerId) ? defaultLayer ().PriorityList() :
+ myLayers.ChangeValue (myLayerIds.Find (theLayerId)).PriorityList();
aList.Add (theStructure, thePriority);
myNbStructures++;
Standard_Integer aSeqPos = !HasLayer (theLayerId) ?
1 : myLayerIds.Find (theLayerId);
- OpenGl_PriorityList& aList = myLayers.ChangeValue (aSeqPos);
+ OpenGl_PriorityList& aList = myLayers.ChangeValue (aSeqPos).PriorityList();
// remove structure from associated list
// if the structure is not found there,
OpenGl_SequenceOfLayers::Iterator anIts;
for (anIts.Init (myLayers); anIts.More (); anIts.Next (), aSeqId++)
{
- OpenGl_PriorityList& aScanList = anIts.ChangeValue ();
+ OpenGl_PriorityList& aScanList = anIts.ChangeValue ().PriorityList();
if (aSeqPos == aSeqId)
continue;
Standard_Integer aSeqPos = !HasLayer (theOldLayerId) ?
1 : myLayerIds.Find (theOldLayerId);
- OpenGl_PriorityList& aList = myLayers.ChangeValue (aSeqPos);
+ OpenGl_PriorityList& aList = myLayers.ChangeValue (aSeqPos).PriorityList();
Standard_Integer aPriority;
// take priority and remove structure from list found by <theOldLayerId>
void OpenGl_LayerList::Render (const Handle(OpenGl_Workspace) &theWorkspace) const
{
+ int aDefaultDepthFunc;
+ glGetIntegerv (GL_DEPTH_FUNC, &aDefaultDepthFunc);
+
OpenGl_SequenceOfLayers::Iterator anIts;
for(anIts.Init (myLayers); anIts.More (); anIts.Next ())
{
- const OpenGl_PriorityList& aList = anIts.Value ();
- if (aList.NbStructures () > 0)
+ const OpenGl_Layer& aLayer = anIts.Value ();
+ if (aLayer.PriorityList().NbStructures () > 0)
{
- // separate depth buffers
- glClear (GL_DEPTH_BUFFER_BIT);
-
- // render priority list
- aList.Render (theWorkspace);
+ // render layer
+ aLayer.Render (theWorkspace, aDefaultDepthFunc);
}
}
}
#define _OpenGl_LayerList_Header
#include <OpenGl_PriorityList.hxx>
+#include <OpenGl_Layer.hxx>
#include <InterfaceGraphic_telem.hxx>
class OpenGl_Structure;
class Handle(OpenGl_Workspace);
-typedef NCollection_Sequence<OpenGl_PriorityList> OpenGl_SequenceOfLayers;
+typedef NCollection_Sequence<OpenGl_Layer> OpenGl_SequenceOfLayers;
typedef NCollection_DataMap<int, int> OpenGl_LayerSeqIds;
class OpenGl_LayerList
void ChangeLayer (const OpenGl_Structure *theStructure,
const Standard_Integer theOldLayerId,
const Standard_Integer theNewLayerId);
+
+ //! Returns reference to the layer with given ID.
+ OpenGl_Layer& Layer (const Standard_Integer theLayerId);
+
+ //! Returns reference to the layer with given ID.
+ const OpenGl_Layer& Layer (const Standard_Integer theLayerId) const;
//! Render this element
void Render (const Handle(OpenGl_Workspace) &theWorkspace) const;
private:
//! Get default layer
- OpenGl_PriorityList& defaultLayer ();
+ OpenGl_Layer& defaultLayer ();
protected:
#include <Graphic3d_CView.hxx>
#include <Graphic3d_CGraduatedTrihedron.hxx>
#include <Graphic3d_SequenceOfHClipPlane.hxx>
+#include <Graphic3d_ZLayerSettings.hxx>
#include <Visual3d_TypeOfSurfaceDetail.hxx>
#include <OpenGl_LayerList.hxx>
void ChangeZLayer (const OpenGl_Structure *theStructure,
const Standard_Integer theNewLayerId);
+ //! Sets the settings for a single Z layer of specified view.
+ void SetZLayerSettings (const Standard_Integer theLayerId,
+ const Graphic3d_ZLayerSettings theSettings);
+
void CreateBackgroundTexture (const Standard_CString AFileName, const Aspect_FillMethod AFillStyle);
void SetBackgroundTextureStyle (const Aspect_FillMethod FillStyle);
void SetBackgroundGradient (const Quantity_Color& AColor1, const Quantity_Color& AColor2, const Aspect_GradientFillMethod AType);
myZLayers.ChangeLayer (theStructure, anOldLayer, theNewLayerId);
}
+//=======================================================================
+//function : SetZLayerSettings
+//purpose :
+//=======================================================================
+void OpenGl_View::SetZLayerSettings (const Standard_Integer theLayerId,
+ const Graphic3d_ZLayerSettings theSettings)
+{
+ myZLayers.Layer (theLayerId).SetLayerSettings (theSettings);
+}
+
+
//=======================================================================
//function : RedrawScene
//purpose :
for (OpenGl_SequenceOfLayers::Iterator anLayerIt (aList.Layers()); anLayerIt.More(); anLayerIt.Next())
{
- const OpenGl_PriorityList& aPriorityList = anLayerIt.Value();
+ const OpenGl_PriorityList& aPriorityList = anLayerIt.Value().PriorityList();
if (aPriorityList.NbStructures() == 0)
continue;
uses
GraphicDriver from Graphic3d,
+ ZLayerSettings from Graphic3d,
TypeOfUpdate from V3d,
TypeOfVisualization from V3d,
TypeOfShadingModel from V3d,
---Purpose:
-- Temporarly hide grid echo.
+ SetZLayerSettings ( me : mutable;
+ theLayerId : Integer from Standard;
+ theSettings : ZLayerSettings from Graphic3d )
+ is static;
+ ---Purpose: Sets the settings for a single Z layer.
+
+ ZLayerSettings ( me : mutable;
+ theLayerId : Integer from Standard )
+ returns ZLayerSettings from Graphic3d is static;
+ ---Purpose: Returns the settings of a single Z layer.
+
AddZLayer ( me : mutable;
theLayerId : in out Integer from Standard )
returns Boolean from Standard is static;
MyDefinedViews.Remove(TheView);
}
+//=======================================================================
+//function : SetZLayerSettings
+//purpose :
+//=======================================================================
+
+void V3d_Viewer::SetZLayerSettings (const Standard_Integer theLayerId,
+ const Graphic3d_ZLayerSettings& theSettings)
+{
+ MyViewer->SetZLayerSettings (theLayerId, theSettings);
+}
+
+//=======================================================================
+//function : ZLayerSettings
+//purpose :
+//=======================================================================
+
+Graphic3d_ZLayerSettings V3d_Viewer::ZLayerSettings (const Standard_Integer theLayerId)
+{
+ return MyViewer->ZLayerSettings (theLayerId);
+}
+
//=======================================================================
//function : AddZLayer
//purpose :
}
else if (argc < 2)
{
- di << "Use: vzlayer " << argv[0];
- di << " add/del/get [id]\n";
+ di << "Use: vzlayer ";
+ di << " add/del/get/settings/enable/disable [id]\n";
di << " add - add new z layer to viewer and print its id\n";
di << " del - del z layer by its id\n";
di << " get - print sequence of z layers in increasing order of their overlay level\n";
- di << "id - the layer identificator value defined when removing z layer\n";
+ di << " settings - print status of z layer settings\n";
+ di << " enable ([depth]test/[depth]write/[depth]clear/[depth]offset) \n enables given setting for the z layer\n";
+ di << " enable (p[ositive]offset/n[egative]offset) \n enables given setting for the z layer\n";
+ di << " disable ([depth]test/[depth]write/[depth]clear/[depth]offset) \n disables given setting for the z layer\n";
+ di << "\nWhere id is the layer identificator\n";
+ di << "\nExamples:\n";
+ di << " vzlayer add\n";
+ di << " vzlayer enable poffset 1\n";
+ di << " vzlayer disable depthtest 1\n";
+ di << " vzlayer del 1\n";
return 1;
}
di << "\n";
}
+ else if (anOp == "settings")
+ {
+ if (argc < 3)
+ {
+ di << "Please also provide an id\n";
+ return 1;
+ }
+
+ Standard_Integer anId = Draw::Atoi (argv[2]);
+ Graphic3d_ZLayerSettings aSettings = aViewer->ZLayerSettings (anId);
+
+ di << "Depth test - " << (aSettings.IsSettingEnabled (Graphic3d_ZLayerDepthTest) ? "enabled" : "disabled") << "\n";
+ di << "Depth write - " << (aSettings.IsSettingEnabled (Graphic3d_ZLayerDepthWrite) ? "enabled" : "disabled") << "\n";
+ di << "Depth buffer clearing - " << (aSettings.IsSettingEnabled (Graphic3d_ZLayerDepthClear) ? "enabled" : "disabled") << "\n";
+ di << "Depth offset - " << (aSettings.IsSettingEnabled (Graphic3d_ZLayerDepthOffset) ? "enabled" : "disabled") << "\n";
+
+ }
+ else if (anOp == "enable")
+ {
+ if (argc < 3)
+ {
+ di << "Please also provide an option to enable\n";
+ return 1;
+ }
+
+ if (argc < 4)
+ {
+ di << "Please also provide a layer id\n";
+ return 1;
+ }
+
+ TCollection_AsciiString aSubOp = TCollection_AsciiString (argv[2]);
+ Standard_Integer anId = Draw::Atoi (argv[3]);
+ Graphic3d_ZLayerSettings aSettings = aViewer->ZLayerSettings (anId);
+
+ if (aSubOp == "depthtest" || aSubOp == "test")
+ {
+ aSettings.EnableSetting (Graphic3d_ZLayerDepthTest);
+ }
+ else if (aSubOp == "depthwrite" || aSubOp == "write")
+ {
+ aSettings.EnableSetting (Graphic3d_ZLayerDepthWrite);
+ }
+ else if (aSubOp == "depthclear" || aSubOp == "clear")
+ {
+ aSettings.EnableSetting (Graphic3d_ZLayerDepthClear);
+ }
+ else if (aSubOp == "depthoffset" || aSubOp == "offset")
+ {
+ if (argc < 6)
+ {
+ di << "Please also provide a factor and units values for depth offset\n";
+ di << "Format is: vzlayer enable offset [factor] [units] [layerId]\n";
+ return 1;
+ }
+
+ Standard_ShortReal aFactor = static_cast<Standard_ShortReal> (Draw::Atof (argv[3]));
+ Standard_ShortReal aUnits = static_cast<Standard_ShortReal> (Draw::Atof (argv[4]));
+ anId = Draw::Atoi (argv[5]);
+ aSettings = aViewer->ZLayerSettings (anId);
+
+ aSettings.DepthOffsetFactor = aFactor;
+ aSettings.DepthOffsetUnits = aUnits;
+
+ aSettings.EnableSetting (Graphic3d_ZLayerDepthOffset);
+ }
+ else if (aSubOp == "positiveoffset" || aSubOp == "poffset")
+ {
+ aSettings.SetDepthOffsetPositive();
+ }
+ else if (aSubOp == "negativeoffset" || aSubOp == "noffset")
+ {
+ aSettings.SetDepthOffsetNegative();
+ }
+
+ aViewer->SetZLayerSettings (anId, aSettings);
+ }
+ else if (anOp == "disable")
+ {
+ if (argc < 3)
+ {
+ di << "Please also provide an option to disable\n";
+ return 1;
+ }
+
+ if (argc < 4)
+ {
+ di << "Please also provide a layer id\n";
+ return 1;
+ }
+
+ TCollection_AsciiString aSubOp = TCollection_AsciiString (argv[2]);
+ Standard_Integer anId = Draw::Atoi (argv[3]);
+ Graphic3d_ZLayerSettings aSettings = aViewer->ZLayerSettings (anId);
+
+ if (aSubOp == "depthtest" || aSubOp == "test")
+ {
+ aSettings.DisableSetting (Graphic3d_ZLayerDepthTest);
+ }
+ else if (aSubOp == "depthwrite" || aSubOp == "write")
+ {
+ aSettings.DisableSetting (Graphic3d_ZLayerDepthWrite);
+ }
+ else if (aSubOp == "depthclear" || aSubOp == "clear")
+ {
+ aSettings.DisableSetting (Graphic3d_ZLayerDepthClear);
+ }
+ else if (aSubOp == "depthoffset" || aSubOp == "offset")
+ {
+ aSettings.DisableSetting (Graphic3d_ZLayerDepthOffset);
+ }
+
+ aViewer->SetZLayerSettings (anId, aSettings);
+ }
else
{
- di << "Invalid operation, please use { add / del / get }\n";
+ di << "Invalid operation, please use { add / del / get / settings / enable / disable}\n";
return 1;
}
"vprintview : width height filename [algo=0] [tile_width tile_height] : Test print algorithm: algo = 0 - stretch, algo = 1 - tile",
__FILE__,VPrintView,group);
theCommands.Add("vzlayer",
- "vzlayer : add/del/get [id] : Z layer operations in v3d viewer: add new z layer, delete z layer, get z layer ids",
+ "vzlayer add/del/get/settings/enable/disable [id]\n"
+ " add - add new z layer to viewer and print its id\n"
+ " del - del z layer by its id\n"
+ " get - print sequence of z layers in increasing order of their overlay level\n"
+ " settings - print status of z layer settings\n"
+ " enable ([depth]test/[depth]write/[depth]clear/[depth]offset) \n enables given setting for the z layer\n"
+ " enable (p[ositive]offset/n[egative]offset) \n enables given setting for the z layer\n"
+ " disable ([depth]test/[depth]write/[depth]clear/[depth]offset) \n disables given setting for the z layer\n"
+ "\nWhere id is the layer identificator\n"
+ "\nExamples:\n"
+ " vzlayer add\n"
+ " vzlayer enable poffset 1\n"
+ " vzlayer disable depthtest 1\n"
+ " vzlayer del 1\n",
__FILE__,VZLayer,group);
theCommands.Add("voverlaytext",
"voverlaytext : text x y [height] [font_name] [text_color: R G B] [display_type] [background_color: R G B]"
Visual3d_WOKSteps.edl
Visual3d_View_Print.cxx
Visual3d_NListOfLayerItem.hxx
+Visual3d_MapOfZLayerSettings.hxx
-- Category: Instantiated classes
---------------------------------
+ primitive MapOfZLayerSettings;
+
imported NListOfLayerItem;
class SequenceOfPickPath instantiates
--- /dev/null
+// Copyright (c) 2014 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 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.
+
+#ifndef _Visual3d_MapOfZLayerSettings_HeaderFile
+#define _Visual3d_MapOfZLayerSettings_HeaderFile
+
+#include <Standard_TypeDef.hxx>
+#include <NCollection_Map.hxx>
+#include <Graphic3d_ZLayerSettings.hxx>
+
+typedef NCollection_DataMap<Standard_Integer, Graphic3d_ZLayerSettings> Visual3d_MapOfZLayerSettings;
+
+#endif // _Visual3d_MapOfZLayerSettings_HeaderFile
MapOfStructure from Graphic3d,
Camera_Handle from Graphic3d,
+ ZLayerSettings from Graphic3d,
+
ContextView from Visual3d,
Layer from Visual3d,
Light from Visual3d,
---Purpose: Changes the display priority of the structure <AStructure>.
---Category: Private methods
+
+ SetZLayerSettings ( me : mutable;
+ theLayerId : Integer from Standard;
+ theSettings : ZLayerSettings from Graphic3d )
+ is static private;
+ ---Purpose: Sets the settings for a single Z layer of specified view.
+
AddZLayer ( me : mutable;
theLayerId : Integer from Standard )
is static private;
thePrecision, theProgressBarFunc, theProgressObject);
}
+//=======================================================================
+//function : SetZLayerSettings
+//purpose :
+//=======================================================================
+
+void Visual3d_View::SetZLayerSettings (const Standard_Integer theLayerId,
+ const Graphic3d_ZLayerSettings& theSettings)
+{
+ MyGraphicDriver->SetZLayerSettings (MyCView, theLayerId, theSettings);
+}
+
//=======================================================================
//function : AddZLayer
//purpose :
CView from Graphic3d,
Vector from Graphic3d,
+ ZLayerSettings from Graphic3d,
+ MapOfZLayerSettings from Visual3d,
+
ContextPick from Visual3d,
Layer from Visual3d,
PickDescriptor from Visual3d,
returns Integer from Standard is redefined static;
---Purpose: Get Z layer ID assigned for the structure.
+ SetZLayerSettings ( me : mutable;
+ theLayerId : Integer from Standard;
+ theSettings : ZLayerSettings from Graphic3d )
+ is redefined static;
+ ---Purpose: Sets the settings for a single Z layer for all managed views.
+
+ ZLayerSettings ( me : mutable;
+ theLayerId : Integer from Standard )
+ returns ZLayerSettings from Graphic3d is redefined static;
+ ---Purpose: Returns the settings of a single Z layer.
+
AddZLayer ( me : mutable;
theLayerId : in out Integer from Standard )
returns Boolean from Standard is redefined static;
myLayerIds : MapOfInteger from TColStd;
myLayerSeq : SequenceOfInteger from TColStd;
+ myMapOfZLayerSettings : MapOfZLayerSettings from Visual3d;
+
friends
class View from Visual3d,
myLayerSeq.Append (0);
MyGraphicDriver = theDriver;
+ myMapOfZLayerSettings.Bind (0, Graphic3d_ZLayerSettings());
}
//-Destructors
return MyGraphicDriver->GetZLayer (*theStructure->CStructure ());
}
+//=======================================================================
+//function : SetZLayerSettings
+//purpose :
+//=======================================================================
+void Visual3d_ViewManager::SetZLayerSettings (const Standard_Integer theLayerId,
+ const Graphic3d_ZLayerSettings& theSettings)
+{
+ // tell all managed views to set zlayer settings
+ Visual3d_SetIteratorOfSetOfView aViewIt (MyDefinedView);
+ for (; aViewIt.More (); aViewIt.Next ())
+ {
+ (aViewIt.Value ())->SetZLayerSettings (theLayerId, theSettings);
+ }
+
+ if (myMapOfZLayerSettings.IsBound (theLayerId))
+ {
+ myMapOfZLayerSettings.ChangeFind (theLayerId) = theSettings;
+ }
+ else
+ {
+ myMapOfZLayerSettings.Bind (theLayerId, theSettings);
+ }
+
+}
+
+//=======================================================================
+//function : ZLayerSettings
+//purpose :
+//=======================================================================
+Graphic3d_ZLayerSettings Visual3d_ViewManager::ZLayerSettings (const Standard_Integer theLayerId)
+{
+ if (!myLayerIds.Contains (theLayerId))
+ {
+ return Graphic3d_ZLayerSettings();
+ }
+
+ return myMapOfZLayerSettings.Find (theLayerId);
+}
+
//=======================================================================
//function : AddZLayer
//purpose :
return Standard_False;
}
+ // default z-layer settings
+ myMapOfZLayerSettings.Bind (theLayerId, Graphic3d_ZLayerSettings());
+
// tell all managed views to remove display layers
Visual3d_SetIteratorOfSetOfView aViewIt(MyDefinedView);
for ( ; aViewIt.More (); aViewIt.Next ())
return Standard_False;
// tell all managed views to remove display layers
- Visual3d_SetIteratorOfSetOfView aViewIt(MyDefinedView);
+ Visual3d_SetIteratorOfSetOfView aViewIt (MyDefinedView);
for ( ; aViewIt.More (); aViewIt.Next ())
(aViewIt.Value ())->RemoveZLayer (theLayerId);
// remove index
for (int aIdx = 1; aIdx <= myLayerSeq.Length (); aIdx++)
- if (myLayerSeq(aIdx) == theLayerId)
+ {
+ if (myLayerSeq (aIdx) == theLayerId)
{
myLayerSeq.Remove (aIdx);
break;
}
+ }
+
+ myMapOfZLayerSettings.UnBind (theLayerId);
myLayerIds.Remove (theLayerId);
getZLayerGenId ().Free (theLayerId);
--- /dev/null
+# This test case handles a specific task:
+# to draw 2d objects in same scene with 3d objects while
+# 2d objects need to be drawn in specific order on 3d plane and
+# overlap correctly with 3d objects.
+
+pload ALL
+vinit
+# Thin boxes represent overlapping 2d objects in same plane
+# Normally such configuration would cause z-fighting noise (flickering)
+box b1 -0.75 -0.75 0 1 1 0.01
+box b2 -0.5 -0.5 0 1 1 0.01
+box b3 -0.25 -0.25 0 1 1 0.01
+vdisplay b1
+vdisplay b2
+vdisplay b3
+vsetmaterial b2 silver
+vsetmaterial b3 copper
+
+psphere s 0.3
+vdisplay s
+
+# Create new z-layer for 3d objects
+vzlayer add
+vobjzlayer set s 1
+
+vsetdispmode 1
+
+# Disable OpenGl depth test for layer 0 (to eliminate flickering)
+# But depth write is still enabled
+vzlayer disable depthtest 0
+
+# Disable depth buffer clearing for layer 1 (we want correct overlapping with 3d objects)
+vzlayer disable depthclear 1
+
+# List currently enabled settings of each layer
+vzlayer settings 0
+vzlayer settings 1
+
+# "3d" box with one of its faces on same plane with "2d" objects
+# Normally this also would cause flickering because new box is
+# supposed to be in layer 1 as "3d" structure, thus depth test between
+# new box and "2d" objects will be enabled.
+box b 0 0 0.01 0.5 0.5 -0.5
+vdisplay b
+vobjzlayer set b 1
+
+# To handle this situation, depth offset setting was introduced.
+# It implemented with glPolygonOffset calls per layer.
+vzlayer enable positiveoffset 1
+
+vfit