0025785: Visualization - introduce AIS_ColorScale presentation for Color Scale
authorisz <isz@opencascade.com>
Tue, 4 Aug 2015 10:00:49 +0000 (13:00 +0300)
committerski <ski@opencascade.com>
Thu, 13 Aug 2015 08:00:58 +0000 (11:00 +0300)
Color scale is implemented on AIS. Draw command vcolorscale now works with AIS_ColorScale.
In a qt sample VoxelDemo there was added a field AIS_ColorScale myColorsScale to control a color scale. Method displayColorScale and other methods were changed in order to work with this field.

29 files changed:
samples/qt/VoxelDemo/inc/Application.h
samples/qt/VoxelDemo/src/Application.cpp
src/AIS/AIS_ColorScale.cxx [new file with mode: 0644]
src/AIS/AIS_ColorScale.hxx [moved from src/Aspect/Aspect_ColorScale.hxx with 69% similarity]
src/AIS/FILES [changed mode: 0755->0644]
src/Aspect/Aspect_ColorScale.cxx [deleted file]
src/Aspect/FILES
src/QABugs/QABugs_11.cxx
src/V3d/FILES
src/V3d/V3d_ColorScale.cxx [deleted file]
src/V3d/V3d_ColorScale.hxx [deleted file]
src/V3d/V3d_ColorScaleLayerItem.cxx [deleted file]
src/V3d/V3d_ColorScaleLayerItem.hxx [deleted file]
src/V3d/V3d_LayerMgr.cxx
src/V3d/V3d_LayerMgr.hxx
src/V3d/V3d_View.cxx
src/V3d/V3d_View.hxx
src/V3d/V3d_View_1.cxx
src/V3d/V3d_View_2.cxx
src/V3d/V3d_View_3.cxx
src/V3d/V3d_View_4.cxx
src/V3d/V3d_View_5.cxx
src/V3d/V3d_View_Print.cxx
src/ViewerTest/ViewerTest_ViewerCommands.cxx
tests/3rdparty/fonts/A1
tests/bugs/vis/bug21091_1
tests/bugs/vis/bug22819
tests/bugs/vis/bug25027
tests/bugs/vis/bug25136

index 59e63ea..4811601 100755 (executable)
@@ -2,6 +2,7 @@
 #define APPLICATION_H
 
 #include <qmainwindow.h>
+#include <AIS_ColorScale.hxx>
 #include <AIS_Shape.hxx>
 #include <Voxel_Prs.hxx>
 #include <Voxel_BoolDS.hxx>
@@ -93,6 +94,7 @@ private:
        Handle(Voxel_Prs) myVoxels;
        Voxel_BoolDS* myBoolVoxels;
        Voxel_ColorDS* myColorVoxels;
+  Handle(AIS_ColorScale) myColorScale;
        int myNbX;
        int myNbY;
        int myNbZ;
index 1691c82..f6148f8 100644 (file)
@@ -33,7 +33,6 @@
 #include <BRepPrimAPI_MakeTorus.hxx>
 #include <BRepPrimAPI_MakeSphere.hxx>
 #include <BRepPrimAPI_MakeCylinder.hxx>
-#include <Aspect_ColorScale.hxx>
 
 #include <Windows.h>
 
@@ -311,6 +310,10 @@ Application::Application()
 
        myBoolVoxels = 0;
        myColorVoxels = 0;
+  myColorScale = new AIS_ColorScale;
+  myColorScale->SetZLayer (Graphic3d_ZLayerId_TopOSD);
+  myColorScale->SetTransformPersistence (Graphic3d_TMF_2d, gp_Pnt (-1,-1,0));
+
 
     myDisplayedXMin = -DBL_MAX;
     myDisplayedXMax =  DBL_MAX;
@@ -437,7 +440,7 @@ void Application::open()
     if (myColorVoxels)
         displayColorScale();
     else
-        myViewer->getView()->ColorScaleErase();
+      myViewer->getIC()->Erase(myColorScale);
 
        myViewer->getView()->FitAll();
 
@@ -858,7 +861,7 @@ void Application::testROctBoolDS()
     myVoxels->SetTriangulation(empty);
     myVoxels->SetROctBoolVoxels(ds2);
     myViewer->getIC()->Display(myVoxels, false);
-    myViewer->getView()->ColorScaleErase();
+    myViewer->getIC()->Erase(myColorScale);
        myViewer->getView()->FitAll();
     myViewer->getSelector().SetVoxels(*ds2);
 }
@@ -1540,7 +1543,7 @@ void Application::convert(const int ivoxel)
     if (myColorVoxels)
         displayColorScale();
     else
-        myViewer->getView()->ColorScaleErase();
+      myViewer->getIC()->Erase(myColorScale);
 
        myViewer->getView()->FitAll();
 }
@@ -1718,7 +1721,7 @@ void Application::display(Voxel_VoxelDisplayMode mode)
     if (myColorVoxels)
         displayColorScale();
     else
-        myViewer->getView()->ColorScaleErase();
+        myViewer->getIC()->Erase(myColorScale);
 
     myViewer->getIC()->Redisplay(myVoxels, true);
 }
@@ -1745,16 +1748,19 @@ void Application::displayNearestBoxes()
 
 void Application::displayColorScale()
 {
-       Handle(Aspect_ColorScale) color_scale = myViewer->getView()->ColorScale();
-       if (!color_scale.IsNull())
+  if (myColorScale.IsNull())
+  {
+    myColorScale = new AIS_ColorScale;
+  }
+       if (!myColorScale.IsNull())
        {
         int nb_colors = 1<<4 /* 4 bits */;
-        color_scale->SetRange(0, nb_colors - 1);
-        color_scale->SetNumberOfIntervals(nb_colors);
-               color_scale->SetPosition(0.01, 0.5 - 0.01);
-               color_scale->SetSize(0.5 - 0.01, 0.5 - 0.01);
+        myColorScale->SetRange(0, nb_colors - 1);
+        myColorScale->SetNumberOfIntervals(nb_colors);
+               myColorScale->SetPosition(0.01, 0.5 - 0.01);
+               myColorScale->SetSize(0.5 - 0.01, 0.5 - 0.01);
        }
-    myViewer->getView()->ColorScaleDisplay();
+  myViewer->getIC()->Display(myColorScale);
 }
 
 void Application::displayWaves()
@@ -1865,7 +1871,7 @@ void Application::initPrs()
         for (int icolor = 0; icolor < nb_colors; icolor++)
         {
             Quantity_Color color;
-            Aspect_ColorScale::FindColor(icolor, 0, nb_colors - 1, nb_colors, color);
+            AIS_ColorScale::FindColor(icolor, 0, nb_colors - 1, nb_colors, color);
             colors->SetValue(icolor, color);
         }
         myVoxels->SetColors(colors);
diff --git a/src/AIS/AIS_ColorScale.cxx b/src/AIS/AIS_ColorScale.cxx
new file mode 100644 (file)
index 0000000..562f70e
--- /dev/null
@@ -0,0 +1,785 @@
+// Created on: 2015-02-03
+// Copyright (c) 2015 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.
+
+#include <AIS_ColorScale.hxx>
+#include <AIS_InteractiveContext.hxx>
+#include <Aspect_TypeOfColorScaleData.hxx>
+#include <Aspect_TypeOfColorScalePosition.hxx>
+#include <Aspect_Window.hxx>
+#include <Geom_Line.hxx>
+#include <GeomAdaptor_Curve.hxx>
+#include <Graphic3d_ArrayOfPolygons.hxx>
+#include <Graphic3d_ArrayOfPolylines.hxx>
+#include <Graphic3d_AspectFillArea3d.hxx>
+#include <Graphic3d_AspectText3d.hxx>
+#include <Graphic3d_GraphicDriver.hxx>
+#include <Graphic3d_ArrayOfTriangles.hxx>
+#include <Prs3d_LineAspect.hxx>
+#include <Prs3d_Root.hxx>
+#include <Prs3d_ShadingAspect.hxx>
+#include <Prs3d_Text.hxx>
+#include <Prs3d_TextAspect.hxx>
+#include <SelectMgr_EntityOwner.hxx>
+#include <SelectMgr_Selection.hxx>
+#include <Select3D_SensitiveBox.hxx>
+#include <Select3D_SensitiveSegment.hxx>
+#include <StdPrs_Curve.hxx>
+#include <V3d_Viewer.hxx>
+#include <V3d_View.hxx>
+
+
+//=======================================================================
+//function : AIS_ColorScale
+//purpose  :
+//=======================================================================
+AIS_ColorScale::AIS_ColorScale() :
+myMin (0.0),
+myMax (1.0),
+myTitle (""),
+myFormat ("%.4g"),
+myInterval (10),
+myColorType (Aspect_TOCSD_AUTO),
+myLabelType (Aspect_TOCSD_AUTO),
+myAtBorder (Standard_True),
+myReversed (Standard_False),
+myLabelPos (Aspect_TOCSP_RIGHT),
+myTitlePos (Aspect_TOCSP_CENTER),
+myXPos (0),
+myYPos (0),
+myWidth (0.2),
+myHeight (1),
+myTextHeight(20)
+{
+}
+
+//=======================================================================
+//function : GetRange
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::GetRange (Standard_Real& theMin, Standard_Real& theMax) const
+{
+  theMin = myMin;
+  theMax = myMax;
+}
+
+//=======================================================================
+//function : GetLabel
+//purpose  :
+//=======================================================================
+TCollection_ExtendedString AIS_ColorScale::GetLabel (const Standard_Integer theIndex) const
+{
+  if (GetLabelType() == Aspect_TOCSD_USER)
+  {
+    if (theIndex < 0
+     || theIndex >= myLabels.Length())
+    {
+      return "";
+    }
+
+    return myLabels.Value (theIndex + 1);
+  }
+
+  const Standard_Real           aVal    = GetNumber (theIndex);
+  const TCollection_AsciiString aFormat = Format();
+  Standard_Character aBuf[1024];
+  sprintf (aBuf, aFormat.ToCString(), aVal);
+  return TCollection_ExtendedString (aBuf);
+}
+
+//=======================================================================
+//function : GetColor
+//purpose  :
+//=======================================================================
+Quantity_Color AIS_ColorScale::GetColor (const Standard_Integer theIndex) const
+{
+  if (GetColorType() == Aspect_TOCSD_USER)
+  {
+    if (theIndex < 0
+     || theIndex >= myColors.Length())
+    {
+      return Quantity_Color();
+    }
+
+    return myColors.Value (theIndex + 1);
+  }
+  return Quantity_Color (HueFromValue (theIndex, 0, GetNumberOfIntervals() - 1), 1.0, 1.0, Quantity_TOC_HLS);
+}
+
+//=======================================================================
+//function : GetLabels
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::GetLabels (TColStd_SequenceOfExtendedString& theLabels) const
+{
+  theLabels.Clear();
+  for (Standard_Integer i = 1; i <= myLabels.Length(); i++)
+    theLabels.Append (myLabels.Value (i));
+}
+
+//=======================================================================
+//function : GetColors
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::GetColors (Aspect_SequenceOfColor& theColors) const
+{
+  theColors.Clear();
+  for (Standard_Integer i = 1; i <= myColors.Length(); i++)
+    theColors.Append (myColors.Value (i));
+}
+
+//=======================================================================
+//function : SetMin
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::SetMin (const Standard_Real theMin)
+{
+  SetRange (theMin, GetMax());
+}
+
+//=======================================================================
+//function : SetMax
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::SetMax (const Standard_Real theMax)
+{
+  SetRange (GetMin(), theMax);
+}
+
+//=======================================================================
+//function : SetRange
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::SetRange (const Standard_Real theMin, const Standard_Real theMax)
+{
+  if (myMin == theMin && myMax == theMax)
+    return;
+
+  myMin = Min (theMin, theMax);
+  myMax = Max (theMin, theMax);
+}
+
+//=======================================================================
+//function : SetLabelType
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::SetLabelType (const Aspect_TypeOfColorScaleData theType)
+{
+  if (myLabelType == theType)
+    return;
+
+  myLabelType = theType;
+}
+
+//=======================================================================
+//function : SetColorType
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::SetColorType (const Aspect_TypeOfColorScaleData theType)
+{
+  if (myColorType == theType)
+    return;
+
+  myColorType = theType;
+}
+
+//=======================================================================
+//function : SetNumberOfIntervals
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::SetNumberOfIntervals (const Standard_Integer theNum)
+{
+  if (myInterval == theNum || theNum < 1)
+    return;
+
+  myInterval = theNum;
+}
+
+//=======================================================================
+//function : SetTitle
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::SetTitle (const TCollection_ExtendedString& theTitle)
+{
+  if (myTitle == theTitle)
+    return;
+
+  myTitle = theTitle;
+}
+
+//=======================================================================
+//function : SetFormat
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::SetFormat (const TCollection_AsciiString& theFormat)
+{
+  if (myFormat == theFormat)
+    return;
+
+  myFormat = theFormat;
+}
+
+//=======================================================================
+//function : SetLabel
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::SetLabel (const TCollection_ExtendedString& theLabel, const Standard_Integer theIndex)
+{
+  Standard_Integer i = theIndex < 0 ? myLabels.Length() + 1 : theIndex + 1;
+  if (i <= myLabels.Length())
+  {
+    myLabels.SetValue (i, theLabel);
+  }
+  else
+  {
+    while (i > myLabels.Length())
+      myLabels.Append (TCollection_ExtendedString());
+    myLabels.SetValue (i, theLabel);
+  }
+}
+
+//=======================================================================
+//function : SetColor
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::SetColor (const Quantity_Color& theColor, const Standard_Integer theIndex)
+{
+  Standard_Integer i = theIndex < 0 ? myColors.Length() + 1 : theIndex + 1;
+  if (i <= myColors.Length())
+  {
+    myColors.SetValue (i, theColor);
+  }
+  else
+  {
+    while (i > myColors.Length())
+      myColors.Append (Quantity_Color());
+    myColors.SetValue (i, theColor);
+  }
+}
+
+//=======================================================================
+//function : SetLabels
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::SetLabels (const TColStd_SequenceOfExtendedString& theSeq)
+{
+  myLabels.Clear();
+  for (Standard_Integer i = 1; i <= theSeq.Length(); i++)
+    myLabels.Append (theSeq.Value (i));
+}
+
+//=======================================================================
+//function : SetColors
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::SetColors (const Aspect_SequenceOfColor& theSeq)
+{
+  myColors.Clear();
+  for (Standard_Integer i = 1; i <= theSeq.Length(); i++)
+    myColors.Append (theSeq.Value (i));
+}
+
+//=======================================================================
+//function : SetLabelPosition
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::SetLabelPosition (const Aspect_TypeOfColorScalePosition thePos)
+{
+  if (myLabelPos == thePos)
+    return;
+
+  myLabelPos = thePos;
+}
+
+//=======================================================================
+//function : SetTitlePosition
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::SetTitlePosition (const Aspect_TypeOfColorScalePosition thePos)
+{
+  if (myTitlePos == thePos)
+    return;
+
+  myTitlePos = thePos;
+}
+
+//=======================================================================
+//function : SetReversed
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::SetReversed (const Standard_Boolean theReverse)
+{
+  if (myReversed == theReverse)
+    return;
+
+  myReversed = theReverse;
+}
+
+//=======================================================================
+//function : SetLabelAtBorder
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::SetLabelAtBorder (const Standard_Boolean theOn)
+{
+  if (myAtBorder == theOn)
+    return;
+
+  myAtBorder = theOn;
+}
+
+//=======================================================================
+//function : GetPosition
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::GetPosition (Standard_Real& theX, Standard_Real& theY) const
+{
+  theX = myXPos;
+  theY = myYPos;
+}
+
+//=======================================================================
+//function : SetPosition
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::SetPosition (const Standard_Real theX, const Standard_Real theY)
+{
+  if (myXPos == theX && myYPos == theY)
+    return;
+
+  myXPos = theX;
+  myYPos = theY;
+}
+
+//=======================================================================
+//function : SetXPosition
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::SetXPosition (const Standard_Real theX)
+{
+  SetPosition (theX, GetYPosition());
+}
+
+//=======================================================================
+//function : SetYPosition
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::SetYPosition (const Standard_Real theY)
+{
+  SetPosition (GetXPosition(), theY);
+}
+
+//=======================================================================
+//function : GetSize
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::GetSize (Standard_Real& theWidth, Standard_Real& theHeight) const
+{
+  theWidth = myWidth;
+  theHeight = myHeight;
+}
+
+//=======================================================================
+//function : SetSize
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::SetSize (const Standard_Real theWidth, const Standard_Real theHeight)
+{
+  if (myWidth == theWidth && myHeight == theHeight)
+    return;
+
+  myWidth = theWidth;
+  myHeight = theHeight;
+}
+
+//=======================================================================
+//function : SetWidth
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::SetWidth (const Standard_Real theWidth)
+{
+  SetSize (theWidth, GetHeight());
+}
+
+//=======================================================================
+//function : SetHeight
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::SetHeight (const Standard_Real theHeight)
+{
+  SetSize (GetWidth(), theHeight);
+}
+
+//=======================================================================
+//function : SizeHint
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::SizeHint (Standard_Integer& theWidth, Standard_Integer& theHeight) const
+{
+  Standard_Integer aNum = GetNumberOfIntervals();
+
+  Standard_Integer aSpacer = 5;
+  Standard_Integer aTextWidth = 0;
+  Standard_Integer aTextHeight = TextHeight ("");
+  Standard_Integer aColorWidth = 20;
+
+  if (GetLabelPosition() != Aspect_TOCSP_NONE)
+    for (Standard_Integer idx = 0; idx < aNum; idx++)
+      aTextWidth = Max (aTextWidth, TextWidth (GetLabel (idx + 1)));
+
+  Standard_Integer aScaleWidth = 0;
+  Standard_Integer aScaleHeight = 0;
+
+  Standard_Integer aTitleWidth = 0;
+  Standard_Integer aTitleHeight = 0;
+
+  if (IsLabelAtBorder())
+  {
+    aNum++;
+    if (GetTitle().Length())
+      aTitleHeight += 10;
+  }
+
+  aScaleWidth = aColorWidth + aTextWidth + ( aTextWidth ? 3 : 2 ) * aSpacer;
+  aScaleHeight = (Standard_Integer)( 1.5 * ( aNum + 1 ) * aTextHeight );
+
+  if (GetTitle().Length())
+  {
+    aTitleHeight = TextHeight (GetTitle()) + aSpacer;
+    aTitleWidth =  TextWidth (GetTitle()) + 10;
+  }
+
+  theWidth = Max (aTitleWidth, aScaleWidth);
+  theHeight = aScaleHeight + aTitleHeight;
+}
+
+//=======================================================================
+//function : Format
+//purpose  :
+//=======================================================================
+TCollection_AsciiString AIS_ColorScale::Format() const
+{
+  return GetFormat();
+}
+
+//=======================================================================
+//function : GetNumber
+//purpose  :
+//=======================================================================
+Standard_Real AIS_ColorScale::GetNumber (const Standard_Integer theIndex) const
+{
+  Standard_Real aNum = 0;
+  if (GetNumberOfIntervals() > 0)
+    aNum = GetMin() + theIndex * ( Abs (GetMax() - GetMin()) / GetNumberOfIntervals() );
+  return aNum;
+}
+
+//=======================================================================
+//function : HueFromValue
+//purpose  :
+//=======================================================================
+Standard_Integer AIS_ColorScale::HueFromValue (const Standard_Integer theValue,
+                                               const Standard_Integer theMin, const Standard_Integer theMax)
+{
+  Standard_Integer aMinLimit (0), aMaxLimit (230);
+
+  Standard_Integer aHue = aMaxLimit;
+  if (theMin != theMax)
+    aHue = (Standard_Integer)( aMaxLimit - ( aMaxLimit - aMinLimit ) * ( theValue - theMin ) / ( theMax - theMin ) );
+
+  aHue = Min (Max (aMinLimit, aHue), aMaxLimit);
+
+  return aHue;
+}
+
+//=======================================================================
+//function : FindColor
+//purpose  :
+//=======================================================================
+Standard_Boolean AIS_ColorScale::FindColor (const Standard_Real theValue,
+                                            Quantity_Color& theColor) const
+{
+  return FindColor (theValue, myMin, myMax, myInterval, theColor);
+}
+
+//=======================================================================
+//function : FindColor
+//purpose  :
+//=======================================================================
+Standard_Boolean AIS_ColorScale::FindColor (const Standard_Real theValue,
+                                            const Standard_Real theMin,
+                                            const Standard_Real theMax,
+                                            const Standard_Integer theColorsCount,
+                                            Quantity_Color& theColor)
+{
+  if (theValue < theMin || theValue > theMax || theMax < theMin)
+    return Standard_False;
+
+  else
+  {
+    Standard_Real anIntervNumber = 0;
+    if(Abs (theMax-theMin) > Precision::Approximation())
+      anIntervNumber = Floor (Standard_Real (theColorsCount) * ( theValue - theMin ) / ( theMax - theMin ));
+
+    Standard_Integer anInterv = Standard_Integer (anIntervNumber);
+
+    theColor = Quantity_Color (HueFromValue (anInterv, 0, theColorsCount - 1), 1.0, 1.0, Quantity_TOC_HLS);
+
+    return Standard_True;
+  }
+}
+
+//=======================================================================
+//function : Compute
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::Compute(const Handle(PrsMgr_PresentationManager3d)& /*thePresentationManager*/,
+                             const Handle(Prs3d_Presentation)& thePresentation,
+                             const Standard_Integer /*theMode*/)
+{
+  Standard_Integer aWinWidth(0), aWinHeight(0);
+  Handle(V3d_Viewer) aViewer= GetContext()->CurrentViewer();
+  aViewer->InitActiveViews();
+  aViewer->ActiveView()->Window()->Size (aWinWidth, aWinHeight);
+  Quantity_Color aBgColor = aViewer->ActiveView()->BackgroundColor();
+  Standard_Integer aNum = GetNumberOfIntervals();
+  Aspect_TypeOfColorScalePosition aLabPos = GetLabelPosition();
+
+  Standard_Integer aSpacer = 5;
+  Standard_Integer aTextWidth = 0;
+  Standard_Integer aTextHeight = myTextHeight;
+  Standard_Boolean toDrawLabel = GetLabelPosition() != Aspect_TOCSP_NONE;
+  TCollection_ExtendedString aTitle = GetTitle();
+  Standard_Integer aTitleHeight = aSpacer;
+  Standard_Integer aGray = (Standard_Integer)(255 * ( aBgColor.Red() * 11 + aBgColor.Green() * 16 + aBgColor.Blue() * 5 ) / 32);
+  Quantity_Color aFgColor (aGray < 128 ? Quantity_NOC_WHITE : Quantity_NOC_BLACK);
+
+  // Draw title
+  if (aTitle.Length())
+  {
+    aTitleHeight += myTextHeight + aSpacer;
+    DrawText (thePresentation, aTitle, (Standard_Integer)myXPos + aSpacer, aWinHeight - ((Standard_Integer)myYPos - 2 * aSpacer + aTitleHeight), aFgColor);
+  }
+
+  Standard_Boolean toReverse = IsReversed();
+
+  Aspect_SequenceOfColor aColors;
+  TColStd_SequenceOfExtendedString aLabels;
+  for (Standard_Integer i = 0; i < aNum; i++)
+  {
+    if (toReverse)
+    {
+      aColors.Prepend (GetColor (i));
+      aLabels.Prepend (GetLabel (i));
+    }
+    else
+    {
+      aColors.Append (GetColor (i));
+      aLabels.Append (GetLabel (i));
+    }
+  }
+
+  if (IsLabelAtBorder())
+  {
+    if (toReverse)
+      aLabels.Prepend (GetLabel (aNum));
+    else
+      aLabels.Append (GetLabel (aNum));
+  }
+
+  if (toDrawLabel)
+    for (Standard_Integer i = 1; i <= aLabels.Length(); i++)
+      aTextWidth = Max (aTextWidth, TextWidth (aLabels.Value (i)));
+
+  Standard_Integer aLabCount = aLabels.Length();
+
+  Standard_Real aSpc = ( aWinHeight - ( ( Min (aLabCount, 2) + Abs (aLabCount - aNum - 1) ) * aTextHeight ) - aTitleHeight );
+  Standard_Real aVal = aSpc != 0 ? 1.0 * ( aLabCount - Min (aLabCount, 0) ) * aTextHeight / aSpc : 0;
+  Standard_Real anIPart;
+  Standard_Real anFPart = modf (aVal, &anIPart);
+  Standard_Integer aFilter = (Standard_Integer)anIPart + ( anFPart != 0 ? 1 : 0 );
+
+  Standard_Real aStep = 1.0 * ( aWinHeight - (aLabCount - aNum + Abs (aLabCount - aNum - 1)) * aTextHeight - aTitleHeight ) / aNum;
+
+  Standard_Integer anAscent = 0;
+  Standard_Integer aColorWidth = Max (5, Min (20, aWinWidth - aTextWidth - 3 * aSpacer));
+  if (aLabPos == Aspect_TOCSP_CENTER || !toDrawLabel)
+    aColorWidth = aWinWidth - 2 * aSpacer;
+
+  // Draw colors
+  Standard_Integer aX = (Standard_Integer)myXPos + aSpacer;
+  if (aLabPos == Aspect_TOCSP_LEFT)
+    aX += aTextWidth + ( aTextWidth ? 1 : 0 ) * aSpacer;
+
+  Standard_Real anOffset = 1.0 * aTextHeight / 2 * ( aLabCount - aNum + Abs (aLabCount - aNum - 1) );
+  anOffset += 2*aSpacer;
+  Handle (Graphic3d_Group) aGroup = Prs3d_Root::CurrentGroup (thePresentation);
+  Handle (Graphic3d_ArrayOfTriangles) aPrim;
+  Standard_Integer anEdgesPerColor = 6;
+  Standard_Integer aVerticiesPerColor = 4;
+  aPrim = new Graphic3d_ArrayOfTriangles (aColors.Length()*aVerticiesPerColor, aColors.Length()*anEdgesPerColor, 0, 1);
+  Standard_Integer aVertIndex = 1;
+  for (Standard_Integer i = 1; i <= aColors.Length() && aStep > 0; i++)
+  {
+    Standard_Integer aY = (Standard_Integer)( myYPos + ( i - 1 )* aStep + anOffset );
+    Standard_Integer aColorHeight = (Standard_Integer)( myYPos + ( i ) * aStep + anOffset ) - aY;
+    aPrim->AddVertex (gp_Pnt (aX, aY, 0.0), aColors.Value( i ));
+    aPrim->AddVertex (gp_Pnt (aX+aColorWidth, aY, 0.0), aColors.Value( i ));
+    aPrim->AddVertex (gp_Pnt (aX, aY+aColorHeight, 0.0), aColors.Value( i ));
+    aPrim->AddVertex (gp_Pnt (aX+aColorWidth, aY+aColorHeight, 0.0), aColors.Value( i ));
+    aPrim->AddEdge(aVertIndex);
+    aPrim->AddEdge(aVertIndex+1);
+    aPrim->AddEdge(aVertIndex+2);
+    aPrim->AddEdge(aVertIndex+1);
+    aPrim->AddEdge(aVertIndex+2);
+    aPrim->AddEdge(aVertIndex+3);
+    aVertIndex += 4;
+  }
+  aGroup->AddPrimitiveArray (aPrim);
+
+  if (aStep > 0)
+    DrawFrame (thePresentation, aX - 1, (Standard_Integer)(myYPos + anOffset - 1), aColorWidth + 2, (Standard_Integer)(aColors.Length() * aStep + 2), aFgColor);
+
+  // Draw Labels
+  anOffset = 1.0 * Abs (aLabCount - aNum - 1) * ( aStep - aTextHeight ) / 2 + 1.0 * Abs (aLabCount - aNum - 1) * aTextHeight / 2;
+  anOffset += 2*aSpacer;
+  if (toDrawLabel && aLabels.Length() && aFilter > 0)
+  {
+    Standard_Integer i1 = 0;
+    Standard_Integer i2 = aLabCount - 1;
+    Standard_Integer aLast1( i1 ), aLast2( i2 );
+    aX = (Standard_Integer)myXPos + aSpacer;
+    switch (aLabPos)
+    {
+      case Aspect_TOCSP_NONE:
+      case Aspect_TOCSP_LEFT:
+        break;
+      case Aspect_TOCSP_CENTER:
+        aX += ( aColorWidth - aTextWidth ) / 2;
+        break;
+      case Aspect_TOCSP_RIGHT:
+        aX += aColorWidth + aSpacer;
+        break;
+    }
+    while (i2 - i1 >= aFilter || ( i2 == 0 && i1 == 0 ))
+    {
+      Standard_Integer aPos1 = i1;
+      Standard_Integer aPos2 = aLabCount - 1 - i2;
+      if (aFilter && !( aPos1 % aFilter ))
+      {
+        DrawText (thePresentation, aLabels.Value (i1 + 1), aX, (Standard_Integer)( myYPos + i1 * aStep + anAscent + anOffset ), aFgColor);
+        aLast1 = i1;
+      }
+      if (aFilter && !( aPos2 % aFilter ))
+      {
+        DrawText (thePresentation, aLabels.Value (i2 + 1), aX, (Standard_Integer)( myYPos + i2 * aStep + anAscent + anOffset ), aFgColor);
+        aLast2 = i2;
+      }
+      i1++;
+      i2--;
+    }
+    Standard_Integer aPos = i1;
+    Standard_Integer i0 = -1;
+    while (aPos <= i2 && i0 == -1)
+    {
+      if (aFilter && !( aPos % aFilter ) && Abs (aPos - aLast1) >= aFilter && Abs (aPos - aLast2) >= aFilter)
+        i0 = aPos;
+      aPos++;
+    }
+
+    if (i0 != -1)
+      DrawText (thePresentation, aLabels.Value (i0 + 1), aX, (Standard_Integer)( myYPos + i0 * aStep + anAscent + anOffset ), aFgColor);
+  }
+}
+
+//=======================================================================
+//function : DrawFrame
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::DrawFrame (const Handle(Prs3d_Presentation)& thePresentation,
+                       const Standard_Integer theX, const Standard_Integer theY,
+                       const Standard_Integer theWidth, const Standard_Integer theHeight,
+                       const Quantity_Color& theColor)
+{
+  Handle (Graphic3d_Group) aGroup = Prs3d_Root::CurrentGroup (thePresentation);
+  Handle(Graphic3d_ArrayOfPolylines) aPrim = new Graphic3d_ArrayOfPolylines(5);
+  aPrim->AddVertex (theX,theY,0.0);
+  aPrim->AddVertex (theX+theWidth,theY,0.0);
+  aPrim->AddVertex (theX+theWidth,theY+theHeight,0.0);
+  aPrim->AddVertex (theX,theY+theHeight,0.0);
+  aPrim->AddVertex (theX,theY,0.0);
+  Handle(Prs3d_LineAspect) anAspect = new Prs3d_LineAspect (theColor, Aspect_TOL_SOLID, 1.0);
+  anAspect->SetColor (theColor);
+  aGroup->SetPrimitivesAspect (anAspect->Aspect());
+  aGroup->AddPrimitiveArray (aPrim);
+}
+
+//=======================================================================
+//function : DrawText
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::DrawText (const Handle(Prs3d_Presentation)& thePresentation,
+                  const TCollection_ExtendedString& theText,
+                  const Standard_Integer theX, const Standard_Integer theY,
+                  const Quantity_Color& theColor)
+{
+  if (!myDrawer->HasOwnTextAspect())
+  {
+    myDrawer->SetTextAspect (new Prs3d_TextAspect());
+    *myDrawer->TextAspect()->Aspect() = *myDrawer->Link()->TextAspect()->Aspect();
+  }
+  Handle(Prs3d_TextAspect) anAspect = myDrawer->TextAspect();
+  anAspect->SetColor (theColor);
+  anAspect->SetHeight (myTextHeight);
+  anAspect->SetHorizontalJustification (Graphic3d_HTA_LEFT);
+  anAspect->SetVerticalJustification (Graphic3d_VTA_BOTTOM);
+  anAspect->Aspect()->SetTextZoomable (Standard_True);
+  anAspect->Aspect()->SetTextAngle (0.0);
+  anAspect->Aspect()->SetTextFontAspect (Font_FA_Regular);
+  Prs3d_Text::Draw (thePresentation, anAspect, theText,gp_Pnt (theX,theY,0.0));
+}
+
+//=======================================================================
+//function : TextWidth
+//purpose  :
+//=======================================================================
+Standard_Integer AIS_ColorScale::TextWidth (const TCollection_ExtendedString& theText) const
+{
+  Standard_Integer aWidth, anAscent, aDescent;
+  TextSize (theText, GetTextHeight(), aWidth, anAscent, aDescent);
+  return aWidth;
+}
+
+//=======================================================================
+//function : TextHeight
+//purpose  :
+//=======================================================================
+Standard_Integer AIS_ColorScale::TextHeight (const TCollection_ExtendedString& theText) const
+{
+  Standard_Integer aWidth, anAscent, aDescent;
+  TextSize (theText, GetTextHeight(), aWidth, anAscent, aDescent);
+  return anAscent+aDescent;
+}
+
+//=======================================================================
+//function : TextSize
+//purpose  :
+//=======================================================================
+void AIS_ColorScale::TextSize (const TCollection_ExtendedString& theText, const Standard_Integer theHeight, Standard_Integer& theWidth, Standard_Integer& theAscent, Standard_Integer& theDescent) const
+{
+  Standard_ShortReal aWidth(10.0), anAscent(1.0), aDescent(1.0);
+  TCollection_AsciiString aText (theText.ToExtString(), '?');
+  GetContext()->CurrentViewer()->Driver()->TextSize (aText.ToCString(),(Standard_ShortReal)theHeight,aWidth,anAscent,aDescent);
+  theWidth = (Standard_Integer)aWidth;
+  theAscent = (Standard_Integer)anAscent;
+  theDescent = (Standard_Integer)aDescent;
+}
similarity index 69%
rename from src/Aspect/Aspect_ColorScale.hxx
rename to src/AIS/AIS_ColorScale.hxx
index c1823e9..1d67bea 100644 (file)
@@ -1,6 +1,5 @@
-// Created on: 2004-06-22
-// Created by: STV
-// Copyright (c) 2004-2014 OPEN CASCADE SAS
+// Created on: 2015-02-03
+// Copyright (c) 2015 OPEN CASCADE SAS
 //
 // This file is part of Open CASCADE Technology software library.
 //
 // Alternatively, this file may be used under the terms of Open CASCADE
 // commercial license or contractual agreement.
 
-#ifndef _Aspect_ColorScale_HeaderFile
-#define _Aspect_ColorScale_HeaderFile
+#ifndef _AIS_ColorScale_HeaderFile
+#define _AIS_ColorScale_HeaderFile
 
-#include <Standard.hxx>
-#include <Standard_Type.hxx>
-
-#include <Standard_Real.hxx>
-#include <TCollection_ExtendedString.hxx>
-#include <TCollection_AsciiString.hxx>
-#include <Standard_Integer.hxx>
+#include <AIS_InteractiveObject.hxx>
 #include <Aspect_TypeOfColorScaleData.hxx>
-#include <Standard_Boolean.hxx>
+#include <Aspect_TypeOfColorScalePosition.hxx>
 #include <Aspect_SequenceOfColor.hxx>
+#include <Standard.hxx>
+#include <Standard_DefineHandle.hxx>
+#include <TCollection_ExtendedString.hxx>
 #include <TColStd_SequenceOfExtendedString.hxx>
-#include <Aspect_TypeOfColorScalePosition.hxx>
-#include <MMgt_TShared.hxx>
-class Quantity_Color;
-class TCollection_ExtendedString;
-class TCollection_AsciiString;
-
 
-class Aspect_ColorScale;
-DEFINE_STANDARD_HANDLE(Aspect_ColorScale, MMgt_TShared)
 
-//! Defines a color scale for viewer.
-class Aspect_ColorScale : public MMgt_TShared
-{
+//! Class for drawing a custom color scale
+class AIS_ColorScale : public AIS_InteractiveObject {
 
 public:
 
-  
+  //! Default constructor.
+  Standard_EXPORT AIS_ColorScale();
+
   //! Calculate color according passed value; returns true if value is in range or false, if isn't
   Standard_EXPORT Standard_Boolean FindColor (const Standard_Real theValue, Quantity_Color& theColor) const;
-  
+
   Standard_EXPORT static Standard_Boolean FindColor (const Standard_Real theValue, const Standard_Real theMin, const Standard_Real theMax, const Standard_Integer theColorsCount, Quantity_Color& theColor);
-  
+
   //! Returns minimal value of color scale;
-  Standard_EXPORT Standard_Real GetMin() const;
-  
+  Standard_EXPORT Standard_Real GetMin() const { return myMin; }
+
   //! Returns maximal value of color scale;
-  Standard_EXPORT Standard_Real GetMax() const;
-  
+  Standard_EXPORT Standard_Real GetMax() const { return myMax; }
+
   //! Returns minimal and maximal values of color scale;
   Standard_EXPORT void GetRange (Standard_Real& theMin, Standard_Real& theMax) const;
-  
+
   //! Returns the type of labels;
   //! Aspect_TOCSD_AUTO - labels as boundary values for intervals
   //! Aspect_TOCSD_USER - user specified label is used
-  Standard_EXPORT Aspect_TypeOfColorScaleData GetLabelType() const;
-  
+  Standard_EXPORT Aspect_TypeOfColorScaleData GetLabelType() const { return myLabelType; }
+
   //! Returns the type of colors;
   //! Aspect_TOCSD_AUTO - value between Red and Blue
   //! Aspect_TOCSD_USER - user specified color from color map
-  Standard_EXPORT Aspect_TypeOfColorScaleData GetColorType() const;
-  
+  Standard_EXPORT Aspect_TypeOfColorScaleData GetColorType() const { return myColorType; }
+
   //! Returns the number of color scale intervals;
-  Standard_EXPORT Standard_Integer GetNumberOfIntervals() const;
-  
+  Standard_EXPORT Standard_Integer GetNumberOfIntervals() const { return myInterval; }
+
   //! Returns the color scale title string;
-  Standard_EXPORT TCollection_ExtendedString GetTitle() const;
-  
+  Standard_EXPORT TCollection_ExtendedString GetTitle() const { return myTitle; }
+
   //! Returns the format for numbers.
   //! The same like format for function printf().
   //! Used if GetLabelType() is TOCSD_AUTO;
-  Standard_EXPORT TCollection_AsciiString GetFormat() const;
-  
+  Standard_EXPORT TCollection_AsciiString GetFormat() const { return myFormat; }
+
   //! Returns the user specified label with index <anIndex>.
   //! Returns empty string if label not defined.
   Standard_EXPORT TCollection_ExtendedString GetLabel (const Standard_Integer theIndex) const;
-  
+
   //! Returns the user specified color from color map with index <anIndex>.
   //! Returns default color if index out of range in color map.
   Standard_EXPORT Quantity_Color GetColor (const Standard_Integer theIndex) const;
-  
+
   //! Returns the user specified labels.
   Standard_EXPORT void GetLabels (TColStd_SequenceOfExtendedString& theLabels) const;
-  
+
   //! Returns the user specified colors.
   Standard_EXPORT void GetColors (Aspect_SequenceOfColor& theColors) const;
-  
+
   //! Returns the position of labels concerning color filled rectangles.
-  Standard_EXPORT Aspect_TypeOfColorScalePosition GetLabelPosition() const;
-  
+  Standard_EXPORT Aspect_TypeOfColorScalePosition GetLabelPosition() const { return myLabelPos; }
+
   //! Returns the position of color scale title.
-  Standard_EXPORT Aspect_TypeOfColorScalePosition GetTitlePosition() const;
-  
+  Standard_EXPORT Aspect_TypeOfColorScalePosition GetTitlePosition() const { return myTitlePos; }
+
   //! Returns true if the labels and colors used in reversed order.
-  Standard_EXPORT Standard_Boolean IsReversed() const;
-  
+  Standard_EXPORT Standard_Boolean IsReversed() const { return myReversed; }
+
   //! Returns true if the labels placed at border of color filled rectangles.
-  Standard_EXPORT Standard_Boolean IsLabelAtBorder() const;
-  
+  Standard_EXPORT Standard_Boolean IsLabelAtBorder() const { return myAtBorder; }
+
   //! Sets the minimal value of color scale.
   Standard_EXPORT void SetMin (const Standard_Real theMin);
-  
+
   //! Sets the maximal value of color scale.
   Standard_EXPORT void SetMax (const Standard_Real theMax);
-  
+
   //! Sets the minimal and maximal value of color scale.
   Standard_EXPORT void SetRange (const Standard_Real theMin, const Standard_Real theMax);
-  
+
   //! Sets the type of labels.
   //! Aspect_TOCSD_AUTO - labels as boundary values for intervals
   //! Aspect_TOCSD_USER - user specified label is used
   Standard_EXPORT void SetLabelType (const Aspect_TypeOfColorScaleData theType);
-  
+
   //! Sets the type of colors.
   //! Aspect_TOCSD_AUTO - value between Red and Blue
   //! Aspect_TOCSD_USER - user specified color from color map
   Standard_EXPORT void SetColorType (const Aspect_TypeOfColorScaleData theType);
-  
+
   //! Sets the number of color scale intervals.
   Standard_EXPORT void SetNumberOfIntervals (const Standard_Integer theNum);
-  
+
   //! Sets the color scale title string.
   Standard_EXPORT void SetTitle (const TCollection_ExtendedString& theTitle);
-  
+
   //! Sets the color scale auto label format specification.
   Standard_EXPORT void SetFormat (const TCollection_AsciiString& theFormat);
-  
+
   //! Sets the color scale label at index. Index started from 1.
   Standard_EXPORT void SetLabel (const TCollection_ExtendedString& theLabel, const Standard_Integer anIndex = -1);
-  
+
   //! Sets the color scale color at index. Index started from 1.
   Standard_EXPORT void SetColor (const Quantity_Color& theColor, const Standard_Integer theIndex = -1);
-  
+
   //! Sets the color scale labels.
   Standard_EXPORT void SetLabels (const TColStd_SequenceOfExtendedString& theSeq);
-  
+
   //! Sets the color scale colors.
   Standard_EXPORT void SetColors (const Aspect_SequenceOfColor& theSeq);
-  
+
   //! Sets the color scale labels position concerning color filled rectangles.
   Standard_EXPORT void SetLabelPosition (const Aspect_TypeOfColorScalePosition thePos);
-  
+
   //! Sets the color scale title position.
   Standard_EXPORT void SetTitlePosition (const Aspect_TypeOfColorScalePosition thePos);
-  
+
   //! Sets true if the labels and colors used in reversed order.
   Standard_EXPORT void SetReversed (const Standard_Boolean theReverse);
-  
+
   //! Sets true if the labels placed at border of color filled rectangles.
   Standard_EXPORT void SetLabelAtBorder (const Standard_Boolean theOn);
-  
+
   //! Returns the size of color scale.
   Standard_EXPORT void GetSize (Standard_Real& theWidth, Standard_Real& theHeight) const;
-  
+
   //! Returns the width of color scale.
-  Standard_EXPORT Standard_Real GetWidth() const;
-  
+  Standard_EXPORT Standard_Real GetWidth() const { return myWidth; }
+
   //! Returns the height of color scale.
-  Standard_EXPORT Standard_Real GetHeight() const;
-  
+  Standard_EXPORT Standard_Real GetHeight() const { return myHeight; }
+
   //! Sets the size of color scale.
   Standard_EXPORT void SetSize (const Standard_Real theWidth, const Standard_Real theHeight);
-  
+
   //! Sets the width of color scale.
   Standard_EXPORT void SetWidth (const Standard_Real theWidth);
-  
+
   //! Sets the height of color scale.
   Standard_EXPORT void SetHeight (const Standard_Real theHeight);
-  
+
   //! Returns the position of color scale.
   Standard_EXPORT void GetPosition (Standard_Real& theX, Standard_Real& theY) const;
-  
+
   //! Returns the X position of color scale.
-  Standard_EXPORT Standard_Real GetXPosition() const;
-  
+  Standard_EXPORT Standard_Real GetXPosition() const { return myXPos; }
+
   //! Returns the height of color scale.
-  Standard_EXPORT Standard_Real GetYPosition() const;
-  
+  Standard_EXPORT Standard_Real GetYPosition() const { return myYPos; }
+
   //! Sets the position of color scale.
   Standard_EXPORT void SetPosition (const Standard_Real theX, const Standard_Real theY);
-  
+
   //! Sets the X position of color scale.
   Standard_EXPORT void SetXPosition (const Standard_Real theX);
-  
+
   //! Sets the Y position of color scale.
   Standard_EXPORT void SetYPosition (const Standard_Real theY);
-  
+
   //! Returns the height of text of color scale.
-  Standard_EXPORT Standard_Integer GetTextHeight() const;
-  
+  Standard_EXPORT Standard_Integer GetTextHeight() const { return myTextHeight; }
+
   //! Sets the height of text of color scale.
-  Standard_EXPORT void SetTextHeight (const Standard_Integer theHeight);
-  
-  //! Draws a rectangle.
-  //! @param theX [in] the X coordinate of rectangle position.
-  //! @param theY [in] the Y coordinate of rectangle position.
-  //! @param theWidth [in] the width of rectangle.
-  //! @param theHeight [in] the height of rectangle.
-  //! @param theColor [in] the color of rectangle.
-  //! @param theFilled [in] defines if rectangle must be filled.
-  Standard_EXPORT virtual void PaintRect (const Standard_Integer theX, const Standard_Integer theY, const Standard_Integer theWidth, const Standard_Integer theHeight, const Quantity_Color& theColor, const Standard_Boolean theFilled = Standard_False) = 0;
-  
-  //! Draws a text.
-  //! @param theText [in] the text to draw.
-  //! @param theX [in] the X coordinate of text position.
-  //! @param theY [in] the Y coordinate of text position.
-  //! @param theColor [in] the color of text.
-  Standard_EXPORT virtual void PaintText (const TCollection_ExtendedString& theText, const Standard_Integer theX, const Standard_Integer theY, const Quantity_Color& theColor) = 0;
-  
+  Standard_EXPORT void SetTextHeight (const Standard_Integer theHeight) { myTextHeight = theHeight; }
+
   //! Returns the width of text.
   //! @param theText [in] the text of which to calculate width.
-  Standard_EXPORT virtual Standard_Integer TextWidth (const TCollection_ExtendedString& theText) const = 0;
-  
+  Standard_EXPORT Standard_Integer TextWidth (const TCollection_ExtendedString& theText) const;
+
   //! Returns the height of text.
   //! @param theText [in] the text of which to calculate height.
-  Standard_EXPORT virtual Standard_Integer TextHeight (const TCollection_ExtendedString& theText) const = 0;
-
+  Standard_EXPORT Standard_Integer TextHeight (const TCollection_ExtendedString& theText) const;
 
+  Standard_EXPORT void TextSize (const TCollection_ExtendedString& theText, const Standard_Integer theHeight, Standard_Integer& theWidth, Standard_Integer& theAscent, Standard_Integer& theDescent) const;
 
 
-  DEFINE_STANDARD_RTTI(Aspect_ColorScale,MMgt_TShared)
+  DEFINE_STANDARD_RTTI(AIS_ColorScale,AIS_InteractiveObject)
 
 protected:
 
-  
-  //! Default constructor.
-  Standard_EXPORT Aspect_ColorScale();
-  
+  //! Draws a frame.
+  //! @param theX [in] the X coordinate of frame position.
+  //! @param theY [in] the Y coordinate of frame position.
+  //! @param theWidth [in] the width of frame.
+  //! @param theHeight [in] the height of frame.
+  //! @param theColor [in] the color of frame.
+  Standard_EXPORT void DrawFrame (const Handle(Prs3d_Presentation)& thePresentation,
+                       const Standard_Integer theX, const Standard_Integer theY,
+                       const Standard_Integer theWidth, const Standard_Integer theHeight,
+                       const Quantity_Color& theColor);
+
+  //! Draws a text.
+  //! @param theText [in] the text to draw.
+  //! @param theX [in] the X coordinate of text position.
+  //! @param theY [in] the Y coordinate of text position.
+  //! @param theColor [in] the color of text.
+  Standard_EXPORT void DrawText (const Handle(Prs3d_Presentation)& thePresentation,
+                  const TCollection_ExtendedString& theText,
+                  const Standard_Integer theX, const Standard_Integer theY,
+                  const Quantity_Color& theColor);
+
+private:
+
   //! Returns the size of color scale.
   //! @param theWidth [out] the width of color scale.
   //! @param theHeight [out] the height of color scale.
-  Standard_EXPORT void SizeHint (Standard_Integer& theWidth, Standard_Integer& theHeight) const;
-  
-  //! updates color scale parameters.
-  Standard_EXPORT virtual void UpdateColorScale();
-  
-  //! Draws color scale.
-  //! @param theBgColor [in] background color
-  //! @param theX [in] the X coordinate of color scale position.
-  //! @param theY [in] the Y coordinate of color scale position.
-  //! @param theWidth [in] the width of color scale.
-  //! @param theHeight [in] the height of color scale.
-  Standard_EXPORT void DrawScale (const Quantity_Color& theBgColor, const Standard_Integer theX, const Standard_Integer theY, const Standard_Integer theWidth, const Standard_Integer theHeight);
-  
-  Standard_EXPORT virtual Standard_Boolean BeginPaint();
-  
-  Standard_EXPORT virtual Standard_Boolean EndPaint();
-
+  void SizeHint (Standard_Integer& theWidth, Standard_Integer& theHeight) const;
 
+  void Compute (const Handle(PrsMgr_PresentationManager3d)& thePresentationManager,
+                  const Handle(Prs3d_Presentation)& thePresentation,
+                  const Standard_Integer theMode);
 
-private:
+  void ComputeSelection (const Handle(SelectMgr_Selection)& /*aSelection*/,
+                           const Standard_Integer /*aMode*/){};
 
-  
   //! Returns the format of text.
-  Standard_EXPORT TCollection_AsciiString Format() const;
-  
+  TCollection_AsciiString Format() const;
+
   //! Returns the value of given interval.
-  Standard_EXPORT Standard_Real GetNumber (const Standard_Integer theIndex) const;
-  
+  Standard_Real GetNumber (const Standard_Integer anIndex) const;
+
   //! Returns the color's hue for the given value in the given interval.
   //! @param theValue [in] the current value of interval.
   //! @param theMin [in] the min value of interval.
   //! @param theMax [in] the max value of interval.
-  Standard_EXPORT static Standard_Integer HueFromValue (const Standard_Integer theValue, const Standard_Integer theMin, const Standard_Integer theMax);
+  static Standard_Integer HueFromValue (const Standard_Integer aValue, const Standard_Integer aMin, const Standard_Integer aMax);
+
+private:
 
   Standard_Real myMin;
   Standard_Real myMax;
@@ -289,14 +270,5 @@ private:
   Standard_Real myWidth;
   Standard_Real myHeight;
   Standard_Integer myTextHeight;
-
-
 };
-
-
-
-
-
-
-
-#endif // _Aspect_ColorScale_HeaderFile
+#endif
old mode 100755 (executable)
new mode 100644 (file)
index 82d10b5..ed1d9a5
@@ -24,6 +24,8 @@ AIS_Circle.lxx
 AIS_ClearMode.hxx
 AIS_ColoredShape.cxx
 AIS_ColoredShape.hxx
+AIS_ColorScale.cxx
+AIS_ColorScale.hxx
 AIS_ConcentricRelation.cxx
 AIS_ConcentricRelation.hxx
 AIS_ConnectedInteractive.cxx
diff --git a/src/Aspect/Aspect_ColorScale.cxx b/src/Aspect/Aspect_ColorScale.cxx
deleted file mode 100644 (file)
index c564f98..0000000
+++ /dev/null
@@ -1,637 +0,0 @@
-// Created on: 2004-06-22
-// Created by: STV
-// Copyright (c) 2004-2014 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.
-
-
-#include <Aspect_ColorScale.hxx>
-#include <Aspect_SequenceOfColor.hxx>
-#include <Aspect_TypeOfColorScaleData.hxx>
-#include <Aspect_TypeOfColorScalePosition.hxx>
-#include <Precision.hxx>
-#include <Quantity_Color.hxx>
-#include <Standard_Type.hxx>
-#include <TCollection_AsciiString.hxx>
-#include <TCollection_ExtendedString.hxx>
-#include <TColStd_SequenceOfExtendedString.hxx>
-
-#include <stdio.h>
-Aspect_ColorScale::Aspect_ColorScale()
-: MMgt_TShared(),
-myMin( 0.0 ),
-myMax( 1.0 ),
-myTitle( "" ),
-myFormat( "%.4g" ),
-myInterval( 10 ),
-myColorType( Aspect_TOCSD_AUTO ),
-myLabelType( Aspect_TOCSD_AUTO ),
-myAtBorder( Standard_True ),
-myReversed( Standard_False ),
-myLabelPos( Aspect_TOCSP_RIGHT ),
-myTitlePos( Aspect_TOCSP_CENTER ),
-myXPos( 0 ),
-myYPos( 0 ),
-myWidth( 0.2 ),
-myHeight( 1 ),
-myTextHeight(20)
-{
-}
-
-Standard_Real Aspect_ColorScale::GetMin() const
-{
-  return myMin;
-}
-
-Standard_Real Aspect_ColorScale::GetMax() const
-{
-  return myMax;
-}
-
-void Aspect_ColorScale::GetRange (Standard_Real& theMin, Standard_Real& theMax) const
-{
-  theMin = myMin;
-  theMax = myMax;
-}
-
-Aspect_TypeOfColorScaleData Aspect_ColorScale::GetLabelType() const
-{
-  return myLabelType;
-}
-
-Aspect_TypeOfColorScaleData Aspect_ColorScale::GetColorType() const
-{
-  return myColorType;
-}
-
-Standard_Integer Aspect_ColorScale::GetNumberOfIntervals() const
-{
-  return myInterval;
-}
-
-TCollection_ExtendedString Aspect_ColorScale::GetTitle() const
-{
-  return myTitle;
-}
-
-TCollection_AsciiString Aspect_ColorScale::GetFormat() const
-{
-  return myFormat;
-}
-
-TCollection_ExtendedString Aspect_ColorScale::GetLabel (const Standard_Integer theIndex) const
-{
-  if (GetLabelType() == Aspect_TOCSD_USER)
-  {
-    if (theIndex < 0
-     || theIndex >= myLabels.Length())
-    {
-      return "";
-    }
-
-    return myLabels.Value (theIndex + 1);
-  }
-
-  const Standard_Real           aVal    = GetNumber (theIndex);
-  const TCollection_AsciiString aFormat = Format();
-  Standard_Character aBuf[1024];
-  sprintf (aBuf, aFormat.ToCString(), aVal);
-  return TCollection_ExtendedString (aBuf);
-}
-
-Quantity_Color Aspect_ColorScale::GetColor (const Standard_Integer theIndex) const
-{
-  if (GetColorType() == Aspect_TOCSD_USER)
-  {
-    if (theIndex < 0
-     || theIndex >= myColors.Length())
-    {
-      return Quantity_Color();
-    }
-
-    return myColors.Value (theIndex + 1);
-  }
-  return Quantity_Color (HueFromValue (theIndex, 0, GetNumberOfIntervals() - 1), 1.0, 1.0, Quantity_TOC_HLS);
-}
-
-void Aspect_ColorScale::GetLabels (TColStd_SequenceOfExtendedString& theLabels) const
-{
-  theLabels.Clear();
-  for (Standard_Integer i = 1; i <= myLabels.Length(); i++)
-    theLabels.Append (myLabels.Value (i));
-}
-
-void Aspect_ColorScale::GetColors (Aspect_SequenceOfColor& theColors) const
-{
-  theColors.Clear();
-  for (Standard_Integer i = 1; i <= myColors.Length(); i++)
-    theColors.Append (myColors.Value (i));
-}
-
-Aspect_TypeOfColorScalePosition Aspect_ColorScale::GetLabelPosition() const
-{
-  return myLabelPos;
-}
-
-Aspect_TypeOfColorScalePosition Aspect_ColorScale::GetTitlePosition() const
-{
-  return myTitlePos;
-}
-
-Standard_Boolean Aspect_ColorScale::IsReversed() const
-{
-  return myReversed;
-}
-
-Standard_Boolean Aspect_ColorScale::IsLabelAtBorder() const
-{
-  return myAtBorder;
-}
-
-void Aspect_ColorScale::SetMin (const Standard_Real theMin)
-{
-  SetRange (theMin, GetMax());
-}
-
-void Aspect_ColorScale::SetMax (const Standard_Real theMax)
-{
-  SetRange (GetMin(), theMax);
-}
-
-void Aspect_ColorScale::SetRange (const Standard_Real theMin, const Standard_Real theMax)
-{
-  if (myMin == theMin && myMax == theMax)
-    return;
-  myMin = Min( theMin, theMax );
-  myMax = Max( theMin, theMax );
-
-  if (GetColorType() == Aspect_TOCSD_AUTO)
-    UpdateColorScale();
-}
-
-void Aspect_ColorScale::SetLabelType (const Aspect_TypeOfColorScaleData theType)
-{
-  if (myLabelType == theType)
-    return;
-
-  myLabelType = theType;
-  UpdateColorScale();
-}
-
-void Aspect_ColorScale::SetColorType (const Aspect_TypeOfColorScaleData theType)
-{
-  if (myColorType == theType)
-    return;
-
-  myColorType = theType;
-  UpdateColorScale();
-}
-
-void Aspect_ColorScale::SetNumberOfIntervals (const Standard_Integer theNum)
-{
-  if (myInterval == theNum || theNum < 1)
-    return;
-
-  myInterval = theNum;
-  UpdateColorScale();
-}
-
-void Aspect_ColorScale::SetTitle (const TCollection_ExtendedString& theTitle)
-{
-  if (myTitle == theTitle)
-    return;
-
-  myTitle = theTitle;
-  UpdateColorScale();
-}
-
-void Aspect_ColorScale::SetFormat (const TCollection_AsciiString& theFormat)
-{
-  if (myFormat == theFormat)
-    return;
-
-  myFormat = theFormat;
-  if (GetLabelType() == Aspect_TOCSD_AUTO)
-    UpdateColorScale();
-}
-
-void Aspect_ColorScale::SetLabel (const TCollection_ExtendedString& theLabel, const Standard_Integer theIndex)
-{
-  Standard_Boolean changed = Standard_False;
-  Standard_Integer i = theIndex < 0 ? myLabels.Length() + 1 : theIndex + 1;
-  if (i <= myLabels.Length()) {
-    changed = myLabels.Value (i) != theLabel;
-    myLabels.SetValue (i, theLabel);
-  }
-  else {
-    changed = Standard_True;
-    while (i > myLabels.Length())
-      myLabels.Append (TCollection_ExtendedString());
-    myLabels.SetValue (i, theLabel);
-  }
-  if (changed)
-    UpdateColorScale();
-}
-
-void Aspect_ColorScale::SetColor (const Quantity_Color& theColor, const Standard_Integer theIndex)
-{
-  Standard_Boolean changed = Standard_False;
-  Standard_Integer i = theIndex < 0 ? myColors.Length() + 1 : theIndex + 1;
-  if (i <= myColors.Length()) {
-    changed = myColors.Value (i) != theColor;
-    myColors.SetValue (i, theColor);
-  }
-  else {
-    changed = Standard_True;
-    while ( i > myColors.Length() )
-      myColors.Append (Quantity_Color());
-    myColors.SetValue (i, theColor);
-  }
-  if (changed)
-    UpdateColorScale();
-}
-
-void Aspect_ColorScale::SetLabels (const TColStd_SequenceOfExtendedString& theSeq)
-{
-  myLabels.Clear();
-  for (Standard_Integer i = 1; i <= theSeq.Length(); i++)
-    myLabels.Append (theSeq.Value (i));
-}
-
-void Aspect_ColorScale::SetColors (const Aspect_SequenceOfColor& theSeq)
-{
-  myColors.Clear();
-  for (Standard_Integer i = 1; i <= theSeq.Length(); i++)
-    myColors.Append (theSeq.Value (i));
-}
-
-void Aspect_ColorScale::SetLabelPosition (const Aspect_TypeOfColorScalePosition thePos)
-{
-  if (myLabelPos == thePos)
-    return;
-
-  myLabelPos = thePos;
-  UpdateColorScale();
-}
-
-void Aspect_ColorScale::SetTitlePosition (const Aspect_TypeOfColorScalePosition thePos)
-{
-  if (myTitlePos == thePos)
-    return;
-
-  myTitlePos = thePos;
-  UpdateColorScale();
-}
-
-void Aspect_ColorScale::SetReversed (const Standard_Boolean theReverse)
-{
-  if (myReversed == theReverse)
-    return;
-
-  myReversed = theReverse;
-  UpdateColorScale();
-}
-
-void Aspect_ColorScale::SetLabelAtBorder (const Standard_Boolean theOn)
-{
-  if (myAtBorder == theOn)
-    return;
-
-  myAtBorder = theOn;
-  UpdateColorScale();
-}
-
-void Aspect_ColorScale::GetPosition (Standard_Real& theX, Standard_Real& theY) const
-{
-  theX = myXPos;
-  theY = myYPos;
-}
-
-Standard_Real Aspect_ColorScale::GetXPosition() const
-{
-  return myXPos;
-}
-
-Standard_Real Aspect_ColorScale::GetYPosition() const
-{
-  return myYPos;
-}
-
-void Aspect_ColorScale::SetPosition (const Standard_Real theX, const Standard_Real theY)
-{
-  if (myXPos == theX && myYPos == theY)
-    return;
-
-  myXPos = theX;
-  myYPos = theY;
-
-  UpdateColorScale();
-}
-
-void Aspect_ColorScale::SetXPosition (const Standard_Real theX)
-{
-  SetPosition (theX, GetYPosition());
-}
-
-void Aspect_ColorScale::SetYPosition (const Standard_Real theY)
-{
-  SetPosition (GetXPosition(), theY);
-}
-
-void Aspect_ColorScale::GetSize (Standard_Real& theWidth, Standard_Real& theHeight) const
-{
-  theWidth = myWidth;
-  theHeight = myHeight;
-}
-
-Standard_Real Aspect_ColorScale::GetWidth() const
-{
-  return myWidth;
-}
-
-Standard_Real Aspect_ColorScale::GetHeight() const
-{
-  return myHeight;
-}
-
-void Aspect_ColorScale::SetSize (const Standard_Real theWidth, const Standard_Real theHeight)
-{
-  if (myWidth == theWidth && myHeight == theHeight)
-    return;
-
-  myWidth = theWidth;
-  myHeight = theHeight;
-
-  UpdateColorScale();
-}
-
-void Aspect_ColorScale::SetWidth (const Standard_Real theWidth)
-{
-  SetSize (theWidth, GetHeight());
-}
-
-void Aspect_ColorScale::SetHeight (const Standard_Real theHeight)
-{
-  SetSize (GetWidth(), theHeight);
-}
-
-void Aspect_ColorScale::SizeHint (Standard_Integer& theWidth, Standard_Integer& theHeight) const
-{
-  Standard_Integer num = GetNumberOfIntervals();
-
-  Standard_Integer spacer = 5;
-  Standard_Integer textWidth = 0;
-  Standard_Integer textHeight = TextHeight ("");
-  Standard_Integer colorWidth = 20;
-
-  if (GetLabelPosition() != Aspect_TOCSP_NONE)
-    for (Standard_Integer idx = 0; idx < num; idx++)
-      textWidth = Max (textWidth, TextWidth (GetLabel (idx + 1)));
-
-  Standard_Integer scaleWidth = 0;
-  Standard_Integer scaleHeight = 0;
-
-  Standard_Integer titleWidth = 0;
-  Standard_Integer titleHeight = 0;
-
-  if (IsLabelAtBorder()) {
-    num++;
-    if (GetTitle().Length())
-      titleHeight += 10;
-  }
-
-  scaleWidth = colorWidth + textWidth + ( textWidth ? 3 : 2 ) * spacer;
-  scaleHeight = (Standard_Integer)( 1.5 * ( num + 1 ) * textHeight );
-  
-  if (GetTitle().Length()) {
-    titleHeight = TextHeight (GetTitle()) + spacer;
-    titleWidth =  TextWidth (GetTitle()) + 10;
-  }
-
-  theWidth = Max (titleWidth, scaleWidth);
-  theHeight = scaleHeight + titleHeight;
-}
-
-void Aspect_ColorScale::DrawScale ( const Quantity_Color& theBgColor,
-                                     const Standard_Integer theX, const Standard_Integer theY,
-                                     const Standard_Integer theWidth, const Standard_Integer theHeight)
-{
-  if (!BeginPaint())
-    return;
-
-  Standard_Integer num = GetNumberOfIntervals();
-  Aspect_TypeOfColorScalePosition labPos = GetLabelPosition();
-
-  Standard_Integer spacer = 5;
-  Standard_Integer textWidth = 0;
-  Standard_Integer textHeight = TextHeight ("");
-
-  Standard_Boolean drawLabel = GetLabelPosition() != Aspect_TOCSP_NONE;
-
-  TCollection_ExtendedString aTitle = GetTitle();
-
-  Standard_Integer titleHeight = 0;
-
-  Standard_Integer aGray = (Standard_Integer)(255 * ( theBgColor.Red() * 11 + theBgColor.Green() * 16 + theBgColor.Blue() * 5 ) / 32);
-  Quantity_Color aFgColor (aGray < 128 ? Quantity_NOC_WHITE : Quantity_NOC_BLACK);
-
-  // Draw title
-  if (aTitle.Length()) {
-    titleHeight = TextHeight (aTitle) + 2 * spacer;
-    PaintText (aTitle, theX + spacer, theY + spacer, aFgColor);
-  }
-
-  Standard_Boolean reverse = IsReversed();
-
-  Aspect_SequenceOfColor colors;
-  TColStd_SequenceOfExtendedString labels;
-  for (int idx = 0; idx < num; idx++) {
-    if (reverse) {
-      colors.Append (GetColor (idx));
-      labels.Append (GetLabel (idx));
-    }
-    else {
-      colors.Prepend (GetColor (idx));
-      labels.Prepend (GetLabel (idx));
-    }
-  }
-
-  if (IsLabelAtBorder()) {
-    if (reverse)
-      labels.Append (GetLabel (num));
-    else
-      labels.Prepend (GetLabel (num));
-  }
-
-  if (drawLabel)
-    for (Standard_Integer i = 1; i <= labels.Length(); i++)
-      textWidth = Max (textWidth, TextWidth (labels.Value (i)));
-
-  Standard_Integer lab = labels.Length();
-
-  Standard_Real spc = ( theHeight - ( ( Min (lab, 2) + Abs (lab - num - 1) ) * textHeight ) - titleHeight );
-  Standard_Real val = spc != 0 ? 1.0 * ( lab - Min (lab, 1) ) * textHeight / spc : 0;
-  Standard_Real iPart;
-  Standard_Real fPart = modf (val, &iPart);
-  Standard_Integer filter = (Standard_Integer)iPart + ( fPart != 0 ? 1 : 0 );
-
-  Standard_Real step = 1.0 * ( theHeight - ( lab - num + Abs (lab - num - 1) ) * textHeight - titleHeight ) / num;
-
-  Standard_Integer ascent = 0;
-  Standard_Integer colorWidth = Max (5, Min (20, theWidth - textWidth - 3 * spacer));
-  if (labPos == Aspect_TOCSP_CENTER || !drawLabel)
-    colorWidth = theWidth - 2 * spacer;
-
-  // Draw colors
-  Standard_Integer x = theX + spacer;
-  if (labPos == Aspect_TOCSP_LEFT)
-    x += textWidth + ( textWidth ? 1 : 0 ) * spacer;
-
-  Standard_Real offset = 1.0 * textHeight / 2 * ( lab - num + Abs (lab - num - 1) ) + titleHeight;
-  for (Standard_Integer ci = 1; ci <= colors.Length() && step > 0; ci++ ) {
-    Standard_Integer y = (Standard_Integer)( theY + ( ci - 1 )* step + offset);
-    Standard_Integer h = (Standard_Integer)( theY + ( ci ) * step + offset ) - y;
-    PaintRect (x, y, colorWidth, h, colors.Value (ci), Standard_True);
-  }
-
-  if (step > 0)
-    PaintRect (x - 1, (Standard_Integer)(theY + offset - 1), colorWidth + 2, (Standard_Integer)(colors.Length() * step + 2), aFgColor);
-
-  // Draw labels
-  offset = 1.0 * Abs (lab - num - 1) * ( step - textHeight ) / 2 + 1.0 * Abs (lab - num - 1) * textHeight / 2;
-  offset += titleHeight;
-  if (drawLabel && labels.Length() && filter > 0) {
-    Standard_Integer i1 = 0;
-    Standard_Integer i2 = lab - 1;
-    Standard_Integer last1 (i1), last2 (i2);
-    x = theX + spacer;
-    switch ( labPos ) {
-    case Aspect_TOCSP_NONE:
-    case Aspect_TOCSP_LEFT:
-      break;
-    case Aspect_TOCSP_CENTER:
-      x += ( colorWidth - textWidth ) / 2;
-      break;
-    case Aspect_TOCSP_RIGHT:
-      x += colorWidth + spacer;
-      break;
-    }
-    while (i2 - i1 >= filter || ( i2 == 0 && i1 == 0 )) {
-      Standard_Integer pos1 = i1;
-      Standard_Integer pos2 = lab - 1 - i2;
-      if (filter && !( pos1 % filter )) {
-        PaintText (labels.Value (i1 + 1), x, (Standard_Integer)( theY + i1 * step + ascent + offset ), aFgColor);
-        last1 = i1;
-      }
-      if (filter && !( pos2 % filter )) {
-        PaintText (labels.Value (i2 + 1), x, (Standard_Integer)( theY + i2 * step + ascent + offset ), aFgColor);
-        last2 = i2;
-      }
-      i1++;
-      i2--;
-    }
-    Standard_Integer pos = i1;
-    Standard_Integer i0 = -1;
-    while (pos <= i2 && i0 == -1) {
-      if (filter && !( pos % filter ) && Abs (pos - last1) >= filter && Abs (pos - last2) >= filter)
-        i0 = pos;
-      pos++;
-    }
-
-    if (i0 != -1)
-      PaintText (labels.Value (i0 + 1), x, (Standard_Integer)( theY + i0 * step + ascent + offset ), aFgColor);
-  }
-
-  EndPaint();
-}
-
-Standard_Boolean Aspect_ColorScale::BeginPaint()
-{
-  return Standard_True;
-}
-
-Standard_Boolean Aspect_ColorScale::EndPaint()
-{
-  return Standard_True;
-}
-
-void Aspect_ColorScale::UpdateColorScale()
-{
-}
-
-TCollection_AsciiString Aspect_ColorScale::Format() const
-{
-  return GetFormat();
-}
-
-Standard_Real Aspect_ColorScale::GetNumber (const Standard_Integer theIndex) const
-{
-  Standard_Real aNum = 0;
-  if (GetNumberOfIntervals() > 0)
-    aNum = GetMin() + theIndex * ( Abs (GetMax() - GetMin()) / GetNumberOfIntervals() );
-  return aNum;
-}
-
-Standard_Integer Aspect_ColorScale::HueFromValue (const Standard_Integer theValue,
-                                                  const Standard_Integer theMin, const Standard_Integer theMax)
-{
-  Standard_Integer minLimit (0), maxLimit (230);
-
-  Standard_Integer aHue = maxLimit;
-  if (theMin != theMax)
-    aHue = (Standard_Integer)( maxLimit - ( maxLimit - minLimit ) * ( theValue - theMin ) / ( theMax - theMin ) );
-
-  aHue = Min (Max (minLimit, aHue), maxLimit);
-
-  return aHue;
-}
-
-Standard_Integer  Aspect_ColorScale::GetTextHeight() const {
-  return myTextHeight;
-}
-
-void Aspect_ColorScale::SetTextHeight (const Standard_Integer theHeight) {
-  myTextHeight = theHeight;
-  UpdateColorScale ();
-}
-
-
-Standard_Boolean Aspect_ColorScale::FindColor (const Standard_Real theValue,
-                                               Quantity_Color& theColor) const
-{
-  return FindColor (theValue, myMin, myMax, myInterval, theColor);
-}
-
-
-Standard_Boolean Aspect_ColorScale::FindColor (const Standard_Real theValue,
-                                               const Standard_Real theMin,
-                                               const Standard_Real theMax,
-                                               const Standard_Integer theColorsCount,
-                                               Quantity_Color& theColor)
-{
-  if(theValue<theMin || theValue>theMax || theMax<theMin)
-    return Standard_False;
-
-  else
-  {
-    Standard_Real IntervNumber = 0;
-    if(Abs (theMax-theMin) > Precision::Approximation())
-      IntervNumber = Floor (Standard_Real( theColorsCount ) * ( theValue - theMin ) / ( theMax - theMin ));
-
-    Standard_Integer Interv = Standard_Integer (IntervNumber);
-
-    theColor = Quantity_Color (HueFromValue (Interv, 0, theColorsCount - 1), 1.0, 1.0, Quantity_TOC_HLS);
-
-    return Standard_True;
-  } 
-}
index af1b456..92a477b 100755 (executable)
@@ -13,8 +13,6 @@ Aspect_BadAccess.hxx
 Aspect_CircularGrid.cxx
 Aspect_CircularGrid.hxx
 Aspect_CLayer2d.hxx
-Aspect_ColorScale.cxx
-Aspect_ColorScale.hxx
 Aspect_Convert.hxx
 Aspect_Display.hxx
 Aspect_DisplayConnection.cxx
index 043c57c..1ada39b 100644 (file)
@@ -75,6 +75,7 @@
 #include <TColStd_Array1OfInteger.hxx>
 #include <Geom_BSplineCurve.hxx>
 #include <TColgp_Array1OfPnt.hxx>
+#include <AIS_ColorScale.hxx>
 #include <AIS_ListOfInteractive.hxx>
 #include <AIS_ListIteratorOfListOfInteractive.hxx>
 #include <ViewerTest_DoubleMapOfInteractiveAndName.hxx>
@@ -4536,17 +4537,30 @@ static Standard_Integer OCC12584 (Draw_Interpretor& di, Standard_Integer argc, c
     return 1;
   }
   Handle(V3d_View) V = ViewerTest::CurrentView();
+  static Handle(AIS_ColorScale) aCS;
+  if (aCS.IsNull())
+  {
+    aCS = new AIS_ColorScale();
+  }
+  if (aCS->ZLayer() != Graphic3d_ZLayerId_TopOSD)
+  {
+    aCS->SetZLayer (Graphic3d_ZLayerId_TopOSD);
+  }
+  if (aCS->GetTransformPersistenceMode() != Graphic3d_TMF_2d)
+  {
+    aCS->SetTransformPersistence (Graphic3d_TMF_2d, gp_Pnt (-1,-1,0));
+  }
   if ( !V.IsNull() ) {
     if (mode == 0) {
-      V->ColorScaleDisplay();
+      aContext->Display (aCS);
     }
     if (mode == 1) {
-      V->ColorScaleErase();
+      aContext->Erase (aCS);
       V->UpdateLights();
       V->Update();
     }
     if (mode == 2) {
-      Standard_Boolean IsDisplayed = V->ColorScaleIsDisplayed();
+      Standard_Boolean IsDisplayed = aContext->IsDisplayed (aCS);
       if (IsDisplayed)
        di <<"ColorScaleIsDisplayed = " << "1" << "\n";
       else
index 934151d..ca09529 100755 (executable)
@@ -5,10 +5,6 @@ V3d_AmbientLight.hxx
 V3d_BadValue.hxx
 V3d_CircularGrid.cxx
 V3d_CircularGrid.hxx
-V3d_ColorScale.cxx
-V3d_ColorScale.hxx
-V3d_ColorScaleLayerItem.cxx
-V3d_ColorScaleLayerItem.hxx
 V3d_Coordinate.hxx
 V3d_DirectionalLight.cxx
 V3d_DirectionalLight.hxx
diff --git a/src/V3d/V3d_ColorScale.cxx b/src/V3d/V3d_ColorScale.cxx
deleted file mode 100644 (file)
index ee63b73..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-// Created on: 2004-06-22
-// Created by: STV
-// Copyright (c) 2004-2014 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.
-
-
-#include <Aspect_SequenceOfColor.hxx>
-#include <Aspect_TypeOfColorScaleData.hxx>
-#include <Aspect_TypeOfColorScalePosition.hxx>
-#include <Aspect_Window.hxx>
-#include <Font_NameOfFont.hxx>
-#include <Quantity_Color.hxx>
-#include <Standard_Type.hxx>
-#include <TCollection_AsciiString.hxx>
-#include <TCollection_ExtendedString.hxx>
-#include <TColStd_SequenceOfExtendedString.hxx>
-#include <V3d_ColorScale.hxx>
-#include <V3d_LayerMgr.hxx>
-#include <V3d_View.hxx>
-#include <Visual3d_Layer.hxx>
-#include <Visual3d_View.hxx>
-#include <Visual3d_ViewManager.hxx>
-
-V3d_ColorScale::V3d_ColorScale (const Handle(V3d_LayerMgr)& theMgr)
-: Aspect_ColorScale(),
-myLayerMgr( theMgr.operator->() ),
-myDisplay( Standard_False )
-{
-}
-
-void V3d_ColorScale::Display()
-{
-  myDisplay = Standard_True;
-  UpdateColorScale();
-}
-
-void V3d_ColorScale::Erase()
-{
-  myDisplay = Standard_False;
-  UpdateColorScale();
-}
-
-Standard_Boolean V3d_ColorScale::IsDisplayed() const
-{
-  return myDisplay;
-}
-
-void V3d_ColorScale::UpdateColorScale()
-{
-  myLayerMgr->Compute();
-}
-
-void V3d_ColorScale::PaintRect (const Standard_Integer theX, const Standard_Integer theY,
-                                const Standard_Integer theWidth, const Standard_Integer theHeight,
-                                const Quantity_Color& theColor, const Standard_Boolean theFilled)
-{
-  const Handle(Visual3d_Layer) &theLayer = myLayerMgr->Overlay();
-  if (theLayer.IsNull())
-    return;
-
-  theLayer->SetColor (theColor);
-  if (theFilled)
-    theLayer->DrawRectangle (theX, theY, theWidth, theHeight);
-  else {
-    theLayer->SetLineAttributes( Aspect_TOL_SOLID, 0.5 );
-    theLayer->BeginPolyline();
-    theLayer->AddVertex (theX, theY, Standard_False);
-    theLayer->AddVertex (theX, theY + theHeight, Standard_True);
-    theLayer->AddVertex (theX + theWidth, theY + theHeight, Standard_True);
-    theLayer->AddVertex (theX + theWidth, theY, Standard_True);
-    theLayer->AddVertex (theX, theY, Standard_True);
-    theLayer->ClosePrimitive();
-  }
-}
-
-void V3d_ColorScale::PaintText (const TCollection_ExtendedString& theText,
-                                const Standard_Integer theX, const Standard_Integer theY,
-                                const Quantity_Color& theColor)
-{
-  const Handle(Visual3d_Layer) &theLayer = myLayerMgr->Overlay();
-  if (theLayer.IsNull())
-    return;
-
-  theLayer->SetColor (theColor);
-  theLayer->SetTextAttributes (Font_NOF_ASCII_MONO, Aspect_TODT_NORMAL, theColor);
-  TCollection_AsciiString aText (theText.ToExtString(), '?');
-  Standard_Integer aTextH = GetTextHeight();
-  Standard_Integer aWidth, anAscent, aDescent;
-  TextSize (theText, aTextH, aWidth, anAscent, aDescent);
-  theLayer->DrawText (aText.ToCString(), theX, theY + anAscent, aTextH);
-}
-
-Standard_Integer V3d_ColorScale::TextWidth (const TCollection_ExtendedString& theText) const
-{
-  Standard_Integer aWidth, anAscent, aDescent;
-  TextSize (theText, GetTextHeight(), aWidth, anAscent, aDescent);
-  return aWidth;
-}
-
-Standard_Integer V3d_ColorScale::TextHeight (const TCollection_ExtendedString& theText) const
-{
-  Standard_Integer aWidth, anAscent, aDescent;
-  TextSize (theText, GetTextHeight(), aWidth, anAscent, aDescent);
-  return anAscent+aDescent;
-}
-
-void V3d_ColorScale::TextSize (const TCollection_ExtendedString& theText,  const Standard_Integer theHeight, Standard_Integer& theWidth, Standard_Integer& theAscent, Standard_Integer& theDescent) const
-{
-  const Handle(Visual3d_Layer) &theLayer = myLayerMgr->Overlay();
-  if (!theLayer.IsNull()) {
-    Standard_Real aWidth, anAscent, aDescent;
-    TCollection_AsciiString aText (theText.ToExtString(), '?');
-    theLayer->TextSize (aText.ToCString(),theHeight,aWidth,anAscent,aDescent);
-    theWidth = (Standard_Integer)aWidth;
-    theAscent = (Standard_Integer)anAscent;
-    theDescent = (Standard_Integer)aDescent;
-  } 
-  else {
-    theWidth=theAscent=theDescent=0;
-  }
-}
-
-void V3d_ColorScale::DrawScale ()
-{
-  const Handle(V3d_View) &theView = myLayerMgr->View();
-  if (theView.IsNull())
-    return;
-
-  const Handle(Aspect_Window) &theWin = theView->Window();
-  if (theWin.IsNull())
-    return;
-
-  Standard_Integer WinWidth( 0 ), WinHeight( 0 );
-  theWin->Size (WinWidth, WinHeight);
-
-  const Standard_Integer X = RealToInt (GetXPosition() * WinWidth);
-  const Standard_Integer Y = RealToInt (GetYPosition() * WinHeight);
-
-  const Standard_Integer W = RealToInt (GetWidth() * WinWidth);
-  const Standard_Integer H = RealToInt (GetHeight() * WinHeight);
-
-  Aspect_ColorScale::DrawScale (theView->BackgroundColor(), X, Y, W, H);
-}
diff --git a/src/V3d/V3d_ColorScale.hxx b/src/V3d/V3d_ColorScale.hxx
deleted file mode 100644 (file)
index adf5f75..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-// Created on: 2004-06-24
-// Created by: STV
-// Copyright (c) 2004-2014 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 _V3d_ColorScale_HeaderFile
-#define _V3d_ColorScale_HeaderFile
-
-#include <Standard.hxx>
-#include <Standard_Type.hxx>
-
-#include <V3d_LayerMgrPointer.hxx>
-#include <Standard_Boolean.hxx>
-#include <Aspect_ColorScale.hxx>
-#include <Standard_Integer.hxx>
-class V3d_LayerMgr;
-class Quantity_Color;
-class TCollection_ExtendedString;
-
-
-class V3d_ColorScale;
-DEFINE_STANDARD_HANDLE(V3d_ColorScale, Aspect_ColorScale)
-
-//! A colorscale class
-class V3d_ColorScale : public Aspect_ColorScale
-{
-
-public:
-
-  
-  //! Returns returns ColorScale from V3d.
-  //! Returns View from V3d.
-  Standard_EXPORT V3d_ColorScale(const Handle(V3d_LayerMgr)& theMgr);
-  
-  Standard_EXPORT void Display();
-  
-  Standard_EXPORT void Erase();
-  
-  Standard_EXPORT Standard_Boolean IsDisplayed() const;
-  
-  Standard_EXPORT virtual void PaintRect (const Standard_Integer theX, const Standard_Integer theY, const Standard_Integer theWidth, const Standard_Integer theHeight, const Quantity_Color& theColor, const Standard_Boolean theFilled = Standard_False) Standard_OVERRIDE;
-  
-  Standard_EXPORT virtual void PaintText (const TCollection_ExtendedString& theText, const Standard_Integer theX, const Standard_Integer theY, const Quantity_Color& theColor) Standard_OVERRIDE;
-  
-  Standard_EXPORT virtual Standard_Integer TextWidth (const TCollection_ExtendedString& theText) const Standard_OVERRIDE;
-  
-  Standard_EXPORT virtual Standard_Integer TextHeight (const TCollection_ExtendedString& theText) const Standard_OVERRIDE;
-  
-  Standard_EXPORT void TextSize (const TCollection_ExtendedString& theText, const Standard_Integer theHeight, Standard_Integer& theWidth, Standard_Integer& theAscent, Standard_Integer& theDescent) const;
-  
-  Standard_EXPORT void DrawScale();
-
-
-
-
-  DEFINE_STANDARD_RTTI(V3d_ColorScale,Aspect_ColorScale)
-
-protected:
-
-  
-  Standard_EXPORT virtual void UpdateColorScale() Standard_OVERRIDE;
-
-
-
-private:
-
-
-  V3d_LayerMgrPointer myLayerMgr;
-  Standard_Boolean myDisplay;
-
-
-};
-
-
-
-
-
-
-
-#endif // _V3d_ColorScale_HeaderFile
diff --git a/src/V3d/V3d_ColorScaleLayerItem.cxx b/src/V3d/V3d_ColorScaleLayerItem.cxx
deleted file mode 100644 (file)
index 202122d..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (c) 1999-2014 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.
-
-/***********************************************************************
-************************************************************************/
-// for the class
-
-#include <Standard_Type.hxx>
-#include <V3d_ColorScale.hxx>
-#include <V3d_ColorScaleLayerItem.hxx>
-
-//
-//-Constructors
-//
-V3d_ColorScaleLayerItem::V3d_ColorScaleLayerItem (
-  const Handle(V3d_ColorScale)& aColorScale ):
-Visual3d_LayerItem(),
-MyColorScale(aColorScale)
-{
-}
-
-void V3d_ColorScaleLayerItem::ComputeLayerPrs()
-{
-  Visual3d_LayerItem::ComputeLayerPrs();
-}
-
-void V3d_ColorScaleLayerItem::RedrawLayerPrs()
-{
-  Visual3d_LayerItem::RedrawLayerPrs();
-  if ( !MyColorScale.IsNull() )
-    MyColorScale->DrawScale();
-}
diff --git a/src/V3d/V3d_ColorScaleLayerItem.hxx b/src/V3d/V3d_ColorScaleLayerItem.hxx
deleted file mode 100644 (file)
index 2015b91..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-// Created on: 2009-03-20
-// Created by: ABD
-// Copyright (c) 2009-2014 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 _V3d_ColorScaleLayerItem_HeaderFile
-#define _V3d_ColorScaleLayerItem_HeaderFile
-
-#include <Standard.hxx>
-#include <Standard_Type.hxx>
-
-#include <Visual3d_LayerItem.hxx>
-class V3d_ColorScale;
-
-
-class V3d_ColorScaleLayerItem;
-DEFINE_STANDARD_HANDLE(V3d_ColorScaleLayerItem, Visual3d_LayerItem)
-
-//! This class is drawable unit of ColorScale of 2d scene
-class V3d_ColorScaleLayerItem : public Visual3d_LayerItem
-{
-
-public:
-
-  
-  //! Creates a layer item
-  Standard_EXPORT V3d_ColorScaleLayerItem(const Handle(V3d_ColorScale)& aColorScale);
-  
-  //! virtual function for recompute 2D
-  //! presentation (empty by default)
-  Standard_EXPORT virtual void ComputeLayerPrs() Standard_OVERRIDE;
-  
-  //! virtual function for recompute 2D
-  //! presentation (empty by default)
-  Standard_EXPORT virtual void RedrawLayerPrs() Standard_OVERRIDE;
-
-
-
-
-  DEFINE_STANDARD_RTTI(V3d_ColorScaleLayerItem,Visual3d_LayerItem)
-
-protected:
-
-
-
-
-private:
-
-
-  Handle(V3d_ColorScale) MyColorScale;
-
-
-};
-
-
-
-
-
-
-
-#endif // _V3d_ColorScaleLayerItem_HeaderFile
index e7e1a10..db2a775 100644 (file)
 // commercial license or contractual agreement.
 
 
-#include <Aspect_ColorScale.hxx>
 #include <Aspect_Window.hxx>
 #include <Font_NameOfFont.hxx>
 #include <Standard_Type.hxx>
-#include <V3d_ColorScale.hxx>
-#include <V3d_ColorScaleLayerItem.hxx>
 #include <V3d_LayerMgr.hxx>
 #include <V3d_View.hxx>
 #include <Visual3d_Layer.hxx>
@@ -52,38 +49,6 @@ void V3d_LayerMgr::Resized()
   Compute();
 }
 
-void V3d_LayerMgr::ColorScaleDisplay()
-{
-  if (ColorScaleIsDisplayed())
-    return;
-  ColorScale();
-  myColorScale->Display();
-  myOverlay->AddLayerItem( myColorScaleLayerItem );
-}
-
-void V3d_LayerMgr::ColorScaleErase()
-{
-  if ( !myColorScale.IsNull() )
-    myColorScale->Erase();
-  myOverlay->RemoveLayerItem( myColorScaleLayerItem );
-}
-
-Standard_Boolean V3d_LayerMgr::ColorScaleIsDisplayed() const
-{
-  return ( myColorScale.IsNull() ? Standard_False : myColorScale->IsDisplayed() );
-}
-
-Handle(Aspect_ColorScale) V3d_LayerMgr::ColorScale() const
-{
-  if ( myColorScale.IsNull() ) {
-    Handle(V3d_LayerMgr) that = this;
-    that->myColorScale = new V3d_ColorScale( this );
-    that->myColorScaleLayerItem = new V3d_ColorScaleLayerItem( that->myColorScale );
-  }
-
-  return Handle(Aspect_ColorScale) (myColorScale);
-}
-
 Standard_Boolean V3d_LayerMgr::Begin()
 {
   if ( myOverlay.IsNull() )
index 959b1db..8b78164 100644 (file)
@@ -45,14 +45,6 @@ public:
   
     Handle(V3d_View) View() const;
   
-  Standard_EXPORT void ColorScaleDisplay();
-  
-  Standard_EXPORT void ColorScaleErase();
-  
-  Standard_EXPORT Standard_Boolean ColorScaleIsDisplayed() const;
-  
-  Standard_EXPORT Handle(Aspect_ColorScale) ColorScale() const;
-  
   //! Recompute layer with objects
   Standard_EXPORT void Compute();
   
@@ -77,8 +69,6 @@ protected:
 
   V3d_ViewPointer myView;
   Handle(Visual3d_Layer) myOverlay;
-  Handle(V3d_ColorScale) myColorScale;
-  Handle(V3d_ColorScaleLayerItem) myColorScaleLayerItem;
 
 
 private:
index 745a3eb..818ec07 100644 (file)
@@ -66,7 +66,6 @@ To solve the problem (for lack of a better solution) I make 2 passes.
 * Includes
 */
 
-#include <Aspect_ColorScale.hxx>
 #include <Aspect_GradientBackground.hxx>
 #include <Aspect_Grid.hxx>
 #include <Aspect_Window.hxx>
index a72cc48..671cf07 100644 (file)
@@ -86,7 +86,6 @@ class V3d_Viewer;
 class Quantity_Color;
 class Graphic3d_TextureEnv;
 class V3d_Light;
-class Aspect_ColorScale;
 class Bnd_Box;
 class Aspect_GradientBackground;
 class gp_Dir;
@@ -340,14 +339,6 @@ public:
   
   Standard_EXPORT void SetLayerMgr (const Handle(V3d_LayerMgr)& aMgr);
   
-  Standard_EXPORT void ColorScaleDisplay();
-  
-  Standard_EXPORT void ColorScaleErase();
-  
-  Standard_EXPORT Standard_Boolean ColorScaleIsDisplayed() const;
-  
-  Standard_EXPORT Handle(Aspect_ColorScale) ColorScale() const;
-  
   //! modify the Projection of the view perpendicularly to
   //! the privileged plane of the viewer.
   Standard_EXPORT void SetFront();
index 921b225..932e88c 100644 (file)
@@ -20,7 +20,6 @@
  * Includes
   */
 
-#include <Aspect_ColorScale.hxx>
 #include <Aspect_GradientBackground.hxx>
 #include <Aspect_Grid.hxx>
 #include <Aspect_Window.hxx>
index 7b3ccc8..bed8bb2 100644 (file)
@@ -28,7 +28,6 @@
  * Includes
  */
 
-#include <Aspect_ColorScale.hxx>
 #include <Aspect_GradientBackground.hxx>
 #include <Aspect_Grid.hxx>
 #include <Aspect_Window.hxx>
index 8fbeaad..b00de37 100644 (file)
@@ -12,7 +12,6 @@
 // commercial license or contractual agreement.
 
 
-#include <Aspect_ColorScale.hxx>
 #include <Aspect_GradientBackground.hxx>
 #include <Aspect_Grid.hxx>
 #include <Aspect_Window.hxx>
index bd2fc63..044ea6b 100644 (file)
@@ -12,7 +12,6 @@
 // commercial license or contractual agreement.
 
 
-#include <Aspect_ColorScale.hxx>
 #include <Aspect_GradientBackground.hxx>
 #include <Aspect_Grid.hxx>
 #include <Aspect_RectangularGrid.hxx>
index d8bada8..55f8884 100644 (file)
@@ -24,7 +24,6 @@
  * Includes
  */
 
-#include <Aspect_ColorScale.hxx>
 #include <Aspect_GradientBackground.hxx>
 #include <Aspect_Grid.hxx>
 #include <Aspect_Window.hxx>
@@ -72,42 +71,3 @@ void V3d_View::SetLayerMgr(const Handle(V3d_LayerMgr)& aMgr)
 {
   MyLayerMgr = aMgr;
 }
-
-void V3d_View::ColorScaleDisplay()
-{
-  if ( MyLayerMgr.IsNull() )
-    MyLayerMgr = new V3d_LayerMgr( this );
-
-  MyLayerMgr->ColorScaleDisplay();
-  MustBeResized();
-  if ( !Window().IsNull() ) {
-    Standard_Integer aW( 0 ), aH( 0 );
-    Window()->Size( aW, aH );
-    Redraw( 0, 0, aW, aH );
-  }
-}
-
-void V3d_View::ColorScaleErase()
-{
-  if ( !MyLayerMgr.IsNull() )
-    MyLayerMgr->ColorScaleErase();
-}
-
-Standard_Boolean V3d_View::ColorScaleIsDisplayed() const
-{
-  Standard_Boolean aStatus = Standard_False;
-  if ( !MyLayerMgr.IsNull() )
-    aStatus = MyLayerMgr->ColorScaleIsDisplayed();
-
-  return aStatus;
-}
-
-Handle(Aspect_ColorScale) V3d_View::ColorScale() const
-{
-  if ( MyLayerMgr.IsNull() ) {
-    Handle(V3d_View) that = this;
-    that->MyLayerMgr = new V3d_LayerMgr( this );
-  }
-
-  return MyLayerMgr->ColorScale();
-}
index a74b668..a909657 100644 (file)
@@ -24,7 +24,6 @@
 #endif
 
 
-#include <Aspect_ColorScale.hxx>
 #include <Aspect_GradientBackground.hxx>
 #include <Aspect_Grid.hxx>
 #include <Aspect_Window.hxx>
index bfb113f..9afd45c 100644 (file)
@@ -15,6 +15,7 @@
 // commercial license or contractual agreement.
 
 #include <OpenGl_GlCore20.hxx>
+#include <AIS_ColorScale.hxx>
 #include <AIS_Shape.hxx>
 #include <AIS_InteractiveObject.hxx>
 #include <AIS_ListOfInteractive.hxx>
@@ -37,7 +38,6 @@
 #include <Visual3d_View.hxx>
 #include <Visual3d_ViewManager.hxx>
 #include <V3d_AmbientLight.hxx>
-#include <V3d_ColorScale.hxx>
 #include <V3d_DirectionalLight.hxx>
 #include <V3d_LayerMgr.hxx>
 #include <V3d_LayerMgrPointer.hxx>
@@ -3474,11 +3474,31 @@ static int VColorScale (Draw_Interpretor& theDI,
     return 1;
   }
 
-  Handle(V3d_ColorScale) aCS = Handle(V3d_ColorScale)::DownCast (aView->ColorScale());
-  if (aCS.IsNull())
+  Handle(AIS_ColorScale) aCS;
+  // find object
+  Handle(AIS_InteractiveObject) anIObj;
+  if (GetMapOfAIS().IsBound2 (theArgVec[1]))
   {
-    std::cout << "Error: color scale is undefined!\n";
-    return 1;
+    aCS = Handle(AIS_ColorScale)::DownCast (GetMapOfAIS().Find2 (theArgVec[1]));
+    if (aCS.IsNull())
+    {
+      std::cout << "Error: object '" << theArgVec[1] << "'is already defined and is not a color scale!\n";
+      return 1;
+    }
+  }
+  else
+  {
+    aCS = new AIS_ColorScale();
+    GetMapOfAIS().Bind (aCS,theArgVec[1]);
+  }
+
+  if (aCS->ZLayer() != Graphic3d_ZLayerId_TopOSD)
+  {
+    aCS->SetZLayer (Graphic3d_ZLayerId_TopOSD);
+  }
+  if (aCS->GetTransformPersistenceMode() != Graphic3d_TMF_2d)
+  {
+    aCS->SetTransformPersistence (Graphic3d_TMF_2d, gp_Pnt (-1,-1,0));
   }
 
   Standard_Real                   aMinRange    = aCS->GetMin();
@@ -3492,7 +3512,12 @@ static int VColorScale (Draw_Interpretor& theDI,
 
   if (theArgNb <= 1)
   {
-    theDI << "Current color scale parameters:\n"
+    std::cout << "Error: wrong syntax at command '" << theArgVec[0] << "'!\n";
+    return 1;
+  }
+  if (theArgNb <= 2)
+  {
+    theDI << "Color scale parameters for '"<< theArgVec[1] << "':\n"
           << "Min range: " << aMinRange << "\n"
           << "Max range: " << aMaxRange << "\n"
           << "Number of intervals: " << aNbIntervals << "\n"
@@ -3517,41 +3542,8 @@ static int VColorScale (Draw_Interpretor& theDI,
     }
     return 0;
   }
-  Standard_CString        aFirstArg = theArgVec[1];
-  TCollection_AsciiString aFlag (aFirstArg);
-  aFlag.LowerCase();
-  if (aFlag == "-hide" ||
-      aFlag == "-erase")
-  {
-    if (theArgNb > 2)
-    {
-      std::cout << "Error: wrong syntax at argument '" << theArgVec[1] << "'!\n";
-      return 1;
-    }
-    if (!aView->ColorScaleIsDisplayed())
-    {
-      std::cout << "Error: color scale is not displayed!\n";
-      return 1;
-   }
-    else
-    {
-      aView->ColorScaleErase();
-      return 0;
-    }
-  }
-  else if (aFlag == "-show" ||
-           aFlag == "-display")
-  {
-    if (theArgNb > 2)
-    {
-      std::cout << "Error: wrong syntax at argument '" << theArgVec[1] << "'!\n";
-      return 1;
-    }
-    aView->ColorScaleDisplay();
-    return 0;
-  }
 
-  for (Standard_Integer anArgIter = 1; anArgIter < theArgNb; ++anArgIter)
+  for (Standard_Integer anArgIter = 2; anArgIter < theArgNb; ++anArgIter)
   {
     Standard_CString        anArg = theArgVec[anArgIter];
     TCollection_AsciiString aFlag (anArg);
@@ -3699,7 +3691,7 @@ static int VColorScale (Draw_Interpretor& theDI,
       if (Quantity_Color::ColorFromName (theArgVec[anArgIter + 2], aColorName))
       {
         aCS->SetColor    (Quantity_Color (aColorName), anIndex);
-        aCS->SetColorType(Aspect_TOCSD_USER);
+        aCS->SetColorType (Aspect_TOCSD_USER);
         anArgIter += 2;
         continue;
       }
@@ -3867,8 +3859,8 @@ static int VColorScale (Draw_Interpretor& theDI,
       aMaxRange    = 100;
       aNbIntervals = 10;
       aLabPosition = Aspect_TOCSP_RIGHT;
-      aCS->SetColorType(Aspect_TOCSD_AUTO);
-      aCS->SetLabelType(Aspect_TOCSD_AUTO);
+      aCS->SetColorType (Aspect_TOCSD_AUTO);
+      aCS->SetLabelType (Aspect_TOCSD_AUTO);
     }
     else
     {
@@ -3883,11 +3875,8 @@ static int VColorScale (Draw_Interpretor& theDI,
   aCS->SetRange             (aMinRange, aMaxRange);
   aCS->SetNumberOfIntervals (aNbIntervals);
   aCS->SetLabelPosition     (aLabPosition);
-
-  if (!aView->ColorScaleIsDisplayed())
-  {
-    aView->ColorScaleDisplay();
-  }
+  aCS->SetToUpdate();
+  aContext->Display (aCS);
 
   return 0;
 }
@@ -8837,7 +8826,7 @@ void ViewerTest::ViewerCommands(Draw_Interpretor& theCommands)
     " : notice that EMF format requires patched gl2ps",
     __FILE__,VExport,group);
   theCommands.Add("vcolorscale",
-    "vcolorscale     : vcolorscale [-range RangeMin = 0 RangeMax = 100 Intervals = 10 -font HeightFont = 16  -textpos "
+    "vcolorscale     : vcolorscale name [-range RangeMin = 0 RangeMax = 100 Intervals = 10 -font HeightFont = 16  -textpos "
     "Position = left -xy X = 0 Y = 0] [-noupdate|-update]: draw color scale\n"
     "-demo/-demoversion draw a demoversion of color scale.\n"
     "-show/display display color scale.\n"
index 039a882..e906a83 100755 (executable)
@@ -4,5 +4,5 @@ puts "OCC21450"
 puts "============"
 puts ""
 
-vcolorscale -range 10 20 100 -font 16 -textpos right -xy 0 0
+vcolorscale cs -range 10 20 100 -font 16 -textpos right -xy 0 0
 
index 7414ad4..a1f6185 100755 (executable)
@@ -5,5 +5,5 @@ puts "============"
 puts ""
 
 vinit View1
-vcolorscale -range 10 20 100 -font 16 -textpos right -xy 0 0
+vcolorscale cs -range 10 20 100 -font 16 -textpos right -xy 0 0
 set only_screen 0
index c2e27a6..5a34332 100755 (executable)
@@ -12,7 +12,7 @@ vinit View1
 vdisplay result
 vsetmaterial result SILVER
 vsettransparency result 0.6
-vcolorscale -demo
+vcolorscale cs -demo
 vsetdispmode result 1 
 
 set square 11309.6
index f6e9bf3..46f4a90 100755 (executable)
@@ -11,7 +11,7 @@ vinit View1 w=1024 h=512
 vsetdispmode 1
 vdisplay b
 vfit
-vcolorscale -range 10 20 100 -font 16 -textpos right -xy 0 0
+vcolorscale cs -range 10 20 100 -font 16 -textpos right -xy 0 0
 vmoveto 512 250
 
 set only_screen 1
index 1c1d02c..9a6cc34 100644 (file)
@@ -9,24 +9,24 @@ vclear
 vaxo
 
 # create default color scale
-vcolorscale -demo
+vcolorscale cs -demo
 vdump ${imagedir}/${casename}_1.png
 
 # reduce color scale range and number of intervals
-vcolorscale -range 0 20 5
+vcolorscale cs -range 0 20 5
 vdump ${imagedir}/${casename}_2.png
 
 # set user-defined colors and labels for color scale
-vcolorscale -colors white 0 0 1 green 1 0 0 1 1 1 -labels start 1 2 3 4 end
+vcolorscale cs -colors white 0 0 1 green 1 0 0 1 1 1 -labels start 1 2 3 4 end
 vdump ${imagedir}/${casename}_3.png
 
 # change colors of first and last intervals
-vcolorscale -color 0 0.42 0.35 0.8
-vcolorscale -color 4 pink
+vcolorscale cs -color 0 0.42 0.35 0.8
+vcolorscale cs -color 4 pink
 
 # change last label
-vcolorscale -label 5 "last"
+vcolorscale cs -label 5 "last"
 
 # set a title for color scale
-vcolorscale -title "My color scale"
+vcolorscale cs -title "My color scale"
 vdump ${imagedir}/${casename}_4.png