LCOV - code coverage report
Current view: top level - alg - thinplatespline.h (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 19 19 100.0 %
Date: 2024-11-21 22:18:42 Functions: 2 2 100.0 %

          Line data    Source code
       1             : /******************************************************************************
       2             :  * $Id$
       3             :  *
       4             :  * Project:  GDAL Warp API
       5             :  * Purpose:  Declarations for 2D Thin Plate Spline transformer.
       6             :  * Author:   VIZRT Development Team.
       7             :  *
       8             :  * This code was provided by Gilad Ronnen (gro at visrt dot com) with
       9             :  * permission to reuse under the following license.
      10             :  *
      11             :  ******************************************************************************
      12             :  * Copyright (c) 2004, VIZRT Inc.
      13             :  *
      14             :  * SPDX-License-Identifier: MIT
      15             :  ****************************************************************************/
      16             : 
      17             : #ifndef THINPLATESPLINE_H_INCLUDED
      18             : #define THINPLATESPLINE_H_INCLUDED
      19             : 
      20             : #ifndef DOXYGEN_SKIP
      21             : 
      22             : #include "gdal_alg.h"
      23             : #include "cpl_conv.h"
      24             : 
      25             : typedef enum
      26             : {
      27             :     VIZ_GEOREF_SPLINE_ZERO_POINTS,
      28             :     VIZ_GEOREF_SPLINE_ONE_POINT,
      29             :     VIZ_GEOREF_SPLINE_TWO_POINTS,
      30             :     VIZ_GEOREF_SPLINE_ONE_DIMENSIONAL,
      31             :     VIZ_GEOREF_SPLINE_FULL,
      32             : 
      33             :     VIZ_GEOREF_SPLINE_POINT_WAS_ADDED,
      34             :     VIZ_GEOREF_SPLINE_POINT_WAS_DELETED
      35             : } vizGeorefInterType;
      36             : 
      37             : // #define VIZ_GEOREF_SPLINE_MAX_POINTS 40
      38             : #define VIZGEOREF_MAX_VARS 2
      39             : 
      40             : class VizGeorefSpline2D
      41             : {
      42             :     bool grow_points();
      43             : 
      44             :   public:
      45          38 :     explicit VizGeorefSpline2D(int nof_vars = 1)
      46          38 :         : type(VIZ_GEOREF_SPLINE_ZERO_POINTS), _nof_vars(nof_vars),
      47             :           _nof_points(0), _max_nof_points(0), _nof_eqs(0),
      48             : #if 0
      49             :         _tx(0.0),
      50             :         _ty(0.0),
      51             :         _ta(10.0),
      52             : #endif
      53             :           _dx(0.0), _dy(0.0), x(nullptr), y(nullptr), u(nullptr),
      54          38 :           unused(nullptr), index(nullptr), x_mean(0), y_mean(0)
      55             :     {
      56         114 :         for (int i = 0; i < VIZGEOREF_MAX_VARS; i++)
      57             :         {
      58          76 :             rhs[i] = nullptr;
      59          76 :             coef[i] = nullptr;
      60             :         }
      61             : 
      62          38 :         grow_points();
      63          38 :     }
      64             : 
      65          38 :     ~VizGeorefSpline2D()
      66          38 :     {
      67          38 :         CPLFree(x);
      68          38 :         CPLFree(y);
      69          38 :         CPLFree(u);
      70          38 :         CPLFree(unused);
      71          38 :         CPLFree(index);
      72         114 :         for (int i = 0; i < _nof_vars; i++)
      73             :         {
      74          76 :             CPLFree(rhs[i]);
      75          76 :             CPLFree(coef[i]);
      76             :         }
      77          38 :     }
      78             : 
      79             : #if 0
      80             :     int get_nof_points(){
      81             :         return _nof_points;
      82             :     }
      83             : 
      84             :     void set_toler( double tx, double ty ){
      85             :         _tx = tx;
      86             :         _ty = ty;
      87             :     }
      88             : 
      89             :     void get_toler( double& tx, double& ty) {
      90             :         tx = _tx;
      91             :         ty = _ty;
      92             :     }
      93             : 
      94             :     vizGeorefInterType get_interpolation_type ( ){
      95             :         return type;
      96             :     }
      97             : 
      98             :     void dump_data_points()
      99             :     {
     100             :         for ( int i = 0; i < _nof_points; i++ )
     101             :         {
     102             :             fprintf(stderr, "X = %f Y = %f Vars = ", x[i], y[i]);
     103             :             for ( int v = 0; v < _nof_vars; v++ )
     104             :                 fprintf(stderr, "%f ", rhs[v][i+3]);
     105             :             fprintf(stderr, "\n");
     106             :         }
     107             :     }
     108             : 
     109             :     int delete_list()
     110             :     {
     111             :         _nof_points = 0;
     112             :         type = VIZ_GEOREF_SPLINE_ZERO_POINTS;
     113             :         if ( _AA )
     114             :         {
     115             :             CPLFree(_AA);
     116             :             _AA = NULL;
     117             :         }
     118             :         if ( _Ainv )
     119             :         {
     120             :             CPLFree(_Ainv);
     121             :             _Ainv = NULL;
     122             :         }
     123             :         return _nof_points;
     124             :     }
     125             : #endif
     126             : 
     127             :     bool add_point(const double Px, const double Py, const double *Pvars);
     128             :     int get_point(const double Px, const double Py, double *Pvars);
     129             : #if 0
     130             :     int delete_point(const double Px, const double Py );
     131             :     bool get_xy(int index, double& x, double& y);
     132             :     bool change_point(int index, double x, double y, double* Pvars);
     133             :     void reset(void) { _nof_points = 0; }
     134             : #endif
     135             :     int solve(void);
     136             : 
     137             :   private:
     138             :     vizGeorefInterType type;
     139             : 
     140             :     const int _nof_vars;
     141             :     int _nof_points;
     142             :     int _max_nof_points;
     143             :     int _nof_eqs;
     144             : 
     145             : #if 0
     146             :     // Disabled because the methods that use there is disabled.
     147             :     double _tx, _ty;
     148             :     double _ta;
     149             : #endif
     150             : 
     151             :     double _dx, _dy;
     152             : 
     153             :     double *x;  // [VIZ_GEOREF_SPLINE_MAX_POINTS+3];
     154             :     double *y;  // [VIZ_GEOREF_SPLINE_MAX_POINTS+3];
     155             : 
     156             :     //    double rhs[VIZ_GEOREF_SPLINE_MAX_POINTS+3][VIZGEOREF_MAX_VARS];
     157             :     //    double coef[VIZ_GEOREF_SPLINE_MAX_POINTS+3][VIZGEOREF_MAX_VARS];
     158             :     double *rhs[VIZGEOREF_MAX_VARS];
     159             :     double *coef[VIZGEOREF_MAX_VARS];
     160             : 
     161             :     double *u;    // [VIZ_GEOREF_SPLINE_MAX_POINTS];
     162             :     int *unused;  // [VIZ_GEOREF_SPLINE_MAX_POINTS];
     163             :     int *index;   // [VIZ_GEOREF_SPLINE_MAX_POINTS];
     164             : 
     165             :     double x_mean;
     166             :     double y_mean;
     167             : 
     168             :   private:
     169             :     CPL_DISALLOW_COPY_ASSIGN(VizGeorefSpline2D)
     170             : };
     171             : 
     172             : #endif /* #ifndef DOXYGEN_SKIP */
     173             : 
     174             : #endif /* THINPLATESPLINE_H_INCLUDED */

Generated by: LCOV version 1.14