1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-24 13:50:49 +03:00

0026272: Visualization - provide a possibility to activate selection modes without opening local context

- picked or selected objects are now highlighted via owners instead of interactive objects;
- support methods for owners were added to AIS_InteractiveContext;
- selected owners are highlighted in immediate mode in AIS_InteractiveContext;
- selection without opening of local context is enabled by default;
- added "-local" key to vselmode command to enable selection in local context;
- selection filters are now completely supported in AIS_InteractiveContext;
- the idea of differencing of selected items onto current (in interactive context) and selected (local selection)
was eliminated;
- all calls to "current" were replaced by calls to "selected" in terms of future local context removal;
- AIS_InteractiveObject::mySelectionMode was removed;
- now each selectable object can define own selection mode for "global" selection of the whole object;
- whole object selection mode is 0 by default for all standard interactive objects.
- added support of drawing immediate structures in different layers;
- unused code for immediate mode was removed;
- vfeedback and vexport commands now produce correct output for raytrace mode;
- do not add TKD3DHost to projects list due to usage of c++11-specific structures that are not supported in vc11.
This commit is contained in:
vpa
2015-07-24 16:42:00 +03:00
parent 5f3a0c6b61
commit f6c886010d
49 changed files with 1582 additions and 1316 deletions

View File

@@ -293,7 +293,7 @@ void CViewer2dDoc::OnBUTTONTestRect()
Handle_AIS_Shape aRect2 = new AIS_Shape(W2);
myAISContext->Display(aRect2);
myAISContext->SetColor(aRect2,Quantity_NOC_YELLOW);
myAISContext->SetSelectionMode(aRect2,2);
myAISContext->Activate(aRect2,2);
FitAll2DViews(Standard_True); // Update Viewer
}

View File

@@ -34,7 +34,6 @@ AIS_InteractiveObject(PrsMgr_TOP_ProjectorDependant)
BRepPrimAPI_MakeCylinder S(R,H);
myShape = S.Shape();
SetHilightMode(0);
SetSelectionMode(0);
myDrawer->SetShadingAspect(new Prs3d_ShadingAspect());
myPlanarFaceColor = Quantity_NOC_FIREBRICK3;
myCylindricalFaceColor = Quantity_NOC_GRAY;
@@ -48,7 +47,6 @@ AIS_InteractiveObject(PrsMgr_TOP_ProjectorDependant)
BRepBuilderAPI_NurbsConvert aNurbsConvert(S.Shape());
myShape = aNurbsConvert.Shape();
SetHilightMode(0);
SetSelectionMode(0);
myDrawer->SetShadingAspect(new Prs3d_ShadingAspect());
myPlanarFaceColor = Quantity_NOC_FIREBRICK3;
myCylindricalFaceColor = Quantity_NOC_KHAKI4;

View File

@@ -50,7 +50,7 @@ class InteractiveContext from AIS inherits TShared from MMgt
-- - working on only a few objects,
-- - working on a single object.
-- 1. When you want ot work on one type of entity, you
-- should open a local context with the option
-- may open a local context with the option
-- UseDisplayedObjects set to false. DisplayedObjects
-- allows you to recover the visualized Interactive
-- Objects which have a given Type and
@@ -80,6 +80,14 @@ class InteractiveContext from AIS inherits TShared from MMgt
-- of setting up the different contexts of
-- selection/presentation according to the operation
-- which you want to perform.
--
-- Selection of parts of the objects can also be done without opening a local context.
-- Interactive context itself supports decomposed object selection with selection filters
-- support. Note that each selectable object must specify the selection mode that is
-- responsible for selection of object as a whole (global selection mode). By default, global
-- selection mode is equal to 0, but it might be redefined if needed. Sub-part selection
-- of the objects without using local context provides a possibility to activate part
-- selection modes along with global selection mode.
uses
Address from Standard,
@@ -416,17 +424,6 @@ is
-- Standard_False, the presentation of the Interactive
-- Object returns to the default selection mode; the
-- object is displayed but no viewer will be updated.
SetSelectionMode(me:mutable;
aniobj:InteractiveObject from AIS;
aMode :Integer from Standard);
---Purpose:
-- Sets the selection mode of Interactive Objects.
-- aMode provides the selection mode index of the entity aniobj.
UnsetSelectionMode(me : mutable;
aniobj : InteractiveObject from AIS);
---Purpose:
-- Removes selection mode from Interactive Objects.
-- aMode provides the selection mode index of the entity aniobj.
SetPixelTolerance(me:mutable;
aPrecision: Real from Standard = 2.0);
@@ -700,14 +697,22 @@ is
returns Boolean from Standard;
IsHilighted(me;
anIobj : InteractiveObject from AIS;
WithColor: out Boolean from Standard;
theHiCol : out NameOfColor from Quantity)
anIobj : InteractiveObject from AIS;
WithColor: out Boolean from Standard;
theHiCol : out NameOfColor from Quantity)
returns Boolean from Standard;
---Purpose: if <anIObj> is hilighted with a specific color
-- <WithColor> will be returned TRUE
-- <theHiCol> gives the name of the hilightcolor
IsHilighted (me;
theOwner : EntityOwner from SelectMgr;
theIsCustomColor : out Boolean from Standard;
theCustomColorName : out NameOfColor from Quantity)
returns Boolean from Standard;
---Purpose: if <theOwner> is hilighted with a specific color, than <theIsCustomColor> will be set
-- to true and <theCustomColorName> will have the name of the color stored
DisplayPriority(me;anIobj: InteractiveObject from AIS)
returns Integer from Standard;
---Purpose:
@@ -1130,136 +1135,159 @@ is
-- The Selected objects are objects picked
-- when a local context is opened
---Category: Obsolete methods that are valid for local context only
SetCurrentObject(me:mutable;
aniobj: InteractiveObject from AIS;
updateviewer : Boolean from Standard = Standard_True);
--- Purpose:
-- Updates the view of the current object in open context.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
-- If a local context is open and if updateviewer equals
-- Standard_False, the presentation of the Interactive
-- Object activates the selection mode; the object is
-- displayed but no viewer will be updated.
aniobj: InteractiveObject from AIS;
updateviewer : Boolean from Standard = Standard_True);
--- Purpose:
-- Updates the view of the current object in open context.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
-- If a local context is open and if updateviewer equals
-- Standard_False, the presentation of the Interactive
-- Object activates the selection mode; the object is
-- displayed but no viewer will be updated.
AddOrRemoveCurrentObject (me : mutable;
theObj : InteractiveObject from AIS;
theIsToUpdateViewer : Boolean from Standard = Standard_True);
---Purpose:
-- Allows to add or remove the object given to the list of current and highlight/unhighlight it
-- correspondingly. Is valid for global context only; for local context use method AddOrRemoveSelected.
-- Since this method makes sence only for neutral point selection of a whole object, if 0 selection
-- of the object is empty this method simply does nothing.
AddOrRemoveCurrentObject(me:mutable;
aniobj : InteractiveObject from AIS;
updateviewer : Boolean from Standard = Standard_True);
---Purpose:
-- Allows you to add a current object to the list of current
-- objects or remove it from that list.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
-- If a local context is open and if updateviewer equals
-- Standard_False, the presentation of the Interactive
-- Object activates the selection mode; the object is
-- displayed but no viewer will be updated.
UpdateCurrent (me:mutable);
---Purpose: Updates the list of current objects, i.e. hilights new
-- current objects, removes hilighting from former current objects.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
--
-- current objects, removes hilighting from former current objects.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
WasCurrentTouched(me) returns Boolean from Standard;
---Purpose:
-- Returns the current selection touched by the cursor.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
---C++: inline
---Purpose:
-- Returns the current selection touched by the cursor.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
---C++: inline
SetOkCurrent(me:mutable);
---C++: inline
IsCurrent(me;aniobj: InteractiveObject from AIS) returns Boolean from Standard;
--- Purpose:
-- Returns true if there is a non-null interactive object in Neutral Point.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
IsCurrent (me;
theObject : InteractiveObject from AIS)
returns Boolean from Standard;
--- Purpose: Returns true if there is a non-null interactive object in Neutral Point.
-- Objects selected when there is no open local context are called current objects;
-- those selected in open local context, selected objects.
InitCurrent(me:mutable);
--- Purpose:
-- Initializes a scan of the current selected objects in
-- Neutral Point.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
--- Purpose:
-- Initializes a scan of the current selected objects in
-- Neutral Point.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
MoreCurrent(me) returns Boolean from Standard;
--- Purpose:
-- Returns true if there is another object found by the
-- scan of the list of current objects.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
MoreCurrent(me) returns Boolean from Standard;
--- Purpose:
-- Returns true if there is another object found by the
-- scan of the list of current objects.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
NextCurrent(me:mutable);
---Purpose:
-- Continues the scan to the next object in the list of
-- current objects.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
NextCurrent(me:mutable);
---Purpose:
-- Continues the scan to the next object in the list of
-- current objects.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
Current(me) returns InteractiveObject from AIS;
---Purpose:
-- Returns the current interactive object.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
Current(me) returns InteractiveObject from AIS;
---Purpose:
-- Returns the current interactive object.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
NbCurrents(me:mutable) returns Integer from Standard;
FirstCurrentObject(me:mutable) returns InteractiveObject from AIS;
---Purpose:
-- Returns the first current object in the list of current objects.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
HilightCurrents(me : mutable;
updateviewer : Boolean from Standard=Standard_True);
---Purpose:
--- Highlights current objects.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
-- If a local context is open and if updateviewer equals
-- Standard_False, the presentation of the Interactive
-- Object activates the selection mode; the object is
-- displayed but no viewer will be updated.
HilightCurrents (me : mutable;
theToUpdateViewer : Boolean from Standard = Standard_True);
---Purpose:
--- Highlights current objects.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
-- If a local context is open and if updateviewer equals
-- Standard_False, the presentation of the Interactive
-- Object activates the selection mode; the object is
-- displayed but no viewer will be updated.
UnhilightCurrents(me : mutable;
updateviewer : Boolean from Standard=Standard_True);
---Purpose:
-- Removes highlighting from current objects.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
-- If a local context is open and if updateviewer equals
-- Standard_False, the presentation of the Interactive
-- Object activates the selection mode; the object is
-- displayed but no viewer will be updated.
updateviewer : Boolean from Standard=Standard_True);
---Purpose:
-- Removes highlighting from current objects.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
-- If a local context is open and if updateviewer equals
-- Standard_False, the presentation of the Interactive
-- Object activates the selection mode; the object is
-- displayed but no viewer will be updated.
ClearCurrents(me:mutable;
updateviewer : Boolean from Standard=Standard_True);
---Purpose:
-- Empties previous current objects in order to get the
-- current objects detected by the selector using
-- UpdateCurrent.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
-- If a local context is open and if updateviewer equals
-- Standard_False, the presentation of the Interactive
-- Object activates the selection mode; the object is
-- displayed but no viewer will be updated.
ClearCurrents (me : mutable;
theToUpdateViewer : Boolean from Standard = Standard_True);
---Purpose:
-- Empties previous current objects in order to get the
-- current objects detected by the selector using
-- UpdateCurrent.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
-- If a local context is open and if updateviewer equals
-- Standard_False, the presentation of the Interactive
-- Object activates the selection mode; the object is
-- displayed but no viewer will be updated.
DetectedCurrentShape(me) returns Shape from TopoDS;
---C++: return const &
---Purpose:
-- @return current mouse-detected shape or empty (null) shape, if current interactive object
-- is not a shape (AIS_Shape) or there is no current mouse-detected interactive object at all.
DetectedCurrentObject(me) returns InteractiveObject from AIS;
--Purpose:
-- @return current mouse-detected interactive object or null object if there is no current detected.
---Category: Selection mehods valid for both local and interactive context
SetSelected (me : mutable;
theOwners : EntityOwner from SelectMgr;
theToUpdateViewer : Boolean from Standard = Standard_True);
---Purpose: Unhighlights previously selected owners and marks them as not selected.
-- Marks owner given as selected and highlights it.
AddOrRemoveSelected (me : mutable;
theOwner : EntityOwner from SelectMgr;
theToUpdateViewer : Boolean from Standard = Standard_True);
---Purpose: Allows to highlight or unhighlight the owner given depending on its selection status
IsSelected (me;
theOwner : EntityOwner from SelectMgr)
returns Boolean from Standard;
---Purpose: Returns true is the owner given is selected
FirstSelectedObject(me:mutable) returns InteractiveObject from AIS;
---Purpose:
-- Returns the first current object in the list of current objects.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
SetSelected(me:mutable;aniObj: InteractiveObject from AIS;
updateviewer : Boolean from Standard=Standard_True);
@@ -1270,8 +1298,6 @@ is
-- Object activates the selection mode; the object is
-- displayed but no viewer will be updated.
SetSelectedCurrent(me:mutable);
---Purpose: puts the selected list in the current objects List.
UpdateSelected(me:mutable;
updateviewer : Boolean from Standard=Standard_True);
---Purpose: updates the list of selected objects
@@ -1281,126 +1307,120 @@ is
aniobj : InteractiveObject from AIS;
updateviewer : Boolean from Standard=Standard_True);
---Purpose:Allows you to add a selected object to the list of
-- selected objects or remove it from that list. This entity
-- can be an Interactive Object aniobj or its owner
-- aShape as can be seen in the two syntaxes above.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
-- If a local context is open and if updateviewer equals
-- Standard_False, the presentation of the Interactive
-- Object activates the selection mode; the object is
-- displayed but no viewer will be updated.
-- selected objects or remove it from that list. This entity
-- can be an Interactive Object aniobj or its owner
-- aShape as can be seen in the two syntaxes above.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
-- If a local context is open and if updateviewer equals
-- Standard_False, the presentation of the Interactive
-- Object activates the selection mode; the object is
-- displayed but no viewer will be updated.
HilightSelected(me : mutable;
updateviewer : Boolean from Standard=Standard_True);
---Purpose:
-- Highlights selected objects.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
-- If a local context is open and if updateviewer equals
-- Standard_False, the presentation of the Interactive
-- Object activates the selection mode; the object is
-- displayed but no viewer will be updated.
---Purpose:
-- Highlights selected objects.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
-- If a local context is open and if updateviewer equals
-- Standard_False, the presentation of the Interactive
-- Object activates the selection mode; the object is
-- displayed but no viewer will be updated.
UnhilightSelected(me : mutable;
updateviewer : Boolean from Standard=Standard_True);
---Purpose:
-- Removes highlighting from selected objects.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
-- If a local context is open and if updateviewer equals
-- Standard_False, the presentation of the Interactive
-- Object activates the selection mode; the object is
-- displayed but no viewer will be updated.
---Purpose:
-- Removes highlighting from selected objects.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
-- If a local context is open and if updateviewer equals
-- Standard_False, the presentation of the Interactive
-- Object activates the selection mode; the object is
-- displayed but no viewer will be updated.
ClearSelected(me:mutable;
updateviewer : Boolean from Standard=Standard_True);
---Purpose:
-- Empties previous selected objects in order to get the
-- selected objects detected by the selector using
-- UpdateSelected.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
-- If a local context is open and if updateviewer equals
-- Standard_False, the presentation of the Interactive
-- Object activates the selection mode; the object is
-- displayed but no viewer will be updated.
---Purpose:
-- Empties previous selected objects in order to get the
-- selected objects detected by the selector using
-- UpdateSelected.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
-- If a local context is open and if updateviewer equals
-- Standard_False, the presentation of the Interactive
-- Object activates the selection mode; the object is
-- displayed but no viewer will be updated.
AddOrRemoveSelected(me:mutable;aShape:Shape from TopoDS;
updateviewer : Boolean from Standard=Standard_True);
---Purpose: No right to Add a selected Shape (Internal Management
-- of shape Selection).
-- A Previous selected shape may only be removed.
AddOrRemoveSelected(me:mutable;anOwner : EntityOwner from SelectMgr;
updateviewer: Boolean from Standard=Standard_True);
---Purpose: allows to add/remove in the selected list the entities
-- represented by <anOwner> in the selection process.
---Purpose: No right to Add a selected Shape (Internal Management
-- of shape Selection).
-- A Previous selected shape may only be removed.
---Category: Selection Process
IsSelected(me;aniobj: InteractiveObject from AIS) returns Boolean from Standard;
--- Purpose:
-- Finds the selected object aniobj in local context and
-- returns its name.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
--- Purpose:
-- Finds the selected object aniobj in local context and
-- returns its name.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
InitSelected(me:mutable);
---Purpose:
-- Initializes a scan of the selected objects in local context.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
---Purpose:
-- Initializes a scan of the selected objects in local context.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
MoreSelected(me) returns Boolean from Standard;
---Purpose:
-- Returns true if there is another object found by the
-- scan of the list of selected objects.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
---Purpose:
-- Returns true if there is another object found by the
-- scan of the list of selected objects.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
NextSelected(me:mutable);
---Purpose:
-- Continues the scan to the next object in the list of
-- selected objects.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
---Purpose:
-- Continues the scan to the next object in the list of
-- selected objects.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
NbSelected(me:mutable) returns Integer from Standard;
HasSelectedShape(me) returns Boolean from Standard;
--- Purpose:
-- Returns true if the interactive context has a shape
-- selected in it which results from the decomposition of
-- another entity in local context.
-- If HasSelectedShape returns true, SelectedShape
-- returns the shape which has been shown to be
-- selected. Interactive returns the Interactive Object
-- from which the shape has been selected.
-- If HasSelectedShape returns false, Interactive
-- returns the interactive entity selected by the click of the mouse.
--- Purpose:
-- Returns true if the interactive context has a shape
-- selected in it which results from the decomposition of
-- another entity in local context.
-- If HasSelectedShape returns true, SelectedShape
-- returns the shape which has been shown to be
-- selected. Interactive returns the Interactive Object
-- from which the shape has been selected.
-- If HasSelectedShape returns false, Interactive
-- returns the interactive entity selected by the click of the mouse.
SelectedShape(me) returns Shape from TopoDS;
---Purpose:
-- Returns the selected shape in the open local context.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
---Purpose:
-- Returns the selected shape in the open local context.
-- Objects selected when there is no open local context
-- are called current objects; those selected in open
-- local context, selected objects.
SelectedOwner(me) returns EntityOwner from SelectMgr;
---Purpose:
-- Returns the owner of the selected entity resulting
-- from the decomposition of another entity in local context.
---Purpose:
-- Returns the owner of the selected entity resulting
-- from the decomposition of another entity in local context.
EntityOwners(me; theOwners : out IndexedMapOfOwner from SelectMgr;
theIObj : InteractiveObject from AIS;
@@ -1410,8 +1430,6 @@ is
--- the selection mode theMode (in all active modes
--- if the Mode == -1)
Interactive(me) returns InteractiveObject from AIS;
---Purpose: Returns the location of the selected Interactive Object.
SelectedInteractive(me) returns InteractiveObject from AIS;
HasApplicative(me) returns Boolean from Standard;
@@ -1480,14 +1498,6 @@ is
---Purpose:
-- Gets next current object during iteration through mouse-detected
-- interactive objects.
DetectedCurrentShape(me) returns Shape from TopoDS;
---C++: return const &
---Purpose:
-- @return current mouse-detected shape or empty (null) shape, if current interactive object
-- is not a shape (AIS_Shape) or there is no current mouse-detected interactive object at all.
DetectedCurrentObject(me) returns InteractiveObject from AIS;
--Purpose:
-- @return current mouse-detected interactive object or null object if there is no current detected.
---Category: SPECIFIC LOCAL CONTEXT ACTIONS.
@@ -1998,6 +2008,12 @@ is
theStatus : DisplayStatus from AIS = AIS_DS_None) is static;
---Purpose: Query objects visible or hidden in specified view due to affinity mask.
RedrawImmediate (me : mutable;
theViewer : Viewer from V3d)
is static;
---Purpose: Redraws immediate structures in all views of the viewer given taking into
-- account their visibility.
InitAttributes(me:mutable) is static private;
@@ -2014,6 +2030,30 @@ is
theToUpdateViewer : Boolean from Standard = Standard_True) is static private;
---Purpose: UNKNOWN
unhighlightOwners (me : mutable;
theObject : InteractiveObject from AIS)
is static private;
---Purpose: Helper function to unhighlight all entity owners currently highlighted with seleciton color.
highlightWithColor (me : mutable;
theOwner : EntityOwner from SelectMgr;
theColor : NameOfColor from Quantity;
theViewer : Viewer from V3d = NULL)
is static private;
---Purpose: Helper function that highlights the owner given with <theColor> without
-- performing AutoHighlight checks, e.g. is used for dynamic highlight.
-- If the parameter <theViewer> is set and <theIsImmediate> is true, highlight will be synchronized
-- automatically in all views of the viewer.
highlightSelected (me : mutable;
theOwner : EntityOwner from SelectMgr;
theSelColor : NameOfColor from Quantity)
is static private;
---Purpose: Helper function that highlights the owner given with <theColor> with check
-- for AutoHighlight, e.g. is used for selection.
-- If the parameter <theViewer> is set and <theIsImmediate> is true, selection color will be synchronized
-- automatically in all views of the viewer.
fields
myObjects : DataMapOfIOStatus from AIS;
@@ -2030,8 +2070,8 @@ fields
mySelectionName : AsciiString from TCollection;
myCurrentName : AsciiString from TCollection;
myLastPicked : InteractiveObject from AIS;
myLastinMain : InteractiveObject from AIS;
myLastPicked : EntityOwner from SelectMgr;
myLastinMain : EntityOwner from SelectMgr;
myWasLastMain : Boolean from Standard;

View File

@@ -126,6 +126,10 @@ void AIS_InteractiveContext::Delete() const
{
Handle(AIS_InteractiveObject) anObj = anObjIter.Key();
anObj->SetContext (aNullContext);
for (anObj->Init(); anObj->More(); anObj->Next())
{
anObj->CurrentSelection()->UpdateBVHStatus (SelectMgr_TBU_Renew);
}
}
MMgt_TShared::Delete();
}
@@ -1049,7 +1053,44 @@ Standard_Boolean AIS_InteractiveContext::IsHilighted(const Handle(AIS_Interactiv
return Standard_False;
}
//=======================================================================
//function : IsHilighted
//purpose : Returns true if the objects global status is set to highlighted.
// theIsCustomColor flag defines if highlight color is not equal to OCCT's
// default Quantity_NOC_WHITE color. If theIsCustomColor is true,
// custom highlight color name will be stored to theCustomColorName
//=======================================================================
Standard_Boolean AIS_InteractiveContext::IsHilighted (const Handle(SelectMgr_EntityOwner)& theOwner,
Standard_Boolean& theIsCustomColor,
Quantity_NameOfColor& theCustomColorName) const
{
if (theOwner.IsNull() || !theOwner->HasSelectable())
return Standard_False;
const Handle(AIS_InteractiveObject) anObj =
Handle(AIS_InteractiveObject)::DownCast (theOwner->Selectable());
if (!myObjects.IsBound (anObj))
return Standard_False;
const Handle(AIS_GlobalStatus)& anObjStatus = myObjects (anObj);
if (anObjStatus->IsHilighted())
{
if (anObjStatus->HilightColor() != Quantity_NOC_WHITE)
{
theIsCustomColor = Standard_True;
theCustomColorName = anObjStatus->HilightColor();
}
else
{
theIsCustomColor = Standard_False;
}
return Standard_True;
}
return Standard_False;
}
//=======================================================================
//function : IsDisplayed
@@ -1521,6 +1562,12 @@ void AIS_InteractiveContext::SetDisplayMode (const AIS_DisplayMode theMode,
if (aStatus->GraphicStatus() == AIS_DS_Displayed)
{
myMainPM->Display (anObj, theMode);
if (!myLastPicked.IsNull() && myLastPicked->Selectable() == anObj)
{
myMainPM->BeginImmediateDraw();
myMainPM->Unhighlight (anObj, myDisplayMode);
myMainPM->EndImmediateDraw (myMainVwr);
}
if (aStatus->IsSubIntensityOn())
{
myMainPM->Color (anObj, mySubIntensity, theMode);
@@ -2054,6 +2101,19 @@ void AIS_InteractiveContext::SetWidth (const Handle(AIS_InteractiveObject)& theI
theIObj->SetWidth (theWidth);
redisplayPrsRecModes (theIObj, theToUpdateViewer);
if (!myLastinMain.IsNull() && myLastinMain->Selectable() == theIObj)
{
if (myLastinMain->IsAutoHilight())
{
const Standard_Integer aHiMode =
theIObj->HasHilightMode() ? theIObj->HilightMode() : 0;
myLastinMain->HilightWithColor (myMainPM, myLastinMain->IsSelected() ? mySelectionColor : myHilightColor, aHiMode);
}
else
{
theIObj->HilightOwnerWithColor (myMainPM, myLastinMain->IsSelected() ? mySelectionColor : myHilightColor, myLastinMain);
}
}
}
//=======================================================================
@@ -2270,7 +2330,6 @@ void AIS_InteractiveContext::Status (const Handle(AIS_InteractiveObject)& theIOb
theStatus += TCollection_AsciiString (aDispModeIter.Value());
theStatus += "\n";
}
if (IsCurrent (theIObj)) theStatus +="\t| Current\n";
if (IsSelected(theIObj)) theStatus +="\t| Selected\n";
theStatus += "\t| Active Selection Modes in the MainViewer :\n";
@@ -2303,7 +2362,7 @@ void AIS_InteractiveContext::GetDefModes (const Handle(AIS_InteractiveObject)& t
? myDisplayMode
: 0);
theHiMode = theIObj->HasHilightMode() ? theIObj->HilightMode() : theDispMode;
theSelMode = theIObj->HasSelectionMode() ? theIObj->SelectionMode() : -1;
theSelMode = theIObj->GlobalSelectionMode();
}
//=======================================================================
@@ -2338,7 +2397,7 @@ void AIS_InteractiveContext::EraseGlobal (const Handle(AIS_InteractiveObject)& t
myMainPM->SetVisibility (theIObj, aDispModeIter.Value(), Standard_False);
}
if (IsCurrent (theIObj)
if (IsSelected (theIObj)
&& !aStatus->IsDModeIn (aDispMode))
{
myMainPM->SetVisibility (theIObj, aDispMode, Standard_False);
@@ -2348,6 +2407,7 @@ void AIS_InteractiveContext::EraseGlobal (const Handle(AIS_InteractiveObject)& t
{
mgrSelector->Deactivate (theIObj, aSelModeIter.Value(), myMainSel);
}
aStatus->ClearSelectionModes();
aStatus->SetGraphicStatus (AIS_DS_Erased);
if (theToUpdateviewer)
@@ -2356,6 +2416,31 @@ void AIS_InteractiveContext::EraseGlobal (const Handle(AIS_InteractiveObject)& t
}
}
//=======================================================================
//function : unhighlightOwners
//purpose :
//=======================================================================
void AIS_InteractiveContext::unhighlightOwners (const Handle(AIS_InteractiveObject)& theObject)
{
Handle(AIS_Selection) aSel = AIS_Selection::Selection (myCurrentName.ToCString());
aSel->Init();
while (aSel->More())
{
const Handle(SelectMgr_EntityOwner) anOwner =
Handle(SelectMgr_EntityOwner)::DownCast (aSel->Value());
if (anOwner->Selectable() == theObject)
{
if (anOwner->IsSelected())
{
AddOrRemoveSelected (anOwner, Standard_False);
aSel->Init();
continue;
}
}
aSel->Next();
}
}
//=======================================================================
//function : ClearGlobal
//purpose :
@@ -2373,27 +2458,11 @@ void AIS_InteractiveContext::ClearGlobal (const Handle(AIS_InteractiveObject)& t
}
Handle(AIS_GlobalStatus) aStatus = myObjects (theIObj);
unhighlightOwners (theIObj);
for (TColStd_ListIteratorOfListOfInteger aDispModeIter (aStatus->DisplayedModes()); aDispModeIter.More(); aDispModeIter.Next())
{
if (aStatus->IsHilighted())
{
if (IsCurrent (theIObj))
{
AddOrRemoveCurrentObject (theIObj, theToUpdateviewer);
}
else if (myMainPM->IsHighlighted (theIObj, aDispModeIter.Value()))
{
myMainPM->Unhighlight (theIObj, aDispModeIter.Value());
}
}
myMainPM->Erase (theIObj, aDispModeIter.Value());
myMainPM->Clear (theIObj, aDispModeIter.Value());
if (theIObj->HasHilightMode())
{
Standard_Integer im = theIObj->HilightMode();
myMainPM->Unhighlight (theIObj, im);
myMainPM->Erase (theIObj, im);
}
}
// Object removes from Detected sequence
@@ -2407,15 +2476,6 @@ void AIS_InteractiveContext::ClearGlobal (const Handle(AIS_InteractiveObject)& t
}
}
if (myLastinMain == theIObj)
{
myLastinMain.Nullify();
}
if (myLastPicked == theIObj)
{
myLastPicked.Nullify();
}
// remove IO from the selection manager to avoid memory leaks
mgrSelector->Remove (theIObj);
@@ -2426,8 +2486,13 @@ void AIS_InteractiveContext::ClearGlobal (const Handle(AIS_InteractiveObject)& t
myMainVwr->DefinedView()->View()->ChangeHiddenObjects()->Remove (theIObj);
}
if (theToUpdateviewer
&& aStatus->GraphicStatus() == AIS_DS_Displayed)
if (!myLastinMain.IsNull() && myLastinMain->Selectable() == theIObj)
myLastinMain.Nullify();
if (!myLastPicked.IsNull() && myLastPicked->Selectable() == theIObj)
myLastPicked.Nullify();
myMainPM->ClearImmediateDraw();
if (theToUpdateviewer && aStatus->GraphicStatus() == AIS_DS_Displayed)
{
myMainVwr->Update();
}
@@ -2570,25 +2635,6 @@ Standard_Boolean AIS_InteractiveContext::IsoOnPlane() const
return myDefaultDrawer->IsoOnPlane();
}
//=======================================================================
//function : SetSelectionMode
//purpose :
//=======================================================================
void AIS_InteractiveContext::SetSelectionMode (const Handle(AIS_InteractiveObject)& ,
const Standard_Integer )
{
//
}
//=======================================================================
//function : UnsetSelectionMode
//purpose :
//=======================================================================
void AIS_InteractiveContext::UnsetSelectionMode (const Handle(AIS_InteractiveObject)& )
{
//
}
//=======================================================================
//function : SetPixelTolerance
//purpose : Disables the mechanism of adaptive tolerance calculation in

File diff suppressed because it is too large Load Diff

View File

@@ -44,10 +44,12 @@ OpenLocalContext(const Standard_Boolean UseDisplayedObjects,
{
// the entities eventually detected just before the context was opened are unhighlighted...
if(!IsCurrent(myLastPicked)){
if(!IsSelected(myLastPicked)){
if(!myLastPicked.IsNull()){
Standard_Integer HiMod = myLastPicked->HasHilightMode()?myLastPicked->HilightMode():0;
myMainPM->Unhighlight(myLastPicked,HiMod);
const Handle(AIS_InteractiveObject) aLastPickedAIS =
Handle(AIS_InteractiveObject)::DownCast (myLastPicked->Selectable());
Standard_Integer HiMod = aLastPickedAIS->HasHilightMode()?aLastPickedAIS->HilightMode():0;
myMainPM->Unhighlight (aLastPickedAIS, HiMod);
}}
if(!mylastmoveview.IsNull()){
@@ -739,7 +741,7 @@ Standard_Boolean AIS_InteractiveContext::ImmediateAdd (const Handle(AIS_Interact
Standard_Boolean AIS_InteractiveContext::EndImmediateDraw (const Handle(V3d_View)& theView)
{
return HasOpenedContext()
&& myLocalContexts (myCurLocalIndex)->EndImmediateDraw (theView);
&& myLocalContexts (myCurLocalIndex)->EndImmediateDraw (theView->Viewer());
}
//=======================================================================
@@ -761,7 +763,7 @@ Standard_Boolean AIS_InteractiveContext::EndImmediateDraw()
}
Handle(V3d_View) aView = myMainVwr->ActiveView();
return myLocalContexts (myCurLocalIndex)->EndImmediateDraw (aView);
return myLocalContexts (myCurLocalIndex)->EndImmediateDraw (aView->Viewer());
}

View File

@@ -307,43 +307,6 @@ is
-- This range can, however, be extended through the
-- creation of new display modes.
HasSelectionMode(me) returns Boolean from Standard;
---Purpose: Allows you to change the selection mode of an
-- Interactive Object.
-- The default selection mode setting is 0.
-- For shapes, for example, the selection modes are as follows:
-- - mode 0 - selection of the shape itself
-- - mode 1 - selection of vertices
-- - mode 2 - selection of edges
-- - mode 3 - selection of wires
-- - mode 4 - selection of faces
-- - mode 5 - selection of shells
-- - mode 6 - selection of solids
-- - mode 7 - selection of compounds
-- For trihedra, on the other hand, the selection modes are the following four:
-- - mode 0 - selection of a trihedron
-- - mode 1 - selection of its origin
-- - mode 2 - selection of its axes
-- - mode 3 - selection of its planes
SelectionMode(me) returns Integer from Standard;
---Purpose: Returns the selection mode of the interactive object.
SetSelectionMode(me:mutable; aMode: Integer from Standard);
---Purpose: You can change the default selection mode index
-- aMode of an Interactive Object.
-- This is only of interest if you decide that mode 0
-- adopted by convention will not do.
UnsetSelectionMode(me:mutable);
---Purpose: You can change the default selection mode index of
-- an Interactive Object.
-- This is only of interest if you decide that the 0 mode
-- adopted by convention will not do.
---C++: inline
SelectionPriority(me) returns Integer from Standard;
---C++: inline
---Purpose: Returns the selection priority setting. -1 indicates that there is none.
@@ -604,7 +567,6 @@ fields
---myOwnMaterial : NameOfPhysicalMaterial from Graphic3d is protected;
mySelPriority : Integer from Standard;
myDisplayMode : Integer from Standard ;
mySelectionMode : Integer from Standard;
myHilightMode : Integer from Standard is protected;
myOwnWidth : Real from Standard is protected;
myInfiniteState : Boolean from Standard is protected;

View File

@@ -60,7 +60,6 @@ myRecomputeEveryPrs(Standard_True),
myCTXPtr(NULL),
mySelPriority(-1),
myDisplayMode (-1),
mySelectionMode(0),
mystate(0)
{
Handle (AIS_InteractiveContext) Bid;
@@ -194,18 +193,6 @@ void AIS_InteractiveObject::SetDisplayMode(const Standard_Integer aMode)
myDisplayMode = aMode;
}
//=======================================================================
//function :
//purpose :
//=======================================================================
void AIS_InteractiveObject::SetSelectionMode(const Standard_Integer aMode)
{
mySelectionMode = aMode;
}
//=======================================================================
//function :
//purpose :

View File

@@ -44,17 +44,6 @@ inline void AIS_InteractiveObject::UnsetDisplayMode()
inline Standard_Integer AIS_InteractiveObject::DisplayMode() const
{return myDisplayMode;}
inline Standard_Boolean AIS_InteractiveObject::HasSelectionMode() const
{return mySelectionMode!=-1;}
inline void AIS_InteractiveObject::UnsetSelectionMode()
{mySelectionMode =-1;}
inline Standard_Integer AIS_InteractiveObject::SelectionMode() const
{return mySelectionMode;}
inline Quantity_NameOfColor AIS_InteractiveObject::Color() const
{
return myOwnColor.Name();

View File

@@ -50,6 +50,7 @@ uses
ShapeEnum from TopAbs,
Shape from TopoDS,
View from V3d,
Viewer from V3d,
PresentationManager3d from PrsMgr,
IndexedMapOfOwner from SelectMgr,
EntityOwner from SelectMgr,
@@ -465,10 +466,10 @@ is
---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;
theView : View from V3d)
EndImmediateDraw (me : mutable;
theViewer : Viewer from V3d)
returns Boolean from Standard;
---Purpose: Allows rapid drawing of the view theView by avoiding an update of the whole background.
---Purpose: Allows rapid drawing of the each view in theViewer 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.

View File

@@ -308,10 +308,10 @@ Erase(const Handle(AIS_InteractiveObject)& anInteractive)
// Deactivate selectable entities of interactive object
if (mySM->Contains (anInteractive))
{
TColStd_ListIteratorOfListOfInteger aModeIter (STAT->SelectionModes());
for (; aModeIter.More(); aModeIter.Next())
while (!STAT->SelectionModes().IsEmpty())
{
mySM->Deactivate (anInteractive, aModeIter.Value(), myMainVS);
mySM->Deactivate (anInteractive, STAT->SelectionModes().Last(), myMainVS);
STAT->RemoveSelectionMode (STAT->SelectionModes().Last());
}
}
@@ -625,13 +625,6 @@ void AIS_LocalContext::Terminate (const Standard_Boolean theToUpdate)
AIS_Selection::Select();
AIS_Selection::Remove(mySelName.ToCString());
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->ClearSensitive (aDummyView);
@@ -1110,14 +1103,14 @@ Standard_Boolean AIS_LocalContext::ImmediateAdd (const Handle(AIS_InteractiveObj
//function : EndImmediateDraw
//purpose :
//=======================================================================
Standard_Boolean AIS_LocalContext::EndImmediateDraw (const Handle(V3d_View)& theView)
Standard_Boolean AIS_LocalContext::EndImmediateDraw (const Handle(V3d_Viewer)& theViewer)
{
if (!myMainPM->IsImmediateModeOn())
{
return Standard_False;
}
myMainPM->EndImmediateDraw (theView);
myMainPM->EndImmediateDraw (theViewer);
return Standard_True;
}

View File

@@ -474,7 +474,7 @@ void AIS_LocalContext::Hilight (const Handle(SelectMgr_EntityOwner)& theOwner,
const Standard_Integer aHilightMode = GetHiMod (Handle(AIS_InteractiveObject)::DownCast (theOwner->Selectable()));
myMainPM->BeginImmediateDraw();
theOwner->HilightWithColor (myMainPM, myCTX->HilightColor(), aHilightMode);
myMainPM->EndImmediateDraw (theView);
myMainPM->EndImmediateDraw (theView->Viewer());
}
//==================================================
@@ -1389,7 +1389,7 @@ Standard_Boolean AIS_LocalContext::UnhilightLastDetected (const Handle(V3d_View)
: 0;
myMapOfOwner (mylastindex)->Unhilight (myMainPM, aHilightMode);
myMainPM->EndImmediateDraw (theView);
myMainPM->EndImmediateDraw (theView->Viewer());
mylastindex = 0;
return Standard_True;
}

View File

@@ -37,6 +37,7 @@ uses
Projector from Prs3d,
Transformation from Geom,
Integer from Standard,
EntityOwner from SelectMgr,
Selection from SelectMgr,
Trsf from gp,
Pnt from gp,
@@ -126,6 +127,10 @@ is
---Purpose: Informs the graphic context that the interactive Object
-- may be decomposed into sub-shapes for dynamic selection.
GlobalSelOwner(me)
returns EntityOwner from SelectMgr
is redefined virtual;
---Purpose: Returns the owner of mode for selection of object as a whole.
ComputeSelection(me:mutable; aSelection : Selection from SelectMgr;
aMode : Integer from Standard)

View File

@@ -385,3 +385,12 @@ void AIS_MultipleConnectedInteractive::ComputeSelection (const Handle(SelectMgr_
}
}
}
//=======================================================================
//function : GlobalSelOwner
//purpose :
//=======================================================================
Handle(SelectMgr_EntityOwner) AIS_MultipleConnectedInteractive::GlobalSelOwner() const
{
return myAssemblyOwner;
}

View File

@@ -378,16 +378,6 @@ is
-- But it works in any case and is especially useful for view dump because the dump image is read from the back buffer.
-- @return previous mode.
DisplayImmediateStructure ( me : mutable;
theCView : CView from Graphic3d;
theStructure : Structure from Graphic3d )
is deferred;
---Purpose: Display structure in immediate mode on top of general presentation
---C++: alias "
//! Erases immediate structure
Standard_EXPORT virtual void EraseImmediateStructure (const Graphic3d_CView& theCView, const Graphic3d_CStructure& theCStructure) = 0;"
-------------------------------
-- Category: Layer mode methods
-------------------------------

View File

@@ -28,7 +28,7 @@ public:
//! Empty constructor.
Graphic3d_ViewAffinity()
{
::memset (&myMask, 0xFF, sizeof(myMask));
SetVisible (Standard_True);
}
//! Return visibility flag.
@@ -38,6 +38,12 @@ public:
return (myMask & aBit) != 0;
}
//! Setup visibility flag for all views.
void SetVisible (const Standard_Boolean theIsVisible)
{
::memset (&myMask, theIsVisible ? 0xFF : 0x00, sizeof(myMask));
}
//! Setup visibility flag.
void SetVisible (const Standard_Integer theViewId,
const bool theIsVisible)

View File

@@ -991,6 +991,8 @@ void MeshVS_Mesh::HilightSelected ( const Handle(PrsMgr_PresentationManager3d)&
IsNeedToRedisplay = Standard_True;
aSelectionPrs->SetZLayer (Graphic3d_ZLayerId_Top);
if ( IsNeedToRedisplay )
{
aSelectionPrs->SetDisplayPriority(9);
@@ -1105,6 +1107,8 @@ void MeshVS_Mesh::HilightOwnerWithColor ( const Handle(PrsMgr_PresentationManage
}
}
aHilightPrs->SetZLayer (Graphic3d_ZLayerId_Topmost);
if (PM->IsImmediateModeOn())
{
PM->AddToImmediateList (aHilightPrs);

View File

@@ -29,7 +29,7 @@ proc Visualization:toolkits { } {
if { "$::tcl_platform(platform)" == "windows" } {
if { [info exists ::env(HAVE_D3D)] && "$::env(HAVE_D3D)" == "true" } {
lappend aResult "TKD3DHost"
} elseif { [info exists ::env(VCVER)] && "$::env(VCVER)" != "vc8" && "$::env(VCVER)" != "vc9" && "$::env(VCVER)" != "vc10" } {
} elseif { [info exists ::env(VCVER)] && "$::env(VCVER)" != "vc8" && "$::env(VCVER)" != "vc9" && "$::env(VCVER)" != "vc10" && "$::env(VCVER)" != "vc11" } {
lappend aResult "TKD3DHost"
}
}

View File

@@ -30,8 +30,10 @@ OpenGl_Caps::OpenGl_Caps()
keepArrayData (Standard_False),
#if !defined(GL_ES_VERSION_2_0)
ffpEnable (Standard_True),
useSystemBuffer (Standard_False),
#else
ffpEnable (Standard_False),
useSystemBuffer (Standard_True),
#endif
buffersNoSwap (Standard_False),
contextStereo (Standard_False),
@@ -64,6 +66,7 @@ OpenGl_Caps& OpenGl_Caps::operator= (const OpenGl_Caps& theCopy)
pntSpritesDisable = theCopy.pntSpritesDisable;
keepArrayData = theCopy.keepArrayData;
ffpEnable = theCopy.ffpEnable;
useSystemBuffer = theCopy.useSystemBuffer;
buffersNoSwap = theCopy.buffersNoSwap;
contextStereo = theCopy.contextStereo;
contextDebug = theCopy.contextDebug;

View File

@@ -31,6 +31,7 @@ public: //! @name flags to disable particular functionality, should be used only
Standard_Boolean pntSpritesDisable; //!< flag permits Point Sprites usage, will significantly affect performance (OFF by default)
Standard_Boolean keepArrayData; //!< Disables freeing CPU memory after building VBOs (OFF by default)
Standard_Boolean ffpEnable; //!< Enables FFP (fixed-function pipeline), do not use built-in GLSL programs (ON by default on desktop OpenGL and OFF on OpenGL ES)
Standard_Boolean useSystemBuffer; //!< Enables usage of system backbuffer for blitting (OFF by default on desktop OpenGL and ON on OpenGL ES for testing)
public: //! @name context creation parameters

View File

@@ -415,40 +415,6 @@ Standard_Boolean OpenGl_GraphicDriver::SetImmediateModeDrawToFront (const Graphi
return Standard_False;
}
// =======================================================================
// function : DisplayImmediateStructure
// purpose :
// =======================================================================
void OpenGl_GraphicDriver::DisplayImmediateStructure (const Graphic3d_CView& theCView,
const Handle(Graphic3d_Structure)& theStructure)
{
OpenGl_CView* aCView = (OpenGl_CView* )theCView.ptrView;
if (aCView == NULL)
{
return;
}
aCView->View->DisplayImmediateStructure (theStructure);
}
// =======================================================================
// function : EraseImmediateStructure
// purpose :
// =======================================================================
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 (aCView == NULL)
{
return;
}
aCView->View->EraseImmediateStructure (aStructure);
}
// =======================================================================
// function : Print
// purpose :

View File

@@ -131,10 +131,6 @@ public: // Methods for graphical structures
Standard_EXPORT Standard_Boolean SetImmediateModeDrawToFront (const Graphic3d_CView& theCView,
const Standard_Boolean theDrawToFrontBuffer);
Standard_EXPORT void DisplayImmediateStructure (const Graphic3d_CView& theCView,
const Handle(Graphic3d_Structure)& theStructure);
Standard_EXPORT void EraseImmediateStructure (const Graphic3d_CView& theCView,
const Graphic3d_CStructure& theCStructure);
public:

View File

@@ -42,6 +42,8 @@ OpenGl_StructureShadow::OpenGl_StructureShadow (const Handle(Graphic3d_Structure
}
}
UpdateTransformation();
myInstancedStructure = const_cast<OpenGl_Structure*> (myParent->InstancedStructure());
TransformPersistence.IsSet = myParent->TransformPersistence.IsSet;
TransformPersistence.Flag = myParent->TransformPersistence.Flag;
TransformPersistence.Point = myParent->TransformPersistence.Point;

View File

@@ -135,12 +135,6 @@ class OpenGl_View : public MMgt_TShared
//! Erase structure from display list.
void EraseStructure (const Handle(Graphic3d_Structure)& theStructure);
//! Add structure to the list of immediate structures.
void DisplayImmediateStructure (const Handle(Graphic3d_Structure)& theStructure);
//! Erase structure from display list.
void EraseImmediateStructure (const OpenGl_Structure* theStructure);
//! Insert a new top-level z layer with ID <theLayerId>
void AddZLayer (const Graphic3d_ZLayerId theLayerId);
@@ -200,17 +194,10 @@ class OpenGl_View : public MMgt_TShared
//! marks primitive set for rebuild.
void InvalidateBVHData (const Standard_Integer theLayerId);
//! Returns list of immediate structures rendered on top of main presentation
const OpenGl_SequenceOfStructure& ImmediateStructures() const
{
return myImmediateList;
}
//! Returns true if there are immediate structures to display
bool HasImmediateStructures() const
{
return !myImmediateList.IsEmpty()
|| myZLayers.NbImmediateStructures() != 0;
return myZLayers.NbImmediateStructures() != 0;
}
protected:
@@ -267,8 +254,7 @@ protected:
//View_LABDepthCueing - fixed index used
OpenGl_LayerList myZLayers; //!< main list of displayed structure, sorted by layers
OpenGl_SequenceOfStructure myImmediateList; //!< list of immediate structures rendered on top of main presentation
OpenGl_LayerList myZLayers; //!< main list of displayed structure, sorted by layers
const TEL_TRANSFORM_PERSISTENCE *myTransPers;
Standard_Boolean myIsTransPers;

View File

@@ -568,7 +568,9 @@ void OpenGl_View::RenderStructs (const Handle(OpenGl_Workspace)& theWorkspace,
}
Standard_Boolean toRenderGL = theToDrawImmediate ||
theCView.RenderParams.Method != Graphic3d_RM_RAYTRACING || myRaytraceInitStatus == OpenGl_RT_FAIL;
theCView.RenderParams.Method != Graphic3d_RM_RAYTRACING ||
myRaytraceInitStatus == OpenGl_RT_FAIL ||
aCtx->IsFeedback();
if (!toRenderGL)
{
@@ -911,26 +913,6 @@ void OpenGl_View::DisplayStructure (const Handle(Graphic3d_Structure)& theStruct
myZLayers.AddStructure (aStruct, aZLayer, thePriority);
}
//=======================================================================
//function : DisplayImmediateStructure
//purpose :
//=======================================================================
void OpenGl_View::DisplayImmediateStructure (const Handle(Graphic3d_Structure)& theStructure)
{
const OpenGl_Structure* aStruct = reinterpret_cast<const OpenGl_Structure*> (theStructure->CStructure().operator->());
for (OpenGl_SequenceOfStructure::Iterator anIter (myImmediateList);
anIter.More(); anIter.Next())
{
if (anIter.Value() == aStruct)
{
return;
}
}
myImmediateList.Append (aStruct);
}
//=======================================================================
//function : EraseStructure
//purpose :
@@ -941,24 +923,6 @@ void OpenGl_View::EraseStructure (const Handle(Graphic3d_Structure)& theStructur
myZLayers.RemoveStructure (theStructure);
}
//=======================================================================
//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 :

View File

@@ -742,7 +742,7 @@ bool OpenGl_Workspace::blitBuffers (OpenGl_FrameBuffer* theReadFbo,
OpenGl_FrameBuffer* theDrawFbo,
const Standard_Boolean theToFlip)
{
if (theReadFbo == NULL)
if (theReadFbo == NULL || myGlContext->IsFeedback())
{
return false;
}
@@ -939,8 +939,7 @@ void OpenGl_Workspace::Redraw (const Graphic3d_CView& theCView,
{
myMainSceneFbos[0]->Init (myGlContext, aSizeX, aSizeY);
}
if (myToFlipOutput
&& myMainSceneFbos[0]->IsValid())
if (!myGlContext->caps->useSystemBuffer && myMainSceneFbos[0]->IsValid())
{
myImmediateSceneFbos[0]->InitLazy (myGlContext, aSizeX, aSizeY);
}
@@ -1040,8 +1039,7 @@ void OpenGl_Workspace::Redraw (const Graphic3d_CView& theCView,
{
OpenGl_FrameBuffer* aMainFbo = myMainSceneFbos[0]->IsValid() ? myMainSceneFbos[0].operator->() : NULL;
OpenGl_FrameBuffer* anImmFbo = aFrameBuffer;
if (myToFlipOutput
&& myImmediateSceneFbos[0]->IsValid())
if (!myGlContext->caps->useSystemBuffer && myImmediateSceneFbos[0]->IsValid())
{
anImmFbo = myImmediateSceneFbos[0].operator->();
}
@@ -1360,8 +1358,7 @@ void OpenGl_Workspace::RedrawImmediate (const Graphic3d_CView& theCView,
{
OpenGl_FrameBuffer* aMainFbo = myMainSceneFbos[0]->IsValid() ? myMainSceneFbos[0].operator->() : NULL;
OpenGl_FrameBuffer* anImmFbo = aFrameBuffer;
if (myToFlipOutput
&& myImmediateSceneFbos[0]->IsValid())
if (!myGlContext->caps->useSystemBuffer && myImmediateSceneFbos[0]->IsValid())
{
anImmFbo = myImmediateSceneFbos[0].operator->();
}
@@ -1477,21 +1474,6 @@ bool OpenGl_Workspace::redrawImmediate (const Graphic3d_CView& theCView,
myView->Render (myPrintContext, aWS, theDrawFbo, theProjection,
theCView, theCUnderLayer, theCOverLayer, Standard_True);
if (!myView->ImmediateStructures().IsEmpty())
{
glDisable (GL_DEPTH_TEST);
}
for (OpenGl_SequenceOfStructure::Iterator anIter (myView->ImmediateStructures());
anIter.More(); anIter.Next())
{
const OpenGl_Structure* aStructure = anIter.Value();
if (!aStructure->IsVisible())
{
continue;
}
aStructure->Render (aWS);
}
return !toCopyBackToFront;
}

View File

@@ -24,7 +24,9 @@ IMPLEMENT_STANDARD_RTTIEXT(Prs3d_PresentationShadow, Prs3d_Presentation)
//=======================================================================
Prs3d_PresentationShadow::Prs3d_PresentationShadow (const Handle(Graphic3d_StructureManager)& theViewer,
const Handle(Prs3d_Presentation)& thePrs)
: Prs3d_Presentation (theViewer, thePrs)
: Prs3d_Presentation (theViewer, thePrs),
myParentStructId (thePrs->Identification()),
myParentAffinity (thePrs->CStructure()->ViewAffinity)
{
//
}

View File

@@ -28,10 +28,20 @@ public:
Standard_EXPORT Prs3d_PresentationShadow (const Handle(Graphic3d_StructureManager)& theViewer,
const Handle(Prs3d_Presentation)& thePrs);
//! Returns the id of the parent presentation
Standard_EXPORT inline Standard_Integer ParentId() const { return myParentStructId; }
//! Returns view affinity of the parent presentation
Standard_EXPORT inline const Handle(Graphic3d_ViewAffinity)& ParentAffinity() const { return myParentAffinity; }
private:
DEFINE_STANDARD_RTTI(Prs3d_PresentationShadow)
private:
Standard_Integer myParentStructId;
Handle(Graphic3d_ViewAffinity) myParentAffinity;
};
DEFINE_STANDARD_HANDLE(Prs3d_PresentationShadow, Prs3d_Presentation)

View File

@@ -25,6 +25,7 @@ inherits TShared from MMgt
uses
StructureManager from Graphic3d,
ZLayerId from Graphic3d,
PresentableObject from PrsMgr,
ListOfPresentations from PrsMgr,
Length,NameOfColor from Quantity,
@@ -32,7 +33,7 @@ uses
Transformation from Geom,
NameOfMaterial from Graphic3d,
Presentation from PrsMgr,
View from V3d,
Viewer from V3d,
ViewManager from Visual3d,
ShadingAspect from Prs3d,
Presentation from Prs3d
@@ -148,29 +149,39 @@ is
---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);
ClearImmediateDraw (me : mutable)
is static;
---Purpose: Resets the transient list of presentations previously displayed in immediate mode.
AddToImmediateList (me : mutable;
thePrs : Presentation from Prs3d);
thePrs : Presentation from Prs3d)
is static;
---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.
EndImmediateDraw (me : mutable;
theViewer : Viewer from V3d)
is static;
---Purpose: Allows rapid drawing of the each view in theViewer by avoiding an update of the whole background.
IsImmediateModeOn (me) returns Boolean from Standard;
RedrawImmediate (me : mutable;
theViewer : Viewer from V3d)
is static;
---Purpose: Clears and redisplays immediate structures of the viewer taking into account its affinity
IsImmediateModeOn (me) returns Boolean from Standard
is static;
---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 : PresentableObject from PrsMgr;
theColor : NameOfColor from Quantity = Quantity_NOC_YELLOW;
theMode : Integer from Standard = 0;
theSelObj : PresentableObject from PrsMgr = NULL)
Color (me : mutable;
thePrsObject : PresentableObject from PrsMgr;
theColor : NameOfColor from Quantity = Quantity_NOC_YELLOW;
theMode : Integer from Standard = 0;
theSelObj : PresentableObject from PrsMgr = NULL;
theImmediateStructLayerId : ZLayerId from Graphic3d = Graphic3d_ZLayerId_Topmost)
---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.
@@ -251,12 +262,17 @@ is
---Purpose: Removes a presentation of the presentable object thePrsObject to this framework. thePrsObject has the display mode theMode.
is protected;
displayImmediate (me : mutable;
theViewer : Viewer from V3d);
---Purpose: Handles the structures from <myImmediateList> and displays it separating view-dependent structures and taking into account
-- structure visibility by setting proper affinity.
fields
myStructureManager : ViewManager from Visual3d is protected;
myImmediateModeOn : Integer from Standard is protected;
myImmediateList : ListOfPresentations from PrsMgr is protected;
myImmediateView : View from V3d is protected;
mySelectionColor : Color from Quantity is protected;
myStructureManager : ViewManager from Visual3d is protected;
myImmediateModeOn : Integer from Standard is protected;
myImmediateList : ListOfPresentations from PrsMgr is protected;
myViewDependentImmediateList : ListOfPresentations from PrsMgr is protected;
mySelectionColor : Color from Quantity is protected;
end PresentationManager from PrsMgr;

View File

@@ -317,40 +317,108 @@ void PrsMgr_PresentationManager::BeginImmediateDraw()
// =======================================================================
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());
anIter.Value()->Erase();
}
for (PrsMgr_ListOfPresentations::Iterator anIter (myViewDependentImmediateList); anIter.More(); anIter.Next())
{
anIter.Value()->Erase();
}
myImmediateList.Clear();
myImmediateView.Nullify();
myViewDependentImmediateList.Clear();
}
// =======================================================================
// function : displayImmediate
// purpose : Handles the structures from myImmediateList and its visibility
// in all views of the viewer given by setting proper affinity
// =======================================================================
void PrsMgr_PresentationManager::displayImmediate (const Handle(V3d_Viewer)& theViewer)
{
for (theViewer->InitActiveViews(); theViewer->MoreActiveViews(); theViewer->NextActiveViews())
{
const Handle(Visual3d_View)& aView = theViewer->ActiveView()->View();
for (PrsMgr_ListOfPresentations::Iterator anIter (myImmediateList); anIter.More(); anIter.Next())
{
const Handle(Prs3d_Presentation)& aPrs = anIter.Value();
if (aPrs.IsNull())
continue;
Handle(Prs3d_Presentation) aViewDepPrs;
Handle(Prs3d_PresentationShadow) aShadowPrs = Handle(Prs3d_PresentationShadow)::DownCast (aPrs);
if (!aShadowPrs.IsNull() && aView->IsComputed (aShadowPrs->ParentId(), aViewDepPrs))
{
aShadowPrs.Nullify();
aShadowPrs = new Prs3d_PresentationShadow (myStructureManager, aViewDepPrs);
aShadowPrs->SetZLayer (aViewDepPrs->CStructure()->ZLayer());
aShadowPrs->SetClipPlanes (aViewDepPrs->GetClipPlanes());
aShadowPrs->CStructure()->IsForHighlight = 1;
aShadowPrs->Highlight (Aspect_TOHM_COLOR, aPrs->HighlightColor());
myViewDependentImmediateList.Append (aShadowPrs);
}
// handles custom highlight presentations which were defined in overriden
// HilightOwnerWithColor method of a custom AIS objects and maintain its
// visibility in different views on their own
else if (aShadowPrs.IsNull())
{
aPrs->Display();
continue;
}
if (!aShadowPrs->IsDisplayed())
{
aShadowPrs->CStructure()->ViewAffinity = new Graphic3d_ViewAffinity();
aShadowPrs->CStructure()->ViewAffinity->SetVisible (Standard_False);
aShadowPrs->Display();
}
Standard_Integer aViewId = aView->Identification();
bool isParentVisible = aShadowPrs->ParentAffinity().IsNull() ?
Standard_True : aShadowPrs->ParentAffinity()->IsVisible (aViewId);
aShadowPrs->CStructure()->ViewAffinity->SetVisible (aViewId, isParentVisible);
}
}
}
// =======================================================================
// function : EndImmediateDraw
// purpose :
// =======================================================================
void PrsMgr_PresentationManager::EndImmediateDraw (const Handle(V3d_View)& theView)
void PrsMgr_PresentationManager::EndImmediateDraw (const Handle(V3d_Viewer)& theViewer)
{
if (--myImmediateModeOn > 0)
{
return;
}
displayImmediate (theViewer);
}
// =======================================================================
// function : RedrawImmediate
// purpose : Clears all immediate structures and redisplays with proper
// affinity
//=======================================================================
void PrsMgr_PresentationManager::RedrawImmediate (const Handle(V3d_Viewer)& theViewer)
{
if (myImmediateList.IsEmpty())
return;
// Clear previously displayed structures
for (PrsMgr_ListOfPresentations::Iterator anIter (myImmediateList); anIter.More(); anIter.Next())
{
theView->View()->DisplayImmediate (anIter.Value(), Standard_True);
anIter.Value()->Erase();
}
if (!myImmediateList.IsEmpty())
for (PrsMgr_ListOfPresentations::Iterator anIter (myViewDependentImmediateList); anIter.More(); anIter.Next())
{
myImmediateView = theView;
anIter.Value()->Erase();
}
myViewDependentImmediateList.Clear();
displayImmediate (theViewer);
}
// =======================================================================
@@ -519,11 +587,12 @@ void PrsMgr_PresentationManager::Transform (const Handle(PrsMgr_PresentableObjec
void PrsMgr_PresentationManager::Color (const Handle(PrsMgr_PresentableObject)& thePrsObj,
const Quantity_NameOfColor theColor,
const Standard_Integer theMode,
const Handle(PrsMgr_PresentableObject)& theSelObj)
const Handle(PrsMgr_PresentableObject)& theSelObj,
const Standard_Integer theImmediateStructLayerId)
{
for (PrsMgr_ListOfPresentableObjectsIter anIter (thePrsObj->Children()); anIter.More(); anIter.Next())
{
Color (anIter.Value(), theColor, theMode);
Color (anIter.Value(), theColor, theMode, NULL, theImmediateStructLayerId);
}
if (!thePrsObj->HasOwnPresentations())
{
@@ -539,6 +608,9 @@ void PrsMgr_PresentationManager::Color (const Handle(PrsMgr_PresentableObject)&
if (myImmediateModeOn > 0)
{
Handle(Prs3d_PresentationShadow) aShadow = new Prs3d_PresentationShadow (myStructureManager, aPrs->Presentation());
aShadow->SetZLayer (theImmediateStructLayerId);
aShadow->SetClipPlanes (aPrs->Presentation()->GetClipPlanes());
aShadow->CStructure()->IsForHighlight = 1;
aShadow->Highlight (Aspect_TOHM_COLOR, theColor);
AddToImmediateList (aShadow);
}

View File

@@ -417,13 +417,14 @@ static Standard_Integer OCC74bug_set (Draw_Interpretor& di, Standard_Integer arg
di << argv[1] << " : No interactive object" << "\n";
return 1;
}
AISObj->SetSelectionMode(SelectMode);
if (!aContext->HasOpenedContext()) {
aContext->OpenLocalContext();
}
aContext->Erase(AISObj, updateviewer);
aContext->UpdateCurrentViewer();
aContext->SetAutoActivateSelection (Standard_False);
aContext->Display(AISObj, updateviewer);
aContext->Activate (AISObj, SelectMode);
aContext->UpdateCurrentViewer();
}
return 0;
@@ -456,8 +457,10 @@ static Standard_Integer OCC74bug_get (Draw_Interpretor& di, Standard_Integer arg
di << argv[1] << " : No interactive object" << "\n";
return 1;
}
Standard_Integer SelectMode = AISObj->SelectionMode();
di << SelectMode << "\n";
TColStd_ListOfInteger anActivatedModes;
aContext->ActivatedModes (AISObj, anActivatedModes);
Standard_Integer aMode = anActivatedModes.IsEmpty() ? -1 : anActivatedModes.Last();
di << aMode << "\n";
}
return 0;

View File

@@ -229,11 +229,11 @@ static Standard_Integer OCC136 (Draw_Interpretor& di, Standard_Integer argc, con
anAISCtx->Display(aSh4);
//set selected
anAISCtx->InitCurrent();
anAISCtx->AddOrRemoveCurrentObject(aSh1);
anAISCtx->AddOrRemoveCurrentObject(aSh2);
anAISCtx->AddOrRemoveCurrentObject(aSh3);
anAISCtx->AddOrRemoveCurrentObject(aSh4);
anAISCtx->InitSelected();
anAISCtx->AddOrRemoveSelected(aSh1);
anAISCtx->AddOrRemoveSelected(aSh2);
anAISCtx->AddOrRemoveSelected(aSh3);
anAISCtx->AddOrRemoveSelected(aSh4);
//remove all this objects from context
anAISCtx->Remove (aSh1, Standard_False);
@@ -738,12 +738,13 @@ static Standard_Integer OCC166 (Draw_Interpretor& di, Standard_Integer /*argc*/,
BRepPrimAPI_MakeBox aBox(gp_Pnt(0, 0, 0), 100, 100, 100);
Handle(AIS_Shape) anAISBox = new AIS_Shape(aBox.Shape());
myAISContext->SetAutoActivateSelection (Standard_False);
myAISContext->Display(anAISBox, 1);
anAISBox->SetSelectionMode(-1);
Standard_Integer myLocContInd = myAISContext->OpenLocalContext();
myAISContext->CloseLocalContext(myLocContInd);
Standard_Integer aSelMode = ((Handle(AIS_InteractiveObject)) anAISBox)->SelectionMode();
if(aSelMode != -1)
TColStd_ListOfInteger anActivatedModes;
myAISContext->ActivatedModes (anAISBox, anActivatedModes);
if(anActivatedModes.Extent() != 1 || anActivatedModes.First() != -1 )
return 1;
return 0;
@@ -5255,7 +5256,7 @@ Standard_Integer CR23234 (Draw_Interpretor& di, Standard_Integer argc, const cha
Handle(Geom_Axis2Placement) trihedronAxis = new Geom_Axis2Placement(gp::XOY());
Handle(AIS_Trihedron) trihedron = new AIS_Trihedron(trihedronAxis);
if (aMode)
trihedron->UnsetSelectionMode(); // this line causes an exception on OpenLocalContext
aisContext->SetAutoActivateSelection (Standard_False); // if selection must not be activated
trihedron->SetSize(20);
trihedron->SetColor(Quantity_NOC_GRAY30);
trihedron->SetArrowColor(Quantity_NOC_GRAY30);

View File

@@ -398,21 +398,21 @@ static Standard_Integer OCC138 (Draw_Interpretor& di, Standard_Integer /*argc*/
aContext->Display(ais2);
aContext->Display(ais3);
aContext->AddOrRemoveCurrentObject(ais1);
aContext->AddOrRemoveCurrentObject(ais2);
aContext->AddOrRemoveCurrentObject(ais3);
aContext->AddOrRemoveSelected(ais1);
aContext->AddOrRemoveSelected(ais2);
aContext->AddOrRemoveSelected(ais3);
di << "\n No of currents = " << aContext->NbCurrents();
di << "\n No of currents = " << aContext->NbSelected();
aContext->InitCurrent();
aContext->InitSelected();
int count = 1;
while(aContext->MoreCurrent())
while(aContext->MoreSelected())
{
di << "\n count is = " << count++;
Handle(AIS_InteractiveObject) ais = aContext->Current();
aContext->AddOrRemoveCurrentObject(ais);
aContext->InitCurrent();
Handle(AIS_InteractiveObject) ais = aContext->SelectedInteractive();
aContext->AddOrRemoveSelected(ais);
aContext->InitSelected();
}
return 0;
@@ -694,51 +694,51 @@ static Standard_Integer OCC189 (Draw_Interpretor& di, Standard_Integer /*argc*/
aContext2->Display(ais2);
aContext2->Display(ais3);
aContext1->AddOrRemoveCurrentObject(ais1);
aContext1->AddOrRemoveCurrentObject(ais2);
aContext1->AddOrRemoveCurrentObject(ais3);
aContext1->AddOrRemoveSelected(ais1);
aContext1->AddOrRemoveSelected(ais2);
aContext1->AddOrRemoveSelected(ais3);
di << "\n Stage : 1";
di << "\n \t No of currents on aContext1 = " << aContext1->NbCurrents();
di << "\n \t No of currents on aContext2 = " << aContext2->NbCurrents() << "\n\n";
di << "\n \t No of currents on aContext1 = " << aContext1->NbSelected();
di << "\n \t No of currents on aContext2 = " << aContext2->NbSelected() << "\n\n";
di << "\n aContext1->IsCurrent = " << (Standard_Integer) aContext1->IsCurrent(ais1) << ", aContext2->IsCurrent = " << (Standard_Integer) aContext2->IsCurrent(ais1) << " ";
di << "\n aContext1->IsSelected = " << (Standard_Integer) aContext1->IsCurrent(ais1) << ", aContext2->IsCurrent = " << (Standard_Integer) aContext2->IsCurrent(ais1) << " ";
aContext2->AddOrRemoveCurrentObject(ais1);
aContext2->AddOrRemoveCurrentObject(ais2);
aContext2->AddOrRemoveCurrentObject(ais3);
aContext2->AddOrRemoveSelected(ais1);
aContext2->AddOrRemoveSelected(ais2);
aContext2->AddOrRemoveSelected(ais3);
di << "\n Stage : 2";
di << "\n \t No of currents on aContext1 = " << aContext1->NbCurrents();
di << "\n \t No of currents on aContext2 = " << aContext2->NbCurrents() << "\n\n";
di << "\n \t No of currents on aContext1 = " << aContext1->NbSelected();
di << "\n \t No of currents on aContext2 = " << aContext2->NbSelected() << "\n\n";
aContext1->InitCurrent();
aContext1->InitSelected();
int count1 = 1;
while(aContext1->MoreCurrent())
while(aContext1->MoreSelected())
{
di << "\n count1 is = " << count1++;
Handle(AIS_InteractiveObject) ais = aContext1->Current();
aContext1->AddOrRemoveCurrentObject(ais);
aContext1->InitCurrent();
Handle(AIS_InteractiveObject) ais = aContext1->SelectedInteractive();
aContext1->AddOrRemoveSelected(ais);
aContext1->InitSelected();
}
di << "\n Stage : 3";
di << "\n \t No of currents on aContext1 = " << aContext1->NbCurrents();
di << "\n \t No of currents on aContext2 = " << aContext2->NbCurrents() << "\n\n";
di << "\n \t No of currents on aContext1 = " << aContext1->NbSelected();
di << "\n \t No of currents on aContext2 = " << aContext2->NbSelected() << "\n\n";
aContext2->InitCurrent();
aContext2->InitSelected();
int count2 = 1;
while(aContext2->MoreCurrent())
while(aContext2->MoreSelected())
{
di << "\n count2 is = " << count2++;
Handle(AIS_InteractiveObject) ais = aContext2->Current();
aContext2->AddOrRemoveCurrentObject(ais);
aContext2->InitCurrent();
Handle(AIS_InteractiveObject) ais = aContext2->SelectedInteractive();
aContext2->AddOrRemoveSelected(ais);
aContext2->InitSelected();
}
di << "\n\n Stage : 4";
di << "\n \t No of currents on aContext1 = " << aContext1->NbCurrents();
di << "\n \t No of currents on aContext2 = " << aContext2->NbCurrents();
di << "\n \t No of currents on aContext1 = " << aContext1->NbSelected();
di << "\n \t No of currents on aContext2 = " << aContext2->NbSelected();
return 0;
}

View File

@@ -67,7 +67,7 @@ static Standard_Integer OCC172 (Draw_Interpretor& di, Standard_Integer /*argc*/
AIS_ListIteratorOfListOfInteractive It;
for (It.Initialize(aListOfIO);It.More();It.Next())
{
aContext->AddOrRemoveCurrentObject(It.Value());
aContext->AddOrRemoveSelected(It.Value());
}
return 0;
@@ -104,21 +104,21 @@ static Standard_Integer OCC204 (Draw_Interpretor& di, Standard_Integer argc, co
aContext->Display(ais2);
aContext->Display(ais3);
aContext->AddOrRemoveCurrentObject(ais1);
aContext->AddOrRemoveCurrentObject(ais2);
aContext->AddOrRemoveCurrentObject(ais3);
aContext->AddOrRemoveSelected(ais1);
aContext->AddOrRemoveSelected(ais2);
aContext->AddOrRemoveSelected(ais3);
//printf("\n No of currents = %d", aContext->NbCurrents());
aContext->InitCurrent();
aContext->InitSelected();
//int count = 1;
while(aContext->MoreCurrent())
while(aContext->MoreSelected())
{
//printf("\n count is = %d", count++);
Handle(AIS_InteractiveObject) ais = aContext->Current();
Handle(AIS_InteractiveObject) ais = aContext->SelectedInteractive();
aContext->Remove(ais, UpdateViewer);
aContext->InitCurrent();
aContext->InitSelected();
}
return 0;

View File

@@ -86,7 +86,11 @@ void SelectMgr_EntityOwner::HilightWithColor(const Handle(PrsMgr_PresentationMan
{
if( HasSelectable() ) {
if( IsAutoHilight() )
PM->Color(mySelectable,aColor,aMode);
{
const Graphic3d_ZLayerId aLayerId = mySelectable->GlobalSelOwner().Access() == this ?
Graphic3d_ZLayerId_Top : Graphic3d_ZLayerId_Topmost;
PM->Color(mySelectable,aColor,aMode, NULL, aLayerId);
}
else
mySelectable->HilightOwnerWithColor( PM, aColor, this );
}

View File

@@ -239,6 +239,22 @@ is
---C++: return const&
---Purpose: Returns common entity owner if the object is an assembly
GlobalSelectionMode (me)
returns Integer from Standard;
---C++: inline
---Purpose: Returns the mode for selection of object as a whole
GlobalSelOwner (me)
returns EntityOwner from SelectMgr
is virtual;
---Purpose: Returns the owner of mode for selection of object as a whole
setGlobalSelMode (me : mutable;
theMode : Integer from Standard)
is static protected;
---Purpose: Allows derived classes to redefine global selection mode.
---C++: inline
fields
myselections : SequenceOfSelection is protected;
@@ -250,6 +266,7 @@ fields
mySelectionPrs : Presentation from Prs3d;
myHilightPrs : Presentation from Prs3d;
myGlobalSelMode : Integer from Standard;
friends
class SelectionManager from SelectMgr

View File

@@ -50,12 +50,13 @@ static Standard_Integer Search (const SelectMgr_SequenceOfSelection& seq,
// Purpose :
//==================================================
SelectMgr_SelectableObject::SelectMgr_SelectableObject( const PrsMgr_TypeOfPresentation3d aTypeOfPresentation3d):
PrsMgr_PresentableObject (aTypeOfPresentation3d),
SelectMgr_SelectableObject::SelectMgr_SelectableObject (const PrsMgr_TypeOfPresentation3d aTypeOfPresentation3d)
: PrsMgr_PresentableObject (aTypeOfPresentation3d),
myDrawer (new Prs3d_Drawer()),
myHilightDrawer (new Prs3d_Drawer()),
myAssemblyOwner (NULL),
myAutoHilight (Standard_True)
myAutoHilight (Standard_True),
myGlobalSelMode (0)
{
InitDefaultHilightAttributes (myHilightDrawer);
myHilightDrawer->Link (myDrawer);
@@ -580,3 +581,25 @@ const Handle(SelectMgr_EntityOwner)& SelectMgr_SelectableObject::GetAssemblyOwne
{
return myAssemblyOwner;
}
//=======================================================================
//function : GlobalSelOwner
//purpose : Returns entity owner corresponding to selection of the object as a whole
//=======================================================================
Handle(SelectMgr_EntityOwner) SelectMgr_SelectableObject::GlobalSelOwner() const
{
Handle(SelectMgr_EntityOwner) anOwner;
if (!HasSelection (myGlobalSelMode))
return anOwner;
const Handle(SelectMgr_Selection)& aGlobalSel = Selection (myGlobalSelMode);
if (aGlobalSel->IsEmpty())
return anOwner;
aGlobalSel->Init();
anOwner =
Handle(SelectMgr_EntityOwner)::DownCast (aGlobalSel->Sensitive()->BaseSensitive()->OwnerId());
return anOwner;
}

View File

@@ -32,3 +32,21 @@ Attributes() const
inline const Handle(Prs3d_Drawer)& SelectMgr_SelectableObject::
HilightAttributes() const
{return myHilightDrawer;}
//=======================================================================
//function : GlobalSelectionMode
//purpose :
//=======================================================================
inline Standard_Integer SelectMgr_SelectableObject::GlobalSelectionMode() const
{
return myGlobalSelMode;
}
//=======================================================================
//function : setGlobalSelMode
//purpose :
//=======================================================================
inline void SelectMgr_SelectableObject::setGlobalSelMode (const Standard_Integer theMode)
{
myGlobalSelMode = theMode > 0 ? theMode : 0;
}

View File

@@ -128,6 +128,8 @@ void StdSelect_BRepOwner::HilightWithColor(const Handle(PrsMgr_PresentationManag
const Standard_Integer aMode)
{
Standard_Integer M = (aMode < 0) ? myCurMode : aMode;
Graphic3d_ZLayerId aHiLayer = this == Selectable()->GlobalSelOwner().Access() ?
Graphic3d_ZLayerId_Top : Graphic3d_ZLayerId_Topmost;
Handle(SelectMgr_SelectableObject) aSel = Selectable();
if (myFromDecomposition)
{
@@ -169,17 +171,17 @@ void StdSelect_BRepOwner::HilightWithColor(const Handle(PrsMgr_PresentationManag
}
// highlight with color and set layer
PM->Color (myPrsSh, aCol, M, aSel);
PM->Color (myPrsSh, aCol, M, aSel, aHiLayer);
}
else
{
if (!myPrsSh.IsNull())
{
PM->Color (myPrsSh, aCol, M, aSel);
PM->Color (myPrsSh, aCol, M, aSel, aHiLayer);
}
else
{
PM->Color (aSel, aCol, M);
PM->Color (aSel, aCol, M, NULL, aHiLayer);
}
}
}

View File

@@ -25,6 +25,8 @@
#include <TDF_DeltaOnAddition.hxx>
#include <TDF_Tool.hxx>
#include <TCollection_ExtendedString.hxx>
#include <TColStd_ListOfInteger.hxx>
#include <TColStd_ListIteratorOfListOfInteger.hxx>
#include <TPrsStd_AISViewer.hxx>
#include <AIS_InteractiveContext.hxx>
#include <AIS_InteractiveObject.hxx>
@@ -570,17 +572,12 @@ void TPrsStd_AISPresentation::SetSelectionMode(const Standard_Integer theSelecti
{
// OCC2932 correction
if(hasOwnSelectionMode && mySelectionMode == theSelectionMode && !myAIS.IsNull())
if(myAIS->SelectionMode() == theSelectionMode )
return;
Backup();
mySelectionMode = theSelectionMode;
hasOwnSelectionMode = Standard_True;
if( myAIS.IsNull() ) AISUpdate();
if( !myAIS.IsNull() ) {
if( myAIS->SelectionMode() == theSelectionMode ) return;
myAIS->SetSelectionMode(theSelectionMode);
}
}
//=======================================================================
@@ -590,15 +587,12 @@ void TPrsStd_AISPresentation::SetSelectionMode(const Standard_Integer theSelecti
void TPrsStd_AISPresentation::UnsetSelectionMode()
{
if(!hasOwnSelectionMode && !myAIS.IsNull())
if(!myAIS->HasSelectionMode())
return;
Backup();
hasOwnSelectionMode = Standard_False;
if( myAIS.IsNull() ) AISUpdate();
if( !myAIS.IsNull() && myAIS->HasSelectionMode() ) {
myAIS->UnsetSelectionMode();
}
mySelectionMode = myAIS->GlobalSelectionMode();
}
//=======================================================================
@@ -916,8 +910,24 @@ void TPrsStd_AISPresentation::AISUpdate ()
}
if (hasOwnSelectionMode) {
if (myAIS->SelectionMode() != mySelectionMode ) {
myAIS->SetSelectionMode(mySelectionMode);
const Handle(AIS_InteractiveContext) aContext =
ctx.IsNull() ? myAIS->GetContext() : ctx;
if (!aContext.IsNull())
{
TColStd_ListOfInteger anActivatedModes;
aContext->ActivatedModes (myAIS, anActivatedModes);
Standard_Boolean isActivated = Standard_False;
for (TColStd_ListIteratorOfListOfInteger aModeIter (anActivatedModes); aModeIter.More(); aModeIter.Next())
{
if (aModeIter.Value() == mySelectionMode)
{
isActivated = Standard_True;
break;
}
}
if (!isActivated)
aContext->Activate (myAIS, mySelectionMode, Standard_False);
}
}

View File

@@ -85,7 +85,7 @@ void V3d_Viewer::DeactivateGrid()
if (myGridEcho
&& !myGridEchoStructure.IsNull())
{
ActiveView()->View()->EraseImmediate (myGridEchoStructure);
myGridEchoStructure->Erase();
}
}
Update();
@@ -241,10 +241,7 @@ void V3d_Viewer::SetGridEcho (const Standard_Boolean theToShowGrid)
return;
}
for (InitActiveViews(); MoreActiveViews(); NextActiveViews())
{
ActiveView()->View()->EraseImmediate (myGridEchoStructure);
}
myGridEchoStructure->Erase();
}
// =======================================================================
@@ -308,7 +305,12 @@ void V3d_Viewer::ShowGridEcho (const Handle(V3d_View)& theView,
anArrayOfPoints->AddVertex (theVertex.X(), theVertex.Y(), theVertex.Z());
myGridEchoGroup->AddPrimitiveArray (anArrayOfPoints);
theView->View()->DisplayImmediate (myGridEchoStructure, Standard_True);
myGridEchoStructure->SetZLayer (Graphic3d_ZLayerId_Topmost);
myGridEchoStructure->SetInfiniteState (Standard_True);
myGridEchoStructure->CStructure()->ViewAffinity = new Graphic3d_ViewAffinity();
myGridEchoStructure->CStructure()->ViewAffinity->SetVisible (Standard_False);
myGridEchoStructure->CStructure()->ViewAffinity->SetVisible (theView->View()->Identification(), true);
myGridEchoStructure->Display();
}
// =======================================================================
@@ -323,5 +325,7 @@ void V3d_Viewer::HideGridEcho (const Handle(V3d_View)& theView)
}
myGridEchoLastVert.SetCoord (ShortRealLast(), ShortRealLast(), ShortRealLast());
theView->View()->EraseImmediate (myGridEchoStructure);
const Handle(Graphic3d_ViewAffinity)& anAffinity = myGridEchoStructure->CStructure()->ViewAffinity;
if (!anAffinity.IsNull() && anAffinity->IsVisible (theView->View()->Identification()))
myGridEchoStructure->Erase();
}

View File

@@ -516,14 +516,14 @@ void ViewerTest::StandardModeActivation(const Standard_Integer mode )
if(!aContext->HasOpenedContext()) {
// To unhilight the preselected object
aContext->UnhilightCurrents(Standard_False);
aContext->UnhilightSelected(Standard_False);
// Open a local Context in order to be able to select subshape from
// the selected shape if any or for all if there is no selection
if (!aContext->FirstCurrentObject().IsNull()){
if (!aContext->FirstSelectedObject().IsNull()){
aContext->OpenLocalContext(Standard_False);
for(aContext->InitCurrent();aContext->MoreCurrent();aContext->NextCurrent()){
aContext->Load( aContext->Current(),-1,Standard_True);
for(aContext->InitSelected();aContext->MoreSelected();aContext->NextSelected()){
aContext->Load( aContext->SelectedInteractive(),-1,Standard_True);
}
}
else
@@ -992,18 +992,13 @@ static int VDispMode (Draw_Interpretor& , Standard_Integer argc, const char** ar
//unset displaymode.. comportement particulier...
if(TypeOfOperation==4){
if(argc==1){
if(Ctx->NbCurrents()==0 ||
Ctx->NbSelected()==0){
if(Ctx->NbSelected()==0){
Handle(AIS_InteractiveObject) IO;
VwrTst_DispErase(IO,-1,4,Standard_False);
}
else if(!Ctx->HasOpenedContext()){
for(Ctx->InitCurrent();Ctx->MoreCurrent();Ctx->NextCurrent())
VwrTst_DispErase(Ctx->Current(),-1,4,Standard_False);
}
else{
for(Ctx->InitSelected();Ctx->MoreSelected();Ctx->NextSelected())
VwrTst_DispErase(Ctx->Interactive(),-1,4,Standard_False);}
VwrTst_DispErase(Ctx->SelectedInteractive(),-1,4,Standard_False);}
Ctx->UpdateCurrentViewer();
}
else{
@@ -1018,20 +1013,20 @@ static int VDispMode (Draw_Interpretor& , Standard_Integer argc, const char** ar
}
else if(argc==2){
Standard_Integer Dmode = Draw::Atoi(argv[1]);
if(Ctx->NbCurrents()==0 && TypeOfOperation==3){
if(Ctx->NbSelected()==0 && TypeOfOperation==3){
Handle(AIS_InteractiveObject) IO;
VwrTst_DispErase(IO,Dmode,TypeOfOperation,Standard_True);
}
if(!Ctx->HasOpenedContext()){
// set/unset display mode sur le Contexte...
for(Ctx->InitCurrent();Ctx->MoreCurrent();Ctx->NextCurrent()){
VwrTst_DispErase(Ctx->Current(),Dmode,TypeOfOperation,Standard_False);
for(Ctx->InitSelected();Ctx->MoreSelected();Ctx->NextSelected()){
VwrTst_DispErase(Ctx->SelectedInteractive(),Dmode,TypeOfOperation,Standard_False);
}
Ctx->UpdateCurrentViewer();
}
else{
for(Ctx->InitSelected();Ctx->MoreSelected();Ctx->NextSelected())
Ctx->Display(Ctx->Interactive(),Dmode);
Ctx->Display(Ctx->SelectedInteractive(),Dmode);
}
}
else{
@@ -1056,30 +1051,22 @@ static int VSubInt(Draw_Interpretor& di, Standard_Integer argc, const char** arg
Standard_Integer On = Draw::Atoi(argv[1]);
const Handle(AIS_InteractiveContext)& Ctx = ViewerTest::GetAISContext();
if(argc==2){
if(argc==2)
{
TCollection_AsciiString isOnOff = On == 1 ? "on" : "off";
di << "Sub intensite is turned " << isOnOff << " for " << Ctx->NbSelected() << "objects\n";
for (Ctx->InitSelected(); Ctx->MoreSelected(); Ctx->NextSelected())
{
if(On==1)
{
Ctx->SubIntensityOn (Ctx->SelectedInteractive(), Standard_False);
}
else
{
Ctx->SubIntensityOff (Ctx->SelectedInteractive(), Standard_False);
}
}
if(!Ctx->HasOpenedContext()){
di<<"sub intensite ";
if(On==1) di<<"On";
else di<<"Off";
di<<" pour "<<Ctx->NbCurrents()<<" objets"<<"\n";
for(Ctx->InitCurrent();Ctx->MoreCurrent();Ctx->NextCurrent()){
if(On==1){
Ctx->SubIntensityOn(Ctx->Current(),Standard_False);}
else{
di <<"passage dans off"<<"\n";
Ctx->SubIntensityOff(Ctx->Current(),Standard_False);
}
}
}
else{
for(Ctx->InitSelected();Ctx->MoreSelected();Ctx->NextSelected()){
if(On==1){
Ctx->SubIntensityOn(Ctx->Interactive(),Standard_False);}
else{
Ctx->SubIntensityOff(Ctx->Interactive(),Standard_False);}
}
}
Ctx->UpdateCurrentViewer();
}
else {
@@ -1134,11 +1121,11 @@ public:
mySource = IterSource_List;
mySeqIter = NCollection_Sequence<TCollection_AsciiString>::Iterator (mySeq);
}
else if (aCtx->NbCurrents() > 0)
else if (aCtx->NbSelected() > 0)
{
mySource = IterSource_Selected;
mySelIter = aCtx;
mySelIter->InitCurrent();
mySelIter->InitSelected();
}
else
{
@@ -1170,7 +1157,7 @@ public:
{
case IterSource_All: return myMapIter.More();
case IterSource_List: return mySeqIter.More();
case IterSource_Selected: return mySelIter->MoreCurrent();
case IterSource_Selected: return mySelIter->MoreSelected();
}
return Standard_False;
}
@@ -1195,7 +1182,7 @@ public:
}
case IterSource_Selected:
{
mySelIter->NextCurrent();
mySelIter->NextSelected();
break;
}
}
@@ -1235,10 +1222,10 @@ private:
}
case IterSource_Selected:
{
if (mySelIter->MoreCurrent())
if (mySelIter->MoreSelected())
{
myCurrentName = GetMapOfAIS().Find1 (mySelIter->Current());
myCurrent = mySelIter->Current();
myCurrentName = GetMapOfAIS().Find1 (mySelIter->SelectedInteractive());
myCurrent = mySelIter->SelectedInteractive();
}
break;
}
@@ -2237,14 +2224,14 @@ static int VDonly2 (Draw_Interpretor& ,
if (anArgIter >= theArgNb)
{
// display only selected objects
if (aCtx->NbCurrents() < 1)
if (aCtx->NbSelected() < 1)
{
return 0;
}
for (aCtx->InitCurrent(); aCtx->MoreCurrent(); aCtx->NextCurrent())
for (aCtx->InitSelected(); aCtx->MoreSelected(); aCtx->NextSelected())
{
aDispSet.Add (aCtx->Current());
aDispSet.Add (aCtx->SelectedInteractive());
}
}
else
@@ -2579,7 +2566,7 @@ int VErase (Draw_Interpretor& theDI,
}
}
}
else if (!toEraseAll && aCtx->NbCurrents() > 0)
else if (!toEraseAll && aCtx->NbSelected() > 0)
{
// Erase selected objects
for (ViewerTest_DoubleMapIteratorOfDoubleMapOfInteractiveAndName anIter (GetMapOfAIS());
@@ -2587,7 +2574,7 @@ int VErase (Draw_Interpretor& theDI,
{
const Handle(AIS_InteractiveObject) anIO = Handle(AIS_InteractiveObject)::DownCast (anIter.Key1());
if (!anIO.IsNull()
&& aCtx->IsCurrent (anIO))
&& aCtx->IsSelected (anIO))
{
theDI << anIter.Key2().ToCString() << " ";
if (toEraseInView)
@@ -2861,12 +2848,12 @@ int VBounding (Draw_Interpretor& theDI,
bndPresentation (theDI, aPrs, aName, anAction);
}
}
else if (aCtx->NbCurrents() > 0)
else if (aCtx->NbSelected() > 0)
{
// remove all currently selected objects
for (aCtx->InitCurrent(); aCtx->MoreCurrent(); aCtx->NextCurrent())
for (aCtx->InitSelected(); aCtx->MoreSelected(); aCtx->NextSelected())
{
Handle(AIS_InteractiveObject) anIO = aCtx->Current();
Handle(AIS_InteractiveObject) anIO = aCtx->SelectedInteractive();
Handle(PrsMgr_Presentation) aPrs = findPresentation (aCtx, anIO, aMode);
if (!aPrs.IsNull())
{
@@ -3498,7 +3485,7 @@ static int VDisplay2 (Draw_Interpretor& theDI,
&& aCtx->GetAutoActivateSelection()
&& aShape->GetTransformPersistenceMode() == 0))
{
aSelMode = aShape->HasSelectionMode() ? aShape->SelectionMode() : -1;
aSelMode = aShape->GlobalSelectionMode();
}
aCtx->Display (aShape, aDispMode, aSelMode,
@@ -3555,7 +3542,7 @@ static int VDisplay2 (Draw_Interpretor& theDI,
&& aCtx->GetAutoActivateSelection()
&& aShape->GetTransformPersistenceMode() == 0))
{
aSelMode = aShape->HasSelectionMode() ? aShape->SelectionMode() : -1;
aSelMode = aShape->GlobalSelectionMode();
}
if (aShape->Type() == AIS_KOI_Datum)
@@ -3963,11 +3950,11 @@ static int VActivatedMode (Draw_Interpretor& di, Standard_Integer argc, const ch
// on load tous les objets displayees et on Activate les objets de la liste
AIS_ListOfInteractive ListOfIO;
// on sauve dans une AISListOfInteractive tous les objets currents
if (TheAISContext()->NbCurrents()>0 ){
TheAISContext()->UnhilightCurrents(Standard_False);
if (TheAISContext()->NbSelected()>0 ){
TheAISContext()->UnhilightSelected(Standard_False);
for (TheAISContext()->InitCurrent(); TheAISContext()->MoreCurrent(); TheAISContext()->NextCurrent() ){
ListOfIO.Append(TheAISContext()->Current() );
for (TheAISContext()->InitSelected(); TheAISContext()->MoreSelected(); TheAISContext()->NextSelected() ){
ListOfIO.Append(TheAISContext()->SelectedInteractive() );
}
}
@@ -4015,7 +4002,7 @@ static int VActivatedMode (Draw_Interpretor& di, Standard_Integer argc, const ch
TheAISContext()->UnhilightSelected(Standard_False);
// il y a des objets selected,on les parcourt
for (TheAISContext()->InitSelected(); TheAISContext()->MoreSelected(); TheAISContext()->NextSelected() ){
Handle(AIS_InteractiveObject) aIO=TheAISContext()->Interactive();
Handle(AIS_InteractiveObject) aIO=TheAISContext()->SelectedInteractive();
if (HaveMode(aIO,aMode) ) {
@@ -4346,12 +4333,12 @@ static Standard_Integer VState (Draw_Interpretor& theDI,
return 0;
}
if (aCtx->NbCurrents() > 0
if (aCtx->NbSelected() > 0
&& !toShowAll)
{
for (aCtx->InitCurrent(); aCtx->MoreCurrent(); aCtx->NextCurrent())
for (aCtx->InitSelected(); aCtx->MoreSelected(); aCtx->NextSelected())
{
Handle(AIS_InteractiveObject) anObj = aCtx->Current();
Handle(AIS_InteractiveObject) anObj = aCtx->SelectedInteractive();
TCollection_AsciiString aName = GetMapOfAIS().Find1 (anObj);
aName.LeftJustify (20, ' ');
theDI << aName << " ";
@@ -5012,7 +4999,7 @@ static Standard_Integer VLoadSelection (Draw_Interpretor& /*theDi*/,
}
aCtx->Load (aShape, -1, Standard_False);
aCtx->Activate (aShape, aShape->SelectionMode(), Standard_True);
aCtx->Activate (aShape, aShape->GlobalSelectionMode(), Standard_True);
}
}

View File

@@ -318,7 +318,7 @@ static int VSize (Draw_Interpretor& di, Standard_Integer argc, const char** argv
TheAISContext()->CloseLocalContext();
// On set le booleen ThereIsCurrent
if (TheAISContext() -> NbCurrents() > 0) {ThereIsCurrent=Standard_True;}
if (TheAISContext() -> NbSelected() > 0) {ThereIsCurrent=Standard_True;}
else {ThereIsCurrent=Standard_False;}
@@ -337,7 +337,7 @@ static int VSize (Draw_Interpretor& di, Standard_Integer argc, const char** argv
Handle(AIS_InteractiveObject) aShape=
Handle(AIS_InteractiveObject)::DownCast(it.Key1());
if (!aShape.IsNull() && TheAISContext()->IsCurrent(aShape) )
if (!aShape.IsNull() && TheAISContext()->IsSelected(aShape) )
{
// On verifie que l'AIS InteraciveObject selectionne est bien
@@ -493,7 +493,7 @@ static int VPlaneTrihedron (Draw_Interpretor& di, Standard_Integer argc, const c
Handle(AIS_InteractiveObject) theIOB;
for(TheAISContext()->InitSelected() ;TheAISContext()->MoreSelected() ;TheAISContext()->NextSelected() ) {
theIOB = TheAISContext()->Interactive();
theIOB = TheAISContext()->SelectedInteractive();
}
// on le downcast
Handle(AIS_Plane) PlaneB =((*(Handle(AIS_Plane)*)&theIOB));
@@ -4212,16 +4212,21 @@ static Standard_Integer VSetSelectionMode (Draw_Interpretor& /*di*/,
}
// Check the arguments
if (theArgc != 3 && theArgc != 4)
if (theArgc < 3 && theArgc > 5)
{
std::cerr << "vselmode error : expects at least 2 arguments.\n"
<< "Type help "<< theArgv[0] <<" for more information." << std::endl;
return 1;
}
TCollection_AsciiString aLastArg (theArgv[theArgc - 1]);
aLastArg.LowerCase();
Standard_Boolean isToOpenLocalCtx = aLastArg == "-local";
// get objects to change selection mode
AIS_ListOfInteractive aTargetIOs;
if (theArgc == 3)
Standard_Integer anArgNb = isToOpenLocalCtx ? theArgc - 1 : theArgc;
if (anArgNb == 3)
{
anAISContext->DisplayedObjects (aTargetIOs);
}
@@ -4241,8 +4246,8 @@ static Standard_Integer VSetSelectionMode (Draw_Interpretor& /*di*/,
}
}
const Standard_Integer aSelectionMode = Draw::Atoi (theArgc == 3 ? theArgv[1] : theArgv[2]);
const Standard_Boolean toTurnOn = Draw::Atoi (theArgc == 3 ? theArgv[2] : theArgv[3]);
const Standard_Integer aSelectionMode = Draw::Atoi (anArgNb == 3 ? theArgv[1] : theArgv[2]);
const Standard_Boolean toTurnOn = Draw::Atoi (anArgNb == 3 ? theArgv[2] : theArgv[3]);
if (aSelectionMode == 0 && anAISContext->HasOpenedContext())
{
anAISContext->CloseLocalContext();
@@ -4255,6 +4260,12 @@ static Standard_Integer VSetSelectionMode (Draw_Interpretor& /*di*/,
for (AIS_ListIteratorOfListOfInteractive aTargetIt (aTargetIOs); aTargetIt.More(); aTargetIt.Next())
{
const Handle(AIS_InteractiveObject)& anIO = aTargetIt.Value();
TColStd_ListOfInteger anActiveModes;
anAISContext->ActivatedModes (anIO, anActiveModes);
if (!anActiveModes.IsEmpty())
{
anAISContext->Deactivate (anIO);
}
if (!InList (anAISContext, anIO, aSelectionMode))
{
anAISContext->Activate (anIO);
@@ -4276,7 +4287,7 @@ static Standard_Integer VSetSelectionMode (Draw_Interpretor& /*di*/,
if (aSelectionMode != 0 && toTurnOn) // Turn on specified mode
{
if (!anAISContext->HasOpenedContext())
if (!anAISContext->HasOpenedContext() && isToOpenLocalCtx)
{
anAISContext->OpenLocalContext (Standard_False);
}
@@ -4284,6 +4295,10 @@ static Standard_Integer VSetSelectionMode (Draw_Interpretor& /*di*/,
for (AIS_ListIteratorOfListOfInteractive aTargetIt (aTargetIOs); aTargetIt.More(); aTargetIt.Next())
{
const Handle(AIS_InteractiveObject)& anIO = aTargetIt.Value();
if (InList (anAISContext, anIO, 0))
{
anAISContext->Deactivate (anIO, 0);
}
if (!InList (anAISContext, anIO, aSelectionMode))
{
anAISContext->Load (anIO, -1, Standard_True);
@@ -4294,11 +4309,6 @@ static Standard_Integer VSetSelectionMode (Draw_Interpretor& /*di*/,
if (aSelectionMode != 0 && !toTurnOn) // Turn off specified mode
{
if (!anAISContext->HasOpenedContext())
{
return 0;
}
for (AIS_ListIteratorOfListOfInteractive aTargetIt (aTargetIOs); aTargetIt.More(); aTargetIt.Next())
{
const Handle(AIS_InteractiveObject)& anIO = aTargetIt.Value();

View File

@@ -683,6 +683,7 @@ TCollection_AsciiString ViewerTest::ViewerInit (const Standard_Integer thePxLeft
// NIS setup
Handle(NIS_View) aView = new NIS_View (a3DViewer, VT_GetWindow());
ViewerTest::GetAISContext()->RedrawImmediate (a3DViewer);
ViewerTest::CurrentView(aView);
ViewerTest_myViews.Bind (aViewNames.GetViewName(), aView);
@@ -1372,7 +1373,7 @@ void VT_ProcessKeyPress (const char* buf_ret)
aContext->DefaultDrawer()->SetTypeOfHLR(Prs3d_TOH_PolyAlgo);
else
aContext->DefaultDrawer()->SetTypeOfHLR(Prs3d_TOH_Algo);
if (aContext->NbCurrents()==0 || aContext->NbSelected() == 0)
if (aContext->NbSelected()==0)
{
AIS_ListOfInteractive aListOfShapes;
aContext->DisplayedObjects(aListOfShapes);
@@ -1391,9 +1392,9 @@ void VT_ProcessKeyPress (const char* buf_ret)
}
else
{
for (aContext->InitCurrent();aContext->MoreCurrent();aContext->NextCurrent())
for (aContext->InitSelected();aContext->MoreSelected();aContext->NextSelected())
{
Handle(AIS_Shape) aShape = Handle(AIS_Shape)::DownCast(aContext->Current());
Handle(AIS_Shape) aShape = Handle(AIS_Shape)::DownCast(aContext->SelectedInteractive());
if (aShape.IsNull())
continue;
if(aShape->TypeOfHLR() == Prs3d_TOH_PolyAlgo)
@@ -1412,18 +1413,11 @@ void VT_ProcessKeyPress (const char* buf_ret)
std::cout << "setup Shaded display mode" << std::endl;
Handle(AIS_InteractiveContext) Ctx = ViewerTest::GetAISContext();
if(Ctx->NbCurrents()==0 ||
Ctx->NbSelected()==0)
if(Ctx->NbSelected()==0)
Ctx->SetDisplayMode(AIS_Shaded);
else{
if(Ctx->HasOpenedContext()){
for(Ctx->InitSelected();Ctx->MoreSelected();Ctx->NextSelected())
Ctx->SetDisplayMode(Ctx->Interactive(),1,Standard_False);
}
else{
for(Ctx->InitCurrent();Ctx->MoreCurrent();Ctx->NextCurrent())
Ctx->SetDisplayMode(Ctx->Current(),1,Standard_False);
}
for(Ctx->InitSelected();Ctx->MoreSelected();Ctx->NextSelected())
Ctx->SetDisplayMode(Ctx->SelectedInteractive(),1,Standard_False);
Ctx->UpdateCurrentViewer();
}
}
@@ -1433,18 +1427,11 @@ void VT_ProcessKeyPress (const char* buf_ret)
std::cout << "reset display mode to defaults" << std::endl;
Handle(AIS_InteractiveContext) Ctx = ViewerTest::GetAISContext();
if(Ctx->NbCurrents()==0 ||
Ctx->NbSelected()==0)
if(Ctx->NbSelected()==0)
Ctx->SetDisplayMode(AIS_WireFrame);
else{
if(Ctx->HasOpenedContext()){
for(Ctx->InitSelected();Ctx->MoreSelected();Ctx->NextSelected())
Ctx->UnsetDisplayMode(Ctx->Interactive(),Standard_False);
}
else{
for(Ctx->InitCurrent();Ctx->MoreCurrent();Ctx->NextCurrent())
Ctx->UnsetDisplayMode(Ctx->Current(),Standard_False);
}
for(Ctx->InitSelected();Ctx->MoreSelected();Ctx->NextSelected())
Ctx->UnsetDisplayMode(Ctx->SelectedInteractive(),Standard_False);
Ctx->UpdateCurrentViewer();
}
@@ -1473,18 +1460,11 @@ void VT_ProcessKeyPress (const char* buf_ret)
{
std::cout << "setup WireFrame display mode" << std::endl;
Handle(AIS_InteractiveContext) Ctx = ViewerTest::GetAISContext();
if(Ctx->NbCurrents()==0 ||
Ctx->NbSelected()==0)
if(Ctx->NbSelected()==0)
Ctx->SetDisplayMode(AIS_WireFrame);
else{
if(Ctx->HasOpenedContext()){
for(Ctx->InitSelected();Ctx->MoreSelected();Ctx->NextSelected())
Ctx->SetDisplayMode(Ctx->Interactive(),0,Standard_False);
}
else{
for(Ctx->InitCurrent();Ctx->MoreCurrent();Ctx->NextCurrent())
Ctx->SetDisplayMode(Ctx->Current(),0,Standard_False);
}
for(Ctx->InitSelected();Ctx->MoreSelected();Ctx->NextSelected())
Ctx->SetDisplayMode(Ctx->SelectedInteractive(),0,Standard_False);
Ctx->UpdateCurrentViewer();
}
}
@@ -1518,7 +1498,6 @@ void VT_ProcessKeyPress (const char* buf_ret)
{
Handle(AIS_InteractiveContext) aCtx = ViewerTest::GetAISContext();
if (!aCtx.IsNull()
&& aCtx->NbCurrents() > 0
&& aCtx->NbSelected() > 0)
{
Draw_Interprete ("verase");
@@ -3260,11 +3239,11 @@ static int VExport(Draw_Interpretor& di, Standard_Integer argc, const char** arg
{
if (aFileName.Value (aLen - 2) == '.')
{
aFormatStr = aFileName.SubString (aLen - 1, aLen);
aFormatStr = aFileName.ToCString() + aLen - 2;
}
else if (aFileName.Value (aLen - 3) == '.')
{
aFormatStr = aFileName.SubString (aLen - 2, aLen);
aFormatStr = aFileName.ToCString() + aLen - 3;
}
else
{
@@ -6075,14 +6054,7 @@ static Standard_Integer VChangeSelected (Draw_Interpretor& di,
return 1;
}
if(aContext->HasOpenedContext())
{
aContext->AddOrRemoveSelected(anAISObject);
}
else
{
aContext->AddOrRemoveCurrentObject(anAISObject);
}
aContext->AddOrRemoveSelected(anAISObject);
}
return 0;
}

View File

@@ -680,6 +680,14 @@ is
---Level: Advanced
---Purpose: Returns the view manager handle which manage this view
IsComputed (me;
theStructId : Integer from Standard;
theComputedStruct : out Structure from Graphic3d)
returns Boolean from Standard
is static;
---Purpose: Returns Standard_True in case if the structure with the given <theStructId> is
-- in list of structures to be computed and stores computed struct to <theComputedStruct>.
----------------------------
-- Category: Private methods
----------------------------
@@ -782,30 +790,6 @@ is
---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;
@@ -1125,7 +1109,6 @@ fields
-- the displayed structures in the view
myStructsDisplayed : MapOfStructure from Graphic3d;
myImmediateStructures : MapOfStructure from Graphic3d;
myGTrihedron : GraduatedTrihedron from Graphic3d;

View File

@@ -973,7 +973,6 @@ void Visual3d_View::Redraw (const Handle(Visual3d_Layer)& theUnderLayer,
if (myGraphicDriver->IsDeviceLost())
{
myViewManager->RecomputeStructures();
myViewManager->RecomputeStructures (myImmediateStructures);
myGraphicDriver->ResetDeviceLostFlag();
}
@@ -1256,69 +1255,6 @@ void Visual3d_View::Disconnect (const Handle(Graphic3d_Structure)& theMother,
}
}
// ========================================================================
// function : DisplayImmediate
// purpose :
// ========================================================================
Standard_Boolean Visual3d_View::DisplayImmediate (const Handle(Graphic3d_Structure)& theStructure,
const Standard_Boolean theIsSingleView)
{
if (!myImmediateStructures.Add (theStructure))
{
return Standard_False;
}
if (theIsSingleView)
{
const Visual3d_SequenceOfView& aViews = myViewManager->DefinedViews();
for (Standard_Integer aViewIter = 1; aViewIter <= aViews.Length(); ++aViewIter)
{
const Handle(Visual3d_View)& aView = aViews.Value (aViewIter);
if (aView.Access() != this)
{
aView->EraseImmediate (theStructure);
}
}
}
myGraphicDriver->DisplayImmediateStructure (MyCView, theStructure);
return Standard_True;
}
// ========================================================================
// function : EraseImmediate
// purpose :
// ========================================================================
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;
}
// ========================================================================
// function : ClearImmediate
// purpose :
// ========================================================================
Standard_Boolean Visual3d_View::ClearImmediate()
{
if (myImmediateStructures.IsEmpty())
{
return Standard_False;
}
for (Graphic3d_MapOfStructure::Iterator aStructIter (myImmediateStructures); aStructIter.More(); aStructIter.Next())
{
myGraphicDriver->EraseImmediateStructure (MyCView, *aStructIter.Key()->CStructure());
}
myImmediateStructures.Clear();
return Standard_True;
}
// ========================================================================
// function : Display
// purpose :
@@ -1534,7 +1470,6 @@ void Visual3d_View::Erase (const Handle(Graphic3d_Structure)& theStruct,
const Aspect_TypeOfUpdate theUpdateMode)
{
if ( IsDeleted()
|| EraseImmediate (theStruct)
|| !IsDisplayed (theStruct))
{
return;
@@ -1574,11 +1509,34 @@ void Visual3d_View::Highlight (const Handle(Graphic3d_Structure)& theStruct,
const Standard_Integer anIndex = IsComputed (theStruct);
if (anIndex != 0)
{
const Handle(Graphic3d_Structure)& aCompStruct = myStructsComputed.ChangeValue (anIndex);
const Handle(Graphic3d_Structure)& aCompStruct = myStructsComputed.Value (anIndex);
aCompStruct->Highlight (theMethod, theStruct->HighlightColor(), Standard_False);
}
}
// ========================================================================
// function : IsComputed
// purpose :
// ========================================================================
Standard_Boolean Visual3d_View::IsComputed (const Standard_Integer theStructId,
Handle(Graphic3d_Structure)& theComputedStruct) const
{
theComputedStruct.Nullify();
if (!ComputedMode())
return Standard_False;
const Standard_Integer aNbStructs = myStructsToCompute.Length();
for (Standard_Integer aStructIter = 1; aStructIter <= aNbStructs; ++aStructIter)
{
if (myStructsToCompute.Value (aStructIter)->Identification() == theStructId)
{
theComputedStruct = myStructsComputed (aStructIter);
return Standard_True;
}
}
return Standard_False;
}
// ========================================================================
// function : SetTransform
// purpose :
@@ -1745,8 +1703,6 @@ inline void addStructureBndBox (const Handle(Graphic3d_Structure)& theStruct,
Bnd_Box Visual3d_View::MinMaxValues (const Standard_Boolean theToIgnoreInfiniteFlag) const
{
Bnd_Box aResult = MinMaxValues (myStructsDisplayed, theToIgnoreInfiniteFlag);
Bnd_Box anImmediate = MinMaxValues (myImmediateStructures, theToIgnoreInfiniteFlag);
aResult.Add (anImmediate);
return aResult;
}

View File

@@ -1,5 +1,3 @@
puts "TODO OCC11111 ALL: Error : Colors are not equal in default coordinate and in the near coordinates too"
puts "================"
puts "OCC1629"
puts "OCC2707"
@@ -37,7 +35,7 @@ set Selection_G 0.8
set Selection_B 0.8
#QASetChoiceMode EDGE ON
vselmode 2 1
vselmode 2 1 -local
set BeforeNbSelected [vnbselected]
@@ -84,11 +82,11 @@ puts ""
set CloseNbSelected [vnbselected]
checkcolor ${x1} ${y1} ${Selection_R} ${Selection_G} ${Selection_B}
checkcolor ${x2} ${y2} ${Selection_R} ${Selection_G} ${Selection_B}
checkcolor ${x3} ${y3} ${Selection_R} ${Selection_G} ${Selection_B}
checkcolor ${x4} ${y4} ${Selection_R} ${Selection_G} ${Selection_B}
checkcolor ${x5} ${y5} ${Selection_R} ${Selection_G} ${Selection_B}
checkcolor ${x1} ${y1} 1 1 0
checkcolor ${x2} ${y2} 1 1 0
checkcolor ${x3} ${y3} 1 1 0
checkcolor ${x4} ${y4} 1 1 0
checkcolor ${x5} ${y5} 1 1 0
if {${CloseNbSelected} == 0} {
puts "OCC1629: OK (case 13: after close local context)"

View File

@@ -18,8 +18,8 @@ vertex p2 150 300 0
edge e1 p1 p2
vdisplay e1
vselmode e1 2 1
vselmode e1 1 1
vselmode e1 2 1 -local
vselmode e1 1 1 -local
vselect 0 0 2500 2500
verase -local

View File

@@ -15,7 +15,7 @@ vdisplay b
vfit
# opening a local context for local selection
vselmode b 4 1
vselmode b 4 1 -local
# Select a face just to simulate the scenario used in a real application
vselect 200 200
# This line should not lead to exception