#include <ModuleBase_OperationFeature.h>
#include <GeomValidators_ShapeType.h>
+#include <GeomValidators_Finite.h>
#include <GeomValidators_Face.h>
#include <GeomValidators_ConstructionComposite.h>
#include <GeomValidators_ZeroOffset.h>
#include <ModelAPI_Validator.h>
#include <ModelAPI_Data.h>
#include <ModelAPI_Session.h>
-#include <ModelAPI_ShapeValidator.h>
+#include <GeomValidators_DifferentShapes.h>
#include <ModelAPI_ResultBody.h>
#include <GeomDataAPI_Point2D.h>
aFactory->registerValidator("PartSet_TangentSelection", new PartSet_TangentSelection);
aFactory->registerValidator("PartSet_FilletSelection", new PartSet_FilletSelection);
aFactory->registerValidator("PartSet_AngleSelection", new PartSet_AngleSelection);
-
aFactory->registerValidator("PartSet_DifferentObjects", new PartSet_DifferentObjectsValidator);
- aFactory->registerValidator("PartSet_DifferentShapes", new ModelAPI_ShapeValidator);
-
aFactory->registerValidator("PartSet_CoincidentAttr", new PartSet_CoincidentAttr);
+ aFactory->registerValidator("GeomValidators_DifferentShapes", new GeomValidators_DifferentShapes);
aFactory->registerValidator("GeomValidators_ShapeType", new GeomValidators_ShapeType);
aFactory->registerValidator("GeomValidators_Face", new GeomValidators_Face);
+ aFactory->registerValidator("GeomValidators_Finite", new GeomValidators_Finite);
aFactory->registerValidator("GeomValidators_ConstructionComposite",
new GeomValidators_ConstructionComposite);
aFactory->registerValidator("PartSet_SketchEntityValidator",
new PartSet_SketchEntityValidator);
- aFactory->registerValidator("PartSet_SameTypeAttr",
- new PartSet_SameTypeAttrValidator);
-
aFactory->registerValidator("GeomValidators_Different",
new GeomValidators_Different);
}
myRestartingMode == RM_EmptyFeatureUsed)) {
myLastOperationId = aFOperation->id();
myLastFeature = myRestartingMode == RM_LastFeatureUsed ? aFOperation->feature() : FeaturePtr();
-
- launchOperation(myLastOperationId);
+ if (!sketchMgr()->sketchSolverError())
+ launchOperation(myLastOperationId);
}
breakOperationSequence();
}
ModuleBase_OperationFeature* aFOperation = dynamic_cast<ModuleBase_OperationFeature*>(theOperation);
if (aFOperation)
- myCustomPrs->activate(aFOperation->feature());
+ myCustomPrs->activate(aFOperation->feature(), true);
+}
+
+void PartSet_Module::onOperationResumed(ModuleBase_Operation* theOperation)
+{
+ ModuleBase_IModule::onOperationResumed(theOperation);
+
+ ModuleBase_OperationFeature* aFOperation = dynamic_cast<ModuleBase_OperationFeature*>(theOperation);
+ if (aFOperation)
+ myCustomPrs->activate(aFOperation->feature(), true);
}
void PartSet_Module::onOperationStopped(ModuleBase_Operation* theOperation)
{
- myCustomPrs->deactivate();
+ bool isModified = myCustomPrs->deactivate(false);
if (PartSet_SketcherMgr::isSketchOperation(theOperation)) {
mySketchMgr->stopSketch(theOperation);
else if (PartSet_SketcherMgr::isNestedSketchOperation(theOperation)) {
mySketchMgr->stopNestedSketch(theOperation);
}
+
+ if (isModified) {
+ XGUI_ModuleConnector* aConnector = dynamic_cast<XGUI_ModuleConnector*>(myWorkshop);
+ XGUI_Displayer* aDisplayer = aConnector->workshop()->displayer();
+ aDisplayer->updateViewer();
+ }
}
ModuleBase_Operation* PartSet_Module::currentOperation() const
return mySketchMgr->canCommitOperation();
}
+bool PartSet_Module::canEraseObject(const ObjectPtr& theObject) const
+{
+ // the sketch manager put the restriction to the objects erase
+ return mySketchMgr->canEraseObject(theObject);
+}
+
bool PartSet_Module::canDisplayObject(const ObjectPtr& theObject) const
{
// the sketch manager put the restriction to the objects display
if (PartSet_SketcherMgr::isNestedSketchOperation(anOperation)) {
if (myRestartingMode != RM_Forbided)
myRestartingMode = RM_LastFeatureUsed;
- anOperation->commit();
+ XGUI_ModuleConnector* aConnector = dynamic_cast<XGUI_ModuleConnector*>(workshop());
+ XGUI_Workshop* aWorkshop = aConnector->workshop();
+ XGUI_OperationMgr* anOpMgr = aWorkshop->operationMgr();
+ // do nothing if the feature can not be applyed
+ if (anOpMgr->isApplyEnabled())
+ anOperation->commit();
}
}
}
bool PartSet_Module::deleteObjects()
{
- SessionPtr aMgr = ModelAPI_Session::get();
+ XGUI_ModuleConnector* aConnector = dynamic_cast<XGUI_ModuleConnector*>(workshop());
+ XGUI_Workshop* aWorkshop = aConnector->workshop();
+ XGUI_OperationMgr* anOpMgr = aWorkshop->operationMgr();
+
+ //SessionPtr aMgr = ModelAPI_Session::get();
// 1. check whether the delete should be processed in the module
ModuleBase_Operation* anOperation = myWorkshop->currentOperation();
bool isSketchOp = PartSet_SketcherMgr::isSketchOperation(anOperation),
// 2. find selected presentations
// selected objects should be collected before the current operation abort because
// the abort leads to selection lost on constraint objects. It can be corrected after #386 issue
- XGUI_ModuleConnector* aConnector = dynamic_cast<XGUI_ModuleConnector*>(workshop());
- XGUI_Workshop* aWorkshop = aConnector->workshop();
ModuleBase_ISelection* aSel = workshop()->selection();
QObjectPtrList aSelectedObj = aSel->selectedPresentations();
// if there are no selected objects in the viewer, that means that the selection in another
// 3. start operation
QString aDescription = aWorkshop->contextMenuMgr()->action("DELETE_CMD")->text();
- ModuleBase_OperationAction* anAction = new ModuleBase_OperationAction(aDescription, this);
+ ModuleBase_OperationAction* anOpAction = new ModuleBase_OperationAction(aDescription, this);
- XGUI_OperationMgr* anOpMgr = aConnector->workshop()->operationMgr();
// the active nested sketch operation should be aborted unconditionally
- if (isSketchOp)
- anOperation->addGrantedOperationId(anAction->id());
- if (!anOpMgr->canStartOperation(anAction->id()))
+ // the Delete action should be additionally granted for the Sketch operation
+ // in order to do not abort/commit it
+ if (!anOpMgr->canStartOperation(anOpAction->id(), isSketchOp/*granted*/))
return true; // the objects are processed but can not be deleted
- if (isSketchOp)
- anOperation->removeGrantedOperationId(anAction->id());
- anOpMgr->startOperation(anAction);
+ anOpMgr->startOperation(anOpAction);
+
// 4. delete features
// sketch feature should be skipped, only sub-features can be removed
// when sketch operation is active
aWorkshop->deleteFeatures(aSketchObjects);
// 5. stop operation
anOpMgr->commitOperation();
- } else {
+ }
+ else {
bool isPartRemoved = false;
// Delete part with help of PartSet plugin
// TODO: the deleted objects has to be processed by multiselection
std::dynamic_pointer_cast<ModelAPI_ResultPart>(aPartResult);
DocumentPtr aPartDoc = aPart->partDoc();
if (aPartDoc.get()) {
- aMgr->startOperation(PartSetPlugin_Remove::ID());
+ ModuleBase_OperationAction* anOpAction = new ModuleBase_OperationAction
+ (PartSetPlugin_Remove::ID().c_str(), this);
+ if (!anOpMgr->canStartOperation(anOpAction->id()))
+ return true; // the objects are processed but can not be deleted
+
+ anOpMgr->startOperation(anOpAction);
+
FeaturePtr aFeature = aPartDoc->addFeature(PartSetPlugin_Remove::ID());
aFeature->execute();
- aMgr->finishOperation();
+
+ anOpMgr->commitOperation();
isPartRemoved = true;
}
}
void PartSet_Module::onBeforeObjectErase(ObjectPtr theObject, AISObjectPtr theAIS)
{
+ // this is obsolete
// it should be recomputed in order to disappear in the viewer if the corresponded object
// is erased
- if (myCustomPrs->isActive())
- myCustomPrs->customize(theObject);
+ //if (myCustomPrs->isActive())
+ // myCustomPrs->redisplay(theObject, false);
}
void PartSet_Module::onViewTransformed(int theTrsfType)
aDisplayer->updateViewer();
}
-void PartSet_Module::customizeObject(ObjectPtr theObject)
+bool PartSet_Module::customizeObject(ObjectPtr theObject, const bool theUpdateViewer)
{
+ bool isRedisplayed = false;
if (myCustomPrs->isActive())
- myCustomPrs->customize(theObject);
+ isRedisplayed = myCustomPrs->redisplay(theObject, theUpdateViewer);
+
+ return isRedisplayed;
}
void PartSet_Module::customizeObjectBrowser(QWidget* theObjectBrowser)
QObjectPtrList aObjects = myWorkshop->selection()->selectedObjects();
int aSelected = aObjects.size();
SessionPtr aMgr = ModelAPI_Session::get();
+ QAction* aActivatePartAction = myMenuMgr->action("ACTIVATE_PART_CMD");
if (aSelected == 1) {
bool hasResult = false;
bool hasFeature = false;
}
if (aPart.get()) // this may be null is Part feature is disabled
aPartDoc = aPart->partDoc();
- if (aMgr->activeDocument() == aPartDoc)
- theMenu->addAction(myMenuMgr->action("DEACTIVATE_PART_CMD"));
- else
- theMenu->addAction(myMenuMgr->action("ACTIVATE_PART_CMD"));
+
+ theMenu->addAction(aActivatePartAction);
+ aActivatePartAction->setEnabled((aMgr->activeDocument() != aPartDoc));
+
} else if (aObject->document() == aMgr->activeDocument()) {
if (hasParameter || hasFeature)
theMenu->addAction(myMenuMgr->action("EDIT_CMD"));
ResultBodyPtr aResult = std::dynamic_pointer_cast<ModelAPI_ResultBody>(aObject);
if( aResult.get() )
- {
theMenu->addAction(myMenuMgr->action("SELECT_PARENT_CMD"));
- }
} else { // If feature is 0 the it means that selected root object (document)
if (aMgr->activeDocument() != aMgr->moduleDocument())
theMenu->addAction(myMenuMgr->action("ACTIVATE_PARTSET_CMD"));
if (aMgr->activeDocument() != aMgr->moduleDocument())
theMenu->addAction(myMenuMgr->action("ACTIVATE_PARTSET_CMD"));
}
- bool aCanDeactivate = (myWorkshop->currentOperation() == 0);
- myMenuMgr->action("ACTIVATE_PARTSET_CMD")->setEnabled(aCanDeactivate);
- myMenuMgr->action("DEACTIVATE_PART_CMD")->setEnabled(aCanDeactivate);
- myMenuMgr->action("ACTIVATE_PART_CMD")->setEnabled(aCanDeactivate);
+ bool aNotDeactivate = (myWorkshop->currentOperation() == 0);
+ myMenuMgr->action("ACTIVATE_PARTSET_CMD")->setEnabled(aNotDeactivate);
+ if (!aNotDeactivate)
+ aActivatePartAction->setEnabled(false);
}
void PartSet_Module::processEvent(const std::shared_ptr<Events_Message>& theMessage)