X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FPartSet%2FPartSet_Module.cpp;h=20cd411016fc4806e4f402843ee6926f4f03479e;hb=3e3d76500389cb3a5a6eeb09f229cd3c83730dac;hp=39520d8af82f766a3ffe29a98001cbc0a0d531ca;hpb=fb1766a3fb7d2b3e6862e040d528d96a5732f200;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_Module.cpp b/src/PartSet/PartSet_Module.cpp index 39520d8af..20cd41101 100644 --- a/src/PartSet/PartSet_Module.cpp +++ b/src/PartSet/PartSet_Module.cpp @@ -21,6 +21,12 @@ #include #include #include +#include +#include +#include +#include + +#include #include #include @@ -61,6 +67,7 @@ #include #include #include +#include #include #include @@ -85,7 +92,7 @@ extern "C" PARTSET_EXPORT ModuleBase_IModule* createModule(ModuleBase_IWorkshop* PartSet_Module::PartSet_Module(ModuleBase_IWorkshop* theWshop) : ModuleBase_IModule(theWshop), - myRestartingMode(RM_None) + myRestartingMode(RM_None), myVisualLayerId(0) { //myWorkshop = dynamic_cast(theWshop); mySketchMgr = new PartSet_SketcherMgr(this); @@ -124,7 +131,20 @@ void PartSet_Module::registerValidators() aFactory->registerValidator("PartSet_RigidValidator", new PartSet_RigidValidator); aFactory->registerValidator("PartSet_DifferentObjects", new PartSet_DifferentObjectsValidator); aFactory->registerValidator("PartSet_DifferentShapes", new ModelAPI_ShapeValidator); - aFactory->registerValidator("PartSet_SketchValidator", new PartSet_SketchValidator); + + aFactory->registerValidator("GeomValidators_Edge", new GeomValidators_Edge); + aFactory->registerValidator("GeomValidators_EdgeOrVertex", + new GeomValidators_EdgeOrVertex); + aFactory->registerValidator("GeomValidators_Face", new GeomValidators_Face); + + aFactory->registerValidator("GeomValidators_ConstructionComposite", + new GeomValidators_ConstructionComposite); + + aFactory->registerValidator("PartSet_SketchEntityValidator", + new PartSet_SketchEntityValidator); + + aFactory->registerValidator("PartSet_SameTypeAttr", + new PartSet_SameTypeAttrValidator); } void PartSet_Module::registerFilters() @@ -133,12 +153,14 @@ void PartSet_Module::registerFilters() XGUI_ModuleConnector* aConnector = dynamic_cast(workshop()); ModuleBase_FilterFactory* aFactory = aConnector->selectionFilters(); - aFactory->registerFilter("EdgeFilter", new ModuleBase_FilterLinearEdge); - aFactory->registerFilter("FaceFilter", new ModuleBase_FilterFace); - aFactory->registerFilter("MultiFilter", new ModuleBase_FilterMulti); - Handle(SelectMgr_Filter) aSelectFilter = new ModuleBase_FilterNoConsructionSubShapes(workshop()); - aFactory->registerFilter("NoConstructionSubShapesFilter", - new ModuleBase_FilterCustom(aSelectFilter)); + //aFactory->registerFilter("EdgeFilter", new ModuleBase_FilterLinearEdge); + //aFactory->registerFilter("FaceFilter", new ModuleBase_FilterFace); + //aFactory->registerFilter("MultiFilter", new ModuleBase_FilterMulti); + //Handle(SelectMgr_Filter) aSelectFilter = new ModuleBase_FilterNoConsructionSubShapes(workshop()); + //aFactory->registerFilter("NoConstructionSubShapesFilter", + // new ModuleBase_FilterCustom(aSelectFilter)); + //Handle(SelectMgr_Filter) aSelectFilter = new PartSet_FilterSketchEntity(workshop()); + //aFactory->registerFilter("SketchEntityFilter", new ModuleBase_FilterCustom(aSelectFilter)); } void PartSet_Module::registerProperties() @@ -193,6 +215,8 @@ void PartSet_Module::operationAborted(ModuleBase_Operation* theOperation) void PartSet_Module::operationStarted(ModuleBase_Operation* theOperation) { if (PartSet_SketcherMgr::isSketchOperation(theOperation)) { + Handle(V3d_Viewer) aViewer = myWorkshop->viewer()->AISContext()->CurrentViewer(); + aViewer->AddZLayer(myVisualLayerId); mySketchMgr->startSketch(theOperation); } else if (PartSet_SketcherMgr::isNestedSketchOperation(theOperation)) { @@ -208,6 +232,9 @@ void PartSet_Module::operationStopped(ModuleBase_Operation* theOperation) { if (PartSet_SketcherMgr::isSketchOperation(theOperation)) { mySketchMgr->stopSketch(theOperation); + Handle(V3d_Viewer) aViewer = myWorkshop->viewer()->AISContext()->CurrentViewer(); + aViewer->RemoveZLayer(myVisualLayerId); + myVisualLayerId = 0; } else if (PartSet_SketcherMgr::isNestedSketchOperation(theOperation)) { mySketchMgr->stopNestedSketch(theOperation); @@ -215,6 +242,13 @@ void PartSet_Module::operationStopped(ModuleBase_Operation* theOperation) myWorkshop->viewer()->removeSelectionFilter(myDocumentShapeFilter); } +ModuleBase_Operation* PartSet_Module::currentOperation() const +{ + XGUI_ModuleConnector* aConnector = dynamic_cast(workshop()); + XGUI_OperationMgr* anOpMgr = aConnector->workshop()->operationMgr(); + return anOpMgr->currentOperation(); +} + bool PartSet_Module::canUndo() const { bool aCanUndo = false; @@ -300,11 +334,11 @@ void PartSet_Module::addViewerItems(QMenu* theMenu) const theMenu->addAction(anAction); } } - bool isConstruction; - if (mySketchMgr->canChangeConstruction(isConstruction)) { - QAction* anAction = action("CONSTRUCTION_CMD"); + bool isAuxiliary; + if (mySketchMgr->canSetAuxiliary(isAuxiliary)) { + QAction* anAction = action("AUXILIARY_CMD"); theMenu->addAction(anAction); - anAction->setChecked(isConstruction); + anAction->setChecked(isAuxiliary); } } @@ -416,8 +450,8 @@ void PartSet_Module::onOperationActivatedByPreselection() void PartSet_Module::onNoMoreWidgets() { ModuleBase_Operation* anOperation = myWorkshop->currentOperation(); - if (PartSet_SketcherMgr::isNestedSketchOperation(anOperation)) { - if (anOperation) { + if (anOperation) { + if (PartSet_SketcherMgr::isNestedSketchOperation(anOperation)) { if (myRestartingMode != RM_Forbided) myRestartingMode = RM_LastFeatureUsed; anOperation->commit(); @@ -431,16 +465,24 @@ void PartSet_Module::onVertexSelected() if (aOperation->id().toStdString() == SketchPlugin_Line::ID()) { /// If last line finished on vertex the lines creation sequence has to be break ModuleBase_IPropertyPanel* aPanel = aOperation->propertyPanel(); + ModuleBase_ModelWidget* anActiveWidget = aPanel->activeWidget(); const QList& aWidgets = aPanel->modelWidgets(); - if (aWidgets.last() == aPanel->activeWidget()) { - myRestartingMode = RM_Forbided; + QList::const_iterator anIt = aWidgets.begin(), aLast = aWidgets.end(); + bool aFoundWidget = false; + bool aFoundObligatory = false; + for (; anIt != aLast && !aFoundObligatory; anIt++) { + if (!aFoundWidget) + aFoundWidget = *anIt == anActiveWidget; + else + aFoundObligatory = (*anIt)->isObligatory(); } + if (!aFoundObligatory) + myRestartingMode = RM_Forbided; } } -QWidget* PartSet_Module::createWidgetByType(const std::string& theType, QWidget* theParent, - Config_WidgetAPI* theWidgetApi, std::string theParentId, - QList& theModelWidgets) +ModuleBase_ModelWidget* PartSet_Module::createWidgetByType(const std::string& theType, QWidget* theParent, + Config_WidgetAPI* theWidgetApi, std::string theParentId) { XGUI_ModuleConnector* aConnector = dynamic_cast(workshop()); XGUI_Workshop* aWorkshop = aConnector->workshop(); @@ -473,8 +515,6 @@ QWidget* PartSet_Module::createWidgetByType(const std::string& theType, QWidget* aConstraintShapeSelectorWgt->setSketcher(mySketchMgr->activeSketch()); aWgt = aConstraintShapeSelectorWgt; } - if(aWgt) - theModelWidgets.append(aWgt); return aWgt; } @@ -482,9 +522,9 @@ void PartSet_Module::createActions() { QAction* anAction; - anAction = new QAction(tr("Construction"), this); + anAction = new QAction(tr("Auxiliary"), this); anAction->setCheckable(true); - addAction("CONSTRUCTION_CMD", anAction); + addAction("AUXILIARY_CMD", anAction); } QAction* PartSet_Module::action(const QString& theId) const @@ -508,8 +548,8 @@ void PartSet_Module::onAction(bool isChecked) QAction* aAction = static_cast(sender()); QString anId = aAction->data().toString(); - if (anId == "CONSTRUCTION_CMD") { - mySketchMgr->setConstruction(isChecked); + if (anId == "AUXILIARY_CMD") { + mySketchMgr->setAuxiliary(isChecked); } } @@ -538,11 +578,8 @@ bool PartSet_Module::deleteObjects() if (aSelectedObj.count() == 0) return false; - if (isNestedOp) - anOperation->abort(); - // the active nested sketch operation should be aborted unconditionally - if (PartSet_SketcherMgr::isNestedSketchOperation(anOperation)) + if (isNestedOp) anOperation->abort(); std::set aRefFeatures; @@ -623,3 +660,17 @@ bool PartSet_Module::deleteObjects() return true; } + + +void PartSet_Module::onObjectDisplayed(ObjectPtr theObject, AISObjectPtr theAIS) +{ + Handle(AIS_InteractiveObject) anAIS = theAIS->impl(); + if (!anAIS.IsNull()) { + Handle(AIS_Dimension) aDim = Handle(AIS_Dimension)::DownCast(anAIS); + if (!aDim.IsNull()) { + Handle(AIS_InteractiveContext) aCtx = anAIS->GetContext(); + aCtx->SetZLayer(aDim, myVisualLayerId); + } + } +} +