]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Provide presentation for boolean values
authorvsv <vsv@opencascade.com>
Wed, 26 Jun 2019 15:51:34 +0000 (18:51 +0300)
committervsv <vsv@opencascade.com>
Wed, 26 Jun 2019 15:51:34 +0000 (18:51 +0300)
src/PartSet/PartSet_FieldStepPrs.cpp
src/PartSet/PartSet_FieldStepPrs.h
src/XGUI/XGUI_SelectionMgr.cpp
src/XGUI/XGUI_ViewerProxy.cpp

index c699c8ed1233e81c3ee804e6d31e578668abe06f..f616fabcecb27c67871478093faadf0911630be3 100644 (file)
 #include <ModelAPI_AttributeStringArray.h>
 
 #include <AIS_ColorScale.hxx>
+#include <Prs3d_Drawer.hxx>
+#include <Prs3d_PointAspect.hxx>
 
 
 IMPLEMENT_STANDARD_RTTIEXT(PartSet_FieldStepPrs, ViewerData_AISShape);
 
+#define POINT_SIZE 8
+
 
 void emptyDeleter(ModelAPI_ResultField* theF)
 {
@@ -48,6 +52,15 @@ PartSet_FieldStepPrs::PartSet_FieldStepPrs(FieldStepPtr theStep)
   // Make shared_ptr which will not delete original pointer after exit
   std::shared_ptr<ModelAPI_ResultField> aFieldPtr(aField, emptyDeleter);
   myFeature = ModelAPI_Feature::feature(aFieldPtr);
+
+  Handle(Prs3d_Drawer) aDrawer = Attributes();
+  if (aDrawer->HasOwnPointAspect()) {
+    aDrawer->PointAspect()->SetTypeOfMarker(Aspect_TOM_POINT);
+    aDrawer->PointAspect()->SetScale(POINT_SIZE);
+  }
+  else
+    aDrawer->SetPointAspect(
+      new Prs3d_PointAspect(Aspect_TOM_POINT, Quantity_NOC_YELLOW, POINT_SIZE));
 }
 
 
@@ -116,13 +129,13 @@ void PartSet_FieldStepPrs::Compute(const Handle(PrsMgr_PresentationManager3d)& t
   const Handle(Prs3d_Presentation)& thePrs, const Standard_Integer theMode)
 {
   ModelAPI_AttributeTables::ValueType aType = dataType();
+  DataPtr aData = myFeature->data();
   if ((aType == ModelAPI_AttributeTables::DOUBLE) ||
     (aType == ModelAPI_AttributeTables::INTEGER)) {
     double aMin, aMax;
     QList<double> aShapeData = range(aMin, aMax);
     int aNbIntertvals = 20;
 
-    DataPtr aData = myFeature->data();
     AttributeSelectionListPtr aSelList = aData->selectionList(CollectionPlugin_Field::SELECTED_ID());
     for (int i = 0; i < aSelList->size(); i++) {
       AttributeSelectionPtr aSelection = aSelList->value(i);
@@ -134,5 +147,47 @@ void PartSet_FieldStepPrs::Compute(const Handle(PrsMgr_PresentationManager3d)& t
         SetCustomColor(aShape, aColor);
     }
   }
+  else if (aType == ModelAPI_AttributeTables::BOOLEAN) {
+    QList<double> aShapeData = booleanValues();
+
+    AttributeSelectionListPtr aSelList = aData->selectionList(CollectionPlugin_Field::SELECTED_ID());
+    for (int i = 0; i < aSelList->size(); i++) {
+      AttributeSelectionPtr aSelection = aSelList->value(i);
+      GeomShapePtr aShapePtr = aSelection->value();
+      TopoDS_Shape aShape = aShapePtr->impl<TopoDS_Shape>();
+      double aValue = aShapeData.at(i);
+      Quantity_Color aColor;
+      if (AIS_ColorScale::FindColor(aValue, 0., 1. + Precision::Confusion(), 2, aColor))
+        SetCustomColor(aShape, aColor);
+    }
+  }
   ViewerData_AISShape::Compute(thePrsMgr, thePrs, theMode);
 }
+
+QList<double> PartSet_FieldStepPrs::booleanValues() const
+{
+  DataPtr aData = myFeature->data();
+  int aStep = myStep->id();
+  AttributeTablesPtr aTablesAttr = aData->tables(CollectionPlugin_Field::VALUES_ID());
+  int aRows = aTablesAttr->rows();
+  int aCols = aTablesAttr->columns();
+  QList<int> aFieldStepData;
+  for (int j = 0; j < aCols; j++) {
+    for (int k = 1; k < aRows; k++) { // Do not use default values
+      ModelAPI_AttributeTables::Value aVal = aTablesAttr->value(k, j, aStep);
+      aFieldStepData << (aVal.myBool ? 1 : 0);
+    }
+  }
+  QList<double> aShapeData;
+  double aRangeMin = aFieldStepData.first(), aRangeMax = aFieldStepData.last();
+  for (int aRow = 0; aRow < aRows - 1; aRow++) {
+    double aNorm = 0;
+    int aBaseIndex = aRow * aCols;
+    for (int aCol = 0; aCol < aCols; aCol++) {
+      aNorm += aFieldStepData.at(aCol + aBaseIndex);
+    }
+    aNorm /= aCols;
+    aShapeData << aNorm;
+  }
+  return aShapeData;
+}
index 9aa671fc874b042b5c55d7d49ed3f9584e62c19c..f6d8ebae54db1bb8fa445d88070a9c73bd659234 100644 (file)
@@ -57,6 +57,7 @@ protected:
 
 private:
   QList<double> range(double& theMin, double& theMax) const;
+  QList<double> booleanValues() const;
 
   FieldStepPtr myStep;
   FeaturePtr myFeature;
index ba01295668be7a1b1edd2b212841a74da01255eb..bfca5d72ccfdada206ce31ddc6637548b2895ea8 100644 (file)
@@ -151,7 +151,7 @@ void XGUI_SelectionMgr::onObjectBrowserSelection()
           aViewer->setupColorScale();
           if (aType == ModelAPI_AttributeTables::BOOLEAN) {
             aViewer->setColorScaleIntervals(2);
-            aViewer->setColorScaleRange(0, 1);
+            aViewer->setColorScaleRange(0., 1.);
           }
           else {
             double aMin, aMax;
index 43890885baf0a38bb1fd9d84e0db5e989a95bd4c..753a07d9870d4d9235e4d7890d9308ab6db427db 100644 (file)
@@ -596,8 +596,7 @@ void XGUI_ViewerProxy::setColorScaleSize(double theW, double theH)
   myWorkshop->salomeConnector()->viewer()->setColorScaleShown(on);
 #else
   Handle(AIS_ColorScale) aColorScale = myWorkshop->mainWindow()->viewer()->colorScale();
-  aColorScale->SetWidth(aWindow->width() * theW);
-  aColorScale->SetHeight(aWindow->height() * theH);
+  aColorScale->SetSize(aWindow->width() * theW, aWindow->height() * theH);
 #endif
 }
 
@@ -649,6 +648,7 @@ void XGUI_ViewerProxy::setupColorScale()
   setColorScaleSize(0.2, 0.5);
   setColorScaleTextHeigth(14);
   setColorScaleIntervals(20);
+  Handle(AIS_ColorScale) aColorScale = myWorkshop->mainWindow()->viewer()->colorScale();
 }