Salome HOME
Task #3230: Sketcher: create a curve passing through selected points or vertices...
[modules/shaper.git] / src / SketchSolver / PlaneGCSSolver / PlaneGCSSolver_PointArrayWrapper.cpp
index 33a7954df83249bc9c9d5aa35925cb8c9f700231..a409fb448b77aff9b7480e44c026c03c9d9fe1c3 100644 (file)
 //
 
 #include <PlaneGCSSolver_PointArrayWrapper.h>
+#include <PlaneGCSSolver_Tools.h>
+
+#include <GeomDataAPI_Point2DArray.h>
+
+#include <GeomAPI_Pnt2d.h>
 
 PlaneGCSSolver_PointArrayWrapper::PlaneGCSSolver_PointArrayWrapper(
     const std::vector<PointWrapperPtr>& thePoints)
   : myPoints(thePoints)
 {
 }
+
+bool PlaneGCSSolver_PointArrayWrapper::update(AttributePtr theAttribute)
+{
+  bool isUpdated = false;
+  std::shared_ptr<GeomDataAPI_Point2DArray> aPointArray =
+      std::dynamic_pointer_cast<GeomDataAPI_Point2DArray>(theAttribute);
+  if (aPointArray && aPointArray->size() == (int)myPoints.size()) {
+    std::vector<PointWrapperPtr>::iterator aPIt = myPoints.begin();
+    for (int anIndex = 0; aPIt != myPoints.end(); ++aPIt, ++anIndex) {
+      GeomPnt2dPtr aPnt = aPointArray->pnt(anIndex);
+
+      const GCSPointPtr& aGCSPoint = (*aPIt)->point();
+      isUpdated = PlaneGCSSolver_Tools::updateValue(aPnt->x(), *(aGCSPoint->x)) || isUpdated;
+      isUpdated = PlaneGCSSolver_Tools::updateValue(aPnt->y(), *(aGCSPoint->y)) || isUpdated;
+    }
+  }
+  return isUpdated;
+}