/* Punkte für Höhenausgleich in äquidistantem Rechteckraster messen */

/* erwartete Variablen als Parameter: */
/* _Msp2Nx = Anzahl Rasterpunkte in X-Richtung */
/* _Msp2Ny = ... in Y-Richtung */
/* _Msp2P0 = Ecke links vorne (Startpunkt) */
/* _Msp2P1 = Ecke rechts hinten */
/* _Msp2Px = X-Koordinaten der Rasterpunkte */
/* _Msp2Py = Y-Koordinaten der Rasterpunkte */

if(_mode != 'G')	/* nicht im Grafikmodus! */
{
_RL = _RL + 2;

_oSet 8 0; _dspUpdate;	/* Korrekturmodus AUS */
_drawZlevel;

if(1){
/* ---------------------------------- Höhe über Handverfahren */
/* Messwert holen */
(MacroDef "ZlevGet") = 
"wait 0;
 _KeyCode = 0;
 while \"_KeyCode != 13\"
  {print \"Höhe manuell anfahren. Weiter mit Enter, Abbruch mit Esc!\";
   if(_KeyCode == 27){print \"\"; mreset \"Messung Abgebrochen!\";}
  }
 print \"\";
 _z + 0.0;";
}

if(0){
/* ---------------------------------- Höhe über Taster
 Test: Taster am Druckerport Pin 13 und 25 anschliessen.
 Als Druckerport-Basisadresse wird 378h angenommen.
 Z-Achse fährt bei Aufruf max. 10 mm nach unten und
 stoppt, sobald der Taster öffnet.
*/

d = "Baam";
d[1] = 0x79;
d[2] = 3;
d[3] = 16;
_iZlev = d;

/* Messwert holen */
(MacroDef "ZlevGet") = 
"local \"z0\";
 stoprequest _iZlev 1; Z -5; ml; wait 0.2 0; wait 0 3; mreset; z0 = _z;
 z0 + 0.0;";
}

if(0){
/* ---------------------------------- Höhe über Handrad */
/* Messwert holen */
(MacroDef "ZlevGet") = 
"local \"z0\";
 if(2 == MsgBox \"Höhe antasten, weiter mit OK\"){mreset \"Messung Abgebrochen!\";} mreset; z0 = _z;
 z0 + 0.0;";
}

/* Datenfeld definieren, wird intern für Koeffizienten benötigt */
_Msp2Mat = ARY (_Msp2Nx * _Msp2Ny * 16L) 0.0;

/* Z-Koordinaten (Messwerte) der Rasterpunkte in der Reihenfolge: 
  X0Y0, X1Y0,... XNxY0,  X0Y1, X1Y1, ... */
/* Messwerte nur neu definieren (und 0 setzen), wenn alle neu gemessen werden */
if((ix0 < 0) and (iy0 < 0))
 {_Msp2Pz = ARY (_Msp2Nx * _Msp2Ny) 0.0;}

rmpmode 'Y';

local "dir" "ix" "iy" "doProbe" "_AllowManStep";

_AllowManStep = 1;	/* Handverfahren zulassen */

z zup; mf;

if(ix0 < 0){ix0 = iy0 = 0;}
doProbe = 0;
dir = 1;
ix = iy = 0;
for _Msp2Ny {
 dir = 1 - 2 * (iy != 2 * iy / 2);		/* dir = 1 bei geradem iy, sonst -1 */
 ix = 0;
 if(dir < 0){ix = _Msp2Nx - 1;}
 for _Msp2Nx {
  if((doProbe == 0) and (ix0 == ix) and (iy0 == iy)){doProbe = 1;}
  if(doProbe)
  {
   x _Msp2Px[ix]; y _Msp2Py[iy]; mf;
   _Msp2Pz[ix + _Msp2Nx * iy] = ZlevGet;
  }
  z zup; mf;
  ix = ix + dir;
  }
 iy = iy + 1;
}

Msp2Define;	/* Spline-Koeffizienten berechnen */
}
