From e7efb0967b2dd3836cbf3859911f337445e5f8b1 Mon Sep 17 00:00:00 2001 From: mpv Date: Wed, 7 Sep 2016 11:48:08 +0300 Subject: [PATCH] Removed GUI-specific features from the ModelAPI tools. --- src/ModelAPI/ModelAPI_Tools.cpp | 95 -------------------------------- src/ModelAPI/ModelAPI_Tools.h | 6 -- src/XGUI/XGUI_ColorDialog.cpp | 97 ++++++++++++++++++++++++++++++++- 3 files changed, 96 insertions(+), 102 deletions(-) diff --git a/src/ModelAPI/ModelAPI_Tools.cpp b/src/ModelAPI/ModelAPI_Tools.cpp index 4e094e611..36fd94b66 100755 --- a/src/ModelAPI/ModelAPI_Tools.cpp +++ b/src/ModelAPI/ModelAPI_Tools.cpp @@ -202,101 +202,6 @@ bool findVariable(FeaturePtr theSearcher, const std::string& theName, double& ou return false; } -static std::map > myColorMap; - -void appendValues(std::vector& theRGB, const int theRed, const int theGreen, const int theBlue) -{ - theRGB.push_back(theRed); - theRGB.push_back(theGreen); - theRGB.push_back(theBlue); -} - -bool containsValues(std::map >& theColorMap, std::vector& theValues) -{ - std::map >::const_iterator anIt = theColorMap.begin(), aLast = theColorMap.end(); - bool isFound = false; - for (; anIt != aLast && !isFound; anIt++) { - std::vector aValues = anIt->second; - isFound = aValues[0] == theValues[0] && - aValues[1] == theValues[1] && - aValues[2] == theValues[2]; - } - return isFound; -} - -std::vector HSVtoRGB(int theH, int theS, int theV) -{ - std::vector aRGB; - if (theH < 0 || theH > 360 || - theS < 0 || theS > 100 || - theV < 0 || theV > 100) - return aRGB; - - int aHi = (int)theH/60; - - double aV = theV; - double aVmin = (100 - theS)*theV/100; - - double anA = (theV - aVmin)* (theH % 60) / 60; - - double aVinc = aVmin + anA; - double aVdec = theV - anA; - - double aPercentToValue = 255./100; - int aV_int = (int)(aV*aPercentToValue); - int aVinc_int = (int)(aVinc*aPercentToValue); - int aVmin_int = (int)(aVmin*aPercentToValue); - int aVdec_int = (int)(aVdec*aPercentToValue); - - switch(aHi) { - case 0: appendValues(aRGB, aV_int, aVinc_int, aVmin_int); break; - case 1: appendValues(aRGB, aVdec_int, aV_int, aVmin_int); break; - case 2: appendValues(aRGB, aVmin_int, aV_int, aVinc_int); break; - case 3: appendValues(aRGB, aVmin_int, aVdec_int, aV_int); break; - case 4: appendValues(aRGB, aVinc_int, aVmin_int, aV_int); break; - case 5: appendValues(aRGB, aV_int, aVmin_int, aVdec_int); break; - default: break; - } - return aRGB; -} - - -void fillColorMap() -{ - if (!myColorMap.empty()) - return; - - int i = 0; - for (int s = 100; s > 0; s = s - 50) - { - for (int v = 100; v >= 40; v = v - 20) - { - for (int h = 0; h < 359 ; h = h + 60) - { - std::vector aColor = HSVtoRGB(h, s, v); - if (containsValues(myColorMap, aColor)) - continue; - myColorMap[i] = aColor; - i++; - } - } - } -} - -void findRandomColor(std::vector& theValues) -{ - theValues.clear(); - if (myColorMap.empty()) { - fillColorMap(); - } - - size_t aSize = myColorMap.size(); - int anIndex = rand() % aSize; - if (myColorMap.find(anIndex) != myColorMap.end()) { - theValues = myColorMap.at(anIndex); - } -} - ResultPtr findPartResult(const DocumentPtr& theMain, const DocumentPtr& theSub) { if (theMain != theSub) { // to optimize and avoid of crash on partset document close (don't touch the sub-document structure) diff --git a/src/ModelAPI/ModelAPI_Tools.h b/src/ModelAPI/ModelAPI_Tools.h index 3133d3794..4d1c7a65f 100755 --- a/src/ModelAPI/ModelAPI_Tools.h +++ b/src/ModelAPI/ModelAPI_Tools.h @@ -58,12 +58,6 @@ MODELAPI_EXPORT bool findVariable(FeaturePtr theSearcher, const std::string& the double& outValue, ResultParameterPtr& theParam, const DocumentPtr& theDocument = DocumentPtr()); -/*! - * Returns the values of the next random color. The values are in range [0, 255] - * \param theValues a container of component of RGB value: red, green, blue - */ -MODELAPI_EXPORT void findRandomColor(std::vector& theValues); - /*! * Searches for Part result that contains the reference to the given document. * The result must be presented in the tree. diff --git a/src/XGUI/XGUI_ColorDialog.cpp b/src/XGUI/XGUI_ColorDialog.cpp index 9170958f2..7fa7cc004 100644 --- a/src/XGUI/XGUI_ColorDialog.cpp +++ b/src/XGUI/XGUI_ColorDialog.cpp @@ -73,12 +73,107 @@ std::vector XGUI_ColorDialog::getColor() const return aValues; } +// contains global cash for integer index of the color -> RGB of this color +static std::map > myColorMap; + +void appendValues(std::vector& theRGB, const int theRed, const int theGreen, const int theBlue) +{ + theRGB.push_back(theRed); + theRGB.push_back(theGreen); + theRGB.push_back(theBlue); +} + +bool containsValues(std::map >& theColorMap, std::vector& theValues) +{ + std::map >::const_iterator anIt = theColorMap.begin(), aLast = theColorMap.end(); + bool isFound = false; + for (; anIt != aLast && !isFound; anIt++) { + std::vector aValues = anIt->second; + isFound = aValues[0] == theValues[0] && + aValues[1] == theValues[1] && + aValues[2] == theValues[2]; + } + return isFound; +} + +std::vector HSVtoRGB(int theH, int theS, int theV) +{ + std::vector aRGB; + if (theH < 0 || theH > 360 || + theS < 0 || theS > 100 || + theV < 0 || theV > 100) + return aRGB; + + int aHi = (int)theH/60; + + double aV = theV; + double aVmin = (100 - theS)*theV/100; + + double anA = (theV - aVmin)* (theH % 60) / 60; + + double aVinc = aVmin + anA; + double aVdec = theV - anA; + + double aPercentToValue = 255./100; + int aV_int = (int)(aV*aPercentToValue); + int aVinc_int = (int)(aVinc*aPercentToValue); + int aVmin_int = (int)(aVmin*aPercentToValue); + int aVdec_int = (int)(aVdec*aPercentToValue); + + switch(aHi) { + case 0: appendValues(aRGB, aV_int, aVinc_int, aVmin_int); break; + case 1: appendValues(aRGB, aVdec_int, aV_int, aVmin_int); break; + case 2: appendValues(aRGB, aVmin_int, aV_int, aVinc_int); break; + case 3: appendValues(aRGB, aVmin_int, aVdec_int, aV_int); break; + case 4: appendValues(aRGB, aVinc_int, aVmin_int, aV_int); break; + case 5: appendValues(aRGB, aV_int, aVmin_int, aVdec_int); break; + default: break; + } + return aRGB; +} + + +void fillColorMap() +{ + if (!myColorMap.empty()) + return; + + int i = 0; + for (int s = 100; s > 0; s = s - 50) + { + for (int v = 100; v >= 40; v = v - 20) + { + for (int h = 0; h < 359 ; h = h + 60) + { + std::vector aColor = HSVtoRGB(h, s, v); + if (containsValues(myColorMap, aColor)) + continue; + myColorMap[i] = aColor; + i++; + } + } + } +} + +void findRandomColor(std::vector& theValues) +{ + theValues.clear(); + if (myColorMap.empty()) { + fillColorMap(); + } + + size_t aSize = myColorMap.size(); + int anIndex = rand() % aSize; + if (myColorMap.find(anIndex) != myColorMap.end()) { + theValues = myColorMap.at(anIndex); + } +} std::vector XGUI_ColorDialog::getRandomColor() const { std::vector aValues; if (isRandomColor()) { - ModelAPI_Tools::findRandomColor(aValues); + findRandomColor(aValues); } return aValues; } -- 2.39.2