X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModelAPI%2FModelAPI_Events.h;h=a53f65f3d13909ff807fc022482aa234a081b247;hb=fc72d43b677baa05ae7fd317346fd8b723b799ed;hp=bbe18f7b6dc92152045a4e247529dad41ae1df13;hpb=6d20474c626b44f4a66089dbe799fd250c208eb5;p=modules%2Fshaper.git diff --git a/src/ModelAPI/ModelAPI_Events.h b/src/ModelAPI/ModelAPI_Events.h index bbe18f7b6..a53f65f3d 100644 --- a/src/ModelAPI/ModelAPI_Events.h +++ b/src/ModelAPI/ModelAPI_Events.h @@ -1,8 +1,21 @@ -// Copyright (C) 2014-20xx CEA/DEN, EDF R&D - -// File: ModelAPI_Events.h -// Created: 10 Apr 2014 -// Author: Mikhail PONIKAROV +// Copyright (C) 2014-2023 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// #ifndef MODELAPI_EVENTS_H_ #define MODELAPI_EVENTS_H_ @@ -22,66 +35,105 @@ class ModelAPI_Document; class ModelAPI_ResultParameter; +class GeomAPI_Pnt2d; +class GeomAPI_Shape; + +#if defined __GNUC__ || defined __clang__ +#define MAYBE_UNUSED __attribute__((unused)) +#else +#define MAYBE_UNUSED +#endif /// Event ID that feature is created (comes with ModelAPI_ObjectUpdatedMessage) -static const char * EVENT_OBJECT_CREATED = "ObjectCreated"; +MAYBE_UNUSED static const char * EVENT_OBJECT_CREATED = "ObjectCreated"; /// Event ID that data of feature is updated (comes with Model_ObjectUpdatedMessage) -static const char * EVENT_OBJECT_UPDATED = "ObjectUpdated"; +MAYBE_UNUSED static const char * EVENT_OBJECT_UPDATED = "ObjectUpdated"; /// Event ID that data of feature is deleted (comes with Model_ObjectDeletedMessage) -static const char * EVENT_OBJECT_DELETED = "ObjectDeleted"; +MAYBE_UNUSED static const char * EVENT_OBJECT_DELETED = "ObjectDeleted"; /// Event ID that name of feature is changed (comes with Model_ObjectRenamedMessage) -static const char * EVENT_OBJECT_RENAMED = "ObjectRenamed"; +MAYBE_UNUSED static const char * EVENT_OBJECT_RENAMED = "ObjectRenamed"; /// Event ID that data of feature is updated (comes with ModelAPI_ObjectUpdatedMessage) -static const char * EVENT_OBJECT_MOVED = "ObjectsMoved"; +MAYBE_UNUSED static const char * EVENT_OBJECT_MOVED = "ObjectsMoved"; /// Event ID that visualization must be redisplayed (comes with ModelAPI_ObjectUpdatedMessage) -static const char * EVENT_OBJECT_TO_REDISPLAY = "ObjectsToRedisplay"; +MAYBE_UNUSED static const char * EVENT_OBJECT_TO_REDISPLAY = "ObjectsToRedisplay"; /// Event ID that plugin is loaded (comes with ModelAPI_ObjectUpdatedMessage) -static const char * EVENT_PLUGIN_LOADED = "PluginLoaded"; +MAYBE_UNUSED static const char * EVENT_PLUGIN_LOADED = "PluginLoaded"; /// The active document becomes another one -static const char * EVENT_DOCUMENT_CHANGED = "CurrentDocumentChanged"; +MAYBE_UNUSED static const char * EVENT_DOCUMENT_CHANGED = "CurrentDocumentChanged"; +/// All documents closed +MAYBE_UNUSED static const char * EVENT_DOCUMENTS_CLOSED = "AllDocumentsClosed"; /// Event ID that order of objects in group is changed, -/// so, tree must be fully rectreated (movement of feature) -static const char * EVENT_ORDER_UPDATED = "OrderUpdated"; +/// so, tree must be fully recreated (movement of feature) +MAYBE_UNUSED static const char * EVENT_ORDER_UPDATED = "OrderUpdated"; /// Event ID that the sketch is prepared and all grouped messages for the solver may be flushed -static const char * EVENT_UPDATE_SELECTION = "UpdateSelection"; +MAYBE_UNUSED static const char * EVENT_UPDATE_SELECTION = "UpdateSelection"; /// Request for the enabled/disabled actions behavior for some specific features -static const char * EVENT_FEATURE_STATE_REQUEST = "FeatureStateRequest"; +MAYBE_UNUSED static const char * EVENT_FEATURE_STATE_REQUEST = "FeatureStateRequest"; /// Reply for the enabled/disabled actions behavior for some specific features -static const char * EVENT_FEATURE_STATE_RESPONSE = "FeatureStateResponse"; +MAYBE_UNUSED static const char * EVENT_FEATURE_STATE_RESPONSE = "FeatureStateResponse"; /// To block the viewer updates -static const char * EVENT_UPDATE_VIEWER_BLOCKED = "UpdateViewerBlocked"; +MAYBE_UNUSED static const char * EVENT_UPDATE_VIEWER_BLOCKED = "UpdateViewerBlocked"; /// To unblock the viewer updates -static const char * EVENT_UPDATE_VIEWER_UNBLOCKED = "UpdateViewerUnblocked"; +MAYBE_UNUSED static const char * EVENT_UPDATE_VIEWER_UNBLOCKED = "UpdateViewerUnblocked"; /// To inform that there is an empty presentation in the viewer -static const char * EVENT_EMPTY_AIS_PRESENTATION = "EmptyAISPresentation"; +MAYBE_UNUSED static const char * EVENT_EMPTY_AIS_PRESENTATION = "EmptyAISPresentation"; /// To inform that there is an empty operation for presentation in the viewer -static const char * EVENT_EMPTY_OPERATION_PRESENTATION = "EmptyOperationPresentation"; +MAYBE_UNUSED static const char * EVENT_EMPTY_OPERATION_PRESENTATION = "EmptyOperationPresentation"; /// To block preview -static const char * EVENT_PREVIEW_BLOCKED = "PreviewBlocked"; +MAYBE_UNUSED static const char * EVENT_PREVIEW_BLOCKED = "PreviewBlocked"; /// To preview the current feature in the viewer (to compute the result) -static const char * EVENT_PREVIEW_REQUESTED = "PreviewRequested"; +MAYBE_UNUSED static const char * EVENT_PREVIEW_REQUESTED = "PreviewRequested"; +/// To block automatic recomputation of any feature (by the GUI button press) +MAYBE_UNUSED static const char * EVENT_AUTOMATIC_RECOMPUTATION_DISABLE + = "DisableAutomaticRecomputation"; +/// To unblock block automatic recomputation (default state: the GUI button unpressed) +MAYBE_UNUSED static const char * EVENT_AUTOMATIC_RECOMPUTATION_ENABLE + = "EnableAutomaticRecomputation"; /// Event ID that solver has conflicting constraints (comes with ModelAPI_SolverFailedMessage) -static const char * EVENT_SOLVER_FAILED = "SolverFailed"; +MAYBE_UNUSED static const char * EVENT_SOLVER_FAILED = "SolverFailed"; /// Event ID that the problem in solver disappeared -static const char * EVENT_SOLVER_REPAIRED = "SolverRepaired"; +MAYBE_UNUSED static const char * EVENT_SOLVER_REPAIRED = "SolverRepaired"; /// Event Id that sketch has DoF = 0 -static const char * EVENT_SKETCH_FULLY_CONSTRAINED = "SketchFullyConstrainted"; +MAYBE_UNUSED static const char * EVENT_SKETCH_FULLY_CONSTRAINED = "SketchFullyConstrainted"; /// Event Id that sketch has DoF > 0 -static const char * EVENT_SKETCH_UNDER_CONSTRAINED = "SketchUnderConstrainted"; +MAYBE_UNUSED static const char * EVENT_SKETCH_UNDER_CONSTRAINED = "SketchUnderConstrainted"; /// Event Id that sketch has DoF < 0 -static const char * EVENT_SKETCH_OVER_CONSTRAINED = "SketchOverConstrainted"; +MAYBE_UNUSED static const char * EVENT_SKETCH_OVER_CONSTRAINED = "SketchOverConstrainted"; /// Event ID that informs that some object has changed the stability -static const char * EVENT_STABILITY_CHANGED = "StabilityChanged"; +MAYBE_UNUSED static const char * EVENT_STABILITY_CHANGED = "StabilityChanged"; /// Event ID that the sketch is prepared and all grouped messages for the solver may be flushed -static const char * EVENT_SKETCH_PREPARED = "SketchPrepared"; +MAYBE_UNUSED static const char * EVENT_SKETCH_PREPARED = "SketchPrepared"; + +/// Event ID that provides a request for list of non-fixed objects necessary for DoF = 0 +MAYBE_UNUSED static const char * EVENT_GET_DOF_OBJECTS = "GetDoFObjects"; + +/// Event ID that provides a request for list of non-fixed objects necessary for DoF = 0 +MAYBE_UNUSED static const char * EVENT_DOF_OBJECTS = "DoFObjects"; + +/// Event ID that requests updates visual attributes for presentations +MAYBE_UNUSED static const char * EVENT_VISUAL_ATTRIBUTES = "UpdateVisualAttributes"; + +/// Event ID that 1D-fillet failed (comes with ModelAPI_ShapesFailedMessage) +MAYBE_UNUSED static const char * EVENT_OPERATION_SHAPES_FAILED = "OperationShapesFailed"; + +MAYBE_UNUSED static const char * EVENT_CHECK_CONSTRAINTS = "CheckConstrains"; + +MAYBE_UNUSED static const char * EVENT_REMOVE_CONSTRAINTS = "RemoveConstrains"; + +/// Event ID that license of specified features is checked and valid +MAYBE_UNUSED static const char * EVENT_FEATURE_LICENSE_VALID = "FeaturesLicenseValid"; + +/// To send preferences information: create part on init or not +MAYBE_UNUSED static const char * EVENT_CREATE_PART_ON_START = "CreatePartOnStart"; + /// Message that feature was changed (used for Object Browser update): moved, updated and deleted class MODELAPI_EXPORT ModelAPI_ObjectUpdatedMessage : public Events_MessageGroup @@ -113,11 +165,9 @@ protected: virtual ~ModelAPI_ObjectDeletedMessage(); public: - /// Returns the document that has been updated - virtual std::shared_ptr document() const = 0; - /// Returns the groups where the objects were deleted - virtual const std::set& groups() const = 0; + virtual const std::list, std::string> >& + groups() const = 0; /// Creates the new empty message of this kind virtual std::shared_ptr newEmpty() = 0; @@ -125,7 +175,7 @@ public: /// Returns the identifier of the kind of a message virtual const Events_ID messageId() = 0; - /// Appenad to this message the given one. + /// Appends to this message the given one. virtual void Join(const std::shared_ptr& theJoined) = 0; }; @@ -150,9 +200,14 @@ public: class MODELAPI_EXPORT ModelAPI_EventCreator { public: + virtual ~ModelAPI_EventCreator() {} + /// creates created, updated or moved messages and sends to the loop virtual void sendUpdated(const ObjectPtr& theObject, const Events_ID& theEvent, const bool isGroupped = true) const = 0; + /// creates created, updated or moved messages with the objects collection and sends to the loop + virtual void sendUpdated(const std::list& theObjects, const Events_ID& theEvent, + const bool isGroupped = true) const = 0; /// creates deleted message and sends to the loop virtual void sendDeleted(const std::shared_ptr& theDoc, const std::string& theGroup) const = 0; @@ -166,7 +221,6 @@ public: static void set(const ModelAPI_EventCreator* theCreator); }; -// TODO(sbh): Move this message into a separate package, like "GuiAPI" /// Contains the state information about the feature: is it enabled or disabled. class ModelAPI_FeatureStateMessage : public Events_Message { @@ -310,12 +364,102 @@ class ModelAPI_ParameterEvalMessage : public Events_Message MODELAPI_EXPORT const std::string& error() const; }; +class ModelAPI_ImportParametersMessage : public Events_Message +{ + std::string myFilename; ///< filename where where parameters are stored + std::string myError; ///< error of processing, empty if there is no error + +public: + /// Static. Returns EventID of the message. + MODELAPI_EXPORT static Events_ID& eventId() + { + static const char* MY_PARAMETER_EVALUATION_EVENT_ID("ImportParametersMessage"); + static Events_ID anId = Events_Loop::eventByName(MY_PARAMETER_EVALUATION_EVENT_ID); + return anId; + } + + /// Useful method that creates and sends the event. + /// Returns the message, processed, with the resulting fields filled. + MODELAPI_EXPORT static std::shared_ptr + send(std::string theParameter, const void* theSender) + { + std::shared_ptr aMessage = + std::shared_ptr( + new ModelAPI_ImportParametersMessage(eventId(), theSender)); + aMessage->setFilename(theParameter); + Events_Loop::loop()->send(aMessage); + return aMessage; + } + + /// Creates an empty message + MODELAPI_EXPORT ModelAPI_ImportParametersMessage(const Events_ID theID, + const void* theSender = 0); + /// The virtual destructor + MODELAPI_EXPORT virtual ~ModelAPI_ImportParametersMessage(); + + /// Returns a filename stored in the message + MODELAPI_EXPORT std::string filename() const; + /// Sets a filename to the message + MODELAPI_EXPORT void setFilename(std::string theFilename); +}; + +class ModelAPI_BuildEvalMessage : public Events_Message +{ + FeaturePtr myParam; ///< parameters that should be evaluated + bool myIsProcessed; ///< true if results were set + std::string myError; ///< error of processing, empty if there is no error + /// result of processing, list of parameters in expression found + std::list > myParamsList; + + public: + /// Static. Returns EventID of the message. + MODELAPI_EXPORT static Events_ID& eventId() + { + static const char * MY_BUILD_EVALUATION_EVENT_ID("BuildEvaluationRequest"); + static Events_ID anId = Events_Loop::eventByName(MY_BUILD_EVALUATION_EVENT_ID); + return anId; + } + + /// Useful method that creates and sends the event. + /// Returns the message, processed, with the resulting fields filled. + MODELAPI_EXPORT static std::shared_ptr + send(FeaturePtr theParameter, const void* theSender) + { + std::shared_ptr aMessage = + std::shared_ptr( + new ModelAPI_BuildEvalMessage(eventId(), theSender)); + aMessage->setParameter(theParameter); + Events_Loop::loop()->send(aMessage); + return aMessage; + } + + /// Creates an empty message + MODELAPI_EXPORT ModelAPI_BuildEvalMessage(const Events_ID theID, const void* theSender = 0); + /// The virtual destructor + MODELAPI_EXPORT virtual ~ModelAPI_BuildEvalMessage(); + + /// Returns a parameter stored in the message + MODELAPI_EXPORT FeaturePtr parameter() const; + /// Sets a parameter to the message + MODELAPI_EXPORT void setParameter(FeaturePtr theParam); + /// Sets the results of processing + MODELAPI_EXPORT void setResults( + const std::list >& theParamsList, + const std::string& theError); + /// Returns the results of processing: list of parameters found in the expression + MODELAPI_EXPORT const std::list >& params() const; + /// Returns true if the expression is processed + MODELAPI_EXPORT bool isProcessed(); + + /// Returns the interpreter error (empty if no error) + MODELAPI_EXPORT const std::string& error() const; +}; /// Message to ask compute the positions of parameters in the expression class ModelAPI_ComputePositionsMessage : public Events_Message { - std::string myExpression; ///< the expression string - std::string myParamName; ///< name of the parameter to be searched + std::wstring myExpression; ///< the expression string + std::wstring myParamName; ///< name of the parameter to be searched std::list > myPositions; ///< computation result: start-end position indices public: @@ -330,7 +474,7 @@ public: /// Useful method that creates and sends the AttributeEvalMessage event /// Returns the message, processed, with the resulting fields filled MODELAPI_EXPORT static std::shared_ptr - send(const std::string& theExpression, const std::string& theParameter, const void* theSender) + send(const std::wstring& theExpression, const std::wstring& theParameter, const void* theSender) { std::shared_ptr aMessage = std::shared_ptr( @@ -347,11 +491,11 @@ public: MODELAPI_EXPORT virtual ~ModelAPI_ComputePositionsMessage(); /// Returns an expression stored in the message - MODELAPI_EXPORT const std::string& expression() const; + MODELAPI_EXPORT const std::wstring& expression() const; /// Returns a parameter name stored in the message - MODELAPI_EXPORT const std::string& parameter() const; + MODELAPI_EXPORT const std::wstring& parameter() const; /// Sets an expression and parameter needed for computation - MODELAPI_EXPORT void set(const std::string& theExpression, const std::string& theParameter); + MODELAPI_EXPORT void set(const std::wstring& theExpression, const std::wstring& theParameter); /// Sets the results of processing MODELAPI_EXPORT void setPositions(const std::list >& thePositions); /// Returns the results of processing: position start and end indices @@ -362,8 +506,8 @@ public: class ModelAPI_ObjectRenamedMessage : public Events_Message { ObjectPtr myObject; - std::string myOldName; - std::string myNewName; + std::wstring myOldName; + std::wstring myNewName; public: /// Static. Returns EventID of the message. @@ -376,8 +520,8 @@ class ModelAPI_ObjectRenamedMessage : public Events_Message /// Useful method that creates and sends the AttributeEvalMessage event MODELAPI_EXPORT static void send(ObjectPtr theObject, - const std::string& theOldName, - const std::string& theNewName, + const std::wstring& theOldName, + const std::wstring& theNewName, const void* theSender); /// Creates an empty message @@ -390,13 +534,13 @@ class ModelAPI_ObjectRenamedMessage : public Events_Message /// Sets an object MODELAPI_EXPORT void setObject(ObjectPtr theObject); /// Returns an old name - MODELAPI_EXPORT std::string oldName() const; + MODELAPI_EXPORT std::wstring oldName() const; /// Sets an old name - MODELAPI_EXPORT void setOldName(const std::string& theOldName); + MODELAPI_EXPORT void setOldName(const std::wstring& theOldName); /// Returns a new name - MODELAPI_EXPORT std::string newName() const; + MODELAPI_EXPORT std::wstring newName() const; /// Sets a new name - MODELAPI_EXPORT void setNewName(const std::string& theNewName); + MODELAPI_EXPORT void setNewName(const std::wstring& theNewName); }; /// Message that the parameter should be replaced with its value @@ -453,4 +597,121 @@ private: int myDOF; }; +/// Message sent when feature or attribute has been moved. +/// Stores the moving object/attribute, original and new positions of mouse. +class ModelAPI_ObjectMovedMessage : public Events_Message +{ + ObjectPtr myMovedObject; + AttributePtr myMovedAttribute; + int myMovedPointIndex; + + std::shared_ptr myOriginalPosition; + std::shared_ptr myCurrentPosition; + +public: + MODELAPI_EXPORT ModelAPI_ObjectMovedMessage(const void* theSender = 0); + + /// Set object which is being moved (if the message already contains attribute it will be cleared) + MODELAPI_EXPORT void setMovedObject(const ObjectPtr& theMovedObject); + /// Set attribute which is being moved (if the message already contains object it will be cleared) + /// \param[in] theMovedAttribute moved attribute + /// \param[in] thePointIndex index of the point if the moved attribute is an array of points + MODELAPI_EXPORT void setMovedAttribute(const AttributePtr& theMovedAttribute, + const int thePointIndex = -1); + + /// Return moved object + ObjectPtr movedObject() const + { return myMovedObject; } + /// Return moved attribute + AttributePtr movedAttribute() const + { return myMovedAttribute; } + /// Return index of the moved point + int movedPointIndex() const + { return myMovedPointIndex; } + + /// Set original mouse position + MODELAPI_EXPORT void setOriginalPosition(double theX, double theY); + /// Set original mouse position + MODELAPI_EXPORT void setOriginalPosition(const std::shared_ptr& thePoint); + /// Return original mouse position + const std::shared_ptr& originalPosition() const + { return myOriginalPosition; } + + /// Set current mouse position + MODELAPI_EXPORT void setCurrentPosition(double theX, double theY); + /// Set current mouse position + MODELAPI_EXPORT void setCurrentPosition(const std::shared_ptr& thePoint); + /// Return current mouse position + const std::shared_ptr& currentPosition() const + { return myCurrentPosition; } +}; + +/// Message that sends the failed vertices of 1D-fillet to highlight them in 3D viewer +class ModelAPI_ShapesFailedMessage : public Events_Message +{ +public: + /// Creates an message + MODELAPI_EXPORT ModelAPI_ShapesFailedMessage(const Events_ID theID, const void* theSender = 0); + /// Default destructor + MODELAPI_EXPORT virtual ~ModelAPI_ShapesFailedMessage(); + /// Static. Returns EventID of the message. + MODELAPI_EXPORT static Events_ID eventId() + { + return Events_Loop::eventByName(EVENT_OPERATION_SHAPES_FAILED); + } + + /// Sets list of failed vertices + MODELAPI_EXPORT void setShapes(const std::list< std::shared_ptr >& theVertices); + /// Returns list of failed vertices + MODELAPI_EXPORT const std::list< std::shared_ptr >& shapes() const; + +private: + std::list< std::shared_ptr > myShapes; +}; + +///Message that sends the constraints to check or remove +class ModelAPI_CheckConstraintsMessage : public Events_Message +{ +public: + /// Creates an empty message + MODELAPI_EXPORT ModelAPI_CheckConstraintsMessage( + const Events_ID theID, const void* theSender = 0); + /// The virtual destructor + MODELAPI_EXPORT virtual ~ModelAPI_CheckConstraintsMessage(); + + ///Get list of constrains + MODELAPI_EXPORT const std::set& constraints() const; + + ///Set list of constrains + MODELAPI_EXPORT void setConstraints(const std::set& theConstraints); + +private: + std::set myConstraints; +}; + + +/// Message that sends the features which license is checked and valid +class ModelAPI_FeaturesLicenseValidMessage : public Events_Message +{ +public: + /// Creates an message + MODELAPI_EXPORT + ModelAPI_FeaturesLicenseValidMessage(const Events_ID theID, const void* theSender = 0); + /// Default destructor + MODELAPI_EXPORT virtual ~ModelAPI_FeaturesLicenseValidMessage(); + /// Static. Returns EventID of the message. + MODELAPI_EXPORT static Events_ID eventId() + { + return Events_Loop::eventByName(EVENT_FEATURE_LICENSE_VALID); + } + + /// Sets list of features with valid license + MODELAPI_EXPORT void setFeatures(const std::set& theFeatures); + /// Returns list of features with valid license + MODELAPI_EXPORT const std::set& features() const; + +private: + std::set myFeatures; +}; + #endif