Move OpenGl_Structure::myZLayer to base class Graphic3d_CStructure.
Graphic3d_ZLayerId - introduce new pre-defined ZLayers.
Do not clear Depth buffer twice for default ZLayer.
AIS_InteractiveContext::Display() - add new argument AIS_DisplayStatus to specify displaying status.
Drop unused Graphic3d_CPick and related methods.
Drop OpenGl_Structure::myNamedStatus - use flags from parent class Graphic3d_CStructure directly.
OpenGl_LayerList ::ChangeLayer(), ::ChangePriority - fix structure remove from unexpected layer.
Merge class OpenGl_PriorityList into OpenGl_Layer.
PrsMgr_PresentationManager::mySelectionColor - store selection color as field of Presentation Manager.
PrsMgr_Presentation class - do not declare private methods as virtual.
PrsMgr_Presentation::Highlight() - extend method syntax and drop methods ::Color() and ::BoundBox().
PrsMgr_PresentableObject - store ZLayer in presentable object
to display object presentations in required layer directly
(without displaying it in wrong layer first).
test/mesh/end - force re-displaying the shape to compute mesh anew
Test-case for issue
-- local context without selection, use the syntax below,
-- setting aSelectionMode to -1.
- Display(me : mutable;
- anIobj : InteractiveObject from AIS;
- amode : Integer from Standard ;
- aSelectionMode : Integer from Standard ;
- updateviewer : Boolean from Standard = Standard_True;
- allowdecomposition : Boolean from Standard = Standard_True);
+ Display (me : mutable;
+ theIObj : InteractiveObject from AIS;
+ theDispMode : Integer from Standard;
+ theSelectionMode : Integer from Standard;
+ theToUpdateViewer : Boolean from Standard = Standard_True;
+ theToAllowDecomposition : Boolean from Standard = Standard_True;
+ theDispStatus : DisplayStatus from AIS = AIS_DS_None);
---Purpose: Controls the choice between the using the display
-- and selection modes of open local context which you
-- have defined and activating those available by default.
-- If no Local Context is opened. and the Interactive
- -- Object aniobj has no display mode of its own, the
- -- default display mode, 0, is used. Likewise, if aniobj
+ -- Object theIObj has no display mode of its own, the
+ -- default display mode, 0, is used. Likewise, if theIObj
-- has no selection mode of its own, the default one, 0, is used.
- -- If a local context is open and if updateviewer equals
+ -- If a local context is open and if theToUpdateViewer equals
-- Standard_False, the presentation of the Interactive
-- Object activates the selection mode; the object is
-- displayed but no viewer will be updated.
- -- If aSelectionMode equals -1, anIobj will not be
+ -- If theSelectionMode equals -1, theIObj will not be
-- activated: it will be displayed but will not be selectable.
-- Use this if you want to view the object in open local
-- context without selection. Note: This option is only
-- available in Local Context.
- -- If allowDecomposition equals true, anIObj can have
- -- subshapes detected by selection mechanisms. anIObj
+ -- If theToAllowDecomposition equals true, theIObj can have
+ -- subshapes detected by selection mechanisms. theIObj
-- must be able to give a shape selection modes which
-- fit the AIS_Shape selection modes:
-- - vertices: 1
SetZLayer( me : mutable;
theIObj : InteractiveObject from AIS;
theLayerId : Integer from Standard );
- ---Purpose: Set Z layer id for interactive object. The layer can be
- -- specified for displayed object only. The Z layers can be used to display
- -- temporarily presentations of some object in front of the other objects
- -- in the scene. The ids for Z layers are generated by V3d_Viewer.
- -- Note that Z layers differ from under-/overlayer in V3d_View:
- -- under-/overlayer are intended for specific 2D drawings that appear
- -- behind/in front of all 3D presentations, while SetZLayer() method
- -- applies to regular 3D presentations and does not imply any specific
- -- drawing methods.
+ ---Purpose: Set Z layer id for interactive object.
+ -- The Z layers can be used to display temporarily presentations of some object in front of the other objects in the scene.
+ -- The ids for Z layers are generated by V3d_Viewer.
GetZLayer( me;
theIObj : InteractiveObject from AIS )
returns Integer from Standard;
---Purpose: Get Z layer id set for displayed interactive object.
- -- If the object doesn't exists in context or has no computed presentations,
- -- the method returns -1.
Redisplay(me : mutable;
aniobj : InteractiveObject from AIS;
#include <AIS_MapIteratorOfMapOfInteractive.hxx>
#include <PrsMgr_ModedPresentation.hxx>
#include <Visual3d_ViewManager.hxx>
+#include <Visual3d_View.hxx>
#include <Prs3d_ShadingAspect.hxx>
#include <AIS_Shape.hxx>
#include <Graphic3d_AspectFillArea3d.hxx>
{
for (AIS_DataMapIteratorOfDataMapOfIOStatus anObjIter (myObjects); anObjIter.More(); anObjIter.Next())
{
- if (anObjIter.Value()->GraphicStatus() != theStatus
- || anObjIter.Key()->Type() != theKind)
+ if (theStatus != AIS_DS_None
+ && anObjIter.Value()->GraphicStatus() != theStatus)
+ {
+ continue;
+ }
+ else if (anObjIter.Key()->Type() != theKind)
{
continue;
}
const Standard_Integer theDispMode,
const Standard_Integer theSelectionMode,
const Standard_Boolean theToUpdateViewer,
- const Standard_Boolean theToAllowDecomposition)
+ const Standard_Boolean theToAllowDecomposition,
+ const AIS_DisplayStatus theDispStatus)
{
if (theIObj.IsNull())
{
return;
}
+ if (theDispStatus == AIS_DS_Erased)
+ {
+ Erase (theIObj, theToUpdateViewer);
+ Load (theIObj, theSelectionMode, theToAllowDecomposition);
+ return;
+ }
+
if (!theIObj->HasInteractiveContext())
{
theIObj->SetContext (this);
}
- if (HasOpenedContext())
+ if (theDispStatus == AIS_DS_Temporary
+ && !HasOpenedContext())
{
- myLocalContexts (myCurLocalIndex)->Display (theIObj, theDispMode, theToAllowDecomposition, theSelectionMode);
- if (theToUpdateViewer)
+ return;
+ }
+ else if (HasOpenedContext())
+ {
+ if (theDispStatus == AIS_DS_None
+ || theDispStatus == AIS_DS_Temporary)
{
- myMainVwr->Update();
+ myLocalContexts (myCurLocalIndex)->Display (theIObj, theDispMode, theToAllowDecomposition, theSelectionMode);
+ if (theToUpdateViewer)
+ {
+ myMainVwr->Update();
+ }
+ return;
}
- return;
}
if (!myObjects.IsBound (theIObj))
else
{
Handle(AIS_GlobalStatus) aStatus = myObjects (theIObj);
- if (aStatus->GraphicStatus() != AIS_DS_Displayed
- && aStatus->GraphicStatus() != AIS_DS_Erased)
+ if (aStatus->GraphicStatus() == AIS_DS_Temporary)
{
return;
}
}
myMainPM->Display (theIObj, theDispMode);
- if (aStatus->GraphicStatus() == AIS_DS_Erased)
- {
- aStatus->SetGraphicStatus (AIS_DS_Displayed);
- }
+ aStatus->SetGraphicStatus (AIS_DS_Displayed);
if (aStatus->IsHilighted())
{
const Standard_Integer aHiMod = theIObj->HasHilightMode() ? theIObj->HilightMode() : theDispMode;
{
if(!myObjects.IsBound(anIObj)) return;
- const Handle(AIS_GlobalStatus)& STATUS = myObjects(anIObj);
- STATUS->SetHilightStatus (Standard_True);
+ const Handle(AIS_GlobalStatus)& aStatus = myObjects(anIObj);
+ aStatus->SetHilightStatus (Standard_True);
- if (STATUS->GraphicStatus() == AIS_DS_Displayed)
+ if (aStatus->GraphicStatus() == AIS_DS_Displayed)
{
- Standard_Integer aHilightMode = anIObj->HasHilightMode() ? anIObj->HilightMode() : 0;
+ const Standard_Integer aHilightMode = anIObj->HasHilightMode() ? anIObj->HilightMode() : 0;
myMainPM->Color (anIObj, aCol, aHilightMode);
- STATUS->SetHilightColor (aCol);
+ aStatus->SetHilightColor (aCol);
}
}
else
{
if(!myObjects.IsBound(anIObj)) return;
- const Handle(AIS_GlobalStatus)& STATUS = myObjects(anIObj);
- STATUS->SetHilightStatus (Standard_False);
- STATUS->SetHilightColor(Quantity_NOC_WHITE);
+ const Handle(AIS_GlobalStatus)& aStatus = myObjects(anIObj);
+ aStatus->SetHilightStatus (Standard_False);
+ aStatus->SetHilightColor(Quantity_NOC_WHITE);
- if (STATUS->GraphicStatus() == AIS_DS_Displayed)
+ if (aStatus->GraphicStatus() == AIS_DS_Displayed)
{
Standard_Integer aHilightMode = anIObj->HasHilightMode() ? anIObj->HilightMode() : 0;
myMainPM->Unhighlight (anIObj, aHilightMode);
aStatus->AddDisplayMode (theMode);
if (aStatus->GraphicStatus() == AIS_DS_Displayed)
{
- myMainPM->SetVisibility (anObj, myDisplayMode, Standard_False);
myMainPM->Display (anObj, theMode);
if (aStatus->IsSubIntensityOn())
{
myMainPM->Color (anObj, mySubIntensity, theMode);
}
+ myMainPM->SetVisibility (anObj, myDisplayMode, Standard_False);
}
}
Handle(AIS_GlobalStatus) aStatus = myObjects (theIObj);
- Standard_Integer aDispMode = theIObj->HasHilightMode() ? theIObj->HilightMode() : 0;
- if (aStatus->GraphicStatus() == AIS_DS_Displayed)
+ const Standard_Integer aDispMode = theIObj->HasHilightMode() ? theIObj->HilightMode() : 0;
+ if (aStatus->GraphicStatus() == AIS_DS_Temporary
+ || aStatus->GraphicStatus() == AIS_DS_Erased)
{
- for (TColStd_ListIteratorOfListOfInteger aDispModeIter (aStatus->DisplayedModes()); aDispModeIter.More(); aDispModeIter.Next())
- {
- if (myMainPM->IsHighlighted (theIObj, aDispModeIter.Value()))
- {
- myMainPM->Unhighlight (theIObj, aDispModeIter.Value());
- }
- myMainPM->SetVisibility (theIObj, aDispModeIter.Value(), Standard_False);
- }
+ return;
+ }
- if (IsCurrent (theIObj)
- && !aStatus->IsDModeIn (aDispMode))
+ for (TColStd_ListIteratorOfListOfInteger aDispModeIter (aStatus->DisplayedModes()); aDispModeIter.More(); aDispModeIter.Next())
+ {
+ if (myMainPM->IsHighlighted (theIObj, aDispModeIter.Value()))
{
- myMainPM->SetVisibility (theIObj, aDispMode, Standard_False);
+ myMainPM->Unhighlight (theIObj, aDispModeIter.Value());
}
- for (TColStd_ListIteratorOfListOfInteger aSelModeIter (aStatus->SelectionModes()); aSelModeIter.More(); aSelModeIter.Next())
- {
- mgrSelector->Deactivate (theIObj, aSelModeIter.Value(), myMainSel);
- }
+ myMainPM->SetVisibility (theIObj, aDispModeIter.Value(), Standard_False);
+ }
- if (theToUpdateviewer)
- {
- myMainVwr->Update();
- }
+ if (IsCurrent (theIObj)
+ && !aStatus->IsDModeIn (aDispMode))
+ {
+ myMainPM->SetVisibility (theIObj, aDispMode, Standard_False);
+ }
+
+ for (TColStd_ListIteratorOfListOfInteger aSelModeIter (aStatus->SelectionModes()); aSelModeIter.More(); aSelModeIter.Next())
+ {
+ mgrSelector->Deactivate (theIObj, aSelModeIter.Value(), myMainSel);
}
aStatus->SetGraphicStatus (AIS_DS_Erased);
+
+ if (theToUpdateviewer)
+ {
+ myMainVwr->Update();
+ }
}
//=======================================================================
if (theIObj.IsNull())
return;
- if (myObjects.IsBound (theIObj))
- {
- if (myObjects (theIObj)->GraphicStatus() == AIS_DS_Displayed || myObjects (theIObj)->GraphicStatus() == AIS_DS_Erased)
- {
- theIObj->SetZLayer (myMainPM, theLayerId);
- }
- }
- else if (HasOpenedContext())
- {
- myLocalContexts (myCurLocalIndex)->SetZLayer (theIObj, theLayerId);
- }
+ theIObj->SetZLayer (theLayerId);
}
//=======================================================================
//=======================================================================
Standard_Integer AIS_InteractiveContext::GetZLayer (const Handle(AIS_InteractiveObject)& theIObj) const
{
- if (theIObj.IsNull())
- return -1;
-
- if (myObjects.IsBound (theIObj))
- {
- return theIObj->GetZLayer (myMainPM);
- }
- else if (HasOpenedContext())
- {
- return myLocalContexts (myCurLocalIndex)->GetZLayer (theIObj);
- }
-
- return -1;
+ return !theIObj.IsNull()
+ ? theIObj->ZLayer()
+ : Graphic3d_ZLayerId_UNKNOWN;
}
anObject: InteractiveObject from AIS;
Prior : Integer from Standard);
- SetZLayer( me : mutable;
- theIObj : InteractiveObject from AIS;
- theLayerId : Integer from Standard );
- ---Purpose: Set Z layer id for interactive object. The layer can be
- -- specified for displayed object only. The Z layers can be used to display
- -- temporarily presentations of some object in front of the other objects
- -- in the scene. The ids for Z layers are generated by V3d_Viewer.
- -- Note that Z layers differ from under-/overlayer in V3d_View:
- -- under-/overlayer are intended for specific 2D drawings that appear
- -- behind/in front of all 3D presentations, while SetZLayer() method
- -- applies to regular 3D presentations and does not imply any specific
- -- drawing methods.
-
- GetZLayer( me;
- theIObj : InteractiveObject from AIS )
- returns Integer from Standard;
- ---Purpose: Get Z layer id set for displayed interactive object.
- -- If the object doesn't exists in context or has no computed presentations,
- -- the method returns -1.
-
DisplayedObjects(me;theMapToFill : in out MapOfTransient from TColStd)
returns Integer from Standard;
return myMainVS->PixelTolerance();
}
-
-//=======================================================================
-//function : SetZLayer
-//purpose :
-//=======================================================================
-
-void AIS_LocalContext::SetZLayer (const Handle(AIS_InteractiveObject)& theIObj,
- const Standard_Integer theLayerId)
-{
- if (!myActiveObjects.IsBound (theIObj))
- return;
-
- const Handle(AIS_LocalStatus)& aStatus = myActiveObjects (theIObj);
- if (aStatus->DisplayMode () == -1)
- return;
-
- theIObj->SetZLayer (myMainPM, theLayerId);
-}
-
-//=======================================================================
-//function : GetZLayer
-//purpose :
-//=======================================================================
-
-Standard_Integer AIS_LocalContext::GetZLayer (const Handle(AIS_InteractiveObject)& theIObj) const
-{
- if (!myActiveObjects.IsBound (theIObj))
- return -1;
-
- return theIObj->GetZLayer (myMainPM);
-}
Graphic3d_CBitFields4.hxx
Graphic3d_CTexture.hxx
Graphic3d_CLight.hxx
-Graphic3d_CPick.hxx
Graphic3d_CUserDraw.hxx
Graphic3d_CView.hxx
Graphic3d_CGraduatedTrihedron.hxx
Graphic3d_ShaderObject_Handle.hxx
Graphic3d_ShaderProgram_Handle.hxx
Graphic3d_ShaderVariable_Handle.hxx
+Graphic3d_MapOfStructure.hxx
+Graphic3d_MapIteratorOfMapOfStructure.hxx
Graphic3d_TypeOfShaderObject.hxx
Graphic3d_DataStructure.pxx
Graphic3d_StructureManager.pxx
Graphic3d_Vec4.hxx
Graphic3d_Mat4.hxx
Graphic3d_Mat4d.hxx
+Graphic3d_ZLayerId.hxx
Graphic3d_ZLayerSettings.hxx
Graphic3d_Vertex.hxx
Graphic3d_Vertex.cxx
imported CLight;
---Category: Imported types
- imported CPick;
- ---Category: Imported types
-
imported CPlane;
---Category: Imported types
imported Mat4;
imported Mat4d;
- imported ZLayerSettings;
+ imported ZLayerSettings;
+ primitive ZLayerId;
--------------------
-- Category: Classes
imported Vertex;
---Category: Classes
+ imported MapOfStructure;
+ imported SequenceOfDisplayedStructures;
+
---------------------------------
-- Category: Instantiated classes
---------------------------------
imported SequenceOfGroup;
- ---Category: Instantiated classes
-
- class MapOfStructure instantiates
- Map from TCollection (Structure from Graphic3d,MapTransientHasher from TColStd);
-
-
- ---Category: Instantiated classes
-
class SequenceOfStructure instantiates
Sequence from TCollection
(Structure from Graphic3d);
+++ /dev/null
-// Copyright (c) 1999-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 License 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.
-
-/*============================================================================*/
-/*==== Titre: Graphic3d_CPick.hxx */
-/*==== Role : The header file of primitive type "CPick" from Graphic3d */
-/*==== */
-/*==== Implementation: This is a primitive type implemented with typedef */
-/*============================================================================*/
-
-#ifndef _Graphic3d_CPick_HeaderFile
-#define _Graphic3d_CPick_HeaderFile
-
-#include <InterfaceGraphic_Graphic3d.hxx>
-#include <InterfaceGraphic_Visual3d.hxx>
-typedef CALL_DEF_PICK Graphic3d_CPick;
-
-#endif /*Graphic3d_CPick_HeaderFile*/
//=============================================================================
Graphic3d_CStructure::Graphic3d_CStructure (const Handle(Graphic3d_StructureManager)& theManager)
: Id (theManager->NewIdentification()),
+ myZLayer (Graphic3d_ZLayerId_Default),
Priority (Structure_MAX_PRIORITY / 2),
PreviousPriority (Structure_MAX_PRIORITY / 2),
Composition (Graphic3d_TOC_REPLACE),
stick (0),
highlight (0),
visible (1),
- pick (1),
HLRValidation (0),
IsForHighlight (Standard_False),
IsMutable (Standard_False),
#include <Graphic3d_SequenceOfHClipPlane.hxx>
#include <Graphic3d_TypeOfComposition.hxx>
#include <Graphic3d_Vec3.hxx>
+#include <Graphic3d_ZLayerId.hxx>
#include <Standard_Transient.hxx>
#include <Handle_Graphic3d_GraphicDriver.hxx>
return myBndBox;
}
+ //! Return structure visibility flag
+ bool IsVisible() const { return visible != 0; }
+
+ //! Set z layer ID to display the structure in specified layer
+ void SetZLayer (const Graphic3d_ZLayerId theLayerIndex) { myZLayer = theLayerIndex; }
+
+ //! Get z layer ID
+ Graphic3d_ZLayerId ZLayer() const { return myZLayer; }
+
public:
//! Update structure visibility state
- virtual void UpdateNamedStatus() = 0;
+ virtual void OnVisibilityChanged() = 0;
//! Clear graphic data
virtual void Clear() = 0;
public:
- int Id;
- int Priority;
- int PreviousPriority;
+ int Id;
+ Graphic3d_ZLayerId myZLayer;
+ int Priority;
+ int PreviousPriority;
CALL_DEF_CONTEXTLINE ContextLine;
CALL_DEF_CONTEXTFILLAREA ContextFillArea;
int ContainsFacet;
unsigned IsInfinite : 1;
- unsigned stick : 1;
+ unsigned stick : 1; //!< displaying state - should be set when structure has been added to scene graph (but can be in hidden state)
unsigned highlight : 1;
- unsigned visible : 1;
- unsigned pick : 1;
+ unsigned visible : 1; //!< visibility flag - can be used to suppress structure while leaving it in the scene graph
unsigned HLRValidation : 1;
unsigned IsForHighlight : 1;
unsigned IsMutable : 1;
PrintAlgo from Aspect,
DisplayConnection_Handle from Aspect,
+ ZLayerId from Graphic3d,
ZLayerSettings from Graphic3d,
AspectLine3d from Graphic3d,
CBitFields20 from Graphic3d,
Group from Graphic3d,
CLight from Graphic3d,
- CPick from Graphic3d,
CPlane from Graphic3d,
CStructure from Graphic3d,
CStructure_Handle from Graphic3d,
-- Category: Structure management methods
-----------------------------------------
- DisplayStructure ( me : mutable;
- theCView : CView from Graphic3d;
- theCStructure : in out CStructure from Graphic3d;
- thePriority : Integer from Standard )
+ DisplayStructure ( me : mutable;
+ theCView : CView from Graphic3d;
+ theStructure : Structure from Graphic3d;
+ thePriority : Integer from Standard )
is deferred;
---Purpose: call_togl_displaystructure
- EraseStructure ( me : mutable;
- theCView : CView from Graphic3d;
- theCStructure : in out CStructure from Graphic3d )
+ EraseStructure ( me : mutable;
+ theCView : CView from Graphic3d;
+ theStructure : Structure from Graphic3d )
is deferred;
---Purpose: call_togl_erasestructure
-- But it works in any case and is especially useful for view dump because the dump image is read from the back buffer.
-- @return previous mode.
- DisplayImmediateStructure ( me : mutable;
- theCView : CView from Graphic3d;
- theCStructure : CStructure from Graphic3d )
+ DisplayImmediateStructure ( me : mutable;
+ theCView : CView from Graphic3d;
+ theStructure : Structure from Graphic3d )
is deferred;
---Purpose: Display structure in immediate mode on top of general presentation
AddZLayer( me : mutable;
theCView : CView from Graphic3d;
- theLayerId : Integer from Standard )
+ theLayerId : ZLayerId from Graphic3d )
is deferred;
---Purpose: Add a new top-level z layer with ID <theLayerId> for
-- the view. Z layers allow drawing structures in higher layers
RemoveZLayer( me : mutable;
theCView : CView from Graphic3d;
- theLayerId : Integer from Standard )
+ theLayerId : ZLayerId from Graphic3d )
is deferred;
---Purpose: Remove Z layer from the specified view. All structures
-- displayed at the moment in layer will be displayed in default layer
-- structures use method UnsetZLayer (...).
UnsetZLayer( me : mutable;
- theLayerId : Integer from Standard )
+ theLayerId : ZLayerId from Graphic3d )
is deferred;
---Purpose: Unset Z layer ID for all structures. The structure
-- indexes will be set to default layer ( the bottom-level z layer
-- with ID = 0 ).
- ChangeZLayer( me : mutable;
- theCStructure : CStructure from Graphic3d;
- theLayerId : Integer from Standard )
- is deferred;
- ---Purpose: Change Z layer of a structure. The new z layer ID will
- -- be used to define the associated layer for structure on display.
-
ChangeZLayer( me : mutable;
theCStructure : CStructure from Graphic3d;
theCView : CView from Graphic3d;
- theNewLayerId : Integer from Standard )
+ theNewLayerId : ZLayerId from Graphic3d )
is deferred;
---Purpose: Change Z layer of a structure already presented in view.
- GetZLayer( me;
- theCStructure : CStructure from Graphic3d )
- returns Integer from Standard is deferred;
- ---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;
+ theLayerId : ZLayerId from Graphic3d;
theSettings : ZLayerSettings from Graphic3d)
is deferred;
---Purpose: Sets the settings for a single Z layer of specified view.
ACLight : CLight from Graphic3d;
AField : Integer from Standard );
- PrintCPick ( me;
- ACPick : CPick from Graphic3d;
- AField : Integer from Standard );
-
PrintCStructure ( me;
ACStructure : CStructure from Graphic3d;
AField : Integer from Standard );
}
}
-void Graphic3d_GraphicDriver::PrintCPick (const Graphic3d_CPick& ACPick, const Standard_Integer AField) const {
-
- if (AField) {
- cout << "\tws id " << ACPick.WsId
- << " view id " << ACPick.ViewId << "\n";
- cout << "\twindow id " << ACPick.DefWindow.XWindow << "\n";
- cout << "\tposition " << ACPick.x << " , " << ACPick.y << "\n";
- cout << flush;
- }
-
-}
-
void Graphic3d_GraphicDriver::PrintCStructure (const Graphic3d_CStructure& ACStructure, const Standard_Integer AField) const {
if (AField) {
--- /dev/null
+// Created on: 2014-12-18
+// Created by: Kirill Gavrilov
+// 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 License 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_MapIteratorOfMapOfStructure
+#define _Graphic3d_MapIteratorOfMapOfStructure
+
+#include <Graphic3d_MapOfStructure.hxx>
+
+typedef Graphic3d_MapOfStructure::Iterator Graphic3d_MapIteratorOfMapOfStructure;
+
+#endif // _Graphic3d_MapIteratorOfMapOfStructure
--- /dev/null
+// Created on: 2014-12-18
+// Created by: Kirill Gavrilov
+// 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 License 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_MapOfStructure
+#define _Graphic3d_MapOfStructure
+
+#include <Handle_Graphic3d_Structure.hxx>
+#include <NCollection_Map.hxx>
+
+typedef NCollection_Map<Handle(Graphic3d_Structure)> Graphic3d_MapOfStructure;
+
+#endif // _Graphic3d_MapOfStructure
Vector from Graphic3d,
Vertex from Graphic3d,
TransModeFlags from Graphic3d,
+ ZLayerId from Graphic3d,
Pnt from gp,
SequenceOfHClipPlane from Graphic3d,
BndBox4f from Graphic3d,
---Category: Methods to modify the class definition
---C++: alias ~
- Display ( me : mutable )
- is virtual;
- ---Level: Public
- ---Purpose: Displays the structure <me> in all the views of
- -- the visualiser.
- ---Category: Methods to modify the class definition
-
- Display ( me : mutable;
- Priority : Integer from Standard )
- ---Level: Public
- ---Purpose: Displays the structure <me> in all the views of
- -- the visualiser, while modifying its current priority.
- -- Note: Display Priorities
- -- Structure display priorities control the order in which
- -- structures are redrawn. When you display a
- -- structure, you specify its priority. The lower the value,
- -- the lower the display priority. When the display is
- -- regenerated, the structures with the lowest priority
- -- are drawn first. For structures with the same display
- -- priority, the order in which they were displayed
- -- determines the drawing order. Open CASCADE
- -- supports 11 structure display priorities, 0 to 10.
- -- Warning: Raises PriorityDefinitionError if <Priority> is
- -- greater than 10 or a negative value.
- raises PriorityDefinitionError from Graphic3d is static;
+ Display ( me : mutable )
+ is virtual;
+ ---Level: Public
+ ---Purpose: Displays the structure <me> in all the views of the visualiser.
DisplayPriority ( me )
returns Integer from Standard
-- of the visualiser.
---Category: Methods to modify the class definition
- Highlight ( me : mutable;
- Method : TypeOfHighlightMethod from Aspect )
+ Highlight ( me : mutable;
+ theMethod : TypeOfHighlightMethod from Aspect;
+ theColor : Color from Quantity;
+ theToUpdateMgr : Boolean from Standard = Standard_True)
is static;
---Level: Public
- ---Purpose: Highlights the structure <me> in all the
- -- views of the visualiser, using the following methods:
- --
- -- TOHM_COLOR = drawn in the highlight color
- -- (default white)
- -- TOHM_BLINK = blinking
- -- TOHM_BOUNDBOX = enclosed by the boundary box
- -- (default white)
- --
- ---Category: Methods to modify the class definition
+ ---Purpose: Highlights the structure <me> in all the views of the visualiser, using the following methods:
+ -- TOHM_COLOR = drawn in the highlight color
+ -- TOHM_BOUNDBOX = enclosed by the boundary box
Remove ( me : mutable )
is static;
---Purpose: Computes axis-aligned bounding box of a structure.
-- Category: Methods to modify the class definition
- SetHighlightColor ( me : mutable;
- AColor : Color from Quantity )
- is static;
- ---Level: Public
- ---Purpose: Modifies the highlight color for the Highlight method
- -- with the highlight method TOHM_COLOR or TOHM_BOUNDBOX.
- ---Category: Methods to modify the class definition
-
SetInfiniteState (me : mutable; theToSet : Boolean from Standard) is static;
---Level: Internal
---Purpose: If <theToSet> is Standard_True then <me> is infinite and
-- previous priority.
SetZLayer ( me : mutable;
- theLayerId : Integer from Standard )
+ theLayerId : ZLayerId from Graphic3d )
is static;
---Purpose: Set Z layer ID for the structure. The Z layer mechanism
-- allows to display structures presented in higher layers in overlay
-- test between layers
GetZLayer ( me )
- returns Integer from Standard is static;
+ returns ZLayerId from Graphic3d is static;
---Purpose: Get Z layer ID of displayed structure. The method
-- returns -1 if the structure has no ID (deleted from graphic driver).
---Purpose: Get clip planes slicing the structure on rendering.
-- @return set of clip planes.
- SetPick ( me : mutable;
- AValue : Boolean from Standard )
- is static;
- ---Level: Public
- ---Purpose: Modifies the detectability indicator to Standard_True
- -- or Standard_False for the structure <me>.
- -- The default value at the definition of <me> is
- -- Standard_True.
- ---Category: Methods to modify the class definition
-
SetPrimitivesAspect ( me : mutable;
CTX : AspectLine3d from Graphic3d )
is static;
---Purpose: Returns the highlight indicator for the structure <me>.
---Category: Inquire methods
- IsSelectable ( me )
- returns Boolean from Standard
- is static;
- ---Level: Public
- ---Purpose: Returns the detectability indicator for the structure <me>.
- ---Category: Inquire methods
-
IsRotated ( me )
returns Boolean from Standard
is static;
myStructureManager->Display (this);
}
- myCStructure->visible = 1;
+ if (myCStructure->visible != 1)
+ {
+ myCStructure->visible = 1;
+ myCStructure->OnVisibilityChanged();
+ }
}
//=============================================================================
myCStructure->IsForHighlight = isForHighlight;
}
-//=============================================================================
-//function : Display
-//purpose :
-//=============================================================================
-void Graphic3d_Structure::Display (const Standard_Integer thePriority)
-{
- if (IsDeleted()) return;
-
- SetDisplayPriority (thePriority);
-
- if (!myCStructure->stick)
- {
- myCStructure->stick = 1;
- myStructureManager->Display (this);
- }
-
- myCStructure->visible = 1;
-}
-
//=============================================================================
//function : SetDisplayPriority
//purpose :
//function : Highlight
//purpose :
//=============================================================================
-void Graphic3d_Structure::Highlight (const Aspect_TypeOfHighlightMethod theMethod)
+void Graphic3d_Structure::Highlight (const Aspect_TypeOfHighlightMethod theMethod,
+ const Quantity_Color& theColor,
+ const Standard_Boolean theToUpdateMgr)
{
if (IsDeleted())
{
return;
}
+ myHighlightColor = theColor;
+
// Highlight on already Highlighted structure.
if (myCStructure->highlight)
{
SetDisplayPriority (Structure_MAX_PRIORITY - 1);
GraphicHighlight (theMethod);
- if (myCStructure->stick)
- {
- myStructureManager->Highlight (this, theMethod);
- }
- Update();
-}
-
-//=============================================================================
-//function : SetHighlightColor
-//purpose :
-//=============================================================================
-void Graphic3d_Structure::SetHighlightColor (const Quantity_Color& theColor)
-{
- if (IsDeleted())
+ if (!theToUpdateMgr)
{
return;
}
- if (!myCStructure->highlight)
+ if (myCStructure->stick)
{
- myHighlightColor = theColor;
- return;
+ myStructureManager->Highlight (this, theMethod);
}
- // Change highlight color on already Highlighted structure.
- Aspect_TypeOfUpdate anUpdateMode = myStructureManager->UpdateMode();
- if (anUpdateMode == Aspect_TOU_WAIT)
- {
- UnHighlight();
- }
- else
- {
- // To avoid call of method : Update()
- // Not useful and can be costly.
- myStructureManager->SetUpdateMode (Aspect_TOU_WAIT);
- UnHighlight();
- myStructureManager->SetUpdateMode (anUpdateMode);
- }
- myHighlightColor = theColor;
- Highlight (myHighlightMethod);
+ Update();
}
//=============================================================================
{
if (IsDeleted()) return;
- myCStructure->visible = theValue ? 1 : 0;
- myCStructure->UpdateNamedStatus();
- Update();
-}
-
-//=============================================================================
-//function : SetPick
-//purpose :
-//=============================================================================
-void Graphic3d_Structure::SetPick (const Standard_Boolean theValue)
-{
- if (IsDeleted ()) return;
-
- myCStructure->pick = theValue ? 1 : 0;
- myCStructure->UpdateNamedStatus();
-
- if (theValue)
+ const unsigned isVisible = theValue ? 1 : 0;
+ if (myCStructure->visible == isVisible)
{
- myStructureManager->Detectable (this);
- }
- else
- {
- myStructureManager->Undetectable (this);
+ return;
}
+
+ myCStructure->visible = isVisible;
+ myCStructure->OnVisibilityChanged();
Update();
}
return myCStructure->highlight ? Standard_True : Standard_False;
}
-//=============================================================================
-//function : IsSelectable
-//purpose :
-//=============================================================================
-Standard_Boolean Graphic3d_Structure::IsSelectable() const
-{
- return myCStructure->pick ? Standard_True : Standard_False;
-}
-
//=============================================================================
//function : IsVisible
//purpose :
{
myHighlightColor.Values (anRGB[0], anRGB[1], anRGB[2], Quantity_TOC_RGB);
myCStructure->HighlightWithColor (Graphic3d_Vec3 (float (anRGB[0]), float (anRGB[1]), float (anRGB[2])), Standard_True);
- myCStructure->UpdateNamedStatus();
break;
}
case Aspect_TOHM_BOUNDBOX:
{
case Aspect_TOHM_COLOR:
myCStructure->HighlightWithColor (Graphic3d_Vec3 (0.0f, 0.0f, 0.0f), Standard_False);
- myCStructure->UpdateNamedStatus();
break;
case Aspect_TOHM_BOUNDBOX:
myCStructure->HighlightWithBndBox (this, Standard_False);
- myCStructure->UpdateNamedStatus();
break;
}
}
//function : SetZLayer
//purpose :
//=======================================================================
-void Graphic3d_Structure::SetZLayer (const Standard_Integer theLayerId)
+void Graphic3d_Structure::SetZLayer (const Graphic3d_ZLayerId theLayerId)
{
// if the structure is not displayed, unable to change its display layer
if (IsDeleted ())
return;
myStructureManager->ChangeZLayer (this, theLayerId);
+ myCStructure->SetZLayer (theLayerId);
}
//=======================================================================
//function : GetZLayer
//purpose :
//=======================================================================
-Standard_Integer Graphic3d_Structure::GetZLayer () const
+Graphic3d_ZLayerId Graphic3d_Structure::GetZLayer() const
{
- return myStructureManager->GetZLayer (this);
+ return myCStructure->ZLayer();
}
//=======================================================================
-- It allows them to be globally manipulated.
-- It defines the global attributes.
-- Keywords: Structure, Structure Manager, Update Mode,
- -- Destroy, Highlight, Visible, Detectable
+ -- Destroy, Highlight, Visible
---Warning:
---References:
TypeOfHighlightMethod from Aspect,
TypeOfUpdate from Aspect,
+ ZLayerId from Graphic3d,
ZLayerSettings from Graphic3d,
DataStructureManager from Graphic3d,
-- in a visualiser <me>.
---Category: Inquire methods, MapOfStructure
- PickStructures ( me; SG: in out MapOfStructure from Graphic3d )
- is static;
- ---Level: Internal
- ---Purpose: Returns the set of detectable structures
- -- in a visualiser <me>.
- ---Category: Inquire methods, MapOfStructure
-
----------------------------
-- Category: Inquire methods
----------------------------
ChangeZLayer ( me : mutable;
theStructure : Structure from Graphic3d;
- theLayerId : Integer from Standard )
+ theLayerId : ZLayerId from Graphic3d )
is deferred;
---Purpose: Change Z layer for structure. The z layer mechanism allows
-- to display structures in higher layers in overlay of structures in
-- lower layers.
- GetZLayer ( me;
- theStructure : Structure from Graphic3d )
- returns Integer from Standard is deferred;
- ---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;
+ theLayerId : ZLayerId from Graphic3d;
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 )
+ theLayerId : ZLayerId from Graphic3d )
returns ZLayerSettings from Graphic3d is deferred;
---Purpose: Returns the settings of a single Z layer.
AddZLayer ( me : mutable;
- theLayerId : in out Integer from Standard )
+ theLayerId : out ZLayerId from Graphic3d )
returns Boolean from Standard is deferred;
---Purpose: Add a new top-level Z layer and get its ID as
-- <theLayerId> value. The method returns Standard_False if the layer
-- structures in higher layers in overlay of structures in lower layers.
RemoveZLayer ( me : mutable;
- theLayerId : Integer from Standard )
+ theLayerId : ZLayerId from Graphic3d )
returns Boolean from Standard is deferred;
---Purpose: Remove Z layer with ID <theLayerId>. Method returns
-- Standard_False if the layer can not be removed or doesn't exists.
-- if <AStructure> is displayed in <AProjector> and TOS_COMPUTED.
---Category: Private methods
- Detectable ( me : mutable;
- AStructure : Structure from Graphic3d )
- is static private;
- ---Level: Internal
- ---Purpose: Sets detectable the structure <AStructure>.
- ---Category: Private methods
-
Clear ( me : mutable;
AStructure : Structure from Graphic3d;
WithDestruction : Boolean from Standard )
---Purpose: Frees the identifieur <AnId>.
---Category: Private methods
- Undetectable ( me : mutable;
- AStructure : Structure from Graphic3d )
- is static private;
- ---Level: Internal
- ---Purpose: Sets no detectable the structure <AStructure>.
- ---Category: Private methods
-
UnHighlight ( me : mutable )
is deferred;
---Level: Internal
MyHighlightedStructure : MapOfStructure from Graphic3d
is protected;
- -- the pickable structures
- MyPickStructure : MapOfStructure from Graphic3d
- is protected;
-
-- the structure identifier generator
MyStructGenId : GenId from Aspect is protected;
#include <Graphic3d_Structure.pxx>
#include <Graphic3d_MapIteratorOfMapOfStructure.hxx>
-//-Aliases
-
-//-Global data definitions
-
-// -- l'identifieur du manager
-// MyId : Standard_Integer;
-
-// -- le mode de mise a jour de l'affichage
-// MyUpdateMode : TypeOfUpdate;
-
-// -- les differents contextes de primitives
-// MyAspectLine3d : AspectLine3d;
-// MyAspectText3d : AspectText3d;
-// MyAspectMarker3d : AspectMarker3d;
-// MyAspectFillArea3d : AspectFillArea3d;
-
-// -- les structures affichees
-// MyDisplayedStructure : SequenceOfStructure;
-
-// -- les structures mises en evidence
-// MyHighlightedStructure : SequenceOfStructure;
-
-// -- les structures detectables
-// MyPickStructure : SequenceOfStructure;
-
-// -- le generateur d'identificateurs de structures
-// MyStructGenId : GenId;
-
-//-Constructors
-
-Graphic3d_StructureManager::Graphic3d_StructureManager (const Handle(Graphic3d_GraphicDriver)& theDriver):
-MyDisplayedStructure (),
-MyHighlightedStructure (),
-MyPickStructure () {
+Graphic3d_StructureManager::Graphic3d_StructureManager (const Handle(Graphic3d_GraphicDriver)& theDriver)
+{
Standard_Real Coef;
Standard_Integer i;
MyDisplayedStructure.Clear ();
MyHighlightedStructure.Clear ();
- MyPickStructure.Clear ();
StructureManager_ArrayId[MyId] = 0;
}
}
-void Graphic3d_StructureManager::Detectable (const Handle(Graphic3d_Structure)& AStructure) {
-
- MyPickStructure.Add(AStructure);
-
-}
-
-void Graphic3d_StructureManager::Undetectable (const Handle(Graphic3d_Structure)& AStructure) {
-
- MyPickStructure.Remove(AStructure);
-
-}
-
void Graphic3d_StructureManager::DisplayedStructures (Graphic3d_MapOfStructure& SG) const {
SG.Assign(MyDisplayedStructure);
}
-void Graphic3d_StructureManager::PickStructures (Graphic3d_MapOfStructure& SG) const {
-
- SG.Assign(MyPickStructure);
-
-}
-
Standard_Integer Graphic3d_StructureManager::NewIdentification () {
Standard_Integer Id = MyStructGenId.Next ();
--- /dev/null
+// Created on: 2014-12-30
+// Created by: Kirill Gavrilov
+// 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 License 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_ZLayerId_HeaderFile
+#define _Graphic3d_ZLayerId_HeaderFile
+
+typedef Standard_Integer Graphic3d_ZLayerId;
+
+//! This enumeration defines the list of predefined layers, which can not be removed (but settings can be overridden).
+//! Custom layers might be added with positive index (>= 1) if standard list is insufficient for application needs;
+//! these layers will be displayed on top of predefined ones.
+enum
+{
+ Graphic3d_ZLayerId_UNKNOWN = -1, //!< identifier for invalid ZLayer
+ Graphic3d_ZLayerId_Default = 0, //!< default Z-layer for main presentations
+ Graphic3d_ZLayerId_Top = -2, //!< overlay for 3D presentations which inherits Depth from previous ZLayer
+ Graphic3d_ZLayerId_Topmost = -3, //!< overlay for 3D presentations with independent Depth
+ Graphic3d_ZLayerId_TopOSD = -4 //!< overlay for 2D presentations (On-Screen-Display)
+};
+
+#endif // _Graphic3d_ZLayerId_HeaderFile
Graphic3d_ZLayerDepthOffset = 8
};
+//! Structure defines list of ZLayer properties.
struct Graphic3d_ZLayerSettings
{
+
+ //! Default settings.
Graphic3d_ZLayerSettings()
: DepthOffsetFactor (1.0f),
DepthOffsetUnits (1.0f),
Flags (Graphic3d_ZLayerDepthTest
| Graphic3d_ZLayerDepthWrite
- | Graphic3d_ZLayerDepthClear)
+ | Graphic3d_ZLayerDepthClear),
+ IsImmediate (false)
{}
//! Returns true if theSetting is enabled.
EnableSetting (Graphic3d_ZLayerDepthOffset);
}
- Standard_ShortReal DepthOffsetFactor; //!< Factor argument value for OpenGl glPolygonOffset function.
- Standard_ShortReal DepthOffsetUnits; //!< Units argument value for OpenGl glPolygonOffset function.
+public:
+
+ 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
+ bool IsImmediate; //!< immediate layer will be drawn after all normal layers
- Standard_Integer Flags; //!< Storage field for settings.
};
#endif // _Graphic3d_ZLayerSettings_HeaderFile
} CALL_DEF_VIEWMAPPING;
-/* REPERAGE */
-
-typedef struct {
-
- int WsId;
- int ViewId;
-
- int x, y;
-
- CALL_DEF_WINDOW DefWindow;
-
- struct {
- float aperture;
- int order;
- int depth;
- } Context;
-
- struct {
- int depth;
- int *listid;
- int *listpickid;
- int *listelem;
- } Pick;
-
-} CALL_DEF_PICK;
-
#endif /* InterfaceGraphic_Visual3dHeader */
OpenGl_Window.hxx
OpenGl_Window.cxx
OpenGl_Window_1.mm
-OpenGl_PriorityList.hxx
-OpenGl_PriorityList.cxx
OpenGl_AVIWriter.hxx
OpenGl_AVIWriter.cxx
OpenGl_FrameBuffer.hxx
OpenGl_ShaderManager.cxx
OpenGl_ShaderStates.hxx
OpenGl_ShaderStates.cxx
+OpenGl_SequenceOfStructure.hxx
Handle_OpenGl_ShaderObject.hxx
Handle_OpenGl_ShaderProgram.hxx
Handle_OpenGl_ShaderManager.hxx
myStructs.Clear();
const Standard_Integer aNbPriorities = theStructs.Length();
- OpenGl_SequenceOfStructure::Iterator aStructIter;
for (Standard_Integer aPriorityIdx = 0; aPriorityIdx < aNbPriorities; ++aPriorityIdx)
{
- const OpenGl_SequenceOfStructure& aSeq = theStructs (aPriorityIdx);
- for (aStructIter.Init (aSeq); aStructIter.More(); aStructIter.Next())
+ for (OpenGl_SequenceOfStructure::Iterator aStructIter (theStructs (aPriorityIdx)); aStructIter.More(); aStructIter.Next())
{
const OpenGl_Structure* aStruct = aStructIter.Value();
if (!aStruct->IsAlwaysRendered())
#define _OpenGl_BVHClipPrimitiveSet_HeaderFile
#include <BVH_PrimitiveSet.hxx>
-
#include <NCollection_Array1.hxx>
-#include <NCollection_Sequence.hxx>
#include <OpenGl_Vec.hxx>
#include <OpenGl_Structure.hxx>
+#include <OpenGl_SequenceOfStructure.hxx>
-typedef NCollection_Sequence<const OpenGl_Structure*> OpenGl_SequenceOfStructure;
typedef NCollection_Array1<OpenGl_SequenceOfStructure> OpenGl_ArrayOfStructure;
//! Set of OpenGl_Structures for building BVH tree.
// function : DisplayImmediateStructure
// purpose :
// =======================================================================
-void OpenGl_GraphicDriver::DisplayImmediateStructure (const Graphic3d_CView& theCView,
- const Graphic3d_CStructure& theCStructure)
+void OpenGl_GraphicDriver::DisplayImmediateStructure (const Graphic3d_CView& theCView,
+ const Handle(Graphic3d_Structure)& theStructure)
{
- OpenGl_CView* aCView = (OpenGl_CView* )theCView.ptrView;
- OpenGl_Structure* aStructure = (OpenGl_Structure* )&theCStructure;
+ OpenGl_CView* aCView = (OpenGl_CView* )theCView.ptrView;
if (aCView == NULL)
{
return;
}
- aCView->View->DisplayImmediateStructure (aStructure);
+ aCView->View->DisplayImmediateStructure (theStructure);
}
// =======================================================================
#include <gp_Ax2.hxx>
#include <Graphic3d_CView.hxx>
#include <Graphic3d_CStructure.hxx>
-#include <Graphic3d_CPick.hxx>
#include <Graphic3d_TextPath.hxx>
#include <Graphic3d_HorizontalTextAlignment.hxx>
#include <Graphic3d_VerticalTextAlignment.hxx>
public: // Methods for graphical structures
- Standard_EXPORT void DisplayStructure (const Graphic3d_CView& theCView,
- Graphic3d_CStructure& theCStructure,
- const Standard_Integer thePriority);
- Standard_EXPORT void EraseStructure (const Graphic3d_CView& theCView,
- Graphic3d_CStructure& theCStructure);
+ Standard_EXPORT void DisplayStructure (const Graphic3d_CView& theCView,
+ const Handle(Graphic3d_Structure)& theStructure,
+ const Standard_Integer thePriority);
+ Standard_EXPORT void EraseStructure (const Graphic3d_CView& theCView,
+ const Handle(Graphic3d_Structure)& theStructure);
Standard_EXPORT void RemoveStructure (Handle(Graphic3d_CStructure)& theCStructure);
Standard_EXPORT Handle(Graphic3d_CStructure) Structure (const Handle(Graphic3d_StructureManager)& theManager);
Standard_EXPORT Standard_Boolean SetImmediateModeDrawToFront (const Graphic3d_CView& theCView,
const Standard_Boolean theDrawToFrontBuffer);
- Standard_EXPORT void DisplayImmediateStructure (const Graphic3d_CView& theCView,
- const Graphic3d_CStructure& theCStructure);
+ Standard_EXPORT void DisplayImmediateStructure (const Graphic3d_CView& theCView,
+ const Handle(Graphic3d_Structure)& theStructure);
Standard_EXPORT void EraseImmediateStructure (const Graphic3d_CView& theCView,
const Graphic3d_CStructure& theCStructure);
//! Add a new top-level z layer with ID theLayerId for the view. Z layers allow drawing structures in higher layers in foreground of structures in lower layers.
//! To add a structure to desired layer on display it is necessary to set the layer index for the structure.
- Standard_EXPORT void AddZLayer (const Graphic3d_CView& theCView,
- const Standard_Integer theLayerId);
+ Standard_EXPORT void AddZLayer (const Graphic3d_CView& theCView,
+ const Graphic3d_ZLayerId theLayerId);
//! Remove Z layer from the specified view.
//! All structures displayed at the moment in layer will be displayed in default layer (the bottom-level z layer).
//! To unset layer index from associated structures use method UnsetZLayer (...).
- Standard_EXPORT void RemoveZLayer (const Graphic3d_CView& theCView,
- const Standard_Integer theLayerId);
+ Standard_EXPORT void RemoveZLayer (const Graphic3d_CView& theCView,
+ const Graphic3d_ZLayerId theLayerId);
//! Unset Z layer ID for all structures.
//! The structure indexes will be set to default layer (the bottom-level z layer with ID = 0).
- Standard_EXPORT void UnsetZLayer (const Standard_Integer theLayerId);
-
- //! Change Z layer of a structure.
- //! The new z layer ID will be used to define the associated layer for structure on display.
- //! It is recommended to take care of redisplaying the structures already presented in view with previously set layer index.
- //! This is usually done by viewer manager. Z layers allow drawing structures in higher layers in foreground of structures in lower layers.
- Standard_EXPORT void ChangeZLayer (const Graphic3d_CStructure& theCStructure,
- const Standard_Integer theLayerId);
+ Standard_EXPORT void UnsetZLayer (const Graphic3d_ZLayerId theLayerId);
//! Change Z layer of a structure already presented in view.
//! It is recommended to update z layer of already displayed structures with this method before setting new z layer index to the structure.
//! This is usually done by viewer manager.
Standard_EXPORT void ChangeZLayer (const Graphic3d_CStructure& theCStructure,
const Graphic3d_CView& theCView,
- const Standard_Integer theNewLayerId);
-
- //! 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;
+ const Graphic3d_ZLayerId theNewLayerId);
//! Sets the settings for a single Z layer of specified view.
- Standard_EXPORT void SetZLayerSettings (const Graphic3d_CView& theCView,
- const Standard_Integer theLayerId,
+ Standard_EXPORT void SetZLayerSettings (const Graphic3d_CView& theCView,
+ const Graphic3d_ZLayerId theLayerId,
const Graphic3d_ZLayerSettings& theSettings);
//! Changes priority of a structure within its Z layer for the specified view.
#include <OpenGl_Structure.hxx>
#include <OpenGl_CView.hxx>
-void OpenGl_GraphicDriver::DisplayStructure (const Graphic3d_CView& theCView,
- Graphic3d_CStructure& theCStructure,
- const Standard_Integer thePriority)
+void OpenGl_GraphicDriver::DisplayStructure (const Graphic3d_CView& theCView,
+ const Handle(Graphic3d_Structure)& theStructure,
+ const Standard_Integer thePriority)
{
- const OpenGl_CView* aCView = (const OpenGl_CView* )theCView.ptrView;
- OpenGl_Structure* aStructure = (OpenGl_Structure* )&theCStructure;
+ const OpenGl_CView* aCView = (const OpenGl_CView* )theCView.ptrView;
if (aCView == NULL)
return;
- aCView->View->DisplayStructure (aStructure, thePriority);
+ aCView->View->DisplayStructure (theStructure, thePriority);
}
-void OpenGl_GraphicDriver::EraseStructure (const Graphic3d_CView& theCView,
- Graphic3d_CStructure& theCStructure)
+void OpenGl_GraphicDriver::EraseStructure (const Graphic3d_CView& theCView,
+ const Handle(Graphic3d_Structure)& theStructure)
{
- const OpenGl_CView* aCView = (const OpenGl_CView* )theCView.ptrView;
- OpenGl_Structure* aStructure = (OpenGl_Structure* )&theCStructure;
- if (aCView == NULL || aStructure == NULL)
+ const OpenGl_CView* aCView = (const OpenGl_CView* )theCView.ptrView;
+ if (aCView == NULL)
return;
- aCView->View->EraseStructure (aStructure);
+ aCView->View->EraseStructure (theStructure);
}
void OpenGl_GraphicDriver::RemoveStructure (Handle(Graphic3d_CStructure)& theCStructure)
//=======================================================================
void OpenGl_GraphicDriver::ChangeZLayer (const Graphic3d_CStructure& theCStructure,
- const Standard_Integer theLayer)
-{
- if (!myMapOfStructure.IsBound (theCStructure.Id))
- return;
-
- OpenGl_Structure* aStructure = myMapOfStructure.Find (theCStructure.Id);
-
- aStructure->SetZLayer (theLayer);
-}
-
-//=======================================================================
-//function : ChangeZLayer
-//purpose :
-//=======================================================================
-
-void OpenGl_GraphicDriver::ChangeZLayer (const Graphic3d_CStructure& theCStructure,
- const Graphic3d_CView& theCView,
- const Standard_Integer theNewLayerId)
+ const Graphic3d_CView& theCView,
+ const Graphic3d_ZLayerId theNewLayerId)
{
const OpenGl_CView *aCView = (const OpenGl_CView *)theCView.ptrView;
aCView->View->ChangeZLayer (aStructure, theNewLayerId);
}
-//=======================================================================
-//function : GetZLayer
-//purpose :
-//=======================================================================
-
-Standard_Integer OpenGl_GraphicDriver::GetZLayer (const Graphic3d_CStructure& theCStructure) const
-{
- if (!myMapOfStructure.IsBound (theCStructure.Id))
- return -1;
-
- OpenGl_Structure* aStructure = myMapOfStructure.Find (theCStructure.Id);
-
- return aStructure->GetZLayer();
-}
-
//=======================================================================
//function : UnsetZLayer
//purpose :
//=======================================================================
-void OpenGl_GraphicDriver::UnsetZLayer (const Standard_Integer theLayerId)
+void OpenGl_GraphicDriver::UnsetZLayer (const Graphic3d_ZLayerId theLayerId)
{
NCollection_DataMap<Standard_Integer, OpenGl_Structure*>::Iterator aStructIt (myMapOfStructure);
for( ; aStructIt.More (); aStructIt.Next ())
{
OpenGl_Structure* aStruct = aStructIt.ChangeValue ();
- if (aStruct->GetZLayer () == theLayerId)
- aStruct->SetZLayer (0);
+ if (aStruct->ZLayer() == theLayerId)
+ aStruct->SetZLayer (Graphic3d_ZLayerId_Default);
}
}
//purpose :
//=======================================================================
void OpenGl_GraphicDriver::ChangePriority (const Graphic3d_CStructure& theCStructure,
- const Graphic3d_CView& theCView,
- const Standard_Integer theNewPriority)
+ const Graphic3d_CView& theCView,
+ const Standard_Integer theNewPriority)
{
const OpenGl_CView *aCView = (const OpenGl_CView *)theCView.ptrView;
//purpose :
//=======================================================================
-void OpenGl_GraphicDriver::AddZLayer (const Graphic3d_CView& theCView,
- const Standard_Integer theLayerId)
+void OpenGl_GraphicDriver::AddZLayer (const Graphic3d_CView& theCView,
+ const Graphic3d_ZLayerId theLayerId)
{
const OpenGl_CView *aCView = (const OpenGl_CView *)theCView.ptrView;
if (aCView)
//function : RemoveZLayer
//purpose :
//=======================================================================
-void OpenGl_GraphicDriver::RemoveZLayer (const Graphic3d_CView& theCView,
- const Standard_Integer theLayerId)
+void OpenGl_GraphicDriver::RemoveZLayer (const Graphic3d_CView& theCView,
+ const Graphic3d_ZLayerId theLayerId)
{
const OpenGl_CView* aCView = (const OpenGl_CView *)theCView.ptrView;
if (aCView)
//function : SetZLayerSettings
//purpose :
//=======================================================================
-Standard_EXPORT void OpenGl_GraphicDriver::SetZLayerSettings (const Graphic3d_CView& theCView,
- const Standard_Integer theLayerId,
+Standard_EXPORT void OpenGl_GraphicDriver::SetZLayerSettings (const Graphic3d_CView& theCView,
+ const Graphic3d_ZLayerId theLayerId,
const Graphic3d_ZLayerSettings& theSettings)
{
const OpenGl_CView* aCView = (const OpenGl_CView* )theCView.ptrView;
// commercial license or contractual agreement.
#include <OpenGl_Layer.hxx>
+
+#include <OpenGl_BVHTreeSelector.hxx>
+#include <OpenGl_Structure.hxx>
+#include <OpenGl_View.hxx>
#include <OpenGl_Workspace.hxx>
-#include <OpenGl_GlCore11.hxx>
-//=======================================================================
-//function : OpenGl_Layer
-//purpose :
-//=======================================================================
+// =======================================================================
+// function : OpenGl_PriorityList
+// purpose :
+// =======================================================================
OpenGl_Layer::OpenGl_Layer (const Standard_Integer theNbPriorities)
- : myPriorityList (theNbPriorities)
+: myArray (0, theNbPriorities - 1),
+ myNbStructures (0),
+ myBVHIsLeftChildQueuedFirst (Standard_True),
+ myIsBVHPrimitivesNeedsReset (Standard_False)
{
//
}
+// =======================================================================
+// function : ~OpenGl_Layer
+// purpose :
+// =======================================================================
+OpenGl_Layer::~OpenGl_Layer()
+{
+ //
+}
+
+// =======================================================================
+// function : Add
+// purpose :
+// =======================================================================
+void OpenGl_Layer::Add (const OpenGl_Structure* theStruct,
+ const Standard_Integer thePriority,
+ Standard_Boolean isForChangePriority)
+{
+ const Standard_Integer anIndex = Min (Max (thePriority, 0), myArray.Length() - 1);
+ if (theStruct == NULL)
+ {
+ return;
+ }
+
+ myArray (anIndex).Append (theStruct);
+ if (theStruct->IsAlwaysRendered())
+ {
+ theStruct->MarkAsNotCulled();
+ }
+ else if (!isForChangePriority)
+ {
+ myBVHPrimitives.Add (theStruct);
+ }
+ ++myNbStructures;
+}
+
+// =======================================================================
+// function : Remove
+// purpose :
+// =======================================================================
+bool OpenGl_Layer::Remove (const OpenGl_Structure* theStruct,
+ Standard_Integer& thePriority,
+ Standard_Boolean isForChangePriority)
+{
+ if (theStruct == NULL)
+ {
+ thePriority = -1;
+ return false;
+ }
+
+ const Standard_Integer aNbPriorities = myArray.Length();
+ for (Standard_Integer aPriorityIter = 0; aPriorityIter < aNbPriorities; ++aPriorityIter)
+ {
+ OpenGl_SequenceOfStructure& aSeq = myArray (aPriorityIter);
+ for (OpenGl_SequenceOfStructure::Iterator aStructIter (aSeq); aStructIter.More(); aStructIter.Next())
+ {
+ if (aStructIter.Value() == theStruct)
+ {
+ aSeq.Remove (aStructIter);
+ if (!theStruct->IsAlwaysRendered()
+ && !isForChangePriority)
+ {
+ myBVHPrimitives.Remove (theStruct);
+ }
+ --myNbStructures;
+ thePriority = aPriorityIter;
+ return true;
+ }
+ }
+ }
+
+ thePriority = -1;
+ return false;
+}
+
+// =======================================================================
+// function : InvalidateBVHData
+// purpose :
+// =======================================================================
+void OpenGl_Layer::InvalidateBVHData()
+{
+ myIsBVHPrimitivesNeedsReset = Standard_True;
+}
+
+// =======================================================================
+// function : renderAll
+// purpose :
+// =======================================================================
+void OpenGl_Layer::renderAll (const Handle(OpenGl_Workspace)& theWorkspace) const
+{
+ const Standard_Integer aNbPriorities = myArray.Length();
+ for (Standard_Integer aPriorityIter = 0; aPriorityIter < aNbPriorities; ++aPriorityIter)
+ {
+ for (OpenGl_SequenceOfStructure::Iterator aStructIter (myArray (aPriorityIter)); aStructIter.More(); aStructIter.Next())
+ {
+ const OpenGl_Structure* aStruct = aStructIter.Value();
+ if (!aStruct->IsVisible())
+ {
+ continue;
+ }
+
+ aStruct->Render (theWorkspace);
+ }
+ }
+}
+
+// =======================================================================
+// function : renderTraverse
+// purpose :
+// =======================================================================
+void OpenGl_Layer::renderTraverse (const Handle(OpenGl_Workspace)& theWorkspace) const
+{
+ if (myIsBVHPrimitivesNeedsReset)
+ {
+ myBVHPrimitives.Assign (myArray);
+ myIsBVHPrimitivesNeedsReset = Standard_False;
+ }
+
+ OpenGl_BVHTreeSelector& aSelector = theWorkspace->ActiveView()->BVHTreeSelector();
+ traverse (aSelector);
+
+ const Standard_Integer aNbPriorities = myArray.Length();
+ for (Standard_Integer aPriorityIter = 0; aPriorityIter < aNbPriorities; ++aPriorityIter)
+ {
+ for (OpenGl_SequenceOfStructure::Iterator aStructIter (myArray (aPriorityIter)); aStructIter.More(); aStructIter.Next())
+ {
+ const OpenGl_Structure* aStruct = aStructIter.Value();
+ if (!aStruct->IsVisible()
+ || aStruct->IsCulled())
+ {
+ continue;
+ }
+
+ aStruct->Render (theWorkspace);
+ aStruct->ResetCullingStatus();
+ }
+ }
+}
+
+// =======================================================================
+// function : traverse
+// purpose :
+// =======================================================================
+void OpenGl_Layer::traverse (OpenGl_BVHTreeSelector& theSelector) const
+{
+ // handle a case when all objects are infinite
+ if (myBVHPrimitives.Size() == 0)
+ return;
+
+ const NCollection_Handle<BVH_Tree<Standard_ShortReal, 4> >& aBVHTree = myBVHPrimitives.BVH();
+
+ Standard_Integer aNode = 0; // a root node
+ theSelector.CacheClipPtsProjections();
+ if (!theSelector.Intersect (aBVHTree->MinPoint (0),
+ aBVHTree->MaxPoint (0)))
+ {
+ return;
+ }
+
+ Standard_Integer aStack[32];
+ Standard_Integer aHead = -1;
+ for (;;)
+ {
+ if (!aBVHTree->IsOuter (aNode))
+ {
+ const Standard_Integer aLeftChildIdx = aBVHTree->LeftChild (aNode);
+ const Standard_Integer aRightChildIdx = aBVHTree->RightChild (aNode);
+ const Standard_Boolean isLeftChildIn = theSelector.Intersect (aBVHTree->MinPoint (aLeftChildIdx),
+ aBVHTree->MaxPoint (aLeftChildIdx));
+ const Standard_Boolean isRightChildIn = theSelector.Intersect (aBVHTree->MinPoint (aRightChildIdx),
+ aBVHTree->MaxPoint (aRightChildIdx));
+ if (isLeftChildIn
+ && isRightChildIn)
+ {
+ aNode = myBVHIsLeftChildQueuedFirst ? aLeftChildIdx : aRightChildIdx;
+ ++aHead;
+ aStack[aHead] = myBVHIsLeftChildQueuedFirst ? aRightChildIdx : aLeftChildIdx;
+ myBVHIsLeftChildQueuedFirst = !myBVHIsLeftChildQueuedFirst;
+ }
+ else if (isLeftChildIn
+ || isRightChildIn)
+ {
+ aNode = isLeftChildIn ? aLeftChildIdx : aRightChildIdx;
+ }
+ else
+ {
+ if (aHead < 0)
+ {
+ return;
+ }
+
+ aNode = aStack[aHead];
+ --aHead;
+ }
+ }
+ else
+ {
+ if (theSelector.Intersect (aBVHTree->MinPoint (aNode),
+ aBVHTree->MaxPoint (aNode)))
+ {
+ Standard_Integer aIdx = aBVHTree->BegPrimitive (aNode);
+ myBVHPrimitives.GetStructureById (aIdx)->MarkAsNotCulled();
+ if (aHead < 0)
+ {
+ return;
+ }
+
+ aNode = aStack[aHead];
+ --aHead;
+ }
+ }
+ }
+}
+
+// =======================================================================
+// function : Append
+// purpose :
+// =======================================================================
+Standard_Boolean OpenGl_Layer::Append (const OpenGl_Layer& theOther)
+{
+ // the source priority list shouldn't have more priorities
+ const Standard_Integer aNbPriorities = theOther.NbPriorities();
+ if (aNbPriorities > NbPriorities())
+ {
+ return Standard_False;
+ }
+
+ // add all structures to destination priority list
+ for (Standard_Integer aPriorityIter = 0; aPriorityIter < aNbPriorities; ++aPriorityIter)
+ {
+ for (OpenGl_SequenceOfStructure::Iterator aStructIter (theOther.myArray (aPriorityIter)); aStructIter.More(); aStructIter.Next())
+ {
+ Add (aStructIter.Value(), aPriorityIter);
+ }
+ }
+
+ return Standard_True;
+}
+
//=======================================================================
//function : Render
-//purpose :
+//purpose :
//=======================================================================
-void OpenGl_Layer::Render (const Handle(OpenGl_Workspace) &theWorkspace, const OpenGl_GlobalLayerSettings& theDefaultSettings) const
+void OpenGl_Layer::Render (const Handle(OpenGl_Workspace)& theWorkspace,
+ const OpenGl_GlobalLayerSettings& theDefaultSettings) const
{
TEL_POFFSET_PARAM anAppliedOffsetParams = theWorkspace->AppliedPolygonOffset();
}
// handle depth write
- if (IsSettingEnabled (Graphic3d_ZLayerDepthWrite))
- {
- glDepthMask (GL_TRUE);
- }
- else
- {
- glDepthMask (GL_FALSE);
- }
+ glDepthMask (IsSettingEnabled (Graphic3d_ZLayerDepthWrite) ? GL_TRUE : GL_FALSE);
// render priority list
- myPriorityList.Render (theWorkspace);
+ theWorkspace->IsCullingEnabled() ? renderTraverse (theWorkspace) : renderAll (theWorkspace);
// always restore polygon offset between layers rendering
theWorkspace->SetPolygonOffset (anAppliedOffsetParams.mode,
-// Created on: 2014-03-31
-// Created by: Danila ULYANOV
-// Copyright (c) 2014 OPEN CASCADE SAS
+// Created on: 2011-11-02
+// Created by: Sergey ZERCHANINOV
+// Copyright (c) 2011-2015 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
#ifndef _OpenGl_Layer_Header
#define _OpenGl_Layer_Header
-#include <OpenGl_PriorityList.hxx>
+#include <NCollection_Sequence.hxx>
+#include <NCollection_Array1.hxx>
+
+#include <InterfaceGraphic_telem.hxx>
+
+#include <Handle_OpenGl_Workspace.hxx>
+#include <OpenGl_BVHClipPrimitiveSet.hxx>
+#include <OpenGl_BVHTreeSelector.hxx>
+
#include <Graphic3d_ZLayerSettings.hxx>
#include <OpenGl_GlCore11.hxx>
GLboolean DepthMask;
};
+//! Presentations list sorted within priorities.
class OpenGl_Layer
{
public:
//! Initializes associated priority list and layer properties
OpenGl_Layer (const Standard_Integer theNbPriorities = 11);
+ //! Destructor.
+ virtual ~OpenGl_Layer();
+
//! Returns settings of the layer object.
- const Graphic3d_ZLayerSettings LayerSettings() const { return myLayerSettings; };
+ const Graphic3d_ZLayerSettings& LayerSettings() const { return myLayerSettings; };
//! Sets settings of the layer object.
- void SetLayerSettings (Graphic3d_ZLayerSettings theSettings)
+ void SetLayerSettings (const Graphic3d_ZLayerSettings& theSettings)
{
myLayerSettings = theSettings;
}
return myLayerSettings.IsSettingEnabled (theSetting);
}
- //! Returns reference to associated priority list.
- OpenGl_PriorityList& PriorityList() { return myPriorityList; }
+ void Add (const OpenGl_Structure* theStruct,
+ const Standard_Integer thePriority,
+ Standard_Boolean isForChangePriority = Standard_False);
+
+ //! Remove structure and returns its priority, if the structure is not found, method returns negative value
+ bool Remove (const OpenGl_Structure* theStruct,
+ Standard_Integer& thePriority,
+ Standard_Boolean isForChangePriority = Standard_False);
+
+ //! @return the number of structures
+ Standard_Integer NbStructures() const { return myNbStructures; }
+
+ //! Returns the number of available priority levels
+ Standard_Integer NbPriorities() const { return myArray.Length(); }
+
+ //! Append layer of acceptable type (with similar number of priorities or less).
+ //! Returns Standard_False if the list can not be accepted.
+ Standard_Boolean Append (const OpenGl_Layer& theOther);
+
+ //! Returns array of OpenGL structures.
+ const OpenGl_ArrayOfStructure& ArrayOfStructures() const { return myArray; }
- //! Returns const reference to associated priority list.
- const OpenGl_PriorityList& PriorityList() const { return myPriorityList; }
+ //! Marks BVH tree for given priority list as dirty and
+ //! marks primitive set for rebuild.
+ void InvalidateBVHData();
- void Render (const Handle(OpenGl_Workspace) &AWorkspace, const OpenGl_GlobalLayerSettings& theDefaultSettings) const;
+ // Render all structures.
+ void Render (const Handle(OpenGl_Workspace)& theWorkspace,
+ const OpenGl_GlobalLayerSettings& theDefaultSettings) const;
+
+protected:
+
+ //! Traverses through BVH tree to determine which structures are in view volume.
+ void traverse (OpenGl_BVHTreeSelector& theSelector) const;
+
+ //! Iterates through the hierarchical list of existing structures and renders them all.
+ void renderAll (const Handle(OpenGl_Workspace)& theWorkspace) const;
+
+ //! Iterates through the hierarchical list of existing structures and renders only overlapping ones.
+ void renderTraverse (const Handle(OpenGl_Workspace)& theWorkspace) const;
private:
- OpenGl_PriorityList myPriorityList; //!< Associated priority list object.
+ OpenGl_ArrayOfStructure myArray;
+ Standard_Integer myNbStructures;
+ Graphic3d_ZLayerSettings myLayerSettings; //!< Layer setting flags
+ mutable OpenGl_BVHClipPrimitiveSet myBVHPrimitives; //<! Set of OpenGl_Structures for building BVH tree
+ mutable Standard_Boolean myBVHIsLeftChildQueuedFirst; //<! Is needed for implementation of stochastic order of BVH traverse
+ mutable Standard_Boolean myIsBVHPrimitivesNeedsReset; //<! Defines if the primitive set for BVH is outdated
+
+public:
+
+ DEFINE_STANDARD_ALLOC
- Graphic3d_ZLayerSettings myLayerSettings; //!< Layer setting flags.
};
+
#endif //_OpenGl_Layer_Header
//=======================================================================
OpenGl_LayerList::OpenGl_LayerList (const Standard_Integer theNbPriorities)
- : myNbPriorities (theNbPriorities),
- myNbStructures (0)
+: myNbPriorities (theNbPriorities),
+ myNbStructures (0),
+ myImmediateNbStructures (0)
{
- // insert default priority layer
+ // insert default priority layers
myLayers.Append (OpenGl_Layer (myNbPriorities));
- myLayerIds.Bind (0, myLayers.Length());
-}
-
-//=======================================================================
-//function : ~OpenGl_LayerList
-//purpose : Destructor
-//=======================================================================
-
-OpenGl_LayerList::~OpenGl_LayerList ()
-{
-}
+ myLayerIds.Bind (Graphic3d_ZLayerId_Default, myLayers.Upper());
-//=======================================================================
-//function : defaultLayer
-//purpose :
-//=======================================================================
-
-OpenGl_Layer& OpenGl_LayerList::defaultLayer()
-{
- return myLayers.ChangeValue (1);
-}
+ myLayers.Append (OpenGl_Layer (myNbPriorities));
+ myLayerIds.Bind (Graphic3d_ZLayerId_Top, myLayers.Upper());
-//=======================================================================
-//function : NbPriorities
-//purpose : Method returns the number of available priorities
-//=======================================================================
+ myLayers.Append (OpenGl_Layer (myNbPriorities));
+ myLayerIds.Bind (Graphic3d_ZLayerId_Topmost, myLayers.Upper());
-Standard_Integer OpenGl_LayerList::NbPriorities () const
-{
- return myNbPriorities;
+ myLayers.Append (OpenGl_Layer (myNbPriorities));
+ myLayerIds.Bind (Graphic3d_ZLayerId_TopOSD, myLayers.Upper());
}
//=======================================================================
-//function : NbStructures
-//purpose : Method returns the number of available structures
+//function : ~OpenGl_LayerList
+//purpose : Destructor
//=======================================================================
-Standard_Integer OpenGl_LayerList::NbStructures () const
+OpenGl_LayerList::~OpenGl_LayerList()
{
- return myNbStructures;
}
//=======================================================================
//purpose :
//=======================================================================
-void OpenGl_LayerList::AddLayer (const Standard_Integer theLayerId)
+void OpenGl_LayerList::AddLayer (const Graphic3d_ZLayerId theLayerId)
{
- if (HasLayer (theLayerId))
+ if (myLayerIds.IsBound (theLayerId))
+ {
return;
+ }
// add the new layer
myLayers.Append (OpenGl_Layer (myNbPriorities));
myLayerIds.Bind (theLayerId, myLayers.Length());
}
-//=======================================================================
-//function : HasLayer
-//purpose :
-//=======================================================================
-
-Standard_Boolean OpenGl_LayerList::HasLayer
- (const Standard_Integer theLayerId) const
-{
- return myLayerIds.IsBound (theLayerId);
-}
-
//=======================================================================
//function : Layer
//purpose :
//=======================================================================
-OpenGl_Layer& OpenGl_LayerList::Layer (const Standard_Integer theLayerId)
+OpenGl_Layer& OpenGl_LayerList::Layer (const Graphic3d_ZLayerId theLayerId)
{
return myLayers.ChangeValue (myLayerIds.Find (theLayerId));
}
//function : Layer
//purpose :
//=======================================================================
-const OpenGl_Layer& OpenGl_LayerList::Layer (const Standard_Integer theLayerId) const
+const OpenGl_Layer& OpenGl_LayerList::Layer (const Graphic3d_ZLayerId theLayerId) const
{
return myLayers.Value (myLayerIds.Find (theLayerId));
}
//purpose :
//=======================================================================
-void OpenGl_LayerList::RemoveLayer (const Standard_Integer theLayerId)
+void OpenGl_LayerList::RemoveLayer (const Graphic3d_ZLayerId theLayerId)
{
- if (!HasLayer (theLayerId) || theLayerId == 0)
+ if (!myLayerIds.IsBound (theLayerId)
+ || theLayerId <= 0)
+ {
return;
+ }
- Standard_Integer aRemovePos = myLayerIds.Find (theLayerId);
+ const Standard_Integer aRemovePos = myLayerIds.Find (theLayerId);
// move all displayed structures to first layer
- const OpenGl_PriorityList& aList = myLayers.Value (aRemovePos).PriorityList();
- defaultLayer ().PriorityList().Append (aList);
+ const OpenGl_Layer& aLayerToMove = myLayers.Value (aRemovePos);
+ myLayers.ChangeFirst().Append (aLayerToMove);
// remove layer
myLayers.Remove (aRemovePos);
//purpose :
//=======================================================================
-void OpenGl_LayerList::AddStructure (const OpenGl_Structure *theStructure,
- const Standard_Integer theLayerId,
- const Standard_Integer thePriority,
- Standard_Boolean isForChangePriority)
+void OpenGl_LayerList::AddStructure (const OpenGl_Structure* theStruct,
+ const Graphic3d_ZLayerId theLayerId,
+ const Standard_Integer thePriority,
+ Standard_Boolean isForChangePriority)
{
// add structure to associated layer,
// if layer doesn't exists, display structure in default layer
- OpenGl_PriorityList& aList = !HasLayer (theLayerId) ? defaultLayer ().PriorityList() :
- myLayers.ChangeValue (myLayerIds.Find (theLayerId)).PriorityList();
+ Standard_Integer aSeqPos = myLayers.Lower();
+ myLayerIds.Find (theLayerId, aSeqPos);
- aList.Add (theStructure, thePriority, isForChangePriority);
- myNbStructures++;
+ OpenGl_Layer& aLayer = myLayers.ChangeValue (aSeqPos);
+ aLayer.Add (theStruct, thePriority, isForChangePriority);
+ ++myNbStructures;
+ if (aLayer.LayerSettings().IsImmediate)
+ {
+ ++myImmediateNbStructures;
+ }
// Note: In ray-tracing mode we don't modify modification
// state here. It is redundant, because the possible changes
//=======================================================================
//function : RemoveStructure
-//purpose :
+//purpose :
//=======================================================================
-void OpenGl_LayerList::RemoveStructure (const OpenGl_Structure *theStructure,
- const Standard_Integer theLayerId)
+void OpenGl_LayerList::RemoveStructure (const Handle(Graphic3d_Structure)& theStructure)
{
- Standard_Integer aSeqPos = !HasLayer (theLayerId) ?
- 1 : myLayerIds.Find (theLayerId);
-
- OpenGl_PriorityList& aList = myLayers.ChangeValue (aSeqPos).PriorityList();
+ const OpenGl_Structure* aStruct = reinterpret_cast<const OpenGl_Structure* > (theStructure->CStructure().operator->());
+ const Graphic3d_ZLayerId aLayerId = aStruct->ZLayer();
+
+ Standard_Integer aSeqPos = myLayers.Lower();
+ myLayerIds.Find (aLayerId, aSeqPos);
+
+ OpenGl_Layer& aLayer = myLayers.ChangeValue (aSeqPos);
+ Standard_Integer aPriority = -1;
// remove structure from associated list
// if the structure is not found there,
// scan through layers and remove it
- if (aList.Remove (theStructure) >= 0)
+ if (aLayer.Remove (aStruct, aPriority))
{
- myNbStructures--;
+ --myNbStructures;
+ if (aLayer.LayerSettings().IsImmediate)
+ {
+ --myImmediateNbStructures;
+ }
- if (theStructure->IsRaytracable())
+ if (aStruct->IsRaytracable())
{
- myModificationState++;
+ ++myModificationState;
}
return;
}
-
+
// scan through layers and remove it
Standard_Integer aSeqId = 1;
- OpenGl_SequenceOfLayers::Iterator anIts;
- for (anIts.Init (myLayers); anIts.More (); anIts.Next (), aSeqId++)
+ for (OpenGl_SequenceOfLayers::Iterator anIts (myLayers); anIts.More(); anIts.Next(), ++aSeqId)
{
- OpenGl_PriorityList& aScanList = anIts.ChangeValue ().PriorityList();
+ OpenGl_Layer& aLayerEx = anIts.ChangeValue();
if (aSeqPos == aSeqId)
- continue;
-
- if (aScanList.Remove (theStructure) >= 0)
{
- myNbStructures--;
+ continue;
+ }
- if (theStructure->IsRaytracable())
+ if (aLayerEx.Remove (aStruct, aPriority))
+ {
+ --myNbStructures;
+ if (aLayerEx.LayerSettings().IsImmediate)
{
- myModificationState++;
+ --myImmediateNbStructures;
}
+ if (aStruct->IsRaytracable())
+ {
+ ++myModificationState;
+ }
return;
}
}
//function : InvalidateBVHData
//purpose :
//=======================================================================
-void OpenGl_LayerList::InvalidateBVHData (const Standard_Integer theLayerId)
+void OpenGl_LayerList::InvalidateBVHData (const Graphic3d_ZLayerId theLayerId)
{
- Standard_Integer aSeqPos = !HasLayer (theLayerId) ?
- 1 : myLayerIds.Find (theLayerId);
-
- OpenGl_PriorityList& aList = myLayers.ChangeValue (aSeqPos).PriorityList();
-
- aList.InvalidateBVHData();
+ Standard_Integer aSeqPos = myLayers.Lower();
+ myLayerIds.Find (theLayerId, aSeqPos);
+ OpenGl_Layer& aLayer = myLayers.ChangeValue (aSeqPos);
+ aLayer.InvalidateBVHData();
}
//=======================================================================
//purpose :
//=======================================================================
-void OpenGl_LayerList::ChangeLayer (const OpenGl_Structure *theStructure,
- const Standard_Integer theOldLayerId,
- const Standard_Integer theNewLayerId)
+void OpenGl_LayerList::ChangeLayer (const OpenGl_Structure* theStructure,
+ const Graphic3d_ZLayerId theOldLayerId,
+ const Graphic3d_ZLayerId theNewLayerId)
{
- Standard_Integer aSeqPos = !HasLayer (theOldLayerId) ?
- 1 : myLayerIds.Find (theOldLayerId);
-
- OpenGl_PriorityList& aList = myLayers.ChangeValue (aSeqPos).PriorityList();
- Standard_Integer aPriority;
+ Standard_Integer aSeqPos = myLayers.Lower();
+ myLayerIds.Find (theOldLayerId, aSeqPos);
+ OpenGl_Layer& aLayer = myLayers.ChangeValue (aSeqPos);
+ Standard_Integer aPriority = -1;
// take priority and remove structure from list found by <theOldLayerId>
// if the structure is not found there, scan through all other layers
- if ((aPriority = aList.Remove (theStructure, Standard_True)) >= 0)
+ if (aLayer.Remove (theStructure, aPriority, Standard_True))
{
- myNbStructures--;
+ --myNbStructures;
+ if (aLayer.LayerSettings().IsImmediate)
+ {
+ --myImmediateNbStructures;
+ }
+
// isForChangePriority should be Standard_False below, because we want
// the BVH tree in the target layer to be updated with theStructure
AddStructure (theStructure, theNewLayerId, aPriority);
+ return;
}
- else
+
+ // scan through layers and remove it
+ Standard_Integer aSeqId = 1;
+ for (OpenGl_SequenceOfLayers::Iterator anIts (myLayers); anIts.More(); anIts.Next(), ++aSeqId)
{
- // scan through layers and remove it
- Standard_Integer aSeqId = 1;
- OpenGl_SequenceOfLayers::Iterator anIts;
- for (anIts.Init (myLayers); anIts.More (); anIts.Next (), aSeqId++)
+ if (aSeqPos == aSeqId)
{
- if (aSeqPos == aSeqId)
- continue;
+ continue;
+ }
- // try to remove structure and get priority value from this layer
- if ((aPriority = aList.Remove (theStructure, Standard_True)) >= 0)
+ // try to remove structure and get priority value from this layer
+ OpenGl_Layer& aLayerEx = anIts.ChangeValue();
+ if (aLayerEx.Remove (theStructure, aPriority, Standard_True))
+ {
+ --myNbStructures;
+ if (aLayerEx.LayerSettings().IsImmediate)
{
- myNbStructures--;
- // isForChangePriority should be Standard_False below, because we want
- // the BVH tree in the target layer to be updated with theStructure
- AddStructure (theStructure, theNewLayerId, aPriority);
- break;
+ --myImmediateNbStructures;
}
+
+ // isForChangePriority should be Standard_False below, because we want
+ // the BVH tree in the target layer to be updated with theStructure
+ AddStructure (theStructure, theNewLayerId, aPriority);
+ return;
}
}
}
//function : ChangePriority
//purpose :
//=======================================================================
-void OpenGl_LayerList::ChangePriority (const OpenGl_Structure *theStructure,
- const Standard_Integer theLayerId,
- const Standard_Integer theNewPriority)
+void OpenGl_LayerList::ChangePriority (const OpenGl_Structure* theStructure,
+ const Graphic3d_ZLayerId theLayerId,
+ const Standard_Integer theNewPriority)
{
- Standard_Integer aSeqPos = !HasLayer (theLayerId) ?
- 1 : myLayerIds.Find (theLayerId);
-
- OpenGl_PriorityList& aList = myLayers.ChangeValue (aSeqPos).PriorityList();
+ Standard_Integer aSeqPos = myLayers.Lower();
+ myLayerIds.Find (theLayerId, aSeqPos);
+ OpenGl_Layer& aLayer = myLayers.ChangeValue (aSeqPos);
+ Standard_Integer anOldPriority = -1;
- if (aList.Remove (theStructure, Standard_True) >= 0)
+ if (aLayer.Remove (theStructure, anOldPriority, Standard_True))
{
- myNbStructures--;
+ --myNbStructures;
+ if (aLayer.LayerSettings().IsImmediate)
+ {
+ --myImmediateNbStructures;
+ }
+
AddStructure (theStructure, theLayerId, theNewPriority, Standard_True);
+ return;
}
- else
+
+ Standard_Integer aSeqId = 1;
+ for (OpenGl_SequenceOfLayers::Iterator anIts (myLayers); anIts.More(); anIts.Next(), ++aSeqId)
{
- Standard_Integer aSeqId = 1;
- OpenGl_SequenceOfLayers::Iterator anIts;
- for (anIts.Init (myLayers); anIts.More (); anIts.Next (), aSeqId++)
+ if (aSeqPos == aSeqId)
{
- if (aSeqPos == aSeqId)
- continue;
+ continue;
+ }
- if (aList.Remove (theStructure, Standard_True) >= 0)
+ OpenGl_Layer& aLayerEx = anIts.ChangeValue();
+ if (aLayerEx.Remove (theStructure, anOldPriority, Standard_True))
+ {
+ --myNbStructures;
+ if (aLayerEx.LayerSettings().IsImmediate)
{
- myNbStructures--;
- AddStructure (theStructure, theLayerId, theNewPriority, Standard_True);
- break;
+ --myImmediateNbStructures;
}
+
+ AddStructure (theStructure, theLayerId, theNewPriority, Standard_True);
+ return;
}
}
}
//=======================================================================
-//function : Render
-//purpose : Render this element
+//function : SetLayerSettings
+//purpose :
//=======================================================================
+void OpenGl_LayerList::SetLayerSettings (const Graphic3d_ZLayerId theLayerId,
+ const Graphic3d_ZLayerSettings& theSettings)
+{
+ OpenGl_Layer& aLayer = Layer (theLayerId);
+ if (aLayer.LayerSettings().IsImmediate != theSettings.IsImmediate)
+ {
+ if (theSettings.IsImmediate)
+ {
+ myImmediateNbStructures += aLayer.NbStructures();
+ }
+ else
+ {
+ myImmediateNbStructures -= aLayer.NbStructures();
+ }
+ }
+ aLayer.SetLayerSettings (theSettings);
+}
-void OpenGl_LayerList::Render (const Handle(OpenGl_Workspace) &theWorkspace) const
+//=======================================================================
+//function : Render
+//purpose :
+//=======================================================================
+void OpenGl_LayerList::Render (const Handle(OpenGl_Workspace)& theWorkspace,
+ const Standard_Boolean theToDrawImmediate) const
{
OpenGl_GlobalLayerSettings aDefaultSettings;
-
- glGetIntegerv (GL_DEPTH_FUNC, &aDefaultSettings.DepthFunc);
- glGetBooleanv (GL_DEPTH_WRITEMASK, &aDefaultSettings.DepthMask);
- OpenGl_SequenceOfLayers::Iterator anIts;
- for (anIts.Init (myLayers); anIts.More(); anIts.Next())
+ const Handle(OpenGl_Context)& aCtx = theWorkspace->GetGlContext();
+ aCtx->core11fwd->glGetIntegerv (GL_DEPTH_FUNC, &aDefaultSettings.DepthFunc);
+ aCtx->core11fwd->glGetBooleanv (GL_DEPTH_WRITEMASK, &aDefaultSettings.DepthMask);
+
+ Standard_Integer aSeqId = myLayers.Lower();
+ for (OpenGl_SequenceOfLayers::Iterator anIts (myLayers); anIts.More(); anIts.Next(), ++aSeqId)
{
- const OpenGl_Layer& aLayer = anIts.Value ();
- if (aLayer.PriorityList().NbStructures () > 0)
+ const OpenGl_Layer& aLayer = anIts.Value();
+ if (aLayer.NbStructures() < 1)
+ {
+ continue;
+ }
+ else if (theToDrawImmediate)
{
- // render layer
- aLayer.Render (theWorkspace, aDefaultSettings);
+ if (!aLayer.LayerSettings().IsImmediate)
+ {
+ continue;
+ }
}
+ else
+ {
+ if (aLayer.LayerSettings().IsImmediate)
+ {
+ continue;
+ }
+ }
+
+ // render layer
+ aLayer.Render (theWorkspace, aDefaultSettings);
}
- glDepthMask (aDefaultSettings.DepthMask);
- glDepthFunc (aDefaultSettings.DepthFunc);
+ aCtx->core11fwd->glDepthMask (aDefaultSettings.DepthMask);
+ aCtx->core11fwd->glDepthFunc (aDefaultSettings.DepthFunc);
}
#ifndef _OpenGl_LayerList_Header
#define _OpenGl_LayerList_Header
-#include <OpenGl_PriorityList.hxx>
#include <OpenGl_Layer.hxx>
#include <InterfaceGraphic_telem.hxx>
class OpenGl_LayerList
{
- public:
-
+public:
+
//! Constructor
OpenGl_LayerList (const Standard_Integer theNbPriorities = 11);
-
+
//! Destructor
- virtual ~OpenGl_LayerList ();
-
+ virtual ~OpenGl_LayerList();
+
//! Method returns the number of available priorities
- Standard_Integer NbPriorities () const;
+ Standard_Integer NbPriorities() const { return myNbPriorities; }
//! Number of displayed structures
- Standard_Integer NbStructures () const;
+ Standard_Integer NbStructures() const { return myNbStructures; }
+
+ //! Return number of structures within immediate layers
+ Standard_Integer NbImmediateStructures() const { return myImmediateNbStructures; }
//! Insert a new layer with id.
- void AddLayer (const Standard_Integer theLayerId);
-
- //! Check whether the layer with given id is already created.
- Standard_Boolean HasLayer (const Standard_Integer theLayerId) const;
-
+ void AddLayer (const Graphic3d_ZLayerId theLayerId);
+
//! Remove layer by its id.
- void RemoveLayer (const Standard_Integer theLayerId);
-
+ void RemoveLayer (const Graphic3d_ZLayerId theLayerId);
+
//! Add structure to list with given priority. The structure will be inserted
//! to specified layer. If the layer isn't found, the structure will be put
//! to default bottom-level layer.
- void AddStructure (const OpenGl_Structure *theStructure,
- const Standard_Integer theLayerId,
- const Standard_Integer thePriority,
- Standard_Boolean isForChangePriority = Standard_False);
-
+ void AddStructure (const OpenGl_Structure* theStruct,
+ const Graphic3d_ZLayerId theLayerId,
+ const Standard_Integer thePriority,
+ Standard_Boolean isForChangePriority = Standard_False);
+
//! Remove structure from structure list and return its previous priority
- void RemoveStructure (const OpenGl_Structure *theStructure,
- const Standard_Integer theZLayerId);
-
+ void RemoveStructure (const Handle(Graphic3d_Structure)& theStructure);
+
//! Change structure z layer
//! If the new layer is not presented, the structure will be displayed
//! in default z layer
- void ChangeLayer (const OpenGl_Structure *theStructure,
- const Standard_Integer theOldLayerId,
- const Standard_Integer theNewLayerId);
+ void ChangeLayer (const OpenGl_Structure* theStructure,
+ const Graphic3d_ZLayerId theOldLayerId,
+ const Graphic3d_ZLayerId theNewLayerId);
//! Changes structure priority within its ZLayer
- void ChangePriority (const OpenGl_Structure *theStructure,
- const Standard_Integer theLayerId,
- const Standard_Integer theNewPriority);
+ void ChangePriority (const OpenGl_Structure* theStructure,
+ const Graphic3d_ZLayerId theLayerId,
+ const Standard_Integer theNewPriority);
//! Returns reference to the layer with given ID.
- OpenGl_Layer& Layer (const Standard_Integer theLayerId);
+ OpenGl_Layer& Layer (const Graphic3d_ZLayerId theLayerId);
//! Returns reference to the layer with given ID.
- const OpenGl_Layer& Layer (const Standard_Integer theLayerId) const;
-
+ const OpenGl_Layer& Layer (const Graphic3d_ZLayerId theLayerId) const;
+
+ //! Assign new settings to the layer.
+ void SetLayerSettings (const Graphic3d_ZLayerId theLayerId,
+ const Graphic3d_ZLayerSettings& theSettings);
+
//! Render this element
- void Render (const Handle(OpenGl_Workspace) &theWorkspace) const;
+ void Render (const Handle(OpenGl_Workspace)& theWorkspace,
+ const Standard_Boolean theToDrawImmediate) const;
//! Returns the set of OpenGL Z-layers.
const OpenGl_SequenceOfLayers& Layers() const { return myLayers; }
//! Marks BVH tree for given priority list as dirty and
//! marks primitive set for rebuild.
- void InvalidateBVHData (const Standard_Integer theLayerId);
+ void InvalidateBVHData (const Graphic3d_ZLayerId theLayerId);
//! Returns structure modification state (for ray-tracing).
Standard_Size ModificationState() const { return myModificationState; }
- private:
-
- //! Get default layer
- OpenGl_Layer& defaultLayer ();
-
- protected:
+protected:
// number of structures temporary put to default layer
OpenGl_SequenceOfLayers myLayers;
OpenGl_LayerSeqIds myLayerIds;
+
Standard_Integer myNbPriorities;
Standard_Integer myNbStructures;
+ Standard_Integer myImmediateNbStructures; //!< number of structures within immediate layers
mutable Standard_Size myModificationState;
- public:
+public:
+
DEFINE_STANDARD_ALLOC
+
};
#endif //_OpenGl_LayerList_Header
#define _OpenGl_NamedStatus_Header
// Dynamic fields
-#define OPENGL_NS_HIDE (1<<0)
#define OPENGL_NS_HIGHLIGHT (1<<1)
#define OPENGL_NS_RESMAT (1<<2)
-#define OPENGL_NS_IMMEDIATE (1<<3)
#define OPENGL_NS_TEXTURE (1<<4)
#define OPENGL_NS_ANTIALIASING (1<<5)
#define OPENGL_NS_2NDPASSNEED (1<<6)
+++ /dev/null
-// Created on: 2011-11-02
-// Created by: Sergey ZERCHANINOV
-// Copyright (c) 2011-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 License 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_PriorityList.hxx>
-
-#include <OpenGl_BVHTreeSelector.hxx>
-#include <OpenGl_Structure.hxx>
-#include <OpenGl_View.hxx>
-
-// =======================================================================
-// function : OpenGl_PriorityList
-// purpose :
-// =======================================================================
-OpenGl_PriorityList::OpenGl_PriorityList (const Standard_Integer theNbPriorities)
-: myArray (0, theNbPriorities - 1),
- myNbStructures (0),
- myBVHIsLeftChildQueuedFirst (Standard_True),
- myIsBVHPrimitivesNeedsReset (Standard_False)
-{
- //
-}
-
-// =======================================================================
-// function : ~OpenGl_PriorityList
-// purpose :
-// =======================================================================
-OpenGl_PriorityList::~OpenGl_PriorityList()
-{
- //
-}
-
-// =======================================================================
-// function : Add
-// purpose :
-// =======================================================================
-void OpenGl_PriorityList::Add (const OpenGl_Structure* theStructure,
- const Standard_Integer thePriority,
- Standard_Boolean isForChangePriority)
-{
- const Standard_Integer anIndex = Min (Max (thePriority, 0), myArray.Length() - 1);
-
- myArray (anIndex).Append (theStructure);
- if (theStructure->IsAlwaysRendered())
- {
- theStructure->MarkAsNotCulled();
- }
- else if (!isForChangePriority)
- {
- myBVHPrimitives.Add (theStructure);
- }
- ++myNbStructures;
-}
-
-// =======================================================================
-// function : Remove
-// purpose :
-// =======================================================================
-Standard_Integer OpenGl_PriorityList::Remove (const OpenGl_Structure* theStructure,
- Standard_Boolean isForChangePriority)
-{
- const Standard_Integer aNbPriorities = myArray.Length();
- OpenGl_SequenceOfStructure::Iterator aStructIter;
- for (Standard_Integer aPriorityIter = 0; aPriorityIter < aNbPriorities; ++aPriorityIter)
- {
- OpenGl_SequenceOfStructure& aSeq = myArray (aPriorityIter);
- for (aStructIter.Init (aSeq); aStructIter.More(); aStructIter.Next())
- {
- if (aStructIter.Value() == theStructure)
- {
- aSeq.Remove (aStructIter);
- if (!theStructure->IsAlwaysRendered()
- && !isForChangePriority)
- {
- myBVHPrimitives.Remove (theStructure);
- }
- --myNbStructures;
- return aPriorityIter;
- }
- }
- }
-
- return -1;
-}
-
-// =======================================================================
-// function : InvalidateBVHData
-// purpose :
-// =======================================================================
-void OpenGl_PriorityList::InvalidateBVHData()
-{
- myIsBVHPrimitivesNeedsReset = Standard_True;
-}
-
-// =======================================================================
-// function : Render
-// purpose :
-// =======================================================================
-void OpenGl_PriorityList::Render (const Handle(OpenGl_Workspace)& theWorkspace) const
-{
- theWorkspace->IsCullingEnabled() ? renderTraverse (theWorkspace) : renderAll (theWorkspace);
-}
-
-// =======================================================================
-// function : renderAll
-// purpose :
-// =======================================================================
-void OpenGl_PriorityList::renderAll (const Handle(OpenGl_Workspace)& theWorkspace) const
-{
- const Standard_Integer aNbPriorities = myArray.Length();
- OpenGl_SequenceOfStructure::Iterator aStructIter;
- for (Standard_Integer aPriorityIter = 0; aPriorityIter < aNbPriorities; ++aPriorityIter)
- {
- for (aStructIter.Init (myArray (aPriorityIter)); aStructIter.More(); aStructIter.Next())
- {
- aStructIter.Value()->Render (theWorkspace);
- }
- }
-}
-
-// =======================================================================
-// function : renderTraverse
-// purpose :
-// =======================================================================
-void OpenGl_PriorityList::renderTraverse (const Handle(OpenGl_Workspace)& theWorkspace) const
-{
- if (myIsBVHPrimitivesNeedsReset)
- {
- myBVHPrimitives.Assign (myArray);
- myIsBVHPrimitivesNeedsReset = Standard_False;
- }
-
- OpenGl_BVHTreeSelector& aSelector = theWorkspace->ActiveView()->BVHTreeSelector();
- traverse (aSelector);
-
- const Standard_Integer aNbPriorities = myArray.Length();
- OpenGl_SequenceOfStructure::Iterator aStructIter;
- for (Standard_Integer aPriorityIter = 0; aPriorityIter < aNbPriorities; ++aPriorityIter)
- {
- for (aStructIter.Init (myArray (aPriorityIter)); aStructIter.More(); aStructIter.Next())
- {
- if (!aStructIter.Value()->IsCulled())
- {
- aStructIter.Value()->Render (theWorkspace);
- aStructIter.Value()->ResetCullingStatus();
- }
- }
- }
-}
-
-// =======================================================================
-// function : traverse
-// purpose :
-// =======================================================================
-void OpenGl_PriorityList::traverse (OpenGl_BVHTreeSelector& theSelector) const
-{
- // handle a case when all objects are infinite
- if (myBVHPrimitives.Size() == 0)
- return;
-
- const NCollection_Handle<BVH_Tree<Standard_ShortReal, 4> >& aBVHTree = myBVHPrimitives.BVH();
-
- Standard_Integer aNode = 0; // a root node
- theSelector.CacheClipPtsProjections();
- if (!theSelector.Intersect (aBVHTree->MinPoint (0),
- aBVHTree->MaxPoint (0)))
- {
- return;
- }
-
- Standard_Integer aStack[32];
- Standard_Integer aHead = -1;
- for (;;)
- {
- if (!aBVHTree->IsOuter (aNode))
- {
- const Standard_Integer aLeftChildIdx = aBVHTree->LeftChild (aNode);
- const Standard_Integer aRightChildIdx = aBVHTree->RightChild (aNode);
- const Standard_Boolean isLeftChildIn = theSelector.Intersect (aBVHTree->MinPoint (aLeftChildIdx),
- aBVHTree->MaxPoint (aLeftChildIdx));
- const Standard_Boolean isRightChildIn = theSelector.Intersect (aBVHTree->MinPoint (aRightChildIdx),
- aBVHTree->MaxPoint (aRightChildIdx));
- if (isLeftChildIn
- && isRightChildIn)
- {
- aNode = myBVHIsLeftChildQueuedFirst ? aLeftChildIdx : aRightChildIdx;
- ++aHead;
- aStack[aHead] = myBVHIsLeftChildQueuedFirst ? aRightChildIdx : aLeftChildIdx;
- myBVHIsLeftChildQueuedFirst = !myBVHIsLeftChildQueuedFirst;
- }
- else if (isLeftChildIn
- || isRightChildIn)
- {
- aNode = isLeftChildIn ? aLeftChildIdx : aRightChildIdx;
- }
- else
- {
- if (aHead < 0)
- {
- return;
- }
-
- aNode = aStack[aHead];
- --aHead;
- }
- }
- else
- {
- if (theSelector.Intersect (aBVHTree->MinPoint (aNode),
- aBVHTree->MaxPoint (aNode)))
- {
- Standard_Integer aIdx = aBVHTree->BegPrimitive (aNode);
- myBVHPrimitives.GetStructureById (aIdx)->MarkAsNotCulled();
- if (aHead < 0)
- {
- return;
- }
-
- aNode = aStack[aHead];
- --aHead;
- }
- }
- }
-}
-
-// =======================================================================
-// function : Append
-// purpose :
-// =======================================================================
-Standard_Boolean OpenGl_PriorityList::Append (const OpenGl_PriorityList& theOther)
-{
- // the source priority list shouldn't have more priorities
- const Standard_Integer aNbPriorities = theOther.NbPriorities ();
- if (aNbPriorities > NbPriorities())
- {
- return Standard_False;
- }
-
- // add all structures to destination priority list
- OpenGl_SequenceOfStructure::Iterator aStructIter;
- for (Standard_Integer aPriorityIter = 0; aPriorityIter < aNbPriorities; ++aPriorityIter)
- {
- const OpenGl_SequenceOfStructure& aSeq = theOther.myArray (aPriorityIter);
- for (aStructIter.Init (aSeq); aStructIter.More(); aStructIter.Next())
- {
- Add (aStructIter.Value(), aPriorityIter);
- }
- }
-
- return Standard_True;
-}
-
-// =======================================================================
-// function : NbPriorities
-// purpose :
-// =======================================================================
-Standard_Integer OpenGl_PriorityList::NbPriorities() const
-{
- return myArray.Length();
-}
+++ /dev/null
-// Created on: 2011-11-02
-// Created by: Sergey ZERCHANINOV
-// Copyright (c) 2011-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 License 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_PriorityList_Header
-#define _OpenGl_PriorityList_Header
-
-#include <NCollection_Sequence.hxx>
-#include <NCollection_Array1.hxx>
-
-#include <InterfaceGraphic_telem.hxx>
-
-#include <Handle_OpenGl_Workspace.hxx>
-#include <OpenGl_BVHClipPrimitiveSet.hxx>
-#include <OpenGl_BVHTreeSelector.hxx>
-
-class OpenGl_Structure;
-
-typedef NCollection_Sequence<const OpenGl_Structure*> OpenGl_SequenceOfStructure;
-typedef NCollection_Array1<OpenGl_SequenceOfStructure> OpenGl_ArrayOfStructure;
-
-class OpenGl_PriorityList
-{
-public:
-
- // Empty constructor.
- OpenGl_PriorityList (const Standard_Integer theNbPriorities = 11);
-
- //! Destructor.
- virtual ~OpenGl_PriorityList();
-
- void Add (const OpenGl_Structure* theStructure,
- const Standard_Integer thePriority,
- Standard_Boolean isForChangePriority = Standard_False);
-
- //! Remove structure and returns its priority, if the structure is not found, method returns negative value
- Standard_Integer Remove (const OpenGl_Structure* theStructure,
- Standard_Boolean isForChangePriority = Standard_False);
-
- //! @return the number of structures
- Standard_Integer NbStructures() const { return myNbStructures; }
-
- // Render all structures.
- void Render (const Handle(OpenGl_Workspace)& theWorkspace) const;
-
- //! Returns the number of available priority levels
- Standard_Integer NbPriorities() const;
-
- //! Append priority list of acceptable type (with similar number of priorities
- //! or less). Returns Standard_False if the list can not be accepted.
- Standard_Boolean Append (const OpenGl_PriorityList& theOther);
-
- //! Returns array of OpenGL structures.
- const OpenGl_ArrayOfStructure& ArrayOfStructures() const { return myArray; }
-
- //! Marks BVH tree for given priority list as dirty and
- //! marks primitive set for rebuild.
- void InvalidateBVHData();
-
-protected:
-
- //! Traverses through BVH tree to determine which structures are in view volume.
- void traverse (OpenGl_BVHTreeSelector& theSelector) const;
-
- //! Iterates through the hierarchical list of existing structures and renders them all.
- void renderAll (const Handle(OpenGl_Workspace)& theWorkspace) const;
-
- //! Iterates through the hierarchical list of existing structures and renders only overlapping ones.
- void renderTraverse (const Handle(OpenGl_Workspace)& theWorkspace) const;
-
-protected:
-
- OpenGl_ArrayOfStructure myArray;
- Standard_Integer myNbStructures;
- mutable OpenGl_BVHClipPrimitiveSet myBVHPrimitives; //<! Set of OpenGl_Structures for building BVH tree
- mutable Standard_Boolean myBVHIsLeftChildQueuedFirst; //<! Is needed for implementation of stochastic order of BVH traverse
- mutable Standard_Boolean myIsBVHPrimitivesNeedsReset; //<! Defines if the primitive set for BVH is outdated
-
-public:
-
- DEFINE_STANDARD_ALLOC
-
-};
-
-#endif // _OpenGl_PriorityList_Header
--- /dev/null
+// Created on: 2014-12-18
+// Created by: Kirill Gavrilov
+// 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 License 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_SequenceOfStructure
+#define _OpenGl_SequenceOfStructure
+
+#include <NCollection_Sequence.hxx>
+
+class OpenGl_Structure;
+typedef NCollection_Sequence<const OpenGl_Structure*> OpenGl_SequenceOfStructure;
+
+#endif // _OpenGl_SequenceOfStructure
const Handle(OpenGl_Texture) aPrevTexture = theWorkspace->DisableTexture();
glDisable (GL_LIGHTING);
- if ((theWorkspace->NamedStatus & OPENGL_NS_IMMEDIATE) != 0)
- {
- glDepthMask (GL_FALSE);
- }
// Use highlight colors
theWorkspace->GetGlContext()->core11->glColor3fv ((theWorkspace->NamedStatus & OPENGL_NS_HIGHLIGHT) ? theWorkspace->HighlightColor->rgb : anAspectLine->Color().rgb);
myAspectMarker(NULL),
myAspectText(NULL),
myHighlightColor(NULL),
- myNamedStatus(0),
- myZLayer(0),
myIsRaytracable (Standard_False),
myModificationState (0),
myIsCulled (Standard_True),
myIsMirrored (Standard_False)
{
- UpdateNamedStatus();
+ //
}
// =======================================================================
}
// =======================================================================
-// function : UpdateNamedStatus
+// function : OnVisibilityChanged
// purpose :
// =======================================================================
-void OpenGl_Structure::UpdateNamedStatus()
+void OpenGl_Structure::OnVisibilityChanged()
{
- myNamedStatus = 0;
- if (highlight) myNamedStatus |= OPENGL_NS_HIGHLIGHT;
- if (!visible) myNamedStatus |= OPENGL_NS_HIDE;
-
if (myIsRaytracable)
{
UpdateStateWithAncestorStructures();
void OpenGl_Structure::Render (const Handle(OpenGl_Workspace) &theWorkspace) const
{
// Process the structure only if visible
- if (myNamedStatus & OPENGL_NS_HIDE)
+ if (!visible)
{
return;
}
// Render named status
const Standard_Integer aNamedStatus = theWorkspace->NamedStatus;
- theWorkspace->NamedStatus |= myNamedStatus;
+ if (highlight)
+ {
+ theWorkspace->NamedStatus |= OPENGL_NS_HIGHLIGHT;
+ }
// Do we need to restore GL_NORMALIZE?
const Standard_Boolean anOldGlNormalize = aCtx->IsGlNormalizeEnabled();
}
}
-//=======================================================================
-//function : SetZLayer
-//purpose :
-//=======================================================================
-void OpenGl_Structure::SetZLayer (const Standard_Integer theLayerIndex)
-{
- myZLayer = theLayerIndex;
-}
-
-//=======================================================================
-//function : GetZLayer
-//purpose :
-//=======================================================================
-Standard_Integer OpenGl_Structure::GetZLayer () const
-{
- return myZLayer;
-}
-
//=======================================================================
//function : ShadowLink
//purpose :
#include <OpenGl_Group.hxx>
#include <OpenGl_Matrix.hxx>
-#include <OpenGl_NamedStatus.hxx>
#include <OpenGl_Vec.hxx>
#include <OpenGl_Workspace.hxx>
Standard_EXPORT OpenGl_Structure (const Handle(Graphic3d_StructureManager)& theManager);
//! Setup structure graphic state
- Standard_EXPORT virtual void UpdateNamedStatus();
+ Standard_EXPORT virtual void OnVisibilityChanged() Standard_OVERRIDE;
//! Clear graphic data
Standard_EXPORT virtual void Clear();
void clearHighlightColor (const Handle(OpenGl_Context)& theGlCtx);
- Standard_Boolean IsVisible() const { return !(myNamedStatus & OPENGL_NS_HIDE); }
-
Standard_EXPORT void Clear (const Handle(OpenGl_Context)& theGlCtx);
- //! Set z layer ID to display the structure in specified layer
- Standard_EXPORT void SetZLayer (const Standard_Integer theLayerIndex);
-
- //! Get z layer ID
- Standard_EXPORT Standard_Integer GetZLayer() const;
-
//! Renders groups of structure without applying any attributes (i.e. transform, material etc).
virtual void RenderGeometry (const Handle(OpenGl_Workspace)& theWorkspace) const;
Handle(OpenGl_Group) myHighlightBox;
TEL_COLOUR* myHighlightColor;
- int myNamedStatus;
- int myZLayer;
-
OpenGl_ListOfStructure myConnected;
mutable OpenGl_ListOfStructure myAncestorStructures;
//! The structure will be added to associated with it z layer.
//! If the z layer is not presented in the view, the structure will
//! be displayed in default bottom-level z layer.
- void DisplayStructure (const OpenGl_Structure* theStructure,
- const Standard_Integer thePriority);
+ void DisplayStructure (const Handle(Graphic3d_Structure)& theStructure,
+ const Standard_Integer thePriority);
//! Erase structure from display list.
- void EraseStructure (const OpenGl_Structure* theStructure);
+ void EraseStructure (const Handle(Graphic3d_Structure)& theStructure);
//! Add structure to the list of immediate structures.
- void DisplayImmediateStructure (const OpenGl_Structure* theStructure);
+ void DisplayImmediateStructure (const Handle(Graphic3d_Structure)& theStructure);
//! Erase structure from display list.
void EraseImmediateStructure (const OpenGl_Structure* theStructure);
//! Insert a new top-level z layer with ID <theLayerId>
- void AddZLayer (const Standard_Integer theLayerId);
+ void AddZLayer (const Graphic3d_ZLayerId theLayerId);
//! Remove a z layer with ID <theLayerId>
- void RemoveZLayer (const Standard_Integer theLayerId);
+ void RemoveZLayer (const Graphic3d_ZLayerId theLayerId);
//! Display structure in z layer with ID <theNewLayerId>
//! If the layer with ID <theNewLayerId> is not presented in the view,
//! the structure will be displayed in default bottom-level layer.
- void ChangeZLayer (const OpenGl_Structure *theStructure,
- const Standard_Integer theNewLayerId);
+ void ChangeZLayer (const OpenGl_Structure* theStructure,
+ const Graphic3d_ZLayerId theNewLayerId);
//! Sets the settings for a single Z layer of specified view.
- void SetZLayerSettings (const Standard_Integer theLayerId,
- const Graphic3d_ZLayerSettings theSettings);
+ void SetZLayerSettings (const Graphic3d_ZLayerId theLayerId,
+ const Graphic3d_ZLayerSettings& theSettings);
//! Changes the priority of a structure within its ZLayer
- void ChangePriority (const OpenGl_Structure *theStructure,
- const Standard_Integer theNewPriority);
+ void ChangePriority (const OpenGl_Structure* theStructure,
+ const Standard_Integer theNewPriority);
void CreateBackgroundTexture (const Standard_CString AFileName, const Aspect_FillMethod AFillStyle);
void SetBackgroundTextureStyle (const Aspect_FillMethod FillStyle);
const Handle(OpenGl_Workspace)& theWorkspace,
const Graphic3d_CView& theCView,
const Aspect_CLayer2d& theCUnderLayer,
- const Aspect_CLayer2d& theCOverLayer);
+ const Aspect_CLayer2d& theCOverLayer,
+ const Standard_Boolean theToDrawImmediate);
void DrawBackground (OpenGl_Workspace& theWorkspace);
return myImmediateList;
}
+ //! Returns true if there are immediate structures to display
+ bool HasImmediateStructures() const
+ {
+ return !myImmediateList.IsEmpty()
+ || myZLayers.NbImmediateStructures() != 0;
+ }
+
//! Returns modification state for ray-tracing.
Standard_Size ModificationState() const { return myModificationState; }
protected:
- void RenderStructs (const Handle(OpenGl_Workspace) &AWorkspace);
+ void RenderStructs (const Handle(OpenGl_Workspace)& theWorkspace,
+ const Standard_Boolean theToDrawImmediate);
void RedrawLayer2d (const Handle(OpenGl_PrinterContext)& thePrintContext,
const Handle(OpenGl_Workspace) &theWorkspace,
const Graphic3d_CView& theCView,
//! lights, structures. The peculiar properties of "scene" is that
//! it requires empty Z-Buffer and uses projection and orientation
//! matrices supplied by 3d view.
- //! @param thePrintCtx [in] printer context which facilitates tiled printing.
- //! @param theWorkspace [in] rendering workspace.
- //! @param theCView [in] view data.
- //! @param theProjection [in] view projection matrix.
- //! @param theOrientation [in] view orientation matrix.
void RedrawScene (const Handle(OpenGl_PrinterContext)& thePrintContext,
- const Handle(OpenGl_Workspace)& theWorkspace);
+ const Handle(OpenGl_Workspace)& theWorkspace,
+ const Standard_Boolean theToDrawImmediate);
Handle(OpenGl_LineAttributes) myLineAttribs;
Handle(OpenGl_Texture) myTextureEnv;
//call_func_redraw_all_structs_proc
void OpenGl_View::Render (const Handle(OpenGl_PrinterContext)& thePrintContext,
- const Handle(OpenGl_Workspace) &theWorkspace,
- const Graphic3d_CView& theCView,
- const Aspect_CLayer2d& theCUnderLayer,
- const Aspect_CLayer2d& theCOverLayer)
+ const Handle(OpenGl_Workspace)& theWorkspace,
+ const Graphic3d_CView& theCView,
+ const Aspect_CLayer2d& theCUnderLayer,
+ const Aspect_CLayer2d& theCOverLayer,
+ const Standard_Boolean theToDrawImmediate)
{
// ==================================
// Step 1: Prepare for redraw
// ====================================
// Render background
- if (theWorkspace->ToRedrawGL())
+ if (theWorkspace->ToRedrawGL()
+ && !theToDrawImmediate)
{
DrawBackground (*theWorkspace);
}
// =================================
// Step 3: Draw underlayer
// =================================
-
- RedrawLayer2d (thePrintContext, theWorkspace, theCView, theCUnderLayer);
+ if (!theToDrawImmediate)
+ {
+ RedrawLayer2d (thePrintContext, theWorkspace, theCView, theCUnderLayer);
+ }
// =================================
// Step 4: Redraw main plane
{
// single-pass monographic rendering
// redraw scene with normal orientation and projection
- RedrawScene (thePrintContext, theWorkspace);
+ RedrawScene (thePrintContext, theWorkspace, theToDrawImmediate);
}
else
{
aContext->ApplyProjectionMatrix();
// redraw left Eye
- RedrawScene (thePrintContext, theWorkspace);
+ RedrawScene (thePrintContext, theWorkspace, theToDrawImmediate);
// reset depth buffer of first rendering pass
if (theWorkspace->UseDepthTest())
aContext->ApplyProjectionMatrix();
// redraw right Eye
- RedrawScene (thePrintContext, theWorkspace);
+ RedrawScene (thePrintContext, theWorkspace, theToDrawImmediate);
// switch back to monographic rendering
aContext->SetDrawBufferMono();
}
// Render trihedron
- if (theWorkspace->ToRedrawGL())
+ if (theWorkspace->ToRedrawGL()
+ && !theToDrawImmediate)
{
RedrawTrihedron (theWorkspace);
// ===============================
// Step 6: Redraw overlay
// ===============================
+ if (!theToDrawImmediate)
+ {
+ const int aMode = 0;
+ theWorkspace->DisplayCallback (theCView, (aMode | OCC_PRE_OVERLAY));
- const int aMode = 0;
- theWorkspace->DisplayCallback (theCView, (aMode | OCC_PRE_OVERLAY));
-
- RedrawLayer2d (thePrintContext, theWorkspace, theCView, theCOverLayer);
+ RedrawLayer2d (thePrintContext, theWorkspace, theCView, theCOverLayer);
- theWorkspace->DisplayCallback (theCView, aMode);
+ theWorkspace->DisplayCallback (theCView, aMode);
+ }
// ===============================
// Step 7: Finalize
// function : InvalidateBVHData
// purpose :
// =======================================================================
-void OpenGl_View::InvalidateBVHData (const Standard_Integer theLayerId)
+void OpenGl_View::InvalidateBVHData (const Graphic3d_ZLayerId theLayerId)
{
myZLayers.InvalidateBVHData (theLayerId);
}
/*----------------------------------------------------------------------*/
//ExecuteViewDisplay
-void OpenGl_View::RenderStructs (const Handle(OpenGl_Workspace) &AWorkspace)
+void OpenGl_View::RenderStructs (const Handle(OpenGl_Workspace)& AWorkspace,
+ const Standard_Boolean theToDrawImmediate)
{
if ( myZLayers.NbStructures() <= 0 )
return;
}
}
- myZLayers.Render (AWorkspace);
+ myZLayers.Render (AWorkspace, theToDrawImmediate);
#if !defined(GL_ES_VERSION_2_0)
//TsmPopAttri(); /* restore previous graphics context; before update lights */
//purpose :
//=======================================================================
-void OpenGl_View::AddZLayer (const Standard_Integer theLayerId)
+void OpenGl_View::AddZLayer (const Graphic3d_ZLayerId theLayerId)
{
myZLayers.AddLayer (theLayerId);
}
//purpose :
//=======================================================================
-void OpenGl_View::RemoveZLayer (const Standard_Integer theLayerId)
+void OpenGl_View::RemoveZLayer (const Graphic3d_ZLayerId theLayerId)
{
myZLayers.RemoveLayer (theLayerId);
}
//purpose :
//=======================================================================
-void OpenGl_View::DisplayStructure (const OpenGl_Structure *theStructure,
- const Standard_Integer thePriority)
+void OpenGl_View::DisplayStructure (const Handle(Graphic3d_Structure)& theStructure,
+ const Standard_Integer thePriority)
{
- Standard_Integer aZLayer = theStructure->GetZLayer ();
- myZLayers.AddStructure (theStructure, aZLayer, thePriority);
+ const OpenGl_Structure* aStruct = reinterpret_cast<const OpenGl_Structure*> (theStructure->CStructure().operator->());
+ const Graphic3d_ZLayerId aZLayer = aStruct->ZLayer();
+ myZLayers.AddStructure (aStruct, aZLayer, thePriority);
}
//=======================================================================
//purpose :
//=======================================================================
-void OpenGl_View::DisplayImmediateStructure (const OpenGl_Structure* theStructure)
+void OpenGl_View::DisplayImmediateStructure (const Handle(Graphic3d_Structure)& theStructure)
{
+ const OpenGl_Structure* aStruct = reinterpret_cast<const OpenGl_Structure*> (theStructure->CStructure().operator->());
for (OpenGl_SequenceOfStructure::Iterator anIter (myImmediateList);
anIter.More(); anIter.Next())
{
- if (anIter.Value() == theStructure)
+ if (anIter.Value() == aStruct)
{
return;
}
}
- myImmediateList.Append (theStructure);
+ myImmediateList.Append (aStruct);
}
//=======================================================================
//purpose :
//=======================================================================
-void OpenGl_View::EraseStructure (const OpenGl_Structure *theStructure)
+void OpenGl_View::EraseStructure (const Handle(Graphic3d_Structure)& theStructure)
{
- Standard_Integer aZLayer = theStructure->GetZLayer ();
- myZLayers.RemoveStructure (theStructure, aZLayer);
+ myZLayers.RemoveStructure (theStructure);
}
//=======================================================================
//purpose :
//=======================================================================
-void OpenGl_View::ChangeZLayer (const OpenGl_Structure *theStructure,
- const Standard_Integer theNewLayerId)
+void OpenGl_View::ChangeZLayer (const OpenGl_Structure* theStructure,
+ const Graphic3d_ZLayerId theNewLayerId)
{
- Standard_Integer anOldLayer = theStructure->GetZLayer ();
+ const Graphic3d_ZLayerId anOldLayer = theStructure->ZLayer();
myZLayers.ChangeLayer (theStructure, anOldLayer, theNewLayerId);
}
//function : SetZLayerSettings
//purpose :
//=======================================================================
-void OpenGl_View::SetZLayerSettings (const Standard_Integer theLayerId,
- const Graphic3d_ZLayerSettings theSettings)
+void OpenGl_View::SetZLayerSettings (const Graphic3d_ZLayerId theLayerId,
+ const Graphic3d_ZLayerSettings& theSettings)
{
- myZLayers.Layer (theLayerId).SetLayerSettings (theSettings);
+ myZLayers.SetLayerSettings (theLayerId, theSettings);
}
//=======================================================================
void OpenGl_View::ChangePriority (const OpenGl_Structure *theStructure,
const Standard_Integer theNewPriority)
{
- Standard_Integer aLayerId = theStructure->GetZLayer();
+ const Graphic3d_ZLayerId aLayerId = theStructure->ZLayer();
myZLayers.ChangePriority (theStructure, aLayerId, theNewPriority);
}
//=======================================================================
void OpenGl_View::RedrawScene (const Handle(OpenGl_PrinterContext)& thePrintContext,
- const Handle(OpenGl_Workspace)& theWorkspace)
+ const Handle(OpenGl_Workspace)& theWorkspace,
+ const Standard_Boolean theToDrawImmediate)
{
const Handle(OpenGl_Context)& aContext = theWorkspace->GetGlContext();
theWorkspace->NamedStatus |= OPENGL_NS_FORBIDSETTEX;
theWorkspace->DisableTexture();
// Render the view
- RenderStructs (theWorkspace);
+ RenderStructs (theWorkspace, theToDrawImmediate);
break;
case Visual3d_TOD_ENVIRONMENT:
theWorkspace->NamedStatus |= OPENGL_NS_FORBIDSETTEX;
theWorkspace->EnableTexture (myTextureEnv);
// Render the view
- RenderStructs (theWorkspace);
+ RenderStructs (theWorkspace, theToDrawImmediate);
theWorkspace->DisableTexture();
break;
// First pass
theWorkspace->NamedStatus &= ~OPENGL_NS_FORBIDSETTEX;
// Render the view
- RenderStructs (theWorkspace);
+ RenderStructs (theWorkspace, theToDrawImmediate);
theWorkspace->DisableTexture();
// Second pass
theWorkspace->NamedStatus |= OPENGL_NS_FORBIDSETTEX;
// Render the view
- RenderStructs (theWorkspace);
+ RenderStructs (theWorkspace, theToDrawImmediate);
theWorkspace->DisableTexture();
// Restore properties back
redraw1 (theCView, anEmptyCLayer, anEmptyCLayer, 0);
myOpenGlFBO->UnbindBuffer (aGlCtx);
- const Standard_Boolean isImmediate = !myView->ImmediateStructures().IsEmpty();
+ const Standard_Boolean isImmediate = myView->HasImmediateStructures();
Raytrace (theCView, aSizeX, aSizeY, isImmediate ? 0 : toSwap,
theCOverLayer, theCUnderLayer, aFrameBuffer);
aFrameBuffer->BindBuffer (aGlCtx);
}
- const Standard_Boolean isImmediate = !myView->ImmediateStructures().IsEmpty();
+ const Standard_Boolean isImmediate = myView->HasImmediateStructures();
redraw1 (theCView, theCUnderLayer, theCOverLayer, isImmediate ? 0 : toSwap);
if (isImmediate)
{
glClear (toClear);
Handle(OpenGl_Workspace) aWS (this);
- myView->Render (myPrintContext, aWS, theCView, theCUnderLayer, theCOverLayer);
+ myView->Render (myPrintContext, aWS, theCView, theCUnderLayer, theCOverLayer, Standard_False);
// swap the buffers
if (theToSwap)
glRasterPos2i (0, 0);
glCopyPixels (0, 0, myWidth + 1, myHeight + 1, GL_COLOR);
+ //glCopyPixels (0, 0, myWidth + 1, myHeight + 1, GL_DEPTH);
EnableFeatures();
#if !defined(GL_ES_VERSION_2_0)
glGetBooleanv (GL_DOUBLEBUFFER, &isDoubleBuffer);
#endif
- if (myView->ImmediateStructures().IsEmpty())
+ if (!myView->HasImmediateStructures())
{
if (theToForce
|| !myIsImmediateDrawn)
}
myIsImmediateDrawn = Standard_True;
- NamedStatus |= OPENGL_NS_IMMEDIATE;
- ///glDisable (GL_LIGHTING);
- glDisable (GL_DEPTH_TEST);
-
Handle(OpenGl_Workspace) aWS (this);
+
+ if (myUseZBuffer)
+ {
+ glDepthFunc (GL_LEQUAL);
+ glDepthMask (GL_TRUE);
+ if (myUseDepthTest)
+ {
+ glEnable (GL_DEPTH_TEST);
+ }
+ else
+ {
+ glDisable (GL_DEPTH_TEST);
+ }
+
+ #if !defined(GL_ES_VERSION_2_0)
+ glClearDepth (1.0);
+ #else
+ glClearDepthf (1.0f);
+ #endif
+ }
+ else
+ {
+ glDisable (GL_DEPTH_TEST);
+ }
+
+ myView->Render (myPrintContext, aWS, theCView, theCUnderLayer, theCOverLayer, Standard_True);
+ if (!myView->ImmediateStructures().IsEmpty())
+ {
+ glDisable (GL_DEPTH_TEST);
+ }
for (OpenGl_SequenceOfStructure::Iterator anIter (myView->ImmediateStructures());
anIter.More(); anIter.Next())
{
const OpenGl_Structure* aStructure = anIter.Value();
+ if (!aStructure->IsVisible())
+ {
+ continue;
+ }
+
aStructure->Render (aWS);
}
- NamedStatus &= ~OPENGL_NS_IMMEDIATE;
-
if (isDoubleBuffer && myTransientDrawToFront)
{
glFlush();
for (OpenGl_SequenceOfLayers::Iterator anLayerIt (aList.Layers()); anLayerIt.More(); anLayerIt.Next())
{
- const OpenGl_PriorityList& aPriorityList = anLayerIt.Value().PriorityList();
-
- if (aPriorityList.NbStructures() == 0)
+ const OpenGl_Layer& aLayer = anLayerIt.Value();
+ if (aLayer.NbStructures() == 0)
continue;
- const OpenGl_ArrayOfStructure& aStructArray = aPriorityList.ArrayOfStructures();
-
+ const OpenGl_ArrayOfStructure& aStructArray = aLayer.ArrayOfStructures();
for (Standard_Integer anIndex = 0; anIndex < aStructArray.Length(); ++anIndex)
{
- OpenGl_SequenceOfStructure::Iterator aStructIt;
-
- for (aStructIt.Init (aStructArray (anIndex)); aStructIt.More(); aStructIt.Next())
+ for (OpenGl_SequenceOfStructure::Iterator aStructIt (aStructArray (anIndex)); aStructIt.More(); aStructIt.Next())
{
const OpenGl_Structure* aStructure = aStructIt.Value();
{
if (!aStructure->IsRaytracable()
|| !aStructure->IsVisible())
+ {
continue;
+ }
for (OpenGl_Structure::GroupIterator aGroupIter (aStructure->DrawGroups()); aGroupIter.More(); aGroupIter.Next())
{
---Purpose: Returns the new Structure defined for the new visualization
---Category: Methods to modify the class definition
-
----Category: Highlighting methods.
---
- Highlight(me: mutable) is static;
- ---Purpose: displays the whole content of the presentation in white.
- Color(me: mutable; aColor: NameOfColor from Quantity) is static;
- ---Purpose: displays the whole content of the presentation in the specified color.
- BoundBox(me: mutable) is static;
-
- SetIsForHighlight (me : mutable;
- isForHighlight : Boolean from Standard)
- is virtual;
- ---Purpose: marks the structure <me> representing wired structure needed for
- -- highlight only so it won't be added to BVH tree.
-
---Category: Global modification methods.
SetShadingAspect(me: mutable; aShadingAspect: ShadingAspect from Prs3d);
-
----Category: Inquire methods.
- IsPickable(me) returns Boolean from Standard;
-
+
---Category: Transformation methods.
Transform (me: mutable; aTransformation: Transformation from Geom);
Place (me: mutable; X,Y,Z: Length from Quantity);
Remove (me: mutable; aPresentation: Presentation from Prs3d);
RemoveAll (me: mutable);
- SetPickable(me: mutable) is static;
- SetUnPickable(me: mutable) is static;
-
CurrentGroup(me) returns Group from Graphic3d is static private;
friends
SetPrimitivesAspect (aDefAspect);
}
-//=======================================================================
-//function : Highlight
-//purpose :
-//=======================================================================
-void Prs3d_Presentation::Highlight()
-{
- SetHighlightColor(Quantity_Color(Quantity_NOC_GRAY99));
- Aspect_TypeOfHighlightMethod Method = Aspect_TOHM_COLOR;
- Graphic3d_Structure::Highlight(Method);
-}
-
-//=======================================================================
-//function : Color
-//purpose :
-//=======================================================================
-void Prs3d_Presentation::Color(const Quantity_NameOfColor aColor)
-{
- SetHighlightColor(Quantity_Color(aColor));
- Graphic3d_Structure::Highlight(Aspect_TOHM_COLOR);
-}
-
-//=======================================================================
-//function : BoundBox
-//purpose :
-//=======================================================================
-void Prs3d_Presentation::BoundBox()
-{
- SetHighlightColor(Quantity_Color(Quantity_NOC_GRAY99));
- Graphic3d_Structure::Highlight(Aspect_TOHM_BOUNDBOX);
-}
-
-
//=======================================================================
//function : SetShadingAspect
//purpose :
SetPrimitivesAspect(aShadingAspect->Aspect());
}
-//=======================================================================
-//function : IsPickable
-//purpose :
-//=======================================================================
-Standard_Boolean Prs3d_Presentation::IsPickable () const
-{
- return Graphic3d_Structure::IsSelectable();
-}
-
-//=======================================================================
-//function : SetPickable
-//purpose :
-//=======================================================================
-
-void Prs3d_Presentation::SetPickable()
-{
- SetPick(Standard_True);
-}
-
-//=======================================================================
-//function : SetUnPickable
-//purpose :
-//=======================================================================
-void Prs3d_Presentation::SetUnPickable()
-{
- SetPick(Standard_False);
-}
-
//=======================================================================
//function : Transform
//purpose :
}
//=======================================================================
-//=======================================================================
-//function : SetIsForHighlight
-//purpose :
-//=======================================================================
-void Prs3d_Presentation::SetIsForHighlight (const Standard_Boolean isForHighlight)
-{
- Graphic3d_Structure::SetIsForHighlight (isForHighlight);
-}
-
//function : Compute
//purpose :
//=======================================================================
MMgt,TCollection,
TopLoc,
- Prs3d,Graphic3d,
+ Aspect,
+ Prs3d,
+ Graphic3d,
Quantity,Geom,
- V3d,
+ Visual3d,
+ V3d,
TColStd,
gp
Location from TopLoc,
ClipPlane_Handle from Graphic3d,
SequenceOfHClipPlane from Graphic3d,
- -- ABD 29/10/04 Transform Persistence of Presentation( pan, zoom, rotate )
TransModeFlags from Graphic3d,
Pnt from gp,
Trsf from gp,
- CTransPersStruct from Graphic3d
- -- ABD 29/10/04 Transform Persistence of Presentation( pan, zoom, rotate )
+ CTransPersStruct from Graphic3d,
+ ZLayerId from Graphic3d
raises
NotImplemented from Standard
UpdateTransformation(me:mutable) is virtual;
UpdateTransformation(me:mutable;P : Presentation from Prs3d) is virtual;
-
+
SetZLayer ( me : mutable;
- thePrsMgr : PresentationManager from PrsMgr;
- theLayerId : Integer from Standard )
+ theLayerId : ZLayerId from Graphic3d )
is virtual;
- ---Purpose: Set Z layer ID and update all presentations of
- -- the presentable object. The layer can be set only for displayed object.
- -- If all object presentations are removed, the layer ID will be set to
- -- default value when computing presentation. The layers mechanism allows
- -- drawing objects in higher layers in overlay of objects in lower layers.
-
- GetZLayer ( me;
- thePrsMgr : PresentationManager from PrsMgr )
- returns Integer from Standard is static;
- ---Purpose: Get ID of Z layer. If no presentations of object is displayed,
- -- and layer ID is unavailable, the -1 value is returned.
+ ---Purpose: Set Z layer ID and update all presentations of the presentable object.
+ -- The layers mechanism allows drawing objects in higher layers in overlay of objects in lower layers.
+
+ ZLayer ( me )
+ returns ZLayerId from Graphic3d is static;
+ ---Purpose: Get ID of Z layer.
AddClipPlane (me : mutable; thePlane : ClipPlane_Handle from Graphic3d) is virtual;
---Purpose: Adds clip plane for graphical clipping for all display mode
myClipPlanes : SequenceOfHClipPlane from Graphic3d is protected;
myTransformPersistence : CTransPersStruct from Graphic3d;
myIsMutable : Boolean from Standard is protected;
-
+ myZLayer : ZLayerId from Graphic3d is protected;
myHasOwnPresentations : Boolean from Standard is protected; -- shows if object should have own presentations.
PrsMgr_PresentableObject::PrsMgr_PresentableObject (const PrsMgr_TypeOfPresentation3d theType)
: myTypeOfPresentation3d (theType),
myIsMutable (Standard_False),
+ myZLayer (Graphic3d_ZLayerId_Default),
myHasOwnPresentations (Standard_True),
myParent (NULL)
{
//function : SetZLayer
//purpose :
//=======================================================================
-void PrsMgr_PresentableObject::SetZLayer
- (const Handle(PrsMgr_PresentationManager)& thePrsMgr,
- const Standard_Integer theLayerId)
+void PrsMgr_PresentableObject::SetZLayer (const Graphic3d_ZLayerId theLayerId)
{
- if (!thePrsMgr.IsNull())
- thePrsMgr->SetZLayer (this, theLayerId);
+ if (myZLayer == theLayerId)
+ {
+ return;
+ }
+
+ myZLayer = theLayerId;
+ for (Standard_Integer aPrsIter = 1; aPrsIter <= myPresentations.Length(); ++aPrsIter)
+ {
+ const PrsMgr_ModedPresentation& aModedPrs = myPresentations (aPrsIter);
+ if (aModedPrs.Presentation().IsNull()
+ || aModedPrs.Presentation()->Presentation().IsNull())
+ {
+ continue;
+ }
+
+ aModedPrs.Presentation()->Presentation()->SetZLayer (theLayerId);
+ }
}
//=======================================================================
-//function : GetZLayer
+//function : ZLayer
//purpose :
//=======================================================================
-Standard_Integer PrsMgr_PresentableObject::GetZLayer
- (const Handle(PrsMgr_PresentationManager)& thePrsMgr) const
+Graphic3d_ZLayerId PrsMgr_PresentableObject::ZLayer() const
{
- if (!thePrsMgr.IsNull())
- return thePrsMgr->GetZLayer (this);
-
- return -1;
+ return myZLayer;
}
// =======================================================================
PresentationManager from PrsMgr,
NameOfColor from Quantity,
+ Color from Quantity,
Transformation from Geom,
Length from Quantity,
ShadingAspect from Prs3d,
+ TypeOfHighlightMethod from Aspect,
TypeOfPresentation3d from PrsMgr,
DataStructureManager from Graphic3d,
Structure from Graphic3d,
---C++: alias ~
Display (me : mutable)
- is virtual private;
+ is private;
- Display (me : mutable;
+ display (me : mutable;
theIsHighlight : Boolean from Standard)
is static private;
---Purpose: Displays myStructure.
Erase (me : mutable)
- is virtual private;
+ is private;
SetVisible (me : mutable;
theValue : Boolean from Standard)
- is virtual private;
+ is private;
- Highlight (me : mutable) is virtual private;
+ Highlight (me : mutable;
+ theMethod : TypeOfHighlightMethod from Aspect;
+ theColor : Color from Quantity) is private;
- Unhighlight (me) is virtual private;
+ Unhighlight (me) is private;
IsHighlighted (me) returns Boolean from Standard
- is virtual private;
+ is private;
IsDisplayed (me) returns Boolean from Standard
- is virtual private;
+ is private;
DisplayPriority(me) returns Integer from Standard
- is virtual private;
+ is private;
SetDisplayPriority(me:mutable;aNewPrior:Integer from Standard)
- is virtual private;
+ is private;
SetZLayer (me : mutable;
theLayerId : Integer from Standard)
- is virtual private;
+ is private;
---Purpose: Set Z layer ID for the presentation
GetZLayer (me) returns Integer from Standard
- is virtual private;
+ is private;
---Purpose: Get Z layer ID for the presentation
Clear (me : mutable)
- is virtual private;
+ is private;
---Purpose: removes the whole content of the presentation.
-- Does not remove the other connected presentations.
- Color (me : mutable;
- theColor : NameOfColor from Quantity)
- is virtual private;
-
- BoundBox (me)
- is static private;
-
---Category: references to other presentation.
Connect (me;
State_Visible
};
- static BeforeHighlightState StructureState(const Handle(PrsMgr_Prs) theStructure)
+ static BeforeHighlightState StructureState(const Handle(PrsMgr_Prs)& theStructure)
{
return !theStructure->IsDisplayed() ?
State_Empty : !theStructure->IsVisible() ?
//=======================================================================
void PrsMgr_Presentation::Display()
{
- Display (Standard_False);
+ display (Standard_False);
myBeforeHighlightState = State_Visible;
}
//=======================================================================
-//function : Display
+//function : display
//purpose :
//=======================================================================
-void PrsMgr_Presentation::Display (const Standard_Boolean theIsHighlight)
+void PrsMgr_Presentation::display (const Standard_Boolean theIsHighlight)
{
if (!myStructure->IsDisplayed())
{
//function : Highlight
//purpose :
//=======================================================================
-void PrsMgr_Presentation::Highlight()
+void PrsMgr_Presentation::Highlight (const Aspect_TypeOfHighlightMethod theMethod,
+ const Quantity_Color& theColor)
{
if (!IsHighlighted())
{
myBeforeHighlightState = StructureState (myStructure);
}
- Display (Standard_True);
- myStructure->Highlight();
+ display (Standard_True);
+ myStructure->Highlight (theMethod, theColor);
}
//=======================================================================
myStructure->RemoveAll();
}
-//=======================================================================
-//function : Color
-//purpose :
-//=======================================================================
-void PrsMgr_Presentation::Color (const Quantity_NameOfColor theColor)
-{
- if (!IsHighlighted())
- {
- myBeforeHighlightState = StructureState (myStructure);
- }
-
- Display (Standard_True);
- myStructure->Color (theColor);
-}
-
-//=======================================================================
-//function : BoundBox
-//purpose :
-//=======================================================================
-void PrsMgr_Presentation::BoundBox() const
-{
- myStructure->BoundBox();
-}
-
//=======================================================================
//function : IsDisplayed
//purpose :
PresentableObject from PrsMgr,
ListOfPresentations from PrsMgr,
Length,NameOfColor from Quantity,
+ Color from Quantity,
Transformation from Geom,
NameOfMaterial from Graphic3d,
Presentation from PrsMgr,
View from V3d,
+ ViewManager from Visual3d,
ShadingAspect from Prs3d,
Presentation from Prs3d
is
- Create (theStructureManager : StructureManager from Graphic3d)
+ Create (theStructureManager : ViewManager from Visual3d)
returns PresentationManager from PrsMgr;
---Purpose:
-- Creates a framework to manage displays and graphic entities with the 3D view theStructureManager.
Presentation (me;
thePrsObject : PresentableObject from PrsMgr;
- theMode : Integer from Standard = 0)
+ theMode : Integer from Standard = 0;
+ theToCreate : Boolean from Standard = Standard_False)
returns Presentation from PrsMgr
- raises NoSuchObject from Standard
is static;
- ---Purpose: Returns the presentation Presentation of the presentable object thePrsObject in this framework. thePrsObject has the display mode theMode.
-
- AddPresentation (me : mutable;
- thePrsObject : PresentableObject from PrsMgr;
- theMode : Integer from Standard = 0)
- ---Purpose: Adds a presentation of the presentable object thePrsObject to this framework.
- -- thePrsObject has the display mode theMode.
- is protected;
+ ---Purpose: Returns the presentation Presentation of the presentable object thePrsObject in this framework.
+ -- When theToCreate is true - automatically creates presentation for specified mode when not exist.
RemovePresentation (me : mutable;
thePrsObject : PresentableObject from PrsMgr;
theMode : Integer from Standard = 0)
+ returns Boolean from Standard
---Purpose: Removes a presentation of the presentable object thePrsObject to this framework. thePrsObject has the display mode theMode.
is protected;
fields
- myStructureManager : StructureManager from Graphic3d is protected;
+ myStructureManager : ViewManager from Visual3d is protected;
myImmediateModeOn : Integer from Standard is protected;
myImmediateList : ListOfPresentations from PrsMgr is protected;
myImmediateView : View from V3d is protected;
+ mySelectionColor : Color from Quantity is protected;
end PresentationManager from PrsMgr;
// function : PrsMgr_PresentationManager
// purpose :
// =======================================================================
-PrsMgr_PresentationManager::PrsMgr_PresentationManager (const Handle(Graphic3d_StructureManager)& theStructureManager)
+PrsMgr_PresentationManager::PrsMgr_PresentationManager (const Handle(Visual3d_ViewManager)& theStructureManager)
: myStructureManager (theStructureManager),
- myImmediateModeOn (0)
+ myImmediateModeOn (0),
+ mySelectionColor (Quantity_NOC_GRAY99)
{
//
}
{
if (thePrsObj->HasOwnPresentations())
{
- if (!HasPresentation (thePrsObj, theMode))
- {
- AddPresentation (thePrsObj, theMode);
- }
-
- Handle(PrsMgr_Presentation) aPrs = Presentation (thePrsObj, theMode);
-
- if (aPrs.IsNull()) return;
-
+ Handle(PrsMgr_Presentation) aPrs = Presentation (thePrsObj, theMode, Standard_True);
if (aPrs->MustBeUpdated())
{
Update (thePrsObj, theMode);
Erase (anIter.Value(), theMode);
}
- if (HasPresentation (thePrsObj, theMode))
+ PrsMgr_Presentations& aPrsList = thePrsObj->Presentations();
+ for (Standard_Integer aPrsIter = 1; aPrsIter <= aPrsList.Length(); ++aPrsIter)
{
- Presentation (thePrsObj, theMode)->Erase();
- RemovePresentation (thePrsObj, theMode);
+ const PrsMgr_ModedPresentation& aModedPrs = aPrsList.Value (aPrsIter);
+ const Handle(PrsMgr_PresentationManager)& aPrsMgr = aModedPrs.Presentation()->PresentationManager();
+ if (theMode == aPrsList (aPrsIter).Mode()
+ && this == aPrsMgr)
+ {
+ if (!aModedPrs.Presentation().IsNull())
+ {
+ aModedPrs.Presentation()->Erase();
+ }
+ aPrsList.Remove (aPrsIter);
+ return;
+ }
}
}
Clear (anIter.Value(), theMode);
}
- if (HasPresentation (thePrsObj, theMode))
+ const Handle(PrsMgr_Presentation) aPrs = Presentation (thePrsObj, theMode);
+ if (!aPrs.IsNull())
{
- Presentation (thePrsObj, theMode)->Clear();
+ aPrs->Clear();
}
}
return;
}
- if (!HasPresentation (thePrsObj, theMode))
- {
- AddPresentation (thePrsObj, theMode);
- }
-
- if (!HasPresentation (thePrsObj, theMode)) return;
-
- Handle(PrsMgr_Presentation) aPrs = Presentation (thePrsObj, theMode);
+ Handle(PrsMgr_Presentation) aPrs = Presentation (thePrsObj, theMode, Standard_True);
if (aPrs->MustBeUpdated())
{
Update (thePrsObj, theMode);
if (myImmediateModeOn > 0)
{
Handle(Prs3d_PresentationShadow) aShadow = new Prs3d_PresentationShadow (myStructureManager, aPrs->Presentation());
- aShadow->Highlight();
+ aShadow->Highlight (Aspect_TOHM_COLOR, mySelectionColor);
AddToImmediateList (aShadow);
}
else
{
- aPrs->Highlight();
+ aPrs->Highlight (Aspect_TOHM_COLOR, mySelectionColor);
}
}
Unhighlight (anIter.Value(), theMode);
}
- if (HasPresentation (thePrsObj, theMode))
+ const Handle(PrsMgr_Presentation) aPrs = Presentation (thePrsObj, theMode);
+ if (!aPrs.IsNull())
{
- Presentation (thePrsObj, theMode)->Unhighlight();
+ aPrs->Unhighlight();
}
}
SetDisplayPriority (anIter.Value(), theMode, theNewPrior);
}
- if (HasPresentation (thePrsObj, theMode))
+ const Handle(PrsMgr_Presentation) aPrs = Presentation (thePrsObj, theMode);
+ if (!aPrs.IsNull())
{
- Presentation (thePrsObj, theMode)->SetDisplayPriority (theNewPrior);
+ aPrs->SetDisplayPriority (theNewPrior);
}
}
}
}
- return HasPresentation (thePrsObj, theMode)
- ? Presentation (thePrsObj, theMode)->DisplayPriority()
- : 0;
+ const Handle(PrsMgr_Presentation) aPrs = Presentation (thePrsObj, theMode);
+ return !aPrs.IsNull()
+ ? aPrs->DisplayPriority()
+ : 0;
}
// =======================================================================
}
}
- return HasPresentation (thePrsObj, theMode)
- && Presentation (thePrsObj, theMode)->IsDisplayed();
+ const Handle(PrsMgr_Presentation) aPrs = Presentation (thePrsObj, theMode);
+ return !aPrs.IsNull()
+ && aPrs->IsDisplayed();
}
// =======================================================================
}
}
- return HasPresentation (thePrsObj, theMode)
- && Presentation (thePrsObj, theMode)->IsHighlighted();
+ const Handle(PrsMgr_Presentation) aPrs = Presentation (thePrsObj, theMode);
+ return !aPrs.IsNull()
+ && aPrs->IsHighlighted();
}
// =======================================================================
{
Update (anIter.Value(), theMode);
}
- if (!HasPresentation(thePrsObj, theMode))
- {
- return;
- }
Handle(PrsMgr_Presentation) aPrs = Presentation (thePrsObj, theMode);
if (!aPrs.IsNull())
// purpose :
// =======================================================================
Handle(PrsMgr_Presentation) PrsMgr_PresentationManager::Presentation (const Handle(PrsMgr_PresentableObject)& thePrsObj,
- const Standard_Integer theMode) const
+ const Standard_Integer theMode,
+ const Standard_Boolean theToCreate) const
{
const PrsMgr_Presentations& aPrsList = thePrsObj->Presentations();
- if (aPrsList.IsEmpty())
- {
- return Handle(PrsMgr_Presentation)();
- }
-
for (Standard_Integer aPrsIter = 1; aPrsIter <= aPrsList.Length(); ++aPrsIter)
{
const PrsMgr_ModedPresentation& aModedPrs = aPrsList.Value (aPrsIter);
}
}
- return Handle(PrsMgr_Presentation)();
-}
+ if (!theToCreate)
+ {
+ return Handle(PrsMgr_Presentation)();
+ }
-// =======================================================================
-// function : AddPresentation
-// purpose :
-// =======================================================================
-void PrsMgr_PresentationManager::AddPresentation (const Handle(PrsMgr_PresentableObject)& thePrsObj,
- const Standard_Integer theMode)
-{
Handle(PrsMgr_Presentation) aPrs = new PrsMgr_Presentation (this, thePrsObj);
+ aPrs->SetZLayer (thePrsObj->ZLayer());
thePrsObj->Presentations().Append (PrsMgr_ModedPresentation (aPrs, theMode));
thePrsObj->Fill (this, aPrs, theMode);
// set layer index accordingly to object's presentations
- const Standard_Integer aZLayerId = GetZLayer (thePrsObj);
- if (aZLayerId >= 0)
- {
- aPrs->SetZLayer (aZLayerId);
- }
aPrs->SetUpdateStatus (Standard_False);
+ return aPrs;
}
// =======================================================================
// function : RemovePresentation
// purpose :
// =======================================================================
-void PrsMgr_PresentationManager::RemovePresentation (const Handle(PrsMgr_PresentableObject)& thePrsObj,
- const Standard_Integer theMode)
+Standard_Boolean PrsMgr_PresentationManager::RemovePresentation (const Handle(PrsMgr_PresentableObject)& thePrsObj,
+ const Standard_Integer theMode)
{
PrsMgr_Presentations& aPrsList = thePrsObj->Presentations();
for (Standard_Integer aPrsIter = 1; aPrsIter <= aPrsList.Length(); ++aPrsIter)
{
- if (theMode == aPrsList (aPrsIter).Mode())
- // && this == aPrsMgr) ??
+ const PrsMgr_ModedPresentation& aModedPrs = aPrsList.Value (aPrsIter);
+ const Handle(PrsMgr_PresentationManager)& aPrsMgr = aModedPrs.Presentation()->PresentationManager();
+ if (theMode == aPrsList (aPrsIter).Mode()
+ && this == aPrsMgr)
{
aPrsList.Remove (aPrsIter);
- break;
+ return Standard_True;
}
}
+ return Standard_False;
}
// =======================================================================
{
return;
}
- PrsMgr_Presentations& aPrsList = thePrsObj->Presentations();
- for (Standard_Integer aPrsIter = 1; aPrsIter <= aPrsList.Length(); ++aPrsIter)
- {
- Handle(PrsMgr_Presentation) aPrs = aPrsList.ChangeValue (aPrsIter).Presentation();
- if (aPrs->PresentationManager() == this)
- {
- aPrs->SetZLayer (theLayerId);
- }
- }
+
+ thePrsObj->SetZLayer (theLayerId);
}
// =======================================================================
// =======================================================================
Standard_Integer PrsMgr_PresentationManager::GetZLayer (const Handle(PrsMgr_PresentableObject)& thePrsObj) const
{
- for (PrsMgr_ListOfPresentableObjectsIter anIter (thePrsObj->Children()); anIter.More(); anIter.Next())
- {
- Standard_Integer aLayer = GetZLayer (anIter.Value());
- if (aLayer != -1)
- {
- return aLayer;
- }
- }
- if (!thePrsObj->HasOwnPresentations())
- {
- return -1;
- }
- const PrsMgr_Presentations& aPrsList = thePrsObj->Presentations();
- for (Standard_Integer aPrsIter = 1; aPrsIter <= aPrsList.Length(); ++aPrsIter)
- {
- Handle(PrsMgr_Presentation) aPrs = aPrsList.Value (aPrsIter).Presentation();
- if (aPrs->PresentationManager() == this)
- {
- return aPrs->GetZLayer();
- }
- }
- return -1;
+ return thePrsObj->ZLayer();
}
// =======================================================================
const Standard_Integer theMode,
const Standard_Integer theOtherMode)
{
- if (!HasPresentation (thePrsObject, theMode))
- {
- AddPresentation (thePrsObject, theMode);
- }
- if (!HasPresentation (theOtherObject, theOtherMode))
- {
- AddPresentation (theOtherObject, theOtherMode);
- }
- Presentation (thePrsObject, theMode)->Connect (Presentation (theOtherObject, theOtherMode));
+ Handle(PrsMgr_Presentation) aPrs = Presentation (thePrsObject, theMode, Standard_True);
+ Handle(PrsMgr_Presentation) aPrsOther = Presentation (theOtherObject, theOtherMode, Standard_True);
+ aPrs->Connect (aPrsOther);
}
// =======================================================================
return;
}
- if (!HasPresentation (thePrsObj, theMode))
- {
- AddPresentation (thePrsObj, theMode);
- }
-
- if (!HasPresentation (thePrsObj, theMode)) return;
-
- Handle(PrsMgr_Presentation) aPrs = Presentation (thePrsObj, theMode);
+ Handle(PrsMgr_Presentation) aPrs = Presentation (thePrsObj, theMode, Standard_True);
if (aPrs->MustBeUpdated())
{
Update (thePrsObj, theMode);
if (myImmediateModeOn > 0)
{
Handle(Prs3d_PresentationShadow) aShadow = new Prs3d_PresentationShadow (myStructureManager, aPrs->Presentation());
- aShadow->Color (theColor);
+ aShadow->Highlight (Aspect_TOHM_COLOR, theColor);
AddToImmediateList (aShadow);
}
else
{
- aPrs->Color (theColor);
+ aPrs->Highlight (Aspect_TOHM_COLOR, theColor);
}
}
// function : BoundBox
// purpose :
// =======================================================================
-void PrsMgr_PresentationManager::BoundBox (const Handle(PrsMgr_PresentableObject)& thePrsObject,
+void PrsMgr_PresentationManager::BoundBox (const Handle(PrsMgr_PresentableObject)& thePrsObj,
const Standard_Integer theMode)
{
- if (!HasPresentation (thePrsObject, theMode))
- {
- AddPresentation (thePrsObject, theMode);
- }
- else if (Presentation (thePrsObject, theMode)->MustBeUpdated())
+ Handle(PrsMgr_Presentation) aPrs = Presentation (thePrsObj, theMode, Standard_True);
+ if (aPrs->MustBeUpdated())
{
- Update (thePrsObject, theMode);
+ Update (thePrsObj, theMode);
}
- Presentation (thePrsObject, theMode)->BoundBox();
+ aPrs->Highlight (Aspect_TOHM_BOUNDBOX, mySelectionColor);
}
// =======================================================================
// function : SetShadingAspect
// purpose :
// =======================================================================
-void PrsMgr_PresentationManager::SetShadingAspect (const Handle(PrsMgr_PresentableObject)& thePrsObject,
+void PrsMgr_PresentationManager::SetShadingAspect (const Handle(PrsMgr_PresentableObject)& thePrsObj,
const Handle(Prs3d_ShadingAspect)& theShadingAspect,
const Standard_Integer theMode)
{
- if (HasPresentation (thePrsObject, theMode))
+ const Handle(PrsMgr_Presentation) aPrs = Presentation (thePrsObj, theMode);
+ if (!aPrs.IsNull())
{
- Presentation (thePrsObject, theMode)->SetShadingAspect (theShadingAspect);
+ aPrs->SetShadingAspect (theShadingAspect);
}
}
NameOfColor from Quantity,
Location from TopLoc,
PresentationManager from PrsMgr,
- PresentationManager3d from PrsMgr
+ PresentationManager3d from PrsMgr,
+ ZLayerId from Graphic3d
raises
NoSuchObject from Standard
-- it always return FALSE.
SetZLayer ( me : mutable;
- thePrsMgr : PresentationManager from PrsMgr;
- theLayerId : Integer from Standard )
+ theLayerId : ZLayerId from Graphic3d )
is virtual;
---Purpose: Set Z layer ID and update all presentations.
//function : SetZLayer
//purpose :
//=======================================================================
-void SelectMgr_EntityOwner::SetZLayer
- (const Handle(PrsMgr_PresentationManager)&,
- const Standard_Integer)
+void SelectMgr_EntityOwner::SetZLayer (const Standard_Integer )
{
+ //
}
SequenceOfOwner from SelectMgr,
NameOfColor from Quantity,
EntityOwner from SelectMgr,
- TransModeFlags from Graphic3d
+ TransModeFlags from Graphic3d,
+ ZLayerId from Graphic3d
raises
NotImplemented from Standard
GetSelectPresentation( me: mutable;
TheMgr: PresentationManager3d from PrsMgr ) returns Presentation from Prs3d is static;
-
+
SetZLayer ( me : mutable;
- thePrsMgr : PresentationManager from PrsMgr;
- theLayerId : Integer from Standard )
+ theLayerId : ZLayerId from Graphic3d )
is redefined virtual;
- ---Purpose: Set Z layer ID and update all presentations of
- -- the selectable object. The layer can be set only for displayed object.
- -- If all object presentations are removed, the layer ID will be set to
- -- default value when computing presentation. The layers mechanism allows
- -- drawing objects in higher layers in overlay of objects in lower layers.
+ ---Purpose: Set Z layer ID and update all presentations of the selectable object.
+ -- The layers mechanism allows drawing objects in higher layers in overlay of objects in lower layers.
fields
myHilightPrs : Presentation from Prs3d;
end SelectableObject;
-
-
-
//function : SetZLayer
//purpose :
//=======================================================================
-void SelectMgr_SelectableObject::SetZLayer
- (const Handle(PrsMgr_PresentationManager)& thePrsMgr,
- const Standard_Integer theLayerId)
+void SelectMgr_SelectableObject::SetZLayer (const Graphic3d_ZLayerId theLayerId)
{
- if (thePrsMgr.IsNull())
- return;
-
// update own presentations
- PrsMgr_PresentableObject::SetZLayer (thePrsMgr, theLayerId);
+ PrsMgr_PresentableObject::SetZLayer (theLayerId);
// update selection presentations
if (!mySelectionPrs.IsNull())
Handle(SelectMgr_EntityOwner) aOwner =
Handle(SelectMgr_EntityOwner)::DownCast (aEntity->OwnerId());
if (!aOwner.IsNull())
- aOwner->SetZLayer (thePrsMgr, theLayerId);
+ aOwner->SetZLayer (theLayerId);
}
}
}
PresentationManager3d from PrsMgr,
NameOfColor from Quantity,
Drawer from Prs3d,
- Shape from StdSelect
+ Shape from StdSelect,
+ ZLayerId from Graphic3d
is
ResetLocation(me:mutable) is redefined;
SetZLayer ( me : mutable;
- thePrsMgr : PresentationManager from PrsMgr;
- theLayerId : Integer from Standard )
+ theLayerId : ZLayerId from Graphic3d )
is redefined virtual;
---Purpose: Set Z layer ID and update all presentations.
#else
Standard_Integer M = (myCurMode==-1) ? aMode:myCurMode;
#endif
+ Handle(SelectMgr_SelectableObject) aSel = Selectable();
if (myFromDecomposition)
{
// do the update flag check
}
// generate new presentable shape
- if(myPrsSh.IsNull())
+ if (myPrsSh.IsNull())
+ {
myPrsSh = new StdSelect_Shape (myShape);
-
- // highlight and set layer
- PM->Highlight (myPrsSh, M);
- Handle(SelectMgr_SelectableObject) aSel = Selectable();
+ }
if (!aSel.IsNull())
{
- Standard_Integer aLayer = aSel->GetZLayer (PM);
- if (aLayer >= 0)
- PM->SetZLayer (myPrsSh, aLayer);
+ myPrsSh->SetZLayer (aSel->ZLayer());
}
+
+ // highlight and set layer
+ PM->Highlight (myPrsSh, M);
+
}
else
{
if(myPrsSh.IsNull())
- PM->Highlight(Selectable(),M);
+ PM->Highlight(aSel,M);
else
PM->Highlight(myPrsSh,M);
}
#else
Standard_Integer M = (myCurMode==-1) ? aMode:myCurMode;
#endif
+ Handle(SelectMgr_SelectableObject) aSel = Selectable();
if (myFromDecomposition)
{
// do the update flag check
else
myPrsSh = new StdSelect_Shape(myShape);
}
-
- // highlight with color and set layer
- PM->Color (myPrsSh, aCol, M);
- Handle(SelectMgr_SelectableObject) aSel = Selectable();
if (!aSel.IsNull())
{
- Standard_Integer aLayer = aSel->GetZLayer (PM);
- if (aLayer >= 0)
- PM->SetZLayer (myPrsSh, aLayer);
+ myPrsSh->SetZLayer (aSel->ZLayer());
}
+
+ // highlight with color and set layer
+ PM->Color (myPrsSh, aCol, M);
}
else
{
if(myPrsSh.IsNull())
- PM->Color(Selectable(),aCol,M);
+ PM->Color(aSel, aCol, M);
else
PM->Color(myPrsSh,aCol,M);
}
//function : SetZLayer
//purpose :
//=======================================================================
-void StdSelect_BRepOwner::SetZLayer
- (const Handle(PrsMgr_PresentationManager)& thePrsMgr,
- const Standard_Integer theLayerId)
+void StdSelect_BRepOwner::SetZLayer (const Graphic3d_ZLayerId theLayerId)
{
if (!myPrsSh.IsNull())
- thePrsMgr->SetZLayer (myPrsSh, theLayerId);
+ {
+ myPrsSh->SetZLayer (theLayerId);
+ }
}
void V3d_CircularGrid::Display ()
{
- myStructure->Display (1);
+ myStructure->SetDisplayPriority (1);
+ myStructure->Display();
}
void V3d_CircularGrid::Erase () const
}
Handle(Graphic3d_Group) gnopick = MyGraphicStructure1->NewGroup();
- MyGraphicStructure1->SetPick(Standard_False);
X0 = MyTarget.X();
Y0 = MyTarget.Y();
aPrims->AddVertex ( aSize,-aSize, anOffset);
aGroup->AddPrimitiveArray(aPrims);
- myGraphicStructure->Display(0);
+ myGraphicStructure->SetDisplayPriority (0);
+ myGraphicStructure->Display();
Update();
}
}
Handle(Graphic3d_Group) gnopick = MyGraphicStructure1->NewGroup();
- MyGraphicStructure1->SetPick(Standard_False);
X0 = MyTarget.X();
Y0 = MyTarget.Y();
}
Handle(Graphic3d_Group) gnopick = MyGraphicStructure1->NewGroup();
- MyGraphicStructure1->SetPick(Standard_False);
X0 = MyTarget.X();
Y0 = MyTarget.Y();
void V3d_RectangularGrid::Display ()
{
- myStructure->Display (1);
+ myStructure->SetDisplayPriority (1);
+ myStructure->Display();
}
void V3d_RectangularGrid::Erase () const
}
Handle(Graphic3d_Group) gnopick = MyGraphicStructure1->NewGroup();
- MyGraphicStructure1->SetPick(Standard_False);
X0 = MyTarget.X();
Y0 = MyTarget.Y();
#include <Aspect_Window.hxx>
#include <Graphic3d_AspectFillArea3d.hxx>
#include <Graphic3d_AspectLine3d.hxx>
+#include <Graphic3d_CStructure.hxx>
#include <Graphic3d_TextureRoot.hxx>
#include <Image_AlienPixMap.hxx>
#include <Prs3d_ShadingAspect.hxx>
Standard_Integer theArgNb,
const char** theArgVec)
{
- const Handle(AIS_InteractiveContext)& aCtx = ViewerTest::GetAISContext();
- ViewerTest_AutoUpdater anUpdateTool (aCtx, ViewerTest::CurrentView());
+ const Handle(AIS_InteractiveContext)& aCtx = ViewerTest::GetAISContext();
+ const Handle(V3d_View)& aView = ViewerTest::CurrentView();
+ ViewerTest_AutoUpdater anUpdateTool (aCtx, aView);
if (aCtx.IsNull())
{
std::cerr << "Error: no active view!\n";
}
case BndAction_Show:
{
- thePrs->Presentation()->BoundBox();
+ Handle(Graphic3d_Structure) aPrs = thePrs->Presentation();
+ aPrs->CStructure()->HighlightColor.r = 0.988235f;
+ aPrs->CStructure()->HighlightColor.g = 0.988235f;
+ aPrs->CStructure()->HighlightColor.b = 0.988235f;
+ aPrs->CStructure()->HighlightWithBndBox (aPrs, Standard_True);
break;
}
case BndAction_Print:
// Parse input arguments
ViewerTest_AutoUpdater anUpdateTool (aCtx, ViewerTest::CurrentView());
- Standard_Integer isMutable = -1;
- Standard_Boolean toDisplayLocal = Standard_False;
+ Standard_Integer isMutable = -1;
+ Graphic3d_ZLayerId aZLayer = Graphic3d_ZLayerId_UNKNOWN;
+ Standard_Boolean toDisplayLocal = Standard_False;
+ Standard_Boolean toReDisplay = Standard_False;
TColStd_SequenceOfAsciiString aNamesOfDisplayIO;
+ AIS_DisplayStatus aDispStatus = AIS_DS_None;
for (Standard_Integer anArgIter = 1; anArgIter < theArgNb; ++anArgIter)
{
const TCollection_AsciiString aName = theArgVec[anArgIter];
{
isMutable = 1;
}
+ else if (aNameCase == "-neutral")
+ {
+ aDispStatus = AIS_DS_Displayed;
+ }
+ else if (aNameCase == "-immediate"
+ || aNameCase == "-top")
+ {
+ aZLayer = Graphic3d_ZLayerId_Top;
+ }
+ else if (aNameCase == "-topmost")
+ {
+ aZLayer = Graphic3d_ZLayerId_Topmost;
+ }
+ else if (aNameCase == "-osd"
+ || aNameCase == "-toposd")
+ {
+ aZLayer = Graphic3d_ZLayerId_TopOSD;
+ }
+ else if (aNameCase == "-layer")
+ {
+ if (++anArgIter >= theArgNb)
+ {
+ std::cerr << "Error: wrong syntax at " << aName << ".\n";
+ return 1;
+ }
+
+ TCollection_AsciiString aValue (theArgVec[anArgIter]);
+ if (!aValue.IsIntegerValue())
+ {
+ std::cerr << "Error: wrong syntax at " << aName << ".\n";
+ return 1;
+ }
+
+ aZLayer = aValue.IntegerValue();
+ }
else if (aNameCase == "-local")
{
+ aDispStatus = AIS_DS_Temporary;
toDisplayLocal = Standard_True;
}
+ else if (aNameCase == "-redisplay")
+ {
+ toReDisplay = Standard_True;
+ }
else
{
aNamesOfDisplayIO.Append (aName);
{
aShape->SetMutable (isMutable == 1);
}
+ if (aZLayer != Graphic3d_ZLayerId_UNKNOWN)
+ {
+ aShape->SetZLayer (aZLayer);
+ }
GetMapOfAIS().Bind (aShape, aName);
- aCtx->Display (aShape, Standard_False);
+
+ Standard_Integer aDispMode = aShape->HasDisplayMode()
+ ? aShape->DisplayMode()
+ : (aShape->AcceptDisplayMode (aCtx->DisplayMode())
+ ? aCtx->DisplayMode()
+ : 0);
+ Standard_Integer aSelMode = aShape->HasSelectionMode() && aCtx->GetAutoActivateSelection()
+ ? aShape->SelectionMode() : -1;
+
+ aCtx->Display (aShape, aDispMode, aSelMode,
+ Standard_False, aShape->AcceptShapeDecomposition(),
+ aDispStatus);
}
continue;
}
{
aShape->SetMutable (isMutable == 1);
}
+ if (aZLayer != Graphic3d_ZLayerId_UNKNOWN)
+ {
+ aShape->SetZLayer (aZLayer);
+ }
+
+ Standard_Integer aDispMode = aShape->HasDisplayMode()
+ ? aShape->DisplayMode()
+ : (aShape->AcceptDisplayMode (aCtx->DisplayMode())
+ ? aCtx->DisplayMode()
+ : 0);
+ Standard_Integer aSelMode = aShape->HasSelectionMode() && aCtx->GetAutoActivateSelection()
+ ? aShape->SelectionMode() : -1;
if (aShape->Type() == AIS_KOI_Datum)
{
else
{
theDI << "Display " << aName.ToCString() << "\n";
- // get the Shape from a name
- TopoDS_Shape aNewShape = GetShapeFromName (aName.ToCString());
// update the Shape in the AIS_Shape
+ TopoDS_Shape aNewShape = GetShapeFromName (aName.ToCString());
Handle(AIS_Shape) aShapePrs = Handle(AIS_Shape)::DownCast(aShape);
if (!aShapePrs.IsNull())
{
+ if (!aShapePrs->Shape().IsEqual (aNewShape))
+ {
+ toReDisplay = Standard_True;
+ }
aShapePrs->Set (aNewShape);
}
- aCtx->Redisplay (aShape, Standard_False);
- aCtx->Display (aShape, Standard_False);
+ if (toReDisplay)
+ {
+ aCtx->Redisplay (aShape, Standard_False);
+ }
+
+ aCtx->Display (aShape, aDispMode, aSelMode,
+ Standard_False, aShape->AcceptShapeDecomposition(),
+ aDispStatus);
}
}
else if (anObj->IsKind (STANDARD_TYPE (NIS_InteractiveObject)))
return 1;
}
+ for (ViewerTest_DoubleMapIteratorOfDoubleMapOfInteractiveAndName anObjIter (GetMapOfAIS());
+ anObjIter.More(); anObjIter.Next())
+ {
+ Handle(PrsMgr_PresentableObject) aPrs = Handle(PrsMgr_PresentableObject)::DownCast (anObjIter.Key1());
+ if (aPrs.IsNull()
+ || aPrs->ZLayer() != aDelId)
+ {
+ continue;
+ }
+ aPrs->SetZLayer (Graphic3d_ZLayerId_Default);
+ }
+
di << "Z layer " << aDelId << " has been removed\n";
}
else if (anOp == "get")
#include <Standard_TypeDef.hxx>
#include <NCollection_Map.hxx>
+#include <Graphic3d_ZLayerId.hxx>
#include <Graphic3d_ZLayerSettings.hxx>
-typedef NCollection_DataMap<Standard_Integer, Graphic3d_ZLayerSettings> Visual3d_MapOfZLayerSettings;
+typedef NCollection_DataMap<Graphic3d_ZLayerId, Graphic3d_ZLayerSettings> Visual3d_MapOfZLayerSettings;
#endif // _Visual3d_MapOfZLayerSettings_HeaderFile
MapOfStructure from Graphic3d,
Camera_Handle from Graphic3d,
+ ZLayerId from Graphic3d,
ZLayerSettings from Graphic3d,
ContextView from Visual3d,
AsciiString from TCollection,
ExtendedString from TCollection,
CGraduatedTrihedron from Graphic3d,
+ TypeOfStructure from Graphic3d,
PixMap from Image,
Box from Bnd
-- Category: Private methods
----------------------------
- AcceptDisplay ( me;
- AStructure : Structure from Graphic3d )
- returns TypeOfAnswer from Visual3d
- is static private;
- ---Level: Internal
- ---Purpose: Is it possible to display the structure
- -- <AStructure> in the view <me> ?
- ---Category: Private methods
+ acceptDisplay ( me;
+ theStructType : TypeOfStructure from Graphic3d )
+ returns TypeOfAnswer from Visual3d
+ is static private;
+ ---Level: Internal
+ ---Purpose: Is it possible to display the structure in the view?
ReCompute ( me : mutable;
AStructure : Structure from Graphic3d );
SetZLayerSettings ( me : mutable;
- theLayerId : Integer from Standard;
+ theLayerId : ZLayerId from Graphic3d;
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 )
+ theLayerId : ZLayerId from Graphic3d )
is static private;
---Purpose: Add a new top-level Z layer to the view with ID
-- <theLayerId>. The z layer mechanism allows to display
-- display of graphics in all views.
RemoveZLayer ( me : mutable;
- theLayerId : Integer from Standard )
+ theLayerId : ZLayerId from Graphic3d )
is static private;
---Purpose: Remove z layer from the view by its ID.
ChangeZLayer ( me : mutable;
theStructure : Structure from Graphic3d;
- theLayerId : Integer from Standard )
+ theLayerId : ZLayerId from Graphic3d )
is static private;
---Purpose: Change Z layer of already displayed structure in the view.
#include <Graphic3d_Vertex.hxx>
#include <Visual3d_DepthCueingDefinitionError.hxx>
#include <Visual3d_Light.hxx>
-#include <Visual3d_HSequenceOfView.hxx>
#include <Visual3d_ZClippingDefinitionError.hxx>
#include <OSD.hxx>
#include <TColStd_HArray2OfReal.hxx>
// It is not necessary to warn ViewManager as this structure should not disappear from
// the list of structures displayed in it.
NCollection_Sequence<Handle(Graphic3d_Structure)> aStructs;
- for (Graphic3d_MapIteratorOfMapOfStructure aStructIter (myStructsDisplayed); aStructIter.More(); aStructIter.Next())
+ for (Graphic3d_MapOfStructure::Iterator aStructIter (myStructsDisplayed); aStructIter.More(); aStructIter.Next())
{
const Handle(Graphic3d_Structure)& aStruct = aStructIter.Key();
- const Visual3d_TypeOfAnswer anAnswer = AcceptDisplay (aStruct);
+ const Visual3d_TypeOfAnswer anAnswer = acceptDisplay (aStruct->Visual());
if (anAnswer == Visual3d_TOA_NO
|| anAnswer == Visual3d_TOA_COMPUTE)
{
continue;
}
- const Visual3d_TypeOfAnswer anAnswer = AcceptDisplay (aStruct);
+ const Visual3d_TypeOfAnswer anAnswer = acceptDisplay (aStruct->Visual());
if (anAnswer == Visual3d_TOA_YES
|| anAnswer == Visual3d_TOA_COMPUTE)
{
return;
}
- for (Graphic3d_MapIteratorOfMapOfStructure aStructIter (myStructsDisplayed); aStructIter.More(); aStructIter.Next())
+ for (Graphic3d_MapOfStructure::Iterator aStructIter (myStructsDisplayed); aStructIter.More(); aStructIter.Next())
{
theStructures.Add (aStructIter.Key());
}
}
// If the structure can be displayed in the new context of the view, it is displayed.
- const Visual3d_TypeOfAnswer anAnswer = AcceptDisplay (aStruct);
+ const Visual3d_TypeOfAnswer anAnswer = acceptDisplay (aStruct->Visual());
if (anAnswer == Visual3d_TOA_YES
|| anAnswer == Visual3d_TOA_COMPUTE)
{
continue;
}
- const Visual3d_TypeOfAnswer anAnswer = AcceptDisplay (aStruct);
+ const Visual3d_TypeOfAnswer anAnswer = acceptDisplay (aStruct->Visual());
if (anAnswer == Visual3d_TOA_YES
|| anAnswer == Visual3d_TOA_COMPUTE)
{
}
// ========================================================================
-// function : AcceptDisplay
+// function : acceptDisplay
// purpose :
// ========================================================================
-Visual3d_TypeOfAnswer Visual3d_View::AcceptDisplay (const Handle(Graphic3d_Structure)& theStruct) const
+Visual3d_TypeOfAnswer Visual3d_View::acceptDisplay (const Graphic3d_TypeOfStructure theStructType) const
{
- const Visual3d_TypeOfVisualization ViewType = MyContext.Visualization();
- switch (theStruct->Visual())
+ const Visual3d_TypeOfVisualization aViewType = MyContext.Visualization();
+ switch (theStructType)
{
case Graphic3d_TOS_ALL:
{
}
case Graphic3d_TOS_SHADING:
{
- return ViewType == Visual3d_TOV_SHADING
+ return aViewType == Visual3d_TOV_SHADING
? Visual3d_TOA_YES
: Visual3d_TOA_NO;
}
case Graphic3d_TOS_WIREFRAME:
{
- return ViewType == Visual3d_TOV_WIREFRAME
+ return aViewType == Visual3d_TOV_WIREFRAME
? Visual3d_TOA_YES
: Visual3d_TOA_NO;
}
case Graphic3d_TOS_COMPUTED:
{
- return (ViewType == Visual3d_TOV_SHADING || ViewType == Visual3d_TOV_WIREFRAME)
+ return (aViewType == Visual3d_TOV_SHADING || aViewType == Visual3d_TOV_WIREFRAME)
? Visual3d_TOA_COMPUTE
: Visual3d_TOA_NO;
}
if (theIsSingleView)
{
- Handle(Visual3d_HSequenceOfView) aViews = myViewManager->DefinedView();
-
- for (int i=1;i<=aViews->Length();i++)
+ const Visual3d_SequenceOfView& aViews = myViewManager->DefinedViews();
+ for (Standard_Integer aViewIter = 1; aViewIter <= aViews.Length(); ++aViewIter)
{
- if (aViews->Value(i).Access() != this)
+ const Handle(Visual3d_View)& aView = aViews.Value (aViewIter);
+ if (aView.Access() != this)
{
- aViews->Value(i)->EraseImmediate (theStructure);
+ aView->EraseImmediate (theStructure);
}
}
}
- myGraphicDriver->DisplayImmediateStructure (MyCView, *theStructure->CStructure());
+ myGraphicDriver->DisplayImmediateStructure (MyCView, theStructure);
return Standard_True;
}
return Standard_False;
}
- for (Graphic3d_MapIteratorOfMapOfStructure anIter (myImmediateStructures); anIter.More(); anIter.Next())
+ for (Graphic3d_MapOfStructure::Iterator aStructIter (myImmediateStructures); aStructIter.More(); aStructIter.Next())
{
- myGraphicDriver->EraseImmediateStructure (MyCView, *anIter.Key()->CStructure());
+ myGraphicDriver->EraseImmediateStructure (MyCView, *aStructIter.Key()->CStructure());
}
myImmediateStructures.Clear();
return Standard_True;
anIndex = 0;
}
- Visual3d_TypeOfAnswer anAnswer = AcceptDisplay (theStruct);
+ Visual3d_TypeOfAnswer anAnswer = acceptDisplay (theStruct->Visual());
if (anAnswer == Visual3d_TOA_NO)
{
return;
if (anAnswer == Visual3d_TOA_YES)
{
- if (IsDisplayed (theStruct))
+ if (!myStructsDisplayed.Add (theStruct))
{
return;
}
theStruct->CalculateBoundBox();
- myGraphicDriver->DisplayStructure (MyCView, *theStruct->CStructure(), theStruct->DisplayPriority());
- myStructsDisplayed.Add (theStruct);
+ myGraphicDriver->DisplayStructure (MyCView, theStruct, theStruct->DisplayPriority());
Update (theUpdateMode);
return;
}
const Handle(Graphic3d_Structure)& anOldStruct = myStructsComputed.Value (anIndex);
if (anOldStruct->HLRValidation())
{
- // Case COMPUTED valid
- // to be displayed
- if (!IsDisplayed (theStruct))
+ // Case COMPUTED valid, to be displayed
+ if (!myStructsDisplayed.Add (theStruct))
{
- myStructsDisplayed.Add (theStruct);
- myGraphicDriver->DisplayStructure (MyCView, *anOldStruct->CStructure(), theStruct->DisplayPriority());
- Update (theUpdateMode);
+ return;
}
+
+ myGraphicDriver->DisplayStructure (MyCView, anOldStruct, theStruct->DisplayPriority());
+ Update (theUpdateMode);
return;
}
else
const Standard_Integer aNewIndex = HaveTheSameOwner (theStruct);
if (aNewIndex != 0)
{
- // Case of COMPUTED invalid, WITH a valid of replacement
- // to be displayed
- if (!IsDisplayed (theStruct))
+ // Case of COMPUTED invalid, WITH a valid of replacement; to be displayed
+ if (!myStructsDisplayed.Add (theStruct))
{
- const Handle(Graphic3d_Structure)& aNewStruct = myStructsComputed.Value (aNewIndex);
- myStructsComputed.SetValue (anIndex, aNewStruct);
- myStructsDisplayed.Add (theStruct);
- myGraphicDriver->DisplayStructure (MyCView, *aNewStruct->CStructure(), theStruct->DisplayPriority());
- Update (theUpdateMode);
+ return;
}
+
+ const Handle(Graphic3d_Structure)& aNewStruct = myStructsComputed.Value (aNewIndex);
+ myStructsComputed.SetValue (anIndex, aNewStruct);
+ myGraphicDriver->DisplayStructure (MyCView, aNewStruct, theStruct->DisplayPriority());
+ Update (theUpdateMode);
return;
}
else
{
// Case COMPUTED invalid, WITHOUT a valid of replacement
// COMPUTED is removed if displayed
- if (IsDisplayed (theStruct))
+ if (myStructsDisplayed.Contains (theStruct))
{
- myGraphicDriver->EraseStructure (MyCView, *anOldStruct->CStructure());
+ myGraphicDriver->EraseStructure (MyCView, anOldStruct);
}
}
}
else
{
aStruct->SetVisual (toComputeWireframe ? Graphic3d_TOS_WIREFRAME : Graphic3d_TOS_SHADING);
- anAnswer = AcceptDisplay (aStruct);
+ anAnswer = acceptDisplay (aStruct->Visual());
}
if (theStruct->IsHighlighted())
{
- aStruct->SetHighlightColor (theStruct->HighlightColor());
- aStruct->GraphicHighlight (Aspect_TOHM_COLOR);
+ aStruct->Highlight (Aspect_TOHM_COLOR, theStruct->HighlightColor(), Standard_False);
}
// It is displayed only if the calculated structure
// has a proper type corresponding to the one of the view.
- if (anAnswer != Visual3d_TOA_NO)
+ if (anAnswer == Visual3d_TOA_NO)
{
- if (!IsDisplayed (theStruct))
- {
- myStructsDisplayed.Add (theStruct);
- }
- myGraphicDriver->DisplayStructure (MyCView, *aStruct->CStructure(), theStruct->DisplayPriority());
- Update (theUpdateMode);
+ return;
}
+
+ myStructsDisplayed.Add (theStruct);
+ myGraphicDriver->DisplayStructure (MyCView, aStruct, theStruct->DisplayPriority());
+
+ Update (theUpdateMode);
}
// ========================================================================
void Visual3d_View::Erase (const Handle(Graphic3d_Structure)& theStruct,
const Aspect_TypeOfUpdate theUpdateMode)
{
- if (IsDeleted()
- || !IsDisplayed (theStruct))
+ if ( IsDeleted()
+ || EraseImmediate (theStruct)
+ || !IsDisplayed (theStruct))
{
return;
}
- Visual3d_TypeOfAnswer anAnswer = AcceptDisplay (theStruct);
+ Visual3d_TypeOfAnswer anAnswer = acceptDisplay (theStruct->Visual());
if (!ComputedMode())
{
anAnswer = Visual3d_TOA_YES;
if (anAnswer != Visual3d_TOA_COMPUTE)
{
- myGraphicDriver->EraseStructure (MyCView, *theStruct->CStructure());
+ myGraphicDriver->EraseStructure (MyCView, theStruct);
}
else if (anAnswer == Visual3d_TOA_COMPUTE
&& myIsInComputedMode)
if (anIndex != 0)
{
const Handle(Graphic3d_Structure)& aCompStruct = myStructsComputed.ChangeValue (anIndex);
- myGraphicDriver->EraseStructure (MyCView, *aCompStruct->CStructure());
+ myGraphicDriver->EraseStructure (MyCView, aCompStruct);
}
}
myStructsDisplayed.Remove (theStruct);
if (anIndex != 0)
{
const Handle(Graphic3d_Structure)& aCompStruct = myStructsComputed.ChangeValue (anIndex);
- aCompStruct->SetHighlightColor (theStruct->HighlightColor());
- aCompStruct->GraphicHighlight (theMethod);
+ aCompStruct->Highlight (theMethod, theStruct->HighlightColor(), Standard_False);
}
}
&& !theStruct->CStructure()->IsForHighlight
&& !theStruct->CStructure()->IsInfinite)
{
- const Standard_Integer aLayerId = theStruct->GetZLayer();
+ const Graphic3d_ZLayerId aLayerId = theStruct->GetZLayer();
myGraphicDriver->InvalidateBVHData (MyCView, aLayerId);
}
}
// ========================================================================
Standard_Boolean Visual3d_View::ContainsFacet() const
{
- return ContainsFacet (myStructsDisplayed);
+ for (Graphic3d_MapOfStructure::Iterator aStructIter (myStructsDisplayed); aStructIter.More(); aStructIter.Next())
+ {
+ if (aStructIter.Key()->ContainsFacet())
+ {
+ return Standard_True;
+ }
+ }
+ return Standard_False;
}
// ========================================================================
return Standard_False;
}
+//! Auxiliary method for MinMaxValues() method
+inline void addStructureBndBox (const Handle(Graphic3d_Structure)& theStruct,
+ const Standard_Boolean theToIgnoreInfiniteFlag,
+ Bnd_Box& theBndBox)
+{
+ if (!theStruct->IsVisible())
+ {
+ return;
+ }
+ else if (theStruct->IsInfinite()
+ && !theToIgnoreInfiniteFlag)
+ {
+ // XMin, YMin .... ZMax are initialized by means of infinite line data
+ const Bnd_Box aBox = theStruct->MinMaxValues (Standard_False);
+ if (!aBox.IsWhole()
+ && !aBox.IsVoid())
+ {
+ theBndBox.Add (aBox);
+ }
+ return;
+ }
+
+ // Only non-empty and non-infinite structures
+ // are taken into account for calculation of MinMax
+ if (theStruct->IsEmpty()
+ || theStruct->TransformPersistenceMode() != Graphic3d_TMF_None)
+ {
+ return;
+ }
+
+ // "FitAll" operation ignores object with transform persistence parameter
+ const Bnd_Box aBox = theStruct->MinMaxValues (theToIgnoreInfiniteFlag);
+ theBndBox.Add (aBox);
+}
+
// ========================================================================
// function : MinMaxValues
// purpose :
// ========================================================================
Bnd_Box Visual3d_View::MinMaxValues (const Standard_Boolean theToIgnoreInfiniteFlag) const
{
- return MinMaxValues (myStructsDisplayed,
- theToIgnoreInfiniteFlag);
+ Bnd_Box aResult = MinMaxValues (myStructsDisplayed, theToIgnoreInfiniteFlag);
+ Bnd_Box anImmediate = MinMaxValues (myImmediateStructures, theToIgnoreInfiniteFlag);
+ aResult.Add (anImmediate);
+ return aResult;
}
// ========================================================================
// purpose :
// ========================================================================
Bnd_Box Visual3d_View::MinMaxValues (const Graphic3d_MapOfStructure& theSet,
- const Standard_Boolean theToIgnoreInfiniteFlag) const
+ const Standard_Boolean theToIgnoreInfiniteFlag) const
{
Bnd_Box aResult;
- if (theSet.IsEmpty ())
- {
- // Return an empty box.
- return aResult;
- }
- Graphic3d_MapIteratorOfMapOfStructure anIterator (theSet);
- for (anIterator.Initialize (theSet); anIterator.More(); anIterator.Next())
+ for (Graphic3d_MapIteratorOfMapOfStructure aStructIter (theSet); aStructIter.More(); aStructIter.Next())
{
- const Handle(Graphic3d_Structure)& aStructure = anIterator.Key();
-
- if (!aStructure->IsVisible())
- continue;
-
- if (aStructure->IsInfinite() && !theToIgnoreInfiniteFlag)
+ const Handle(Graphic3d_Structure)& aStructure = aStructIter.Key();
+ if (!aStructIter.Value()->IsVisible())
{
- //XMin, YMin .... ZMax are initialized by means of infinite line data
- Bnd_Box aBox = aStructure->MinMaxValues (Standard_False);
- if (!aBox.IsWhole() && !aBox.IsVoid())
- {
- aResult.Add (aBox);
- }
+ continue;
}
- // Only non-empty and non-infinite structures
- // are taken into account for calculation of MinMax
- if ((!aStructure->IsInfinite() || theToIgnoreInfiniteFlag) && !aStructure->IsEmpty())
- {
- Bnd_Box aBox = aStructure->MinMaxValues (theToIgnoreInfiniteFlag);
-
- /* ABD 29/10/04 Transform Persistence of Presentation( pan, zoom, rotate ) */
- //"FitAll" operation ignores object with transform persitence parameter
- if(aStructure->TransformPersistenceMode() == Graphic3d_TMF_None )
- {
- aResult.Add (aBox);
- }
- }
+ addStructureBndBox (aStructure, theToIgnoreInfiniteFlag, aResult);
}
return aResult;
}
// Remove structures that were calculated for the previous orientation.
// Recalculation of new structures.
NCollection_Sequence<Handle(Graphic3d_Structure)> aStructsSeq;
- for (Graphic3d_MapIteratorOfMapOfStructure aStructIter (myStructsDisplayed); aStructIter.More(); aStructIter.Next())
+ for (Graphic3d_MapOfStructure::Iterator aStructIter (myStructsDisplayed); aStructIter.More(); aStructIter.Next())
{
- const Visual3d_TypeOfAnswer anAnswer = AcceptDisplay (aStructIter.Key());
+ const Visual3d_TypeOfAnswer anAnswer = acceptDisplay (aStructIter.Key()->Visual());
if (anAnswer == Visual3d_TOA_COMPUTE)
{
aStructsSeq.Append (aStructIter.Key()); // if the structure was calculated, it is recalculated
return;
}
- const Visual3d_TypeOfAnswer anAnswer = AcceptDisplay (theStruct);
+ const Visual3d_TypeOfAnswer anAnswer = acceptDisplay (theStruct->Visual());
if (anAnswer != Visual3d_TOA_COMPUTE)
{
return;
if (theStruct->IsHighlighted())
{
- aCompStruct->SetHighlightColor (theStruct->HighlightColor());
- aCompStruct->GraphicHighlight (Aspect_TOHM_COLOR);
+ aCompStruct->Highlight (Aspect_TOHM_COLOR, theStruct->HighlightColor(), Standard_False);
}
- // The previous calculation is removed and the new one is dislayed
- myGraphicDriver->EraseStructure (MyCView, *aCompStructOld->CStructure());
- myGraphicDriver->DisplayStructure (MyCView, *aCompStruct->CStructure(), theStruct->DisplayPriority());
+ // The previous calculation is removed and the new one is displayed
+ myGraphicDriver->EraseStructure (MyCView, aCompStructOld);
+ myGraphicDriver->DisplayStructure (MyCView, aCompStruct, theStruct->DisplayPriority());
// why not just replace existing items?
//myStructsToCompute.ChangeValue (anIndex) = theStruct;
myIsInComputedMode = theMode;
if (!myIsInComputedMode)
{
- for (Graphic3d_MapIteratorOfMapOfStructure aStructIter (myStructsDisplayed); aStructIter.More(); aStructIter.Next())
+ for (Graphic3d_MapOfStructure::Iterator aStructIter (myStructsDisplayed); aStructIter.More(); aStructIter.Next())
{
const Handle(Graphic3d_Structure)& aStruct = aStructIter.Key();
- const Visual3d_TypeOfAnswer anAnswer = AcceptDisplay (aStruct);
+ const Visual3d_TypeOfAnswer anAnswer = acceptDisplay (aStruct->Visual());
if (anAnswer != Visual3d_TOA_COMPUTE)
{
continue;
if (anIndex != 0)
{
const Handle(Graphic3d_Structure)& aStructComp = myStructsComputed.Value (anIndex);
- myGraphicDriver->EraseStructure (MyCView, *aStructComp->CStructure());
- myGraphicDriver->DisplayStructure (MyCView, *aStruct->CStructure(), aStruct->DisplayPriority());
+ myGraphicDriver->EraseStructure (MyCView, aStructComp);
+ myGraphicDriver->DisplayStructure (MyCView, aStruct, aStruct->DisplayPriority());
}
}
return;
}
- for (Graphic3d_MapIteratorOfMapOfStructure aDispStructIter (myStructsDisplayed); aDispStructIter.More(); aDispStructIter.Next())
+ for (Graphic3d_MapOfStructure::Iterator aDispStructIter (myStructsDisplayed); aDispStructIter.More(); aDispStructIter.Next())
{
- Handle(Graphic3d_Structure) aStruct = aDispStructIter.Key();
- const Visual3d_TypeOfAnswer anAnswer = AcceptDisplay (aStruct);
+ Handle(Graphic3d_Structure) aStruct = aDispStructIter.Key();
+ const Visual3d_TypeOfAnswer anAnswer = acceptDisplay (aStruct->Visual());
if (anAnswer != Visual3d_TOA_COMPUTE)
{
continue;
const Standard_Integer anIndex = IsComputed (aStruct);
if (anIndex != 0)
{
- myGraphicDriver->EraseStructure (MyCView, *aStruct->CStructure());
- myGraphicDriver->DisplayStructure (MyCView, *(myStructsComputed.Value (anIndex)->CStructure()), aStruct->DisplayPriority());
+ myGraphicDriver->EraseStructure (MyCView, aStruct);
+ myGraphicDriver->DisplayStructure (MyCView, myStructsComputed.Value (anIndex), aStruct->DisplayPriority());
Display (aStruct, Aspect_TOU_WAIT);
if (aStruct->IsHighlighted())
const Handle(Graphic3d_Structure)& aCompStruct = myStructsComputed.Value (anIndex);
if (!aCompStruct->IsHighlighted())
{
- aCompStruct->SetHighlightColor (aStruct->HighlightColor());
- aCompStruct->GraphicHighlight (Aspect_TOHM_COLOR);
+ aCompStruct->Highlight (Aspect_TOHM_COLOR, aStruct->HighlightColor(), Standard_False);
}
}
}
if (aStruct->IsHighlighted())
{
- aCompStruct->SetHighlightColor (aStruct->HighlightColor());
- aCompStruct->GraphicHighlight (Aspect_TOHM_COLOR);
+ aCompStruct->Highlight (Aspect_TOHM_COLOR, aStruct->HighlightColor(), Standard_False);
}
Standard_Boolean hasResult = Standard_False;
myStructsComputed .Append (aCompStruct);
}
- myGraphicDriver->EraseStructure (MyCView, *aStruct->CStructure());
- myGraphicDriver->DisplayStructure (MyCView, *aCompStruct->CStructure(), aStruct->DisplayPriority());
+ myGraphicDriver->EraseStructure (MyCView, aStruct);
+ myGraphicDriver->DisplayStructure (MyCView, aCompStruct, aStruct->DisplayPriority());
}
}
Update (myViewManager->UpdateMode());
// function : SetZLayerSettings
// purpose :
// =======================================================================
-void Visual3d_View::SetZLayerSettings (const Standard_Integer theLayerId,
+void Visual3d_View::SetZLayerSettings (const Graphic3d_ZLayerId theLayerId,
const Graphic3d_ZLayerSettings& theSettings)
{
myGraphicDriver->SetZLayerSettings (MyCView, theLayerId, theSettings);
// function : AddZLayer
// purpose :
// =======================================================================
-void Visual3d_View::AddZLayer (const Standard_Integer theLayerId)
+void Visual3d_View::AddZLayer (const Graphic3d_ZLayerId theLayerId)
{
myGraphicDriver->AddZLayer (MyCView, theLayerId);
}
// function : RemoveZLayer
// purpose :
// =======================================================================
-void Visual3d_View::RemoveZLayer (const Standard_Integer theLayerId)
+void Visual3d_View::RemoveZLayer (const Graphic3d_ZLayerId theLayerId)
{
myGraphicDriver->RemoveZLayer (MyCView, theLayerId);
}
// purpose :
// =======================================================================
void Visual3d_View::ChangeZLayer (const Handle(Graphic3d_Structure)& theStructure,
- const Standard_Integer theLayerId)
+ const Graphic3d_ZLayerId theLayerId)
{
myGraphicDriver->ChangeZLayer (*(theStructure->CStructure()), MyCView, theLayerId);
}
---Purpose: This class allows the definition of a manager to
-- which the views are associated.
-- It allows them to be globally manipulated.
- -- It activates the pick.
uses
CView from Graphic3d,
Vector from Graphic3d,
+ ZLayerId from Graphic3d,
ZLayerSettings from Graphic3d,
MapOfZLayerSettings from Visual3d,
- ContextPick from Visual3d,
Layer from Visual3d,
SequenceOfView from Visual3d,
HSequenceOfView from Visual3d,
---Purpose: Returns the group of views activated in the visualiser <me>.
---Category: Inquire methods
- DefinedView ( me )
- returns HSequenceOfView from Visual3d
- is static;
+ DefinedViews (me)
+ returns SequenceOfView from Visual3d
+ is static;
+ ---C++: return const &
---Level: Internal
---Purpose: Returns the group of views defined in the visualiser <me>.
---Category: Inquire methods
---Purpose: Release a unique ID of the view reserved for the view on its creation.
is static;
- -------------------------------------------------
- -- Summary of Pick Input --
- -- --
- -- Picking returns information about an --
- -- object pointed to on the display. --
- -- --
- -- To be picked, a structure must be : --
- -- --
- -- Visible --
- -- Within the pick aperture --
- -- Pickable as determined by the method --
- -- Graphic3d_Structure::SetPick --
- -- --
- -- To insert a Pick Identification use the --
- -- method Graphic3d_Group::SetPickId --
- -- --
- -- The pick search order tends to select the --
- -- "top" object : --
- -- High to low structure display priority --
- -- Most recently displayed to least --
- -- recently displayed. --
- -------------------------------------------------
-
------------------------------
-- Category: Redefined methods
------------------------------
ChangeZLayer ( me : mutable;
theStructure : Structure from Graphic3d;
- theLayerId : Integer from Standard )
+ theLayerId : ZLayerId from Graphic3d )
is redefined static;
---Purpose: Change Z layer for structure. The layer mechanism allows
-- to display structures in higher layers in overlay of structures in
-- lower layers.
- GetZLayer ( me;
- theStructure : Structure from Graphic3d )
- returns Integer from Standard is redefined static;
- ---Purpose: Get Z layer ID assigned for the structure.
-
SetZLayerSettings ( me : mutable;
- theLayerId : Integer from Standard;
+ theLayerId : ZLayerId from Graphic3d;
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 )
+ theLayerId : ZLayerId from Graphic3d )
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 )
+ theLayerId : out ZLayerId from Graphic3d )
returns Boolean from Standard is redefined static;
---Purpose: Add a new top-level Z layer and get its ID as
-- <theLayerId> value. The method returns Standard_False if the layer
-- structures in higher layers in overlay of structures in lower layers.
RemoveZLayer ( me : mutable;
- theLayerId : Integer from Standard )
+ theLayerId : ZLayerId from Graphic3d )
returns Boolean from Standard is redefined static;
---Purpose: Remove Z layer with ID <theLayerId>. Method returns
-- Standard_False if the layer can not be removed or doesn't exists.
-- controlled view. This method used on the view initialization to
-- make the layer lists consistent.
- getZLayerGenId ( myclass )
- ---Purpose: Returns global instance of z layer ids generator.
- ---C++: return &
- returns GenId from Aspect is protected;
-
-
Clear ( me : mutable;
AStructure : Structure from Graphic3d;
WithDestruction : Boolean from Standard )
MyZBufferAuto : Boolean from Standard;
-- Z layer indexes
- myLayerIds : MapOfInteger from TColStd;
- myLayerSeq : SequenceOfInteger from TColStd;
+ myZLayerGenId : GenId from Aspect;
+ myLayerIds : MapOfInteger from TColStd;
+ myLayerSeq : SequenceOfInteger from TColStd;
myMapOfZLayerSettings : MapOfZLayerSettings from Visual3d;
Graphic3d_StructureManager (theDriver),
MyDefinedView (),
MyViewGenId (View_IDMIN+((View_IDMIN+View_IDMAX)/(Visual3d_ViewManager::Limit ()))*(Visual3d_ViewManager::CurrentId ()-1),View_IDMIN+((View_IDMIN+View_IDMAX)/(Visual3d_ViewManager::Limit ()))*Visual3d_ViewManager::CurrentId ()-1),
-MyZBufferAuto (Standard_False)
+MyZBufferAuto (Standard_False),
+myZLayerGenId (1, IntegerLast())
{
- // default layer is always presented in display layer sequence
- // it can not be removed
- myLayerIds.Add (0);
- myLayerSeq.Append (0);
-
MyGraphicDriver = theDriver;
- myMapOfZLayerSettings.Bind (0, Graphic3d_ZLayerSettings());
+
+ // default layers are always presented in display layer sequence it can not be removed
+ Graphic3d_ZLayerSettings aDefSettings;
+ aDefSettings.Flags = Graphic3d_ZLayerDepthTest
+ | Graphic3d_ZLayerDepthWrite;
+ aDefSettings.IsImmediate = false;
+ myLayerIds.Add (Graphic3d_ZLayerId_Default);
+ myLayerSeq.Append (Graphic3d_ZLayerId_Default);
+ myMapOfZLayerSettings.Bind (Graphic3d_ZLayerId_Default, aDefSettings);
+
+ Graphic3d_ZLayerSettings aTopSettings;
+ aTopSettings.Flags = Graphic3d_ZLayerDepthTest
+ | Graphic3d_ZLayerDepthWrite;
+ aTopSettings.IsImmediate = true;
+ myLayerIds.Add (Graphic3d_ZLayerId_Top);
+ myLayerSeq.Append (Graphic3d_ZLayerId_Top);
+ myMapOfZLayerSettings.Bind (Graphic3d_ZLayerId_Top, aTopSettings);
+
+ Graphic3d_ZLayerSettings aTopmostSettings;
+ aTopmostSettings.Flags = Graphic3d_ZLayerDepthTest
+ | Graphic3d_ZLayerDepthWrite
+ | Graphic3d_ZLayerDepthClear;
+ aTopmostSettings.IsImmediate = true;
+ myLayerIds.Add (Graphic3d_ZLayerId_Topmost);
+ myLayerSeq.Append (Graphic3d_ZLayerId_Topmost);
+ myMapOfZLayerSettings.Bind (Graphic3d_ZLayerId_Topmost, aTopmostSettings);
+
+ Graphic3d_ZLayerSettings anOsdSettings;
+ anOsdSettings.Flags = 0;
+ anOsdSettings.IsImmediate = true;
+ myLayerIds.Add (Graphic3d_ZLayerId_TopOSD);
+ myLayerSeq.Append (Graphic3d_ZLayerId_TopOSD);
+ myMapOfZLayerSettings.Bind (Graphic3d_ZLayerId_TopOSD, anOsdSettings);
}
//-Destructors
// clear all structures whilst views are alive for correct GPU memory management
MyDisplayedStructure.Clear();
MyHighlightedStructure.Clear();
- MyPickStructure.Clear();
// clear list of managed views
MyDefinedView.Clear();
}
MyHighlightedStructure.Remove (AStructure);
- MyPickStructure.Remove (AStructure);
}
void Visual3d_ViewManager::Erase () {
}
#endif
-Handle(Visual3d_HSequenceOfView) Visual3d_ViewManager::DefinedView () const
+const Visual3d_SequenceOfView& Visual3d_ViewManager::DefinedViews() const
{
- Handle (Visual3d_HSequenceOfView) SG = new Visual3d_HSequenceOfView();
-
- for(int i=1; i<=MyDefinedView.Length(); i++)
- {
- SG->Append(MyDefinedView.Value(i));
- }
-
- return (SG);
+ return MyDefinedView;
}
Standard_Boolean Visual3d_ViewManager::ViewExists (const Handle(Aspect_Window)& AWindow, Graphic3d_CView& TheCView) const
//=======================================================================
void Visual3d_ViewManager::ChangeZLayer (const Handle(Graphic3d_Structure)& theStructure,
- const Standard_Integer theLayerId)
+ const Graphic3d_ZLayerId theLayerId)
{
- if (!myLayerIds.Contains (theLayerId))
+ if (!myLayerIds.Contains (theLayerId)
+ || !MyDisplayedStructure.Contains (theStructure))
+ {
return;
+ }
// change display layer for structure in all views
- if (MyDisplayedStructure.Contains (theStructure))
+ for (int aViewIter = 1; aViewIter <= MyDefinedView.Length(); ++aViewIter)
{
- for(int i=1; i<=MyDefinedView.Length(); i++)
- {
- (MyDefinedView.Value(i))->ChangeZLayer(theStructure, theLayerId);
- }
+ MyDefinedView.Value (aViewIter)->ChangeZLayer (theStructure, theLayerId);
}
-
- // tell graphic driver to update the structure's display layer
- MyGraphicDriver->ChangeZLayer (*(theStructure->CStructure()), theLayerId);
-}
-
-//=======================================================================
-//function : GetZLayer
-//purpose :
-//=======================================================================
-
-Standard_Integer Visual3d_ViewManager::GetZLayer (const Handle(Graphic3d_Structure)& theStructure) const
-{
- return MyGraphicDriver->GetZLayer (*theStructure->CStructure ());
}
//=======================================================================
//function : SetZLayerSettings
//purpose :
//=======================================================================
-void Visual3d_ViewManager::SetZLayerSettings (const Standard_Integer theLayerId,
+void Visual3d_ViewManager::SetZLayerSettings (const Graphic3d_ZLayerId theLayerId,
const Graphic3d_ZLayerSettings& theSettings)
{
// tell all managed views to set zlayer settings
//function : ZLayerSettings
//purpose :
//=======================================================================
-Graphic3d_ZLayerSettings Visual3d_ViewManager::ZLayerSettings (const Standard_Integer theLayerId)
+Graphic3d_ZLayerSettings Visual3d_ViewManager::ZLayerSettings (const Graphic3d_ZLayerId theLayerId)
{
if (!myLayerIds.Contains (theLayerId))
{
//purpose :
//=======================================================================
-Standard_Boolean Visual3d_ViewManager::AddZLayer (Standard_Integer& theLayerId)
+Standard_Boolean Visual3d_ViewManager::AddZLayer (Graphic3d_ZLayerId& theLayerId)
{
try
{
OCC_CATCH_SIGNALS
- theLayerId = getZLayerGenId ().Next ();
- myLayerIds.Add (theLayerId);
+ theLayerId = myZLayerGenId.Next();
+ myLayerIds.Add (theLayerId);
myLayerSeq.Append (theLayerId);
}
catch (Aspect_IdentDefinitionError)
//purpose :
//=======================================================================
-Standard_Boolean Visual3d_ViewManager::RemoveZLayer (const Standard_Integer theLayerId)
+Standard_Boolean Visual3d_ViewManager::RemoveZLayer (const Graphic3d_ZLayerId theLayerId)
{
- if (!myLayerIds.Contains (theLayerId) || theLayerId == 0)
+ if (!myLayerIds.Contains (theLayerId)
+ || theLayerId < myZLayerGenId.Lower()
+ || theLayerId > myZLayerGenId.Upper())
+ {
return Standard_False;
+ }
// tell all managed views to remove display layers
for(int i=1; i<=MyDefinedView.Length(); i++)
myMapOfZLayerSettings.UnBind (theLayerId);
- myLayerIds.Remove (theLayerId);
- getZLayerGenId ().Free (theLayerId);
+ myLayerIds.Remove (theLayerId);
+ myZLayerGenId.Free (theLayerId);
return Standard_True;
}
theLayerSeq.Assign (myLayerSeq);
}
-//=======================================================================
-//function : getZLayerGenId
-//purpose :
-//=======================================================================
-
-Aspect_GenId& Visual3d_ViewManager::getZLayerGenId ()
-{
- static Aspect_GenId aGenId (1, IntegerLast());
- return aGenId;
-}
-
//=======================================================================
//function : InstallZLayers
//purpose :
// order: the new layers are always appended to the end of the list
// inside of view, while layer remove operation doesn't affect the order.
// Starting from second layer : no need to change the default z layer.
- for (Standard_Integer aSeqIdx = 2; aSeqIdx <= myLayerSeq.Length (); aSeqIdx++)
+ for (Standard_Integer aSeqIdx = 1; aSeqIdx <= myLayerSeq.Length(); ++aSeqIdx)
{
- Standard_Integer aLayerID = myLayerSeq.Value (aSeqIdx);
- theView->RemoveZLayer (aLayerID);
- theView->AddZLayer (aLayerID);
+ const Graphic3d_ZLayerId aLayerID = myLayerSeq.Value (aSeqIdx);
+ const Graphic3d_ZLayerSettings& aSettings = myMapOfZLayerSettings.Find (aLayerID);
+ if (aLayerID < myZLayerGenId.Lower()
+ || aLayerID > myZLayerGenId.Upper())
+ {
+ theView->SetZLayerSettings (aLayerID, aSettings);
+ continue;
+ }
+
+ theView->RemoveZLayer (aLayerID);
+ theView->AddZLayer (aLayerID);
+ theView->SetZLayerSettings (aLayerID, aSettings);
}
}
--- /dev/null
+puts "========"
+puts "OCC24394"
+puts "========"
+puts ""
+#################################################################################
+# Visualization - implement more general way for rendering of immediate objects
+#################################################################################
+
+box b1 0 0 0 1 2 3
+box b2 3 0 0 2 3 1
+vinit View1
+vclear
+vaxo
+vsetdispmode 1
+vdisplay b1
+vdisplay -top b1
+vfit
+
+set only_screen 1
tclean res
if { [string compare $command "shading"] == 0 } {
- vinit
- vdisplay res
+ vinit View1
+ vdisplay -noupdate -redisplay res
vsetdispmode res 1
vfit
}