-// Copyright (C) 2014-2017 CEA/DEN, EDF R&D
+// Copyright (C) 2014-2019 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
//
// 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<mailto:webmaster.salome@opencascade.com>
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
#ifndef SketchPlugin_Sketch_H_
return MY_SOLVER_DOF;
}
+ /// Action ID to remove links to external entities while changing the sketch plane.
+ inline static const std::string& ACTION_REMOVE_EXTERNAL()
+ {
+ static const std::string MY_ACTION_REMOVE_EXTERNAL("RemoveExternalLinks");
+ return MY_ACTION_REMOVE_EXTERNAL;
+ }
+
/// Returns the kind of a feature
SKETCHPLUGIN_EXPORT virtual const std::string& getKind()
{
/// Request for initialization of data model of the feature: adding all attributes
SKETCHPLUGIN_EXPORT virtual void initAttributes();
- /// Moves the feature
- /// \param theDeltaX the delta for X coordinate is moved
- /// \param theDeltaY the delta for Y coordinate is moved
- SKETCHPLUGIN_EXPORT virtual void move(const double theDeltaX, const double theDeltaY)
- {
- }
-
/// Converts a 2D sketch space point into point in 3D space
/// \param theX an X coordinate
/// \param theY an Y coordinate
std::shared_ptr<GeomDataAPI_Dir> aNorm = std::dynamic_pointer_cast<GeomDataAPI_Dir>(
aData->attribute(NORM_ID()));
+ if (!aNorm->isInitialized() || !aX->isInitialized() ||
+ aNorm->dir()->cross(aX->dir())->squareModulus() < 1.e-14)
+ return std::shared_ptr<GeomAPI_Ax3>();
+
return std::shared_ptr<GeomAPI_Ax3>(new GeomAPI_Ax3(aC->pnt(), aX->dir(), aNorm->dir()));
}
/// Returns true if feature or reuslt belong to this composite feature as subs
SKETCHPLUGIN_EXPORT virtual bool isSub(ObjectPtr theObject) const;
- /// Construction result is allways recomuted on the fly
- SKETCHPLUGIN_EXPORT virtual bool isPersistentResult() {return false;}
-
SKETCHPLUGIN_EXPORT virtual void attributeChanged(const std::string& theID);
- /// Exchanges IDs of two given features: needed for fillet feature better naming (issue 769)
- SKETCHPLUGIN_EXPORT virtual void exchangeIDs(std::shared_ptr<ModelAPI_Feature> theFeature1,
- std::shared_ptr<ModelAPI_Feature> theFeature2);
-
+ /// Performs some custom feature specific functionality (normally called by some GUI button)
+ /// \param theActionId an action key
+ /// \return a boolean value about it is performed
+ SKETCHPLUGIN_EXPORT virtual bool customAction(const std::string& theActionId);
/// \brief Create a result for the point in the attribute if the attribute is initialized
/// \param theFeature a source feature
SketchPlugin_Sketch* theSketch,
const std::string& theAttributeID, const int theIndex);
+ /// \brief Create a result for the segment given by a pair of attributes
+ /// \param theFeature a source feature
+ /// \param theSketch a sketch intance
+ /// \param theStartAttrID an attribute string
+ /// \param theEndAttrID an attribute string
+ /// \param theIndex an index of the result
+ static void createLine2DResult(ModelAPI_Feature* theFeature,
+ SketchPlugin_Sketch* theSketch,
+ const std::string& theStartAttrID,
+ const std::string& theEndAttrID,
+ const int theIndex = 0);
+
/// Add new feature and fill the data of the feature by the data of the parameter feature.
/// The name of the created feature stays unique.
/// \param theFeature a source feature
return isCustomized;
}
+private:
+ /// Substitute all links to external objects by newly created features.
+ /// \return \c true, if all links updated.
+ bool removeLinksToExternal();
+
+ /// Update projected coordinate axes
+ void updateCoordinateAxis(ObjectPtr theSub, std::shared_ptr<GeomAPI_Ax3> thePlane);
+
+private:
+ std::shared_ptr<GeomAPI_Ax3> myPlane;
};
#endif