X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPartSet%2FPartSet_Module.cpp;h=24070e7a7e180221c133e238fcfe7e16b1ce0e2f;hb=21bf48561caff37cdfe6d875c690a51d81458f30;hp=cc7c8b7f8e478618d6eaf539ba675bae91f5cffd;hpb=322bc04c30609d50bd763a8dbe014284d0f0e8d6;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_Module.cpp b/src/PartSet/PartSet_Module.cpp index cc7c8b7f8..24070e7a7 100644 --- a/src/PartSet/PartSet_Module.cpp +++ b/src/PartSet/PartSet_Module.cpp @@ -22,6 +22,7 @@ #include "PartSet_Validators.h" #include "PartSet_Tools.h" #include "PartSet_PreviewPlanes.h" +#include "PartSet_WidgetBSplinePoints.h" #include "PartSet_WidgetPoint2d.h" #include "PartSet_WidgetPoint2DFlyout.h" #include "PartSet_WidgetShapeSelector.h" @@ -39,6 +40,7 @@ #include "PartSet_OverconstraintListener.h" #include "PartSet_TreeNodes.h" #include "PartSet_FieldStepPrs.h" +#include "PartSet_BSplineWidget.h" #include "PartSet_Filters.h" #include "PartSet_FilterInfinite.h" @@ -54,7 +56,6 @@ #include #include -#include #include #include #include @@ -67,8 +68,9 @@ #include #include #include -#include +#include +#include #include #include #include @@ -80,6 +82,7 @@ #include #include #include +#include #include #include @@ -89,7 +92,6 @@ #include #include #include -#include #include #include #include @@ -191,6 +193,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()); @@ -232,6 +254,9 @@ PartSet_Module::PartSet_Module(ModuleBase_IWorkshop* theWshop) 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"); } //****************************************************** @@ -530,7 +555,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); @@ -781,12 +806,12 @@ bool PartSet_Module::createWidgets(const FeaturePtr& theFeature, const QString& return aProcessed; } const TopoDS_Shape& aTDShape = aShape->impl(); - AttributePtr anAttribute = PartSet_Tools::findAttributeBy2dPoint(anObject, aTDShape, - mySketchMgr->activeSketch()); - if (anAttribute.get()) { + std::pair anAttribute = + PartSet_Tools::findAttributeBy2dPoint(anObject, aTDShape, mySketchMgr->activeSketch()); + if (anAttribute.first.get()) { ModuleBase_WidgetFactory aFactory(theXmlRepr.toStdString(), workshop()); - const std::string anAttributeId = anAttribute->id(); + const std::string anAttributeId = anAttribute.first->id(); aFactory.createWidget(aPropertyPanel->contentWidget(), anAttributeId); theWidgets = aFactory.getModelWidgets(); @@ -892,16 +917,27 @@ ModuleBase_ModelWidget* PartSet_Module::createWidgetByType(const std::string& th aPointSelectorWgt->setSketcher(mySketchMgr->activeSketch()); aWgt = aPointSelectorWgt; } + else if (theType == "sketch-bspline_selector") { + PartSet_WidgetBSplinePoints* aBSplineWgt = + new PartSet_WidgetBSplinePoints(theParent, aWorkshop, theWidgetApi); + aBSplineWgt->setSketch(mySketchMgr->activeSketch()); + aWgt = aBSplineWgt; + } else if (theType == WDG_DOUBLEVALUE_EDITOR) { aWgt = new PartSet_WidgetEditor(theParent, aWorkshop, theWidgetApi); } else if (theType == "export_file_selector") { aWgt = new PartSet_WidgetFileSelector(theParent, aWorkshop, theWidgetApi); } else if (theType == "sketch_launcher") { aWgt = new PartSet_WidgetSketchCreator(theParent, this, theWidgetApi); - } else if (theType == "module_choice") { + } + else if (theType == "module_choice") { aWgt = new ModuleBase_WidgetChoice(theParent, theWidgetApi); connect(aWgt, SIGNAL(itemSelected(ModuleBase_ModelWidget*, int)), - this, SLOT(onChoiceChanged(ModuleBase_ModelWidget*, int))); + this, SLOT(onChoiceChanged(ModuleBase_ModelWidget*, int))); + } else if (theType == "bspline-panel") { + PartSet_BSplineWidget* aPanel = new PartSet_BSplineWidget(theParent, theWidgetApi); + //aPanel->setFeature(theFeature); + aWgt = aPanel; } return aWgt; } @@ -968,7 +1004,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 @@ -1168,75 +1204,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; @@ -1281,21 +1317,101 @@ void PartSet_Module::onActiveDocPopup(const QPoint& thePnt) } //****************************************************** -Handle(AIS_InteractiveObject) PartSet_Module::createPresentation(const ObjectPtr& theObject) +AISObjectPtr PartSet_Module::createPresentation(const ObjectPtr& theObject) { - ResultPtr aResult = std::dynamic_pointer_cast(theObject); - if (aResult.get()) - return mySketchMgr->createPresentation(aResult); + 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->isObjectOfSketch(theObject)) { + 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 { @@ -1625,8 +1741,9 @@ AttributePtr PartSet_Module::findAttribute(const ObjectPtr& theObject, if (aGeomShape.get()) { TopoDS_Shape aTDSShape = aGeomShape->impl(); - return PartSet_Tools::findAttributeBy2dPoint(theObject, aTDSShape, - mySketchMgr->activeSketch()); + std::pair anAttrAndIndex = + PartSet_Tools::findAttributeBy2dPoint(theObject, aTDSShape, mySketchMgr->activeSketch()); + return anAttrAndIndex.first; } return anAttribute; }