X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FSketchSolver%2FSketchSolver_Storage.h;h=6a1b1b2e817354138c24e4c018869c10a66ff6bf;hb=c3aeb6b898054376c1047071ea9fea61abdc9e99;hp=a35a7366b5e53b6d8785e7461d9a5ca52f9c2feb;hpb=c850e432aa527cd9249ba90f41cf6d31838b802e;p=modules%2Fshaper.git diff --git a/src/SketchSolver/SketchSolver_Storage.h b/src/SketchSolver/SketchSolver_Storage.h index a35a7366b..6a1b1b2e8 100644 --- a/src/SketchSolver/SketchSolver_Storage.h +++ b/src/SketchSolver/SketchSolver_Storage.h @@ -18,7 +18,8 @@ #include #include - +class SketchSolver_ConstraintDistance; +class SketchSolver_ConstraintFixedArcRadius; typedef std::map > CoincidentPointsMap; @@ -36,8 +37,10 @@ private: public: SketchSolver_Storage(const GroupID& theGroup) : myGroupID(theGroup), + mySketchID(EID_UNKNOWN), myNeedToResolve(false), - myEventsBlocked(false) + myEventsBlocked(false), + myExistArc(false) {} /// \brief Change mapping between constraint from SketchPlugin and @@ -57,12 +60,18 @@ public: /// \brief Convert feature to the form applicable for specific solver and map it /// \param theFeature [in] feature to convert /// \param theGroup [in] id of the group where the feature should be placed + /// \param theForce [in] forced feature creation /// \return \c true if the feature has been created or updated - SKETCHSOLVER_EXPORT bool update(FeaturePtr theFeature, const GroupID& theGroup = GID_UNKNOWN); + SKETCHSOLVER_EXPORT bool update(FeaturePtr theFeature, + const GroupID& theGroup = GID_UNKNOWN, bool theForce = false); + /// \brief Convert attribute to the form applicable for specific solver and map it - /// \param theFeature [in] feature to convert + /// \param theAttribute [in] attribute to convert + /// \param theGroup [in] id of the group where the feature should be placed + /// \param theForce [in] forced feature creation /// \return \c true if the attribute has been created or updated - SKETCHSOLVER_EXPORT bool update(AttributePtr theAttribute, const GroupID& theGroup = GID_UNKNOWN); + SKETCHSOLVER_EXPORT bool update(AttributePtr theAttribute, + const GroupID& theGroup = GID_UNKNOWN, bool theForce = false); /// \brief Returns constraint related to corresponding constraint SKETCHSOLVER_EXPORT @@ -100,15 +109,6 @@ public: /// \brief Remove all features became invalid SKETCHSOLVER_EXPORT void removeInvalidEntities(); -//// /// \brief Mark specified constraint as temporary -//// virtual void setTemporary(ConstraintPtr theConstraint) = 0; -//// /// \brief Returns number of temporary constraints -//// virtual size_t nbTemporary() const = 0; -//// /// \brief Remove temporary constraints -//// /// \param theNbConstraints [in] number of temporary constraints to be deleted -//// /// \return number of remaining temporary constraints -//// virtual size_t removeTemporary(size_t theNbConstraints = 1) = 0; - /// \brief Check whether the feature or its attributes are used by this storage /// \param theFeature [in] feature to be checked /// \return \c true if the feature interacts with the storage @@ -121,6 +121,10 @@ public: /// \brief Check the features is not removed bool isConsistent() const; + /// \brief Check the storage has constraints + bool isEmpty() const + { return myConstraintMap.empty(); } + /// \brief Check the entity is fixed. /// If the point is under verification, all coincident points are checked too. SKETCHSOLVER_EXPORT bool isFixed(EntityWrapperPtr theEntity) const; @@ -134,6 +138,8 @@ public: /// \brief Initialize solver by constraints, entities and parameters virtual void initializeSolver(SolverPtr theSolver) = 0; + /// \brief Return list of conflicting constraints + std::set getConflictingConstraints(SolverPtr theSolver) const; /// \brief Update SketchPlugin features after resolving constraints /// \param theFixedOnly [in] if \c true the fixed points will be updated only @@ -163,7 +169,8 @@ protected: void addEntity(FeaturePtr theFeature, EntityWrapperPtr theSolverEntity); - /// \brief Change mapping attribute of a feature and the entity applicable for corresponding solver. + /// \brief Change mapping attribute of a feature and the entity + /// applicable for corresponding solver. /// \param theAttribute [in] original attribute /// \param theSolverEntity [in] solver's entity, created outside SKETCHSOLVER_EXPORT @@ -190,6 +197,9 @@ protected: /// \return \c true if the parameter has been removed virtual bool remove(ParameterWrapperPtr theParameter) = 0; + /// \brief Remove point-point coincidence + SKETCHSOLVER_EXPORT bool removeCoincidence(ConstraintWrapperPtr theConstraint); + /// \brief Update the group for the given entity, its sub-entities and parameters virtual void changeGroup(EntityWrapperPtr theEntity, const GroupID& theGroup) = 0; /// \brief Update the group for the given parameter @@ -200,14 +210,22 @@ protected: /// \brief Verify the attribute is used by constraint SKETCHSOLVER_EXPORT bool isUsed(AttributePtr theAttirubute) const; + /// \brief Find arcs without corresponding entity applicable for the solver and build them + SKETCHSOLVER_EXPORT void processArcs(); + + /// \brief Replace entities by others + void replaceEntities(const std::map& theChange); + private: /// \brief Find the normal of the sketch EntityWrapperPtr getNormal() const; protected: + EntityID mySketchID; ///< identifier of the sketch GroupID myGroupID; ///< identifier of the group, this storage belongs to bool myNeedToResolve; ///< parameters are changed and group needs to be resolved bool myEventsBlocked; ///< indicates that features do not send events + bool myExistArc; ///< the storage has any point of arc but not full arc, need to add it /// map SketchPlugin constraint to a list of solver's constraints std::map > myConstraintMap; @@ -216,7 +234,12 @@ protected: /// map attribute to solver's entity std::map myAttributeMap; - CoincidentPointsMap myCoincidentPoints; ///< lists of coincident points (first is a master point, second is a set of slaves) + /// lists of coincident points (first is a master point, second is a set of slaves) + CoincidentPointsMap myCoincidentPoints; + + // to be able to update entities from constraints + friend class SketchSolver_ConstraintDistance; + friend class SketchSolver_ConstraintFixedArcRadius; }; typedef std::shared_ptr StoragePtr;