-// Copyright (C) 2014-2017 CEA/DEN, EDF R&D
+// Copyright (C) 2014-2022 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_
* \ingroup Plugins
* \brief Feature for creation of the new part in PartSet.
*/
-class SketchPlugin_Sketch : public ModelAPI_CompositeFeature, public GeomAPI_ICustomPrs
+class SketchPlugin_Sketch : public ModelAPI_CompositeFeature//, public GeomAPI_ICustomPrs
{
public:
/// Sketch feature kind
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()
{
std::shared_ptr<GeomDataAPI_Dir> aNorm = std::dynamic_pointer_cast<GeomDataAPI_Dir>(
data()->attribute(NORM_ID()));
- if (!anOrigin || !aNorm)
- return std::shared_ptr<GeomAPI_Pln>();
+ if (anOrigin.get() && aNorm.get() && anOrigin->isInitialized() && aNorm->isInitialized())
+ return std::shared_ptr<GeomAPI_Pln>(new GeomAPI_Pln(anOrigin->pnt(), aNorm->dir()));
- return std::shared_ptr<GeomAPI_Pln>(new GeomAPI_Pln(anOrigin->pnt(), aNorm->dir()));
+ return std::shared_ptr<GeomAPI_Pln>();
}
/// Returns currently defined plane as an object of Ax3
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()));
}
SKETCHPLUGIN_EXPORT virtual void attributeChanged(const std::string& theID);
+ /// 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
/// \param theSketch a sketch intance
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
static std::shared_ptr<GeomAPI_Ax3> plane(SketchPlugin_Sketch* theSketch);
/// Customize presentation of the feature
- virtual bool customisePresentation(ResultPtr theResult, AISObjectPtr thePrs,
- std::shared_ptr<GeomAPI_ICustomPrs> theDefaultPrs)
- {
- bool isCustomized = false;
- // apply the color of the result to the presentation
- if (theDefaultPrs.get())
- isCustomized = theDefaultPrs->customisePresentation(theResult, thePrs, theDefaultPrs);
- // set the sketch presentation bold
- isCustomized = thePrs->setWidth(2) || isCustomized;
-
- return isCustomized;
- }
-
+ //virtual bool customisePresentation(ResultPtr theResult, AISObjectPtr thePrs,
+ // std::shared_ptr<GeomAPI_ICustomPrs> theDefaultPrs)
+ //{
+ // bool isCustomized = false;
+ // // apply the color of the result to the presentation
+ // if (theDefaultPrs.get())
+ // isCustomized = theDefaultPrs->customisePresentation(theResult, thePrs, theDefaultPrs);
+ // // set the sketch presentation bold
+ // isCustomized = thePrs->setWidth(2) || isCustomized;
+
+ // 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