mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-10 18:51:21 +03:00
0024785: Visualization - Modifying z-layers concept to gain more control over OpenGl depth buffer.
This commit is contained in:
parent
85146fa841
commit
3db496cbf6
@ -61,6 +61,7 @@ Graphic3d_Vec2.hxx
|
||||
Graphic3d_Vec3.hxx
|
||||
Graphic3d_Vec4.hxx
|
||||
Graphic3d_Mat4.hxx
|
||||
Graphic3d_ZLayerSettings.hxx
|
||||
Graphic3d_Vertex.hxx
|
||||
Graphic3d_Vertex.cxx
|
||||
Graphic3d_MarkerImage.hxx
|
||||
|
@ -419,6 +419,8 @@ is
|
||||
primitive Mat4;
|
||||
primitive Mat4d;
|
||||
|
||||
primitive ZLayerSettings;
|
||||
|
||||
--------------------
|
||||
-- Category: Classes
|
||||
--------------------
|
||||
|
@ -53,6 +53,8 @@ uses
|
||||
PrintAlgo from Aspect,
|
||||
DisplayConnection_Handle from Aspect,
|
||||
|
||||
ZLayerSettings from Graphic3d,
|
||||
|
||||
AspectLine3d from Graphic3d,
|
||||
AspectMarker3d from Graphic3d,
|
||||
AspectText3d from Graphic3d,
|
||||
@ -945,6 +947,13 @@ is
|
||||
---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
|
||||
-----------------------------
|
||||
|
@ -40,6 +40,8 @@ uses
|
||||
TypeOfHighlightMethod from Aspect,
|
||||
TypeOfUpdate from Aspect,
|
||||
|
||||
ZLayerSettings from Graphic3d,
|
||||
|
||||
DataStructureManager from Graphic3d,
|
||||
AspectFillArea3d from Graphic3d,
|
||||
AspectLine3d from Graphic3d,
|
||||
@ -293,6 +295,17 @@ is
|
||||
---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;
|
||||
|
79
src/Graphic3d/Graphic3d_ZLayerSettings.hxx
Normal file
79
src/Graphic3d/Graphic3d_ZLayerSettings.hxx
Normal file
@ -0,0 +1,79 @@
|
||||
// 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
|
@ -108,6 +108,8 @@ OpenGl_LayerList.cxx
|
||||
OpenGl_LayerList.hxx
|
||||
OpenGl_IndexBuffer.hxx
|
||||
OpenGl_IndexBuffer.cxx
|
||||
OpenGl_Layer.cxx
|
||||
OpenGl_Layer.hxx
|
||||
OpenGl_TextureBufferArb.hxx
|
||||
OpenGl_TextureBufferArb.cxx
|
||||
OpenGl_Vec.hxx
|
||||
|
@ -305,6 +305,11 @@ public:
|
||||
//! graphic driver, the method returns -1. <br>
|
||||
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
|
||||
|
@ -618,7 +618,6 @@ void OpenGl_GraphicDriver::AddZLayer (const Graphic3d_CView& theCView,
|
||||
//function : RemoveZLayer
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
|
||||
void OpenGl_GraphicDriver::RemoveZLayer (const Graphic3d_CView& theCView,
|
||||
const Standard_Integer theLayerId)
|
||||
{
|
||||
@ -626,3 +625,16 @@ void OpenGl_GraphicDriver::RemoveZLayer (const Graphic3d_CView& theCView,
|
||||
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);
|
||||
}
|
||||
|
88
src/OpenGl/OpenGl_Layer.cxx
Normal file
88
src/OpenGl/OpenGl_Layer.cxx
Normal file
@ -0,0 +1,88 @@
|
||||
// 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_LayerSettings
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
OpenGl_LayerSettings::OpenGl_LayerSettings()
|
||||
: DepthOffsetFactor (1.0f),
|
||||
DepthOffsetUnits (1.0f),
|
||||
Flags (OpenGl_LayerDepthTest
|
||||
| OpenGl_LayerDepthWrite
|
||||
| OpenGl_LayerDepthClear)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//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) const
|
||||
{
|
||||
// separate depth buffers
|
||||
if (IsSettingEnabled (OpenGl_LayerDepthClear))
|
||||
{
|
||||
glClear (GL_DEPTH_BUFFER_BIT);
|
||||
}
|
||||
|
||||
// handle depth test
|
||||
if (IsSettingEnabled (OpenGl_LayerDepthTest))
|
||||
{
|
||||
glDepthFunc (GL_LESS);
|
||||
}
|
||||
else
|
||||
{
|
||||
glDepthFunc (GL_ALWAYS);
|
||||
}
|
||||
|
||||
// handle depth offset
|
||||
if (IsSettingEnabled (OpenGl_LayerDepthOffset))
|
||||
{
|
||||
glPolygonOffset (myLayerSettings.DepthOffsetFactor, myLayerSettings.DepthOffsetUnits);
|
||||
}
|
||||
else
|
||||
{
|
||||
glPolygonOffset (0.f, 0.f);
|
||||
}
|
||||
|
||||
// handle depth write
|
||||
if (IsSettingEnabled (OpenGl_LayerDepthWrite))
|
||||
{
|
||||
glDepthMask (GL_TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
glDepthMask (GL_FALSE);
|
||||
}
|
||||
|
||||
// render priority list
|
||||
myPriorityList.Render (AWorkspace);
|
||||
}
|
84
src/OpenGl/OpenGl_Layer.hxx
Normal file
84
src/OpenGl/OpenGl_Layer.hxx
Normal file
@ -0,0 +1,84 @@
|
||||
// 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>
|
||||
|
||||
class Handle(OpenGl_Workspace);
|
||||
|
||||
enum OpenGl_LayerSetting
|
||||
{
|
||||
OpenGl_LayerDepthTest = 1,
|
||||
OpenGl_LayerDepthWrite = 2,
|
||||
OpenGl_LayerDepthClear = 4,
|
||||
OpenGl_LayerDepthOffset = 8
|
||||
};
|
||||
|
||||
struct OpenGl_LayerSettings
|
||||
{
|
||||
//! Initializes settings
|
||||
OpenGl_LayerSettings();
|
||||
|
||||
//! Returns true if theSetting is enabled.
|
||||
const Standard_Boolean IsSettingEnabled (const OpenGl_LayerSetting theSetting) const
|
||||
{
|
||||
return (Flags & theSetting) == theSetting;
|
||||
}
|
||||
|
||||
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.
|
||||
};
|
||||
|
||||
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 OpenGl_LayerSettings LayerSettings() const { return myLayerSettings; };
|
||||
|
||||
//! Sets settings of the layer object.
|
||||
void SetLayerSettings (OpenGl_LayerSettings theSettings)
|
||||
{
|
||||
myLayerSettings = theSettings;
|
||||
}
|
||||
|
||||
//! Returns true if theSetting is enabled for the layer.
|
||||
const Standard_Boolean IsSettingEnabled (const OpenGl_LayerSetting 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) const;
|
||||
|
||||
private:
|
||||
|
||||
OpenGl_PriorityList myPriorityList; //!< Associated priority list object.
|
||||
|
||||
OpenGl_LayerSettings myLayerSettings; //!< Layer setting flags.
|
||||
};
|
||||
#endif //_OpenGl_Layer_Header
|
@ -35,7 +35,7 @@ OpenGl_LayerList::OpenGl_LayerList (const Standard_Integer theNbPriorities)
|
||||
myNbStructures (0)
|
||||
{
|
||||
// insert default priority layer
|
||||
myLayers.Append (OpenGl_PriorityList (myNbPriorities));
|
||||
myLayers.Append (OpenGl_Layer (myNbPriorities));
|
||||
myLayerIds.Bind (0, myLayers.Length());
|
||||
}
|
||||
|
||||
@ -53,7 +53,7 @@ OpenGl_LayerList::~OpenGl_LayerList ()
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
|
||||
OpenGl_PriorityList& OpenGl_LayerList::defaultLayer()
|
||||
OpenGl_Layer& OpenGl_LayerList::defaultLayer()
|
||||
{
|
||||
return myLayers.ChangeValue (1);
|
||||
}
|
||||
@ -89,7 +89,7 @@ void OpenGl_LayerList::AddLayer (const Standard_Integer theLayerId)
|
||||
return;
|
||||
|
||||
// add the new layer
|
||||
myLayers.Append (OpenGl_PriorityList (myNbPriorities));
|
||||
myLayers.Append (OpenGl_Layer (myNbPriorities));
|
||||
myLayerIds.Bind (theLayerId, myLayers.Length());
|
||||
}
|
||||
|
||||
@ -104,6 +104,24 @@ Standard_Boolean OpenGl_LayerList::HasLayer
|
||||
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 :
|
||||
@ -117,8 +135,8 @@ void OpenGl_LayerList::RemoveLayer (const Standard_Integer theLayerId)
|
||||
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);
|
||||
@ -145,8 +163,8 @@ void OpenGl_LayerList::AddStructure (const OpenGl_Structure *theStructure,
|
||||
{
|
||||
// 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++;
|
||||
@ -167,7 +185,7 @@ void OpenGl_LayerList::RemoveStructure (const OpenGl_Structure *theStructure,
|
||||
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,
|
||||
@ -191,7 +209,7 @@ void OpenGl_LayerList::RemoveStructure (const OpenGl_Structure *theStructure,
|
||||
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;
|
||||
|
||||
@ -223,7 +241,7 @@ void OpenGl_LayerList::ChangeLayer (const OpenGl_Structure *theStructure,
|
||||
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>
|
||||
@ -264,14 +282,11 @@ void OpenGl_LayerList::Render (const Handle(OpenGl_Workspace) &theWorkspace) con
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -17,6 +17,7 @@
|
||||
#define _OpenGl_LayerList_Header
|
||||
|
||||
#include <OpenGl_PriorityList.hxx>
|
||||
#include <OpenGl_Layer.hxx>
|
||||
|
||||
#include <InterfaceGraphic_telem.hxx>
|
||||
|
||||
@ -26,7 +27,7 @@
|
||||
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
|
||||
@ -71,6 +72,12 @@ 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;
|
||||
@ -88,7 +95,7 @@ class OpenGl_LayerList
|
||||
private:
|
||||
|
||||
//! Get default layer
|
||||
OpenGl_PriorityList& defaultLayer ();
|
||||
OpenGl_Layer& defaultLayer ();
|
||||
|
||||
protected:
|
||||
|
||||
|
@ -34,6 +34,7 @@
|
||||
#include <Graphic3d_CView.hxx>
|
||||
#include <Graphic3d_CGraduatedTrihedron.hxx>
|
||||
#include <Graphic3d_SequenceOfHClipPlane.hxx>
|
||||
#include <Graphic3d_ZLayerSettings.hxx>
|
||||
#include <Visual3d_TypeOfSurfaceDetail.hxx>
|
||||
|
||||
#include <OpenGl_telem_view.hxx>
|
||||
@ -176,6 +177,10 @@ class OpenGl_View : public MMgt_TShared
|
||||
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);
|
||||
|
@ -1510,3 +1510,21 @@ void OpenGl_View::ChangeZLayer (const OpenGl_Structure *theStructure,
|
||||
Standard_Integer anOldLayer = theStructure->GetZLayer ();
|
||||
myZLayers.ChangeLayer (theStructure, anOldLayer, theNewLayerId);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : SetZLayerSettings
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void OpenGl_View::SetZLayerSettings (const Standard_Integer theLayerId,
|
||||
const Graphic3d_ZLayerSettings theSettings)
|
||||
{
|
||||
// Convert Graphic3d_ZLayerSettings to OpenGl_LayerSettings
|
||||
OpenGl_LayerSettings aConvertedSettings;
|
||||
|
||||
aConvertedSettings.DepthOffsetFactor = theSettings.DepthOffsetFactor;
|
||||
aConvertedSettings.DepthOffsetUnits = theSettings.DepthOffsetUnits;
|
||||
aConvertedSettings.Flags = theSettings.Flags;
|
||||
|
||||
myZLayers.Layer (theLayerId).SetLayerSettings (aConvertedSettings);
|
||||
}
|
||||
|
||||
|
@ -188,7 +188,7 @@ Standard_Boolean OpenGl_Workspace::UpdateRaytraceGeometry (Standard_Boolean theC
|
||||
|
||||
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;
|
||||
|
@ -40,6 +40,7 @@ class Viewer from V3d inherits TShared from MMgt
|
||||
uses
|
||||
|
||||
GraphicDriver from Graphic3d,
|
||||
ZLayerSettings from Graphic3d,
|
||||
TypeOfUpdate from V3d,
|
||||
TypeOfVisualization from V3d,
|
||||
TypeOfShadingModel from V3d,
|
||||
@ -632,6 +633,17 @@ is
|
||||
---Purpose:
|
||||
-- Display grid echo at requested point in the view.
|
||||
|
||||
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;
|
||||
|
@ -353,6 +353,27 @@ void V3d_Viewer::DelView( const Handle(V3d_View)& TheView ) {
|
||||
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 :
|
||||
|
@ -3319,12 +3319,21 @@ static int VZLayer (Draw_Interpretor& di, Standard_Integer argc, const char** ar
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
@ -3376,9 +3385,123 @@ static int VZLayer (Draw_Interpretor& di, Standard_Integer argc, const char** ar
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
@ -6118,7 +6241,20 @@ void ViewerTest::ViewerCommands(Draw_Interpretor& theCommands)
|
||||
"vprintview : width height filename [algo=0] : 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]"
|
||||
|
@ -6,3 +6,4 @@ EXTERNLIB
|
||||
Visual3d_WOKSteps.edl
|
||||
Visual3d_View_Print.cxx
|
||||
Visual3d_NListOfLayerItem.hxx
|
||||
Visual3d_MapOfZLayerSettings.hxx
|
||||
|
@ -297,6 +297,8 @@ is
|
||||
-- Category: Instantiated classes
|
||||
---------------------------------
|
||||
|
||||
primitive MapOfZLayerSettings;
|
||||
|
||||
imported NListOfLayerItem;
|
||||
|
||||
class SequenceOfPickPath instantiates
|
||||
|
23
src/Visual3d/Visual3d_MapOfZLayerSettings.hxx
Normal file
23
src/Visual3d/Visual3d_MapOfZLayerSettings.hxx
Normal file
@ -0,0 +1,23 @@
|
||||
// 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
|
@ -85,6 +85,8 @@ uses
|
||||
SequenceOfStructure from Graphic3d,
|
||||
MapOfStructure from Graphic3d,
|
||||
|
||||
ZLayerSettings from Graphic3d,
|
||||
|
||||
ContextView from Visual3d,
|
||||
Layer from Visual3d,
|
||||
Light from Visual3d,
|
||||
@ -799,6 +801,13 @@ is
|
||||
---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;
|
||||
|
@ -3668,6 +3668,17 @@ Standard_Boolean Visual3d_View::Export (const Standard_CString theFileName
|
||||
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 :
|
||||
|
@ -41,6 +41,9 @@ uses
|
||||
CView from Graphic3d,
|
||||
Vector from Graphic3d,
|
||||
|
||||
ZLayerSettings from Graphic3d,
|
||||
MapOfZLayerSettings from Visual3d,
|
||||
|
||||
ContextPick from Visual3d,
|
||||
Layer from Visual3d,
|
||||
PickDescriptor from Visual3d,
|
||||
@ -290,6 +293,17 @@ is
|
||||
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;
|
||||
@ -515,6 +529,8 @@ fields
|
||||
myLayerIds : MapOfInteger from TColStd;
|
||||
myLayerSeq : SequenceOfInteger from TColStd;
|
||||
|
||||
myMapOfZLayerSettings : MapOfZLayerSettings from Visual3d;
|
||||
|
||||
friends
|
||||
|
||||
class View from Visual3d,
|
||||
|
@ -103,6 +103,7 @@ MyTransparency (Standard_False)
|
||||
myLayerSeq.Append (0);
|
||||
|
||||
MyGraphicDriver = theDriver;
|
||||
myMapOfZLayerSettings.Bind (0, Graphic3d_ZLayerSettings());
|
||||
}
|
||||
|
||||
//-Destructors
|
||||
@ -1191,6 +1192,41 @@ Standard_Integer Visual3d_ViewManager::GetZLayer (const Handle(Graphic3d_Structu
|
||||
return MyGraphicDriver->GetZLayer (aStructure);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : SetZLayerSettings
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void Visual3d_ViewManager::SetZLayerSettings (const Standard_Integer theLayerId,
|
||||
const Graphic3d_ZLayerSettings theSettings)
|
||||
{
|
||||
// tell all managed views to set zlayer settings display layers
|
||||
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 :
|
||||
@ -1211,6 +1247,9 @@ Standard_Boolean Visual3d_ViewManager::AddZLayer (Standard_Integer& theLayerId)
|
||||
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 ())
|
||||
@ -1230,7 +1269,7 @@ Standard_Boolean Visual3d_ViewManager::RemoveZLayer (const Standard_Integer theL
|
||||
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);
|
||||
|
||||
@ -1238,11 +1277,15 @@ Standard_Boolean Visual3d_ViewManager::RemoveZLayer (const Standard_Integer theL
|
||||
|
||||
// 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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user