X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPartSet%2FPartSet_Module.cpp;h=2b92c351a5ec2fdf8a88d31fd0c77168050d70cb;hb=6f84fd29d85b783864cdbb3ac9fdd6a3ad3cbb7c;hp=fb68b9e4d9f4695078c25e1954d6d8f190d33703;hpb=f94d2fb4ecb53808ddea8a98d38a1d53208edfd8;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_Module.cpp b/src/PartSet/PartSet_Module.cpp index fb68b9e4d..2b92c351a 100644 --- a/src/PartSet/PartSet_Module.cpp +++ b/src/PartSet/PartSet_Module.cpp @@ -17,13 +17,16 @@ #include #include #include - +#include +#include +#include #include #include #include #include #include +#include #include #include @@ -49,6 +52,7 @@ //#include #include +#include #include #include @@ -113,6 +117,7 @@ void PartSet_Module::registerValidators() aFactory->registerValidator("PartSet_RadiusValidator", new PartSet_RadiusValidator); 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); } @@ -124,12 +129,31 @@ void PartSet_Module::registerFilters() 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)); +} + +void PartSet_Module::registerProperties() +{ + Config_PropManager::registerProp("Sketch planes", "planes_size", "Size", Config_Prop::Double, + PLANE_SIZE); + Config_PropManager::registerProp("Sketch planes", "planes_thickness", "Thickness", + Config_Prop::Integer, SKETCH_WIDTH); } void PartSet_Module::operationCommitted(ModuleBase_Operation* theOperation) { if (theOperation->isEditOperation()) return; + // the selection is cleared after commit the create operation + // in order to do not use the same selected objects in the restarted operation + // for common behaviour, the selection is cleared even if the operation is not restarted + Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext(); + if (!aContext.IsNull()) + aContext->ClearSelected(); + /// Restart sketcher operations automatically FeaturePtr aFeature = theOperation->feature(); std::shared_ptr aSPFeature = @@ -138,6 +162,7 @@ void PartSet_Module::operationCommitted(ModuleBase_Operation* theOperation) myRestartingMode == RM_EmptyFeatureUsed)) { myLastOperationId = theOperation->id(); myLastFeature = myRestartingMode == RM_LastFeatureUsed ? theOperation->feature() : FeaturePtr(); + launchOperation(myLastOperationId); } breakOperationSequence(); @@ -173,6 +198,39 @@ void PartSet_Module::operationStopped(ModuleBase_Operation* theOperation) myWorkshop->viewer()->removeSelectionFilter(myDocumentShapeFilter); } +bool PartSet_Module::canDisplayObject(const ObjectPtr& theObject) const +{ + bool aCanDisplay = false; + CompositeFeaturePtr aSketchFeature = mySketchMgr->activeSketch(); + if (aSketchFeature.get() != NULL) { + FeaturePtr aFeature = ModelAPI_Feature::feature(theObject); + + // MPV: the second and third conditions to avoid crash on exit for application + if (aFeature.get() != NULL && aFeature->data().get() && aFeature->data()->isValid()) { + if (aFeature == aSketchFeature) { + aCanDisplay = false; + } + else if (aSketchFeature.get() && aSketchFeature->data().get() && + aSketchFeature->data()->isValid()) { + for (int i = 0; i < aSketchFeature->numberOfSubs() && !aCanDisplay; i++) { + FeaturePtr aSubFeature = aSketchFeature->subFeature(i); + std::list aResults = aSubFeature->results(); + std::list::const_iterator aIt; + for (aIt = aResults.begin(); aIt != aResults.end() && !aCanDisplay; ++aIt) { + if (theObject == (*aIt)) + aCanDisplay = true; + } + if (aSubFeature == theObject) + aCanDisplay = true; + } + } + } + } + else { + aCanDisplay = ModuleBase_IModule::canDisplayObject(theObject); + } + return aCanDisplay; +} void PartSet_Module::propertyPanelDefined(ModuleBase_Operation* theOperation) { @@ -198,13 +256,14 @@ void PartSet_Module::propertyPanelDefined(ModuleBase_Operation* theOperation) aPnt2dWgt->setPoint(aPoint->x(), aPoint->y()); PartSet_Tools::setConstraints(mySketchMgr->activeSketch(), theOperation->feature(), aWgt->attributeID(), aPoint->x(), aPoint->y()); - theOperation->propertyPanel()->activateNextWidget(aPnt2dWgt); + aPanel->activateNextWidget(aPnt2dWgt); } } } } else { // Start editing constraint if (theOperation->isEditOperation()) { + // TODO: #391 - to be removed std::string aId = theOperation->id().toStdString(); if (PartSet_SketcherMgr::sketchOperationIdList().contains(QString(aId.c_str()))) { if ((aId == SketchPlugin_ConstraintRadius::ID()) ||