/* Projekt zur Fotogrammetrie mittels HTML und JavaScript
   Auswertung von Stereofotos, die von einer normalen
   Digitalkamera (Canon PoweReShiftObt A40) in einem bestimmten
   Abstand auf einem speziellen Stativ gemacht werden.

   (c) 2003 by Winfried Lilge, Burgberg 14, 27283 Verden,
   04231-2398, deirfniw@t-online.de                       */

// --- Höhe und Breite der Bilder -----------------
var Bb = 480; var Hb = 360;
// --- Breite Lineal links ------------------------
var Bll = 10;
// --- Höhe Lineal oben ---------------------------
var Hlo = 10;
// --- Ränder, vom Bildschirm ermittelt -----------
var Rl = 12;
var Ro = 17;
// --- Links-Rechts-Anordnung ---------------------
var lr     = true;
// --- Zoomfaktor ---------------------------------
var zoomfaktor   = 1;
// --- Korrekturfaktoren --------------------------
var dxl,dxr,dyl,dxr; dxl=0; dxr=0; dyl=0; dyr=0;
// --- Indizes, Mausposition, Objektkoordinaten ---
var i,j,mx,my; i=0; j=0; mx=0; my=0;
// --- Skalierungsfaktor, Kamerakonstante, Basisbreite ---------------
var ck = 400; var B = 30;
// --- Objektpunktkoordinaten, Bildkoodinaten -----
var PX =0; PY =0; PZ =0; xs =0; xss =0; xdiff =0; ys =0;
// --- Arrays für die 2D-Koordinaten --------------
var zweid = new Array;
for(i=0; i<100; i++){
  zweid[i] = new Array;}
// Anzahl Klicks links, rechts, gesamt und minimum
var anzcll = 0; var anzclr = 0; var anzclg = 0; var anzcln = 0;
// Ausgabestrings
var ausl = ""; var ausr = ""; var ausg = "";
// --- Anzeige auffrischen ------------------------
function refresh(meld){
  ausg = ""; ausl = ""; ausr = "";
  window.document.Form1.KlickLi.value = anzcll;
  window.document.Form1.KlickRe.value = anzclr;
  anzclg = Math.max(anzcll,anzclr);
  anzcln = Math.min(anzcll,anzclr);
  window.document.Form1.KlickGes.value = anzclg;
  for(i=0; i < anzcll; i++){
    ausl += "P"+i+"["+zweid[i][0]+" "+zweid[i][1]+" 0]\n";};
  for(i=0; i < anzclr; i++){
    ausr += "P"+i+"["+zweid[i][2]+" "+zweid[i][3]+" 0]\n";};
  for(i=1; i < anzcln; i++){
    xs = zweid[i][0]; xss = zweid[i][2]; xdiff = xs - xss;
    if(xdiff == 0){xss = xs + .0001;};
    ys = (zweid[i][1]+zweid[i][3])/2;    // Mittelwert aus linker und rechter y-Koordinate
    PX = Math.round(xs * B / xdiff*100)/100;
    PY = Math.round(ck * B / xdiff*100)/100;
    PZ = Math.round(ys * B / xdiff*100)/100;
    ausg += "X"+i+"=" +PX+ " Y"+i+"=" +PY+ " Z"+i+"=" +PZ+ "\n";};
  window.document.Form1.BildpunkteLi.value = ausl;
  window.document.Form1.BildpunkteRe.value = ausr;
  window.document.Form1.Objektpunkte.value = ausg;
  window.document.Form1.DeltaLi.value = "X"+dxl+" Y"+dyl;
  window.document.Form1.DeltaRe.value = "X"+dxr+" Y"+dyr;
  window.document.Form1.Statuszeile.value = meld;}
// --- Bilder links und rechts vertauschen --------
function tauschen(){
  lr = !lr;
  if (lr == true){
    window.document.Form1.BildLi.src = "left2.jpg";
    window.document.Form1.BildRe.src = "right2.jpg";
    window.document.Form1.Tausch.value = "Links Rechts";};
  if (lr == false){
    window.document.Form1.BildLi.src = "right2.jpg";
    window.document.Form1.BildRe.src = "left2.jpg";
    window.document.Form1.Tausch.value = "Rechts Links";};}
// --- Zoomfaktor (funktioniert noch nicht) -------
function zoomen(){
  zoomfaktor = 3 - zoomfaktor;
  if(zoomfaktor == 1){
    window.document.Form1.Zoom.value = " x 1 ";
    window.document.Form1.LiShiftOb.src = "s1_lino.gif";
    window.document.Form1.LiShiftUn.src = "s1_linu.gif";
    window.document.Form1.ReShiftOb.src = "s1_lino.gif";
    window.document.Form1.ReShiftUn.src = "s1_linu.gif";
    window.document.Form1.LiShiftLi.src = "w1_lin.gif";
    window.document.Form1.ReShiftLi.src = "w1_lin.gif";
    window.document.Form1.LiShiftRe.src = "w1_lin.gif";
    window.document.Form1.ReShiftRe.src = "w1_lin.gif";}
  if(zoomfaktor == 2){
    window.document.Form1.Zoom.value = " x 2 ";
    window.document.Form1.LiShiftOb.src = "s2_lino.gif";
    window.document.Form1.LiShiftUn.src = "s2_linu.gif";
    window.document.Form1.ReShiftOb.src = "s2_lino.gif";
    window.document.Form1.ReShiftUn.src = "s2_linu.gif";
    window.document.Form1.LiShiftLi.src = "w2_lin.gif";
    window.document.Form1.ReShiftLi.src = "w2_lin.gif";
    window.document.Form1.LiShiftRe.src = "w2_lin.gif";
    window.document.Form1.ReShiftRe.src = "w2_lin.gif";}}
// --- Punkt löschen links ------------------------
function loeschen(links){
  var nul = "";
  if(links == true){anzcll--;}
   else{anzclr--;};
  if(anzcll < 0){anzcll = 0;};
  if(anzcll == 0){
    dxl=0; dyl=0;
    nul = "Bitte Null links markieren";};
  if(anzclr < 0){anzclr = 0;};
  if(anzclr == 0){
    dxr=0; dyr=0;
    nul = "Bitte Null rechts markieren";};
  anzclg = Math.max(anzcll,anzclr);
  if(anzclg == 0){
    nul = ". Bitte Null markieren";}
  refresh("Klickzahl wurde auf "+anzclg+" gesetzt"+nul);}
// --- Mauskoordinate auslesen --------------------
function mauslesen(){
  mx = event.clientX+document.body.scrollLeft; my = event.clientY+document.body.scrollTop;}
//-------------------------------------------------
function li_move(){
  mauslesen();
  window.document.Form1.MausLiX.value = mx - Rl - Bll - Bb / 2 - dxl;
  window.document.Form1.MausLiY.value = -my + Ro + Hlo + Hb / 2 - dyl;}
function re_move(){
  mauslesen();
  window.document.Form1.MausReX.value = mx - Bb - Rl - 2 * Bll - Bb / 2 - dxr;
  window.document.Form1.MausReY.value = -my + Ro + Hlo + Hb / 2 - dyr;}
//-------------------------------------------------
function CL_L(){
  anzcll++;
  mauslesen();
  if(anzcll == 1){
    dxl = mx - Rl - Bll - Bb / 2;
    dyl = -my + Ro + Hlo + Hb / 2 - dyl;
    window.document.Form1.Statuszeile.value = "";}
  mx = mx - Rl - Bll - Bb / 2 - dxl;
  my = -my + Ro + Hlo + Hb / 2 - dyl;
  zweid[anzcll-1][0] = mx; zweid[anzcll-1][1] = my;
//  window.document.images[i*2+10].style.left = zweid[i][0];
//  window.document.images[i*2+10].style.top = zweid[i][1];
  refresh("Klickzahl links wurde auf "+anzcll+" erhöht");}
function CL_R(){
  anzclr++;
  mauslesen();
  if(anzclr == 1){
    dxr = mx - Bb - Rl - 2 * Bll - Bb / 2;
    dyr = -my + Ro + Hlo + Hb / 2;};
  mx = mx - Bb - Rl - 2 * Bll - Bb / 2 - dxr;
  my = -my + Ro + Hlo + Hb / 2 - dyr;
  zweid[anzclr-1][2] = mx; zweid[anzclr-1][3] = my;
//  window.document.images[i*2+11].style.left = zweid[i][2];
//  window.document.images[i*2+11].style.top = zweid[i][3];
  refresh("Klickzahl rechts wurde auf "+anzclr+" erhöht");}
//-------------------------------------------------
function L_SH_L(){}
function L_SH_R(){}
function R_SH_L(){}
function R_SH_R(){}
function SH_U(){}
function SH_D(){}
