Index: trunk/Mars/mcore/Interpolator2D.h
===================================================================
--- trunk/Mars/mcore/Interpolator2D.h	(revision 17121)
+++ trunk/Mars/mcore/Interpolator2D.h	(revision 17122)
@@ -17,4 +17,5 @@
 #define FACT_Interpolator2D
 
+#include <float.h>
 #include <vector>
 
@@ -173,5 +174,5 @@
         for (auto ip=outputGrid.cbegin(); ip<outputGrid.cend(); ip++)
         {
-            double mindd = FLT_MAX;
+            double mindd = DBL_MAX;
 
             auto mint = circles.cend();
@@ -283,4 +284,9 @@
     }
 
+    Interpolator2D(const std::vector<Interpolator2D::vec> &v)
+    {
+        SetInputGrid(v);
+    }
+
     const std::vector<Interpolator2D::weight> getWeights() const { return weights; }
     const std::vector<Interpolator2D::point>  getInputGrid() const { return inputGrid; }
@@ -316,4 +322,18 @@
     }
 
+    void SetInputGrid(const std::vector<Interpolator2D::vec> &v)
+    {
+        circles.clear();
+        weights.clear();
+        outputGrid.clear();
+
+        inputGrid.clear();
+        inputGrid.reserve(v.size());
+        for (size_t i=0; i<v.size(); i++)
+            inputGrid.emplace_back(i, v[i].x, v[i].y);
+
+        CalculateGrid();
+    }
+
     // --------------------------------------------------------------------------
     //
@@ -349,4 +369,19 @@
     }
 
+    bool SetOutputGrid(const std::vector<std::pair<double,double>> &v)
+    {
+        if (inputGrid.empty())
+            return false;
+
+        weights.clear();
+
+        outputGrid.clear();
+        outputGrid.reserve(v.size());
+        for (size_t i=0; i<v.size(); i++)
+            outputGrid.emplace_back(i, v[i].first, v[i].second);
+
+        return CalculateWeights();
+    }
+
     // --------------------------------------------------------------------------
     //
@@ -362,5 +397,5 @@
     //!    not match the size of the inputGrid, an empty vector is returned.
     //
-    std::vector<double> Interpolate(const vector<double> &z) const
+    std::vector<double> Interpolate(const std::vector<double> &z) const
     {
         if (z.size()!=inputGrid.size())
