X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchPlugin%2FSketchPlugin_Trim.h;h=a56bd07e71a723a12ea17822a7f32fd24dc3b5bd;hb=fc72d43b677baa05ae7fd317346fd8b723b799ed;hp=f03c5d59f5bca6622e92ae62ac4135d9af77d781;hpb=b3695c3af5289903f1c0fa01bbb7c40203c5e544;p=modules%2Fshaper.git diff --git a/src/SketchPlugin/SketchPlugin_Trim.h b/src/SketchPlugin/SketchPlugin_Trim.h index f03c5d59f..a56bd07e7 100644 --- a/src/SketchPlugin/SketchPlugin_Trim.h +++ b/src/SketchPlugin/SketchPlugin_Trim.h @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2017 CEA/DEN, EDF R&D +// 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 @@ -12,18 +12,18 @@ // // 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 +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or -// email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // #ifndef SketchPlugin_Trim_H_ #define SketchPlugin_Trim_H_ #include "SketchPlugin.h" +#include -#include "GeomAPI_IPresentable.h" +#include #include #include @@ -106,35 +106,15 @@ class SketchPlugin_Trim : public SketchPlugin_Feature, public GeomAPI_IPresentab /// Apply information of the message to current object. It fills selected point and object virtual std::string processEvent(const std::shared_ptr& theMessage); - typedef std::map, - std::pair >, - std::list > > > PointToRefsMap; - - static void fillObjectShapes(const std::shared_ptr& theObject, - const std::shared_ptr& theSketch, - std::map, std::set >& theCashedShapes, - std::map, PointToRefsMap>& theObjectToPoints); - private: bool setCoincidenceToAttribute(const AttributePtr& theAttribute, - const std::set >& theFurtherCoincidences); + const std::set >& theFurtherCoincidences, + std::set>& theFeaturesToDelete); /// Move tangency constraint to the feature if it is geometrically closely to it /// \param theAttribute an attribute of a tangent constraint feature /// \param theFeature a feature that can be set into the attribute bool moveTangency(const AttributePtr& theAttribute, const FeaturePtr& theFeature); - GeomShapePtr getSubShape(const std::string& theObjectAttributeId, - const std::string& thePointAttributeId); - - /// Returns geom point attribute of the feature bounds. It processes line or arc. - /// For circle feature, the result attributes are null - /// \param theFeature a source feature - /// \param theStartPointAttr an out attribute to start point - /// \param theStartPointAttr an out attribute to end point - void getFeaturePoints(const FeaturePtr& theFeature, - std::shared_ptr& theStartPointAttr, - std::shared_ptr& theEndPointAttr); - /// Obtains those constraints of the feature that should be modified. output maps contain /// point of coincidence and attribute id to be modified after split /// \param theFeaturesToDelete [out] constrains that will be deleted after split @@ -142,36 +122,12 @@ private: void getConstraints(std::set>& theFeaturesToDelete, std::set& theFeaturesToUpdate); - /// Obtains references to feature point attributes and to feature, - /// e.g. for feature line: 1st container is - /// <1st line point, list > - /// <2nd line point, list<> > - /// for feature circle 2nd container is - /// \param theFeature an investigated feature - /// \param theRefs a container of list of referenced attributes - void getRefAttributes(const FeaturePtr& theFeature, - std::map >& theRefs, - std::list& theRefsToFeature); - - /// Move constraints from attribute of base feature to attribute after modification - /// \param theBaseRefAttributes container of references to the attributes of base feature - /// \param theModifiedAttributes container of attributes placed instead of base attributes - /// at the same place - void updateRefAttConstraints( - const std::map >& theBaseRefAttributes, - const std::set >& theModifiedAttributes, - std::set>& theFeaturesToDelete); - /// Remove references constraints from attribute of base feature refer to the given attribute /// \param theAttribute an attribute /// \param theModifiedAttributes modifiable container of attributes void removeReferencesToAttribute(const AttributePtr& theAttribute, std::map >& theBaseRefAttributes); - /// Updates line length if it exist in the list - /// \param theFeaturesToUpdate a constraints container - void updateFeaturesAfterTrim(const std::set& theFeaturesToUpdate); - /// Make the base object is splitted by the point attributes /// \param theBaseRefAttributes container of references to the attributes of base feature /// \param thePoints a list of points where coincidences will be build @@ -195,10 +151,19 @@ private: /// Make the base object is splitted by the point attributes /// \param thePoints a list of points where coincidences will be build - FeaturePtr trimCircle(const std::shared_ptr& theStartShapePoint, - const std::shared_ptr& theLastShapePoint, - std::set >& thePoints, - std::set>& theModifiedAttributes); + /// \return new elliptic arc if it was created + FeaturePtr trimEllipticArc(const std::shared_ptr& theStartShapePoint, + const std::shared_ptr& theLastShapePoint, + std::map >& theBaseRefAttributes, + std::set >& thePoints, + std::set>& theModifiedAttributes); + + /// Make the base object is splitted by the point attributes + /// \param thePoints a list of points where coincidences will be build + FeaturePtr trimClosed(const std::shared_ptr& theStartShapePoint, + const std::shared_ptr& theLastShapePoint, + std::set >& thePoints, + std::set>& theModifiedAttributes); /// Correct the first and the second point to provide condition that the first is closer to /// the start point and the second point - to the last end of current segment. To rearrange @@ -238,52 +203,6 @@ private: void fillPointAttribute(const AttributePtr& theModifiedAttribute, const std::shared_ptr& thePoint); - /// Creates a line feature filled by center of base feature and given points - /// \param theBaseFeature another arc feature - /// \param theFirstAttribute an attribute with coordinates for the start point - /// \param theSecondAttribute an attribute with coordinates for the end point - FeaturePtr createLineFeature(const FeaturePtr& theBaseFeature, - const std::shared_ptr& theFirstPoint, - const std::shared_ptr& theSecondPoint); - - /// Creates an arc feature filled by center of base feature and given points - /// \param theBaseFeature another arc feature - /// \param theFirstAttribute an attribute with coordinates for the start point - /// \param theSecondAttribute an attribute with coordinates for the end point - FeaturePtr createArcFeature(const FeaturePtr& theBaseFeature, - const std::shared_ptr& theFirstPoint, - const std::shared_ptr& theSecondPoint); - - /// Add feature coincidence constraint between given attributes - /// \param theConstraintId a constraint index - /// \param theFirstAttribute an attribute of further coincidence - /// \param theSecondAttribute an attribute of further coincidence - std::shared_ptr createConstraint(const std::string& theConstraintId, - const std::shared_ptr& theFirstAttribute, - const std::shared_ptr& theSecondAttribute); - - /// Add feature coincidence constraint between given attributes - /// \param theConstraintId a constraint index - /// \param theFirstAttribute an attribute of further coincidence - /// \param theSecondObject an object of further coincidence - std::shared_ptr createConstraintToObject(const std::string& theConstraintId, - const std::shared_ptr& theFirstAttribute, - const std::shared_ptr& theSecondObject); - - /// Add feature coincidence constraint between given attributes - /// \param theConstraintId a constraint index - /// \param theFirstAttribute an attribute of further coincidence - /// \param theFirstAttribute an attribute of further coincidence - std::shared_ptr createConstraintForObjects(const std::string& theConstraintId, - const std::shared_ptr& theFirstObject, - const std::shared_ptr& theSecondObject); - - /// Result result of the feature to build constraint with. For arc, circle it is an edge result. - /// \param theFeature a feature - /// \return result object - std::shared_ptr getFeatureResult( - const std::shared_ptr& theFeature); - private: void findShapePoints(const std::string& theObjectAttributeId, const std::string& thePointAttributeId, @@ -294,7 +213,8 @@ private: private: std::map, std::set > myCashedShapes; - std::map, PointToRefsMap> myObjectToPoints; + std::map, + GeomAlgoAPI_ShapeTools::PointToRefsMap> myObjectToPoints; }; #endif