X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPartSet%2FPartSet_WidgetPoint2d.h;h=19846bfe7762cb83c3819fb1b8a3e5e8b4960945;hb=50a8df0c6a66da8067b16155e5ae39f8f26a7ebc;hp=77e286ab2b72f403862e9427028b9009c2fae801;hpb=fd939d829fdb29b26152254e733adad38320d1d8;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_WidgetPoint2d.h b/src/PartSet/PartSet_WidgetPoint2d.h old mode 100755 new mode 100644 index 77e286ab2..19846bfe7 --- a/src/PartSet/PartSet_WidgetPoint2d.h +++ b/src/PartSet/PartSet_WidgetPoint2d.h @@ -1,13 +1,28 @@ -// Copyright (C) 2014-20xx CEA/DEN, EDF R&D - -// File: PartSet_WidgetPoint2d.h -// Created: 25 Apr 2014 -// Author: Natalia ERMOLAEVA +// Copyright (C) 2014-2020 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 PartSet_WidgetPoint2D_H #define PartSet_WidgetPoint2D_H #include "PartSet.h" +#include "PartSet_MouseProcessor.h" + #include #include @@ -17,9 +32,13 @@ #include class ModelAPI_Feature; +class ModelAPI_AttributeRefAttr; +class GeomDataAPI_Point2D; class ModuleBase_IWorkshop; class ModuleBase_ParamSpinBox; class ModuleBase_IViewWindow; +class ModuleBase_LabelValue; +class PartSet_ExternalObjectsMgr; class GeomAPI_Pnt2d; class ModuleBase_IWorkshop; @@ -34,7 +53,8 @@ class QMouseEvent; * * \endcode */ -class PARTSET_EXPORT PartSet_WidgetPoint2D : public ModuleBase_ModelWidget +class PARTSET_EXPORT PartSet_WidgetPoint2D : public ModuleBase_ModelWidget, + public PartSet_MouseProcessor { Q_OBJECT public: @@ -42,18 +62,39 @@ Q_OBJECT /// \param theParent the parent object /// \param theWorkshop a current workshop /// \param theData the widget configuation. The attribute of the model widget is obtained from - /// \param theParentId is Id of a parent of the current attribute PartSet_WidgetPoint2D(QWidget* theParent, ModuleBase_IWorkshop* theWorkshop, - const Config_WidgetAPI* theData, - const std::string& theParentId); + const Config_WidgetAPI* theData); /// Destructor virtual ~PartSet_WidgetPoint2D(); + /// Fills given container with selection modes if the widget has it + /// \param [out] theModuleSelectionModes module additional modes, -1 means all default modes + /// \param theModes [out] a container of modes + virtual void selectionModes(int& theModuleSelectionModes, QIntList& theModes); + + /// Checks if the selection presentation is valid in widget + /// \param theValue a selected presentation in the view + /// \return a boolean value + virtual bool isValidSelectionCustom(const std::shared_ptr& theValue); + + /// Checks all attribute validators returns valid. It tries on the given selection + /// to current attribute by setting the value inside and calling validators. After this, + /// the previous attribute value is restored.The valid/invalid value is cashed. + /// \param theValue a selected presentation in the view + /// \param theAttribute the attribute + /// \return a boolean value + bool isValidSelectionForAttribute_(const std::shared_ptr& theValue, + const std::shared_ptr& theAttribute); + + /// Fills the attribute with the value of the selected owner + /// \param thePrs a selected owner + bool setSelectionCustom(const std::shared_ptr& theValue); + /// Set the given wrapped value to the current widget /// This value should be processed in the widget according to the needs /// \param theValues the wrapped widget values /// \param theToValidate a validation flag - virtual bool setSelection(QList& theValues, + virtual bool setSelection(QList>& theValues, const bool theToValidate); /// Select the internal content if it can be selected. It is empty in the default realization @@ -65,10 +106,6 @@ Q_OBJECT //bool initFromPrevious(ObjectPtr theObject); - /// Defines if the widget can be activated by mouse move. - /// By default it returns false - virtual bool canBeActivatedByMove(); - /// The methiod called when widget is deactivated virtual void deactivate(); @@ -97,28 +134,53 @@ Q_OBJECT /// and creating a coincidence constraint to them. This control use them. virtual bool useSelectedShapes() const; -signals: - /// Signal about selection of an existing vertex from an object - void vertexSelected(); - -public slots: - /// Process mouse move event - /// \param theWnd a view window + /// Processing the mouse move event in the viewer + /// \param theWindow a view window /// \param theEvent a mouse event - void onMouseMove(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent); + virtual void mouseMoved(ModuleBase_IViewWindow* theWindow, QMouseEvent* theEvent); - /// Process mouse release event - /// \param theWnd a view window + /// Processing the mouse release event in the viewer + /// \param theWindow a view window /// \param theEvent a mouse event - void onMouseRelease(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent); + virtual void mouseReleased(ModuleBase_IViewWindow* theWindow, QMouseEvent* theEvent); + + /// Fill preselection used in mouseReleased + //virtual void setPreSelection(const std::shared_ptr& thePreSelected); + virtual void setPreSelection(const std::shared_ptr& thePreSelected, + ModuleBase_IViewWindow* theWnd, + QMouseEvent* theEvent); + + /// Return an object and geom shape by the viewer presentation + /// \param thePrs a selection + /// \param theObject an output object + /// \param theShape a shape of the selection + void getGeomSelection_(const std::shared_ptr& theValue, + std::shared_ptr& theObject, + std::shared_ptr& theShape); + + /// Return reference to external objects manager + /// \return manager instance + PartSet_ExternalObjectsMgr* getExternalObjectMgr() const { return myExternalObjectMgr; } + +signals: + /// Signal about selection of an existing vertex from an object + void vertexSelected(); protected: /// Saves the internal parameters to the given feature /// \return True in success - virtual bool storeValueCustom() const; + virtual bool storeValueCustom(); + /// Restore value from attribute data to the widget's control virtual bool restoreValueCustom(); + /// Store current value in cashed value + void storeCurentValue(); + + /// Restore cashed value in the model attribute + /// \return boolean state if the restored feature shoud be hidden + bool restoreCurentValue(); + /// Fills the widget with default values /// \return true if the widget current value is reset virtual bool resetCustom(); @@ -126,6 +188,9 @@ protected: /// The methiod called when widget is activated virtual void activateCustom(); + //! Switch On/Off highlighting of the widget + virtual void setHighlighted(bool isHighlighted); + /// Returns true if the feature contains Point2D attribute with the same coordinates /// The attribute of the widget is not processed. /// \param theFeature a feature @@ -140,24 +205,24 @@ protected: /// Compute the feature default value and fill the controls with it /// or store the control value to the feature - /// The widget is not initialize the attribute value in order to avoid the + /// The widget is not initialize the attribute value in order to avoid the /// incorrect visualization in Sketch. E.g. by a line creation, the line should not /// be visualized immediatelly when the end point widget is activated. virtual void initializeValueByActivate(); private: - /// Returns point 2d from selected vertex - /// \param theView a view window - /// \param theShape a vertex shape - /// \param theX an output value of X coordinate - /// \param theY an output value of Y coordinate - bool getPoint2d(const Handle(V3d_View)& theView, const TopoDS_Shape& theShape, - double& theX, double& theY) const; + /// Creates constrains of the clicked point + /// \param theClickedX the horizontal coordnate of the point + /// \param theClickedY the vertical coordnate of the point + bool setConstraintToPoint(double theClickedX, double theClickedY, + const std::shared_ptr& theValue); /// Create a coincidence constraint between the attribute and the parameter object /// \theObject a result object - void setConstraintWith(const ObjectPtr& theObject); + /// \return true if succed + bool setConstraintToObject(const ObjectPtr& theObject); +public: /// Returns if the feature is an orphan point, circle or an arc. Returns true if it /// has no a coincident to other lines. It processes point, circle and arc features /// In circle an arc features, only centers are processed, for other points, it returns @@ -168,20 +233,77 @@ protected: /// \param theY an Y coordinate of the point /// \return boolean result static bool isOrphanPoint(const FeaturePtr& theFeature, const CompositeFeaturePtr& theSketch, - double theX, double theY, const bool theSearchInResults = false); + double theX, double theY); + + /// Explode the given shape by vertices and found closed to the point vertes + /// \param theShape a shape to be exploded + /// \param thePoint a point + /// \return boolean value + static bool shapeExploreHasVertex(const std::shared_ptr& theShape, + const std::shared_ptr& thePoint, + const CompositeFeaturePtr& theSketch); + + /// Finds in the feature's sub-features first Point2D attribute with the given point coordinates + /// \param theFeature a feature with sub-feature attributes + /// \param thePoint a point to provided searched coordinates + /// \return found point or null + static std::shared_ptr findFirstEqualPointInArgumentFeatures( + const FeaturePtr& theFeature, const std::shared_ptr& thePoint); + + /// Finds in the feature first Point2D attribute with the given point coordinates + /// \param theFeature a feature with point attributes + /// \param thePoint a point to provided searched coordinates + /// \return found point or null + static std::shared_ptr findFirstEqualPoint(const FeaturePtr& theFeature, + const std::shared_ptr& thePoint); + + /// Finds in the sketch attribute point of any feature that is nearest to the given point + /// \param theSketch a sketch, that is a container of features + /// \param theSkipFeature a feature that do not participate in the search + /// \param thePoint a point to provided searched coordinates + /// \return found point or null + static std::shared_ptr findFirstEqualPointInSketch( + const CompositeFeaturePtr& theSketch, + const FeaturePtr& theSkipFeature, + const std::shared_ptr& thePoint); + +private: + /// Returns attribute reference if the key is defined in XML definition of this control + /// \return found attribute or null + std::shared_ptr attributeRefAttr() const; + + /// Finds first equal point attribute in sketch and set it to reference attribute + /// \param theClickedX the horizontal coordnate of the point + /// \param theClickedY the vertical coordnate of the point + void fillRefAttribute(const std::shared_ptr& theValue); + void fillRefAttribute(double theClickedX, double theClickedY, + const std::shared_ptr& theValue); + void fillRefAttribute(const ObjectPtr& theObject); + + ObjectPtr getGeomSelection(const std::shared_ptr& theValue); protected: ModuleBase_IWorkshop* myWorkshop; ///< workshop private: - QGroupBox* myGroupBox; ///< the parent group box for all intenal widgets - ModuleBase_ParamSpinBox* myXSpin; ///< the spin box for the X coordinate - ModuleBase_ParamSpinBox* myYSpin; ///< the spin box for the Y coordinate + //ModuleBase_ParamSpinBox* myXSpin; ///< the spin box for the X coordinate + //ModuleBase_ParamSpinBox* myYSpin; ///< the spin box for the Y coordinate + ModuleBase_LabelValue* myXSpin; ///< the label for the X coordinate + ModuleBase_LabelValue* myYSpin; ///< the label for the Y coordinate + PartSet_ExternalObjectsMgr* myExternalObjectMgr; ///< reference to external objects manager - //std::string myOptionParam; /// Parameter name which has to be taken from previous feature + /// value used as selection in mouse release method + std::shared_ptr myPreSelected; + /// it is important during restart operation CompositeFeaturePtr mySketch; + + std::string myRefAttribute; /// if not empty, coincidences are not set but attribute is filled + bool myValueIsCashed; /// boolean state if the value is cashed during value state change + bool myIsFeatureVisibleInCash; /// boolean value if the feature was visible when cash if filled + double myXValueInCash; /// the cashed X value during value state change + double myYValueInCash; /// the cashed Y value during value state change }; #endif