#include <ModelAPI_ResultBody.h>
#include <ModelAPI_AttributeSelection.h>
#include <ModelAPI_AttributeSelectionList.h>
+#include <ModelAPI_Validator.h>
#include <SketchPlugin_SketchEntity.h>
#include <FeaturesPlugin_CompositeBoolean.h>
#include <ModuleBase_Tools.h>
#include <ModuleBase_Operation.h>
#include <ModuleBase_IPropertyPanel.h>
+#include <ModuleBase_OperationFeature.h>
#include <Config_WidgetAPI.h>
#include <QLabel>
return aControls;
}
-bool PartSet_WidgetSketchCreator::restoreValue()
+bool PartSet_WidgetSketchCreator::restoreValueCustom()
{
CompositeFeaturePtr aCompFeature =
std::dynamic_pointer_cast<ModelAPI_CompositeFeature>(myFeature);
std::dynamic_pointer_cast<ModelAPI_CompositeFeature>(myFeature);
FeaturePtr aSketch = aCompFeature->addFeature("Sketch");
- ModuleBase_Operation* anOperation = myModule->createOperation("Sketch");
- anOperation->setFeature(aSketch);
- myModule->sendOperation(anOperation);
+ ModuleBase_OperationFeature* aFOperation = dynamic_cast<ModuleBase_OperationFeature*>
+ (myModule->createOperation("Sketch"));
+ if (aFOperation)
+ aFOperation->setFeature(aSketch);
+ myModule->sendOperation(aFOperation);
//connect(anOperation, SIGNAL(aborted()), aWorkshop->operationMgr(), SLOT(abortAllOperations()));
} else {
// Break current operation
- QMessageBox::warning(this, tr("Extrusion Cut"),
+ std::string anOperationName = feature()->getKind();
+ QString aTitle = tr( anOperationName.c_str() );
+ QMessageBox::warning(this, aTitle,
tr("There are no bodies found. Operation aborted."), QMessageBox::Ok);
ModuleBase_Operation* aOp = myModule->workshop()->currentOperation();
aOp->abort();
connect(myModule, SIGNAL(operationResumed(ModuleBase_Operation*)), SLOT(onResumed(ModuleBase_Operation*)));
SessionPtr aMgr = ModelAPI_Session::get();
+ // Open transaction that is general for the previous nested one: it will be closed on nested commit
bool aIsOp = aMgr->isOperation();
- // Open transaction if it was closed before
- if (!aIsOp)
- aMgr->startOperation();
+ if (!aIsOp) {
+ const static std::string aNestedOpID("Parameters modification");
+ aMgr->startOperation(aNestedOpID, true);
+ }
restoreValue();
return false;
if (aSketchFeature->numberOfSubs() == 0) {
// Abort operation
SessionPtr aMgr = ModelAPI_Session::get();
- bool aIsOp = aMgr->isOperation();
// Close transaction
- if (aIsOp)
- aMgr->abortOperation();
+ /*
+ bool aIsOp = aMgr->isOperation();
+ if (aIsOp) {
+ const static std::string aNestedOpID("Parameters cancelation");
+ aMgr->startOperation(aNestedOpID, true);
+ }
+ */
theOp->abort();
} else {
// Hide sketcher result
ResultPtr aRes = aSelAttr->context();
GeomShapePtr aShape = aSelAttr->value();
if (aRes.get()) {
- AttributeSelectionListPtr aSelList =
- aCompFeature->data()->selectionList(FeaturesPlugin_CompositeBoolean::BOOLEAN_OBJECTS_ID());
+ std::string anObjectsAttribute = FeaturesPlugin_CompositeBoolean::BOOLEAN_OBJECTS_ID();
+ SessionPtr aMgr = ModelAPI_Session::get();
+ ModelAPI_ValidatorsFactory* aFactory = aMgr->validators();
+ AttributePtr anAttribute = myFeature->attribute(anObjectsAttribute);
+ std::string aValidatorID, anError;
+ AttributeSelectionListPtr aSelList = aCompFeature->data()->selectionList(anObjectsAttribute);
aSelList->append(aRes, GeomShapePtr());
- updateObject(aCompFeature);
+ if (aFactory->validate(anAttribute, aValidatorID, anError))
+ updateObject(aCompFeature);
+ else
+ aSelList->clear();
}
}
}