+// Copyright (C) 2014-20xx CEA/DEN, EDF R&D
+
#include <SketchSolver_Constraint.h>
#include <SketchSolver_Group.h>
#include <SketchSolver_Error.h>
#include <SketchPlugin_ConstraintAngle.h>
#include <SketchPlugin_ConstraintCoincidence.h>
+#include <SketchPlugin_ConstraintCollinear.h>
#include <SketchPlugin_ConstraintDistance.h>
#include <SketchPlugin_ConstraintEqual.h>
#include <SketchPlugin_ConstraintHorizontal.h>
#include <SketchPlugin_ConstraintLength.h>
+#include <SketchPlugin_ConstraintMiddle.h>
#include <SketchPlugin_ConstraintMirror.h>
#include <SketchPlugin_ConstraintParallel.h>
#include <SketchPlugin_ConstraintPerpendicular.h>
return CONSTRAINT_RADIUS;
else if (aType == SketchPlugin_ConstraintTangent::ID())
return CONSTRAINT_TANGENT;
+ else if (aType == SketchPlugin_ConstraintCollinear::ID())
+ return CONSTRAINT_COLLINEAR;
+ else if (aType == SketchPlugin_ConstraintMiddle::ID())
+ return CONSTRAINT_MIDDLE_POINT;
return CONSTRAINT_UNKNOWN;
}
if (aRefAttr) {
if (aRefAttr->isObject()) {
FeaturePtr aFeat = ModelAPI_Feature::feature(aRefAttr->object());
- aFeatures.insert(aFeat);
+ if (myBaseConstraint->getKind() != SketchPlugin_ConstraintLength::ID())
+ aFeatures.insert(aFeat);
+ else {
+ // Workaround for the Length constraint: add points of line, not line itself
+ anAttributes.insert(aFeat->attribute(SketchPlugin_Line::START_ID()));
+ anAttributes.insert(aFeat->attribute(SketchPlugin_Line::END_ID()));
+ }
} else
anAttributes.insert(aRefAttr->attr());
} else
bool SketchSolver_Constraint::remove()
{
cleanErrorMsg();
+ myType = CONSTRAINT_UNKNOWN;
return myStorage->removeConstraint(myBaseConstraint);
}
{
static const int anInitNbOfAttr = 4;
theAttributes.assign(anInitNbOfAttr, EntityWrapperPtr());
+ myAttributes.clear();
DataPtr aData = myBaseConstraint->data();
BuilderPtr aBuilder = SketchSolver_Manager::instance()->builder();
myStorage->update(*anIter/*, myGroupID*/);
EntityWrapperPtr anEntity = myStorage->entity(*anIter);
+ if (!anEntity) {
+ // Force creation of an entity
+ myStorage->update(*anIter, GID_UNKNOWN, true);
+ anEntity = myStorage->entity(*anIter);
+ }
+ myAttributes.push_back(anEntity);
SketchSolver_EntityType aType = anEntity->type();
if (aType == ENTITY_UNKNOWN)
if ((*aCIt)->isUsed(theFeature))
return true;
- std::list<AttributePtr> anAttrList = theFeature->data()->attributes(GeomDataAPI_Point2D::typeId());
+ std::list<AttributePtr> anAttrList =
+ theFeature->data()->attributes(GeomDataAPI_Point2D::typeId());
std::list<AttributePtr>::const_iterator anAttrIt = anAttrList.begin();
for (; anAttrIt != anAttrList.end(); ++ anAttrIt)
if (isUsed(*anAttrIt))