Salome HOME
Update behavior of calculation of Multi-Rotation constraint
[modules/shaper.git] / src / ModuleBase / ModuleBase_Tools.cpp
index 6728d2349f657bae509228e2cf0374016ba16e95..13d1d22d69b7298e9d20e35eef91ef5b4e4f4310 100644 (file)
@@ -12,6 +12,8 @@
 #include <ModelAPI_Attribute.h>
 #include <ModelAPI_AttributeRefAttr.h>
 #include <ModelAPI_ResultParameter.h>
+#include <ModelAPI_ResultCompSolid.h>
+#include <ModelAPI_Tools.h>
 
 #include <GeomDataAPI_Point2D.h>
 #include <Events_Error.h>
@@ -113,6 +115,10 @@ QPixmap lighter(const QString& theIcon, const int theLighterValue)
 
 void setSpinText(ModuleBase_ParamSpinBox* theSpin, const QString& theText)
 {
+  if (theSpin->text() == theText) 
+    return;
+  // In order to avoid extra text setting because it will
+  // reset cursor position in control
   bool isBlocked = theSpin->blockSignals(true);
   theSpin->setText(theText);
   theSpin->blockSignals(isBlocked);
@@ -120,6 +126,8 @@ void setSpinText(ModuleBase_ParamSpinBox* theSpin, const QString& theText)
 
 void setSpinValue(QDoubleSpinBox* theSpin, double theValue)
 {
+  if (theSpin->value() == theValue)
+    return;
   bool isBlocked = theSpin->blockSignals(true);
   theSpin->setValue(theValue);
   theSpin->blockSignals(isBlocked);
@@ -127,6 +135,8 @@ void setSpinValue(QDoubleSpinBox* theSpin, double theValue)
 
 void setSpinValue(ModuleBase_ParamSpinBox* theSpin, double theValue)
 {
+  //if (theSpin->value() == theValue)
+  //  return;
   bool isBlocked = theSpin->blockSignals(true);
   theSpin->setValue(theValue);
   theSpin->blockSignals(isBlocked);
@@ -204,7 +214,6 @@ TopAbs_ShapeEnum shapeType(const QString& theType)
     MyShapeTypes["shell"] = TopAbs_SHELL;
     MyShapeTypes["solid"] = TopAbs_SOLID;
     MyShapeTypes["solids"] = TopAbs_SOLID;
-    MyShapeTypes["compound"] = TopAbs_COMPOUND;
   }
   QString aType = theType.toLower();
   if (MyShapeTypes.contains(aType))
@@ -213,24 +222,43 @@ TopAbs_ShapeEnum shapeType(const QString& theType)
   return TopAbs_SHAPE;
 }
 
-void checkObjects(const QObjectPtrList& theObjects, bool& hasResult, bool& hasFeature, bool& hasParameter)
+bool isSubResult(ObjectPtr theObject)
+{
+  bool aSubResult = false;
+
+  //ResultCompSolidPtr aCompsolidResult = std::dynamic_pointer_cast<ModelAPI_ResultCompSolid>(aResult);
+  return aSubResult;
+}
+
+void checkObjects(const QObjectPtrList& theObjects, bool& hasResult, bool& hasFeature, bool& hasParameter, bool& hasSubFeature)
 {
   hasResult = false;
   hasFeature = false;
   hasParameter = false;
+  hasSubFeature = false;
   foreach(ObjectPtr aObj, theObjects) {
     FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(aObj);
     ResultPtr aResult = std::dynamic_pointer_cast<ModelAPI_Result>(aObj);
     ResultParameterPtr aConstruction = std::dynamic_pointer_cast<ModelAPI_ResultParameter>(aResult);
 
-    hasResult = (aResult.get() != NULL);
+    bool aSubResult = isSubResult(aResult);
+
+    /// results of compsolids are not processed in SHOW/HIDE/WIREFRAME operations
+    hasResult = (aResult.get() != NULL && !aSubResult);
     hasFeature = (aFeature.get() != NULL);
     hasParameter = (aConstruction.get() != NULL);
-    if (hasFeature && hasResult  && hasParameter)
+    if (hasFeature) 
+      hasSubFeature = (ModelAPI_Tools::compositeOwner(aFeature) != NULL);
+    if (hasFeature && hasResult  && hasParameter && hasSubFeature)
       break;
   }
 }
 
+double defaultDeviationCoefficient()
+{
+  // this value is chosen by performance check. Test case is an extrusion on sketch circle.
+  return 1.e-3;
+}
 
 }