X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchPlugin%2FSketchPlugin_Tools.h;h=eb86f8b33702e49bfae9ea79f52d9d2ca8584ec6;hb=747178d21dce4fb034ff0e84c1280406ab64d566;hp=730d865b9127c4c9eee76c2995c18a862cd4bc01;hpb=97917d3698f5a2f7fc9596e7c755ff8f6751e373;p=modules%2Fshaper.git diff --git a/src/SketchPlugin/SketchPlugin_Tools.h b/src/SketchPlugin/SketchPlugin_Tools.h index 730d865b9..eb86f8b33 100644 --- a/src/SketchPlugin/SketchPlugin_Tools.h +++ b/src/SketchPlugin/SketchPlugin_Tools.h @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2019 CEA/DEN, EDF R&D +// 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 @@ -25,7 +25,16 @@ #include #include #include +#include +#include #include +#include +#include + +#include +#include + +class GeomAPI_AISObject; class SketchPlugin_Constraint; class SketchPlugin_Feature; @@ -41,7 +50,7 @@ void clearExpressions(FeaturePtr theFeature); std::shared_ptr getCoincidencePoint(const FeaturePtr theStartCoin); /// Find all Coincident constraints referred to the feature or its attribute -std::set findCoincidentConstraints(const FeaturePtr& theFeature); +std::set findCoincidentConstraints(const ObjectPtr& theObject); /// Finds lines coincident at point /// \param[in] theStartCoin coincidence feature @@ -103,6 +112,21 @@ void createCoincidenceOrTangency(SketchPlugin_Feature* theFeature, const ObjectPtr theObject, const bool theIsCanBeTangent); +/// Creates auxiliary point for ellipse and corresponding internal constraint. +/// \param[in] theEllipse base ellipse feature +/// \param[in] theAttrName name of the attribute of the ellipse, +/// the new point should be constrained +void createAuxiliaryPointOnEllipse(const FeaturePtr& theEllipseFeature, + const std::string& theAttrName); + +/// Creates auxiliary axis for ellipse and corresponding internal constraints. +/// \param[in] theEllipse base ellipse feature +/// \param[in] theStartAttr name of the attribute of the ellipse, the line is started +/// \param[in] theEndAttr name of the attribute of the ellipse, the line is ended +void createAuxiliaryAxisOfEllipse(const FeaturePtr& theEllipseFeature, + const std::string& theStartAttr, + const std::string& theEndAttr); + /// Creates passing point or tangent curve basing on the given attributes are initialized. /// \param[in] theRefAttr prefered attribute to be converted /// \param[in] theDefaultAttr default attribute if theRefAttr is not initialized @@ -113,9 +137,106 @@ void convertRefAttrToPointOrTangentCurve(const AttributeRefAttrPtr& theRefA std::shared_ptr& theTangentCurve, std::shared_ptr& thePassingPoint); - /// Calculate global coordinates for flyout point of Length constraint GeomPnt2dPtr flyoutPointCoordinates(const std::shared_ptr& theConstraint); + +/// Sets attributes of feature presentation +/// \param[in] thePrs a presentation +/// \param[in] isAxiliary is axiliary flag +void customizeFeaturePrs(const AISObjectPtr& thePrs, bool isAxiliary); + +void setDimensionColor(const AISObjectPtr& theDimPrs); + +/// Replace string in the name of object +void replaceInName(ObjectPtr theObject, const std::string& theSource, const std::string& theDest); + }; // namespace SketchPlugin_Tools +namespace SketchPlugin_SegmentationTools +{ + /// Returns geom point attribute of the feature bounds. It processes line or arc. + /// For circle/ellipse feature, the result attributes are null + /// \param theFeature a source feature + /// \param theStartPointAttr an out attribute to start point + /// \param theEndPointAttr an out attribute to end point + void getFeaturePoints(const FeaturePtr& theFeature, + std::shared_ptr& theStartPointAttr, + std::shared_ptr& theEndPointAttr); + + /// 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 + /// \param theRefsToFeature references to the feature result + void getRefAttributes(const FeaturePtr& theFeature, + std::map >& theRefs, + std::list& theRefsToFeature); + + /// Obtains a part of shape selected/highlighted in the viewer for Split/Trim operation + /// \param[in] theFeature Split/Trim feature + /// \param[in] theObjectAttributeId name of attribute containing selected object + /// \param[in] thePointAttributeId name of attribute containing point selected on the object + GeomShapePtr getSubShape( + SketchPlugin_Feature* theFeature, + const std::string& theObjectAttributeId, + const std::string& thePointAttributeId, + std::map >& theCashedShapes, + std::map& theObjectToPoints); + + /// Fulfill an internal containers by shapes obtained from the parameter object + /// Shapes are results of Split/Trim operation by points coincident to shape of the object + /// \param theOpFeture an operation feature (Split/Trim) + /// \param theObject a source object (will be splitted) + void fillObjectShapes( + SketchPlugin_Feature* theOpFeature, + const ObjectPtr& theObject, + std::map >& theCashedShapes, + std::map& theObjectToPoints); + + /// AIS object for selected/highlighted part of splitting/triming feature + /// \param[in] thePrevious previous presentation + /// \param[in] theOpFeture an operation feature (Split/Trim) + std::shared_ptr getAISObject(std::shared_ptr thePrevious, + SketchPlugin_Feature* theOpFeature, + const std::string& thePreviewObjectAttrName, + const std::string& thePreviewPointAttrName, + const std::string& theSelectedObjectAttrName, + const std::string& theSelectedPointAttrName); + + /// 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); + + /// Updates line length if it exist in the list + /// \param theFeaturesToUpdate a constraint index + void updateFeaturesAfterOperation(const std::set& theFeaturesToUpdate); + + + /// 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 a circular/elliptic arc feature filled by center + /// (or by center and focus for elliptic arc) of base feature and given points + /// \param theBaseFeature another circle or ellipse or circular/elliptic arc + /// \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); + +}; // namespace SketchPlugin_SegmentationTools + #endif // SKETCHPLUGIN_TOOLS_H_ \ No newline at end of file