#include <GeomValidators_ZeroOffset.h>
#include <GeomValidators_BooleanArguments.h>
#include <GeomValidators_Different.h>
+#include <GeomValidators_PartitionArguments.h>
#include <ModelAPI_Object.h>
#include <ModelAPI_Session.h>
#include <GeomValidators_DifferentShapes.h>
#include <ModelAPI_ResultBody.h>
+#include <ModelAPI_AttributeString.h>
#include <GeomDataAPI_Point2D.h>
#include <GeomDataAPI_Point.h>
#include <XGUI_ObjectsBrowser.h>
#include <XGUI_SelectionMgr.h>
#include <XGUI_DataModel.h>
+#include <XGUI_ErrorMgr.h>
#include <SketchPlugin_Feature.h>
#include <SketchPlugin_Sketch.h>
PartSet_Module::PartSet_Module(ModuleBase_IWorkshop* theWshop)
: ModuleBase_IModule(theWshop),
- myRestartingMode(RM_None), myVisualLayerId(0)
+ myRestartingMode(RM_None), myVisualLayerId(0), myHasConstraintShown(true)
{
new PartSet_IconFactory();
aFactory->registerValidator("GeomValidators_Different",
new GeomValidators_Different);
+
+ aFactory->registerValidator("GeomValidators_PartitionArguments",
+ new GeomValidators_PartitionArguments);
}
void PartSet_Module::registerFilters()
XGUI_Displayer* aDisplayer = aConnector->workshop()->displayer();
aDisplayer->updateViewer();
}
+ mySketchMgr->onShowConstraintsToggle(myHasConstraintShown);
}
ModuleBase_Operation* PartSet_Module::currentOperation() const
myMenuMgr->updateViewerMenu(theStdActions);
}
+QString PartSet_Module::getFeatureError(const FeaturePtr& theFeature)
+{
+ QString anError = ModuleBase_IModule::getFeatureError(theFeature);
+
+ if (anError.isEmpty())
+ anError = sketchMgr()->getFeatureError(theFeature);
+
+ if (anError.isEmpty()) {
+ XGUI_ModuleConnector* aConnector = dynamic_cast<XGUI_ModuleConnector*>(workshop());
+ XGUI_OperationMgr* anOpMgr = aConnector->workshop()->operationMgr();
+
+ if (anOpMgr->isValidationLocked()) {
+ ModuleBase_OperationFeature* aFOperation = dynamic_cast<ModuleBase_OperationFeature*>
+ (anOpMgr->currentOperation());
+ if (!aFOperation || theFeature == aFOperation->feature())
+ anError = "Validation is locked by the current operation";
+ }
+ }
+ return anError;
+}
void PartSet_Module::activeSelectionModes(QIntList& theModes)
{
void PartSet_Module::clearViewer()
{
myCustomPrs->clearPrs();
+
+ XGUI_ModuleConnector* aConnector = dynamic_cast<XGUI_ModuleConnector*>(myWorkshop);
+ XGUI_Workshop* aWorkshop = aConnector->workshop();
+ XGUI_Displayer* aDisplayer = aWorkshop->displayer();
+ aDisplayer->deactivateSelectionFilters();
}
void PartSet_Module::propertyPanelDefined(ModuleBase_Operation* theOperation)
{
if (PartSet_SketcherMgr::constraintsIdList().contains(theCmdId)) {
// Show constraints if a constraint was anOperation
+ myHasConstraintShown = mySketchMgr->isConstraintsShown();
mySketchMgr->onShowConstraintsToggle(true);
}
ModuleBase_IModule::launchOperation(theCmdId);
// if the operation is panning or rotate or panglobal then do nothing
if ((theTrsfType == 1) || (theTrsfType == 3) || (theTrsfType == 4))
return;
-
ModuleBase_IViewer* aViewer = myWorkshop->viewer();
+ Handle(AIS_InteractiveContext) aContext = aViewer->AISContext();
+ if (aContext.IsNull())
+ return;
+
//Handle(V3d_View) aView = aViewer->activeView();
XGUI_ModuleConnector* aConnector = dynamic_cast<XGUI_ModuleConnector*>(myWorkshop);
XGUI_Workshop* aWorkshop = aConnector->workshop();
XGUI_Displayer* aDisplayer = aWorkshop->displayer();
- Handle(AIS_InteractiveContext) aContext = aViewer->AISContext();
-
Handle(V3d_Viewer) aV3dViewer = aContext->CurrentViewer();
Handle(V3d_View) aView;
double aScale = 0;
int aSelected = aObjects.size();
SessionPtr aMgr = ModelAPI_Session::get();
QAction* aActivatePartAction = myMenuMgr->action("ACTIVATE_PART_CMD");
+ QAction* aActivatePartSetAction = myMenuMgr->action("ACTIVATE_PARTSET_CMD");
if (aSelected == 1) {
bool hasResult = false;
bool hasFeature = false;
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"));
+ theMenu->addAction(aActivatePartSetAction);
+ aActivatePartSetAction->setEnabled((aMgr->activeDocument() != aMgr->moduleDocument()));
}
} else if (aSelected == 0) {
// if there is no selection then it means that upper label is selected
QModelIndexList aIndexes = myWorkshop->selection()->selectedIndexes();
if (aIndexes.size() == 0) // it means that selection happens in top label outside of tree view
- if (aMgr->activeDocument() != aMgr->moduleDocument())
- theMenu->addAction(myMenuMgr->action("ACTIVATE_PARTSET_CMD"));
+ theMenu->addAction(aActivatePartSetAction);
+ aActivatePartSetAction->setEnabled((aMgr->activeDocument() != aMgr->moduleDocument()));
}
bool aNotDeactivate = (myWorkshop->currentOperation() == 0);
- myMenuMgr->action("ACTIVATE_PARTSET_CMD")->setEnabled(aNotDeactivate);
- if (!aNotDeactivate)
+ if (!aNotDeactivate) {
aActivatePartAction->setEnabled(false);
+ aActivatePartSetAction->setEnabled(false);
+ }
}
void PartSet_Module::processEvent(const std::shared_ptr<Events_Message>& theMessage)
}
}
#else
- // Problem with MPV: At first time on creation it doesn't work because Part feature
- // creation event will be sent after
if (aActivePartIndex.isValid())
aTreeView->setExpanded(aActivePartIndex, false);
XGUI_DataModel* aDataModel = aWorkshop->objectBrowser()->dataModel();
// Update displayed objects in order to update active color
XGUI_Displayer* aDisplayer = aWorkshop->displayer();
QObjectPtrList aObjects = aDisplayer->displayedObjects();
- foreach(ObjectPtr aObj, aObjects)
- aDisplayer->redisplay(aObj, false);
+ bool aHidden;
+ foreach(ObjectPtr aObj, aObjects) {
+ //TODO: replace by redisplay event.
+ aHidden = !aObj->data() || !aObj->data()->isValid() ||
+ aObj->isDisabled() || (!aObj->isDisplayed());
+ if (!aHidden)
+ aDisplayer->redisplay(aObj, false);
+ }
aDisplayer->updateViewer();
}
}
{
// z layer is created for all started operations in order to visualize operation AIS presentation
// over the object
- Handle(V3d_Viewer) aViewer = myWorkshop->viewer()->AISContext()->CurrentViewer();
+ Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext();
+ if (aContext.IsNull())
+ return;
+
+ Handle(V3d_Viewer) aViewer = aContext->CurrentViewer();
if (myVisualLayerId == 0) {
if (myVisualLayerId == 0)
aViewer->AddZLayer(myVisualLayerId);
if (!aFound)
aViewer->AddZLayer(myVisualLayerId);
}
+ // if there is an active operation with validated widget,
+ // the filters of this widget should be activated in the created view
+ ModuleBase_Operation* aOperation = myWorkshop->currentOperation();
+ if (aOperation) {
+ ModuleBase_IPropertyPanel* aPanel = aOperation->propertyPanel();
+ ModuleBase_ModelWidget* anActiveWidget = aPanel->activeWidget();
+ if (anActiveWidget) {
+ ModuleBase_WidgetValidated* aWidgetValidated = dynamic_cast<ModuleBase_WidgetValidated*>
+ (anActiveWidget);
+ if (aWidgetValidated)
+ aWidgetValidated->activateFilters(true);
+ }
+ }
}