SketchPlugin_Line.h
SketchPlugin_Point.h
SketchPlugin_Constraint.h
- SketchPlugin_ConstraintDistance.h
+ SketchPlugin_ConstraintPointsCoincident.h
)
SET(PROJECT_SOURCES
SketchPlugin_Line.cpp
SketchPlugin_Point.cpp
SketchPlugin_Constraint.cpp
- SketchPlugin_ConstraintDistance.cpp
+ SketchPlugin_ConstraintPointsCoincident.cpp
)
SET(PROJECT_LIBRARIES
#include "SketchPlugin_Constraint.h"
-#include <ModelAPI_Data.h>
-#include <SketchPlugin_Sketch.h>
-
-const boost::shared_ptr<GeomAPI_Shape>& SketchPlugin_Constraint::preview()
-{
- return getPreview();
-}
-
-void SketchPlugin_Constraint::addConstrainedObject(
- const std::string& theAttrID,
- const boost::shared_ptr<ModelAPI_AttributeReference>& theReference)
-{
- if (!data()->attribute(theAttrID).get())
- data()->addAttribute(theAttrID, theReference->type());
- boost::dynamic_pointer_cast<ModelAPI_AttributeReference>(
- data()->attribute(theAttrID))->setValue(theReference->value());
-}
-
-void SketchPlugin_Constraint::addConstrainedObject(
- const std::string& theAttrID,
- const boost::shared_ptr<ModelAPI_AttributeRefAttr>& theReference)
-{
- if (!data()->attribute(theAttrID).get())
- data()->addAttribute(theAttrID, theReference->type());
- boost::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(
- data()->attribute(theAttrID))->setValue(theReference->value());
-}
-
-void SketchPlugin_Constraint::getSketchParameters(
- std::list< boost::shared_ptr<ModelAPI_Attribute> >& theParams)
-{
- theParams.push_back(sketch()->data()->attribute(SKETCH_ATTR_ORIGIN));
- theParams.push_back(sketch()->data()->attribute(SKETCH_ATTR_DIRX));
- theParams.push_back(sketch()->data()->attribute(SKETCH_ATTR_DIRY));
- theParams.push_back(sketch()->data()->attribute(SKETCH_ATTR_NORM));
-}
/** \class SketchPlugin_Constraint
* \ingroup DataModel
* \brief Feature for creation of a new constraint between other features.
+ * Base class for all constraints.
*/
class SketchPlugin_Constraint: public SketchPlugin_Feature
{
SKETCHPLUGIN_EXPORT virtual const std::string& getGroup()
{static std::string MY_GROUP = "Sketch"; return MY_GROUP;}
- /// Returns the sketch preview
- /// \param theSketch the owner of this feature
- /// \return the built preview
- SKETCHPLUGIN_EXPORT virtual const boost::shared_ptr<GeomAPI_Shape>& preview();
-
/** \brief Adds sub-feature of the higher level feature (sub-element of the sketch)
* \param theFeature sub-feature
*/
SKETCHPLUGIN_EXPORT virtual const void addSub(
const boost::shared_ptr<ModelAPI_Feature>& theFeature) {}
- /** \brief Adds an object of the constraint. The object added by the reference.
- * \param[in] theAttrID identifier of the attribute
- * \param[in] theReference reference to the feature, which will be constrained
- */
- SKETCHPLUGIN_EXPORT virtual void addConstrainedObject(
- const std::string& theAttrID,
- const boost::shared_ptr<ModelAPI_AttributeReference>& theReference);
-
- /** \brief Adds an object of the constraint. The object added by the reference to its attribute.
- * \param[in] theAttrID identifier of the attribute
- * \param[in] theReference reference to the attribute feature, which will be constrained
- */
- SKETCHPLUGIN_EXPORT virtual void addConstrainedObject(
- const std::string& theAttrID,
- const boost::shared_ptr<ModelAPI_AttributeRefAttr>& theReference);
-
- /** \brief Prepares list of attributes of current sketch workplane
- * \param[out] theParams list of attributes
- */
- SKETCHPLUGIN_EXPORT void getSketchParameters(
- std::list< boost::shared_ptr<ModelAPI_Attribute> >& theParams);
-
/// \brief Use plugin manager for features creation
SketchPlugin_Constraint() {}
-
-protected:
- /** \brief Returns the list of attributes for the certain type of constraint.
- * \return names of attributes
- */
- virtual const std::list<std::string>& getAttributesList() const = 0;
};
#endif
+++ /dev/null
-// File: SketchPlugin_ConstraintDistance.cpp
-// Created: 08 May 2014
-// Author: Artem ZHIDKOV
-
-#include "SketchPlugin_ConstraintDistance.h"
-
-#include <ModelAPI_AttributeDouble.h>
-#include <ModelAPI_Data.h>
-#include <SketchPlugin_Point.h>
-
-SketchPlugin_ConstraintDistance::SketchPlugin_ConstraintDistance()
-{
- myAttrList.push_back(CONSTRAINT_ATTR_DISTANCE);
-}
-
-void SketchPlugin_ConstraintDistance::execute()
-{
-}
-
-
-void SketchPlugin_ConstraintDistance::setAttributes(
- const double theDistance,
- const boost::shared_ptr<SketchPlugin_Feature> theEntityA,
- const boost::shared_ptr<SketchPlugin_Feature> theEntityB)
-{
- // Assign the value of the distance
- data()->addAttribute(CONSTRAINT_ATTR_DISTANCE, ModelAPI_AttributeDouble::type());
- boost::dynamic_pointer_cast<ModelAPI_AttributeDouble>(
- data()->attribute(CONSTRAINT_ATTR_DISTANCE))->setValue(theDistance);
-
- // Assign parameters of the constraint
- std::string aPoints[2] = {CONSTRAINT_ATTR_POINT_A, CONSTRAINT_ATTR_POINT_B};
- std::string anEntities[2] = {CONSTRAINT_ATTR_ENTITY_A, CONSTRAINT_ATTR_ENTITY_B};
- int aCurPt = 0;
- int aCurEnt = 0;
- std::string aCurAttr;
- // add entityA depending on its type
- if (theEntityA->getKind() == SketchPlugin_Point().getKind())
- aCurAttr = aPoints[aCurPt++];
- else
- aCurAttr = anEntities[aCurEnt++];
- myAttrList.push_back(aCurAttr);
- data()->addAttribute(aCurAttr, ModelAPI_AttributeReference::type());
- boost::dynamic_pointer_cast<ModelAPI_AttributeReference>(
- data()->attribute(aCurAttr))->setValue(theEntityA);
- // add entityB depending on its type
- if (theEntityB->getKind() == SketchPlugin_Point().getKind())
- aCurAttr = aPoints[aCurPt++];
- else
- aCurAttr = anEntities[aCurEnt++];
- myAttrList.push_back(aCurAttr);
- data()->addAttribute(aCurAttr, ModelAPI_AttributeReference::type());
- boost::dynamic_pointer_cast<ModelAPI_AttributeReference>(
- data()->attribute(aCurAttr))->setValue(theEntityB);
-}
-
-void SketchPlugin_ConstraintDistance::setAttributes(
- const double theDistance,
- const boost::shared_ptr<ModelAPI_Attribute> thePoint,
- const boost::shared_ptr<SketchPlugin_Feature> theEntity)
-{
- // Assign the value of the distance
- data()->addAttribute(CONSTRAINT_ATTR_DISTANCE, ModelAPI_AttributeDouble::type());
- boost::dynamic_pointer_cast<ModelAPI_AttributeDouble>(
- data()->attribute(CONSTRAINT_ATTR_DISTANCE))->setValue(theDistance);
-
- // Assign reference to the first point
- myAttrList.push_back(CONSTRAINT_ATTR_POINT_A);
- data()->addAttribute(CONSTRAINT_ATTR_POINT_A, ModelAPI_AttributeRefAttr::type());
- boost::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(
- data()->attribute(CONSTRAINT_ATTR_POINT_A))->setValue(thePoint);
-
- // Assign reference to the entity
- std::string aCurAttr;
- if (theEntity->getKind() == SketchPlugin_Point().getKind())
- aCurAttr = CONSTRAINT_ATTR_POINT_B;
- else
- aCurAttr = CONSTRAINT_ATTR_ENTITY_A;
- myAttrList.push_back(aCurAttr);
- data()->addAttribute(aCurAttr, ModelAPI_AttributeReference::type());
- boost::dynamic_pointer_cast<ModelAPI_AttributeReference>(
- data()->attribute(aCurAttr))->setValue(theEntity);
-}
-
-void SketchPlugin_ConstraintDistance::setAttributes(
- const double theDistance,
- const boost::shared_ptr<ModelAPI_Attribute> thePointA,
- const boost::shared_ptr<ModelAPI_Attribute> thePointB)
-{
- // Assign the value of the distance
- data()->addAttribute(CONSTRAINT_ATTR_DISTANCE, ModelAPI_AttributeDouble::type());
- boost::dynamic_pointer_cast<ModelAPI_AttributeDouble>(
- data()->attribute(CONSTRAINT_ATTR_DISTANCE))->setValue(theDistance);
-
- // Assign reference to the first point
- myAttrList.push_back(CONSTRAINT_ATTR_POINT_A);
- data()->addAttribute(CONSTRAINT_ATTR_POINT_A, ModelAPI_AttributeRefAttr::type());
- boost::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(
- data()->attribute(CONSTRAINT_ATTR_POINT_A))->setValue(thePointA);
-
- // Assign reference to the second point
- myAttrList.push_back(CONSTRAINT_ATTR_POINT_B);
- data()->addAttribute(CONSTRAINT_ATTR_POINT_B, ModelAPI_AttributeRefAttr::type());
- boost::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(
- data()->attribute(CONSTRAINT_ATTR_POINT_B))->setValue(thePointB);
-}
-
-void SketchPlugin_ConstraintDistance::setAttributes(
- const double theRadius,
- const boost::shared_ptr<SketchPlugin_Feature> theCircle)
-{
- /// \todo Need to be implemented
-}
-
-void SketchPlugin_ConstraintDistance::setAttributes(
- const double theDistance,
- const boost::shared_ptr<SketchPlugin_Feature> thePointA,
- const boost::shared_ptr<SketchPlugin_Feature> thePointB,
- const boost::shared_ptr<SketchPlugin_Feature> theEntity)
-{
- /// \todo Need to be implemented. Possibly need to add points by their attributes
-}
-
-
+++ /dev/null
-// File: SketchPlugin_ConstraintDistance.h
-// Created: 08 May 2014
-// Author: Artem ZHIDKOV
-
-#ifndef SketchPlugin_ConstraintDistance_HeaderFile
-#define SketchPlugin_ConstraintDistance_HeaderFile
-
-#include "SketchPlugin.h"
-#include "SketchPlugin_Constraint.h"
-#include <list>
-
-/// The distance value
-const std::string CONSTRAINT_ATTR_DISTANCE(CONSTRAINT_ATTR_VALUE);
-
-
-/** \class SketchPlugin_ConstraintDistance
- * \ingroup DataModel
- * \brief Feature for creation of a new constraint which fixes the distance
- * between two other features.
- *
- * There are allowed several kinds of distances:
- * \li The next constraints use "valA", "ptA" and "entityA" parameters:
- * point-point, point-line, point-plane, point-face;
- * \li The distance between two points projected on a line (or vector)
- * uses "valA", "ptA", "ptB", "entityA";
- * \li The diameter of a circle is defined by "valA" and "entityA";
- * \li The angle between two lines (or vectors) uses "valA", "entityA", "entityB".
- *
- * The default list of attributes contains only CONSTRAINT_ATTR_DISTANCE.
- *
- * \remark As far as the constraint may have different attributes,
- * it is strongly recommended to use setAttibutes() methods
- * instead of direct intialization of the attributes
- */
-class SketchPlugin_ConstraintDistance: public SketchPlugin_Constraint
-{
-public:
- /// \brief Returns the kind of a feature
- SKETCHPLUGIN_EXPORT virtual const std::string& getKind()
- {static std::string MY_KIND = "SketchConstraintDistance"; return MY_KIND;}
-
- /// \brief Returns to which group in the document must be added feature
- SKETCHPLUGIN_EXPORT virtual const std::string& getGroup()
- {static std::string MY_GROUP = "Sketch"; return MY_GROUP;}
-
- /// \brief Creates a new part document if needed
- SKETCHPLUGIN_EXPORT virtual void execute();
-
- /** \brief Request for initialization of data model of the feature: adding all attributes
- *
- * The setAttributes() methods should be used instead.
- */
- SKETCHPLUGIN_EXPORT virtual void initAttributes()
- { /* do nothing */ }
-
- /// \brief Use plugin manager for features creation
- SKETCHPLUGIN_EXPORT SketchPlugin_ConstraintDistance();
-
- /** \brief Initializes the attributes of the constraint
- *
- * Defines the distance between a point and another entity,
- * or defines the angle between two vectors.
- *
- * \param[in] theDistance distance (or angle) between two entities
- * \param[in] theEntityA first parameter of the constraint
- * \param[in] theEntityB second parameter of the constraint
- */
- SKETCHPLUGIN_EXPORT void setAttributes(
- const double theDistance,
- const boost::shared_ptr<SketchPlugin_Feature> theEntityA,
- const boost::shared_ptr<SketchPlugin_Feature> theEntityB);
- /** \brief Initializes the attributes of the constraint
- *
- * Defines the distance between a point defined by reference and another entity.
- *
- * \param[in] theDistance distance between the point and other entity
- * \param[in] thePoint reference to the point attribute
- * \param[in] theEntity other parameter of the constraint
- */
- SKETCHPLUGIN_EXPORT void setAttributes(
- const double theDistance,
- const boost::shared_ptr<ModelAPI_Attribute> thePoint,
- const boost::shared_ptr<SketchPlugin_Feature> theEntity);
- /** \brief Initializes the attributes of the constraint
- *
- * Defines the distance between two points which defined by references.
- *
- * \param[in] theDistance distance between the points
- * \param[in] thePointA reference to the first point attribute
- * \param[in] thePointB reference to the second point attribute
- */
- SKETCHPLUGIN_EXPORT void setAttributes(
- const double theDistance,
- const boost::shared_ptr<ModelAPI_Attribute> thePointA,
- const boost::shared_ptr<ModelAPI_Attribute> thePointB);
- /** \brief Initializes the attributes of the constraint
- *
- * Defines radius of a circle.
- *
- * \param[in] theRadius radius of the circle
- * \param[in] theCircle the circle which has specified radius
- */
- SKETCHPLUGIN_EXPORT void setAttributes(
- const double theRadius,
- const boost::shared_ptr<SketchPlugin_Feature> theCircle);
- /** \brief Initializes the attributes of the constraint
- *
- * Defines the distance between two points projected on specified vector (or line).
- *
- * \param[in] theDistance distance between projected points
- * \param[in] thePointA first point for the projection
- * \param[in] thePointB second point for the projection
- * \param[in] theEntity direction of the line which the points projected on
- */
- SKETCHPLUGIN_EXPORT void setAttributes(
- const double theDistance,
- const boost::shared_ptr<SketchPlugin_Feature> thePointA,
- const boost::shared_ptr<SketchPlugin_Feature> thePointB,
- const boost::shared_ptr<SketchPlugin_Feature> theEntity);
-
-private:
- /** \brief Returns the list of attributes for the certain type of constraint.
- * \return names of attributes
- */
- const std::list<std::string>& getAttributesList() const
- { return myAttrList; }
-
-private:
- std::list<std::string> myAttrList; ///< List of attributes for current constraint
-};
-
-#endif
--- /dev/null
+// File: SketchPlugin_ConstraintPointsCoincident.cpp
+// Created: 08 May 2014
+// Author: Artem ZHIDKOV
+
+#include "SketchPlugin_ConstraintPointsCoincident.h"
+
+#include <ModelAPI_AttributeDouble.h>
+#include <ModelAPI_Data.h>
+#include <SketchPlugin_Point.h>
+
+SketchPlugin_ConstraintPointsCoincident::SketchPlugin_ConstraintPointsCoincident()
+{
+}
+
+void SketchPlugin_ConstraintPointsCoincident::initAttributes()
+{
+ data()->addAttribute(CONSTRAINT_ATTR_POINT_A, ModelAPI_AttributeRefAttr::type());
+ data()->addAttribute(CONSTRAINT_ATTR_POINT_B, ModelAPI_AttributeRefAttr::type());
+}
+
+void SketchPlugin_ConstraintPointsCoincident::execute()
+{
+}
+
+const boost::shared_ptr<GeomAPI_Shape>& SketchPlugin_ConstraintPointsCoincident::preview()
+{
+ /// \todo Preview for point coincidence
+ return getPreview();
+}
+
--- /dev/null
+// File: SketchPlugin_ConstraintPointsCoincident.h
+// Created: 08 May 2014
+// Author: Artem ZHIDKOV
+
+#ifndef SketchPlugin_ConstraintPointsCoincident_HeaderFile
+#define SketchPlugin_ConstraintPointsCoincident_HeaderFile
+
+#include "SketchPlugin.h"
+#include "SketchPlugin_Constraint.h"
+#include <list>
+
+
+/** \class SketchPlugin_ConstraintPointsCoincident
+ * \ingroup DataModel
+ * \brief Feature for creation of a new constraint which defines equvalence of two points
+ *
+ * These constraint has two attributes: CONSTRAINT_ATTR_POINT_A and CONSTRAINT_ATTR_POINT_B
+ */
+class SketchPlugin_ConstraintPointsCoincident: public SketchPlugin_Constraint
+{
+public:
+ /// \brief Returns the kind of a feature
+ SKETCHPLUGIN_EXPORT virtual const std::string& getKind()
+ {static std::string MY_KIND = "SketchConstraintPointsCoincident"; return MY_KIND;}
+
+ /// \brief Returns to which group in the document must be added feature
+ SKETCHPLUGIN_EXPORT virtual const std::string& getGroup()
+ {static std::string MY_GROUP = "Sketch"; return MY_GROUP;}
+
+ /// \brief Creates a new part document if needed
+ SKETCHPLUGIN_EXPORT virtual void execute();
+
+ /// \brief Request for initialization of data model of the feature: adding all attributes
+ SKETCHPLUGIN_EXPORT virtual void initAttributes();
+
+ /// \brief Returns the sketch preview
+ SKETCHPLUGIN_EXPORT virtual const boost::shared_ptr<GeomAPI_Shape>& preview();
+
+ /// \brief Use plugin manager for features creation
+ SketchPlugin_ConstraintPointsCoincident();
+};
+
+#endif
#include <ModelAPI_AttributeDouble.h>
#include <ModelAPI_Data.h>
#include <SketchPlugin_Constraint.h>
-#include <SketchPlugin_ConstraintDistance.h>
+#include <SketchPlugin_ConstraintPointsCoincident.h>
#include <SketchPlugin_Line.h>
{
if (myWorkplane.h == 0)
{
- // Create workplane when first constraint is added
- std::list< boost::shared_ptr<ModelAPI_Attribute> > aWPAttr;
- theConstraint->getSketchParameters(aWPAttr);
- if (!addWorkplane(aWPAttr))
- return false;
+// // Create workplane when first constraint is added
+// std::list< boost::shared_ptr<ModelAPI_Attribute> > aWPAttr;
+// theConstraint->getSketchParameters(aWPAttr);
+// if (!addWorkplane(aWPAttr))
+// return false;
}
// Create constraint parameters
int SketchSolver_ConstraintManager::SketchSolver_ConstraintGroup::getConstraintType(
const boost::shared_ptr<SketchPlugin_Constraint>& theConstraint) const
{
- if (theConstraint->getKind() == SketchPlugin_ConstraintDistance().getKind())
- {
- boost::shared_ptr<ModelAPI_Attribute> aPtA = theConstraint->data()->attribute(CONSTRAINT_ATTR_POINT_A);
- boost::shared_ptr<ModelAPI_Attribute> aPtB = theConstraint->data()->attribute(CONSTRAINT_ATTR_POINT_B);
- boost::shared_ptr<ModelAPI_Attribute> aEntA = theConstraint->data()->attribute(CONSTRAINT_ATTR_ENTITY_A);
- boost::shared_ptr<ModelAPI_Attribute> aEntB = theConstraint->data()->attribute(CONSTRAINT_ATTR_ENTITY_B);
- boost::shared_ptr<ModelAPI_AttributeDouble> aDistance =
- boost::shared_dynamic_cast<ModelAPI_AttributeDouble>(theConstraint->data()->attribute(CONSTRAINT_ATTR_VALUE));
- if (aPtA.get()) // ptA is an attribute of the constraint
- {
-// if (aEntA.get()) // entityA is an attribute of the constraint
+// if (theConstraint->getKind() == SketchPlugin_ConstraintDistance().getKind())
+// {
+// boost::shared_ptr<ModelAPI_Attribute> aPtA = theConstraint->data()->attribute(CONSTRAINT_ATTR_POINT_A);
+// boost::shared_ptr<ModelAPI_Attribute> aPtB = theConstraint->data()->attribute(CONSTRAINT_ATTR_POINT_B);
+// boost::shared_ptr<ModelAPI_Attribute> aEntA = theConstraint->data()->attribute(CONSTRAINT_ATTR_ENTITY_A);
+// boost::shared_ptr<ModelAPI_Attribute> aEntB = theConstraint->data()->attribute(CONSTRAINT_ATTR_ENTITY_B);
+// boost::shared_ptr<ModelAPI_AttributeDouble> aDistance =
+// boost::shared_dynamic_cast<ModelAPI_AttributeDouble>(theConstraint->data()->attribute(CONSTRAINT_ATTR_VALUE));
+// if (aPtA.get()) // ptA is an attribute of the constraint
+// {
+//// if (aEntA.get()) // entityA is an attribute of the constraint
+//// {
+//// if (aEntA->feature()->getKind() == SketchPlugin_Line().getKind()) // entityA is a line
+//// {
+//// if (aEntB.get() && aEntB->feature()->getKind() == SketchPlugin_Line().getKind()) // entityB is a line too
+//// return SLVS_C_ANGLE;
+//// else if (aPtB.get()) // ptB is also an attribute of the constraint
+//// return SLVS_C_PROJ_PT_DISTANCE;
+//// else
+//// return SLVS_C_PT_LINE_DISTANCE;
+//// }
+//// /// \todo Implement other point-entity distances
+//// }
+//// else
+// if (aPtB.get()) // ptB is an attribute of the constrtaint => point-point distance
// {
-// if (aEntA->feature()->getKind() == SketchPlugin_Line().getKind()) // entityA is a line
-// {
-// if (aEntB.get() && aEntB->feature()->getKind() == SketchPlugin_Line().getKind()) // entityB is a line too
-// return SLVS_C_ANGLE;
-// else if (aPtB.get()) // ptB is also an attribute of the constraint
-// return SLVS_C_PROJ_PT_DISTANCE;
-// else
-// return SLVS_C_PT_LINE_DISTANCE;
-// }
-// /// \todo Implement other point-entity distances
+// if (aDistance->value() == 0.0)
+// return SLVS_C_POINTS_COINCIDENT;
+// else
+// return SLVS_C_PT_PT_DISTANCE;
// }
-// else
- if (aPtB.get()) // ptB is an attribute of the constrtaint => point-point distance
- {
- if (aDistance->value() == 0.0)
- return SLVS_C_POINTS_COINCIDENT;
- else
- return SLVS_C_PT_PT_DISTANCE;
- }
- }
- else if (aEntA.get() && !aEntB.get() && !aPtB.get())
- return SLVS_C_DIAMETER;
- return SLVS_C_UNKNOWN;
- }
+// }
+// else if (aEntA.get() && !aEntB.get() && !aPtB.get())
+// return SLVS_C_DIAMETER;
+// return SLVS_C_UNKNOWN;
+// }
/// \todo Implement other kind of constrtaints
return SLVS_C_UNKNOWN;