void PlaneGCSSolver_Storage::processArc(const EntityWrapperPtr& theArc)
{
+ // no need to constraint a fixed arc
+ if (theArc->group() == GID_OUTOFGROUP)
+ return;
+
// Calculate additional parameters necessary for PlaneGCS
const std::list<EntityWrapperPtr>& aSubs = theArc->subEntities();
std::list<EntityWrapperPtr>::const_iterator aSubIt = aSubs.begin();
{
bool aResolved = false;
bool isGroupEmpty = isEmpty() && myStorage->isEmpty();
- if (myStorage->isNeedToResolve() && (!isGroupEmpty || !myConflictingConstraints.empty())) {
+ if (myStorage->isNeedToResolve() &&
+ (!isGroupEmpty || !myConflictingConstraints.empty() || myPrevResult == STATUS_FAILED)) {
if (!mySketchSolver)
mySketchSolver = SketchSolver_Manager::instance()->builder()->createSolver();
try {
if (myStorage->hasDuplicatedConstraint())
aResult = STATUS_INCONSISTENT;
- else {
+ else if (!isGroupEmpty) {
// To avoid overconstraint situation, we will remove temporary constraints one-by-one
// and try to find the case without overconstraint
bool isLastChance = false;