X-Git-Url: http://git.dev.opencascade.org/gitweb/?p=occt.git;a=blobdiff_plain;f=src%2FSelectMgr%2FSelectMgr_SelectionImageFiller.hxx;h=5d3f0909325bfe8e6b2fabed047ca71c20121e5b;hb=7f24b768c30df045ec4a7c712724195643081dfb;hpb=787ff2408c680462f82753ae698239cf5587fa98 diff --git a/src/SelectMgr/SelectMgr_SelectionImageFiller.hxx b/src/SelectMgr/SelectMgr_SelectionImageFiller.hxx new file mode 100644 index 0000000000..5d3f090932 --- /dev/null +++ b/src/SelectMgr/SelectMgr_SelectionImageFiller.hxx @@ -0,0 +1,82 @@ +// Copyright (c) 2020 OPEN CASCADE SAS +// +// This file is part of Open CASCADE Technology software library. +// +// This library is free software; you can redistribute it and/or modify it under +// the terms of the GNU Lesser General Public License version 2.1 as published +// by the Free Software Foundation, with special exception defined in the file +// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT +// distribution for complete text of the license and disclaimer of any warranty. +// +// Alternatively, this file may be used under the terms of Open CASCADE +// commercial license or contractual agreement. + +#ifndef _SelectMgr_SelectionImageFiller_HeaderFile +#define _SelectMgr_SelectionImageFiller_HeaderFile + +#include +#include +#include +#include +#include + +class SelectMgr_ViewerSelector; + +//! Abstract class for filling pixel with color. +//! This is internal tool for SelectMgr_ViewerSelector3d::ToPixMap(). +class SelectMgr_SelectionImageFiller : public Standard_Transient +{ +public: + //! Create filler of specified type. + static Handle(SelectMgr_SelectionImageFiller) CreateFiller (Image_PixMap& thePixMap, + SelectMgr_ViewerSelector* theSelector, + StdSelect_TypeOfSelectionImage theType); + +public: + + //! Main constructor. + SelectMgr_SelectionImageFiller (Image_PixMap& thePixMap, + SelectMgr_ViewerSelector* theSelector) + : myImage (&thePixMap), + myMainSel(theSelector) {} + + //! Fill pixel at specified position. + virtual void Fill (const Standard_Integer theCol, + const Standard_Integer theRow, + const Standard_Integer thePicked) = 0; + + //! Flush results into final image. + virtual void Flush() {} + +protected: + + //! Find the new unique random color. + void randomPastelColor (Quantity_Color& theColor) + { + for (;;) + { + nextRandomPastelColor (theColor); + if (myUniqueColors.Add (theColor)) + { + return; + } + } + } + + //! Fills the given color as random. + void nextRandomPastelColor (Quantity_Color& theColor) + { + theColor = Quantity_Color (Standard_Real(myBullardGenerator.NextInt() % 256) / 255.0, + Standard_Real(myBullardGenerator.NextInt() % 256) / 255.0, + Standard_Real(myBullardGenerator.NextInt() % 256) / 255.0, + Quantity_TOC_sRGB); + } + +protected: + Image_PixMap* myImage; + SelectMgr_ViewerSelector* myMainSel; + math_BullardGenerator myBullardGenerator; + NCollection_Map myUniqueColors; +}; + +#endif