X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPartSet%2FPartSet_Module.cpp;h=f3e9a285618d37d6655bfae5944201595ffc54a9;hb=a2e697d6efc2f36155ad2236ec52915b59cce738;hp=7859a701c54d767aa784f40617a6538a50141bf4;hpb=7512741ecf3ef77404f02fe88a4548807935b329;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_Module.cpp b/src/PartSet/PartSet_Module.cpp index 7859a701c..f3e9a2856 100644 --- a/src/PartSet/PartSet_Module.cpp +++ b/src/PartSet/PartSet_Module.cpp @@ -43,6 +43,10 @@ #include "PartSet_Filters.h" #include "PartSet_FilterInfinite.h" +#ifdef _DEBUG +#include +#endif + #include #include #include @@ -50,7 +54,6 @@ #include #include -#include #include #include #include @@ -63,8 +66,9 @@ #include #include #include -#include +#include +#include #include #include #include @@ -76,6 +80,7 @@ #include #include #include +#include #include #include @@ -85,7 +90,6 @@ #include #include #include -#include #include #include #include @@ -140,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) { @@ -191,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()); @@ -228,6 +248,13 @@ 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"); } //****************************************************** @@ -430,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); + //} } //****************************************************** @@ -441,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); } } @@ -454,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); } } @@ -524,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); @@ -747,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(); @@ -765,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) { @@ -781,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); @@ -857,6 +882,8 @@ ModuleBase_ModelWidget* PartSet_Module::createWidgetByType(const std::string& th 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") { @@ -964,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 @@ -1164,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; @@ -1277,21 +1304,101 @@ void PartSet_Module::onActiveDocPopup(const QPoint& thePnt) } //****************************************************** -Handle(AIS_InteractiveObject) PartSet_Module::createPresentation(const ObjectPtr& theObject) +AISObjectPtr PartSet_Module::createPresentation(const ObjectPtr& theObject) +{ + 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) { - ResultPtr aResult = std::dynamic_pointer_cast(theObject); - if (aResult.get()) - return mySketchMgr->createPresentation(aResult); + 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 { - FieldStepPtr aStep = - std::dynamic_pointer_cast(theObject); - if (aStep.get()) { - return new PartSet_FieldStepPrs(aStep); + 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); } } - return Handle(AIS_InteractiveObject)(); } + //****************************************************** ObjectPtr PartSet_Module::findPresentedObject(const AISObjectPtr& theAIS) const { @@ -1444,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 =