Salome HOME
DOF is visualized in label widget: correction of unit tests on Linux
[modules/shaper.git] / src / PartSet / PartSet_ResultSketchPrs.cpp
index 956e60cd990aed160edfe15d56f1aee473577e1c..ede7d144d93d8789e347d74cfc40f2f374ed4881 100755 (executable)
@@ -71,17 +71,20 @@ bool PartSet_ResultSketchPrs::isValidShapeType(const TopAbs_ShapeEnum& theBaseTy
   return aValid;
 }
 
-
 void PartSet_ResultSketchPrs::Compute(const Handle(PrsMgr_PresentationManager3d)& thePresentationManager,
                                    const Handle(Prs3d_Presentation)& thePresentation, 
                                    const Standard_Integer theMode)
 {
+  thePresentation->Clear();
+
   std::shared_ptr<GeomAPI_Shape> aShapePtr = ModelAPI_Tools::shape(myResult);
   if (!aShapePtr) {
     Events_Error::throwException("An empty AIS presentation: PartSet_ResultSketchPrs");
     return;
   }
 
+  setAuxiliaryPresentationStyle(false);
+
   myFacesList.clear();
   ResultConstructionPtr aConstruction = 
     std::dynamic_pointer_cast<ModelAPI_ResultConstruction>(myResult);
@@ -91,7 +94,6 @@ void PartSet_ResultSketchPrs::Compute(const Handle(PrsMgr_PresentationManager3d)
       myFacesList.push_back(aConstruction->face(aFaceIndex));
     }
   }
-
   myOriginalShape = aShapePtr->impl<TopoDS_Shape>();
   if (!myOriginalShape.IsNull()) {
     Set(myOriginalShape);
@@ -103,12 +105,12 @@ void PartSet_ResultSketchPrs::Compute(const Handle(PrsMgr_PresentationManager3d)
   else
     Events_Error::throwException("An empty AIS presentation: PartSet_ResultSketchPrs");
 
-
-  // create auxiliary shapes
+  // visualize auxiliary shapes and sketch construction elements(point, center of a circle)
   FeaturePtr aResultFeature = ModelAPI_Feature::feature(myResult);
   CompositeFeaturePtr aSketchFeature = std::dynamic_pointer_cast<ModelAPI_CompositeFeature>
                                                                           (aResultFeature);
   std::list<ResultPtr> anAuxiliaryResults;
+  /// append auxiliary shapes
   for (int i = 0; i < aSketchFeature->numberOfSubs(); i++) {
     FeaturePtr aFeature = aSketchFeature->subFeature(i);
     if (PartSet_Tools::isAuxiliarySketchEntity(aFeature)) {
@@ -120,43 +122,31 @@ void PartSet_ResultSketchPrs::Compute(const Handle(PrsMgr_PresentationManager3d)
           anAuxiliaryResults.push_back(aResult);
       }
     }
+    else {
+    /// append not-edges shapes, e.g. center of a circle, an arc, a point feature
+      const std::list<std::shared_ptr<ModelAPI_Result> >& aRes = aFeature->results();
+      std::list<std::shared_ptr<ModelAPI_Result> >::const_iterator aResIter = aRes.cbegin();
+      for (; aResIter != aRes.cend(); aResIter++) {
+        std::shared_ptr<ModelAPI_ResultConstruction> aConstr = std::dynamic_pointer_cast<
+            ModelAPI_ResultConstruction>(*aResIter);
+        if (aConstr) {
+          std::shared_ptr<GeomAPI_Shape> aGeomShape = aConstr->shape();
+          if (aGeomShape.get()) {
+            const TopoDS_Shape& aShape = aGeomShape->impl<TopoDS_Shape>();
+            if (aShape.ShapeType() != TopAbs_EDGE)
+              anAuxiliaryResults.push_back(aConstr);
+          }
+        }
+      }
+    }
   }
-  if (anAuxiliaryResults.size() > 0) {
-    std::vector<int> aColor;
-    aColor = Config_PropManager::color("Visualization", "sketch_auxiliary_color",
-                                         SKETCH_AUXILIARY_COLOR);
-    Standard_Real anAuxiliaryWidth = 1.;
-    Standard_Integer anAuxiliaryLineStyle = 3;
-
-    SetColor(Quantity_Color(aColor[0] / 255., aColor[1] / 255., aColor[2] / 255., Quantity_TOC_RGB));
-
-    //thePresentation->Clear();
-    Handle(Prs3d_Drawer) aDrawer = Attributes();
-    setWidth(aDrawer, anAuxiliaryWidth);
-    // set line style
-    Handle(Prs3d_LineAspect) aLineAspect;
 
-    Aspect_TypeOfLine aType = (Aspect_TypeOfLine)anAuxiliaryLineStyle;
-    if (aDrawer->HasOwnLineAspect()) {
-      aLineAspect = aDrawer->LineAspect();
-    }
-    if (aDrawer->HasOwnWireAspect()) {
-      aLineAspect = aDrawer->WireAspect();
-    }
-    Quantity_Color aCurrentColor;
-    Aspect_TypeOfLine aCurrentType;
-    Standard_Real aCurrentWidth;
-    aLineAspect->Aspect()->Values(aCurrentColor, aCurrentType, aCurrentWidth);
-    bool isChanged = aType != aCurrentType;
-    if (isChanged) {
-      aLineAspect->SetTypeOfLine(aType);
-    }
-    // end of set line style
+  if (anAuxiliaryResults.size() > 0) {
+    setAuxiliaryPresentationStyle(true);
 
     BRep_Builder aBuilder;
     TopoDS_Compound aComp;
     aBuilder.MakeCompound(aComp);
-
     std::list<ResultPtr>::const_iterator anIt = anAuxiliaryResults.begin(),
                                          aLast = anAuxiliaryResults.end();
     for (; anIt != aLast; anIt++) {
@@ -171,6 +161,7 @@ void PartSet_ResultSketchPrs::Compute(const Handle(PrsMgr_PresentationManager3d)
       }
     }
     myAuxiliaryCompound = aComp;
+    Handle(Prs3d_Drawer) aDrawer = Attributes();
     StdPrs_WFDeflectionShape::Add(thePresentation, aComp, aDrawer);
   }
 }
@@ -256,3 +247,47 @@ void PartSet_ResultSketchPrs::appendShapeSelection(const Handle(SelectMgr_Select
   } catch ( Standard_Failure ) {
   }
 }
+
+void PartSet_ResultSketchPrs::setAuxiliaryPresentationStyle(const bool isAuxiliary)
+{
+  std::vector<int> aColor;
+  Standard_Real aWidth;
+  Standard_Integer aLineStyle;
+  if (!isAuxiliary) {
+    aColor = Config_PropManager::color("Visualization", "result_construction_color",
+                                        ModelAPI_ResultConstruction::DEFAULT_COLOR());
+    aWidth = PartSet_Tools::getAISDefaultWidth();// default width value
+    aLineStyle = SketchPlugin_SketchEntity::SKETCH_LINE_STYLE();
+  }
+  else {
+    aColor = Config_PropManager::color("Visualization", "sketch_auxiliary_color",
+                                         SKETCH_AUXILIARY_COLOR);
+    aWidth = SketchPlugin_SketchEntity::SKETCH_LINE_WIDTH_AUXILIARY();
+    aLineStyle = SketchPlugin_SketchEntity::SKETCH_LINE_STYLE_AUXILIARY();
+  }
+
+  Handle(Prs3d_Drawer) aDrawer = Attributes();
+  setColor(aDrawer, Quantity_Color(aColor[0] / 255., aColor[1] / 255., aColor[2] / 255.,
+           Quantity_TOC_RGB));
+
+  setWidth(aDrawer, aWidth);
+  // set line style
+  Handle(Prs3d_LineAspect) aLineAspect;
+
+  Aspect_TypeOfLine aType = (Aspect_TypeOfLine)aLineStyle;
+  if (aDrawer->HasOwnLineAspect()) {
+    aLineAspect = aDrawer->LineAspect();
+  }
+  if (aDrawer->HasOwnWireAspect()) {
+    aLineAspect = aDrawer->WireAspect();
+  }
+  Quantity_Color aCurrentColor;
+  Aspect_TypeOfLine aPrevLineType;
+  Standard_Real aCurrentWidth;
+  aLineAspect->Aspect()->Values(aCurrentColor, aPrevLineType, aCurrentWidth);
+  bool isChangedLineType = aType != aPrevLineType;
+  if (isChangedLineType) {
+    aLineAspect->SetTypeOfLine(aType);
+  }
+}