Remove unused flag "DoubleBuf".
Remove Visual3d_TransientManager "class" (functionality moved to PrsMgr_PresentationManager).
Remove unused "Add" immediate mode.
V3d_View class - remove methods ::TransientManagerBeginDraw(), ::TransientManagerClearDraw(), ::TransientManagerBeginAddDraw().
Add method ::RedrawImmediate() to redraw only immediate presentations.
OpenGl_GraphicDriver - add methods ::DisplayImmediateStructure(), ::EraseImmediateStructure(), ::RedrawImmediate().
OpenGl_View - manage list of immediate structures.
OpenGl_Workspace - automate rendering workflow of immediate + persistent layers.
Merge PrsMgr_PresentationManager3d class into PrsMgr_PresentationManager.
Mark PrsMgr_PresentationManager3d as alias to PrsMgr_PresentationManager to simplify porting.
Prs3d_Presentation - remove unused field myStruct.
Prs3d_PresentationShadow - shadow link to existing presentation with custom attributes.
Graphic3d_Structure::Highlight() - do not register undisplayed structure in structure manager.
AIS_InteractiveContext, AIS_LocalContext add flag to prevent view update into methods
::MoveTo(), ::HilightNextDetected(), ::HilightPreviousDetected()
to allow update of customized immediate structures before redraw but after ::MoveTo().
Remove unused method AIS_InteractiveContext::Drag().
StdSelect_ViewerSelector3d do not user immediate mode in methods
::DisplayAreas(), ::ClearAreas(), ::ClearSensitive(), ::DisplaySensitive(),
GridEcho - update value in StdSelect_ViewerSelector3d::Pick() instead of V3d_View::Compute().
Do not use global variable for GridEcho vertex.
Redraw immediate mode not within GridEcho but at AIS_InteractiveContext, AIS_LocalContext layer.
V3d_View::ToPixMap() - disable autoupdate during FitAll.
Avoid Redraw() into FBO without ImmediateModeDrawToFront flag.
PrsMgr_PresentationManager stores list of temporary immediate presentations,
automatically cleared within BeginImmediateMode() call.
Methods with ambiguous names have been renamed
(new names now consistent with pre-existed method names in AIS_LocalContext class):
- BeginDraw -> BeginImmediateDraw
- EndDraw -> EndImmediateDraw
Remove now useless Remove() method (and ImmediateRemove() in AIS).
Visual3d_View now stores map of displayed immediate presentations.
ViewerTest_EventManager - eliminate double redraw in selection methods.
Fix warning
-- GG : 25/05/00 BUC60688 Add SetSensitivity() methods
-- VSV : 22/05/01 Add Selection by polygon
-- SAV : Add DisplayFromCollector() method
--- GG : IMP150501 CADPAK_V2 Add Drag() method
-- ZSV : IMP160701 Add InitDetected(),MoreDetected(),NextDetected(),
-- DetectedCurrentShape(),DetectedCurrentObject()
-- methods
---Category: GRAPHIC DETECTION / SELECTION
-
- MoveTo(me:mutable;XPix,YPix:Integer from Standard;aView:View from V3d)
+ MoveTo (me : mutable;
+ theXPix, theYPix : Integer from Standard;
+ theView : View from V3d;
+ theToRedrawOnUpdate : Boolean from Standard = Standard_True)
returns StatusOfDetection from AIS;
----Purpose: Relays mouse position in pixels XPix and YPix to the
--- interactive context selectors. This is done by the view
--- aView passing this position to the main viewer and updating it.
--- Functions in both Neutral Point and local contexts.
-
+ ---Purpose: Relays mouse position in pixels theXPix and theYPix to the interactive context selectors.
+ -- This is done by the view theView passing this position to the main viewer and updating it.
+ -- Functions in both Neutral Point and local contexts.
+ -- If theToRedrawOnUpdate is set to false, callee should call RedrawImmediate() to highlight detected object.
HasNextDetected(me) returns Boolean from Standard;
---Purpose: returns True if other entities were detected in the
-- last mouse detection
- HilightNextDetected(me:mutable;aView:View from V3d)
+ HilightNextDetected (me : mutable;
+ theView : View from V3d;
+ theToRedrawImmediate : Boolean from Standard = Standard_True)
returns Integer from Standard;
---Purpose: if more than 1 object is detected by the selector,
-- only the "best" owner is hilighted at the mouse position.
-- have been hilighted , the next call will hilight
-- the first one again
- HilightPreviousDetected(me:mutable;aView:View from V3d)
+ HilightPreviousDetected (me : mutable;
+ theView : View from V3d;
+ theToRedrawImmediate : Boolean from Standard = Standard_True)
returns Integer from Standard;
---Purpose: Same as previous methods in reverse direction...
-- 4.EndImmediateDraw() draws all the stored objects...
--
- BeginImmediateDraw (me:mutable) returns Boolean from Standard;
+ BeginImmediateDraw (me : mutable)
+ returns Boolean from Standard;
---Purpose: initializes the list of presentations to be displayed
-- returns False if No Local COnte
- ImmediateAdd (me:mutable;anIObj:InteractiveObject from AIS;aMode:Integer from Standard=0)
+ ImmediateAdd (me : mutable;
+ theObj : InteractiveObject from AIS;
+ theMode : Integer from Standard = 0)
returns Boolean from Standard;
---Purpose: returns True if <anIObj> has been stored in the list.
- ImmediateRemove (me:mutable;anIObj:InteractiveObject from AIS;aMode:Integer from Standard=0)
- returns Boolean from Standard;
- ---Purpose: returns True if <anIObj> has been removed from the list.
-
- EndImmediateDraw(me:mutable;aView : View from V3d;DoubleBuf:Boolean from Standard=Standard_False)
+ EndImmediateDraw (me : mutable;
+ theView : View from V3d)
returns Boolean from Standard;
---Purpose: returns True if the immediate display has been done.
- EndImmediateDraw(me:mutable;DoubleBuf:Boolean from Standard=Standard_False)
+
+ EndImmediateDraw (me : mutable)
returns Boolean from Standard;
- ---Purpose: Uses the First Active View of Main Viewer!!!
+ ---Purpose: Uses the First Active View of Main Viewer!
-- returns True if the immediate display has been done.
IsImmediateModeOn(me) returns Boolean from Standard;
- Drag ( me : mutable;
- aView: View from V3d;
- anObject: InteractiveObject from AIS;
- aTranformation: Transformation from Geom;
- postConcatenate: Boolean from Standard = Standard_False;
- update: Boolean from Standard = Standard_False;
- zBuffer: Boolean from Standard = Standard_False)
- is static;
- ---Level: Public
- ---Purpose: Transforms the current presentation of the object <anObject>
- -- using the transient graphic space of the view <aView> in
- -- immediat mode graphics.
- ---Warning: When <update> is TRUE, then the view is redrawn with ALL
- -- transformed presentations.
- -- When <zBuffer> is TRUE all transient graphic are drawn
- -- using zbuffer activity.
- -- Note that when <update> is TRUE the view is cleared and redrawn
- -- and soforth the Z buffer is always activated therefore the <zBuffer>
- -- parameter is ignored in this case.
-
-
---Category: Activation/Deactivation of Selection Modes.
-
SetAutomaticHilight(me:mutable;aStatus:Boolean);
---Purpose:
-- Sets the highlighting status aStatus of detected and
#define BUC60814 //GG_300101 Idem UKI60826
-#define IMP150501 //GG_150501 CADPAK_V2 Add Drag() method
-
-#define IMP160701 //ZSV Add InitDetected(),MoreDetected(),NextDetected(),
-// DetectedCurrentShape(),DetectedCurrentObject()
-// methods
-
#define OCC138 //VTN Avoding infinit loop in AddOrRemoveCurrentObject method.
#define OCC9657
#include <AIS_GlobalStatus.hxx>
#include <AIS_Shape.hxx>
+#include <Aspect_Grid.hxx>
+
#include <V3d_Light.hxx>
#include <V3d_PositionalLight.hxx>
#include <V3d_SpotLight.hxx>
#include <SelectMgr_Selection.hxx>
#include <SelectBasics_SensitiveEntity.hxx>
-#ifdef IMP150501
-#include <Visual3d_TransientManager.hxx>
#include <Prs3d_Presentation.hxx>
-#endif
#ifdef OCC9657
#include <AIS_MapOfInteractive.hxx>
}
#endif
*/
+
//=======================================================================
//function : MoveTo
-//purpose :
+//purpose :
//=======================================================================
-
-AIS_StatusOfDetection AIS_InteractiveContext::MoveTo(const Standard_Integer XPix,
- const Standard_Integer YPix,
- const Handle(V3d_View)& aView)
+AIS_StatusOfDetection AIS_InteractiveContext::MoveTo (const Standard_Integer theXPix,
+ const Standard_Integer theYPix,
+ const Handle(V3d_View)& theView,
+ const Standard_Boolean theToRedrawOnUpdate)
{
- if(HasOpenedContext()){
+ if (HasOpenedContext())
+ {
myWasLastMain = Standard_True;
- return myLocalContexts(myCurLocalIndex)->MoveTo(XPix,YPix,aView);
+ return myLocalContexts (myCurLocalIndex)->MoveTo (theXPix, theYPix, theView, theToRedrawOnUpdate);
}
-#ifdef IMP160701
- //Nullify class members storing information about detected AIS objects.
myAISCurDetected = 0;
myAISDetectedSeq.Clear();
-#endif
- // OCC11904 - local variables made non-static - it looks and works better like this
- Handle (PrsMgr_PresentationManager3d) pmgr ;
- Handle (StdSelect_ViewerSelector3d) selector;
- Standard_Boolean ismain = Standard_True,UpdVwr = Standard_False;
-
- // Preliminaires
- if(aView->Viewer()== myMainVwr) {
- pmgr = myMainPM;
- selector=myMainSel;
- myLastPicked = myLastinMain;
- myWasLastMain = Standard_True;
- }
- else
+ if (theView->Viewer() != myMainVwr)
+ {
return AIS_SOD_Error;
-
- AIS_StatusOfDetection TheStat(AIS_SOD_Nothing);
-
-
+ }
+
+ // preliminaires
+ myLastPicked = myLastinMain;
+ myWasLastMain = Standard_True;
+ AIS_StatusOfDetection aStatus = AIS_SOD_Nothing;
+ Standard_Boolean toUpdateViewer = Standard_False;
+
// allonzy
- selector->Pick(XPix, YPix, aView);
-
-#ifdef IMP160701
- //filling of myAISDetectedSeq sequence storing information about detected AIS objects
- // (the objects must be AIS_Shapes).
- Handle(SelectMgr_EntityOwner) anEntityOwner;
- const Standard_Integer NbDetected = selector->NbPicked();
- for(Standard_Integer i_detect = 1;i_detect<=NbDetected;i_detect++)
+ myMainSel->Pick (theXPix, theYPix, theView);
+
+ // filling of myAISDetectedSeq sequence storing information about detected AIS objects
+ // (the objects must be AIS_Shapes)
+ const Standard_Integer aDetectedNb = myMainSel->NbPicked();
+ for (Standard_Integer aDetIter = 1; aDetIter <= aDetectedNb; ++aDetIter)
{
- anEntityOwner = selector->Picked(i_detect);
- if(!anEntityOwner.IsNull())
- if(myFilters->IsOk(anEntityOwner))
- {
- Handle(AIS_InteractiveObject) anObj =
- Handle(AIS_InteractiveObject)::DownCast(anEntityOwner->Selectable());
- if(!Handle(AIS_Shape)::DownCast(anObj).IsNull())
- myAISDetectedSeq.Append(anObj);
- }
+ Handle(SelectMgr_EntityOwner) anOwner = myMainSel->Picked (aDetIter);
+ if (anOwner.IsNull()
+ || !myFilters->IsOk (anOwner))
+ {
+ continue;
+ }
+
+ Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast (anOwner->Selectable());
+ if (!Handle(AIS_Shape)::DownCast (anObj).IsNull())
+ {
+ myAISDetectedSeq.Append (anObj);
+ }
}
-#endif
- selector->Init();
- if ( selector->More() )
+ myMainSel->Init();
+ if (myMainSel->More())
{
- if ( HasOpenedContext() )
+ // does nothing if previously detected object is equal to the current one
+ if (myMainSel->OnePicked()->Selectable() == myLastPicked)
{
- if ( !myFilters->IsOk( selector->OnePicked() ) )
- return AIS_SOD_AllBad;
- else
- if ( !myLocalContexts( myCurLocalIndex )->Filter()->IsOk( selector->OnePicked() ) )
- return AIS_SOD_AllBad;
- }
-
- // Does nothing if previously detected object is equal to the current one
- if ( selector->OnePicked()->Selectable() == myLastPicked )
return AIS_SOD_OnlyOneDetected;
+ }
// Previously detected object is unhilighted if it is not selected or hilighted
// with selection color if it is selected. Such highlighting with selection color
// method call. As result it is necessary to rehighligt it with mySelectionColor.
if (!myLastPicked.IsNull())
{
- Standard_Integer aHiMod = myLastPicked->HasHilightMode() ? myLastPicked->HilightMode() : 0;
+ const Standard_Integer aHiMod = myLastPicked->HasHilightMode() ? myLastPicked->HilightMode() : 0;
if (myLastPicked->State() != 1)
{
- pmgr->Unhighlight (myLastPicked, aHiMod);
- UpdVwr = Standard_True;
+ myMainPM->Unhighlight (myLastPicked, aHiMod);
+ toUpdateViewer = Standard_True;
}
else if (myToHilightSelected)
{
- pmgr->Color (myLastPicked, mySelectionColor, aHiMod);
- UpdVwr = Standard_True;
+ myMainPM->Color (myLastPicked, mySelectionColor, aHiMod);
+ toUpdateViewer = Standard_True;
}
}
- // Initialize myLastPicked field with currently detected object
- myLastPicked = Handle(AIS_InteractiveObject)::DownCast (selector->OnePicked()->Selectable());
+ // initialize myLastPicked field with currently detected object
+ myLastPicked = Handle(AIS_InteractiveObject)::DownCast (myMainSel->OnePicked()->Selectable());
+ myLastinMain = myLastPicked;
- if ( ismain )
- myLastinMain = myLastPicked;
-
- // Highlight detected object if it is not selected or myToHilightSelected flag is true
- if (!myLastPicked.IsNull()
- && (myLastPicked->State()!= 1 || myToHilightSelected))
+ // highlight detected object if it is not selected or myToHilightSelected flag is true
+ if (!myLastPicked.IsNull())
{
- Standard_Integer aHiMod = myLastPicked->HasHilightMode() ? myLastPicked->HilightMode() : 0;
- pmgr->Color (myLastPicked, myHilightColor, aHiMod);
- UpdVwr = Standard_True;
- }
+ if (myLastPicked->State() != 1 || myToHilightSelected)
+ {
+ const Standard_Integer aHiMod = myLastPicked->HasHilightMode() ? myLastPicked->HilightMode() : 0;
+ myMainPM->Color (myLastPicked, myHilightColor, aHiMod);
+ toUpdateViewer = Standard_True;
+ }
- if (!myLastPicked.IsNull()
- && myLastPicked->State() == 1)
- {
- TheStat = AIS_SOD_Selected;
+ if (myLastPicked->State() == 1)
+ {
+ aStatus = AIS_SOD_Selected;
+ }
}
}
else
{
- // Previously detected object is unhilighted if it is not selected or hilighted
- // with selection color if it is selected.
- TheStat = AIS_SOD_Nothing;
+ // previously detected object is unhilighted if it is not selected or hilighted
+ // with selection color if it is selected
+ aStatus = AIS_SOD_Nothing;
if (!myLastPicked.IsNull())
{
Standard_Integer aHiMod = myLastPicked->HasHilightMode() ? myLastPicked->HilightMode() : 0;
if (myLastPicked->State() != 1)
{
- pmgr->Unhighlight (myLastPicked, aHiMod);
- UpdVwr = Standard_True;
+ myMainPM->Unhighlight (myLastPicked, aHiMod);
+ toUpdateViewer = Standard_True;
}
else if (myToHilightSelected)
{
- pmgr->Color (myLastPicked, mySelectionColor, aHiMod);
- UpdVwr = Standard_True;
+ myMainPM->Color (myLastPicked, mySelectionColor, aHiMod);
+ toUpdateViewer = Standard_True;
}
}
- if ( ismain )
- myLastinMain.Nullify();
+ myLastinMain.Nullify();
}
-
- if(UpdVwr) aView->Viewer()->Update();
+
+ if (toUpdateViewer)
+ {
+ if (theToRedrawOnUpdate)
+ {
+ theView->Viewer()->Update();
+ }
+ else
+ {
+ theView->Viewer()->Invalidate();
+ }
+ }
+
myLastPicked.Nullify();
-
- mylastmoveview = aView;
- return TheStat;
+ mylastmoveview = theView;
+ return aStatus;
}
//=======================================================================
//=======================================================================
//function : HilightNextDetected
-//purpose :
+//purpose :
//=======================================================================
-Standard_Integer AIS_InteractiveContext::HilightNextDetected(const Handle(V3d_View)& V)
+Standard_Integer AIS_InteractiveContext::HilightNextDetected (const Handle(V3d_View)& theView,
+ const Standard_Boolean theToRedrawImmediate)
{
- if(!HasOpenedContext())
- return 0;
- return myLocalContexts(myCurLocalIndex)->HilightNextDetected(V);
+ return HasOpenedContext()
+ ? myLocalContexts (myCurLocalIndex)->HilightNextDetected (theView, theToRedrawImmediate)
+ : 0;
}
//=======================================================================
//function : HilightNextDetected
-//purpose :
+//purpose :
//=======================================================================
-Standard_Integer AIS_InteractiveContext::HilightPreviousDetected(const Handle(V3d_View)& V)
+Standard_Integer AIS_InteractiveContext::HilightPreviousDetected (const Handle(V3d_View)& theView,
+ const Standard_Boolean theToRedrawImmediate)
{
- if(!HasOpenedContext())
- return 0;
- return myLocalContexts(myCurLocalIndex)->HilightPreviousDetected(V);
+ return HasOpenedContext()
+ ? myLocalContexts (myCurLocalIndex)->HilightPreviousDetected (theView, theToRedrawImmediate)
+ : 0;
}
-#ifdef IMP150501
-void AIS_InteractiveContext::Drag(
- const Handle(V3d_View)& aView,
- const Handle(AIS_InteractiveObject)& anObject,
- const Handle(Geom_Transformation)& aTrsf,
- const Standard_Boolean postConcatenate,
- const Standard_Boolean update,
- const Standard_Boolean zBuffer) {
-
- if( anObject.IsNull() || aView.IsNull() ) return;
-
- if( update ) {
- anObject->SetTransformation(aTrsf,postConcatenate,Standard_True);
- aView->Update();
- } else if( Visual3d_TransientManager::BeginDraw(aView->View(),
- zBuffer,Standard_False) ) {
- Handle(Prs3d_Presentation) P = anObject->Presentation();
- if( !P.IsNull() ) {
- if( postConcatenate ) P->Multiply(aTrsf);
- else P->Transform(aTrsf);
- Visual3d_TransientManager::DrawStructure(P);
- }
- Visual3d_TransientManager::EndDraw(Standard_True);
- }
-}
-#endif
-
-#ifdef IMP160701
//=======================================================================
//function : InitDetected
//purpose :
else
return aBad;
}
-#endif
return NbCleared;
}
-
//=======================================================================
//function : IsImmediateModeOn
-//purpose :
+//purpose :
//=======================================================================
+
Standard_Boolean AIS_InteractiveContext::IsImmediateModeOn() const
{
if(!HasOpenedContext()) return Standard_False;
return myLocalContexts(myCurLocalIndex)->IsImmediateModeOn();
}
-Standard_Boolean AIS_InteractiveContext::BeginImmediateDraw()
-{
- if(HasOpenedContext())
- return myLocalContexts(myCurLocalIndex)->BeginImmediateDraw();
- return Standard_False;
-}
-
//=======================================================================
-//function : ImmediateAdd
-//purpose :
+//function : BeginImmediateDraw
+//purpose :
//=======================================================================
-Standard_Boolean AIS_InteractiveContext::ImmediateAdd(const Handle(AIS_InteractiveObject)& anIObj,
- const Standard_Integer AMode)
-{
- if(HasOpenedContext()){
- return myLocalContexts(myCurLocalIndex)->ImmediateAdd(anIObj,AMode);}
- return Standard_False;
+Standard_Boolean AIS_InteractiveContext::BeginImmediateDraw()
+{
+ return HasOpenedContext()
+ && myLocalContexts (myCurLocalIndex)->BeginImmediateDraw();
}
//=======================================================================
-//function : ImmediateRemove
-//purpose :
+//function : ImmediateAdd
+//purpose :
//=======================================================================
-Standard_Boolean AIS_InteractiveContext::ImmediateRemove(const Handle(AIS_InteractiveObject)& anIObj,
- const Standard_Integer aMode)
+Standard_Boolean AIS_InteractiveContext::ImmediateAdd (const Handle(AIS_InteractiveObject)& theObj,
+ const Standard_Integer theMode)
{
- if(HasOpenedContext())
- return myLocalContexts(myCurLocalIndex)->ImmediateRemove(anIObj,aMode);
- return Standard_False;
+ return HasOpenedContext()
+ && myLocalContexts (myCurLocalIndex)->ImmediateAdd (theObj, theMode);
}
//=======================================================================
//function : EndImmediateDraw
-//purpose :
+//purpose :
//=======================================================================
-Standard_Boolean AIS_InteractiveContext::EndImmediateDraw(const Handle(V3d_View)& aView,
- const Standard_Boolean DoubleBuf)
+Standard_Boolean AIS_InteractiveContext::EndImmediateDraw (const Handle(V3d_View)& theView)
{
- if(HasOpenedContext())
- return myLocalContexts(myCurLocalIndex)->EndImmediateDraw(aView,DoubleBuf);
- return Standard_False;
-
+ return HasOpenedContext()
+ && myLocalContexts (myCurLocalIndex)->EndImmediateDraw (theView);
}
//=======================================================================
//function : EndImmediateDraw
-//purpose :
+//purpose :
//=======================================================================
-Standard_Boolean AIS_InteractiveContext::EndImmediateDraw(const Standard_Boolean DoubleBuf)
+Standard_Boolean AIS_InteractiveContext::EndImmediateDraw()
{
- if(HasOpenedContext()){
- Handle(V3d_View) V ;
- myMainVwr->InitActiveViews();
- if(myMainVwr->MoreActiveViews()){
- V = myMainVwr->ActiveView();
-
- return myLocalContexts(myCurLocalIndex)->EndImmediateDraw(V,DoubleBuf);
- }
+ if (!HasOpenedContext())
+ {
+ return Standard_False;
}
- return Standard_False;
-
+
+ myMainVwr->InitActiveViews();
+ if (!myMainVwr->MoreActiveViews())
+ {
+ return Standard_False;
+ }
+
+ Handle(V3d_View) aView = myMainVwr->ActiveView();
+ return myLocalContexts (myCurLocalIndex)->EndImmediateDraw (aView);
}
class TopoDS_Edge;
class TopoDS_Shape;
class Geom_Plane;
-class PrsMgr_PresentationManager3d;
class Prs3d_Presentation;
class Prs3d_Projector;
class Geom_Transformation;
AutomaticHilight(me) returns Boolean;
---C++: inline
-
-
---Category: THE SELECTION PROCESS
-
- MoveTo(me:mutable;Xpix,Ypix : Integer from Standard;
- aview : View from V3d)
+ MoveTo (me : mutable;
+ theXpix, theYpix : Integer from Standard;
+ theView : View from V3d;
+ theToRedrawImmediate : Boolean from Standard)
returns StatusOfDetection from AIS;
---Purpose: returns True if more than one entity
-- was detected at the last Mouse position.
- HilightNextDetected(me:mutable;aView:View from V3d)
+ HilightNextDetected (me : mutable;
+ theView : View from V3d;
+ theToRedrawImmediate : Boolean from Standard)
returns Integer from Standard;
---Purpose: returns True if last detected. the next detected will
-- be first one (endless loop)
- HilightPreviousDetected(me:mutable;aView:View from V3d)
+ HilightPreviousDetected (me : mutable;
+ theView : View from V3d;
+ theToRedrawImmediate : Boolean from Standard)
returns Integer from Standard;
-
UnhilightLastDetected(me:mutable;aView:View from V3d) returns Boolean from Standard;
---Purpose: returns True if something was done...
---Category: IMMEDIATE MODE
- BeginImmediateDraw (me:mutable) returns Boolean from Standard;
- ---Purpose: initializes the list of presentations to be displayed
- -- returns False if No Local COnte
-
- ImmediateAdd (me:mutable;anIObj:InteractiveObject from AIS;aMode:Integer from Standard=0)
+ BeginImmediateDraw (me : mutable)
returns Boolean from Standard;
- ---Purpose: returns True if <anIObj> has been stored in the list.
+ ---Purpose: Resets the transient list of presentations previously displayed in immediate mode
+ -- and begins accumulation of new list by following AddToImmediateList()/Color()/Highlight() calls.
+
+ ClearImmediateDraw (me : mutable) is virtual;
+ ---Purpose: Resets the transient list of presentations previously displayed in immediate mode.
- ImmediateRemove (me:mutable;anIObj:InteractiveObject from AIS;aMode:Integer from Standard=0)
+ ImmediateAdd (me : mutable;
+ theObj : InteractiveObject from AIS;
+ theMode : Integer from Standard = 0)
returns Boolean from Standard;
- ---Purpose: returns True if <anIObj> has been removed from the list.
+ ---Purpose: Stores presentation theMode of object theObj in the transient list of presentations to be displayed in immediate mode.
+ -- Will be taken in account in EndImmediateDraw method.
- EndImmediateDraw(me:mutable;aView : View from V3d;DoubleBuf:Boolean from Standard=Standard_False)
+ EndImmediateDraw (me : mutable;
+ theView : View from V3d)
returns Boolean from Standard;
- ---Purpose: returns True if the immediate display has been done.
+ ---Purpose: Allows rapid drawing of the view theView by avoiding an update of the whole background.
+
+ IsImmediateModeOn (me) returns Boolean from Standard;
+ ---Purpose: Returns true if Presentation Manager is accumulating transient list of presentations to be displayed in immediate mode.
- IsImmediateModeOn(me) returns Boolean from Standard;
-
---Category: INTERNAL METHODS;
UpdateConversion(me:mutable);
ActivateStandardModes(me:mutable;anObject: SelectableObject from SelectMgr;
WithProj: Boolean from Standard = Standard_True) is static private;
- ManageDetected(me:mutable;
- aPickOwner : EntityOwner from SelectMgr;
- aview : View from V3d) is static private;
+ manageDetected (me : mutable;
+ thePickOwner : EntityOwner from SelectMgr;
+ theView : View from V3d;
+ theToRedrawImmediate : Boolean from Standard) is static private;
DetectedIndex(me:mutable) returns Integer from Standard is static private;
---C++: inline
ClearSensitive(me:mutable;aView:View from V3d) is static;
-
-
MainSelector(me) returns any ViewerSelector3d from StdSelect;
---C++: inline
---C++: return const&
-
- HilightTriangle(me:mutable;Rank:Integer from Standard;aViou:View from V3d) is static private;
- ---Level: Internal
-
-
FindSelectedOwnerFromIO(me;anIObj:InteractiveObject from AIS)
returns EntityOwner from SelectMgr;
#include <AIS_Selection.hxx>
#include <V3d_Viewer.hxx>
#include <V3d_View.hxx>
-#include <Visual3d_TransientManager.hxx>
#include <Visual3d_View.hxx>
#ifdef ALE70590
//=======================================================================
//function : Terminate
-//purpose :
+//purpose :
//=======================================================================
-void AIS_LocalContext::Terminate( const Standard_Boolean updateviewer )
+void AIS_LocalContext::Terminate (const Standard_Boolean theToUpdate)
{
ClearDetected();
Clear();
AIS_Selection::Select();
AIS_Selection::Remove(mySelName.ToCString());
- // CLE
- // const Handle(V3d_Viewer)& Vwr = myCTX->CurrentViewer();
- Handle(V3d_Viewer) Vwr = myCTX->CurrentViewer();
- // ENDCLE
- Handle(V3d_View) curV;
- for(Vwr->InitActiveViews();Vwr->MoreActiveViews();Vwr->NextActiveViews()){
- curV = Vwr->ActiveView();
- Visual3d_TransientManager::ClearDraw( curV->View(), updateviewer );
+ Handle(V3d_Viewer) aViewer = myCTX->CurrentViewer();
+ for (aViewer->InitActiveViews(); aViewer->MoreActiveViews(); aViewer->NextActiveViews())
+ {
+ Handle(V3d_View) aView = aViewer->ActiveView();
+ aView->View()->ClearImmediate();
}
+ Handle(V3d_View) aDummyView;
+ myMainVS->ClearAreas (aDummyView);
+ myMainVS->ClearSensitive (aDummyView);
-#ifdef DEB
- Handle(V3d_View) BidV;
- myMainVS->ClearAreas(BidV);
- myMainVS->ClearSensitive(BidV);
-
-#endif
+ if (theToUpdate)
+ {
+ myCTX->UpdateCurrentViewer();
+ }
}
myMainVS->UpdateSort();
}
-
-
//=======================================================================
-//function : IMMEDIATE MODE
-//purpose :
+//function : BeginImmediateDraw
+//purpose :
//=======================================================================
-
-Standard_Boolean AIS_LocalContext::BeginImmediateDraw()
+Standard_Boolean AIS_LocalContext::BeginImmediateDraw()
{
- if(myMainPM->IsImmediateModeOn()){
- myMainPM->BeginDraw();
+ if (myMainPM->IsImmediateModeOn())
+ {
+ myMainPM->BeginImmediateDraw();
return Standard_True;
}
return Standard_False;
}
-
-Standard_Boolean AIS_LocalContext::ImmediateAdd(const Handle(AIS_InteractiveObject)& anIObj,
- const Standard_Integer aMode)
+//=======================================================================
+//function : ImmediateAdd
+//purpose :
+//=======================================================================
+Standard_Boolean AIS_LocalContext::ImmediateAdd (const Handle(AIS_InteractiveObject)& theObj,
+ const Standard_Integer theMode)
{
- if(!myMainPM->IsImmediateModeOn())
+ if (!myMainPM->IsImmediateModeOn())
+ {
return Standard_False;
- myMainPM->Add(anIObj,aMode);
+ }
+
+ myMainPM->AddToImmediateList (myMainPM->CastPresentation (theObj, theMode)->Presentation());
return Standard_True;
}
-Standard_Boolean AIS_LocalContext::ImmediateRemove(const Handle(AIS_InteractiveObject)& anIObj,
- const Standard_Integer aMode)
+//=======================================================================
+//function : EndImmediateDraw
+//purpose :
+//=======================================================================
+Standard_Boolean AIS_LocalContext::EndImmediateDraw (const Handle(V3d_View)& theView)
{
- if(!myMainPM->IsImmediateModeOn()) return Standard_False;
- myMainPM->Remove(anIObj,aMode);
+ if (!myMainPM->IsImmediateModeOn())
+ {
+ return Standard_False;
+ }
+
+ myMainPM->EndImmediateDraw (theView);
return Standard_True;
}
-Standard_Boolean AIS_LocalContext::EndImmediateDraw(const Handle(V3d_View)& aView,
- const Standard_Boolean DoubleBuf)
+// =======================================================================
+// function : ClearImmediateDraw
+// purpose :
+// =======================================================================
+void AIS_LocalContext::ClearImmediateDraw()
{
- if(!myMainPM->IsImmediateModeOn()) return Standard_False;
- myMainPM->EndDraw(aView,DoubleBuf);
- return Standard_True;
+ myMainPM->ClearImmediateDraw();
}
+//=======================================================================
+//function : IsImmediateModeOn
+//purpose :
+//=======================================================================
Standard_Boolean AIS_LocalContext::IsImmediateModeOn() const
-{return myMainPM->IsImmediateModeOn();}
+{
+ return myMainPM->IsImmediateModeOn();
+}
void AIS_LocalContext::SetSensitivityMode(const StdSelect_SensitivityMode aMode) {
#define IMP300101 //GG Enable to use polygon highlighting
-#define BUC60863 //GG_270301 Clear hilight soon after selecting or
-// unselecting something in Local Context mode.
-
#define BUC60876 //GG_050401 Clear selection always even
// if the current highlight mode is not 0.
#define USE_MAP //san : 18/04/03 USE_MAP - additional datamap is used to speed up access
//to certain owners in AIS_Selection::myresult list
-#define IMP120402 // GG : Add protection in manual detection methods
-// after deselecting any item using ShiftSelect action.
-// Thanks to Ivan FONTAINE of SAMTECH company
-
-#define IMP051001 //GG manage Z detection
-
#define OCC9026 //AEL Performance optimization of the FindSelectedOwnerFromShape() method.
#include <AIS_LocalContext.jxx>
#include <Prs3d_ShadingAspect.hxx>
#include <AIS_LocalStatus.hxx>
#include <StdPrs_WFShape.hxx>
-#include <Visual3d_TransientManager.hxx>
#include <Graphic3d_ArrayOfTriangles.hxx>
#include <Graphic3d_Group.hxx>
#include <Select3D_SensitiveTriangulation.hxx>
#include <Geom_Transformation.hxx>
#include <AIS_Selection.hxx>
+#include <Aspect_Grid.hxx>
#ifdef IMP120701
#include <AIS_Shape.hxx>
#endif
}
//==================================================
-// Function:
+// Function: MoveTo
// Purpose :
//==================================================
-AIS_StatusOfDetection AIS_LocalContext::MoveTo(const Standard_Integer Xpix,
- const Standard_Integer Ypix,
- const Handle(V3d_View)& aview)
+AIS_StatusOfDetection AIS_LocalContext::MoveTo (const Standard_Integer theXpix,
+ const Standard_Integer theYpix,
+ const Handle(V3d_View)& theView,
+ const Standard_Boolean theToRedrawImmediate)
{
- // check that ViewerSelector gives
- if(aview->Viewer()== myCTX->CurrentViewer()) {
-#ifdef IMP160701
- //Nullify class members storing information about detected AIS objects.
- myAISCurDetected = 0;
- myAISDetectedSeq.Clear();
-#endif
- myCurDetected = 0;
- myDetectedSeq.Clear();
- myMainVS->Pick(Xpix,Ypix,aview);
- Standard_Boolean had_nothing = myMainVS->NbPicked()==0;
- Standard_Integer NbDetected = myMainVS->NbPicked();
- Handle(SelectMgr_EntityOwner) EO;
-
- for(Standard_Integer i_detect = 1;i_detect<=NbDetected;i_detect++){
- EO = myMainVS->Picked(i_detect);
- if(!EO.IsNull()){
- if(myFilters->IsOk(EO)) {
- myDetectedSeq.Append(i_detect); // normallly they are already arranged in correct order...
-#ifdef IMP160701
- Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast(EO->Selectable());
- if(!Handle(AIS_Shape)::DownCast(anObj).IsNull())
- myAISDetectedSeq.Append(anObj);
-#endif
- }
+ // check that ViewerSelector gives
+ if (theView->Viewer() != myCTX->CurrentViewer())
+ {
+ return AIS_SOD_Error;
+ }
+
+ myAISCurDetected = 0;
+ myAISDetectedSeq.Clear();
+
+ myCurDetected = 0;
+ myDetectedSeq.Clear();
+ myMainVS->Pick (theXpix, theYpix, theView);
+
+ const Standard_Integer aDetectedNb = myMainVS->NbPicked();
+ for (Standard_Integer aDetIter = 1; aDetIter <= aDetectedNb; ++aDetIter)
+ {
+ Handle(SelectMgr_EntityOwner) anOwner = myMainVS->Picked (aDetIter);
+ if (anOwner.IsNull()
+ || !myFilters->IsOk (anOwner))
+ {
+ continue;
}
+
+ myDetectedSeq.Append (aDetIter); // normallly they are already arranged in correct order...
+ Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast (anOwner->Selectable());
+ if (!Handle(AIS_Shape)::DownCast (anObj).IsNull())
+ {
+ myAISDetectedSeq.Append (anObj);
}
-
- //result of courses..
- if(had_nothing || myDetectedSeq.IsEmpty()){
- if(mylastindex !=0 && mylastindex <= myMapOfOwner.Extent()){
+ }
-#ifdef BUC60863
- Unhilight(myMapOfOwner(mylastindex),aview);
-#else
- if(!IsSelected(myMapOfOwner(mylastindex)))
- Unhilight(myMapOfOwner(mylastindex),aview);
-#endif
+ // result of courses..
+ if (aDetectedNb == 0 || myDetectedSeq.IsEmpty())
+ {
+ if (mylastindex != 0 && mylastindex <= myMapOfOwner.Extent())
+ {
+ Unhilight (myMapOfOwner (mylastindex), theView);
+ if (theToRedrawImmediate)
+ {
+ theView->RedrawImmediate();
}
- mylastindex=0;
- return (had_nothing ? AIS_SOD_Nothing : AIS_SOD_AllBad);
- }
-
- // all owners detected by the selector are passed to the
- // filters and correct ones are preserved...
- myCurDetected = 1;
- EO = myMainVS->Picked(myDetectedSeq(myCurDetected));
-
- static Standard_Boolean Normal_State(Standard_True);
- static Standard_Boolean firsttime(Standard_True);
- if(firsttime){
- OSD_Environment toto("HITRI");
- if(!toto.Value().IsEmpty())
- Normal_State = Standard_False;
- firsttime = Standard_False;
- }
-
- if(Normal_State)
- ManageDetected(EO,aview);
- else
- HilightTriangle(1,aview);
-
- if(myDetectedSeq.Length() == 1){
- if(NbDetected==1)
- return AIS_SOD_OnlyOneDetected;
- else
- return AIS_SOD_OnlyOneGood;
}
- else
- return AIS_SOD_SeveralGood;
-
-
+
+ mylastindex = 0;
+ return aDetectedNb == 0
+ ? AIS_SOD_Nothing
+ : AIS_SOD_AllBad;
+ }
+
+ // all owners detected by the selector are passed to the
+ // filters and correct ones are preserved...
+ myCurDetected = 1;
+ Handle(SelectMgr_EntityOwner) anOwner = myMainVS->Picked (myDetectedSeq (myCurDetected));
+ manageDetected (anOwner, theView, theToRedrawImmediate);
+ if (myDetectedSeq.Length() == 1)
+ {
+ return aDetectedNb == 1
+ ? AIS_SOD_OnlyOneDetected
+ : AIS_SOD_OnlyOneGood;
+ }
+ else
+ {
+ return AIS_SOD_SeveralGood;
}
- return AIS_SOD_Error;
}
//==================================================
AIS_Selection::ClearAndSelect(EO);
#endif
- if(myAutoHilight) {
-#ifdef BUC60863
+ if (myAutoHilight)
+ {
const Handle(V3d_Viewer)& aViewer = myCTX->CurrentViewer();
- for(aViewer->InitActiveViews(); aViewer->MoreActiveViews(); aViewer->NextActiveViews())
- Unhilight(EO, aViewer->ActiveView());
-
- // san - advanced selection highlighting mechanism
- if (!EO->IsAutoHilight() && EO->HasSelectable()){
- Handle(AIS_InteractiveObject) anIO =
- Handle(AIS_InteractiveObject)::DownCast(EO->Selectable());
- UpdateSelected(anIO, Standard_False);
+ for (aViewer->InitActiveViews(); aViewer->MoreActiveViews(); aViewer->NextActiveViews())
+ {
+ Unhilight (EO, aViewer->ActiveView());
}
- if(updateviewer)
- myCTX->CurrentViewer()->Update();
-#else
- HilightPicked(updateviewer);
-#endif
+ // advanced selection highlighting mechanism
+ if (!EO->IsAutoHilight() && EO->HasSelectable())
+ {
+ Handle(AIS_InteractiveObject) anIO = Handle(AIS_InteractiveObject)::DownCast(EO->Selectable());
+ UpdateSelected (anIO, Standard_False);
+ }
+
+ if (updateviewer)
+ {
+ myCTX->CurrentViewer()->Update();
+ }
}
return ( AIS_Selection::Extent() == 1)? AIS_SOP_OneSelected : AIS_SOP_SeveralSelected ;
}
{
Standard_Integer I = DetectedIndex();
if(I>0){
-#ifndef BUC60863
- if(myAutoHilight)
- UnhilightPicked(Standard_False);
-#endif
AIS_Selection::SetCurrentSelection(mySelName.ToCString());
#ifdef BUC60774
AIS_Selection::Select(EO);
#endif
- if(myAutoHilight) {
-#ifdef BUC60863
+ if(myAutoHilight)
+ {
const Handle(V3d_Viewer)& aViewer = myCTX->CurrentViewer();
- for(aViewer->InitActiveViews(); aViewer->MoreActiveViews(); aViewer->NextActiveViews())
- Unhilight(EO, aViewer->ActiveView());
-
- // san - advanced selection highlighting mechanism
- if (!EO->IsAutoHilight() && EO->HasSelectable()){
- Handle(AIS_InteractiveObject) anIO =
- Handle(AIS_InteractiveObject)::DownCast(EO->Selectable());
- UpdateSelected(anIO, Standard_False);
+ for (aViewer->InitActiveViews(); aViewer->MoreActiveViews(); aViewer->NextActiveViews())
+ {
+ Unhilight (EO, aViewer->ActiveView());
}
- if(updateviewer)
+ // advanced selection highlighting mechanism
+ if (!EO->IsAutoHilight() && EO->HasSelectable())
+ {
+ Handle(AIS_InteractiveObject) anIO = Handle(AIS_InteractiveObject)::DownCast (EO->Selectable());
+ UpdateSelected (anIO, Standard_False);
+ }
+
+ if (updateviewer)
+ {
myCTX->CurrentViewer()->Update();
-#else
- HilightPicked(updateviewer);
-#endif
+ }
}
#ifdef BUC60774
Standard_Integer NS = AIS_Selection::Extent();
const Handle(V3d_View)& aView,
const Standard_Boolean updateviewer)
{
+ myMainPM->ClearImmediateDraw();
+
if(aView->Viewer()== myCTX->CurrentViewer()) {
myMainVS->Pick( XPMin,YPMin,XPMax,YPMax,aView);
#ifdef BUC60774
}
//==================================================
-// Function:
+// Function: Hilight
// Purpose :
//==================================================
-void AIS_LocalContext::Hilight(const Handle(SelectMgr_EntityOwner)& Ownr,
- const Handle(V3d_View)& aview)
+void AIS_LocalContext::Hilight (const Handle(SelectMgr_EntityOwner)& theOwner,
+ const Handle(V3d_View)& theView)
{
-#ifdef BUC60863
- if( aview.IsNull() ) return;
- aview->TransientManagerClearDraw();
-#else
- if(aview->TransientManagerBeginDraw())
- Visual3d_TransientManager::EndDraw();
-#endif
- myMainPM->BeginDraw();
- Handle(SelectMgr_SelectableObject) SO = Ownr->Selectable();
- Standard_Integer HM = GetHiMod(*((Handle(AIS_InteractiveObject)*)&SO));
- Ownr->HilightWithColor(myMainPM,myCTX->HilightColor(),HM);
-#ifdef IMP051001
- myMainPM->EndDraw(aview,myCTX->ZDetection());
-#else
- myMainPM->EndDraw(aview);
-#endif
+ if (theView.IsNull())
+ {
+ return;
+ }
+ const Standard_Integer aHilightMode = GetHiMod (Handle(AIS_InteractiveObject)::DownCast (theOwner->Selectable()));
+ myMainPM->BeginImmediateDraw();
+ theOwner->HilightWithColor (myMainPM, myCTX->HilightColor(), aHilightMode);
+ myMainPM->EndImmediateDraw (theView);
}
//==================================================
-// Function:
+// Function: Unhilight
// Purpose :
//==================================================
-void AIS_LocalContext::Unhilight(const Handle(SelectMgr_EntityOwner)& Ownr,
- const Handle(V3d_View)& aview)
+void AIS_LocalContext::Unhilight (const Handle(SelectMgr_EntityOwner)& theOwner,
+ const Handle(V3d_View)& theView)
{
+ if (theView.IsNull())
+ {
+ return;
+ }
- Handle(SelectMgr_SelectableObject) SO = Ownr->Selectable();
- Standard_Integer HM = GetHiMod(*((Handle(AIS_InteractiveObject)*)&SO));
-#ifdef BUC60863
- if( aview.IsNull() ) return;
- if( IsSelected(Ownr) ) {
- if ( Ownr->IsAutoHilight() )
- Ownr->HilightWithColor(myMainPM,myCTX->SelectionColor(),HM);
- }
- else
+ myMainPM->ClearImmediateDraw();
+ const Standard_Integer aHilightMode = GetHiMod (Handle(AIS_InteractiveObject)::DownCast (theOwner->Selectable()));
+ if (IsSelected (theOwner))
{
- myMainPM->BeginDraw();
- Ownr->Unhilight(myMainPM,HM);
- myMainPM->EndDraw(aview);
+ if (theOwner->IsAutoHilight())
+ {
+ theOwner->HilightWithColor (myMainPM, myCTX->SelectionColor(), aHilightMode);
+ }
+ }
+ else
+ {
+ theOwner->Unhilight (myMainPM, aHilightMode);
}
- aview->TransientManagerClearDraw();
-#else
- if(aview->TransientManagerBeginDraw())
- Visual3d_TransientManager::EndDraw();
- myMainPM->BeginDraw();
- Ownr->Unhilight(myMainPM,HM);
- myMainPM->EndDraw(aview);
-#endif
-
}
//=======================================================================
aMapIter.More(); aMapIter.Next() )
aMapIter.Key()->HilightSelected ( myMainPM, aMapIter.Value() );
- if(updateviewer){
-#ifdef BUC60863
- myCTX->CurrentViewer()->Update();
-#else
- if(updMain) myCTX->CurrentViewer()->Update();
-#endif
+ if (updateviewer)
+ {
+ myCTX->CurrentViewer()->Update();
}
}
// Function:
// Purpose :
//==================================================
-void AIS_LocalContext::
-UnhilightPicked(const Standard_Boolean updateviewer)
+void AIS_LocalContext::UnhilightPicked (const Standard_Boolean updateviewer)
{
+ myMainPM->ClearImmediateDraw();
+
Standard_Boolean updMain(Standard_False);
Handle(AIS_Selection) Sel = AIS_Selection::Selection(mySelName.ToCString());
}
//==================================================
-// Function:
+// Function: manageDetected
// Purpose :
//==================================================
-void AIS_LocalContext::ManageDetected(const Handle(SelectMgr_EntityOwner)& aPickOwner,
- const Handle(V3d_View)& aview)
+void AIS_LocalContext::manageDetected (const Handle(SelectMgr_EntityOwner)& thePickOwner,
+ const Handle(V3d_View)& theView,
+ const Standard_Boolean theToRedrawImmediate)
{
-#ifdef BUC60818
- // Warning : aPickOwner may be null !
- if (aPickOwner.IsNull()) return;
-#else
- if(!myAutoHilight) return;
-#endif
-// const Handle(SelectMgr_SelectableObject)& SO = aPickOwner->Selectable();
- Standard_Boolean okStatus = myFilters->IsOk(aPickOwner);
- // OK...
- if(okStatus){
- //=======================================================================================================
- // 2 cases : a- object is in the map of picks:
- // 1. this is the same index as the last detected: -> Do nothing
- // 2. otherwise :
- // - if lastindex = 0 (no object was detected at the last step)
- // the object presentation is highlighted and lastindex = index(objet)
- // - othrwise :
- // the presentation of the object corresponding to lastindex is "unhighlighted"
- // it is removed if the object is not visualized but only active
- // then the presentation of the detected object is highlighted and lastindex = index(objet)
- // b- the object is not in the map of picked objects
- // - if lastindex != 0 (object detected at the last step) it is unhighlighted ...
- // if the object was decomposed, presentation is created for the detected shape and the couple
- // (Proprietaire,Prs)is added in the map.
- // otherwise the couple(proprietaire, NullPrs) is placed in the map and the interactive object
- // itself is highlighted.
- //
- //=======================================================================================================
-
-
- //szv:
- Standard_Boolean wasContained = myMapOfOwner.Contains(aPickOwner);
- Standard_Integer theNewIndex = 0;
- if (wasContained)
- theNewIndex = myMapOfOwner.FindIndex(aPickOwner);
- else
- theNewIndex = myMapOfOwner.Add(aPickOwner);
+ if (thePickOwner.IsNull())
+ {
+ if (theToRedrawImmediate)
+ {
+ theView->RedrawImmediate();
+ }
+ return;
+ }
- // For the advanced mesh selection mode the owner indices comparison
- // is not effective because in that case only one owner manage the
- // selection in current selection mode. It is necessary to check the current detected
- // entity and hilight it only if the detected entity is not the same as
- // previous detected (IsForcedHilight call)
- if (theNewIndex != mylastindex || aPickOwner->IsForcedHilight()) {
+ if (!myFilters->IsOk (thePickOwner))
+ {
+ if (mylastindex != 0)
+ {
+ mylastgood = mylastindex;
+ }
+ if (theToRedrawImmediate)
+ {
+ theView->RedrawImmediate();
+ }
+ return;
+ }
- if (mylastindex && mylastindex <= myMapOfOwner.Extent()) {
+ //=======================================================================================================
+ // 2 cases : a- object is in the map of picks:
+ // 1. this is the same index as the last detected: -> Do nothing
+ // 2. otherwise :
+ // - if lastindex = 0 (no object was detected at the last step)
+ // the object presentation is highlighted and lastindex = index(objet)
+ // - othrwise :
+ // the presentation of the object corresponding to lastindex is "unhighlighted"
+ // it is removed if the object is not visualized but only active
+ // then the presentation of the detected object is highlighted and lastindex = index(objet)
+ // b- the object is not in the map of picked objects
+ // - if lastindex != 0 (object detected at the last step) it is unhighlighted ...
+ // if the object was decomposed, presentation is created for the detected shape and the couple
+ // (Proprietaire,Prs)is added in the map.
+ // otherwise the couple(proprietaire, NullPrs) is placed in the map and the interactive object
+ // itself is highlighted.
+ //
+ //=======================================================================================================
+
+ const Standard_Integer aNewIndex = myMapOfOwner.Contains (thePickOwner)
+ ? myMapOfOwner.FindIndex (thePickOwner)
+ : myMapOfOwner.Add (thePickOwner);
+
+ // For the advanced mesh selection mode the owner indices comparison
+ // is not effective because in that case only one owner manage the
+ // selection in current selection mode. It is necessary to check the current detected
+ // entity and hilight it only if the detected entity is not the same as
+ // previous detected (IsForcedHilight call)
+ if (aNewIndex != mylastindex
+ || thePickOwner->IsForcedHilight())
+ {
+ if (mylastindex != 0
+ && mylastindex <= myMapOfOwner.Extent())
+ {
+ const Handle(SelectMgr_EntityOwner)& aLastOwner = myMapOfOwner (mylastindex);
+ Unhilight (aLastOwner, theView);
+ }
- const Handle(SelectMgr_EntityOwner)& LastOwnr = myMapOfOwner(mylastindex);
-#ifdef BUC60863
- Unhilight(LastOwnr,aview);
-#else
- if(!IsSelected(LastOwnr))
- Unhilight(LastOwnr,aview);
-#endif
+ if (myAutoHilight)
+ {
+ if (thePickOwner->State() <= 0
+ || myCTX->ToHilightSelected())
+ {
+ Hilight (thePickOwner, theView);
}
-
- if (myAutoHilight) {
- // wasContained should not be checked because with this verification different
- // behaviour of application may occer depending whether mouse is moved above
- // owner first or second time
- //if (wasContained) {
-#ifdef BUC60569
- if (aPickOwner->State() <= 0 || myCTX->ToHilightSelected())
-#else
- if(!IsSelected (aPickOwner) || myCTX->ToHilightSelected())
-#endif
- Hilight(aPickOwner,aview);
- /*}
- else Hilight(aPickOwner,aview);*/
+ if (theToRedrawImmediate)
+ {
+ theView->RedrawImmediate();
}
-
- mylastindex = theNewIndex;
}
+
+ mylastindex = aNewIndex;
}
- if (mylastindex) mylastgood = mylastindex;
-
+ if (mylastindex)
+ {
+ mylastgood = mylastindex;
+ }
}
-
//=======================================================================
//function : HasDetectedShape
//purpose :
//=======================================================================
//function : HilightNextDetected
-//purpose :
+//purpose :
//=======================================================================
-
-Standard_Integer AIS_LocalContext::HilightNextDetected(const Handle(V3d_View)& V)
+Standard_Integer AIS_LocalContext::HilightNextDetected (const Handle(V3d_View)& theView,
+ const Standard_Boolean theToRedrawImmediate)
{
// go to the next owner
+ if (myDetectedSeq.IsEmpty())
+ {
+ return 0;
+ }
- if(myDetectedSeq.IsEmpty()) return Standard_False;
- Standard_Integer L = myDetectedSeq.Length();
- myCurDetected++;
-
- if(myCurDetected>L)
+ const Standard_Integer aLen = myDetectedSeq.Length();
+ if (++myCurDetected > aLen)
+ {
myCurDetected = 1;
- Handle(SelectMgr_EntityOwner) EO = myMainVS->Picked(myCurDetected);
-#ifdef IMP120402
- if( EO.IsNull() ) return 0;
-#endif
-
- static Standard_Boolean Normal_State(Standard_True);
- static Standard_Boolean firsttime(Standard_True);
- if(firsttime){
- OSD_Environment toto("HITRI");
- if(!toto.Value().IsEmpty())
- Normal_State = Standard_False;
- firsttime = Standard_False;
}
-
-
- if(Normal_State)
- ManageDetected(EO,V);
- else
- HilightTriangle(myCurDetected,V);
+ Handle(SelectMgr_EntityOwner) anOwner = myMainVS->Picked (myCurDetected);
+ if (anOwner.IsNull())
+ {
+ return 0;
+ }
+ manageDetected (anOwner, theView, theToRedrawImmediate);
return myCurDetected;
}
//=======================================================================
//function : HilightPreviousDetected
-//purpose :
+//purpose :
//=======================================================================
-Standard_Integer AIS_LocalContext::HilightPreviousDetected(const Handle(V3d_View)& V)
+Standard_Integer AIS_LocalContext::HilightPreviousDetected (const Handle(V3d_View)& theView,
+ const Standard_Boolean theToRedrawImmediate)
{
- if(myDetectedSeq.IsEmpty()) return Standard_False;
-
- myCurDetected--;
+ if (myDetectedSeq.IsEmpty())
+ {
+ return 0;
+ }
- if(myCurDetected<1)
+ if (--myCurDetected < 1)
+ {
myCurDetected = 1;
- Handle(SelectMgr_EntityOwner) EO = myMainVS->Picked(myCurDetected);
-#ifdef IMP120402
- if( EO.IsNull() ) return 0;
-#endif
-
- static Standard_Boolean Normal_State(Standard_True);
- static Standard_Boolean firsttime(Standard_True);
- if(firsttime){
- OSD_Environment toto("HITRI");
- if(!toto.Value().IsEmpty())
- Normal_State = Standard_False;
- firsttime = Standard_False;
+ }
+ Handle(SelectMgr_EntityOwner) anOwner = myMainVS->Picked (myCurDetected);
+ if (anOwner.IsNull())
+ {
+ return 0;
}
-
-
- if(Normal_State)
- ManageDetected(EO,V);
- else
- HilightTriangle(myCurDetected,V);
+ manageDetected (anOwner, theView, theToRedrawImmediate);
return myCurDetected;
}
//=======================================================================
//function : UnhilightLastDetected
-//purpose :
+//purpose :
//=======================================================================
-Standard_Boolean AIS_LocalContext::UnhilightLastDetected(const Handle(V3d_View)& aview)
+Standard_Boolean AIS_LocalContext::UnhilightLastDetected (const Handle(V3d_View)& theView)
{
- if(!IsValidIndex(mylastindex)) return Standard_False;
- myMainPM->BeginDraw();
- const Handle(SelectMgr_EntityOwner)& Ownr = myMapOfOwner(mylastindex);
- Standard_Integer HM(0);
- if(Ownr->HasSelectable()){
- Handle(SelectMgr_SelectableObject) SO = Ownr->Selectable();
- HM = GetHiMod(*((Handle(AIS_InteractiveObject)*)&SO));
+ if (!IsValidIndex (mylastindex))
+ {
+ return Standard_False;
}
- myMapOfOwner(mylastindex)->Unhilight(myMainPM,HM);
- myMainPM->EndDraw(aview);
- mylastindex =0;
- return Standard_True;
-}
-
-
-
-//=======================================================================
-//function : HilightTriangle
-//purpose :
-//=======================================================================
-void AIS_LocalContext::HilightTriangle(const Standard_Integer Rank,
- const Handle(V3d_View)& view)
-{
- static Standard_Integer PrevRank(0);
- if(Rank==PrevRank) return;
- Handle(SelectBasics_SensitiveEntity) SE = myMainVS->Primitive(Rank);
- if(SE->IsKind(STANDARD_TYPE(Select3D_SensitiveTriangulation)))
- {
- Handle(Select3D_SensitiveTriangulation) Tr = *((Handle(Select3D_SensitiveTriangulation)*)&SE);
- gp_Pnt p1,p2,p3 ; Tr->DetectedTriangle(p1,p2,p3);
-
- Handle(Graphic3d_ArrayOfTriangles) aTris = new Graphic3d_ArrayOfTriangles(3);
- aTris->AddVertex(p1);
- aTris->AddVertex(p2);
- aTris->AddVertex(p3);
-
- static Handle(Prs3d_Presentation) TriPrs =
- new Prs3d_Presentation(myMainPM->StructureManager());
- TriPrs->Clear();
-#ifdef IMP300101
- Handle(Prs3d_ShadingAspect) asp = myCTX->DefaultDrawer()->ShadingAspect();
- asp->SetColor(myCTX->HilightColor());
- TriPrs->SetShadingAspect(asp);
-#endif
- Prs3d_Root::CurrentGroup(TriPrs)->AddPrimitiveArray(aTris);
+ myMainPM->BeginImmediateDraw();
+ const Handle(SelectMgr_EntityOwner)& anOwner = myMapOfOwner (mylastindex);
+ const Standard_Integer aHilightMode = anOwner->HasSelectable()
+ ? GetHiMod (Handle(AIS_InteractiveObject)::DownCast (anOwner->Selectable()))
+ : 0;
-#ifndef IMP300101
- if(view->TransientManagerBeginDraw())
- Visual3d_TransientManager::EndDraw();
-#endif
- if(view->TransientManagerBeginDraw()) {
- Visual3d_TransientManager::DrawStructure(TriPrs);
- Visual3d_TransientManager::EndDraw();
- }
- }
+ myMapOfOwner (mylastindex)->Unhilight (myMainPM, aHilightMode);
+ myMainPM->EndImmediateDraw (theView);
+ mylastindex = 0;
+ return Standard_True;
}
//=======================================================================
class Graphic3d_AspectFillArea3d;
class Graphic3d_Texture2Dmanual;
-class TopoDS_Shape;
-class TCollection_AsciiString;
-class PrsMgr_PresentationManager3d;
-class Prs3d_Presentation;
//! This class allows to map textures on shapes.
//! Presentations modes AIS_WireFrame (0) and AIS_Shaded (1) behave in the same manner as in AIS_Shape,
//! Highlight structure using boundary box
virtual void HighlightWithBndBox (const Standard_Boolean theToCreate) = 0;
+ //! Create shadow link to this structure
+ virtual Handle(Graphic3d_CStructure) ShadowLink (const Handle(Graphic3d_StructureManager)& theManager) const = 0;
+
public:
int Id;
---Purpose: call_togl_ratio_window
Redraw ( me : mutable;
- ACView : CView from Graphic3d;
- ACUnderLayer : CLayer2d from Aspect;
- ACOverLayer : CLayer2d from Aspect;
- x : Integer = 0;
- y : Integer = 0;
- width : Integer = 0;
- height : Integer = 0 )
- is deferred;
- ---Purpose: call_togl_redraw
- -- Warning: when the redraw area has a null size, the full view is redrawn
+ theCView : CView from Graphic3d;
+ theCUnderLayer : CLayer2d from Aspect;
+ theCOverLayer : CLayer2d from Aspect;
+ theX : Integer = 0;
+ theY : Integer = 0;
+ theWidth : Integer = 0;
+ theHeight : Integer = 0 )
+ is deferred;
+ ---Purpose: Redraw content of the view
+
+ RedrawImmediate ( me : mutable;
+ theCView : CView from Graphic3d;
+ theCUnderLayer : CLayer2d from Aspect;
+ theCOverLayer : CLayer2d from Aspect )
+ is deferred;
+ ---Purpose: Redraw layer of immediate presentations
+
+ Invalidate ( me : mutable;
+ theCView : CView from Graphic3d )
+ is deferred;
+ ---Purpose: Invalidates content of the view but does not redraw it
RemoveView ( me : mutable;
ACView : CView from Graphic3d )
is deferred;
---Purpose: call_togl_transparency
- Update ( me : mutable;
- ACView : CView from Graphic3d;
- ACUnderLayer : CLayer2d from Aspect;
- ACOverLayer : CLayer2d from Aspect )
- is deferred;
- ---Purpose: call_togl_update
-
View ( me : mutable;
ACView : in out CView from Graphic3d )
returns Boolean from Standard
is deferred;
----------------------------------
- -- Category: Ajout mode methods
- ----------------------------------
-
- BeginAddMode ( me : mutable;
- ACView : CView from Graphic3d)
- returns Boolean from Standard
- is deferred;
- ---Purpose: call_togl_begin_ajout_mode
-
- EndAddMode ( me : mutable)
- is deferred;
- ---Purpose: call_togl_end_ajout_mode
-
- ----------------------------------
- -- Category: Immediat mode methods
+ -- Category: Immediate mode methods
----------------------------------
SetImmediateModeDrawToFront (me : mutable;
-- 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.
- BeginImmediatMode ( me : mutable;
- ACView : CView from Graphic3d;
- ACUnderLayer : CLayer2d from Aspect;
- ACOverLayer : CLayer2d from Aspect;
- DoubleBuffer : Boolean from Standard;
- RetainMode : Boolean from Standard)
- returns Boolean from Standard
- is deferred;
- ---Purpose: call_togl_begin_immediat_mode
-
- ClearImmediatMode ( me : mutable; ACView : CView from Graphic3d;
- aFlush : Boolean from Standard = Standard_True)
- is deferred;
- ---Purpose: call_togl_clear_immediat_mode
-
- DrawStructure ( me : mutable;
- ACStructure : CStructure from Graphic3d )
- is deferred;
- ---Purpose: call_togl_draw_structure
+ DisplayImmediateStructure ( me : mutable;
+ theCView : CView from Graphic3d;
+ theCStructure : CStructure from Graphic3d )
+ is deferred;
+ ---Purpose: Display structure in immediate mode on top of general presentation
- EndImmediatMode ( me : mutable;
- Synchronize : Integer from Standard )
- is deferred;
- ---Purpose: call_togl_end_immediat_mode
+ EraseImmediateStructure ( me : mutable;
+ theCView : CView from Graphic3d;
+ theCStructure : CStructure from Graphic3d )
+ is deferred;
+ ---Purpose: Erases immediate structure
-------------------------------
-- Category: Layer mode methods
-- Category: Constructor
------------------------
- Create ( AManager : StructureManager from Graphic3d )
- returns mutable Structure from Graphic3d;
- ---Level: Public
- ---Purpose: Creates a graphic object in the manager <AManager>.
- -- It will appear in all the views of the visualiser.
- -- Warning: The default values AspectLine, AspectFillArea,
- -- AspectText and AspectMarker are NOT applied to the
- -- structure.
- -- The structure is not displayed when it is created.
+ Create (theManager : StructureManager from Graphic3d)
+ returns mutable Structure from Graphic3d;
+ ---Level: Public
+ ---Purpose: Creates a graphic object in the manager theManager.
+ -- It will appear in all the views of the visualiser.
+ -- Warning: The default values AspectLine, AspectFillArea, AspectText and AspectMarker are NOT applied to the structure.
+ -- The structure is not displayed when it is created.
+
+ Create (theManager : StructureManager from Graphic3d;
+ thePrs : Structure from Graphic3d)
+ returns mutable Structure from Graphic3d;
+ ---Level: Public
+ ---Purpose: Creates a shadow link to existing graphic object.
---------------------------------------------------
-- Category: Methods to modify the class definition
UpdateStructure (aAspectLine3d, aAspectText3d, aAspectMarker3d, aAspectFillArea3d);
}
+//=============================================================================
+//function : Graphic3d_Structure
+//purpose :
+//=============================================================================
+Graphic3d_Structure::Graphic3d_Structure (const Handle(Graphic3d_StructureManager)& theManager,
+ const Handle(Graphic3d_Structure)& thePrs)
+: myStructureManager (theManager.operator->()),
+ myFirstStructureManager (theManager.operator->()),
+ myComputeVisual (thePrs->myComputeVisual),
+ myHighlightColor (thePrs->myHighlightColor),
+ myHighlightMethod (thePrs->myHighlightMethod),
+ myOwner (thePrs->myOwner),
+ myVisual (thePrs->myVisual)
+{
+ myCStructure = thePrs->myCStructure->ShadowLink (theManager);
+
+ // default aspects
+ Handle(Graphic3d_AspectLine3d) aAspectLine3d = new Graphic3d_AspectLine3d();
+ Handle(Graphic3d_AspectText3d) aAspectText3d = new Graphic3d_AspectText3d();
+ Handle(Graphic3d_AspectMarker3d) aAspectMarker3d = new Graphic3d_AspectMarker3d();
+ Handle(Graphic3d_AspectFillArea3d) aAspectFillArea3d = new Graphic3d_AspectFillArea3d();
+ theManager->PrimitivesAspect (aAspectLine3d, aAspectText3d, aAspectMarker3d, aAspectFillArea3d);
+ aAspectFillArea3d->SetPolygonOffsets (Aspect_POM_Fill, 1.0, 0.0);
+
+ // update the associated CStructure
+ UpdateStructure (aAspectLine3d, aAspectText3d, aAspectMarker3d, aAspectFillArea3d);
+}
+
//=============================================================================
//function : Destroy
//purpose :
SetDisplayPriority (Structure_MAX_PRIORITY - 1);
GraphicHighlight (theMethod);
- myStructureManager->Highlight (this, theMethod);
+ if (myCStructure->stick)
+ {
+ myStructureManager->Highlight (this, theMethod);
+ }
Update();
}
-- resources after the last view has been closed without removing objects.
RecomputeStructures (me: mutable;
- theStructures : MapOfStructure from Graphic3d)
- is private;
+ theStructures : MapOfStructure from Graphic3d);
---Purpose: Recomputes all structures from theStructures.
---\f
+--
fields
}
}
- if( PM->IsImmediateModeOn() )
- PM->AddToImmediateList( aHilightPrs );
+ if (PM->IsImmediateModeOn())
+ {
+ PM->AddToImmediateList (aHilightPrs);
+ }
myHilighter->SetDrawer ( 0 );
}
OpenGl_Workspace.hxx
OpenGl_Workspace.cxx
OpenGl_Workspace_2.cxx
-OpenGl_Workspace_3.cxx
OpenGl_Workspace_5.cxx
Handle_OpenGl_View.hxx
OpenGl_View.hxx
void OpenGl_Flipper::Render (const Handle(OpenGl_Workspace)& theWorkspace) const
{
// Check if rendering is to be in immediate mode
- const Standard_Boolean isImmediate = (theWorkspace->NamedStatus & (OPENGL_NS_ADD | OPENGL_NS_IMMEDIATE)) != 0;
+ const Standard_Boolean isImmediate = (theWorkspace->NamedStatus & OPENGL_NS_IMMEDIATE) != 0;
const Handle(OpenGl_Context)& aContext = theWorkspace->GetGlContext();
GLint aCurrMode = GL_MODELVIEW;
glGetIntegerv (GL_MATRIX_MODE, &aCurrMode);
#endif
// =======================================================================
-// function : BeginAddMode
+// function : DisplayImmediateStructure
// purpose :
// =======================================================================
-Standard_Boolean OpenGl_GraphicDriver::BeginAddMode (const Graphic3d_CView& theCView)
+void OpenGl_GraphicDriver::DisplayImmediateStructure (const Graphic3d_CView& theCView,
+ const Graphic3d_CStructure& theCStructure)
{
- if (theCView.ViewId == -1)
- {
- return Standard_False;
- }
-
- const OpenGl_CView* aCView = (const OpenGl_CView* )theCView.ptrView;
- if (aCView != NULL && aCView->WS->BeginAddMode())
- {
- myImmediateWS = aCView->WS;
- return Standard_True;
- }
-
- return Standard_False;
-}
-
-// =======================================================================
-// function : EndAddMode
-// purpose :
-// =======================================================================
-void OpenGl_GraphicDriver::EndAddMode()
-{
- if (!myImmediateWS.IsNull())
- {
- myImmediateWS->EndAddMode();
- myImmediateWS.Nullify();
- }
-}
-
-// =======================================================================
-// function : BeginImmediatMode
-// purpose :
-// =======================================================================
-Standard_Boolean OpenGl_GraphicDriver::BeginImmediatMode (const Graphic3d_CView& theCView,
- const Aspect_CLayer2d& /*theCUnderLayer*/,
- const Aspect_CLayer2d& /*theCOverLayer*/,
- const Standard_Boolean theDoubleBuffer,
- const Standard_Boolean theRetainMode)
-{
- if (theCView.ViewId == -1)
- {
- return Standard_False;
- }
-
- const OpenGl_CView* aCView = (const OpenGl_CView* )theCView.ptrView;
- if (aCView != NULL && aCView->WS->BeginImmediatMode (theCView, theDoubleBuffer, theRetainMode))
+ OpenGl_CView* aCView = (OpenGl_CView* )theCView.ptrView;
+ OpenGl_Structure* aStructure = (OpenGl_Structure* )&theCStructure;
+ if (aCView == NULL)
{
- myImmediateWS = aCView->WS;
- return Standard_True;
+ return;
}
- return Standard_False;
+ aCView->View->DisplayImmediateStructure (aStructure);
}
// =======================================================================
-// function : ClearImmediatMode
+// function : EraseImmediateStructure
// purpose :
// =======================================================================
-void OpenGl_GraphicDriver::ClearImmediatMode (const Graphic3d_CView& theCView,
- const Standard_Boolean theToFlush)
-{
- const OpenGl_CView* aCView = (const OpenGl_CView* )theCView.ptrView;
- if (aCView != NULL)
- {
- aCView->WS->ClearImmediatMode (theCView, theToFlush);
- }
-}
-
-// =======================================================================
-// function : DrawStructure
-// purpose :
-// =======================================================================
-void OpenGl_GraphicDriver::DrawStructure (const Graphic3d_CStructure& theCStructure)
+void OpenGl_GraphicDriver::EraseImmediateStructure (const Graphic3d_CView& theCView,
+ const Graphic3d_CStructure& theCStructure)
{
+ OpenGl_CView* aCView = (OpenGl_CView* )theCView.ptrView;
OpenGl_Structure* aStructure = (OpenGl_Structure* )&theCStructure;
- if (!myImmediateWS.IsNull())
+ if (aCView == NULL)
{
- myImmediateWS->DrawStructure (aStructure);
+ return;
}
-}
-// =======================================================================
-// function : EndImmediatMode
-// purpose :
-// =======================================================================
-void OpenGl_GraphicDriver::EndImmediatMode (const Standard_Integer )
-{
- if (!myImmediateWS.IsNull())
- {
- myImmediateWS->EndImmediatMode();
- myImmediateWS.Nullify();
- }
+ aCView->View->EraseImmediateStructure (aStructure);
}
+
// =======================================================================
// function : Print
// purpose :
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 EraseImmediateStructure (const Graphic3d_CView& theCView,
+ const Graphic3d_CStructure& theCStructure);
+
public:
Standard_EXPORT void ActivateView (const Graphic3d_CView& ACView);
Standard_EXPORT void DeactivateView (const Graphic3d_CView& ACView);
Standard_EXPORT void DepthCueing (const Graphic3d_CView& ACView, const Standard_Boolean AFlag);
Standard_EXPORT void RatioWindow (const Graphic3d_CView& ACView);
- Standard_EXPORT void Redraw (const Graphic3d_CView& ACView, const Aspect_CLayer2d& ACUnderLayer, const Aspect_CLayer2d& ACOverLayer, const Standard_Integer x = 0, const Standard_Integer y = 0, const Standard_Integer width = 0, const Standard_Integer height = 0);
+ Standard_EXPORT void Redraw (const Graphic3d_CView& theCView,
+ const Aspect_CLayer2d& theCUnderLayer,
+ const Aspect_CLayer2d& theCOverLayer,
+ const Standard_Integer theX = 0,
+ const Standard_Integer theY = 0,
+ const Standard_Integer theWidth = 0,
+ const Standard_Integer theHeight = 0);
+ Standard_EXPORT void RedrawImmediate (const Graphic3d_CView& theCView,
+ const Aspect_CLayer2d& theCUnderLayer,
+ const Aspect_CLayer2d& theCOverLayer);
+ Standard_EXPORT void Invalidate (const Graphic3d_CView& theCView);
Standard_EXPORT void RemoveView (const Graphic3d_CView& ACView);
Standard_EXPORT void SetLight (const Graphic3d_CView& ACView);
Standard_EXPORT void SetClipPlanes (const Graphic3d_CView& theCView);
Standard_EXPORT void SetCamera (const Graphic3d_CView& theCView);
Standard_EXPORT void SetVisualisation (const Graphic3d_CView& ACView);
Standard_EXPORT void Transparency (const Graphic3d_CView& ACView, const Standard_Boolean AFlag);
- Standard_EXPORT void Update (const Graphic3d_CView& ACView, const Aspect_CLayer2d& ACUnderLayer, const Aspect_CLayer2d& ACOverLayer);
Standard_EXPORT Standard_Boolean View (Graphic3d_CView& ACView);
Standard_EXPORT void Environment (const Graphic3d_CView& ACView);
Standard_EXPORT void SetStencilTestOptions (const Graphic3d_CGroup& theCGroup, const Standard_Boolean theIsEnabled);
Standard_EXPORT void GraduatedTrihedronDisplay (const Graphic3d_CView& view, const Graphic3d_CGraduatedTrihedron& cubic);
Standard_EXPORT void GraduatedTrihedronErase (const Graphic3d_CView& view);
Standard_EXPORT void GraduatedTrihedronMinMaxValues (const Standard_ShortReal xmin, const Standard_ShortReal ymin, const Standard_ShortReal zmin, const Standard_ShortReal xmax, const Standard_ShortReal ymax, const Standard_ShortReal zmax);
- Standard_EXPORT Standard_Boolean SetImmediateModeDrawToFront (const Graphic3d_CView& theCView,
- const Standard_Boolean theDrawToFrontBuffer);
- Standard_EXPORT Standard_Boolean BeginAddMode (const Graphic3d_CView& ACView);
- Standard_EXPORT void EndAddMode ();
- Standard_EXPORT Standard_Boolean BeginImmediatMode(const Graphic3d_CView& ACView, const Aspect_CLayer2d& ACUnderLayer, const Aspect_CLayer2d& ACOverLayer, const Standard_Boolean DoubleBuffer, const Standard_Boolean RetainMode);
- Standard_EXPORT void ClearImmediatMode (const Graphic3d_CView& ACView,const Standard_Boolean aFlush = Standard_True);
- Standard_EXPORT void DrawStructure (const Graphic3d_CStructure& ACStructure);
- Standard_EXPORT void EndImmediatMode (const Standard_Integer Synchronize);
Standard_EXPORT void Layer (Aspect_CLayer2d& ACLayer);
Standard_EXPORT void RemoveLayer (const Aspect_CLayer2d& ACLayer);
Standard_EXPORT void BeginLayer (const Aspect_CLayer2d& ACLayer);
NCollection_DataMap<Standard_Integer, Handle(OpenGl_View)> myMapOfView;
NCollection_DataMap<Standard_Integer, Handle(OpenGl_Workspace)> myMapOfWS;
NCollection_DataMap<Standard_Integer, OpenGl_Structure*> myMapOfStructure;
- Handle(OpenGl_Workspace) myImmediateWS;
mutable Handle(OpenGl_PrinterContext) myPrintContext;
OpenGl_UserDrawCallback_t myUserDrawCallback;
OpenGl_Text* myTempText; //!< variable for compatibility (drawing text in layers)
}
}
+void OpenGl_GraphicDriver::RedrawImmediate (const Graphic3d_CView& theCView,
+ const Aspect_CLayer2d& theCUnderLayer,
+ const Aspect_CLayer2d& theCOverLayer)
+{
+ const OpenGl_CView* aCView = (const OpenGl_CView* )theCView.ptrView;
+ if (aCView != NULL)
+ {
+ aCView->WS->RedrawImmediate (theCView, theCUnderLayer, theCOverLayer);
+ }
+}
+
+void OpenGl_GraphicDriver::Invalidate (const Graphic3d_CView& theCView)
+{
+ const OpenGl_CView* aCView = (const OpenGl_CView* )theCView.ptrView;
+ if (aCView != NULL)
+ {
+ aCView->WS->Invalidate (theCView);
+ }
+}
+
Graphic3d_PtrFrameBuffer OpenGl_GraphicDriver::FBOCreate (const Graphic3d_CView& ACView, const Standard_Integer theWidth, const Standard_Integer theHeight)
{
const OpenGl_CView *aCView = (const OpenGl_CView *)ACView.ptrView;
aCView->WS->UseTransparency(AFlag);
}
-void OpenGl_GraphicDriver::Update (const Graphic3d_CView& ACView, const Aspect_CLayer2d& ACUnderLayer, const Aspect_CLayer2d& ACOverLayer)
-{
- const OpenGl_CView *aCView = (const OpenGl_CView *)ACView.ptrView;
- if (aCView)
- aCView->WS->Update(ACView,ACUnderLayer,ACOverLayer);
-}
-
Standard_Boolean OpenGl_GraphicDriver::View (Graphic3d_CView& theCView)
{
if (myGlDisplay.IsNull()
#define OPENGL_NS_HIDE (1<<0)
#define OPENGL_NS_HIGHLIGHT (1<<1)
#define OPENGL_NS_RESMAT (1<<2)
-#define OPENGL_NS_ADD (1<<3)
-#define OPENGL_NS_IMMEDIATE (1<<4)
-#define OPENGL_NS_TEXTURE (1<<5)
-#define OPENGL_NS_ANTIALIASING (1<<6)
-#define OPENGL_NS_2NDPASSNEED (1<<7)
-#define OPENGL_NS_2NDPASSDO (1<<8)
-#define OPENGL_NS_FORBIDSETTEX (1<<9)
-#define OPENGL_NS_WHITEBACK (1<<10)
+#define OPENGL_NS_IMMEDIATE (1<<3)
+#define OPENGL_NS_TEXTURE (1<<4)
+#define OPENGL_NS_ANTIALIASING (1<<5)
+#define OPENGL_NS_2NDPASSNEED (1<<6)
+#define OPENGL_NS_2NDPASSDO (1<<7)
+#define OPENGL_NS_FORBIDSETTEX (1<<8)
+#define OPENGL_NS_WHITEBACK (1<<9)
#endif //_OpenGl_NamedStatus_Header
const Handle(OpenGl_Texture) aPrevTexture = theWorkspace->DisableTexture();
glDisable (GL_LIGHTING);
- if ((theWorkspace->NamedStatus & (OPENGL_NS_ADD | OPENGL_NS_IMMEDIATE)) != 0)
+ if ((theWorkspace->NamedStatus & OPENGL_NS_IMMEDIATE) != 0)
{
glDepthMask (GL_FALSE);
}
AWorkspace->NamedStatus |= myNamedStatus;
// Is rendering in ADD or IMMEDIATE mode?
- const Standard_Boolean isImmediate = (AWorkspace->NamedStatus & (OPENGL_NS_ADD | OPENGL_NS_IMMEDIATE)) != 0;
+ const Standard_Boolean isImmediate = (AWorkspace->NamedStatus & OPENGL_NS_IMMEDIATE) != 0;
const Handle(OpenGl_Context)& aCtx = AWorkspace->GetGlContext();
}
// Render groups
- OpenGl_ListOfGroup::Iterator itg(myGroups);
+ const OpenGl_ListOfGroup& aGroups = Groups();
+ OpenGl_ListOfGroup::Iterator itg (aGroups);
while (itg.More())
{
itg.Value()->Render(AWorkspace);
// Render capping for structure groups
if (!aContext->Clipping().Planes().IsEmpty())
{
- OpenGl_CappingAlgo::RenderCapping (AWorkspace, myGroups);
+ OpenGl_CappingAlgo::RenderCapping (AWorkspace, aGroups);
}
// Revert structure clippings
{
return myZLayer;
}
+
+class OpenGl_StructureShadow : public OpenGl_Structure
+{
+
+public:
+
+ //! Create empty structure
+ OpenGl_StructureShadow (const Handle(Graphic3d_StructureManager)& theManager,
+ const Handle(OpenGl_Structure)& theStructure);
+
+ virtual const OpenGl_ListOfGroup& Groups() const { return myParent->Groups(); }
+
+private:
+
+ Handle(OpenGl_Structure) myParent;
+
+public:
+
+ DEFINE_STANDARD_RTTI(OpenGl_Structure) // Type definition
+
+};
+
+DEFINE_STANDARD_HANDLE(OpenGl_StructureShadow, OpenGl_Structure)
+
+IMPLEMENT_STANDARD_HANDLE (OpenGl_StructureShadow, OpenGl_Structure)
+IMPLEMENT_STANDARD_RTTIEXT(OpenGl_StructureShadow, OpenGl_Structure)
+
+OpenGl_StructureShadow::OpenGl_StructureShadow (const Handle(Graphic3d_StructureManager)& theManager,
+ const Handle(OpenGl_Structure)& theStructure)
+: OpenGl_Structure (theManager)
+{
+ Handle(OpenGl_StructureShadow) aShadow = Handle(OpenGl_StructureShadow)::DownCast (theStructure);
+ myParent = aShadow.IsNull() ? theStructure : aShadow->myParent;
+
+
+ Composition = myParent->Composition;
+ ContainsFacet = myParent->ContainsFacet;
+ IsInfinite = myParent->IsInfinite;
+ for (Standard_Integer i = 0; i <= 3; ++i)
+ {
+ for (Standard_Integer j = 0; j <= 3; ++j)
+ {
+ Graphic3d_CStructure::Transformation[i][j] = myParent->Graphic3d_CStructure::Transformation[i][j];
+ }
+ }
+
+ TransformPersistence.IsSet = myParent->TransformPersistence.IsSet;
+ TransformPersistence.Flag = myParent->TransformPersistence.Flag;
+ TransformPersistence.Point = myParent->TransformPersistence.Point;
+}
+
+//=======================================================================
+//function : ShadowLink
+//purpose :
+//=======================================================================
+Handle(Graphic3d_CStructure) OpenGl_Structure::ShadowLink (const Handle(Graphic3d_StructureManager)& theManager) const
+{
+ return new OpenGl_StructureShadow (theManager, this);
+}
//! Highlight structure using boundary box
virtual void HighlightWithBndBox (const Standard_Boolean theToCreate);
+ //! Create shadow link to this structure
+ virtual Handle(Graphic3d_CStructure) ShadowLink (const Handle(Graphic3d_StructureManager)& theManager) const;
+
public:
//! Access graphic driver
void ReleaseGlResources (const Handle(OpenGl_Context)& theGlCtx);
//! Returns list of OpenGL groups.
- const OpenGl_ListOfGroup& Groups() const { return myGroups; }
+ virtual const OpenGl_ListOfGroup& Groups() const { return myGroups; }
//! Returns list of connected OpenGL structures.
const OpenGl_ListOfStructure& ConnectedStructures() const { return myConnected; }
//! 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,
+ void DisplayStructure (const OpenGl_Structure* theStructure,
const Standard_Integer thePriority);
//! Erase structure from display list.
- void EraseStructure (const OpenGl_Structure *theStructure);
+ void EraseStructure (const OpenGl_Structure* theStructure);
+
+ //! Add structure to the list of immediate structures.
+ void DisplayImmediateStructure (const OpenGl_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 GetMatrices (TColStd_Array2OfReal& theMatOrient,
TColStd_Array2OfReal& theMatMapping) const;
+ //! Returns list of immediate structures rendered on top of main presentation
+ const OpenGl_SequenceOfStructure& ImmediateStructures() const
+ {
+ return myImmediateList;
+ }
+
#ifdef HAVE_OPENCL
//! Returns modification state for ray-tracing.
Standard_Size ModificationState() const { return myModificationState; }
#endif
-public:
-
- DEFINE_STANDARD_RTTI(OpenGl_View) // Type definition
-
- protected:
+protected:
void RenderStructs (const Handle(OpenGl_Workspace) &AWorkspace);
void RedrawLayer2d (const Handle(OpenGl_PrinterContext)& thePrintContext,
//View_LABDepthCueing - fixed index used
- OpenGl_LayerList myZLayers;
+ OpenGl_LayerList myZLayers; //!< main list of displayed structure, sorted by layers
+ OpenGl_SequenceOfStructure myImmediateList; //!< list of immediate structures rendered on top of main presentation
const TEL_TRANSFORM_PERSISTENCE *myTransPers;
Standard_Boolean myIsTransPers;
Standard_Size myModificationState;
#endif
- public:
+public:
+
DEFINE_STANDARD_ALLOC
+ DEFINE_STANDARD_RTTI(OpenGl_View) // Type definition
+
};
-#endif //_OpenGl_View_Header
+#endif // _OpenGl_View_Header
myZLayers.AddStructure (theStructure, aZLayer, thePriority);
}
+//=======================================================================
+//function : DisplayImmediateStructure
+//purpose :
+//=======================================================================
+
+void OpenGl_View::DisplayImmediateStructure (const OpenGl_Structure* theStructure)
+{
+ for (OpenGl_SequenceOfStructure::Iterator anIter (myImmediateList);
+ anIter.More(); anIter.Next())
+ {
+ if (anIter.Value() == theStructure)
+ {
+ return;
+ }
+ }
+
+ myImmediateList.Append (theStructure);
+}
+
//=======================================================================
//function : EraseStructure
//purpose :
myZLayers.RemoveStructure (theStructure, aZLayer);
}
+//=======================================================================
+//function : EraseImmediateStructure
+//purpose :
+//=======================================================================
+
+void OpenGl_View::EraseImmediateStructure (const OpenGl_Structure* theStructure)
+{
+ for (OpenGl_SequenceOfStructure::Iterator anIter (myImmediateList);
+ anIter.More(); anIter.Next())
+ {
+ if (anIter.Value() == theStructure)
+ {
+ myImmediateList.Remove (anIter);
+ return;
+ }
+ }
+}
+
//=======================================================================
//function : ChangeZLayer
//purpose :
glDrawBuffer (GL_BACK);
}
-// =======================================================================
-// function : MakeFrontAndBackBufCurrent
-// purpose : TelMakeFrontAndBackBufCurrent
-// =======================================================================
-void OpenGl_Window::MakeFrontAndBackBufCurrent() const
-{
- glDrawBuffer (GL_FRONT_AND_BACK);
-}
-
// =======================================================================
// function : GetGContext
// purpose :
//! Draw to BACK buffer. Normal and default state.
void MakeBackBufCurrent() const;
- //! Draw simultaneously to BACK and FRONT buffers. Abnormal usage.
- void MakeFrontAndBackBufCurrent() const;
-
protected:
Handle(OpenGl_Display) myDisplay;
#include <OpenGl_AspectMarker.hxx>
#include <OpenGl_AspectText.hxx>
#include <OpenGl_Context.hxx>
+#include <OpenGl_Element.hxx>
#include <OpenGl_FrameBuffer.hxx>
+#include <OpenGl_Structure.hxx>
#include <OpenGl_Texture.hxx>
#include <OpenGl_View.hxx>
#include <OpenGl_Workspace.hxx>
-#include <OpenGl_Element.hxx>
#include <Graphic3d_TextureParams.hxx>
NamedStatus (0),
HighlightColor (&THE_WHITE_COLOR),
//
- myIsTransientOpen (Standard_False),
- myRetainMode (Standard_False),
myTransientDrawToFront (Standard_True),
+ myBackBufferRestored (Standard_False),
+ myIsImmediateDrawn (Standard_False),
myUseTransparency (Standard_False),
myUseZBuffer (Standard_False),
myUseDepthTest (Standard_True),
myUseGLLight (Standard_True),
- myBackBufferRestored (Standard_False),
//
AspectLine_set (&myDefaultAspectLine),
AspectLine_applied (NULL),
if (!theCView.IsRaytracing || myComputeInitStatus == OpenGl_CLIS_FAIL)
{
#endif
- Redraw1 (theCView, theCUnderLayer, theCOverLayer, toSwap);
- if (aFrameBuffer == NULL || !myTransientDrawToFront)
+ const Standard_Boolean isImmediate = !myView->ImmediateStructures().IsEmpty();
+ redraw1 (theCView, theCUnderLayer, theCOverLayer, isImmediate ? 0 : toSwap);
+ if (isImmediate)
{
- RedrawImmediatMode();
+ RedrawImmediate (theCView, theCUnderLayer, theCOverLayer, Standard_True);
}
theCView.WasRedrawnGL = Standard_True;
glViewport (aViewPortBack[0], aViewPortBack[1], aViewPortBack[2], aViewPortBack[3]);
}
-#if (defined(_WIN32) || defined(__WIN32__)) && defined(HAVE_VIDEOCAPTURE)
+#if defined(_WIN32) && defined(HAVE_VIDEOCAPTURE)
if (OpenGl_AVIWriter_AllowWriting (theCView.DefWindow.XWindow))
{
GLint params[4];
// reset render mode state
aGlCtx->FetchState();
}
+
+// =======================================================================
+// function : redraw1
+// purpose :
+// =======================================================================
+void OpenGl_Workspace::redraw1 (const Graphic3d_CView& theCView,
+ const Aspect_CLayer2d& theCUnderLayer,
+ const Aspect_CLayer2d& theCOverLayer,
+ const int theToSwap)
+{
+ if (myDisplay.IsNull() || myView.IsNull())
+ {
+ return;
+ }
+
+ // request reset of material
+ NamedStatus |= OPENGL_NS_RESMAT;
+
+ // GL_DITHER on/off pour le background
+ if (myBackDither)
+ {
+ glEnable (GL_DITHER);
+ }
+ else
+ {
+ glDisable (GL_DITHER);
+ }
+
+ GLbitfield toClear = GL_COLOR_BUFFER_BIT;
+ if (myUseZBuffer)
+ {
+ glDepthFunc (GL_LEQUAL);
+ glDepthMask (GL_TRUE);
+ if (myUseDepthTest)
+ {
+ glEnable (GL_DEPTH_TEST);
+ }
+ else
+ {
+ glDisable (GL_DEPTH_TEST);
+ }
+
+ glClearDepth (1.0);
+ toClear |= GL_DEPTH_BUFFER_BIT;
+ }
+ else
+ {
+ glDisable (GL_DEPTH_TEST);
+ }
+
+ if (NamedStatus & OPENGL_NS_WHITEBACK)
+ {
+ // set background to white
+ glClearColor (1.0f, 1.0f, 1.0f, 1.0f);
+ toClear |= GL_DEPTH_BUFFER_BIT;
+ }
+ else
+ {
+ glClearColor (myBgColor.rgb[0], myBgColor.rgb[1], myBgColor.rgb[2], 0.0f);
+ }
+ glClear (toClear);
+
+ Handle(OpenGl_Workspace) aWS (this);
+ myView->Render (myPrintContext, aWS, theCView, theCUnderLayer, theCOverLayer);
+
+ // swap the buffers
+ if (theToSwap)
+ {
+ GetGlContext()->SwapBuffers();
+ myBackBufferRestored = Standard_False;
+ myIsImmediateDrawn = Standard_False;
+ }
+ else
+ {
+ glFlush();
+ myBackBufferRestored = Standard_True;
+ myIsImmediateDrawn = Standard_False;
+ }
+}
+
+// =======================================================================
+// function : copyBackToFront
+// purpose :
+// =======================================================================
+void OpenGl_Workspace::copyBackToFront()
+{
+ glMatrixMode (GL_PROJECTION);
+ glPushMatrix();
+ glLoadIdentity();
+ gluOrtho2D (0.0, (GLdouble )myWidth, 0.0, (GLdouble )myHeight);
+ glMatrixMode (GL_MODELVIEW);
+ glPushMatrix();
+ glLoadIdentity();
+
+ DisableFeatures();
+
+ glDrawBuffer (GL_FRONT);
+ glReadBuffer (GL_BACK);
+
+ glRasterPos2i (0, 0);
+ glCopyPixels (0, 0, myWidth + 1, myHeight + 1, GL_COLOR);
+
+ EnableFeatures();
+
+ glMatrixMode (GL_PROJECTION);
+ glPopMatrix();
+ glMatrixMode (GL_MODELVIEW);
+ glPopMatrix();
+
+ glDrawBuffer (GL_BACK);
+
+ myIsImmediateDrawn = Standard_False;
+}
+
+// =======================================================================
+// function : DisplayCallback
+// purpose :
+// =======================================================================
+void OpenGl_Workspace::DisplayCallback (const Graphic3d_CView& theCView,
+ Standard_Integer theReason)
+{
+ if (theCView.GDisplayCB == NULL)
+ {
+ return;
+ }
+
+ Aspect_GraphicCallbackStruct aCallData;
+ aCallData.reason = theReason;
+ aCallData.glContext = GetGlContext();
+ aCallData.wsID = theCView.WsId;
+ aCallData.viewID = theCView.ViewId;
+ theCView.GDisplayCB (theCView.DefWindow.XWindow, theCView.GClientData, &aCallData);
+}
+
+// =======================================================================
+// function : RedrawImmediate
+// purpose :
+// =======================================================================
+void OpenGl_Workspace::RedrawImmediate (const Graphic3d_CView& theCView,
+ const Aspect_CLayer2d& theCUnderLayer,
+ const Aspect_CLayer2d& theCOverLayer,
+ const Standard_Boolean theToForce)
+{
+ if (!Activate())
+ {
+ return;
+ }
+
+ GLboolean isDoubleBuffer = GL_FALSE;
+ glGetBooleanv (GL_DOUBLEBUFFER, &isDoubleBuffer);
+ if (myView->ImmediateStructures().IsEmpty())
+ {
+ if (theToForce
+ || !myIsImmediateDrawn)
+ {
+ myIsImmediateDrawn = Standard_False;
+ return;
+ }
+
+ if (myBackBufferRestored
+ && isDoubleBuffer)
+ {
+ copyBackToFront();
+ }
+ else
+ {
+ Redraw (theCView, theCUnderLayer, theCOverLayer);
+ }
+ return;
+ }
+
+ if (isDoubleBuffer && myTransientDrawToFront)
+ {
+ if (!myBackBufferRestored)
+ {
+ Redraw (theCView, theCUnderLayer, theCOverLayer);
+ return;
+ }
+ copyBackToFront();
+ MakeFrontBufCurrent();
+ }
+ else
+ {
+ myBackBufferRestored = Standard_False;
+ }
+ myIsImmediateDrawn = Standard_True;
+
+ NamedStatus |= OPENGL_NS_IMMEDIATE;
+ ///glDisable (GL_LIGHTING);
+ glDisable (GL_DEPTH_TEST);
+
+ Handle(OpenGl_Workspace) aWS (this);
+ for (OpenGl_SequenceOfStructure::Iterator anIter (myView->ImmediateStructures());
+ anIter.More(); anIter.Next())
+ {
+ const OpenGl_Structure* aStructure = anIter.Value();
+ aStructure->Render (aWS);
+ }
+
+ NamedStatus &= ~OPENGL_NS_IMMEDIATE;
+
+ if (isDoubleBuffer && myTransientDrawToFront)
+ {
+ glFlush();
+ MakeBackBufCurrent();
+ }
+}
const Aspect_CLayer2d& theCUnderLayer,
const Aspect_CLayer2d& theCOverLayer);
- //! Deprecated. Simply calls Redraw().
- void Update (const Graphic3d_CView& theCView,
- const Aspect_CLayer2d& theCUnderLayer,
- const Aspect_CLayer2d& theCOverLayer)
+ Standard_Boolean SetImmediateModeDrawToFront (const Standard_Boolean theDrawToFrontBuffer);
+ void RedrawImmediate (const Graphic3d_CView& theCView,
+ const Aspect_CLayer2d& theCUnderLayer,
+ const Aspect_CLayer2d& theCOverLayer,
+ const Standard_Boolean theToForce = Standard_False);
+
+ void Invalidate (const Graphic3d_CView& /*theCView*/)
{
- Redraw (theCView, theCUnderLayer, theCOverLayer);
+ myBackBufferRestored = Standard_False;
}
//! Special method to perform printing.
void DisplayCallback (const Graphic3d_CView& theCView, int theReason);
- Standard_Boolean SetImmediateModeDrawToFront (const Standard_Boolean theDrawToFrontBuffer);
- Standard_Boolean BeginAddMode();
- void EndAddMode();
- void ClearImmediatMode (const Graphic3d_CView& theCView,
- const Standard_Boolean theToFlush);
- void RedrawImmediatMode();
- Standard_Boolean BeginImmediatMode (const Graphic3d_CView& theCView,
- const Standard_Boolean theUseDepthTest,
- const Standard_Boolean theRetainMode);
- void EndImmediatMode();
- void DrawStructure (const OpenGl_Structure* theStructure);
-
Graphic3d_PtrFrameBuffer FBOCreate (const Standard_Integer theWidth, const Standard_Integer theHeight);
void FBORelease (Graphic3d_PtrFrameBuffer theFBOPtr);
Standard_Boolean BufferDump (OpenGl_FrameBuffer* theFBOPtr,
protected:
- void CopyBuffers (const Standard_Boolean theFrontToBack);
+ //! Copy content of Back buffer to the Front buffer
+ void copyBackToFront();
virtual Standard_Boolean Activate();
- // TEMPORARY!!!
- void Redraw1 (const Graphic3d_CView& theCView,
+ void redraw1 (const Graphic3d_CView& theCView,
const Aspect_CLayer2d& theCUnderLayer,
const Aspect_CLayer2d& theCOverLayer,
- const int theToSwap);
+ const int theToSwap);
void updateMaterial (const int theFlag);
Handle(OpenGl_PrinterContext) myPrintContext;
Handle(OpenGl_View) myView; // WSViews - now just one view is supported
- Standard_Boolean myIsTransientOpen; // transientOpen
- Standard_Boolean myRetainMode;
Standard_Boolean myTransientDrawToFront; //!< optimization flag for immediate mode (to render directly to the front buffer)
-
- NCollection_Sequence<const OpenGl_Structure*> myTransientList;
-
+ Standard_Boolean myBackBufferRestored;
+ Standard_Boolean myIsImmediateDrawn; //!< flag indicates that immediate mode buffer contains some data
Standard_Boolean myUseTransparency;
Standard_Boolean myUseZBuffer;
Standard_Boolean myUseDepthTest;
Standard_Boolean myUseGLLight;
- Standard_Boolean myBackBufferRestored;
protected: //! @name fields related to status
#include <OpenGl_View.hxx>
#include <OpenGl_Display.hxx>
-//10-05-96 : CAL ; Ajout d'un nouveau delta dans les copies de pixels (voir CALL_DEF_DELTA)
-#define CALL_DEF_DELTA 10
#ifdef _WIN32
myPrintContext->SetScale ((GLfloat )aFrameWidth /viewWidth,
(GLfloat )aFrameHeight/viewHeight);
aFrameBuffer->SetupViewport (GetGlContext());
- Redraw1(ACView, ACUnderLayer, ACOverLayer, 0);
+ redraw1 (ACView, ACUnderLayer, ACOverLayer, 0);
if (!myTransientDrawToFront)
{
// render to FBO only if allowed to render to back buffer
- RedrawImmediatMode();
+ RedrawImmediate (ACView, ACUnderLayer, ACOverLayer, Standard_True);
}
glReadPixels (0, 0, aFrameWidth, aFrameHeight,
GL_BGR_EXT, GL_UNSIGNED_BYTE, (GLvoid* )aViewBuffer);
// draw to the offscreen buffer and capture the result
aFrameBuffer->SetupViewport (GetGlContext());
- Redraw1(ACView, ACUnderLayer, ACOverLayer, 0);
+ redraw1 (ACView, ACUnderLayer, ACOverLayer, 0);
if (!myTransientDrawToFront)
{
// render to FBO only if forces to render to back buffer
- RedrawImmediatMode();
+ RedrawImmediate (ACView, ACUnderLayer, ACOverLayer, Standard_True);
}
glReadPixels (0, 0, aFrameWidth, aFrameHeight,
GL_BGR_EXT, GL_UNSIGNED_BYTE, (GLvoid* )aViewBuffer);
return Standard_False;
#endif
}
-
-/*----------------------------------------------------------------------*/
-
-//redrawView
-void OpenGl_Workspace::Redraw1 (const Graphic3d_CView& ACView,
- const Aspect_CLayer2d& ACUnderLayer,
- const Aspect_CLayer2d& ACOverLayer,
- const int aswap)
-{
- if (myDisplay.IsNull() || myView.IsNull())
- return;
-
- // Request reset of material
- NamedStatus |= OPENGL_NS_RESMAT;
-
- /* GL_DITHER on/off pour le background */
- if (myBackDither)
- glEnable (GL_DITHER);
- else
- glDisable (GL_DITHER);
-
- GLbitfield toClear = GL_COLOR_BUFFER_BIT;
- if ( myUseZBuffer )
- {
- glDepthFunc(GL_LEQUAL);
- glDepthMask(GL_TRUE);
-
- // SAV checking if depth test was deprecated somewhere outside
- if ( myUseDepthTest )
- glEnable(GL_DEPTH_TEST);
- else
- glDisable(GL_DEPTH_TEST);
-
- glClearDepth(1.0);
- toClear |= GL_DEPTH_BUFFER_BIT;
- }
- else
- {
- glDisable(GL_DEPTH_TEST);
- }
-
- if ( NamedStatus & OPENGL_NS_WHITEBACK )
- {
- // Set background to white
- glClearColor (1.F, 1.F, 1.F, 1.F);
- toClear |= GL_DEPTH_BUFFER_BIT;
- }
- else
- {
- glClearColor (myBgColor.rgb[0], myBgColor.rgb[1], myBgColor.rgb[2], 0.F);
- }
- glClear (toClear);
-
- Handle(OpenGl_Workspace) aWS(this);
- myView->Render (myPrintContext, aWS, ACView, ACUnderLayer, ACOverLayer);
-
- // Swap the buffers
- if ( aswap )
- {
- GetGlContext()->SwapBuffers();
- myBackBufferRestored = Standard_False;
- }
- else
- glFlush();
-}
-
-/*----------------------------------------------------------------------*/
-
-//TelCopyBuffers
-void OpenGl_Workspace::CopyBuffers (const Standard_Boolean theFrontToBack)
-{
- if (theFrontToBack)
- {
- myBackBufferRestored = Standard_False;
- }
-
- glMatrixMode (GL_PROJECTION);
- glPushMatrix ();
- glLoadIdentity ();
- gluOrtho2D ((GLdouble) 0., (GLdouble) myWidth, 0., (GLdouble) myHeight);
- glMatrixMode (GL_MODELVIEW);
- glPushMatrix ();
- glLoadIdentity ();
-
- DisableFeatures();
-
- glDrawBuffer (theFrontToBack ? GL_BACK : GL_FRONT);
- glReadBuffer (theFrontToBack ? GL_FRONT : GL_BACK);
-
- glRasterPos2i (0, 0);
- glCopyPixels (0, 0, myWidth + 1, myHeight + 1, GL_COLOR);
-
- EnableFeatures();
-
- glMatrixMode (GL_PROJECTION);
- glPopMatrix ();
- glMatrixMode (GL_MODELVIEW);
- glPopMatrix ();
-
- glDrawBuffer (GL_BACK);
-}
-
-/*----------------------------------------------------------------------*/
-
-//call_subr_displayCB
-void OpenGl_Workspace::DisplayCallback (const Graphic3d_CView& theCView,
- int theReason)
-{
- if (theCView.GDisplayCB == NULL)
- {
- return;
- }
-
- Aspect_GraphicCallbackStruct aCallData;
- aCallData.reason = theReason;
- aCallData.glContext = GetGlContext();
- aCallData.wsID = theCView.WsId;
- aCallData.viewID = theCView.ViewId;
- theCView.GDisplayCB (theCView.DefWindow.XWindow, theCView.GClientData, &aCallData);
-}
-
-/*----------------------------------------------------------------------*/
+++ /dev/null
-// Created on: 2011-09-20
-// 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 <stdio.h>
-
-#include <OpenGl_GlCore11.hxx>
-#include <OpenGl_Context.hxx>
-#include <OpenGl_Structure.hxx>
-#include <OpenGl_Workspace.hxx>
-
-/*----------------------------------------------------------------------*/
-/* Mode Ajout */
-/*----------------------------------------------------------------------*/
-
-//call_togl_begin_ajout_mode
-Standard_Boolean OpenGl_Workspace::BeginAddMode()
-{
- if (!Activate())
- {
- return Standard_False;
- }
-
- NamedStatus |= OPENGL_NS_ADD;
-
- MakeFrontAndBackBufCurrent();
-
- //TsmPushAttri();
-
- return Standard_True;
-}
-
-/*----------------------------------------------------------------------*/
-
-//call_togl_end_ajout_mode
-void OpenGl_Workspace::EndAddMode ()
-{
- if (NamedStatus & OPENGL_NS_ADD)
- {
- OpenGl_Workspace::MakeBackBufCurrent();
-
- // Clear add mode flag
- NamedStatus &= ~OPENGL_NS_ADD;
- }
-
- // FMN necessaire pour l'affichage sur WNT
- glFlush();
-
- //TsmPopAttri();
-}
-
-/*----------------------------------------------------------------------*/
-/* Mode Transient */
-/*----------------------------------------------------------------------*/
-
-//call_togl_clear_immediat_mode
-void OpenGl_Workspace::ClearImmediatMode (const Graphic3d_CView& theCView,
- const Standard_Boolean theToFlush)
-{
- if (myIsTransientOpen)
- {
- EndImmediatMode();
- }
-
- if (!Activate())
- {
- myTransientList.Clear(); // Clear current list contents
- return;
- }
-
- GLboolean isDoubleBuffer = GL_FALSE;
- glGetBooleanv (GL_DOUBLEBUFFER, &isDoubleBuffer);
- if (!myBackBufferRestored || !myTransientDrawToFront || !isDoubleBuffer)
- {
- Redraw1 (theCView, *((CALL_DEF_LAYER* )theCView.ptrUnderLayer), *((CALL_DEF_LAYER* )theCView.ptrOverLayer), theToFlush);
-
- // After a redraw,
- // Made the back identical to the front buffer.
- // Always perform full copy (partial update optimization is useless on mordern hardware)!
- if (myRetainMode && myTransientDrawToFront && isDoubleBuffer)
- {
- const Standard_Boolean toCopyFrontToBack = Standard_True;
- CopyBuffers (toCopyFrontToBack);
- }
-
- myBackBufferRestored = Standard_True;
- }
- else if (!myTransientList.IsEmpty() && isDoubleBuffer)
- {
- // restore pixels from the back buffer
- const Standard_Boolean toCopyFrontToBack = Standard_False;
- CopyBuffers (toCopyFrontToBack);
- }
-
- myTransientList.Clear(); // clear current list contents
-}
-
-/*----------------------------------------------------------------------*/
-
-//call_togl_redraw_immediat_mode
-void OpenGl_Workspace::RedrawImmediatMode()
-{
- if (!myRetainMode || myTransientList.IsEmpty())
- {
- return;
- }
-
- GLboolean isDoubleBuffer = GL_FALSE;
- glGetBooleanv (GL_DOUBLEBUFFER, &isDoubleBuffer);
- if (isDoubleBuffer && myTransientDrawToFront)
- {
- MakeFrontBufCurrent();
- }
- else
- {
- myBackBufferRestored = Standard_False;
- }
- glDisable (GL_LIGHTING);
-
- Handle(OpenGl_Workspace) aWS (this);
- for (Standard_Integer anIter = 1; anIter <= myTransientList.Size(); ++anIter)
- {
- const OpenGl_Structure* aStructure = myTransientList.Value (anIter);
- aStructure->Render (aWS);
- }
-
- if (isDoubleBuffer && myTransientDrawToFront)
- {
- glFlush(); // FMN necessaire pour l'affichage sur WNT
- MakeBackBufCurrent();
- }
-}
-
-/*----------------------------------------------------------------------*/
-
-//call_togl_begin_immediat_mode
-Standard_Boolean OpenGl_Workspace::BeginImmediatMode (const Graphic3d_CView& theCView,
- const Standard_Boolean theToUseDepthTest,
- const Standard_Boolean theRetainMode)
-{
- if (!Activate())
- {
- return Standard_False;
- }
-
- OpenGl_Workspace::ClearImmediatMode (theCView, Standard_True);
-
- NamedStatus |= OPENGL_NS_IMMEDIATE;
- myRetainMode = theRetainMode;
-
- if (myTransientDrawToFront)
- {
- MakeFrontBufCurrent();
- }
-
- //TsmPushAttri();
-
- if (myRetainMode)
- {
- myIsTransientOpen = Standard_True;
- }
-
- if (theToUseDepthTest)
- {
- glEnable (GL_DEPTH_TEST);
- }
- else
- {
- glDisable (GL_DEPTH_TEST);
- }
-
- return Standard_True;
-}
-
-/*----------------------------------------------------------------------*/
-
-//call_togl_end_immediat_mode
-void OpenGl_Workspace::EndImmediatMode()
-{
- if (NamedStatus & OPENGL_NS_IMMEDIATE)
- {
- if (myIsTransientOpen)
- {
- myIsTransientOpen = Standard_False;
- }
- if (myTransientDrawToFront)
- {
- MakeBackBufCurrent();
- }
-
- // Clear immediate mode flag
- NamedStatus &= ~OPENGL_NS_IMMEDIATE;
- }
-
- if (myTransientDrawToFront)
- {
- // Ajout CAL : pour voir quelque chose avant le prochain begin_immediat_mode
- glFinish();
- }
- else
- {
- GetGlContext()->SwapBuffers();
- }
-
- //TsmPopAttri();
-}
-
-//call_togl_draw_structure
-void OpenGl_Workspace::DrawStructure (const OpenGl_Structure* theStructure)
-{
- if (NamedStatus & (OPENGL_NS_ADD | OPENGL_NS_IMMEDIATE))
- {
- Handle(OpenGl_Workspace) aWS (this);
- theStructure->Render (aWS);
-
- if (myIsTransientOpen && myRetainMode)
- {
- myTransientList.Append (theStructure);
- }
- }
-}
Prs3d_WFShape.cxx
Prs3d_DimensionUnits.hxx
Prs3d_DimensionUnits.cxx
+Prs3d_PresentationShadow.hxx
+Prs3d_PresentationShadow.cxx
ShadingAspect from Prs3d
is
- Create (aStructureManager: StructureManager from Graphic3d;
- Init: Boolean from Standard = Standard_True)
- ---Purpose: Constructs a presentation object
- -- if <Init> is false, no color initialization is done.
- returns mutable Presentation from Prs3d;
+ Create (theStructManager : StructureManager from Graphic3d;
+ theToInit : Boolean from Standard = Standard_True)
+ ---Purpose: Constructs a presentation object
+ -- if <Init> is false, no color initialization is done.
+ returns mutable Presentation from Prs3d;
+
+ Create (theStructManager : StructureManager from Graphic3d;
+ thePrs : Presentation from Prs3d)
+ ---Purpose: Constructs a presentation object.
+ returns mutable Presentation from Prs3d;
Compute(me : mutable; aProjector: DataStructureManager from Graphic3d)
returns Structure from Graphic3d
NewGroup(me:mutable) returns mutable Group from Graphic3d is static private;
fields
- myStruct : Structure from Graphic3d;
- myCurrentGroup: Group from Graphic3d;
---
-friends
- class Root from Prs3d
-
-end Presentation;
-
-
-
-
+ myCurrentGroup : Group from Graphic3d;
+friends
+ class Root from Prs3d
+end Presentation;
//=======================================================================
//function : Prs3d_Presentation
-//purpose :
+//purpose :
//=======================================================================
-Prs3d_Presentation::Prs3d_Presentation
- (const Handle(Graphic3d_StructureManager)& aViewer,
- const Standard_Boolean Init):
- Graphic3d_Structure(aViewer)
+Prs3d_Presentation::Prs3d_Presentation (const Handle(Graphic3d_StructureManager)& theViewer,
+ const Standard_Boolean theToInit)
+: Graphic3d_Structure (theViewer)
{
- if (Init) {
- Graphic3d_MaterialAspect aMat (Graphic3d_NOM_BRASS);
- Quantity_Color Col;
- // Ceci permet de recuperer la couleur associee
- // au materiau defini par defaut.
-//POP pour K4L
- Col = aMat.AmbientColor ();
-// Col = aMat.Color ();
-
- // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
- // It is necessary to set default polygon offsets for a new presentation
- Handle(Graphic3d_AspectFillArea3d) aDefAspect =
- new Graphic3d_AspectFillArea3d (Aspect_IS_SOLID,
- Col,
- Col,
- Aspect_TOL_SOLID,
- 1.0,
- Graphic3d_NOM_BRASS,
- Graphic3d_NOM_BRASS);
- aDefAspect->SetPolygonOffsets( Aspect_POM_Fill, 1., 0. );
- SetPrimitivesAspect( aDefAspect );
- // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
+ if (!theToInit)
+ {
+ return;
}
-// myStruct = Handle(Graphic3d_Structure)::DownCast(This ());
-// myCurrentGroup = new Graphic3d_Group(myStruct);
+ Graphic3d_MaterialAspect aMat (Graphic3d_NOM_BRASS);
+ Quantity_Color aColor = aMat.AmbientColor();
+ // It is necessary to set default polygon offsets for a new presentation
+ Handle(Graphic3d_AspectFillArea3d) aDefAspect =
+ new Graphic3d_AspectFillArea3d (Aspect_IS_SOLID,
+ aColor,
+ aColor,
+ Aspect_TOL_SOLID,
+ 1.0,
+ Graphic3d_NOM_BRASS,
+ Graphic3d_NOM_BRASS);
+ aDefAspect->SetPolygonOffsets (Aspect_POM_Fill, 1.0f, 0.0f);
+ SetPrimitivesAspect (aDefAspect);
+}
+
+//=======================================================================
+//function : Prs3d_Presentation
+//purpose :
+//=======================================================================
+Prs3d_Presentation::Prs3d_Presentation (const Handle(Graphic3d_StructureManager)& theViewer,
+ const Handle(Prs3d_Presentation)& thePrs)
+: Graphic3d_Structure (theViewer, thePrs)
+{
+ Graphic3d_MaterialAspect aMat (Graphic3d_NOM_BRASS);
+ Quantity_Color aColor = aMat.AmbientColor();
+ // It is necessary to set default polygon offsets for a new presentation
+ Handle(Graphic3d_AspectFillArea3d) aDefAspect =
+ new Graphic3d_AspectFillArea3d (Aspect_IS_SOLID,
+ aColor,
+ aColor,
+ Aspect_TOL_SOLID,
+ 1.0,
+ Graphic3d_NOM_BRASS,
+ Graphic3d_NOM_BRASS);
+ aDefAspect->SetPolygonOffsets (Aspect_POM_Fill, 1.0f, 0.0f);
+ SetPrimitivesAspect (aDefAspect);
}
//=======================================================================
--- /dev/null
+// Created on: 2014-03-12
+// 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.
+
+#include <Prs3d_PresentationShadow.hxx>
+
+IMPLEMENT_STANDARD_HANDLE (Prs3d_PresentationShadow, Prs3d_Presentation)
+IMPLEMENT_STANDARD_RTTIEXT(Prs3d_PresentationShadow, Prs3d_Presentation)
+
+//=======================================================================
+//function : Prs3d_PresentationShadow
+//purpose :
+//=======================================================================
+Prs3d_PresentationShadow::Prs3d_PresentationShadow (const Handle(Graphic3d_StructureManager)& theViewer,
+ const Handle(Prs3d_Presentation)& thePrs)
+: Prs3d_Presentation (theViewer, thePrs)
+{
+ //
+}
--- /dev/null
+// Created on: 2014-03-12
+// 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 _Prs3d_PresentationShadow_HeaderFile
+#define _Prs3d_PresentationShadow_HeaderFile
+
+#include <Prs3d_Presentation.hxx>
+
+//! Defines a "shadow" of existing presentation object with custom aspects.
+class Prs3d_PresentationShadow : public Prs3d_Presentation
+{
+
+public:
+
+ //! Constructs a shadow of existing presentation object.
+ Standard_EXPORT Prs3d_PresentationShadow (const Handle(Graphic3d_StructureManager)& theViewer,
+ const Handle(Prs3d_Presentation)& thePrs);
+
+private:
+
+ DEFINE_STANDARD_RTTI(Prs3d_PresentationShadow)
+
+};
+
+DEFINE_STANDARD_HANDLE(Prs3d_PresentationShadow, Prs3d_Presentation)
+
+#endif // _Prs3d_PresentationShadow_HeaderFile
--- /dev/null
+PrsMgr_ListOfPresentations.hxx
-- removal mode, where every new point of view
-- entails recalculation of the display.
- deferred class PresentationManager;
+ class PresentationManager;
+ alias PresentationManager3d is PresentationManager;
deferred class Presentation;
deferred class PresentableObject;
-
- class PresentationManager3d;
-
+
+ imported ListOfPresentations;
+
class Prs;
class Presentation3d;
--- /dev/null
+// Created on: 2013-11-24
+// Created by: Kirill Gavrilov
+// Copyright (c) 2013 OPEN CASCADE SAS
+//
+// The content of this file is subject to the Open CASCADE Technology Public
+// License Version 6.5 (the "License"). You may not use the content of this file
+// except in compliance with the License. Please obtain a copy of the License
+// at http://www.opencascade.org and read it completely before using this file.
+//
+// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
+// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
+//
+// The Original Code and all software distributed under the License is
+// distributed on an "AS IS" basis, without warranty of any kind, and the
+// Initial Developer hereby disclaims all such warranties, including without
+// limitation, any warranties of merchantability, fitness for a particular
+// purpose or non-infringement. Please see the License for the specific terms
+// and conditions governing the rights and limitations under the License.
+
+#ifndef _PrsMgr_ListOfPresentations_H__
+#define _PrsMgr_ListOfPresentations_H__
+
+#include <NCollection_List.hxx>
+#include <Prs3d_Presentation.hxx>
+
+typedef NCollection_List<Handle(Prs3d_Presentation)> PrsMgr_ListOfPresentations;
+
+#endif // _PrsMgr_ListOfPresentations_H__
class Presentation3d from PrsMgr inherits Presentation from PrsMgr
uses
- PresentationManager3d from PrsMgr,
+ PresentationManager from PrsMgr,
Presentation from Prs3d,
NameOfColor from Quantity,
Transformation from Geom,
Projector from Prs3d,
KindOfPrs from PrsMgr
is
- Create(aPresentationManager: PresentationManager3d from PrsMgr;
+ Create(aPresentationManager: PresentationManager from PrsMgr;
aPresentableObject: PresentableObject from PrsMgr)
returns mutable Presentation3d from PrsMgr
is private;
myDisplayReason: Boolean from Standard;
myPresentableObject: PresentableObjectPointer from PrsMgr;
friends
- class PresentationManager3d from PrsMgr,
+ class PresentationManager from PrsMgr,
class PresentableObject from PrsMgr,
class Prs from PrsMgr
end Presentation3d from PrsMgr;
-- Alternatively, this file may be used under the terms of Open CASCADE
-- commercial license or contractual agreement.
-deferred class PresentationManager from PrsMgr
+class PresentationManager from PrsMgr
inherits TShared from MMgt
- ---Purpose: This class represents any kind of entity able to collect
- -- representations of an object, to show or erase them.
- -- Example: StructureManager from Graphic3d
- -- View from Graphic2d
+ ---Purpose: A framework to manage 3D displays, graphic entities and their updates.
+ -- Used in the AIS package (Application Interactive Services), to enable the advanced user to define the
+ -- default display mode of a new interactive object which extends the list of signatures and types.
+ -- Definition of new display types is handled by calling the presentation algorithms provided by the StdPrs package.
uses
- Presentation from PrsMgr,
- PresentableObject from PrsMgr,
- View from V3d,
- ListOfTransient from TColStd
-
-
-raises
- NoSuchObject from Standard
+
+ StructureManager from Graphic3d,
+ PresentableObject from PrsMgr,
+ ListOfPresentations from PrsMgr,
+ Length,NameOfColor from Quantity,
+ Transformation from Geom,
+ NameOfMaterial from Graphic3d,
+ Presentation from PrsMgr,
+ Presentation3d from PrsMgr,
+ View from V3d,
+ ShadingAspect from Prs3d,
+ Presentation from Prs3d
+
+raises
+
+ NoSuchObject from Standard
+
is
- Initialize;
-
- Is3D(me) returns Boolean from Standard is deferred;
-
- Display(me: mutable; aPresentableObject: mutable PresentableObject from PrsMgr;
- aMode: Integer from Standard = 0)
- ---Purpose: Displays the presentation of the object in the given
- -- Presentation manager with the given mode.
- -- The mode should be enumerated by the object which
- -- inherits PresentableObject.
- is static;
-
- Erase(me:mutable; aPresentableObject: PresentableObject from PrsMgr;
- aMode: Integer from Standard = 0)
- ---Level: public
- ---Purpose: erases the presentation of the object in the given
- -- Presentation manager with the given mode.
- is static;
-
- Clear(me:mutable; aPresentableObject: PresentableObject from PrsMgr;
- aMode: Integer from Standard = 0)
- is virtual;
- ---Purpose:
- -- Clears the presentation of the presentable object
- -- aPresentableObject in this framework with the
- -- display mode aMode.
-
- SetVisibility (me: mutable; thePresentableObject: PresentableObject from PrsMgr;
- theMode: Integer from Standard;
- theValue: Boolean from Standard);
- ---Purpose: Sets the visibility of presentable object.
-
- Highlight(me: mutable; aPresentableObject: mutable PresentableObject from PrsMgr;
- aMode: Integer from Standard = 0)
- ---Purpose: Highlights the presentation of the presentable object
- -- aPresentableObject in this framework with the display mode aMode.
- is static;
-
- Unhighlight(me:mutable; aPresentableObject: PresentableObject from PrsMgr;
- aMode: Integer from Standard = 0)
- ---Purpose: Removes highlighting from the presentation of the
- -- presentable object aPresentableObject in this
- -- framework with the display mode aMode.
- is static;
-
- SetDisplayPriority(me;aPresentableObject: PresentableObject from PrsMgr;
- amode:Integer from Standard;
- aNewPrior:Integer from Standard);
- ---Purpose:
- -- Sets the display priority aNewPrior of the
- -- presentable object aPresentableObject in this
- -- framework with the display mode aMode.
-
- DisplayPriority(me;aPresentableObject: PresentableObject from PrsMgr;
- amode:Integer from Standard)
- returns Integer from Standard;
- ---Purpose:
- -- Returns the display priority of the presentable object
- -- aPresentableObject in this framework with the
- -- display mode aMode.
-
- SetZLayer ( me : mutable;
- thePresentableObject : PresentableObject from PrsMgr;
- theLayerId : Integer from Standard )
- is static;
- ---Purpose: Set Z layer ID for all presentations of the object.
-
- GetZLayer ( me;
- thePresentableObject : PresentableObject from PrsMgr )
- returns Integer from Standard is static;
- ---Purpose: Get Z layer ID assigned to all presentations of the object.
- -- Method returns -1 value if object has no presentations and is
- -- impossible to get layer index.
-
- IsDisplayed(me;aPresentableObject: PresentableObject from PrsMgr;
- aMode: Integer from Standard = 0)
- ---Purpose: Returns true if the presentation of the presentable
- -- object aPresentableObject in this framework with the
- -- display mode aMode is displayed.
- returns Boolean from Standard
- is static;
-
- IsHighlighted(me;aPresentableObject: PresentableObject from PrsMgr;
- aMode: Integer from Standard = 0)
- ---Purpose: Returns true if the presentation of the presentable
- -- object aPresentableObject in this framework with the
- -- display mode aMode is highlighted.
- returns Boolean from Standard
- is static;
-
-
- Update(me; aPresentableObject: PresentableObject from PrsMgr;
- aMode: Integer from Standard = 0)
- ---Purpose: Updates the presentation of the presentable object
- -- aPresentableObject in this framework with the display mode aMode.
- is static;
-
- ---Category: Immediate display methods.
-
- BeginDraw(me: mutable) is virtual;
- ---Purpose: initializes the list of Prs to be displayed in transient mode
-
- Add(me: mutable ; aPresentableObject: PresentableObject from PrsMgr;
- aMode: Integer from Standard = 0);
- ---Purpose: Performs an iteration of the transient objects to look
- -- for the presentable objects with the display mode aMode.
- -- Appends the presentation of the presentable object
- -- aPresentableObject with the mode aMode to the list
- -- of objects in immediate mode.
-
- Remove(me: mutable ; aPresentableObject: PresentableObject from PrsMgr;
- aMode: Integer from Standard = 0);
- ---Purpose: Performs an iteration of the transient objects to look
- -- for the presentable objects with the display mode aMode.
- -- Removes the presentation of the presentable object
- -- aPresentableObject with the mode aMode from the
- -- list of objects in immediate mode.
-
- EndDraw(me: mutable; aView: View from V3d; DoubleBuffer: Boolean from Standard = Standard_False)
- ---Purpose: Allows rapid drawing of the view aView by avoiding
- -- an update of the whole background. If DoubleBuffer
- -- is true, the background is drawn.
- is deferred;
-
- IsImmediateModeOn(me) returns Boolean from Standard;
- ---C++: inline
- ---Purpose: Returns true if immediate (transient) mode is on.
-
-
-
- ---Category: Private & deferred methods.
-
- HasPresentation (me;
- aPresentableObject: PresentableObject from PrsMgr;
- aMode: Integer from Standard = 0)
- returns Boolean from Standard
- is static;
- ---Purpose: Returns true if there is a presentation of the
- -- presentable object aPresentableObject in this
- -- framework, aPresentableObject having the display mode aMode.
-
- Presentation (me;
- aPresentableObject: PresentableObject from PrsMgr;
- aMode: Integer from Standard = 0)
- returns mutable Presentation from PrsMgr
- raises NoSuchObject from Standard
- is static;
- ---Purpose: Returns the presentation Presentation of the
- -- presentable object aPresentableObject in this
- -- framework. aPresentableObject has the display mode aMode.
-
- AddPresentation(me: mutable;
- aPresentableObject: PresentableObject from PrsMgr;
- aMode: Integer from Standard = 0)
- ---Purpose: Adds a presentation of the presentable object
- -- aPresentableObject to this framework.
- -- aPresentableObject has the display mode aMode.
- is protected;
-
- RemovePresentation(me: mutable;
- aPresentableObject: PresentableObject from PrsMgr;
- aMode: Integer from Standard = 0)
- ---Purpose: Removes a presentation of the presentable object
- -- aPresentableObject to this framework.
- -- aPresentableObject has the display mode aMode.
- is protected;
-
- newPresentation(me: mutable; aPresentableObject: PresentableObject from PrsMgr)
- returns mutable Presentation from PrsMgr
- ---Level: Internal
- ---Purpose: Creates a new presentation in the presentation manager.
- is deferred private;
+ Create (theStructureManager : StructureManager from Graphic3d)
+ returns mutable PresentationManager from PrsMgr;
+ ---Purpose:
+ -- Creates a framework to manage displays and graphic entities with the 3D view theStructureManager.
+
+ Display (me : mutable;
+ thePrsObject : mutable PresentableObject from PrsMgr;
+ theMode : Integer from Standard = 0)
+ ---Purpose: Displays the presentation of the object in the given Presentation manager with the given mode.
+ -- The mode should be enumerated by the object which inherits PresentableObject.
+ is static;
+
+ Erase (me : mutable;
+ thePrsObject : PresentableObject from PrsMgr;
+ theMode : Integer from Standard = 0)
+ ---Level: public
+ ---Purpose: erases the presentation of the object in the given
+ -- Presentation manager with the given mode.
+ is static;
+
+ Clear (me : mutable;
+ thePrsObject : PresentableObject from PrsMgr;
+ theMode : Integer from Standard = 0)
+ is virtual;
+ ---Purpose:
+ -- Clears the presentation of the presentable object thePrsObject in this framework with the display mode theMode.
+
+ SetVisibility (me : mutable;
+ thePrsObject : PresentableObject from PrsMgr;
+ theMode : Integer from Standard;
+ theValue : Boolean from Standard);
+ ---Purpose: Sets the visibility of presentable object.
+
+ Highlight (me : mutable;
+ thePrsObject : mutable PresentableObject from PrsMgr;
+ theMode : Integer from Standard = 0)
+ ---Purpose: Highlights the presentation of the presentable object
+ -- thePrsObject in this framework with the display mode theMode.
+ is static;
+
+ Unhighlight (me : mutable;
+ thePrsObject : PresentableObject from PrsMgr;
+ theMode : Integer from Standard = 0)
+ ---Purpose: Removes highlighting from the presentation of the
+ -- presentable object thePrsObject in this framework with the display mode theMode.
+ is static;
+
+ SetDisplayPriority (me;
+ thePrsObject : PresentableObject from PrsMgr;
+ theMode : Integer from Standard;
+ theNewPrior : Integer from Standard);
+ ---Purpose:
+ -- Sets the display priority theNewPrior of the
+ -- presentable object thePrsObject in this framework with the display mode theMode.
+
+ DisplayPriority (me;
+ thePrsObject : PresentableObject from PrsMgr;
+ theMode : Integer from Standard)
+ returns Integer from Standard;
+ ---Purpose:
+ -- Returns the display priority of the presentable object
+ -- thePrsObject in this framework with the display mode theMode.
+
+ SetZLayer (me : mutable;
+ thePrsObject : PresentableObject from PrsMgr;
+ theLayerId : Integer from Standard)
+ is static;
+ ---Purpose: Set Z layer ID for all presentations of the object.
+
+ GetZLayer (me;
+ thePrsObject : PresentableObject from PrsMgr)
+ returns Integer from Standard is static;
+ ---Purpose: Get Z layer ID assigned to all presentations of the object.
+ -- Method returns -1 value if object has no presentations and is
+ -- impossible to get layer index.
+
+ IsDisplayed (me;
+ thePrsObject : PresentableObject from PrsMgr;
+ theMode: Integer from Standard = 0)
+ --Purpose: Returns true if the presentation of the presentable
+ -- object thePrsObject in this framework with the display mode theMode is displayed.
+ returns Boolean from Standard
+ is static;
+
+ IsHighlighted (me;
+ thePrsObject : PresentableObject from PrsMgr;
+ theMode: Integer from Standard = 0)
+ ---Purpose: Returns true if the presentation of the presentable
+ -- object thePrsObject in this framework with the display mode theMode is highlighted.
+ returns Boolean from Standard
+ is static;
+
+ Update (me;
+ thePrsObject : PresentableObject from PrsMgr;
+ theMode : Integer from Standard = 0)
+ ---Purpose: Updates the presentation of the presentable object
+ -- thePrsObject in this framework with the display mode theMode.
+ is static;
+
+---Category: Immediate display methods.
+
+ BeginImmediateDraw (me : mutable);
+ ---Purpose: Resets the transient list of presentations previously displayed in immediate mode
+ -- and begins accumulation of new list by following AddToImmediateList()/Color()/Highlight() calls.
+
+ ClearImmediateDraw (me : mutable);
+ ---Purpose: Resets the transient list of presentations previously displayed in immediate mode.
+
+ AddToImmediateList (me : mutable;
+ thePrs : Presentation from Prs3d);
+ ---Purpose: Stores thePrs in the transient list of presentations to be displayed in immediate mode.
+ -- Will be taken in account in EndImmediateDraw method.
+
+ EndImmediateDraw (me : mutable;
+ theView : View from V3d);
+ ---Purpose: Allows rapid drawing of the view theView by avoiding an update of the whole background.
+
+ IsImmediateModeOn (me) returns Boolean from Standard;
+ ---C++: inline
+ ---Purpose: Returns true if Presentation Manager is accumulating transient list of presentations to be displayed in immediate mode.
+
+---Category: Hilighting methods.
+
+ Color (me : mutable;
+ thePrsObject : mutable PresentableObject from PrsMgr;
+ theColor : NameOfColor from Quantity = Quantity_NOC_YELLOW;
+ theMode : Integer from Standard = 0)
+ ---Purpose: Highlights the graphic object thePrsObject in the color theColor.
+ -- thePrsObject has the display mode theMode;
+ -- this has the default value of 0, that is, the wireframe display mode.
+ is static;
+
+ BoundBox (me : mutable;
+ thePrsObject : mutable PresentableObject from PrsMgr;
+ theMode : Integer from Standard = 0)
+ ---Purpose: highlights the boundbox of the presentation
+ is static;
+
+---Category: references to other presentation.
+
+ Connect (me : mutable;
+ thePrsObject : PresentableObject from PrsMgr;
+ theOtherObject : mutable PresentableObject from PrsMgr;
+ theMode : Integer from Standard = 0;
+ theOtherMode : Integer from Standard = 0)
+ is static;
+
+---Category: Transformation methods.
+
+ Transform (me : mutable;
+ thePrsObject : PresentableObject from PrsMgr;
+ theTransformation : Transformation from Geom;
+ theMode : Integer from Standard = 0)
+ ---Purpose:
+ -- Sets the transformation theTransformation for the presentable object thePrsObject.
+ -- thePrsObject has the display mode theMode; this has the default value of 0, that is, the wireframe display mode.
+ is static;
+
+ Place (me : mutable;
+ thePrsObject : PresentableObject from PrsMgr;
+ X, Y, Z : Length from Quantity;
+ theMode : Integer from Standard = 0)
+ ---Purpose:
+ -- Sets a position to move the presentable object
+ -- aPresentableObject to. This position is defined by the
+ -- lengths along the x, y and z axes: X, Y and Z respectively.
+ -- aPresentableObject has the display mode aMode;
+ -- this has the default value of 0, that is, the wireframe display mode.
+ is static;
+
+ Multiply (me : mutable;
+ thePrsObject : PresentableObject from PrsMgr;
+ theTransformation : Transformation from Geom;
+ theMode : Integer from Standard = 0)
+ ---Purpose:
+ -- Defines the transformation theTransformation for the presentable object thePrsObject.
+ -- thePrsObject has the display mode aMode; this has the default value of 0, that is, the wireframe display mode.
+ is static;
+
+ Move (me : mutable;
+ thePrsObject : PresentableObject from PrsMgr;
+ X, Y, Z : Length from Quantity;
+ theMode : Integer from Standard = 0)
+ ---Purpose:
+ -- Sets a position to move the presentable object thePrsObject to. This position is defined by the lengths along the x, y and z axes: X, Y and Z respectively.
+ -- thePrsObject has the display mode aMode; this has the default value of 0, that is, the wireframe display mode.
+ is static;
+
+ StructureManager (me) returns mutable StructureManager from Graphic3d
+ is static;
+ ---C++: inline
+ ---C++: return const&
+ ---Purpose: Returns the structure manager.
+
+ SetShadingAspect (me : mutable;
+ thePrsObject : PresentableObject from PrsMgr;
+ theColor : NameOfColor from Quantity;
+ theMaterial : NameOfMaterial from Graphic3d;
+ theMode : Integer from Standard = 0)
+ ---Purpose: this method will change the color and the aspect of the presentations containing shaded structures.
+ is static;
+
+ SetShadingAspect (me : mutable;
+ thePrsObject : PresentableObject from PrsMgr;
+ theShadingAspect : ShadingAspect from Prs3d;
+ theMode : Integer from Standard = 0)
+ ---Purpose: this method will change the color and the aspect of the presentations containing shaded structures.
+ is static;
+
+ CastPresentation (me;
+ thePrsObject : PresentableObject from PrsMgr;
+ theMode : Integer from Standard = 0)
+ returns mutable Presentation3d from PrsMgr
+ is static;
+
+---Category: Private & deferred methods.
+
+ HasPresentation (me;
+ thePrsObject : PresentableObject from PrsMgr;
+ theMode : Integer from Standard = 0)
+ returns Boolean from Standard
+ is static;
+ ---Purpose: Returns true if there is a presentation of the
+ -- presentable object thePrsObject in this framework, thePrsObject having the display mode theMode.
+
+ Presentation (me;
+ thePrsObject : PresentableObject from PrsMgr;
+ theMode : Integer from Standard = 0)
+ returns mutable 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;
+
+ RemovePresentation (me : mutable;
+ thePrsObject : PresentableObject from PrsMgr;
+ theMode : Integer from Standard = 0)
+ ---Purpose: Removes a presentation of the presentable object thePrsObject to this framework. thePrsObject has the display mode theMode.
+ is protected;
fields
- myImmediateMode: Boolean from Standard is protected;
- myImmediateList: ListOfTransient from TColStd is protected;
-
+
+ myStructureManager : StructureManager from Graphic3d is protected;
+ myImmediateModeOn : Integer from Standard is protected;
+ myImmediateList : ListOfPresentations from PrsMgr is protected;
+ myImmediateView : View from V3d is protected;
+
end PresentationManager from PrsMgr;
// commercial license or contractual agreement.
#include <PrsMgr_PresentationManager.ixx>
+
+#include <Graphic3d_GraphicDriver.hxx>
+#include <Prs3d_PresentationShadow.hxx>
#include <PrsMgr_PresentableObject.hxx>
#include <PrsMgr_Presentation.hxx>
#include <PrsMgr_Presentations.hxx>
#include <PrsMgr_ModedPresentation.hxx>
#include <TColStd_ListIteratorOfListOfTransient.hxx>
+#include <V3d_View.hxx>
+#include <Visual3d_View.hxx>
+#include <Visual3d_Layer.hxx>
+
+// =======================================================================
+// function : PrsMgr_PresentationManager
+// purpose :
+// =======================================================================
+PrsMgr_PresentationManager::PrsMgr_PresentationManager (const Handle(Graphic3d_StructureManager)& theStructureManager)
+: myStructureManager (theStructureManager),
+ myImmediateModeOn (0)
+{
+ //
+}
-
-PrsMgr_PresentationManager::PrsMgr_PresentationManager ():
-myImmediateMode(Standard_False){}
-
-
-void PrsMgr_PresentationManager::Display(
- const Handle(PrsMgr_PresentableObject)& aPresentableObject,
- const Standard_Integer aMode)
+// =======================================================================
+// function : Display
+// purpose :
+// =======================================================================
+void PrsMgr_PresentationManager::Display (const Handle(PrsMgr_PresentableObject)& thePrsObj,
+ const Standard_Integer theMode)
{
- if (!HasPresentation(aPresentableObject,aMode)){
- AddPresentation(aPresentableObject,aMode);
+ if (!HasPresentation (thePrsObj, theMode))
+ {
+ AddPresentation (thePrsObj, theMode);
}
- else if(Presentation(aPresentableObject,aMode)->MustBeUpdated()){
- Update(aPresentableObject,aMode);
+
+ Handle(PrsMgr_Presentation3d) aPrs = CastPresentation (thePrsObj, theMode);
+ if (aPrs->MustBeUpdated())
+ {
+ Update (thePrsObj, theMode);
+ }
+
+ if (myImmediateModeOn > 0)
+ {
+ AddToImmediateList (aPrs->Presentation());
}
-
- if(myImmediateMode)
- Add(aPresentableObject,aMode);
else
- Presentation(aPresentableObject,aMode)->Display();
+ {
+ aPrs->Display();
+ }
}
-void PrsMgr_PresentationManager::Erase(
- const Handle(PrsMgr_PresentableObject)& aPresentableObject,
- const Standard_Integer aMode)
+// =======================================================================
+// function : Erase
+// purpose :
+// =======================================================================
+void PrsMgr_PresentationManager::Erase (const Handle(PrsMgr_PresentableObject)& thePrsObj,
+ const Standard_Integer theMode)
{
- if (HasPresentation(aPresentableObject,aMode))
+ if (HasPresentation (thePrsObj, theMode))
{
- if(myImmediateMode)
- {
- Remove(aPresentableObject,aMode);
- }
- else
- {
- Presentation(aPresentableObject,aMode)->Erase();
- }
-
- RemovePresentation (aPresentableObject,aMode);
+ Presentation (thePrsObj, theMode)->Erase();
+ RemovePresentation (thePrsObj, theMode);
}
}
-void PrsMgr_PresentationManager::Clear(const Handle(PrsMgr_PresentableObject)& aPresentableObject,
- const Standard_Integer aMode)
+// =======================================================================
+// function : Clear
+// purpose :
+// =======================================================================
+void PrsMgr_PresentationManager::Clear (const Handle(PrsMgr_PresentableObject)& thePrsObj,
+ const Standard_Integer theMode)
{
- if (HasPresentation(aPresentableObject,aMode)){
- if(myImmediateMode)
- Remove(aPresentableObject,aMode);
- else
- Presentation(aPresentableObject,aMode)->Clear();}
+ if (HasPresentation (thePrsObj, theMode))
+ {
+ Presentation (thePrsObj, theMode)->Clear();
+ }
}
+// =======================================================================
+// function : SetVisibility
+// purpose :
+// =======================================================================
void PrsMgr_PresentationManager::SetVisibility (const Handle(PrsMgr_PresentableObject)& thePresentableObject,
const Standard_Integer theMode,
const Standard_Boolean theValue)
Presentation(thePresentableObject, theMode)->SetVisible (theValue);
}
-void PrsMgr_PresentationManager::Highlight(
- const Handle(PrsMgr_PresentableObject)& aPresentableObject,
- const Standard_Integer aMode)
+// =======================================================================
+// function : Highlight
+// purpose :
+// =======================================================================
+void PrsMgr_PresentationManager::Highlight (const Handle(PrsMgr_PresentableObject)& thePrsObj,
+ const Standard_Integer theMode)
{
- if (!HasPresentation(aPresentableObject,aMode)){
- AddPresentation(aPresentableObject,aMode);
+ if (!HasPresentation (thePrsObj, theMode))
+ {
+ AddPresentation (thePrsObj, theMode);
}
- else if(Presentation(aPresentableObject,aMode)->MustBeUpdated()){
- Update(aPresentableObject,aMode);
+
+ Handle(PrsMgr_Presentation3d) aPrs = CastPresentation (thePrsObj, theMode);
+ if (aPrs->MustBeUpdated())
+ {
+ Update (thePrsObj, theMode);
}
- Presentation(aPresentableObject,aMode)->Highlight();
- if(myImmediateMode)
- Add(aPresentableObject,aMode);
+ if (myImmediateModeOn > 0)
+ {
+ Handle(Prs3d_PresentationShadow) aShadow = new Prs3d_PresentationShadow (myStructureManager, aPrs->Presentation());
+ aShadow->Highlight();
+ AddToImmediateList (aShadow);
+ }
+ else
+ {
+ aPrs->Highlight();
+ }
}
-void PrsMgr_PresentationManager::Unhighlight(
- const Handle(PrsMgr_PresentableObject)& aPresentableObject,
- const Standard_Integer aMode)
+// =======================================================================
+// function : Unhighlight
+// purpose :
+// =======================================================================
+void PrsMgr_PresentationManager::Unhighlight (const Handle(PrsMgr_PresentableObject)& thePrsObj,
+ const Standard_Integer theMode)
{
- if (HasPresentation(aPresentableObject,aMode)){
- Presentation(aPresentableObject,aMode)->Unhighlight();
- if(myImmediateMode)
- Remove(aPresentableObject,aMode);
+ if (HasPresentation (thePrsObj, theMode))
+ {
+ Presentation (thePrsObj, theMode)->Unhighlight();
}
}
+// =======================================================================
+// function : SetDisplayPriority
+// purpose :
+// =======================================================================
+void PrsMgr_PresentationManager::SetDisplayPriority (const Handle(PrsMgr_PresentableObject)& thePrsObj,
+ const Standard_Integer theMode,
+ const Standard_Integer theNewPrior) const
+{
+ if (HasPresentation (thePrsObj, theMode))
+ {
+ Presentation (thePrsObj, theMode)->SetDisplayPriority (theNewPrior);
+ }
+}
-void PrsMgr_PresentationManager::
-SetDisplayPriority(const Handle(PrsMgr_PresentableObject)& aPresentableObject,
- const Standard_Integer aMode,
- const Standard_Integer theNewPrior) const
+// =======================================================================
+// function : DisplayPriority
+// purpose :
+// =======================================================================
+Standard_Integer PrsMgr_PresentationManager::DisplayPriority (const Handle(PrsMgr_PresentableObject)& thePrsObj,
+ const Standard_Integer theMode) const
{
- if (HasPresentation(aPresentableObject,aMode))
- Presentation(aPresentableObject,aMode)->SetDisplayPriority(theNewPrior);
+ return HasPresentation (thePrsObj, theMode)
+ ? Presentation (thePrsObj, theMode)->DisplayPriority()
+ : 0;
}
-Standard_Integer PrsMgr_PresentationManager::
-DisplayPriority(const Handle(PrsMgr_PresentableObject)& aPresentableObject,
- const Standard_Integer aMode) const
+// =======================================================================
+// function : IsDisplayed
+// purpose :
+// =======================================================================
+Standard_Boolean PrsMgr_PresentationManager::IsDisplayed (const Handle(PrsMgr_PresentableObject)& thePrsObj,
+ const Standard_Integer theMode) const
{
- if (HasPresentation(aPresentableObject,aMode))
- return Presentation(aPresentableObject,aMode)->DisplayPriority();
-
- return 0;
+ return HasPresentation (thePrsObj, theMode)
+ && Presentation (thePrsObj, theMode)->IsDisplayed();
}
+// =======================================================================
+// function : IsHighlighted
+// purpose :
+// =======================================================================
+Standard_Boolean PrsMgr_PresentationManager::IsHighlighted (const Handle(PrsMgr_PresentableObject)& thePrsObj,
+ const Standard_Integer theMode) const
+{
+ return HasPresentation (thePrsObj, theMode)
+ && Presentation (thePrsObj, theMode)->IsHighlighted();
+}
-Standard_Boolean PrsMgr_PresentationManager::IsDisplayed (
- const Handle(PrsMgr_PresentableObject)& aPresentableObject,
- const Standard_Integer aMode) const {
- if (HasPresentation(aPresentableObject,aMode))
- return Presentation(aPresentableObject,aMode)->IsDisplayed();
- return Standard_False;
- }
+// =======================================================================
+// function : Update
+// purpose :
+// =======================================================================
+void PrsMgr_PresentationManager::Update (const Handle(PrsMgr_PresentableObject)& thePrsObj,
+ const Standard_Integer theMode) const
+{
+ if (!HasPresentation(thePrsObj, theMode))
+ {
+ return;
+ }
-Standard_Boolean PrsMgr_PresentationManager::IsHighlighted (
- const Handle(PrsMgr_PresentableObject)& aPresentableObject,
- const Standard_Integer aMode) const {
- if (HasPresentation(aPresentableObject,aMode))
- return Presentation(aPresentableObject,aMode)->IsHighlighted();
- return Standard_False;
- }
+ Handle(PrsMgr_Presentation) aPrs = Presentation (thePrsObj, theMode);
+ if (!aPrs.IsNull())
+ {
+ aPrs->Clear();
+ thePrsObj->Fill (this, aPrs, theMode);
+ aPrs->SetUpdateStatus (Standard_False);
+ }
+}
-void PrsMgr_PresentationManager::Update (const Handle(PrsMgr_PresentableObject)& aPresentableObject,const Standard_Integer aMode ) const {
- if(HasPresentation(aPresentableObject,aMode)) {
- Handle(PrsMgr_Presentation) P = Presentation(aPresentableObject,aMode);
- if (!P.IsNull()) {
- P->Clear();
- aPresentableObject->Fill(this,P,aMode);
- P->SetUpdateStatus(Standard_False);
- }
+// =======================================================================
+// function : BeginImmediateDraw
+// purpose :
+// =======================================================================
+void PrsMgr_PresentationManager::BeginImmediateDraw()
+{
+ if (++myImmediateModeOn > 1)
+ {
+ return;
}
+
+ ClearImmediateDraw();
}
-void PrsMgr_PresentationManager::BeginDraw() {
- myImmediateMode = Standard_True;
+
+// =======================================================================
+// function : ClearImmediateDraw
+// purpose :
+// =======================================================================
+void PrsMgr_PresentationManager::ClearImmediateDraw()
+{
+ if (myImmediateView.IsNull())
+ {
+ myImmediateList.Clear();
+ return;
+ }
+
+ for (PrsMgr_ListOfPresentations::Iterator anIter (myImmediateList); anIter.More(); anIter.Next())
+ {
+ myImmediateView->View()->EraseImmediate (anIter.Value());
+ }
+
myImmediateList.Clear();
+ myImmediateView.Nullify();
}
+// =======================================================================
+// function : EndImmediateDraw
+// purpose :
+// =======================================================================
+void PrsMgr_PresentationManager::EndImmediateDraw (const Handle(V3d_View)& theView)
+{
+ if (--myImmediateModeOn > 0)
+ {
+ return;
+ }
+
+ for (PrsMgr_ListOfPresentations::Iterator anIter (myImmediateList); anIter.More(); anIter.Next())
+ {
+ theView->View()->DisplayImmediate (anIter.Value(), Standard_True);
+ }
+ if (!myImmediateList.IsEmpty())
+ {
+ myImmediateView = theView;
+ }
+}
-void PrsMgr_PresentationManager::Add(const Handle(PrsMgr_PresentableObject)& aPresentableObject,
- const Standard_Integer aMode) {
- if (myImmediateMode ) {
- Handle(PrsMgr_Presentation) P = Presentation(aPresentableObject,aMode);
- for (TColStd_ListIteratorOfListOfTransient it(myImmediateList);it.More();it.Next()){
- if(it.Value()==P) return;
+// =======================================================================
+// function : AddToImmediateList
+// purpose :
+//=======================================================================
+void PrsMgr_PresentationManager::AddToImmediateList (const Handle(Prs3d_Presentation)& thePrs)
+{
+ if (myImmediateModeOn < 1)
+ {
+ return;
+ }
+
+ for (PrsMgr_ListOfPresentations::Iterator anIter (myImmediateList); anIter.More(); anIter.Next())
+ {
+ if (anIter.Value() == thePrs)
+ {
+ return;
}
- myImmediateList.Append(P);
- }
-}
-void PrsMgr_PresentationManager::Remove(const Handle(PrsMgr_PresentableObject)& aPresentableObject,
- const Standard_Integer aMode) {
- if (myImmediateMode ) {
- Handle(PrsMgr_Presentation) P = Presentation(aPresentableObject,aMode);
- for (TColStd_ListIteratorOfListOfTransient it(myImmediateList);it.More();it.Next()){
- if(it.Value()==P) {
- myImmediateList.Remove(it);
- return;
- }
+ }
+
+ myImmediateList.Append (thePrs);
+}
+
+// =======================================================================
+// function : HasPresentation
+// purpose :
+// =======================================================================
+Standard_Boolean PrsMgr_PresentationManager::HasPresentation (const Handle(PrsMgr_PresentableObject)& thePrsObj,
+ const Standard_Integer theMode) const
+{
+ const PrsMgr_Presentations& aPrsList = thePrsObj->Presentations();
+ for (Standard_Integer aPrsIter = 1; aPrsIter <= aPrsList.Length(); ++aPrsIter)
+ {
+ const PrsMgr_ModedPresentation& aModedPrs = aPrsList.Value (aPrsIter);
+ const Handle(PrsMgr_PresentationManager)& aPrsMgr = aModedPrs.Presentation()->PresentationManager();
+ if (theMode == aModedPrs.Mode()
+ && this == aPrsMgr)
+ {
+ return Standard_True;
}
}
+ return Standard_False;
}
+// =======================================================================
+// function : Presentation
+// purpose :
+// =======================================================================
+Handle(PrsMgr_Presentation) PrsMgr_PresentationManager::Presentation (const Handle(PrsMgr_PresentableObject)& thePrsObj,
+ const Standard_Integer theMode) 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);
+ const Handle(PrsMgr_PresentationManager)& aPrsMgr = aModedPrs.Presentation()->PresentationManager();
+ if (theMode == aModedPrs.Mode()
+ && this == aPrsMgr)
+ {
+ return aModedPrs.Presentation();
+ }
+ }
+ // To be changed within dedicated patch
+ ///return Handle(PrsMgr_Presentation)();
+ return aPrsList.Last().Presentation();
+}
-Standard_Boolean PrsMgr_PresentationManager::HasPresentation
- (const Handle(PrsMgr_PresentableObject)& aPresentableObject,
- const Standard_Integer aMode) const {
+// =======================================================================
+// function : AddPresentation
+// purpose :
+// =======================================================================
+void PrsMgr_PresentationManager::AddPresentation (const Handle(PrsMgr_PresentableObject)& thePrsObj,
+ const Standard_Integer theMode)
+{
+ Handle(PrsMgr_Presentation) aPrs = new PrsMgr_Presentation3d (this, thePrsObj);
+ thePrsObj->Presentations().Append (PrsMgr_ModedPresentation (aPrs, theMode));
+ thePrsObj->Fill (this, aPrs, theMode);
- const PrsMgr_Presentations& S = aPresentableObject->Presentations();
- Standard_Boolean found = Standard_False;
- Standard_Integer i=1; Standard_Integer l= S.Length();
- while (i<= l && !found) {
-// modif WOK++ : operator == is ambiguous
-// found = aMode == S(i).Mode()
-// && this == S(i).Presentation()->PresentationManager();
- const Handle (PrsMgr_Presentation)& popPrs = S(i).Presentation();
- const Handle (PrsMgr_PresentationManager)& popPrsMgr = popPrs->PresentationManager();
- if ( aMode == S(i).Mode() && this == popPrsMgr )
- found = Standard_True;
- i++;
- }
- return found;
- }
+ // set layer index accordingly to object's presentations
+ const Standard_Integer aZLayerId = GetZLayer (thePrsObj);
+ if (aZLayerId >= 0)
+ {
+ aPrs->SetZLayer (aZLayerId);
+ }
+ aPrs->SetUpdateStatus (Standard_False);
+}
-Handle (PrsMgr_Presentation)
- PrsMgr_PresentationManager::Presentation(const Handle(PrsMgr_PresentableObject)& aPresentableObject,
- const Standard_Integer aMode) const
+// =======================================================================
+// function : RemovePresentation
+// purpose :
+// =======================================================================
+void PrsMgr_PresentationManager::RemovePresentation (const Handle(PrsMgr_PresentableObject)& thePrsObj,
+ const Standard_Integer theMode)
{
- Handle(PrsMgr_Presentation) P;
- const PrsMgr_Presentations& S = aPresentableObject->Presentations();
- Standard_Boolean found = Standard_False;
- Standard_Integer i=1; Standard_Integer l= S.Length();
- while (i<= l && !found) {
- P = S(i).Presentation();
- const Handle (PrsMgr_PresentationManager)& popPrsMgr = P->PresentationManager();
- if (aMode == S(i).Mode() && this == popPrsMgr) {
- found = Standard_True;
+ PrsMgr_Presentations& aPrsList = thePrsObj->Presentations();
+ for (Standard_Integer aPrsIter = 1; aPrsIter <= aPrsList.Length(); ++aPrsIter)
+ {
+ if (theMode == aPrsList (aPrsIter).Mode())
+ // && this == aPrsMgr) ??
+ {
+ aPrsList.Remove (aPrsIter);
+ break;
+ }
+ }
+}
+// =======================================================================
+// function : SetZLayer
+// purpose :
+// =======================================================================
+void PrsMgr_PresentationManager::SetZLayer (const Handle(PrsMgr_PresentableObject)& thePrsObj,
+ const Standard_Integer theLayerId)
+{
+ 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);
+ }
+ }
+}
+// =======================================================================
+// function : GetZLayer
+// purpose :
+// =======================================================================
+Standard_Integer PrsMgr_PresentationManager::GetZLayer (const Handle(PrsMgr_PresentableObject)& thePrsObj) const
+{
+ 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();
}
- i++;
}
+ return -1;
+}
- return P;
+// =======================================================================
+// function : Connect
+// purpose :
+// =======================================================================
+void PrsMgr_PresentationManager::Connect (const Handle(PrsMgr_PresentableObject)& thePrsObject,
+ const Handle(PrsMgr_PresentableObject)& theOtherObject,
+ const Standard_Integer theMode,
+ const Standard_Integer theOtherMode)
+{
+ if (!HasPresentation (thePrsObject, theMode))
+ {
+ AddPresentation (thePrsObject, theMode);
+ }
+ if (!HasPresentation (theOtherObject, theOtherMode))
+ {
+ AddPresentation (theOtherObject, theOtherMode);
+ }
+ CastPresentation (thePrsObject, theMode)->Connect (CastPresentation (theOtherObject, theMode));
}
-void PrsMgr_PresentationManager::AddPresentation
- (const Handle(PrsMgr_PresentableObject)& aPresentableObject,
- const Standard_Integer aMode) {
+// =======================================================================
+// function : Transform
+// purpose :
+// =======================================================================
+void PrsMgr_PresentationManager::Transform (const Handle(PrsMgr_PresentableObject)& thePrsObj,
+ const Handle(Geom_Transformation)& theTransformation,
+ const Standard_Integer theMode)
+{
+ CastPresentation (thePrsObj, theMode)->Transform (theTransformation);
+}
- Handle(PrsMgr_Presentation) P = newPresentation(aPresentableObject);
- aPresentableObject->Presentations().Append(PrsMgr_ModedPresentation(P,aMode));
- aPresentableObject->Fill(this,P,aMode);
+// =======================================================================
+// function : Place
+// purpose :
+// =======================================================================
+void PrsMgr_PresentationManager::Place (const Handle(PrsMgr_PresentableObject)& thePrsObj,
+ const Quantity_Length theX,
+ const Quantity_Length theY,
+ const Quantity_Length theZ,
+ const Standard_Integer theMode)
+{
+ CastPresentation (thePrsObj, theMode)->Place (theX, theY, theZ);
+}
- // set layer index accordingly to object's presentations
- Standard_Integer aZLayerId = GetZLayer (aPresentableObject);
- if (aZLayerId >= 0)
- P->SetZLayer (aZLayerId);
+// =======================================================================
+// function : Multiply
+// purpose :
+// =======================================================================
+void PrsMgr_PresentationManager::Multiply (const Handle(PrsMgr_PresentableObject)& thePrsObj,
+ const Handle(Geom_Transformation)& theTransformation,
+ const Standard_Integer theMode)
+{
+ CastPresentation (thePrsObj, theMode)->Multiply (theTransformation);
+}
- P->SetUpdateStatus(Standard_False);
+// =======================================================================
+// function : Move
+// purpose :
+// =======================================================================
+void PrsMgr_PresentationManager::Move (const Handle(PrsMgr_PresentableObject)& thePrsObj,
+ const Quantity_Length theX,
+ const Quantity_Length theY,
+ const Quantity_Length theZ,
+ const Standard_Integer theMode)
+{
+ CastPresentation (thePrsObj, theMode)->Move (theX, theY, theZ);
}
-void PrsMgr_PresentationManager::RemovePresentation(const Handle(PrsMgr_PresentableObject)& aPresentableObject,
- const Standard_Integer aMode)
+// =======================================================================
+// function : Color
+// purpose :
+// =======================================================================
+void PrsMgr_PresentationManager::Color (const Handle(PrsMgr_PresentableObject)& thePrsObj,
+ const Quantity_NameOfColor theColor,
+ const Standard_Integer theMode)
{
- PrsMgr_Presentations& S = aPresentableObject->Presentations();
- Standard_Integer i = 1;
- Standard_Integer n = S.Length();
- while (i<= n) {
- if (aMode == S(i).Mode()) {
- S.Remove(i);
- break;
- }
- i++;
+ if (!HasPresentation (thePrsObj, theMode))
+ {
+ AddPresentation (thePrsObj, theMode);
}
-}
-//=======================================================================
-//function : SetZLayer
-//purpose :
-//=======================================================================
+ Handle(PrsMgr_Presentation3d) aPrs = CastPresentation (thePrsObj, theMode);
+ if (aPrs->MustBeUpdated())
+ {
+ Update (thePrsObj, theMode);
+ }
-void PrsMgr_PresentationManager::SetZLayer
- (const Handle(PrsMgr_PresentableObject)& thePresentableObject,
- const Standard_Integer theLayerId)
+ if (myImmediateModeOn > 0)
+ {
+ Handle(Prs3d_PresentationShadow) aShadow = new Prs3d_PresentationShadow (myStructureManager, aPrs->Presentation());
+ aShadow->Color (theColor);
+ AddToImmediateList (aShadow);
+ }
+ else
+ {
+ aPrs->Color (theColor);
+ }
+}
+
+// =======================================================================
+// function : BoundBox
+// purpose :
+// =======================================================================
+void PrsMgr_PresentationManager::BoundBox (const Handle(PrsMgr_PresentableObject)& thePrsObject,
+ const Standard_Integer theMode)
{
- PrsMgr_Presentations& aPresentations = thePresentableObject->Presentations();
- for (Standard_Integer aIdx = 1; aIdx <= aPresentations.Length (); aIdx++)
+ if (!HasPresentation (thePrsObject, theMode))
{
- Handle(PrsMgr_Presentation) aPrs = aPresentations (aIdx).Presentation ();
- if (aPrs->PresentationManager () == this)
- aPrs->SetZLayer (theLayerId);
+ AddPresentation (thePrsObject, theMode);
+ }
+ else if (Presentation (thePrsObject, theMode)->MustBeUpdated())
+ {
+ Update (thePrsObject, theMode);
}
+ CastPresentation (thePrsObject, theMode)->BoundBox();
}
-//=======================================================================
-//function : GetZLayer
-//purpose :
-//=======================================================================
+// =======================================================================
+// function : SetShadingAspect
+// purpose :
+// =======================================================================
+void PrsMgr_PresentationManager::SetShadingAspect (const Handle(PrsMgr_PresentableObject)& thePrsObject,
+ const Quantity_NameOfColor theColor,
+ const Graphic3d_NameOfMaterial theMaterial,
+ const Standard_Integer theMode)
+{
+ Handle(Prs3d_ShadingAspect) anAspect = new Prs3d_ShadingAspect();
+ anAspect->SetColor (theColor);
+ anAspect->SetMaterial (theMaterial);
+ SetShadingAspect (thePrsObject, anAspect, theMode);
+}
-Standard_Integer PrsMgr_PresentationManager::GetZLayer
- (const Handle(PrsMgr_PresentableObject)& thePresentableObject) const
+// =======================================================================
+// function : SetShadingAspect
+// purpose :
+// =======================================================================
+void PrsMgr_PresentationManager::SetShadingAspect (const Handle(PrsMgr_PresentableObject)& thePrsObject,
+ const Handle(Prs3d_ShadingAspect)& theShadingAspect,
+ const Standard_Integer theMode)
{
- PrsMgr_Presentations& aPresentations = thePresentableObject->Presentations();
- for (Standard_Integer aIdx = 1; aIdx <= aPresentations.Length (); aIdx++)
+ if (HasPresentation (thePrsObject, theMode))
{
- Handle(PrsMgr_Presentation) aPrs = aPresentations (aIdx).Presentation ();
- if (aPrs->PresentationManager () == this)
- return aPrs->GetZLayer ();
+ CastPresentation (thePrsObject, theMode)->SetShadingAspect (theShadingAspect);
}
-
- return -1;
+}
+
+// =======================================================================
+// function : CastPresentation
+// purpose :
+// =======================================================================
+Handle(PrsMgr_Presentation3d) PrsMgr_PresentationManager::CastPresentation (const Handle(PrsMgr_PresentableObject)& thePrsObject,
+ const Standard_Integer theMode) const
+{
+ return Handle(PrsMgr_Presentation3d)::DownCast (Presentation (thePrsObject, theMode));
}
// commercial license or contractual agreement.
inline Standard_Boolean PrsMgr_PresentationManager::IsImmediateModeOn() const
-{return myImmediateMode;}
+{
+ return myImmediateModeOn > 0;
+}
+
+inline const Handle(Graphic3d_StructureManager)& PrsMgr_PresentationManager::StructureManager() const
+{
+ return myStructureManager;
+}
+++ /dev/null
--- Created on: 1993-10-21
--- Created by: Jean-Louis FRENKEL
--- Copyright (c) 1993-1999 Matra Datavision
--- 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.
-
--- Modified by rob Aug 20 98 :
--- new Methods : Is3D() , AddToImmediateList (Prs)
--- BeginDraw redefined
--- new field : myStrList
--- => allows users to store independant Graphic Structures
--- which will be displayed in immediate mode when EndDraw
--- is applied
-
-
-class PresentationManager3d from PrsMgr inherits PresentationManager from PrsMgr
-
- ---Purpose: A framework to manage 3D displays, graphic entities
- -- and their updates.
- -- Used in the AIS package (Application Interactive
- -- Services), to enable the advanced user to define the
- -- default display mode of a new interactive object which
- -- extends the list of signatures and types.
- -- Definition of new display types is handled by calling
- -- the presentation algorithms provided by the StdPrs package.
-
-uses
- ListOfTransient from TColStd,
- StructureManager from Graphic3d,
- PresentableObject from PrsMgr,
- Length,NameOfColor from Quantity,
- Transformation from Geom,
- NameOfMaterial from Graphic3d,
- --NameOfMaterialPhysic from Graphic3d,
- --NameOfPhysicalMaterial from Graphic3d,
- Presentation from PrsMgr,
- Presentation3d from PrsMgr,
- View from V3d,
- ShadingAspect from Prs3d,
- Presentation from Prs3d
-is
-
- Create(aStructureManager: StructureManager from Graphic3d)
- returns mutable PresentationManager3d from PrsMgr;
- ---Purpose:
- -- Creates a framework to manage displays and graphic
- -- entities with the 3D view aStructureManager.
-
- Is3D(me) returns Boolean from Standard is redefined;
-
- Color(me: mutable;
- aPresentableObject: mutable PresentableObject from PrsMgr;
- aColor: NameOfColor from Quantity = Quantity_NOC_YELLOW;
- aMode: Integer from Standard = 0)
- ---Purpose: Highlights the graphic object aPresentableObject in
- -- the color aColor.
- -- aPresentableObject has the display mode aMode;
- -- this has the default value of 0, that is, the wireframe display mode.
- is static;
-
-
- BoundBox(me: mutable; aPresentableObject: mutable PresentableObject from PrsMgr;
- aMode: Integer from Standard = 0)
- ---Purpose: highlights the boundbox of the presentation
-
- is static;
-
----Category: Immediate display methods.
---
-
- BeginDraw(me:mutable) is redefined static;
-
- AddToImmediateList(me:mutable;aPrs:Presentation from Prs3d);
- ---Purpose: stores <aPrs> in a list of structure to be displayed
- -- in immediate mode. will be taken in account in EndDraw Method.
-
- EndDraw(me: mutable; theView: View from V3d; DoubleBuffer: Boolean from Standard = Standard_False)
- is redefined static;
-
-
----Category: references to other presentation.
-
- Connect(me: mutable;
- aPresentableObject: PresentableObject from PrsMgr;
- anOtherObject: mutable PresentableObject from PrsMgr;
- aMode: Integer from Standard = 0;
- anOtherMode: Integer from Standard = 0)
- is static;
-
----Category: Transformation methods.
-
- Transform (me: mutable;
- aPresentableObject: PresentableObject from PrsMgr;
- aTransformation: Transformation from Geom;
- aMode: Integer from Standard = 0)
- ---Purpose:
- -- Sets the transformation aTransformation for the
- -- presentable object aPresentableObject.
- -- aPresentableObject has the display mode aMode;
- -- this has the default value of 0, that is, the wireframe
- -- display mode.
- is static;
-
- Place (me: mutable; aPresentableObject: PresentableObject from PrsMgr;
- X,Y,Z: Length from Quantity;
- aMode: Integer from Standard = 0)
- ---Purpose:
- -- Sets a position to move the presentable object
- -- aPresentableObject to. This position is defined by the
- -- lengths along the x, y and z axes: X, Y and Z respectively.
- -- aPresentableObject has the display mode aMode;
- -- this has the default value of 0, that is, the wireframe display mode.
- is static;
-
- Multiply (me: mutable;
- aPresentableObject: PresentableObject from PrsMgr;
- aTransformation: Transformation from Geom;
- aMode: Integer from Standard = 0)
- ---Purpose:
- -- Defines the transformation aTransformation for the
- -- presentable object aPresentableObject.
- -- aPresentableObject has the display mode aMode;
- -- this has the default value of 0, that is, the wireframe
- -- display mode.
- is static;
-
- Move (me: mutable; aPresentableObject: PresentableObject from PrsMgr;
- X,Y,Z: Length from Quantity;
- aMode: Integer from Standard = 0)
- ---Purpose:
- -- Sets a position to move the presentable object
- -- aPresentableObject to. This position is defined by the
- -- lengths along the x, y and z axes: X, Y and Z respectively.
- -- aPresentableObject has the display mode aMode;
- -- this has the default value of 0, that is, the wireframe
- -- display mode.
- is static;
-
- StructureManager(me) returns mutable StructureManager from Graphic3d
- is static;
- ---C++: inline
- ---C++: return const&
- ---Purpose: Returns the structure manager.
-
- SetShadingAspect(me: mutable;
- aPresentableObject: PresentableObject from PrsMgr;
- aColor: NameOfColor from Quantity;
- aMaterial: NameOfMaterial from Graphic3d;
- --aMaterial: NameOfPhysicalMaterial from Graphic3d;
- aMode: Integer from Standard = 0)
- ---Purpose: this method will change the color and the aspect
- -- of the presentations containg shaded structures.
- is static;
-
-
- SetShadingAspect(me: mutable;
- aPresentableObject: PresentableObject from PrsMgr;
- aShadingAspect: ShadingAspect from Prs3d;
- aMode: Integer from Standard = 0)
- ---Purpose: this method will change the color and the aspect
- -- of the presentations containg shaded structures.
- is static;
-
-
- CastPresentation(me; aPresentableObject: PresentableObject from PrsMgr;
- aMode: Integer from Standard = 0)
- returns mutable Presentation3d from PrsMgr
- is static ;
-
- newPresentation(me: mutable; aPresentableObject: PresentableObject from PrsMgr)
- returns mutable Presentation from PrsMgr
- ---Level: Internal
- ---Purpose: Creates a new presentation in the presentation manager.
- is redefined static private;
-
-fields
-
- myStructureManager : StructureManager from Graphic3d;
- myStrList : ListOfTransient from TColStd;
-
-end PresentationManager3d from PrsMgr;
+++ /dev/null
-// Copyright (c) 1998-1999 Matra Datavision
-// 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.
-
-#include <PrsMgr_PresentationManager3d.ixx>
-#include <PrsMgr_Presentation3d.hxx>
-#include <Prs3d_ShadingAspect.hxx>
-#include <Visual3d_TransientManager.hxx>
-#include <V3d_View.hxx>
-#include <TColStd_ListIteratorOfListOfTransient.hxx>
-
-PrsMgr_PresentationManager3d::PrsMgr_PresentationManager3d (const Handle(Graphic3d_StructureManager)& aStructureManager):myStructureManager(aStructureManager) {}
-
-Standard_Boolean PrsMgr_PresentationManager3d::Is3D() const
-{return Standard_True;}
-
-Handle(PrsMgr_Presentation) PrsMgr_PresentationManager3d::newPresentation (const Handle(PrsMgr_PresentableObject) & aPresentableObject) {
-
- return new PrsMgr_Presentation3d(this,aPresentableObject);
-}
-
-void PrsMgr_PresentationManager3d::Connect(const Handle(PrsMgr_PresentableObject)& aPresentableObject, const Handle(PrsMgr_PresentableObject)& anOtherObject, const Standard_Integer aMode, const Standard_Integer anOtherMode) {
- if (!HasPresentation(aPresentableObject,aMode)){
- AddPresentation(aPresentableObject,aMode);
- }
- if (!HasPresentation(anOtherObject,anOtherMode)){
- AddPresentation(anOtherObject,anOtherMode);
- }
- CastPresentation(aPresentableObject,aMode)->Connect(CastPresentation(anOtherObject,aMode));
-}
-
-//=======================================================================
-//function : Transform
-//purpose :
-//=======================================================================
-void PrsMgr_PresentationManager3d::Transform(const Handle(PrsMgr_PresentableObject)& aPresentableObject,const Handle(Geom_Transformation)& aTransformation, const Standard_Integer aMode) {
-CastPresentation(aPresentableObject,aMode)->Transform(aTransformation);
-}
-
-//=======================================================================
-//function : Place
-//purpose :
-//=======================================================================
-
-void PrsMgr_PresentationManager3d::Place(const Handle(PrsMgr_PresentableObject)& aPresentableObject, const Quantity_Length X,const Quantity_Length Y,const Quantity_Length Z,const Standard_Integer aMode) {
- CastPresentation(aPresentableObject,aMode)->Place(X,Y,Z);
-}
-
-//=======================================================================
-//function : Multiply
-//purpose :
-//=======================================================================
-
-void PrsMgr_PresentationManager3d::Multiply(const Handle(PrsMgr_PresentableObject)& aPresentableObject,const Handle(Geom_Transformation)& aTransformation, const Standard_Integer aMode) {
- CastPresentation(aPresentableObject,aMode)->Multiply(aTransformation);
-}
-
-//=======================================================================
-//function : Move
-//purpose :
-//=======================================================================
-
-void PrsMgr_PresentationManager3d::Move(const Handle(PrsMgr_PresentableObject)& aPresentableObject, const Quantity_Length X,const Quantity_Length Y,const Quantity_Length Z,const Standard_Integer aMode) {
- CastPresentation(aPresentableObject,aMode)->Move(X,Y,Z);
-}
-
-//=======================================================================
-//function : Color
-//purpose :
-//=======================================================================
-
-void PrsMgr_PresentationManager3d::Color(const Handle(PrsMgr_PresentableObject)& aPresentableObject, const Quantity_NameOfColor aColor, const Standard_Integer aMode) {
- if (!HasPresentation(aPresentableObject,aMode)){
- AddPresentation(aPresentableObject,aMode);
- }
- else if(Presentation(aPresentableObject,aMode)->MustBeUpdated()){
- Update(aPresentableObject,aMode);
- }
- CastPresentation(aPresentableObject,aMode)->Color(aColor);
-
- if(myImmediateMode)
- Add(aPresentableObject,aMode);
-
-}
-
-//=======================================================================
-//function : BoundBox
-//purpose :
-//=======================================================================
-
-void PrsMgr_PresentationManager3d::BoundBox(const Handle(PrsMgr_PresentableObject)& aPresentableObject, const Standard_Integer aMode) {
- if (!HasPresentation(aPresentableObject,aMode)){
- AddPresentation(aPresentableObject,aMode);
- }
- else if(Presentation(aPresentableObject,aMode)->MustBeUpdated()){
- Update(aPresentableObject,aMode);
- }
- CastPresentation(aPresentableObject,aMode)->BoundBox();
-}
-//=======================================================================
-//function : SetShadingAspect
-//purpose :
-//=======================================================================
-
-//POP pour K4L
-void PrsMgr_PresentationManager3d::SetShadingAspect(const Handle(PrsMgr_PresentableObject)& aPresentableObject, const Quantity_NameOfColor aColor, const Graphic3d_NameOfMaterial aMaterial, const Standard_Integer aMode) {
-//void PrsMgr_PresentationManager3d::SetShadingAspect(const Handle(PrsMgr_PresentableObject)& aPresentableObject, const Quantity_NameOfColor aColor, const Graphic3d_NameOfPhysicalMaterial aMaterial, const Standard_Integer aMode) {
-
- Handle(Prs3d_ShadingAspect) sa = new Prs3d_ShadingAspect;
- sa->SetColor(aColor);
- sa->SetMaterial(aMaterial);
- SetShadingAspect(aPresentableObject,sa,aMode);
-}
-
-void PrsMgr_PresentationManager3d::SetShadingAspect(const Handle(PrsMgr_PresentableObject)& aPresentableObject, const Handle(Prs3d_ShadingAspect)& aShadingAspect, const Standard_Integer aMode) {
-
- if (HasPresentation(aPresentableObject,aMode)){
- CastPresentation(aPresentableObject,aMode)->SetShadingAspect(aShadingAspect);
- }
-}
-
-
-//=======================================================================
-//function : CastPresentation
-//purpose :
-//=======================================================================
-
-Handle(PrsMgr_Presentation3d) PrsMgr_PresentationManager3d::CastPresentation(const Handle(PrsMgr_PresentableObject)& aPresentableObject, const Standard_Integer aMode) const {
- return Handle(PrsMgr_Presentation3d)::DownCast(Presentation(aPresentableObject,aMode));
-}
-
-
-
-//=======================================================================
-//function : BeginDraw
-//purpose :
-//=======================================================================
-
-void PrsMgr_PresentationManager3d::BeginDraw()
-{
- PrsMgr_PresentationManager::BeginDraw();
- myStrList.Clear();
-}
-
-//=======================================================================
-//function : EndDraw
-//purpose :
-//=======================================================================
-
-void PrsMgr_PresentationManager3d::EndDraw(const Handle(V3d_View)& theView, const Standard_Boolean DoubleBuffer)
-{
- if (!theView->TransientManagerBeginDraw (DoubleBuffer, Standard_True))
- {
- myImmediateMode = Standard_False;
- return;
- }
- if(myImmediateList.IsEmpty() && myStrList.IsEmpty()) {
- Visual3d_TransientManager::EndDraw();
- myImmediateMode = Standard_False;
- return;
- }
- TColStd_ListIteratorOfListOfTransient it(myImmediateList);
- Handle(PrsMgr_Presentation3d) P3d;
- for (; it.More(); it.Next()) {
- P3d = *((Handle(PrsMgr_Presentation3d)*)&(it.Value()));
- Visual3d_TransientManager::DrawStructure(P3d->Presentation());
- }
-
- Handle(Standard_Transient) Tr;
- for(it.Initialize(myStrList);it.More();it.Next()){
- Tr = it.Value();
- Visual3d_TransientManager::DrawStructure(*((Handle(Prs3d_Presentation)*)&Tr));
- }
-
- Visual3d_TransientManager::EndDraw();
- myImmediateMode = Standard_False;
-
-}
-
-//=======================================================================
-//function : Add
-//purpose :
-//=======================================================================
-void PrsMgr_PresentationManager3d::AddToImmediateList(const Handle(Prs3d_Presentation)& P){
- myStrList.Append(P);
-}
+++ /dev/null
-// Created on: 1998-08-20
-// Created by: Robert COUBLANC
-// Copyright (c) 1998-1999 Matra Datavision
-// 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.
-
-inline const Handle(Graphic3d_StructureManager)& PrsMgr_PresentationManager3d::StructureManager () const {
- return myStructureManager;
-}
#include <SelectMgr_SelectableObject.hxx>
#include <SelectMgr_DataMapIteratorOfDataMapOfIntegerSensitive.hxx>
#include <SelectBasics_ListOfBox2d.hxx>
-#include <Visual3d_TransientManager.hxx>
#include <TColgp_HArray1OfPnt.hxx>
#include <TColgp_Array1OfPnt.hxx>
#include <TColgp_HArray1OfPnt2d.hxx>
#include <Select3D_ListIteratorOfListOfSensitiveTriangle.hxx>
#include <SelectMgr_DataMapIteratorOfDataMapOfSelectionActivation.hxx>
+#include <Aspect_Grid.hxx>
#include <Aspect_TypeOfMarker.hxx>
#include <Graphic3d_AspectMarker3d.hxx>
#include <Graphic3d_ArrayOfPoints.hxx>
#include <OSD_Environment.hxx>
#include <V3d.hxx>
#include <V3d_View.hxx>
+#include <V3d_Viewer.hxx>
#include <TColgp_SequenceOfPnt.hxx>
-
static Standard_Integer StdSel_NumberOfFreeEdges (const Handle(Poly_Triangulation)& Trg)
{
Standard_Integer nFree = 0;
{
SetClipping (theView->GetClipPlanes());
UpdateProj (theView);
+ Standard_Real aPnt3d[3];
+ theView->Convert (theXPix, theYPix,
+ aPnt3d[0], aPnt3d[1], aPnt3d[2]);
- Standard_Real aXr3d = 0.0;
- Standard_Real aYr3d = 0.0;
- Standard_Real aZr3d = 0.0;
- gp_Pnt2d aP2d;
- theView->Convert (theXPix, theYPix, aXr3d, aYr3d, aZr3d);
- myProjector->Project (gp_Pnt (aXr3d, aYr3d, aZr3d), aP2d);
+ gp_Pnt2d aPnt2d;
+ myProjector->Project (gp_Pnt (aPnt3d[0], aPnt3d[1], aPnt3d[2]), aPnt2d);
- InitSelect (aP2d.X(), aP2d.Y());
+ InitSelect (aPnt2d.X(), aPnt2d.Y());
}
//=======================================================================
myareagroup->Structure()->SetDisplayPriority (10);
myareagroup->Structure()->Display();
- if (theView->TransientManagerBeginDraw())
- {
- Visual3d_TransientManager::DrawStructure (mystruct);
- Visual3d_TransientManager::EndDraw();
- }
- else
- {
- theView->Update();
- }
+ theView->Update();
}
//=======================================================================
myareagroup->Clear();
- if (theView.IsNull())
- {
- return;
- }
-
- if (theView->TransientManagerBeginDraw())
- {
- Visual3d_TransientManager::EndDraw();
- }
- else
+ if (!theView.IsNull())
{
theView->Update();
}
mysensgroup->Structure()->SetDisplayPriority (10);
mystruct->Display();
- if (theView->TransientManagerBeginDraw())
- {
- Visual3d_TransientManager::DrawStructure (mystruct);
- Visual3d_TransientManager::EndDraw();
- }
- else if (!theView.IsNull())
- {
- theView->Update();
- }
+ theView->Update();
}
//=======================================================================
return;
}
- if (theView->TransientManagerBeginDraw())
- {
- Visual3d_TransientManager::EndDraw();
- }
- else
- {
- theView->Update();
- }
+ theView->Update();
}
//=======================================================================
mystruct->SetDisplayPriority (10);
mystruct->Display();
- if (theView->TransientManagerBeginDraw())
- {
- Visual3d_TransientManager::DrawStructure (mystruct);
- Visual3d_TransientManager::EndDraw();
- }
- else if(!theView.IsNull())
- {
- theView->Update();
- }
+
+ theView->Update();
}
//=======================================================================
mystruct->SetDisplayPriority (10);
mystruct->Display();
- if(theView->TransientManagerBeginDraw())
- {
- Visual3d_TransientManager::DrawStructure (mystruct);
- Visual3d_TransientManager::EndDraw();
- }
- else
- {
- theView->Update();
- }
+ theView->Update();
}
//=======================================================================
Coordinate from V3d,
Array2OfReal from TColStd,
ViewerPointer from V3d,
- TransientManager from Visual3d,
TypeOfTriedronEcho from Aspect,
TypeOfTriedronPosition from Aspect,
RenderingContext from Aspect,
-- Must be called if the view is shown.
-- (Ex: DeIconification ) .
+ RedrawImmediate ( me );
+ ---Level: Public
+ ---Purpose: Updates layer of immediate presentations.
+
+ Invalidate ( me );
+ ---Level: Public
+ ---Purpose: Invalidates view content but does not redraw it.
+
Redraw ( me ;x,y,width,height: Integer from Standard);
---Level: Public
---Purpose: Redisplays the view area after esxposure.
-- in the reference frame of the view corresponding
-- to the intersection with the projection plane
-- of the eye/view point vector and display the grid marker.
- -- Warning: When the grid is not active the result is identical
- -- to the above Convert() method.
- -- How to use :
+ -- Warning: When the grid is not active the result is identical to the above Convert() method.
+ -- How to use:
-- 1) Enable the grid echo display
-- myViewer->SetGridEcho(Standard_True);
- -- 2) When application receive a move event :
+ -- 2) When application receive a move event:
-- 2.1) Check if any object is detected
-- if( myInteractiveContext->MoveTo(x,y) == AIS_SOD_Nothing ) {
-- 2.2) Check if the grid is active
-- if( myViewer->Grid()->IsActive() ) {
-- 2.3) Display the grid echo and gets the grid point
-- myView->ConvertToGrid(x,y,X,Y,Z);
+ -- myView->Viewer()->ShowGridEcho (myView, Graphic3d_Vertex (X,Y,Z));
+ -- myView->RedrawImmediate();
-- 2.4) Else this is the standard case
-- } else myView->Convert(x,y,X,Y,Z);
raises UnMapped from V3d;
ImmediateUpdate (me) is static protected;
---Purpose:
- -----------------------------------------
- ---Category: TransientManager methods
- -----------------------------------------
-
- TransientManagerBeginDraw(me; DoubleBuffer: Boolean = Standard_False;
- RetainMode : Boolean = Standard_False)
- ---Level: Public
- ---Purpose: Begins any graphics in the view <aView>
- -- Redraw any structured graphics in the back buffer before
- -- if <DoubleBuffer> is TRUE.
- -- Restore the front buffer from the back before
- -- if <DoubleBuffer> is FALSE.
- -- if <RetainMode> is TRUE.
- -- the graphic managed itself exposure,resizing ...
- -- if <RetainMode> is FALSE.
- -- the application must managed itself exposure,resizing ...
- --
- returns Boolean from Standard;
-
- TransientManagerClearDraw(me);
- ---Level: Public
- ---Purpose: Clear all transient graphics in the view <aView>
-
-
- TransientManagerBeginAddDraw(me)
- ---Level: Public
- ---Purpose: Begins any add graphics in the view <aView>
- -- Redraw any structured graphics in the back buffer before
- -- the application must managed itself exposure,resizing ...
- -- Warning: Returns TRUE if transient drawing is enabled in
- -- the associated view.
- -- Returns FALSE ,if nothing works because something
- -- is wrong for the transient principle :
- --
- returns Boolean from Standard;
-
SetComputedMode ( me : mutable; aMode : Boolean from Standard )
is static;
---Level: Advanced
#include <Standard_ErrorHandler.hxx>
#include <Standard_DivideByZero.hxx>
-#include <Visual3d_TransientManager.hxx>
#include <Visual3d_ViewManager.hxx>
#include <Visual3d_Light.hxx>
#include <Visual3d_Layer.hxx>
if( MyView->IsDefined() ) MyView->Redraw() ;
}
+//=============================================================================
+//function : RedrawImmediate
+//purpose :
+//=============================================================================
+void V3d_View::RedrawImmediate() const
+{
+ if (MyView->IsDefined())
+ {
+ MyView->RedrawImmediate();
+ }
+}
+
+//=============================================================================
+//function : Invalidate
+//purpose :
+//=============================================================================
+void V3d_View::Invalidate() const
+{
+ if (MyView->IsDefined())
+ {
+ MyView->Invalidate();
+ }
+}
+
//=============================================================================
//function : Redraw
//purpose :
return V3d_TypeOfBackfacingModel(MyView -> BackFacingModel ());
}
-//=============================================================================
-//function : TransientManagerBeginDraw
-//purpose :
-//=============================================================================
-Standard_Boolean V3d_View::TransientManagerBeginDraw(const Standard_Boolean DoubleBuffer,const Standard_Boolean RetainMode) const
-{
- return Visual3d_TransientManager::BeginDraw(MyView,DoubleBuffer,RetainMode);
-}
-
-//=============================================================================
-//function : TransientManagerClearDraw
-//purpose :
-//=============================================================================
-void V3d_View::TransientManagerClearDraw() const
-{
- Visual3d_TransientManager::ClearDraw(MyView);
-}
-
-//=============================================================================
-//function : TransientManagerBeginAddDraw
-//purpose :
-//=============================================================================
-Standard_Boolean V3d_View::TransientManagerBeginAddDraw() const
-{
- return Visual3d_TransientManager::BeginAddDraw(MyView);
-}
-
-//=============================================================================
-//function : Init
-//purpose :
-//=============================================================================
void V3d_View::Init()
{
myComputedMode = MyViewer->ComputedMode();
}
}
+ // render immediate structures into back buffer rather than front
+ Handle(Graphic3d_GraphicDriver) aDriver = Handle(Graphic3d_GraphicDriver)::DownCast (MyView->GraphicDriver());
+ const Standard_Boolean aPrevImmediateMode = aDriver.IsNull() ? Standard_True : aDriver->SetImmediateModeDrawToFront (*cView, Standard_False);
+
+ const Standard_Boolean toAutoUpdate = myImmediateUpdate;
+ myImmediateUpdate = Standard_False;
AutoZFit();
+ myImmediateUpdate = toAutoUpdate;
if (theToKeepAspect)
{
MyLayerMgr->Compute();
}
- // render immediate structures into back buffer rather than front
- Handle(Graphic3d_GraphicDriver) aDriver = Handle(Graphic3d_GraphicDriver)::DownCast (MyView->GraphicDriver());
- const Standard_Boolean aPrevImmediateMode = aDriver.IsNull() ? Standard_True : aDriver->SetImmediateModeDrawToFront (*cView, Standard_False);
Redraw();
if (!aDriver.IsNull())
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
-/***********************************************************************
-
- FONCTION :
- ----------
- Classe V3d_View :
-
- HISTORIQUE DES MODIFICATIONS :
- --------------------------------
- 16-08-98 : CAL ; S3892. Ajout grilles 3d.
- 16-09-98 : BGN ; Points d'entree du Triedre (S3819, Phase 1)
- 21-09-98 : CAL ; Activation de l'echo que si CSF_GraphicEcho est definie.
- 22-09-98 : BGN ; S3989 (anciennement S3819)
- TypeOfTriedron* from Aspect (pas V3d)
- 02.15.100 : JR : Clutter
- 28/05/02 : VSV: ZBUFFER mode of Trihedron
-
-************************************************************************/
-
-#define IMP240100 //GG
-// -> In Compute() method call MyViewer->ShowGridEcho()
-
-
-/*----------------------------------------------------------------------*/
-/*
- * Includes
- */
#include <V3d_View.jxx>
#include <TColStd_Array2OfReal.hxx>
#include <V3d_RectangularGrid.hxx>
#include <V3d_CircularGrid.hxx>
-// For the echo of the chosen point
-#include <Visual3d_TransientManager.hxx>
-
-/*----------------------------------------------------------------------*/
-/*
- * Constant
- */
-
#define MYEPSILON1 0.0001 // Comparison with 0.0
#define MYEPSILON2 M_PI / 180. // Delta between 2 angles
// are perpendicular to MYEPSILON2 close radians
if (Abs (VPN.Angle (GPN) - M_PI / 2.) < MYEPSILON2) {
NewPoint.SetCoord (X1, Y1, Z1);
-#ifdef IMP240100
- MyViewer->ShowGridEcho(this,NewPoint);
-#endif //IMP240100
return NewPoint;
}
NewPoint.SetCoord (aResult.X(), aResult.Y(), aResult.Z());
}
-#ifdef IMP240100
- MyViewer->ShowGridEcho(this,NewPoint);
-#endif //IMP240100
return NewPoint;
}
-- all the views of the Viewer are exposed, as for
-- example in a global DeIconification.
+ RedrawImmediate ( me );
+ ---Level: Public
+ ---Purpose: Updates layer of immediate presentations.
+
+ Invalidate ( me );
+ ---Level: Public
+ ---Purpose: Invalidates viewer content but does not redraw it.
+
Remove (me:mutable);
---Level: Public
---Purpose: Suppresses the Viewer.
IsActive(me; aView: View from V3d)
returns Boolean from Standard is private;
- ShowGridEcho(me : mutable;
- aView: View from V3d;
- aPoint: Vertex from Graphic3d) is private;
+ ShowGridEcho (me : mutable;
+ theView : View from V3d;
+ thePoint : Vertex from Graphic3d);
---Purpose:
-- Display grid echo at requested point in the view.
+ HideGridEcho (me : mutable;
+ theView : View from V3d);
+ ---Purpose:
+ -- Temporarly hide grid echo.
+
AddZLayer ( me : mutable;
theLayerId : in out Integer from Standard )
returns Boolean from Standard is static;
myGridEchoStructure: Structure from Graphic3d;
myGridEchoGroup: Group from Graphic3d;
myGridEchoAspect : AspectMarker3d from Graphic3d;
+ myGridEchoLastVert : Vertex from Graphic3d;
friends
class View from V3d,
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
-/***********************************************************************
-
- FONCTION :
- ----------
- Classe V3d_Viewer :
-
- HISTORIQUE DES MODIFICATIONS :
- --------------------------------
- 00-09-92 : GG ; Creation.
- 15-11-97 : FMN ; Ajout texture mapping
- 02-02-98 : FMN ; Mise a niveau WNT
- 23-02-98 : FMN ; Remplacement PI par Standard_PI
- 16-07-98 : CAL ; S3892. Ajout grilles 3d.
-
-************************************************************************/
-
-//GER61351 //GG_15/12/99 Adds SetDefaultBackgroundColor() and DefaultBackgroundColor() methods
-
-#define IMP240100 //GG
-// Initalize grid echo fields
-
-/*----------------------------------------------------------------------*/
-/*
- * Includes
- */
-
#include <V3d.hxx>
#include <Visual3d_View.hxx>
#include <Visual3d_Light.hxx>
myDefaultComputedMode (theDefaultComputedMode),
myPrivilegedPlane (gp_Ax3 (gp_Pnt (0.,0.,0), gp_Dir (0.,0.,1.), gp_Dir (1.,0.,0.))),
myDisplayPlane (Standard_False),
-myDisplayPlaneLength (theViewSize)
-#ifdef IMP240100
-,myGridEcho (Standard_True), myGridEchoStructure(), myGridEchoGroup()
-#endif
+myDisplayPlaneLength (theViewSize),
+myGridEcho (Standard_True),
+myGridEchoLastVert (ShortRealLast(), ShortRealLast(), ShortRealLast())
{
MyViewer = new Visual3d_ViewManager (theDriver);
// san (16/09/2010): It has been decided to turn depth test ON
return myDefaultComputedMode;
}
-void V3d_Viewer::Update() {
-
+void V3d_Viewer::Update()
+{
MyViewer->Update();
}
-void V3d_Viewer::Redraw()const {
-
+void V3d_Viewer::Redraw()const
+{
MyViewer->Redraw();
}
+void V3d_Viewer::RedrawImmediate() const
+{
+ MyViewer->RedrawImmediate();
+}
+
+void V3d_Viewer::Invalidate() const
+{
+ MyViewer->Invalidate();
+}
+
void V3d_Viewer::Remove() {
MyViewer->Remove();
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
-/***********************************************************************
-
- FONCTION :
- ----------
- Classe V3d_Viewer :
-
- HISTORIQUE DES MODIFICATIONS :
- --------------------------------
- 16-07-98 : CAL ; S3892. Ajout grilles 3d.
- 22-09-98 : CAL ; Erreur de compilation sur WNT dans V3d_Viewer_4.cxx.
-
-************************************************************************/
-
-#define IMP200100 //GG
-// -> Add GridDrawMode() method.
-// -> Compute the case Aspect_TDM_None
-// in ActivateGrid(..)
-
-#define IMP240100 //GG
-// -> Add SetGridEcho() & GridEcho() methods
-// -> Add ShowGridEcho() private method.
-
-#define OCC281 //SAV added new field to store grid echo aspect
-
-/*----------------------------------------------------------------------*/
-/*
- * Includes
- */
#include <V3d_Viewer.jxx>
-/*----------------------------------------------------------------------*/
-
-Handle(Aspect_Grid) V3d_Viewer::Grid () const {
-
- if (myGridType == Aspect_GT_Circular)
- return myCGrid;
- else if (myGridType == Aspect_GT_Rectangular)
- return myRGrid;
- else
- return myRGrid;
+#include <Graphic3d_ArrayOfPoints.hxx>
+#include <Visual3d_View.hxx>
+
+// =======================================================================
+// function : Grid
+// purpose :
+// =======================================================================
+Handle(Aspect_Grid) V3d_Viewer::Grid() const
+{
+ switch (myGridType)
+ {
+ case Aspect_GT_Circular: return myCGrid;
+ case Aspect_GT_Rectangular: return myRGrid;
+ }
+ return myRGrid;
}
-Aspect_GridType V3d_Viewer::GridType () const {
-
- return myGridType;
+// =======================================================================
+// function : GridType
+// purpose :
+// =======================================================================
+Aspect_GridType V3d_Viewer::GridType() const
+{
+ return myGridType;
}
-#ifdef IMP200100
-Aspect_GridDrawMode V3d_Viewer::GridDrawMode () const {
-
- return Grid()->DrawMode();
+// =======================================================================
+// function : GridDrawMode
+// purpose :
+// =======================================================================
+Aspect_GridDrawMode V3d_Viewer::GridDrawMode() const
+{
+ return Grid()->DrawMode();
}
-#endif
-void V3d_Viewer::ActivateGrid (const Aspect_GridType aType, const Aspect_GridDrawMode aMode) {
-
- Grid ()->Erase ();
- myGridType = aType;
- Grid ()->SetDrawMode (aMode);
-#ifdef IMP200100
- if( aMode != Aspect_GDM_None ) Grid ()->Display ();
-#else
- Grid ()->Display ();
-#endif
- Grid ()->Activate ();
- for (InitActiveViews (); MoreActiveViews (); NextActiveViews ()) {
- ActiveView ()->SetGrid (myPrivilegedPlane, Grid ());
-#ifndef IMP200100 //Do nothing more than the previous Grid()->Activate()
- ActiveView ()->SetGridActivity (Standard_True);
-#endif
- }
- Update ();
+// =======================================================================
+// function : ActivateGrid
+// purpose :
+// =======================================================================
+void V3d_Viewer::ActivateGrid (const Aspect_GridType theType,
+ const Aspect_GridDrawMode theMode)
+{
+ Grid()->Erase();
+ myGridType = theType;
+ Grid()->SetDrawMode (theMode);
+ if (theMode != Aspect_GDM_None)
+ {
+ Grid()->Display();
+ }
+ Grid()->Activate();
+ for (InitActiveViews(); MoreActiveViews(); NextActiveViews())
+ {
+ ActiveView()->SetGrid (myPrivilegedPlane, Grid());
+ }
+ Update();
}
-void V3d_Viewer::DeactivateGrid () {
-
- Grid ()->Erase ();
- myGridType = Aspect_GT_Rectangular;
- Grid ()->Deactivate ();
- for (InitActiveViews (); MoreActiveViews (); NextActiveViews ()) {
- ActiveView ()->SetGridActivity (Standard_False);
- }
- Update ();
+// =======================================================================
+// function : DeactivateGrid
+// purpose :
+// =======================================================================
+void V3d_Viewer::DeactivateGrid()
+{
+ Grid()->Erase();
+ myGridType = Aspect_GT_Rectangular;
+ Grid()->Deactivate();
+ for (InitActiveViews(); MoreActiveViews(); NextActiveViews())
+ {
+ ActiveView()->SetGridActivity (Standard_False);
+ if (myGridEcho
+ && !myGridEchoStructure.IsNull())
+ {
+ ActiveView()->View()->EraseImmediate (myGridEchoStructure);
+ }
+ }
+ Update();
}
-Standard_Boolean V3d_Viewer::IsActive () const {
-
- return Grid ()->IsActive ();
+// =======================================================================
+// function : IsActive
+// purpose :
+// =======================================================================
+Standard_Boolean V3d_Viewer::IsActive() const
+{
+ return Grid()->IsActive();
}
-void V3d_Viewer::RectangularGridValues (Quantity_Length& theXOrigin, Quantity_Length& theYOrigin, Quantity_Length& theXStep, Quantity_Length& theYStep, Quantity_PlaneAngle& theRotationAngle) const {
+// =======================================================================
+// function : RectangularGridValues
+// purpose :
+// =======================================================================
+void V3d_Viewer::RectangularGridValues (Quantity_Length& theXOrigin,
+ Quantity_Length& theYOrigin,
+ Quantity_Length& theXStep,
+ Quantity_Length& theYStep,
+ Quantity_PlaneAngle& theRotationAngle) const
+{
+ theXOrigin = myRGrid->XOrigin();
+ theYOrigin = myRGrid->YOrigin();
+ theXStep = myRGrid->XStep();
+ theYStep = myRGrid->YStep();
+ theRotationAngle = myRGrid->RotationAngle();
+}
- theXOrigin = myRGrid->XOrigin ();
- theYOrigin = myRGrid->YOrigin ();
- theXStep = myRGrid->XStep ();
- theYStep = myRGrid->YStep ();
- theRotationAngle = myRGrid->RotationAngle ();
+// =======================================================================
+// function : SetRectangularGridValues
+// purpose :
+// =======================================================================
+void V3d_Viewer::SetRectangularGridValues (const Quantity_Length theXOrigin,
+ const Quantity_Length theYOrigin,
+ const Quantity_Length theXStep,
+ const Quantity_Length theYStep,
+ const Quantity_PlaneAngle theRotationAngle)
+{
+ myRGrid->SetGridValues (theXOrigin, theYOrigin, theXStep, theYStep, theRotationAngle);
+ for (InitActiveViews(); MoreActiveViews(); NextActiveViews())
+ {
+ ActiveView()->SetGrid (myPrivilegedPlane, myRGrid);
+ }
+ Update();
}
-void V3d_Viewer::SetRectangularGridValues (const Quantity_Length theXOrigin, const Quantity_Length theYOrigin, const Quantity_Length theXStep, const Quantity_Length theYStep, const Quantity_PlaneAngle theRotationAngle) {
+// =======================================================================
+// function : CircularGridValues
+// purpose :
+// =======================================================================
+void V3d_Viewer::CircularGridValues (Quantity_Length& theXOrigin,
+ Quantity_Length& theYOrigin,
+ Quantity_Length& theRadiusStep,
+ Standard_Integer& theDivisionNumber,
+ Quantity_PlaneAngle& theRotationAngle) const
+{
+ theXOrigin = myCGrid->XOrigin();
+ theYOrigin = myCGrid->YOrigin();
+ theRadiusStep = myCGrid->RadiusStep();
+ theDivisionNumber = myCGrid->DivisionNumber();
+ theRotationAngle = myCGrid->RotationAngle();
+}
- myRGrid->SetGridValues
- (theXOrigin, theYOrigin, theXStep, theYStep, theRotationAngle);
- for (InitActiveViews (); MoreActiveViews (); NextActiveViews ())
- ActiveView ()->SetGrid (myPrivilegedPlane, myRGrid);
- Update ();
+// =======================================================================
+// function : SetCircularGridValues
+// purpose :
+// =======================================================================
+void V3d_Viewer::SetCircularGridValues (const Quantity_Length theXOrigin,
+ const Quantity_Length theYOrigin,
+ const Quantity_Length theRadiusStep,
+ const Standard_Integer theDivisionNumber,
+ const Quantity_PlaneAngle theRotationAngle)
+{
+ myCGrid->SetGridValues (theXOrigin, theYOrigin, theRadiusStep,
+ theDivisionNumber, theRotationAngle);
+ for (InitActiveViews(); MoreActiveViews(); NextActiveViews())
+ {
+ ActiveView()->SetGrid (myPrivilegedPlane, myCGrid);
+ }
+ Update();
}
-void V3d_Viewer::CircularGridValues (Quantity_Length& theXOrigin, Quantity_Length& theYOrigin, Quantity_Length& theRadiusStep, Standard_Integer& theDivisionNumber, Quantity_PlaneAngle& theRotationAngle) const {
+// =======================================================================
+// function : RectangularGridGraphicValues
+// purpose :
+// =======================================================================
+void V3d_Viewer::RectangularGridGraphicValues (Quantity_Length& theXSize,
+ Quantity_Length& theYSize,
+ Quantity_Length& theOffSet) const
+{
+ myRGrid->GraphicValues (theXSize, theYSize, theOffSet);
+}
- theXOrigin = myCGrid->XOrigin ();
- theYOrigin = myCGrid->YOrigin ();
- theRadiusStep = myCGrid->RadiusStep ();
- theDivisionNumber = myCGrid->DivisionNumber ();
- theRotationAngle = myCGrid->RotationAngle ();
+// =======================================================================
+// function : SetRectangularGridGraphicValues
+// purpose :
+// =======================================================================
+void V3d_Viewer::SetRectangularGridGraphicValues (const Quantity_Length theXSize,
+ const Quantity_Length theYSize,
+ const Quantity_Length theOffSet)
+{
+ myRGrid->SetGraphicValues (theXSize, theYSize, theOffSet);
+ for (InitActiveViews(); MoreActiveViews(); NextActiveViews())
+ {
+ ActiveView()->SetGridGraphicValues (myRGrid);
+ }
+ Update();
}
-void V3d_Viewer::SetCircularGridValues (const Quantity_Length theXOrigin, const Quantity_Length theYOrigin, const Quantity_Length theRadiusStep, const Standard_Integer theDivisionNumber, const Quantity_PlaneAngle theRotationAngle) {
+// =======================================================================
+// function : CircularGridGraphicValues
+// purpose :
+// =======================================================================
+void V3d_Viewer::CircularGridGraphicValues (Quantity_Length& theRadius,
+ Quantity_Length& theOffSet) const
+{
+ myCGrid->GraphicValues (theRadius, theOffSet);
+}
- myCGrid->SetGridValues
- (theXOrigin, theYOrigin, theRadiusStep,
- theDivisionNumber, theRotationAngle);
- for (InitActiveViews (); MoreActiveViews (); NextActiveViews ())
- ActiveView ()->SetGrid (myPrivilegedPlane, myCGrid);
- Update ();
+// =======================================================================
+// function : SetCircularGridGraphicValues
+// purpose :
+// =======================================================================
+void V3d_Viewer::SetCircularGridGraphicValues (const Quantity_Length theRadius,
+ const Quantity_Length theOffSet)
+{
+ myCGrid->SetGraphicValues (theRadius, theOffSet);
+ for (InitActiveViews(); MoreActiveViews(); NextActiveViews())
+ {
+ ActiveView()->SetGridGraphicValues (myCGrid);
+ }
+ Update();
}
-void V3d_Viewer::RectangularGridGraphicValues (Quantity_Length& theXSize, Quantity_Length& theYSize, Quantity_Length& theOffSet) const {
+// =======================================================================
+// function : SetGridEcho
+// purpose :
+// =======================================================================
+void V3d_Viewer::SetGridEcho (const Standard_Boolean theToShowGrid)
+{
+ if (myGridEcho == theToShowGrid)
+ {
+ return;
+ }
+
+ myGridEcho = theToShowGrid;
+ if (theToShowGrid
+ || myGridEchoStructure.IsNull())
+ {
+ return;
+ }
- myRGrid->GraphicValues (theXSize, theYSize, theOffSet);
+ for (InitActiveViews(); MoreActiveViews(); NextActiveViews())
+ {
+ ActiveView()->View()->EraseImmediate (myGridEchoStructure);
+ }
}
-void V3d_Viewer::SetRectangularGridGraphicValues (const Quantity_Length theXSize, const Quantity_Length theYSize, const Quantity_Length theOffSet) {
+// =======================================================================
+// function : SetGridEcho
+// purpose :
+// =======================================================================
+void V3d_Viewer::SetGridEcho (const Handle(Graphic3d_AspectMarker3d)& theMarker)
+{
+ if (myGridEchoStructure.IsNull())
+ {
+ myGridEchoStructure = new Graphic3d_Structure (Viewer());
+ myGridEchoGroup = new Graphic3d_Group (myGridEchoStructure);
+ }
- myRGrid->SetGraphicValues (theXSize, theYSize, theOffSet);
- for (InitActiveViews (); MoreActiveViews (); NextActiveViews ())
- ActiveView ()->SetGridGraphicValues (myRGrid);
- Update ();
+ myGridEchoAspect = theMarker;
+ myGridEchoGroup->SetPrimitivesAspect (theMarker);
}
-void V3d_Viewer::CircularGridGraphicValues (Quantity_Length& theRadius, Quantity_Length& theOffSet) const {
-
- myCGrid->GraphicValues (theRadius, theOffSet);
+// =======================================================================
+// function : GridEcho
+// purpose :
+// =======================================================================
+Standard_Boolean V3d_Viewer::GridEcho() const
+{
+ return myGridEcho;
}
-void V3d_Viewer::SetCircularGridGraphicValues (const Quantity_Length theRadius, const Quantity_Length theOffSet) {
+// =======================================================================
+// function : ShowGridEcho
+// purpose :
+// =======================================================================
+void V3d_Viewer::ShowGridEcho (const Handle(V3d_View)& theView,
+ const Graphic3d_Vertex& theVertex)
+{
+ if (!myGridEcho)
+ {
+ return;
+ }
- myCGrid->SetGraphicValues (theRadius, theOffSet);
- for (InitActiveViews (); MoreActiveViews (); NextActiveViews ())
- ActiveView ()->SetGridGraphicValues (myCGrid);
- Update ();
-}
+ if (myGridEchoStructure.IsNull())
+ {
+ myGridEchoStructure = new Graphic3d_Structure (Viewer());
+ myGridEchoGroup = new Graphic3d_Group (myGridEchoStructure);
-#ifdef IMP240100
-void V3d_Viewer::SetGridEcho( const Standard_Boolean showGrid ) {
+ myGridEchoAspect = new Graphic3d_AspectMarker3d (Aspect_TOM_STAR, Quantity_Color (Quantity_NOC_GRAY90), 3.0);
+ myGridEchoGroup->SetPrimitivesAspect (myGridEchoAspect);
+ }
- myGridEcho = showGrid;
-}
+ if (theVertex.X() == myGridEchoLastVert.X()
+ && theVertex.Y() == myGridEchoLastVert.Y()
+ && theVertex.Z() == myGridEchoLastVert.Z())
+ {
+ return;
+ }
-void V3d_Viewer::SetGridEcho( const Handle(Graphic3d_AspectMarker3d)& aMarker ) {
- if( myGridEchoStructure.IsNull() ) {
- myGridEchoStructure = new Graphic3d_Structure(Viewer());
- myGridEchoGroup = new Graphic3d_Group (myGridEchoStructure);
- }
-#ifdef OCC281
- myGridEchoAspect = aMarker;
-#endif
- myGridEchoGroup->SetPrimitivesAspect (aMarker);
-}
+ myGridEchoLastVert = theVertex;
+ myGridEchoGroup->Clear();
+ myGridEchoGroup->SetPrimitivesAspect (myGridEchoAspect);
-Standard_Boolean V3d_Viewer::GridEcho() const {
+ Handle(Graphic3d_ArrayOfPoints) anArrayOfPoints = new Graphic3d_ArrayOfPoints (1);
+ anArrayOfPoints->AddVertex (theVertex.X(), theVertex.Y(), theVertex.Z());
+ myGridEchoGroup->AddPrimitiveArray (anArrayOfPoints);
- return myGridEcho;
+ theView->View()->DisplayImmediate (myGridEchoStructure, Standard_True);
}
-#include <Graphic3d_ArrayOfPoints.hxx>
-#include <Visual3d_TransientManager.hxx>
-void V3d_Viewer::ShowGridEcho( const Handle(V3d_View)& aView,
- const Graphic3d_Vertex& aVertex ) {
- if( myGridEcho ) {
- if( myGridEchoStructure.IsNull() ) {
- myGridEchoStructure = new Graphic3d_Structure(Viewer());
- myGridEchoGroup = new Graphic3d_Group (myGridEchoStructure);
-#ifdef OCC281
- myGridEchoAspect = new Graphic3d_AspectMarker3d( Aspect_TOM_STAR,
- Quantity_Color( Quantity_NOC_GRAY90 ),
- 3.0 );
- myGridEchoGroup->SetPrimitivesAspect( myGridEchoAspect );
-#else
- Handle(Graphic3d_AspectMarker3d) markerAttrib =
- new Graphic3d_AspectMarker3d(Aspect_TOM_STAR,
- Quantity_Color(Quantity_NOC_GRAY90),3.0);
- myGridEchoGroup->SetPrimitivesAspect (markerAttrib);
-#endif
- }
-
- static Graphic3d_Vertex lastVertex;
- if( aVertex.Distance(lastVertex) != 0.0 ) {
- lastVertex = aVertex;
- myGridEchoGroup->Clear();
-#ifdef OCC281
- myGridEchoGroup->SetPrimitivesAspect( myGridEchoAspect );
-#endif
- Handle(Graphic3d_ArrayOfPoints) anArrayOfPoints = new Graphic3d_ArrayOfPoints (1);
- anArrayOfPoints->AddVertex (aVertex.X(), aVertex.Y(), aVertex.Z());
- myGridEchoGroup->AddPrimitiveArray (anArrayOfPoints);
-
- Visual3d_TransientManager::BeginDraw(
- aView->View(), Standard_False, Standard_False);
- Visual3d_TransientManager::DrawStructure (myGridEchoStructure);
- Visual3d_TransientManager::EndDraw (Standard_True);
- }
+// =======================================================================
+// function : HideGridEcho
+// purpose :
+// =======================================================================
+void V3d_Viewer::HideGridEcho (const Handle(V3d_View)& theView)
+{
+ if (myGridEchoStructure.IsNull())
+ {
+ return;
}
+
+ myGridEchoLastVert.SetCoord (ShortRealLast(), ShortRealLast(), ShortRealLast());
+ theView->View()->EraseImmediate (myGridEchoStructure);
}
-#endif
#include <ViewerTest_EventManager.ixx>
#include <AIS_InteractiveContext.hxx>
+#include <Aspect_Grid.hxx>
#include <NIS_View.hxx>
//=======================================================================
//function : ViewerTest_EventManager
-//purpose :
+//purpose :
//=======================================================================
-ViewerTest_EventManager::ViewerTest_EventManager
- (const Handle(V3d_View)& aView,
- const Handle(AIS_InteractiveContext)& Ctx)
- : myCtx (Ctx),
- myView (aView),
- myX (-1),
- myY (-1)
+ViewerTest_EventManager::ViewerTest_EventManager (const Handle(V3d_View)& theView,
+ const Handle(AIS_InteractiveContext)& theCtx)
+: myCtx (theCtx),
+ myView (theView),
+ myX (-1),
+ myY (-1)
{}
//=======================================================================
//function : MoveTo
-//purpose :
+//purpose :
//=======================================================================
-void ViewerTest_EventManager::MoveTo(const Standard_Integer XPix,
- const Standard_Integer YPix)
+void ViewerTest_EventManager::MoveTo (const Standard_Integer theXPix,
+ const Standard_Integer theYPix)
{
- if(!myCtx.IsNull() && !myView.IsNull())
- myCtx->MoveTo(XPix,YPix,myView);
- myX = XPix;
- myY = YPix;
+ Standard_Real aPnt3d[3] = {0.0, 0.0, 0.0};
+ if (!myCtx.IsNull()
+ && !myView.IsNull())
+ {
+ const Standard_Boolean toEchoGrid = myView->Viewer()->Grid()->IsActive()
+ && myView->Viewer()->GridEcho();
+ switch (myCtx->MoveTo (theXPix, theYPix, myView, !toEchoGrid))
+ {
+ case AIS_SOD_Nothing:
+ {
+ if (toEchoGrid)
+ {
+ myView->ConvertToGrid (theXPix, theYPix, aPnt3d[0], aPnt3d[1], aPnt3d[2]);
+ myView->Viewer()->ShowGridEcho (myView, Graphic3d_Vertex (aPnt3d[0], aPnt3d[1], aPnt3d[2]));
+ myView->RedrawImmediate();
+ }
+ break;
+ }
+ default:
+ {
+ if (toEchoGrid)
+ {
+ myView->Viewer()->HideGridEcho (myView);
+ myView->RedrawImmediate();
+ }
+ break;
+ }
+ }
+ }
+
+ myX = theXPix;
+ myY = theYPix;
const Handle(NIS_View) aView = Handle(NIS_View)::DownCast(myView);
if (!aView.IsNull())
- aView->DynamicHilight (XPix, YPix);
+ {
+ aView->DynamicHilight (theXPix, theYPix);
+ }
}
//=======================================================================
//function : Select
-//purpose :
+//purpose :
//=======================================================================
-void ViewerTest_EventManager::Select(const Standard_Integer XPMin,
- const Standard_Integer YPMin,
- const Standard_Integer XPMax,
- const Standard_Integer YPMax)
+void ViewerTest_EventManager::Select (const Standard_Integer theXPMin,
+ const Standard_Integer theYPMin,
+ const Standard_Integer theXPMax,
+ const Standard_Integer theYPMax)
{
-#define IS_FULL_INCLUSION Standard_True
- if(!myCtx.IsNull() && !myView.IsNull())
- myCtx->Select(XPMin,YPMin,XPMax,YPMax,myView);
- const Handle(NIS_View) aView = Handle(NIS_View)::DownCast(myView);
+ #define IS_FULL_INCLUSION Standard_True
+ if (myView.IsNull())
+ {
+ return;
+ }
+ else if (!myCtx.IsNull())
+ {
+ myCtx->Select (theXPMin, theYPMin, theXPMax, theYPMax, myView, Standard_False);
+ }
+
+ const Handle(NIS_View) aView = Handle(NIS_View)::DownCast (myView);
if (!aView.IsNull())
- aView->Select(XPMin,YPMin,XPMax,YPMax, Standard_False, IS_FULL_INCLUSION);
+ {
+ aView->Select (theXPMin, theYPMin, theXPMax, theYPMax, Standard_False, IS_FULL_INCLUSION, Standard_False);
+ }
+ myView->Redraw();
}
//=======================================================================
//function : ShiftSelect
-//purpose :
+//purpose :
//=======================================================================
-void ViewerTest_EventManager::ShiftSelect(const Standard_Integer XPMin,
- const Standard_Integer YPMin,
- const Standard_Integer XPMax,
- const Standard_Integer YPMax)
-{
- if(!myCtx.IsNull() && !myView.IsNull())
- myCtx->AIS_InteractiveContext::ShiftSelect(XPMin,YPMin,XPMax,YPMax,myView,
- Standard_True);
- const Handle(NIS_View) aView = Handle(NIS_View)::DownCast(myView);
+void ViewerTest_EventManager::ShiftSelect (const Standard_Integer theXPMin,
+ const Standard_Integer theYPMin,
+ const Standard_Integer theXPMax,
+ const Standard_Integer theYPMax)
+{
+ if (myView.IsNull())
+ {
+ return;
+ }
+ else if (!myCtx.IsNull())
+ {
+ myCtx->AIS_InteractiveContext::ShiftSelect (theXPMin, theYPMin, theXPMax, theYPMax, myView, Standard_False);
+ }
+ const Handle(NIS_View) aView = Handle(NIS_View)::DownCast (myView);
if (!aView.IsNull())
- aView->Select(XPMin,YPMin,XPMax,YPMax, Standard_True, IS_FULL_INCLUSION);
+ {
+ aView->Select (theXPMin, theYPMin, theXPMax, theYPMax, Standard_True, IS_FULL_INCLUSION, Standard_False);
+ }
+ myView->Redraw();
}
//=======================================================================
//function : Select
-//purpose :
+//purpose :
//=======================================================================
void ViewerTest_EventManager::Select()
{
- if (!myCtx.IsNull() && !myView.IsNull())
- myCtx->Select();
- const Handle(NIS_View) aView = Handle(NIS_View)::DownCast(myView);
+ if (myView.IsNull())
+ {
+ return;
+ }
+ else if (!myCtx.IsNull())
+ {
+ myCtx->Select (Standard_False);
+ }
+
+ const Handle(NIS_View) aView = Handle(NIS_View)::DownCast (myView);
if (!aView.IsNull())
- aView->Select(myX, myY);
+ {
+ aView->Select (myX, myY, Standard_False);
+ }
+ myView->Redraw();
}
//=======================================================================
//function : ShiftSelect
-//purpose :
+//purpose :
//=======================================================================
void ViewerTest_EventManager::ShiftSelect()
{
- if(!myCtx.IsNull() && !myView.IsNull())
- myCtx->ShiftSelect(Standard_True);
- const Handle(NIS_View) aView = Handle(NIS_View)::DownCast(myView);
+ if (myView.IsNull())
+ {
+ return;
+ }
+ else if (!myCtx.IsNull())
+ {
+ myCtx->ShiftSelect (Standard_False);
+ }
+
+ const Handle(NIS_View) aView = Handle(NIS_View)::DownCast (myView);
if (!aView.IsNull())
- aView->Select(myX, myY, Standard_True);
+ {
+ aView->Select (myX, myY, Standard_False);
+ }
+ myView->Redraw();
}
//=======================================================================
//purpose : Selection with polyline
//=======================================================================
-void ViewerTest_EventManager::Select(const TColgp_Array1OfPnt2d& thePolyline)
+void ViewerTest_EventManager::Select (const TColgp_Array1OfPnt2d& thePolyline)
{
- if(!myCtx.IsNull() && !myView.IsNull())
- myCtx->Select(thePolyline,myView);
+ if (myView.IsNull())
+ {
+ return;
+ }
+ else if (!myCtx.IsNull())
+ {
+ myCtx->Select (thePolyline, myView, Standard_False);
+ }
+
const Handle(NIS_View) aView = Handle(NIS_View)::DownCast(myView);
if (!aView.IsNull())
{
NCollection_List<gp_XY> aPolylist;
- for(Standard_Integer anIter = thePolyline.Lower();anIter <= thePolyline.Upper();++anIter)
+ for(Standard_Integer anIter = thePolyline.Lower(); anIter <= thePolyline.Upper(); ++anIter)
{
- aPolylist.Append(gp_XY(thePolyline.Value(anIter).X(),
- thePolyline.Value(anIter).Y()));
+ aPolylist.Append (gp_XY (thePolyline.Value (anIter).X(), thePolyline.Value (anIter).Y()));
}
- aView->Select(aPolylist);
+ aView->Select (aPolylist, Standard_False, Standard_False, Standard_False);
}
+ myView->Redraw();
}
//=======================================================================
//purpose : Selection with polyline without erasing of current selection
//=======================================================================
-void ViewerTest_EventManager::ShiftSelect(const TColgp_Array1OfPnt2d& thePolyline)
+void ViewerTest_EventManager::ShiftSelect (const TColgp_Array1OfPnt2d& thePolyline)
{
- if(!myCtx.IsNull() && !myView.IsNull())
- myCtx->ShiftSelect(thePolyline,myView);
- const Handle(NIS_View) aView = Handle(NIS_View)::DownCast(myView);
+ if (myView.IsNull())
+ {
+ return;
+ }
+ else if (!myCtx.IsNull())
+ {
+ myCtx->ShiftSelect (thePolyline, myView, Standard_False);
+ }
+
+ const Handle(NIS_View) aView = Handle(NIS_View)::DownCast (myView);
if (!aView.IsNull())
{
NCollection_List<gp_XY> aPolylist;
- for(Standard_Integer anIter = thePolyline.Lower();anIter <= thePolyline.Upper();++anIter)
+ for (Standard_Integer anIter = thePolyline.Lower(); anIter <= thePolyline.Upper(); ++anIter)
{
- aPolylist.Append(gp_XY(thePolyline.Value(anIter).X(),
- thePolyline.Value(anIter).Y()));
+ aPolylist.Append (gp_XY (thePolyline.Value (anIter).X(), thePolyline.Value (anIter).Y()));
}
- aView->Select(aPolylist, Standard_True);
+ aView->Select (aPolylist, Standard_True, Standard_False, Standard_False);
}
+ myView->Redraw();
}
exception ZClippingDefinitionError inherits OutOfRange;
---Category: The exceptions
- exception TransientDefinitionError inherits OutOfRange;
- ---Category: The exceptions
-
exception LayerDefinitionError inherits OutOfRange;
---Category: The exceptions
---Purpose: 3D Visualiser
---Category: The classes
- class TransientManager;
- ---Purpose: 3D Transient Visualiser
- ---Category: The classes
-
class Layer;
---Purpose: 2D Layer
---Category: The classes
+++ /dev/null
--- Created on: 1995-10-10
--- Created by: GG
--- Copyright (c) 1995-1999 Matra Datavision
--- 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.
-
-class TransientManager from Visual3d inherits TShared
-
- ---Version:
-
- ---Purpose: This class allows to manage transient graphics
- -- above one View.
- -- A simple way to drawn something very quicly above
- -- a complex scene (Hilighting,Sketching,...)
- -- All transient graphics will be erased at the next
- -- View::BeginDraw().
- -- If RetainMode is active,
- -- All transient graphics will be kept at the
- -- next View::Update(),Redraw(). The transient graphics
- -- is stored by this object and graphic library, the
- -- graphic managed itself exposure,resizing,...
- -- The method View::ClearDraw() is necessary to erase
- -- all transient graphics.
- -- If RetainMode is deactivate,
- -- All transient graphics will be erased at the
- -- next View::Update(),Redraw().
- -- Remember that nothing is stored by this object and
- -- graphic library,the application must managed itself
- -- exposure,resizing,...
- -- If double_buffering is activate,
- -- all graphics are drawn in the back buffer and flushed
- -- in the front buffer at the end of drawing but nothing
- -- is done for to separate transient from structured
- -- graphics,the only way to regenerate the structured
- -- view is to Redraw() the view.
- -- If double_buffering is deactivate,
- -- the back buffer is preserved and used for restoring
- -- the front buffer at begin drawing time.I recommend
- -- to use the second way (without DB) if you want
- -- to preserve the graphics and the performances!
-
-
-uses
-
- Array2OfReal from TColStd,
-
- ExtendedString from TCollection,
-
- PlaneAngle from Quantity,
-
- Structure from Graphic3d,
- AspectLine3d from Graphic3d,
- AspectFillArea3d from Graphic3d,
- AspectText3d from Graphic3d,
- AspectMarker3d from Graphic3d,
- TypeOfComposition from Graphic3d,
- TextPath from Graphic3d,
- HorizontalTextAlignment from Graphic3d,
- VerticalTextAlignment from Graphic3d,
-
- View from Visual3d
-
-raises
- TransientDefinitionError from Visual3d,
- TransformError from Graphic3d
-
-is
- -------------------------
- -- Category: Constructors
- -------------------------
-
- Create returns mutable TransientManager from Visual3d;
- ---Purpose: Creates a TransientManager <aView>.
- ---Category: Constructors
-
- ------------------------
- -- Category: Destructors
- ------------------------
-
- Destroy (me : mutable);
- ---Level: Public
- ---Purpose: Suppress the TransientManager <me>.
- ---Category: Destructors
- ---C++: alias ~
-
- ---------------------------------------------------
- -- Category: Methods to modify the class definition
- ---------------------------------------------------
-
- BeginDraw (myclass;
- aView : View from Visual3d;
- DoubleBuffer: Boolean = Standard_False;
- RetainMode: Boolean = Standard_False)
- returns Boolean from Standard
- ---Level: Public
- ---Purpose: Begins any graphics in the view <aView>
- -- Redraw any structured graphics in the back buffer before
- -- if <DoubleBuffer> is TRUE.
- -- Restore the front buffer from the back before
- -- if <DoubleBuffer> is FALSE.
- -- if <RetainMode> is TRUE.
- -- the graphic managed itself exposure,resizing ...
- -- if <RetainMode> is FALSE.
- -- the application must managed itself exposure,resizing ...
- --
- -- Warning: Returns TRUE if transient drawing is enabled in
- -- the associated view.
- -- Returns FALSE ,if nothing works because something
- -- is wrong for the transient principle :
- -- Immediat mode is not implemented depending of the
- -- graphic library used.
- -- MBX,PIXMAP double buffering don't works depending of
- -- the graphic board and the visual of the window supporting
- -- the view.
- -- Warning: No default attributes
- -- Raises TransientDefinitionError from Visual3d;
- -- if Drawing is already opened.
- -- or the associated view is not mapped on a window.
- raises TransientDefinitionError from Visual3d;
-
- EndDraw (myclass;
- Synchronize: Boolean = Standard_False)
- ---Level: Public
- ---Purpose: Flush all graphics to the front buffer.
- -- Synchronize graphics to the screen if <Synchronize> is
- -- TRUE (make becarefull to the performances!).
- -- Raises TransientDefinitionError from Visual3d;
- -- if Drawing is not opened.
- raises TransientDefinitionError from Visual3d;
-
- ClearDraw (myclass; aView : View from Visual3d;
- aFlush : Boolean from Standard = Standard_True)
- ---Level: Public
- ---Purpose: Clear all transient graphics in the view <aView>
- --- updates a scene if <aFlush> = true
- -- Raises TransientDefinitionError from Visual3d;
- -- if Drawing is already opened.
- -- or the associated view is not mapped on a window.
- raises TransientDefinitionError from Visual3d;
-
- ---------------------------------------------------
- -- Category: Methods to modify the class definition
- ---------------------------------------------------
-
- BeginAddDraw (myclass;
- aView : View from Visual3d)
- returns Boolean from Standard
- ---Level: Public
- ---Purpose: Begins any add graphics in the view <aView>
- -- the application must managed itself exposure,resizing ...
- --
- -- Warning: Returns TRUE if transient drawing is enabled in
- -- the associated view.
- -- Returns FALSE ,if nothing works because something
- -- is wrong for the transient principle :
- -- Immediat mode is not implemented depending of the
- -- graphic library used.
- -- MBX,PIXMAP double buffering don't works depending of
- -- the graphic board and the visual of the window supporting
- -- the view.
- -- Warning: No default attributes
- -- Raises TransientDefinitionError from Visual3d;
- -- if Drawing is already opened.
- -- or the associated view is not mapped on a window.
- raises TransientDefinitionError from Visual3d;
-
- EndAddDraw (myclass)
- ---Purpose: Flush all add graphics to the front buffer.
- -- Raises TransientDefinitionError from Visual3d;
- -- if Drawing is not opened.
- raises TransientDefinitionError from Visual3d;
-
- ---------------------------------------
- -- Category: Graphic definition methods
- ---------------------------------------
-
- DrawStructure (myclass;
- AStructure : Structure from Graphic3d)
- ---Purpose: Drawn the structure <AStructure>.
- -- Raises TransientDefinitionError from Visual3d;
- -- if Drawing is not opened.
- raises TransientDefinitionError from Visual3d;
-
-end TransientManager from Visual3d;
+++ /dev/null
-// Copyright (c) 1995-1999 Matra Datavision
-// 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.
-
-/***********************************************************************
-
- FONCTION :
- ----------
- Classe Visual3d_TransientManager :
-
-
- Declaration des variables specifiques au mode transient.
-
- Une vue est definie par :
- - un ViewManager
- - un ContextView
- - un ViewMapping
- - une ViewOrientation
-
- HISTORIQUE DES MODIFICATIONS :
- --------------------------------
- October 1995 : GG : Creation.
- 20-11-97 : CAL ; Disparition de la dependance avec math
- 01-05-97 : CAL ; Ajout du Clear sur les TOS_COMPUTED.
- 18-12-97 : FMN ; Ajout mode AJOUT.
- 27-12-98 : FMN ; PERF: OPTIMISATION LOADER (LOPTIM)
- 10-06-98 : CAL ; Modification de la signature de DrawStructure.
- 25-09-98 : CAL ; Mise a jour de theCView = *(CALL_DEF_VIEW *)AView->CView ();
- 10-11-98 : CAL ; PRO16361. theCView dans ClearImmediatMode.
- 30-11-98 : FMN ; S4069 : Textes toujours visibles.
- 01-12-98 : CAL ; S4062. Ajout des layers.
-
-************************************************************************/
-
-// for the class
-#include <Visual3d_TransientManager.ixx>
-#include <Visual3d_ViewPtr.hxx>
-#include <Visual3d_View.pxx>
-
-#include <Aspect_CLayer2d.hxx>
-#include <Graphic3d_CView.hxx>
-#include <Graphic3d_GraphicDriver.hxx>
-#include <Graphic3d_TypeOfPrimitive.hxx>
-#include <Visual3d_Layer.hxx>
-
-enum TypeOfImmediat {
- Immediat_None,
- Immediat_Transient,
- Immediat_Ajout
-};
-
-//-Global data definitions
-static Standard_Integer theDrawingState = 0;
-static TypeOfImmediat theImmediatState = Immediat_None;
-
-static Handle(Graphic3d_GraphicDriver)& _theGraphicDriver() {
- static Handle(Graphic3d_GraphicDriver) theGraphicDriver;
-return theGraphicDriver;
-}
-#define theGraphicDriver _theGraphicDriver()
-
-static Graphic3d_CView& _theCView() {
- static Graphic3d_CView theCView;
-return theCView;
-}
-#define theCView _theCView()
-
-static Aspect_CLayer2d UnderCLayer;
-static Aspect_CLayer2d OverCLayer;
-
-//
-//-Constructors
-//
-
-Visual3d_TransientManager::Visual3d_TransientManager () {
-}
-
-//
-//-Destructors
-//
-
-void Visual3d_TransientManager::Destroy () {
-}
-
-//-Methods, in order
-
-Standard_Boolean Visual3d_TransientManager::BeginDraw (const Handle(Visual3d_View)& AView, const Standard_Boolean DoubleBuffer, const Standard_Boolean RetainMode) {
-
- if (theDrawingState > 0) {
- Graphic3d_CView* pview = (Graphic3d_CView*) AView->CView();
- if( theImmediatState == Immediat_Transient &&
- pview->ViewId == theCView.ViewId ) {
- theDrawingState++;
- return theDrawingState;
- } else
- Visual3d_TransientDefinitionError::Raise
- ("Drawing in progress !");
- }
-
-Handle(Visual3d_Layer) OverLayer = AView->OverLayer ();
-Handle(Visual3d_Layer) UnderLayer = AView->UnderLayer ();
- OverCLayer.ptrLayer = UnderCLayer.ptrLayer = NULL;
- theCView = *(Graphic3d_CView* )AView->CView ();
-
- if (! UnderLayer.IsNull ()){
- UnderCLayer = UnderLayer->CLayer();
- theCView.ptrUnderLayer = (CALL_DEF_LAYER *) &UnderCLayer;
- }
- if (! OverLayer.IsNull ()){
- OverCLayer = OverLayer->CLayer();
- theCView.ptrOverLayer = (CALL_DEF_LAYER *) &OverCLayer;
- }
-
- // Begin rendering
- theGraphicDriver = AView->GraphicDriver();
-
- if (theGraphicDriver->BeginImmediatMode
- (theCView, UnderCLayer, OverCLayer, DoubleBuffer, RetainMode))
- {
- theDrawingState++;
- theImmediatState = Immediat_Transient;
- }
-
- return theDrawingState;
-}
-
-void Visual3d_TransientManager::EndDraw (const Standard_Boolean Synchronize) {
-
- if( theDrawingState <= 0 )
- Visual3d_TransientDefinitionError::Raise ("Drawing not started !");
-
- theDrawingState--;
- if( theDrawingState > 0 ) return;
- theImmediatState = Immediat_None;
-
- // Flush all graphics
- theGraphicDriver->EndImmediatMode(Synchronize);
-}
-
-void Visual3d_TransientManager::ClearDraw (const Handle(Visual3d_View)& AView,
- const Standard_Boolean aFlush)
-{
- if (theDrawingState > 0)
- Visual3d_TransientDefinitionError::Raise
- ("Drawing in progress !");
-
- // Begin rendering
- theCView = *(Graphic3d_CView* )AView->CView ();
- if (!AView->UnderLayer().IsNull()) {
- UnderCLayer = AView->UnderLayer()->CLayer();
- theCView.ptrUnderLayer = (CALL_DEF_LAYER *) &UnderCLayer;
- }
- if (!AView->OverLayer().IsNull()) {
- OverCLayer = AView->OverLayer()->CLayer();
- theCView.ptrOverLayer = (CALL_DEF_LAYER *) &OverCLayer;
- }
-
- theGraphicDriver = AView->GraphicDriver();
- theGraphicDriver->ClearImmediatMode (theCView, aFlush);
-}
-
-//
-//-Mode Ajout
-//
-
-Standard_Boolean Visual3d_TransientManager::BeginAddDraw (const Handle(Visual3d_View)& AView)
-{
- if (theDrawingState > 0)
- {
- Graphic3d_CView* pview = (Graphic3d_CView* )AView->CView();
- if( theImmediatState == Immediat_Ajout &&
- pview->ViewId == theCView.ViewId ) {
- theDrawingState++;
- return theDrawingState;
- } else
- Visual3d_TransientDefinitionError::Raise
- ("Drawing in progress !");
- }
-
- // Begin rendering
- theCView = *(Graphic3d_CView* )AView->CView ();
- if (!AView->UnderLayer().IsNull()) {
- UnderCLayer = AView->UnderLayer()->CLayer();
- theCView.ptrUnderLayer = (CALL_DEF_LAYER *) &UnderCLayer;
- }
- if (!AView->OverLayer().IsNull()) {
- OverCLayer = AView->OverLayer()->CLayer();
- theCView.ptrOverLayer = (CALL_DEF_LAYER *) &OverCLayer;
- }
-
- theGraphicDriver = AView->GraphicDriver ();
-
- if (theGraphicDriver->BeginAddMode (theCView))
- {
- theDrawingState++;
- theImmediatState = Immediat_Ajout;
- }
-
- return theDrawingState;
-}
-
-void Visual3d_TransientManager::EndAddDraw () {
-
- if( theDrawingState <= 0 )
- Visual3d_TransientDefinitionError::Raise ("Drawing not started !");
-
- theDrawingState--;
- if( theDrawingState > 0 ) return;
- theImmediatState = Immediat_None;
- // Flush all graphics
- theGraphicDriver->EndAddMode();
-}
-
-
-//
-//-Graphic definition methods
-//
-
-void Visual3d_TransientManager::DrawStructure (const Handle(Graphic3d_Structure)& theStructure)
-{
- if (!theDrawingState)
- {
- Visual3d_TransientDefinitionError::Raise ("Drawing is not open !");
- }
- else if (!theStructure->IsEmpty())
- {
- theGraphicDriver->DrawStructure (*theStructure->CStructure());
- }
-}
---Purpose: Updates screen in all cases.
---Category: Methods to modify the class definition
+ RedrawImmediate ( me : mutable )
+ is static;
+ ---Level: Public
+ ---Purpose: Updates layer of immediate presentations.
+
Redraw ( me : mutable; x,y,width,height: Integer from Standard )
is static;
---Level: Public
---Purpose: Updates screen in all cases.
---Category: Methods to modify the class definition
+ RedrawImmediate ( me : mutable;
+ theUnderLayer : Layer from Visual3d;
+ theOverLayer : Layer from Visual3d )
+ is static;
+ ---Level: Public
+ ---Purpose: Updates layer of immediate presentations.
+
+ Invalidate ( me : mutable )
+ is static;
+ ---Level: Public
+ ---Purpose: Invalidates view content but does not redraw it.
+
Redraw ( me : mutable;
AnUnderLayer : Layer from Visual3d;
AnOverLayer : Layer from Visual3d;
---Purpose: Display the structure <AStructure> to the view <me>.
---Category: Private methods
+ DisplayImmediate ( me : mutable;
+ theStructure : Structure from Graphic3d;
+ theIsSingleView : Boolean from Standard = Standard_True)
+ returns Boolean from Standard
+ is static;
+ ---Level: Internal
+ ---Purpose: Add structure to the list of immediate presentations.
+ -- @return true if structure has not been registered in this view
+
+ EraseImmediate ( me : mutable;
+ theStructure : Structure from Graphic3d )
+ returns Boolean from Standard
+ is static;
+ ---Level: Internal
+ ---Purpose: Removes the structure from the list of immediate presentations.
+ -- @return true if structure has been registered in view
+
+ ClearImmediate ( me : mutable )
+ returns Boolean from Standard
+ is static;
+ ---Level: Internal
+ ---Purpose: Clears list of immediate presentations.
+ -- @return true if list was not empty
+
Erase ( me : mutable;
AStructure : Structure from Graphic3d )
is static private;
fields
--
--- Classe : Visual3d_View
+-- Classe: Visual3d_View
--
--- Purpose : Declaration of the variables specific to views.
+-- Purpose: Declaration of the variables specific to views.
--
--- Reminder : A view is defined by:
--- - a ViewManager
--- - a ContextView
+-- Reminder: A view is defined by:
+-- - a ViewManager
+-- - a ContextView
+
+ -- the associated C structure
+ MyCView : CView from Graphic3d;
- -- the associated C structure
- MyCView : CView from Graphic3d;
+ -- the context of the view : Aliasing, Depth-Cueing, Lights ...
+ MyContext : ContextView from Visual3d;
- -- the context of the view : Aliasing, Depth-Cueing, Lights ...
- MyContext : ContextView from Visual3d;
+ -- the associated window
+ MyWindow : Window from Aspect;
- -- the associated window
- MyWindow : Window from Aspect;
+ -- association Structure_COMPUTE and Structure_Computed
+ MyTOCOMPUTESequence : SequenceOfStructure from Graphic3d;
+ MyCOMPUTEDSequence : SequenceOfStructure from Graphic3d;
- -- association Structure_COMPUTE and Structure_Computed
- MyTOCOMPUTESequence : SequenceOfStructure from Graphic3d;
- MyCOMPUTEDSequence : SequenceOfStructure from Graphic3d;
+ -- the graphic driver used
+ MyGraphicDriver : GraphicDriver from Graphic3d;
- -- the graphic driver used
- MyGraphicDriver : GraphicDriver from Graphic3d;
+ -- the background of the associated window
+ MyBackground : Background from Aspect;
- -- the background of the associated window
- MyBackground : Background from Aspect;
+ -- the gradient background of the associated window
+ MyGradientBackground : GradientBackground from Aspect;
- -- the gradient background of the associated window
- MyGradientBackground : GradientBackground from Aspect;
+ -- the displayed structures in the view
+ MyDisplayedStructure : MapOfStructure from Graphic3d;
- -- the displayed structures in the view
- MyDisplayedStructure : MapOfStructure from Graphic3d;
+ myImmediateStructures : MapOfStructure from Graphic3d;
- -- the ViewManager associated with the view
--- MyPtrViewManager : Address from Standard;
- MyPtrViewManager : ViewManagerPtr from Visual3d;
+ -- the ViewManager associated with the view
+ MyPtrViewManager : ViewManagerPtr from Visual3d;
- -- Booleans
- MyCBitFields : CBitFields8 from Graphic3d;
+ -- Booleans
+ MyCBitFields : CBitFields8 from Graphic3d;
- MyGTrihedron : CGraduatedTrihedron from Graphic3d;
+ MyGTrihedron : CGraduatedTrihedron from Graphic3d;
- myDefaultCamera : Camera_Handle from Graphic3d;
+ myDefaultCamera : Camera_Handle from Graphic3d;
friends
- class ViewManager from Visual3d
+ class ViewManager from Visual3d
end View;
#include <Visual3d_Light.hxx>
#include <Visual3d_SetOfLight.hxx>
#include <Visual3d_HSetOfLight.hxx>
+#include <Visual3d_HSetOfView.hxx>
#include <Visual3d_SetIteratorOfSetOfLight.hxx>
-
#include <Visual3d_SetIteratorOfSetOfView.hxx>
#include <Graphic3d_TextureEnv.hxx>
}
-void Visual3d_View::Redraw () {
-
- Redraw (MyViewManager->UnderLayer (), MyViewManager->OverLayer ());
-
+void Visual3d_View::Redraw()
+{
+ Redraw (MyViewManager->UnderLayer(), MyViewManager->OverLayer(), 0, 0, 0, 0);
}
-void Visual3d_View::Redraw (const Standard_Integer x, const Standard_Integer y, const Standard_Integer width, const Standard_Integer height) {
-
- Redraw (MyViewManager->UnderLayer (), MyViewManager->OverLayer (), x, y, width, height);
+void Visual3d_View::Redraw (const Standard_Integer theX,
+ const Standard_Integer theY,
+ const Standard_Integer theWidth,
+ const Standard_Integer theHeight)
+{
+ Redraw (MyViewManager->UnderLayer(), MyViewManager->OverLayer(),
+ theX, theY, theWidth, theHeight);
}
-void Visual3d_View::Redraw (const Handle(Visual3d_Layer)& AnUnderLayer, const Handle(Visual3d_Layer)& AnOverLayer) {
-
- if (IsDeleted ()) return;
-
- if ((! IsDefined ()) || (! IsActive ())) return;
+void Visual3d_View::Redraw (const Handle(Visual3d_Layer)& theUnderLayer,
+ const Handle(Visual3d_Layer)& theOverLayer)
+{
+ Redraw (theUnderLayer, theOverLayer, 0, 0, 0, 0);
+}
- if (! MyWindow->IsMapped ()) return;
+void Visual3d_View::Redraw (const Handle(Visual3d_Layer)& theUnderLayer,
+ const Handle(Visual3d_Layer)& theOverLayer,
+ const Standard_Integer theX,
+ const Standard_Integer theY,
+ const Standard_Integer theWidth,
+ const Standard_Integer theHeight)
+{
+ if (IsDeleted()
+ || !IsDefined()
+ || !IsActive()
+ || !MyWindow->IsMapped())
+ {
+ return;
+ }
- // san - 14/04/2004 - set up Z buffer state before redrawing
- // If the activation/desactivation of ZBuffer should be automatic
- // depending on the presence or absence of facets.
- if (MyViewManager->ZBufferAuto ()) {
- Standard_Boolean BContainsFacet = ContainsFacet ();
- Standard_Boolean BZBuffer = ZBufferIsActivated ();
- // If the view contains facets
- // and if ZBuffer is not active
- if (BContainsFacet && ! BZBuffer)
- SetZBufferActivity (1);
- // If the view contains only facets
- // and if ZBuffer is active
- if (! BContainsFacet && BZBuffer)
- SetZBufferActivity (0);
- }
+ if (MyGraphicDriver->IsDeviceLost())
+ {
+ MyViewManager->RecomputeStructures();
+ MyViewManager->RecomputeStructures (myImmediateStructures);
+ MyGraphicDriver->ResetDeviceLostFlag();
+ }
- Aspect_CLayer2d OverCLayer;
- Aspect_CLayer2d UnderCLayer;
- OverCLayer.ptrLayer = UnderCLayer.ptrLayer = NULL;
- if (! AnOverLayer.IsNull ()) OverCLayer = AnOverLayer->CLayer ();
- if (! AnUnderLayer.IsNull ()) UnderCLayer = AnUnderLayer->CLayer ();
- MyGraphicDriver->Redraw (MyCView, UnderCLayer, OverCLayer);
+ // set up Z buffer state before redrawing
+ if (MyViewManager->ZBufferAuto())
+ {
+ const Standard_Boolean hasFacet = ContainsFacet();
+ const Standard_Boolean hasZBuffer = ZBufferIsActivated();
+ // if the view contains facets and if ZBuffer is not active
+ if (hasFacet && !hasZBuffer)
+ {
+ SetZBufferActivity (1);
+ }
+ // if the view contains only facets and if ZBuffer is active
+ if (!hasFacet && hasZBuffer)
+ {
+ SetZBufferActivity (0);
+ }
+ }
+ Aspect_CLayer2d anOverCLayer, anUnderCLayer;
+ anOverCLayer.ptrLayer = anUnderCLayer.ptrLayer = NULL;
+ if (!theOverLayer .IsNull()) anOverCLayer = theOverLayer ->CLayer();
+ if (!theUnderLayer.IsNull()) anUnderCLayer = theUnderLayer->CLayer();
+ MyGraphicDriver->Redraw (MyCView, anUnderCLayer, anOverCLayer, theX, theY, theWidth, theHeight);
}
-void Visual3d_View::Redraw (const Handle(Visual3d_Layer)& AnUnderLayer, const Handle(Visual3d_Layer)& AnOverLayer, const Standard_Integer x, const Standard_Integer y, const Standard_Integer width, const Standard_Integer height) {
-
- if (IsDeleted ()) return;
-
- if ((! IsDefined ()) || (! IsActive ())) return;
-
- if (! MyWindow->IsMapped ()) return;
+void Visual3d_View::RedrawImmediate()
+{
+ RedrawImmediate (MyViewManager->UnderLayer(), MyViewManager->OverLayer());
+}
- // san - 14/04/2004 - set up Z buffer state before redrawing
- // If activation/desactivation of ZBuffer should be automatic
- // depending on the presence or absence of facets.
- if (MyViewManager->ZBufferAuto ()) {
- Standard_Boolean BContainsFacet = ContainsFacet ();
- Standard_Boolean BZBuffer = ZBufferIsActivated ();
- // If the view contains facets
- // and if ZBuffer is not active
- if (BContainsFacet && ! BZBuffer)
- SetZBufferActivity (1);
- // If the view contains only facets
- // and if ZBuffer is active
- if (! BContainsFacet && BZBuffer)
- SetZBufferActivity (0);
- }
+void Visual3d_View::RedrawImmediate (const Handle(Visual3d_Layer)& theUnderLayer,
+ const Handle(Visual3d_Layer)& theOverLayer)
+{
+ if (IsDeleted()
+ || !IsDefined()
+ || !IsActive()
+ || !MyWindow->IsMapped())
+ {
+ return;
+ }
- Aspect_CLayer2d OverCLayer;
- Aspect_CLayer2d UnderCLayer;
- OverCLayer.ptrLayer = UnderCLayer.ptrLayer = NULL;
- if (! AnOverLayer.IsNull ()) OverCLayer = AnOverLayer->CLayer ();
- if (! AnUnderLayer.IsNull ()) UnderCLayer = AnUnderLayer->CLayer ();
- MyGraphicDriver->Redraw (MyCView, UnderCLayer, OverCLayer, x, y, width, height);
+ Aspect_CLayer2d anOverCLayer, anUnderCLayer;
+ anOverCLayer.ptrLayer = anUnderCLayer.ptrLayer = NULL;
+ if (!theOverLayer .IsNull()) anOverCLayer = theOverLayer ->CLayer();
+ if (!theUnderLayer.IsNull()) anUnderCLayer = theUnderLayer->CLayer();
+ MyGraphicDriver->RedrawImmediate (MyCView, anUnderCLayer, anOverCLayer);
+}
+void Visual3d_View::Invalidate()
+{
+ MyGraphicDriver->Invalidate (MyCView);
}
-void Visual3d_View::Update ()
+void Visual3d_View::Update()
{
IsInitialized = Standard_True;
-
Compute ();
- Update (MyViewManager->UnderLayer (), MyViewManager->OverLayer ());
+ Redraw (MyViewManager->UnderLayer(), MyViewManager->OverLayer(), 0, 0, 0, 0);
}
-void Visual3d_View::Update (const Handle(Visual3d_Layer)& AnUnderLayer, const Handle(Visual3d_Layer)& AnOverLayer) {
-
- if (IsDeleted ()) return;
-
- if ((! IsDefined ()) || (! IsActive ())) return;
-
- if (! MyWindow->IsMapped ()) return;
-
- if (MyGraphicDriver->IsDeviceLost())
- {
- MyViewManager->RecomputeStructures();
- MyGraphicDriver->ResetDeviceLostFlag();
- }
-
- // If activation/desactivation of ZBuffer should be automatic
- // depending on the presence or absence of facets.
- if (MyViewManager->ZBufferAuto ()) {
-Standard_Boolean BContainsFacet = ContainsFacet ();
-Standard_Boolean BZBuffer = ZBufferIsActivated ();
- // If the view contains facets
- // and if ZBuffer is not active
- if (BContainsFacet && ! BZBuffer)
- SetZBufferActivity (1);
- // If the view does not contain facets
- // and if ZBuffer is active
- if (! BContainsFacet && BZBuffer)
- SetZBufferActivity (0);
- }
-
-Aspect_CLayer2d OverCLayer;
-Aspect_CLayer2d UnderCLayer;
- OverCLayer.ptrLayer = UnderCLayer.ptrLayer = NULL;
- if (! AnUnderLayer.IsNull ()) UnderCLayer = AnUnderLayer->CLayer ();
- if (! AnOverLayer.IsNull ()) OverCLayer = AnOverLayer->CLayer ();
- //OSD::SetSignal (Standard_False);
- MyGraphicDriver->Update (MyCView, UnderCLayer, OverCLayer);
- //OSD::SetSignal (Standard_True);
+void Visual3d_View::Update (const Handle(Visual3d_Layer)& theUnderLayer,
+ const Handle(Visual3d_Layer)& theOverLayer)
+{
+ IsInitialized = Standard_True;
+ Compute ();
+ Redraw (theUnderLayer, theOverLayer, 0, 0, 0, 0);
}
Visual3d_TypeOfAnswer Visual3d_View::AcceptDisplay (const Handle(Graphic3d_Structure)& AStructure) const {
}
+Standard_Boolean Visual3d_View::DisplayImmediate (const Handle(Graphic3d_Structure)& theStructure,
+ const Standard_Boolean theIsSingleView)
+{
+ if (!myImmediateStructures.Add (theStructure))
+ {
+ return Standard_False;
+ }
+
+ if (theIsSingleView)
+ {
+ Handle_Visual3d_HSetOfView aViews = MyViewManager->DefinedView();
+ for (Visual3d_SetIteratorOfSetOfView aViewIter (aViews->Set()); aViewIter.More(); aViewIter.Next())
+ {
+ if (aViewIter.Value().Access() != this)
+ {
+ aViewIter.Value()->EraseImmediate (theStructure);
+ }
+ }
+ }
+
+ MyGraphicDriver->DisplayImmediateStructure (MyCView, *theStructure->CStructure());
+ return Standard_True;
+}
+
+Standard_Boolean Visual3d_View::EraseImmediate (const Handle(Graphic3d_Structure)& theStructure)
+{
+ const Standard_Boolean isErased = myImmediateStructures.Remove (theStructure);
+ if (isErased)
+ {
+ MyGraphicDriver->EraseImmediateStructure (MyCView, *theStructure->CStructure());
+ }
+
+ return isErased;
+}
+
+Standard_Boolean Visual3d_View::ClearImmediate()
+{
+ if (myImmediateStructures.IsEmpty())
+ {
+ return Standard_False;
+ }
+
+ for (Graphic3d_MapIteratorOfMapOfStructure anIter (myImmediateStructures); anIter.More(); anIter.Next())
+ {
+ MyGraphicDriver->EraseImmediateStructure (MyCView, *anIter.Key()->CStructure());
+ }
+ myImmediateStructures.Clear();
+ return Standard_True;
+}
+
void Visual3d_View::Display (const Handle(Graphic3d_Structure)& AStructure) {
Display (AStructure, MyViewManager->UpdateMode ());
-- visualiser <me>.
---Category: Methods to modify the class definition
- Redraw ( me )
- is static;
- ---Level: Public
- ---Purpose: Redraws all the displayed structures.
- ---Category: Methods to modify the class definition
+ Redraw ( me )
+ is static;
+ ---Level: Public
+ ---Purpose: Redraws all the displayed structures.
+ ---Category: Methods to modify the class definition
+
+ RedrawImmediate ( me )
+ is static;
+ ---Level: Public
+ ---Purpose: Updates layer of immediate presentations.
+
+ Invalidate ( me )
+ is static;
+ ---Level: Public
+ ---Purpose: Invalidates viewer content but does not redraw it.
Remove ( me : mutable )
is static;
---Purpose: Deletes and erases the 3D visualiser <me>.
---Category: Methods to modify the class definition
- Update ( me )
- is redefined static;
- ---Level: Public
- ---Purpose: Updates screen in function of modifications of
- -- the structures.
- -- Category: Methods to modify the class definition
- -- Warning: Not necessary if the update mode is TOU_ASAP.
+ Update ( me )
+ is redefined static;
+ ---Level: Public
+ ---Purpose: Updates screen in function of modifications of the structures.
+ -- Category: Methods to modify the class definition
----------------------------
-- Category: Inquire methods
}
-void Visual3d_ViewManager::Redraw () const {
-
-Standard_Integer MaxDx, MaxDy;
-Standard_Integer Dx, Dy;
- MaxDx = MaxDy = IntegerFirst ();
-
- //
- // Redraw all activated views
- //
- Standard_Integer j = MyDefinedView.Extent ();
- if (j == 0) return;
- Visual3d_SetIteratorOfSetOfView MyIterator(MyDefinedView);
-
- if (! MyUnderLayer.IsNull () || ! MyOverLayer.IsNull ()) {
- while (MyIterator.More ()) {
- (MyIterator.Value ())->Window ()->Size (Dx, Dy);
- if (Dx > MaxDx) MaxDx = Dx;
- if (Dy > MaxDy) MaxDy = Dy;
-
- // MyIterator.Next () is located on the next view
- MyIterator.Next ();
- }
- if (! MyUnderLayer.IsNull ())
- MyUnderLayer->SetViewport (MaxDx, MaxDy);
- if (! MyOverLayer.IsNull ())
- MyOverLayer->SetViewport (MaxDx, MaxDy);
- }
+void Visual3d_ViewManager::Redraw() const
+{
+ // redraw all activated views
+ if (MyDefinedView.Extent() == 0)
+ {
+ return;
+ }
- if (! MyUnderLayer.IsNull () || ! MyOverLayer.IsNull ())
- MyIterator.Initialize (MyDefinedView);
- while (MyIterator.More ()) {
- (MyIterator.Value ())->Redraw (MyUnderLayer, MyOverLayer);
+ if (!MyUnderLayer.IsNull() || !MyOverLayer.IsNull())
+ {
+ Standard_Integer aWidth = 0, aHeight = 0;
+ Standard_Integer aWidthMax = 0;
+ Standard_Integer aHeightMax = 0;
+ for (Visual3d_SetIteratorOfSetOfView anIter (MyDefinedView);
+ anIter.More(); anIter.Next())
+ {
+ anIter.Value()->Window()->Size (aWidth, aHeight);
+ aWidthMax = Max (aWidthMax, aWidth);
+ aHeightMax = Max (aHeightMax, aWidth);
+ }
+ if (!MyUnderLayer.IsNull())
+ {
+ MyUnderLayer->SetViewport (aWidthMax, aHeightMax);
+ }
+ if (!MyOverLayer.IsNull())
+ {
+ MyOverLayer->SetViewport (aWidthMax, aHeightMax);
+ }
+ }
- // MyIterator.Next () is located on the next view
- MyIterator.Next ();
+ for (Visual3d_SetIteratorOfSetOfView anIter (MyDefinedView);
+ anIter.More(); anIter.Next())
+ {
+ anIter.Value()->Redraw (MyUnderLayer, MyOverLayer);
}
-
}
-void Visual3d_ViewManager::Update () const {
+void Visual3d_ViewManager::Update() const
+{
+ Redraw();
+}
- //
- // Update all activated views
- //
- Standard_Integer j = MyDefinedView.Extent ();
- if (j == 0) return;
- Visual3d_SetIteratorOfSetOfView MyIterator(MyDefinedView);
+void Visual3d_ViewManager::RedrawImmediate() const
+{
+ if (MyDefinedView.Extent() == 0)
+ {
+ return;
+ }
- while (MyIterator.More ()) {
- (MyIterator.Value ())->Update (MyUnderLayer, MyOverLayer);
+ // update all activated views
+ for (Visual3d_SetIteratorOfSetOfView anIter (MyDefinedView);
+ anIter.More(); anIter.Next())
+ {
+ anIter.Value()->RedrawImmediate (MyUnderLayer, MyOverLayer);
+ }
+}
- // MyIterator.Next () is located on the next view
- MyIterator.Next ();
- }
+void Visual3d_ViewManager::Invalidate() const
+{
+ if (MyDefinedView.Extent() == 0)
+ {
+ return;
+ }
+ // update all activated views
+ for (Visual3d_SetIteratorOfSetOfView anIter (MyDefinedView);
+ anIter.More(); anIter.Next())
+ {
+ anIter.Value()->Invalidate();
+ }
}
Handle(Visual3d_HSetOfView) Visual3d_ViewManager::ActivatedView () const {