X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPartSet%2FPartSet_Module.cpp;h=f3e9a285618d37d6655bfae5944201595ffc54a9;hb=a2e697d6efc2f36155ad2236ec52915b59cce738;hp=65be58122bb5aa6a040b67e4a13778e52f043bed;hpb=6e421e939851e0de46554ae45a3ca0e1f67cd91d;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_Module.cpp b/src/PartSet/PartSet_Module.cpp index 65be58122..f3e9a2856 100644 --- a/src/PartSet/PartSet_Module.cpp +++ b/src/PartSet/PartSet_Module.cpp @@ -38,10 +38,15 @@ #include "PartSet_IconFactory.h" #include "PartSet_OverconstraintListener.h" #include "PartSet_TreeNodes.h" +#include "PartSet_FieldStepPrs.h" #include "PartSet_Filters.h" #include "PartSet_FilterInfinite.h" +#ifdef _DEBUG +#include +#endif + #include #include #include @@ -49,7 +54,6 @@ #include #include -#include #include #include #include @@ -62,7 +66,9 @@ #include #include #include +#include +#include #include #include #include @@ -74,6 +80,7 @@ #include #include #include +#include #include #include @@ -83,7 +90,6 @@ #include #include #include -#include #include #include #include @@ -138,10 +144,6 @@ #include -#ifdef _DEBUG -#include -#endif - /*!Create and return new instance of XGUI_Module*/ extern "C" PARTSET_EXPORT ModuleBase_IModule* createModule(ModuleBase_IWorkshop* theWshop) { @@ -177,6 +179,7 @@ PartSet_Module::PartSet_Module(ModuleBase_IWorkshop* theWshop) Events_Loop* aLoop = Events_Loop::loop(); aLoop->registerListener(this, Events_Loop::eventByName(EVENT_DOCUMENT_CHANGED)); + aLoop->registerListener(this, Events_Loop::eventByName(EVENT_OBJECT_TO_REDISPLAY)); registerSelectionFilter(SF_GlobalFilter, new PartSet_GlobalFilter(myWorkshop)); registerSelectionFilter(SF_FilterInfinite, new PartSet_FilterInfinite(myWorkshop)); @@ -188,6 +191,26 @@ PartSet_Module::PartSet_Module(ModuleBase_IWorkshop* theWshop) setDefaultConstraintShown(); + //Config_PropManager::registerProp("Visualization", "object_default_color", "Object color", + // Config_Prop::Color, "225,225,225"); + + Config_PropManager::registerProp("Visualization", "result_body_color", "Result color", + Config_Prop::Color, ModelAPI_ResultBody::DEFAULT_COLOR()); + + Config_PropManager::registerProp("Visualization", "result_group_color", "Group color", + Config_Prop::Color, ModelAPI_ResultGroup::DEFAULT_COLOR()); + + Config_PropManager::registerProp("Visualization", "result_construction_color", + "Construction color", + Config_Prop::Color, + ModelAPI_ResultConstruction::DEFAULT_COLOR()); + + Config_PropManager::registerProp("Visualization", "result_part_color", "Part color", + Config_Prop::Color, ModelAPI_ResultPart::DEFAULT_COLOR()); + + Config_PropManager::registerProp("Visualization", "result_field_color", "Field color", + Config_Prop::Color, ModelAPI_ResultField::DEFAULT_COLOR()); + Config_PropManager::registerProp("Visualization", "operation_parameter_color", "Reference shape wireframe color in operation", Config_Prop::Color, PartSet_CustomPrs::OPERATION_PARAMETER_COLOR()); @@ -225,18 +248,18 @@ PartSet_Module::PartSet_Module(ModuleBase_IWorkshop* theWshop) Config_PropManager::registerProp("Visualization", "sketch_dimension_color", "Dimension color", Config_Prop::Color, SKETCH_DIMENSION_COLOR); + + Config_PropManager::registerProp("Shortcuts", "add_parameter_shortcut", + "Add parameter in parameters manager dialog", + Config_Prop::Shortcut, "Ctrl+A"); + + Config_PropManager::registerProp("Windows", "use_hide_faces_panel", + "Use HideFaces panel in operations", Config_Prop::Boolean, "false"); } //****************************************************** PartSet_Module::~PartSet_Module() { - std::map::const_iterator aFiltersIt = - mySelectionFilters.begin(); - for (; aFiltersIt != mySelectionFilters.end(); aFiltersIt++) { - Handle(SelectMgr_Filter) aFilter = aFiltersIt->second; - if (!aFilter.IsNull()) - aFilter.Nullify(); - } delete myCustomPrs; delete myOverconstraintListener; delete myRoot; @@ -434,9 +457,11 @@ void PartSet_Module::updateSketcherOnStart(ModuleBase_Operation* theOperation) if (PartSet_SketcherMgr::isSketchOperation(theOperation)) { mySketchMgr->startSketch(theOperation); } - else if (sketchMgr()->isNestedSketchOperation(theOperation)) { - mySketchMgr->startNestedSketch(theOperation); - } + // It is switched off because of + // Task #3067: 5.2.2 Drawing in the sketcher: change the mouse cursor arrow + //else if (sketchMgr()->isNestedSketchOperation(theOperation)) { + // mySketchMgr->startNestedSketch(theOperation); + //} } //****************************************************** @@ -445,8 +470,8 @@ void PartSet_Module::updatePresentationsOnStart(ModuleBase_Operation* theOperati ModuleBase_OperationFeature* aFOperation = dynamic_cast(theOperation); if (aFOperation) { - myCustomPrs->activate(aFOperation->feature(), ModuleBase_IModule::CustomizeArguments, true); - myCustomPrs->activate(aFOperation->feature(), ModuleBase_IModule::CustomizeResults, true); + myCustomPrs->activate(aFOperation->feature(), ModuleBase_IModule::CustomizeArguments, false); + myCustomPrs->activate(aFOperation->feature(), ModuleBase_IModule::CustomizeResults, false); } } @@ -458,8 +483,8 @@ void PartSet_Module::operationResumed(ModuleBase_Operation* theOperation) ModuleBase_OperationFeature* aFOperation = dynamic_cast(theOperation); if (aFOperation) { - myCustomPrs->activate(aFOperation->feature(), ModuleBase_IModule::CustomizeArguments, true); - myCustomPrs->activate(aFOperation->feature(), ModuleBase_IModule::CustomizeResults, true); + myCustomPrs->activate(aFOperation->feature(), ModuleBase_IModule::CustomizeArguments, false); + myCustomPrs->activate(aFOperation->feature(), ModuleBase_IModule::CustomizeResults, false); } } @@ -528,7 +553,7 @@ bool PartSet_Module::canRedo() const bool PartSet_Module::canApplyAction(const ObjectPtr& theObject, const QString& theActionId) const { bool aValid = true; - if (theActionId == "MOVE_CMD") { + if (theActionId == "MOVE_CMD" || theActionId == "MOVE_SPLIT_CMD") { FeaturePtr aFeature = ModelAPI_Feature::feature(theObject); if (aFeature) { ResultPtr aResult = ModuleBase_Tools::firstResult(aFeature); @@ -656,7 +681,7 @@ void PartSet_Module::moduleSelectionFilters(const QIntList& theFilterTypes, { bool isSketchActive = mySketchMgr->activeSketch().get(); - std::map::const_iterator aFiltersIt = + std::map::const_iterator aFiltersIt = mySelectionFilters.begin(); for (; aFiltersIt != mySelectionFilters.end(); aFiltersIt++) { int aFilterType = aFiltersIt->first; @@ -666,7 +691,7 @@ void PartSet_Module::moduleSelectionFilters(const QIntList& theFilterTypes, // using sketch filters only if sketch operation is active if (!isSketchActive && - mySketchMgr->sketchSelectionFilter((XGUI_SelectionFilterType)aFilterType)) + mySketchMgr->sketchSelectionFilter((ModuleBase_SelectionFilterType)aFilterType)) continue; // using filtering of construction results only from faces panel @@ -677,37 +702,6 @@ void PartSet_Module::moduleSelectionFilters(const QIntList& theFilterTypes, } } -//****************************************************** -QIntList PartSet_Module::selectionFilters() -{ - QIntList aTypes; - - std::map::const_iterator aFiltersIt = - mySelectionFilters.begin(); - for (; aFiltersIt != mySelectionFilters.end(); aFiltersIt++) - aTypes.append(aFiltersIt->first); - - return aTypes; -} - -//****************************************************** -void PartSet_Module::registerSelectionFilter(const XGUI_SelectionFilterType theFilterType, - const Handle(SelectMgr_Filter)& theFilter) -{ - mySelectionFilters[theFilterType] = theFilter; -} - -//****************************************************** -Handle(SelectMgr_Filter) PartSet_Module::selectionFilter(const int theType) -{ - XGUI_SelectionFilterType aType = (XGUI_SelectionFilterType)theType; - - if (mySelectionFilters.find(aType) != mySelectionFilters.end()) - return mySelectionFilters[aType]; - else - return Handle(SelectMgr_Filter)(); -} - //****************************************************** void PartSet_Module::customSubShapesSelectionModes(QIntList& theModes) { @@ -782,16 +776,14 @@ void PartSet_Module::propertyPanelDefined(ModuleBase_Operation* theOperation) } //****************************************************** -bool PartSet_Module::createWidgets(ModuleBase_Operation* theOperation, +bool PartSet_Module::createWidgets(const FeaturePtr& theFeature, const QString& theXmlRepr, QList& theWidgets) const { bool aProcessed = false; - ModuleBase_OperationFeature* aFOperation = - dynamic_cast(theOperation); XGUI_Workshop* aWorkshop = getWorkshop(); XGUI_PropertyPanel* aPropertyPanel = aWorkshop->propertyPanel(); - if (mySketchMgr->activeSketch().get() && aFOperation && aPropertyPanel) { + if (mySketchMgr->activeSketch().get() && aPropertyPanel) { ModuleBase_ISelection* aSelection = workshop()->selection(); // click on a point in sketch leads here with the point is highlighted, not yet selected QList aPreselection = aSelection->getHighlighted(); @@ -800,11 +792,10 @@ bool PartSet_Module::createWidgets(ModuleBase_Operation* theOperation, ObjectPtr anObject = aSelectedPrs->object(); FeaturePtr aFeature = ModelAPI_Feature::feature(anObject); - FeaturePtr anOpFeature = aFOperation->feature(); GeomShapePtr aShape = aSelectedPrs->shape(); // click on the digit of dimension constrain comes here // with an empty shape, so we need the check - if (aFeature == anOpFeature && aShape.get() && !aShape->isNull()) { + if (aFeature == theFeature && aShape.get() && !aShape->isNull()) { // if feature has only one result and shape of result is equal to selected shape // this attribute is not processed. It is a case of Sketch Point. if (aFeature->results().size() == 1) { @@ -816,8 +807,7 @@ bool PartSet_Module::createWidgets(ModuleBase_Operation* theOperation, AttributePtr anAttribute = PartSet_Tools::findAttributeBy2dPoint(anObject, aTDShape, mySketchMgr->activeSketch()); if (anAttribute.get()) { - QString aXmlRepr = aFOperation->getDescription()->xmlRepresentation(); - ModuleBase_WidgetFactory aFactory(aXmlRepr.toStdString(), workshop()); + ModuleBase_WidgetFactory aFactory(theXmlRepr.toStdString(), workshop()); const std::string anAttributeId = anAttribute->id(); aFactory.createWidget(aPropertyPanel->contentWidget(), anAttributeId); @@ -891,6 +881,10 @@ ModuleBase_ModelWidget* PartSet_Module::createWidgetByType(const std::string& th mySketchMgr, SLOT(onPlaneSelected(const std::shared_ptr&))); connect(aLabelWgt, SIGNAL(showConstraintToggled(int, bool)), mySketchMgr, SLOT(onShowConstraintsToggle(int, bool))); + connect(aLabelWgt, SIGNAL(showFreePoints(bool)), mySketchMgr, SLOT(onShowPoints(bool))); + connect(aLabelWgt, SIGNAL(autoConstraints(bool)), + sketchReentranceMgr(), SLOT(onAutoConstraints(bool))); + aLabelWgt->setShowPointsState(mySketchMgr->isShowFreePointsShown()); aWgt = aLabelWgt; } else if (theType == "sketch-2dpoint_selector") { PartSet_WidgetPoint2D* aPointWgt = new PartSet_WidgetPoint2D(theParent, aWorkshop, @@ -997,7 +991,7 @@ bool PartSet_Module::deleteObjects() // 3. start operation QString aDescription = aWorkshop->contextMenuMgr()->action("DELETE_CMD")->text(); - ModuleBase_OperationAction* anOpAction = new ModuleBase_OperationAction(aDescription, this); + ModuleBase_Operation* anOpAction = new ModuleBase_Operation(aDescription, this); // the active nested sketch operation should be aborted unconditionally // the Delete action should be additionally granted for the Sketch operation @@ -1197,75 +1191,75 @@ void PartSet_Module::deactivateCustomPrs(const ModuleBase_CustomizeFlag& theFlag } //****************************************************** -bool PartSet_Module::customisePresentation(ResultPtr theResult, AISObjectPtr thePrs, - std::shared_ptr theCustomPrs) -{ - bool aCustomized = false; - - XGUI_Workshop* aWorkshop = getWorkshop(); - XGUI_Displayer* aDisplayer = aWorkshop->displayer(); - ObjectPtr anObject = aDisplayer->getObject(thePrs); - if (!anObject) - return aCustomized; - - if (!theResult.get()) { - std::vector aColor; - XGUI_CustomPrs::getDefaultColor(anObject, true, aColor); - if (!aColor.empty()) { - aCustomized = thePrs->setColor(aColor[0], aColor[1], aColor[2]); - } - } - // customize dimentional constrains - sketchMgr()->customizePresentation(anObject); - - return aCustomized; -} - -//****************************************************** -bool PartSet_Module::afterCustomisePresentation(std::shared_ptr theResult, - AISObjectPtr thePrs, - GeomCustomPrsPtr theCustomPrs) -{ - bool aCustomized = false; - - XGUI_Workshop* aWorkshop = getWorkshop(); - XGUI_Displayer* aDisplayer = aWorkshop->displayer(); - ObjectPtr anObject = aDisplayer->getObject(thePrs); - if (!anObject) - return aCustomized; - - std::vector aColor; - bool aUseCustomColor = true; - if (aUseCustomColor) - myOverconstraintListener->getCustomColor(anObject, aColor); - // customize sketch symbol presentation - Handle(AIS_InteractiveObject) anAISIO = thePrs->impl(); - if (!anAISIO.IsNull()) { - if (!Handle(SketcherPrs_SymbolPrs)::DownCast(anAISIO).IsNull()) { - Handle(SketcherPrs_SymbolPrs) aPrs = Handle(SketcherPrs_SymbolPrs)::DownCast(anAISIO); - if (!aPrs.IsNull()) { - aPrs->SetCustomColor(aColor); - aCustomized = true; - } - } else if (!Handle(SketcherPrs_Coincident)::DownCast(anAISIO).IsNull()) { - Handle(SketcherPrs_Coincident) aPrs = Handle(SketcherPrs_Coincident)::DownCast(anAISIO); - if (!aPrs.IsNull()) { - aPrs->SetCustomColor(aColor); - aCustomized = true; - } - } - } - // customize sketch dimension constraint presentation - if (!aCustomized) { - if (!aColor.empty()) { // otherwise presentation has the default color - aCustomized = thePrs->setColor(aColor[0], aColor[1], aColor[2]); - } - } - return aCustomized; -} - -//****************************************************** -bool PartSet_Module::customizeObject(ObjectPtr theObject, const ModuleBase_CustomizeFlag& theFlag, +//bool PartSet_Module::customisePresentation(ResultPtr theResult, AISObjectPtr thePrs, +// std::shared_ptr theCustomPrs) +//{ +// bool aCustomized = false; +// +// XGUI_Workshop* aWorkshop = getWorkshop(); +// XGUI_Displayer* aDisplayer = aWorkshop->displayer(); +// ObjectPtr anObject = aDisplayer->getObject(thePrs); +// if (!anObject) +// return aCustomized; +// +// if (!theResult.get()) { +// std::vector aColor; +// XGUI_CustomPrs::getDefaultColor(anObject, true, aColor); +// if (!aColor.empty()) { +// aCustomized = thePrs->setColor(aColor[0], aColor[1], aColor[2]); +// } +// } +// // customize dimentional constrains +// sketchMgr()->customisePresentation(anObject); +// +// return aCustomized; +//} +// +////****************************************************** +//bool PartSet_Module::afterCustomisePresentation(std::shared_ptr theResult, +// AISObjectPtr thePrs, +// GeomCustomPrsPtr theCustomPrs) +//{ +// bool aCustomized = false; +// +// XGUI_Workshop* aWorkshop = getWorkshop(); +// XGUI_Displayer* aDisplayer = aWorkshop->displayer(); +// ObjectPtr anObject = aDisplayer->getObject(thePrs); +// if (!anObject) +// return aCustomized; +// +// std::vector aColor; +// bool aUseCustomColor = true; +// if (aUseCustomColor) +// myOverconstraintListener->getCustomColor(anObject, aColor); +// // customize sketch symbol presentation +// Handle(AIS_InteractiveObject) anAISIO = thePrs->impl(); +// if (!anAISIO.IsNull()) { +// if (!Handle(SketcherPrs_SymbolPrs)::DownCast(anAISIO).IsNull()) { +// Handle(SketcherPrs_SymbolPrs) aPrs = Handle(SketcherPrs_SymbolPrs)::DownCast(anAISIO); +// if (!aPrs.IsNull()) { +// aPrs->SetCustomColor(aColor); +// aCustomized = true; +// } +// } else if (!Handle(SketcherPrs_Coincident)::DownCast(anAISIO).IsNull()) { +// Handle(SketcherPrs_Coincident) aPrs = Handle(SketcherPrs_Coincident)::DownCast(anAISIO); +// if (!aPrs.IsNull()) { +// aPrs->SetCustomColor(aColor); +// aCustomized = true; +// } +// } +// } +// // customize sketch dimension constraint presentation +// if (!aCustomized) { +// if (!aColor.empty()) { // otherwise presentation has the default color +// aCustomized = thePrs->setColor(aColor[0], aColor[1], aColor[2]); +// } +// } +// return aCustomized; +//} + +//****************************************************** +bool PartSet_Module::customizeFeature(ObjectPtr theObject, const ModuleBase_CustomizeFlag& theFlag, const bool theUpdateViewer) { bool isRedisplayed = false; @@ -1310,11 +1304,101 @@ void PartSet_Module::onActiveDocPopup(const QPoint& thePnt) } //****************************************************** -Handle(AIS_InteractiveObject) PartSet_Module::createPresentation(const ResultPtr& theResult) +AISObjectPtr PartSet_Module::createPresentation(const ObjectPtr& theObject) { - return mySketchMgr->createPresentation(theResult); + Handle(AIS_InteractiveObject) anAISPrs = mySketchMgr->createPresentation(theObject); + if (anAISPrs.IsNull()) { + ResultPtr aResult = std::dynamic_pointer_cast(theObject); + if (aResult.get()) { + std::shared_ptr aShapePtr = ModelAPI_Tools::shape(aResult); + if (aShapePtr.get() != NULL) + anAISPrs = new ModuleBase_ResultPrs(aResult); + } + else { + FieldStepPtr aStep = + std::dynamic_pointer_cast(theObject); + if (aStep.get()) { + anAISPrs = new PartSet_FieldStepPrs(aStep); + } + } + } + AISObjectPtr anAIS; + if (!anAISPrs.IsNull()) { + Handle(AIS_Shape) aShapePrs = Handle(AIS_Shape)::DownCast(anAISPrs); + if (!aShapePrs.IsNull()) + ModuleBase_Tools::setPointBallHighlighting((AIS_Shape*)aShapePrs.get()); + + anAIS = AISObjectPtr(new GeomAPI_AISObject()); + anAIS->setImpl(new Handle(AIS_InteractiveObject)(anAISPrs)); + customizePresentation(theObject, anAIS); + } + return anAIS; +} + +//****************************************************** +void getResultColor(const ResultPtr& theResult, std::vector& theColor) +{ + ModelAPI_Tools::getColor(theResult, theColor); + if (theColor.empty()) + PartSet_Tools::getDefaultColor(theResult, false, theColor); } +//****************************************************** +double getResultDeflection(const ResultPtr& theResult) +{ + double aDeflection = ModelAPI_Tools::getDeflection(theResult); + if (aDeflection < 0) + aDeflection = PartSet_Tools::getDefaultDeflection(theResult); + return aDeflection; +} + +//****************************************************** +double getResultTransparency(const ResultPtr& theResult) +{ + double aTransparency = ModelAPI_Tools::getTransparency(theResult); + if (aTransparency < 0) + aTransparency = PartSet_Tools::getDefaultTransparency(); + return aTransparency; +} + + +//****************************************************** +void PartSet_Module::customizePresentation(const ObjectPtr& theObject, + const AISObjectPtr& thePrs) const +{ + if (mySketchMgr->isSketchStarted()) { + mySketchMgr->customizeSketchPresentation(theObject, thePrs); + } + else { + ResultPtr aResult = std::dynamic_pointer_cast(theObject); + if (aResult.get()) { + std::vector aColor; + getResultColor(aResult, aColor); + + SessionPtr aMgr = ModelAPI_Session::get(); + if (aMgr->activeDocument() != aResult->document()) { + QColor aQColor(aColor[0], aColor[1], aColor[2]); + QColor aNewColor = + QColor::fromHsvF(aQColor.hueF(), aQColor.saturationF() / 3., aQColor.valueF()); + aColor[0] = aNewColor.red(); + aColor[1] = aNewColor.green(); + aColor[2] = aNewColor.blue(); + } + thePrs->setColor(aColor[0], aColor[1], aColor[2]); + + thePrs->setDeflection(getResultDeflection(aResult)); + + thePrs->setTransparency(getResultTransparency(aResult)); + } + FeaturePtr aFeature = ModelAPI_Feature::feature(theObject); + if (aFeature.get()) { + if (aFeature->getKind() == SketchPlugin_Sketch::ID()) + thePrs->setWidth(2); + } + } +} + + //****************************************************** ObjectPtr PartSet_Module::findPresentedObject(const AISObjectPtr& theAIS) const { @@ -1467,16 +1551,20 @@ void PartSet_Module::processEvent(const std::shared_ptr& theMess XGUI_Displayer* aDisplayer = aWorkshop->displayer(); QObjectPtrList aObjects = aDisplayer->displayedObjects(); bool aHidden; + bool aUpdateViewer = false; foreach(ObjectPtr aObj, aObjects) { aHidden = !aObj->data() || !aObj->data()->isValid() || aObj->isDisabled() || (!aObj->isDisplayed()); - if (!aHidden) + if (!aHidden) { aDisplayer->redisplay(aObj, false); + aUpdateViewer = true; + } } - aDisplayer->updateViewer(); + if (aUpdateViewer) + aDisplayer->updateViewer(); // Update tree items if they are expanded if (needUpdate) { - aTreeView->viewport()->repaint(aTreeView->viewport()->rect()); + aTreeView->viewport()->update(aTreeView->viewport()->rect()); } } else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OBJECT_CREATED)) { std::shared_ptr aUpdMsg = @@ -1512,6 +1600,14 @@ void PartSet_Module::processEvent(const std::shared_ptr& theMess } } } + else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OBJECT_TO_REDISPLAY)) { + CompositeFeaturePtr aSketch = mySketchMgr->activeSketch(); + if (aSketch.get()) { + ModuleBase_Operation* anOperation = myWorkshop->currentOperation(); + if (PartSet_SketcherMgr::isSketchOperation(anOperation)) + mySketchMgr->previewSketchPlane()->createSketchPlane(aSketch, myWorkshop); + } + } } //****************************************************** @@ -1688,3 +1784,13 @@ ModuleBase_ITreeNode* PartSet_Module::rootNode() const { return myRoot; } + +//****************************************************** +void PartSet_Module::disableCustomMode(ModuleBase_CustomizeFlag theMode) { + myCustomPrs->disableCustomMode(theMode); +} + +//****************************************************** +void PartSet_Module::enableCustomModes() { + myCustomPrs->enableCustomModes(); +}