From 276427c6a2ee41062c1dbe16926322e241233c85 Mon Sep 17 00:00:00 2001 From: vsr Date: Tue, 12 Oct 2021 15:36:07 +0300 Subject: [PATCH] bos #26450 Random color --- src/ModelHighAPI/ModelHighAPI.i | 3 ++ src/ModelHighAPI/ModelHighAPI_Selection.cpp | 21 +++++++-- src/ModelHighAPI/ModelHighAPI_Selection.h | 2 +- src/ModelHighAPI/Test/TestSetColors.py | 48 +++++++++++++++++++ src/ModelHighAPI/tests.set | 1 + src/XGUI/XGUI_ColorDialog.cpp | 52 +++++++++++++++++---- 6 files changed, 113 insertions(+), 14 deletions(-) create mode 100644 src/ModelHighAPI/Test/TestSetColors.py diff --git a/src/ModelHighAPI/ModelHighAPI.i b/src/ModelHighAPI/ModelHighAPI.i index 76f6c9f0a..82af134c6 100644 --- a/src/ModelHighAPI/ModelHighAPI.i +++ b/src/ModelHighAPI/ModelHighAPI.i @@ -52,6 +52,9 @@ // directors %feature("director") ModelHighAPI_Dumper; +// functions with named parameters +%feature("kwargs") setColor; + // renamed methods %rename(__print__) ModelHighAPI_Dumper::operator<<; diff --git a/src/ModelHighAPI/ModelHighAPI_Selection.cpp b/src/ModelHighAPI/ModelHighAPI_Selection.cpp index 67543eedc..3b45898cd 100644 --- a/src/ModelHighAPI/ModelHighAPI_Selection.cpp +++ b/src/ModelHighAPI/ModelHighAPI_Selection.cpp @@ -25,7 +25,7 @@ #include #include #include - +#include #include //-------------------------------------------------------------------------------------- @@ -209,7 +209,7 @@ std::wstring ModelHighAPI_Selection::name() const return std::wstring(); } -void ModelHighAPI_Selection::setColor(int theRed, int theGreen, int theBlue) +void ModelHighAPI_Selection::setColor(int theRed, int theGreen, int theBlue, bool random) { if (myVariantType != VT_ResultSubShapePair || !myResultSubShapePair.first.get()) return; @@ -217,9 +217,20 @@ void ModelHighAPI_Selection::setColor(int theRed, int theGreen, int theBlue) AttributeIntArrayPtr aColor = myResultSubShapePair.first->data()->intArray(ModelAPI_Result::COLOR_ID()); aColor->setSize(3); - aColor->setValue(0, theRed); - aColor->setValue(1, theGreen); - aColor->setValue(2, theBlue); + + if (random) + { + std::vector aValues; + ModelAPI_Tools::findRandomColor(aValues); + for (int anIndex = 0; anIndex < 3; ++anIndex) + aColor->setValue(anIndex, aValues[anIndex]); + } + else + { + aColor->setValue(0, theRed); + aColor->setValue(1, theGreen); + aColor->setValue(2, theBlue); + } } void ModelHighAPI_Selection::setDeflection(double theValue) diff --git a/src/ModelHighAPI/ModelHighAPI_Selection.h b/src/ModelHighAPI/ModelHighAPI_Selection.h index 93f6690a9..1b812ad7d 100644 --- a/src/ModelHighAPI/ModelHighAPI_Selection.h +++ b/src/ModelHighAPI/ModelHighAPI_Selection.h @@ -134,7 +134,7 @@ public: /// Change result's color MODELHIGHAPI_EXPORT - void setColor(int theRed, int theGreen, int theBlue); + void setColor(int theRed = 0, int theGreen = 0, int theBlue = 0, bool random = false); /// Change result's deflection MODELHIGHAPI_EXPORT diff --git a/src/ModelHighAPI/Test/TestSetColors.py b/src/ModelHighAPI/Test/TestSetColors.py new file mode 100644 index 000000000..c2f83bd1f --- /dev/null +++ b/src/ModelHighAPI/Test/TestSetColors.py @@ -0,0 +1,48 @@ +# Copyright (C) 2014-2021 CEA/DEN, EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +from salome.shaper import model + +model.begin() +partSet = model.moduleDocument() + +### Create Part +Part_1 = model.addPart(partSet) +Part_1_doc = Part_1.document() + +### Create Box +Box_1 = model.addBox(Part_1_doc, 10, 10, 10) +Box_1.result().setColor(random=True) +assert(Box_1.result().resultSubShapePair()[0].data().intArray("Color").isInitialized()) + +### Create next Box +Box_2 = model.addBox(Part_1_doc, 10, 10, 10) +aRed = 60 +aGreen = 200 +aBlue = 100 +Box_2.result().setColor(aRed, aGreen, aBlue) + +assert(Box_2.result().resultSubShapePair()[0].data().intArray("Color").isInitialized()) +assert(Box_2.result().resultSubShapePair()[0].data().intArray("Color").value(0) == aRed) +assert(Box_2.result().resultSubShapePair()[0].data().intArray("Color").value(1) == aGreen) +assert(Box_2.result().resultSubShapePair()[0].data().intArray("Color").value(2) == aBlue) + +model.end() + +assert(model.checkPythonDump()) diff --git a/src/ModelHighAPI/tests.set b/src/ModelHighAPI/tests.set index 626f23807..9a97edbc1 100644 --- a/src/ModelHighAPI/tests.set +++ b/src/ModelHighAPI/tests.set @@ -30,4 +30,5 @@ SET(TEST_NAMES Test19990_1.py Test19990_2.py Test20167.py + TestSetColors.py ) diff --git a/src/XGUI/XGUI_ColorDialog.cpp b/src/XGUI/XGUI_ColorDialog.cpp index a37df57fb..46597d447 100644 --- a/src/XGUI/XGUI_ColorDialog.cpp +++ b/src/XGUI/XGUI_ColorDialog.cpp @@ -28,6 +28,42 @@ #include #include #include +#include +#include + +namespace +{ + class RadioButton: public QRadioButton + { + QWidget* myBuddy; + public: + RadioButton(const QString& text, QWidget* buddy = nullptr, QWidget* parent = nullptr): + QRadioButton(text, parent), myBuddy(buddy) + { + if (buddy != nullptr) + { + buddy->setEnabled(isEnabled()); + buddy->installEventFilter(this); + } + } + RadioButton(QWidget* buddy = nullptr, QWidget* parent = nullptr): + RadioButton(QString(), buddy, parent) {} + + bool eventFilter(QObject* sender, QEvent* event) + { + if (myBuddy != nullptr && sender == myBuddy && event->type() == QEvent::MouseButtonPress) + setChecked(true); + return QRadioButton::eventFilter(sender, event); + } + + void changeEvent(QEvent* event) + { + if (myBuddy != nullptr && event->type() == QEvent::EnabledChange) + myBuddy->setEnabled(isEnabled()); + QRadioButton::changeEvent(event); + } + }; +} XGUI_ColorDialog::XGUI_ColorDialog(QWidget* theParent) : QDialog(theParent, Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint) @@ -35,8 +71,13 @@ XGUI_ColorDialog::XGUI_ColorDialog(QWidget* theParent) setWindowTitle(tr("Color")); QGridLayout* aLay = new QGridLayout(this); - QRadioButton* aRandomChoiceBtn = new QRadioButton(this); - QRadioButton* aColorChoiceBtn = new QRadioButton(this); + myColorButton = new QtxColorButton(this); + myColorButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + + QLabel* aRandomLabel = new QLabel(tr("Random"), this); + + QRadioButton* aColorChoiceBtn = new RadioButton(myColorButton, this); + QRadioButton* aRandomChoiceBtn = new RadioButton(aRandomLabel, this); aColorChoiceBtn->setChecked(true); myButtonGroup = new QButtonGroup(this); myButtonGroup->setExclusive(true); @@ -44,13 +85,8 @@ XGUI_ColorDialog::XGUI_ColorDialog(QWidget* theParent) myButtonGroup->addButton(aRandomChoiceBtn, 1); aLay->addWidget(aColorChoiceBtn, 0, 0); - aLay->addWidget(aRandomChoiceBtn, 1, 0); - - myColorButton = new QtxColorButton(this); - myColorButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); aLay->addWidget(myColorButton, 0, 1); - - QLabel* aRandomLabel = new QLabel(tr("Random"), this); + aLay->addWidget(aRandomChoiceBtn, 1, 0); aLay->addWidget(aRandomLabel, 1, 1); QDialogButtonBox* aButtons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, -- 2.39.2