#include <ModelAPI_Result.h>
#include <ModuleBase_Definitions.h>
-#include <ModuleBase_ViewerPrs.h>
#include <GeomAPI_ICustomPrs.h>
#include <QObject>
#include <QColor>
+class ModuleBase_ViewerPrs;
class ModelAPI_Feature;
class XGUI_Workshop;
/// empty, select it, otherwise select the result.
/// \param theValues a list of presentation to be selected
/// \param theUpdateViewer the parameter whether the viewer should be update immediatelly
- void setSelected(const QList<ModuleBase_ViewerPrs>& theValues, bool theUpdateViewer = true);
+ void setSelected(const QList<std::shared_ptr<ModuleBase_ViewerPrs>>& theValues, bool theUpdateViewer = true);
/// Unselect all objects
void clearSelected();
void removeFilters();
/// Sets a flag to the displayer whether the internal viewer can be updated by
- /// the updateViewer method call. If it is not enabled, this method do nothing
+ /// the updateViewer method call. If it is not enabled, this method do nothing.
+ /// This state maintain recurse, if the update is blocked twice or three times, the
+ /// viewer will not be updated until it is unblocked necessary times(twice or three in the example).
/// \param isEnabled a boolean value
bool enableUpdateViewer(const bool isEnabled);
- /// Returns myEnableUpdateViewer flag
- bool isUpdateEnabled() const { return myEnableUpdateViewer; }
+ /// Returns true if the viewer update is not blocked
+ bool isUpdateEnabled() const;
/// Updates the viewer
void updateViewer() const;
/// Returns Trihedron object if it is displayed
Handle(AIS_InteractiveObject) getTrihedron() const;
- // Set trihedron active (used in selection) or non active
+ /// Set trihedron active (used in selection) or non active
void activateTrihedron(bool theIsActive);
+ /// Displays/erases thrihedron in current modes. It will be activated or deactivated
+ /// depending on the trihedron visible state and displayer active trihedron state
+ void displayTrihedron(bool theToDisplay) const;
+
+ /// Returns true if the trihedron should be activated in current selection modes
bool isTrihedronActive() const { return myIsTrihedronActive; }
+ /// Returns list of currently active selection modes
+ /// Selection modes will be returned according to TopAbs_ShapeEnum
+ QIntList activeSelectionModes() const;
+
+
/// Converts shape type (TopAbs_ShapeEnum) to selection mode
/// \param theShapeType a shape type from TopAbs_ShapeEnum
static int getSelectionMode(int theShapeType);
+ /// Return true if the object is visible. If the object is feature, it returns true
+ /// if all results of the feature are shown
+ /// \param theDisplayer a displayer
+ /// \param theObject an object
+ /// \return a boolean value
+ static bool isVisible(XGUI_Displayer* theDisplayer, const ObjectPtr& theObject);
+
signals:
/// Signal on object display
/// \param theObject a data object
void deactivate(ObjectPtr theObject, const bool theUpdateViewer);
/// Find a trihedron in a list of displayed presentations and deactivate it.
- void deactivateTrihedron() const;
+ /// \param theUpdateViewer an update viewer flag
+ void deactivateTrihedron(const bool theUpdateViewer) const;
/// Opens local context. Does nothing if it is already opened.
void openLocalContext();
/// \return a string representation
std::string getResult2AISObjectMapInfo() const;
+ /// Sets the shapes selected in the context. It contains logic of the similar method
+ /// in OCCT but improved for performance. The modification is to iterates by a list
+ /// of owners in the context only once.
+ /// \param theContext a viewer context. It has opened local context
+ /// \param theShapesToBeSelected a map of shapes. Owner's shape is searched in the map and the owner
+ /// is selected if it is found there. Only first owner is processed(according to OCCT logic)
+ static void AddOrRemoveSelectedShapes(Handle(AIS_InteractiveContext) theContext,
+ const NCollection_Map<TopoDS_Shape>& theShapesToBeSelected);
+
protected:
/// Reference to workshop
XGUI_Workshop* myWorkshop;
/// Selection modes installed for external objects in local context
QIntList myActiveSelectionModes;
- /// the enable update viewer flag
- bool myEnableUpdateViewer;
+ /// Number of blocking of the viewer update. The viewer is updated only if it equals zero
+ int myViewerBlockedRecursiveCount;
- // Flag: use trihedgon for selection or not
+ /// Flag: use trihedgon for selection or not
bool myIsTrihedronActive;
/// A flag that update was requested but not done