Salome HOME
Task #3230: Sketcher: create a curve passing through selected points or vertices...
[modules/shaper.git] / src / SketchSolver / PlaneGCSSolver / PlaneGCSSolver_ConstraintWrapper.cpp
index db932e8b03fdae0e004d7ac8eae6794373f97972..b5f452b5a940dac01791f914f61a5f607adf880e 100644 (file)
-// Copyright (C) 2014-20xx CEA/DEN, EDF R&D
-
-// File:    PlaneGCSSolver_ConstraintWrapper.cpp
-// Created: 14 Dec 2015
-// Author:  Artem ZHIDKOV
+// Copyright (C) 2014-2020  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
 
 #include <PlaneGCSSolver_ConstraintWrapper.h>
 
-#include <math.h>
-
 PlaneGCSSolver_ConstraintWrapper::PlaneGCSSolver_ConstraintWrapper(
-    const ConstraintPtr& theOriginal,
     const GCSConstraintPtr& theConstraint,
     const SketchSolver_ConstraintType& theType)
   : myGCSConstraints(1, theConstraint),
-    myType(theType),
-    myID(CID_UNKNOWN)
+    myType(theType)
 {
-  myBaseConstraint = theOriginal;
-  myValue = 0.0;
+  myID = CID_UNKNOWN;
 }
 
 PlaneGCSSolver_ConstraintWrapper::PlaneGCSSolver_ConstraintWrapper(
-    const ConstraintPtr& theOriginal,
     const std::list<GCSConstraintPtr>& theConstraints,
     const SketchSolver_ConstraintType& theType)
   : myGCSConstraints(theConstraints),
-    myType(theType),
-    myID(CID_UNKNOWN)
-{
-  myBaseConstraint = theOriginal;
-  myValue = 0.0;
-}
-
-void PlaneGCSSolver_ConstraintWrapper::setValueParameter(const ParameterWrapperPtr& theValue)
-{
-  myValueParam = theValue;
-  myValue = myValueParam->value();
-}
-
-void PlaneGCSSolver_ConstraintWrapper::setValue(const double& theValue)
-{
-  myValue = theValue;
-  myValueParam->setValue(theValue);
-}
-
-
-void PlaneGCSSolver_ConstraintWrapper::setGroup(const GroupID& theGroup)
+    myType(theType)
 {
-  myGroup = theGroup;
-  std::list<EntityWrapperPtr>::iterator aSubsIt = myConstrained.begin();
-  for (; aSubsIt != myConstrained.end(); ++aSubsIt)
-    (*aSubsIt)->setGroup(theGroup);
+  myID = CID_UNKNOWN;
 }
 
-bool PlaneGCSSolver_ConstraintWrapper::isUsed(FeaturePtr theFeature) const
+void PlaneGCSSolver_ConstraintWrapper::setId(const ConstraintID& theID)
 {
-  std::list<EntityWrapperPtr>::const_iterator anIt = myConstrained.begin();
-  for (; anIt != myConstrained.end(); ++anIt)
-    if ((*anIt)->isUsed(theFeature))
-      return true;
-  return false;
+  myID = theID;
 }
 
-bool PlaneGCSSolver_ConstraintWrapper::isUsed(AttributePtr theAttribute) const
+void PlaneGCSSolver_ConstraintWrapper::setValueParameter(const ScalarWrapperPtr& theValue)
 {
-  std::list<EntityWrapperPtr>::const_iterator anIt = myConstrained.begin();
-  for (; anIt != myConstrained.end(); ++anIt)
-    if ((*anIt)->isUsed(theAttribute))
-      return true;
-  return false;
+  myValueParam = theValue;
 }
 
-bool PlaneGCSSolver_ConstraintWrapper::isEqual(const ConstraintWrapperPtr& theOther)
+void PlaneGCSSolver_ConstraintWrapper::setValue(const double& theValue)
 {
-  if (type() != theOther->type())
-    return false;
-////  const Slvs_Constraint anOtherConstraint = 
-////    std::dynamic_pointer_cast<PlaneGCSSolver_ConstraintWrapper>(theOther)->constraint();
-////  if (mySlvsConstraint.type != anOtherConstraint.type)
-////    return false;
-////
-////  // Verify SolveSpace entities. If they are equal, no need additional checking of parameters.
-////  if (mySlvsConstraint.group   == anOtherConstraint.group   &&
-////      mySlvsConstraint.ptA     == anOtherConstraint.ptA     &&
-////      mySlvsConstraint.ptB     == anOtherConstraint.ptB     &&
-////      mySlvsConstraint.entityA == anOtherConstraint.entityA &&
-////      mySlvsConstraint.entityB == anOtherConstraint.entityB &&
-////      mySlvsConstraint.entityC == anOtherConstraint.entityC &&
-////      mySlvsConstraint.entityD == anOtherConstraint.entityD &&
-////      fabs(mySlvsConstraint.valA - anOtherConstraint.valA) < tolerance) {
-////    return true;
-////  }
-
-  // Verify equality of values
-  if (fabs(myValue - theOther->value()) > tolerance)
-    return false;
-
-  // Verify equality of entities
-  const std::list<EntityWrapperPtr>& anOtherSubs = theOther->entities();
-  if (myConstrained.size() != anOtherSubs.size())
-    return false;
-  std::list<EntityWrapperPtr>::const_iterator aMySubsIt = myConstrained.begin();
-  std::list<EntityWrapperPtr>::const_iterator anOtherSubsIt = anOtherSubs.begin();
-  for (; aMySubsIt != myConstrained.end(); ++aMySubsIt, ++anOtherSubsIt)
-    if (!(*aMySubsIt)->isEqual(*anOtherSubsIt))
-      return false;
-  return true;
+  myValueParam->setValue(theValue);
 }
 
-bool PlaneGCSSolver_ConstraintWrapper::update(const ConstraintWrapperPtr& theOther)
+double PlaneGCSSolver_ConstraintWrapper::value() const
 {
-  bool isUpdated = false;
-
-  std::list<EntityWrapperPtr> aMySubs = entities();
-  std::list<EntityWrapperPtr> anOtherSubs = theOther->entities();
-  std::list<EntityWrapperPtr>::const_iterator aMySubsIt = aMySubs.begin();
-  std::list<EntityWrapperPtr>::const_iterator anOtherSubsIt = anOtherSubs.begin();
-  for (; aMySubsIt != aMySubs.end() && anOtherSubsIt != anOtherSubs.end();
-       ++aMySubsIt, ++anOtherSubsIt)
-     isUpdated = (*aMySubsIt)->update(*anOtherSubsIt) || isUpdated;
-
-  if (fabs(value() - theOther->value()) > tolerance) {
-    myValue = theOther->value();
-    isUpdated = true;
-  }
-  return isUpdated;
+  return myValueParam ? myValueParam->value() : 0.0;
 }