[Wsplgen-commits] r50 - in trunk: bin bin/test_results src

scm-commit@wald.intevation.org scm-commit at wald.intevation.org
Mon Jun 5 01:49:06 CEST 2006


Author: mrchip
Date: 2006-06-05 01:49:03 +0200 (Mon, 05 Jun 2006)
New Revision: 50

Added:
   trunk/src/quadtree.cpp
   trunk/src/quadtree.h
   trunk/src/test_quadtree.cpp
Modified:
   trunk/bin/start_test
   trunk/bin/test_results/test.txt
   trunk/src/Makefile
   trunk/src/file.cpp
   trunk/src/parameter.cpp
   trunk/src/parameter.h
   trunk/src/test.cpp
   trunk/src/test.h
   trunk/src/test_file.cpp
   trunk/src/test_nodes.cpp
   trunk/src/test_profil.cpp
   trunk/src/test_tools.cpp
   trunk/src/test_tri.cpp
   trunk/src/test_xy.cpp
   trunk/src/tools.cpp
   trunk/src/tools.h
   trunk/src/tri.cpp
   trunk/src/tri.h
   trunk/src/wsplgen.cpp
   trunk/src/wsplgen.h
   trunk/src/xy.cpp
   trunk/src/xy.h
Log:
Es wurde ein QuadTree eingef?\195?\188gt und die gesamten Koordinaten von double auf long umgestellt.
Es wurde zwar versucht alles wieder zum funktionieren zu bringen (alle Tests == pass),
aber man weiss ja nie.



Modified: trunk/bin/start_test
===================================================================
--- trunk/bin/start_test	2006-05-26 05:12:48 UTC (rev 49)
+++ trunk/bin/start_test	2006-06-04 23:49:03 UTC (rev 50)
@@ -1,8 +1,11 @@
 #! /bin/sh
 
-test.exe file   2>test_results/test.txt
-test.exe tools  2>test_results/test.txt
-test.exe xy     2>test_results/test.txt
-# test.exe profil 2>test_results/test.txt
-test.exe nodes  2>test_results/test.txt
-test.exe tri    2>test_results/test.txt
+# test.exe quadtree 2>test_results/test.txt
+# test.exe nodes    2>test_results/test.txt
+# test.exe file     2>test_results/test.txt
+# test.exe tools   2>test_results/test.txt
+# test.exe xy      2>test_results/test.txt
+# test.exe profil  2>test_results/test.txt
+# test.exe tri     2>test_results/test.txt
+
+test.exe 2>test_results/test.txt

Modified: trunk/bin/test_results/test.txt
===================================================================
--- trunk/bin/test_results/test.txt	2006-05-26 05:12:48 UTC (rev 49)
+++ trunk/bin/test_results/test.txt	2006-06-04 23:49:03 UTC (rev 50)
@@ -1,93 +1,1709 @@
-07:03:41: ->Triangulierung der Knoten gestartet
-07:03:41:   ->Sortien Knoten gestartet
-07:03:41:   <-Sortien der Knoten beendet
-07:03:41:   ->Löschen des Knoten/Kanten-Index gestartet
-07:03:41:   <-Löschen des Knoten/Kanten-Index beendet
-07:03:41:   ->Suchen der Startkante gestartet
-07:03:41:     Kante: 1 - 2 als Startkante
-07:03:41:   <-Suchen der Startkante beendet
-07:03:41: <-Triangulierung der Knoten beendet
-07:03:41: ->Triangulierung der Knoten gestartet
-07:03:41:   ->Sortien Knoten gestartet
-07:03:41:   <-Sortien der Knoten beendet
-07:03:41:   ->Löschen des Knoten/Kanten-Index gestartet
-07:03:41:   <-Löschen des Knoten/Kanten-Index beendet
-07:03:41:   ->Suchen der Startkante gestartet
-07:03:41:     Kante: 1 - 4 als Startkante
-07:03:41:   <-Suchen der Startkante beendet
-07:03:41: <-Triangulierung der Knoten beendet
-07:03:41: ->Laden des DGM in Datei 'test_daten/dgm2.shp' gestartet
-07:03:41:   ->Laden des DGM in Datei 'test_daten/dgm2.shp' als SHP gestartet
-07:03:41:     ->Laden der Projektionsdatei zu 'test_daten/dgm2.shp' gestartet
-07:03:41:       Projektionsdatei 'test_daten/dgm2.PRJ' konnte nicht geöffnet werden
-07:03:41:     <-Laden der Projektionsdatei zu 'test_daten/dgm2.shp' beendet
-07:03:42:     10000 von 156249 Objekten gelesen, 9999 von 9999 Knoten im Speicher
-07:03:42:     20000 von 156249 Objekten gelesen, 19999 von 19999 Knoten im Speicher
-07:03:42:     30000 von 156249 Objekten gelesen, 29999 von 29999 Knoten im Speicher
-07:03:42:     40000 von 156249 Objekten gelesen, 39999 von 39999 Knoten im Speicher
-07:03:42:     50000 von 156249 Objekten gelesen, 49999 von 49999 Knoten im Speicher
-07:03:43:     60000 von 156249 Objekten gelesen, 59999 von 59999 Knoten im Speicher
-07:03:43:     70000 von 156249 Objekten gelesen, 69999 von 69999 Knoten im Speicher
-07:03:43:     80000 von 156249 Objekten gelesen, 79999 von 79999 Knoten im Speicher
-07:03:43:     90000 von 156249 Objekten gelesen, 89999 von 89999 Knoten im Speicher
-07:03:43:     100000 von 156249 Objekten gelesen, 99999 von 99999 Knoten im Speicher
-07:03:43:     110000 von 156249 Objekten gelesen, 109999 von 109999 Knoten im Speicher
-07:03:44:     120000 von 156249 Objekten gelesen, 119999 von 119999 Knoten im Speicher
-07:03:44:     130000 von 156249 Objekten gelesen, 129999 von 129999 Knoten im Speicher
-07:03:44:     140000 von 156249 Objekten gelesen, 139999 von 139999 Knoten im Speicher
-07:03:44:     150000 von 156249 Objekten gelesen, 149999 von 149999 Knoten im Speicher
-07:03:44:     156249 von 156249 Objekten gelesen, 156249 von 156249 Knoten im Speicher
-07:03:44:   <-Laden des DGM in Datei 'test_daten/dgm2.shp' als SHP beendet
-07:03:44:   ->Suche nach doppelten Knoten gestartet
-07:03:44:     156249 Knoten und keine Elemente vorhanden
-07:03:45:     10000 von 156249 Knoten, 0 Knoten gelöscht
-07:03:45:     20000 von 156249 Knoten, 0 Knoten gelöscht
-07:03:45:     30000 von 156249 Knoten, 0 Knoten gelöscht
-07:03:46:     40000 von 156249 Knoten, 0 Knoten gelöscht
-07:03:46:     50000 von 156249 Knoten, 0 Knoten gelöscht
-07:03:46:     60000 von 156249 Knoten, 0 Knoten gelöscht
-07:03:46:     70000 von 156249 Knoten, 0 Knoten gelöscht
-07:03:47:     80000 von 156249 Knoten, 0 Knoten gelöscht
-07:03:47:     90000 von 156249 Knoten, 0 Knoten gelöscht
-07:03:47:     100000 von 156249 Knoten, 0 Knoten gelöscht
-07:03:47:     110000 von 156249 Knoten, 0 Knoten gelöscht
-07:03:47:     120000 von 156249 Knoten, 0 Knoten gelöscht
-07:03:48:     130000 von 156249 Knoten, 0 Knoten gelöscht
-07:03:48:     140000 von 156249 Knoten, 0 Knoten gelöscht
-07:03:48:     150000 von 156249 Knoten, 0 Knoten gelöscht
-07:03:48:     0 Knoten gelöscht, 0 Elemente gelöscht
-07:03:48:   <-Suche nach doppelten Knoten beendet
-07:03:48: <-Laden des DGM in Datei 'test_daten/dgm2.shp' beendet
-07:03:48: ->Triangulierung der Knoten gestartet
-07:03:48:   ->Sortien Knoten gestartet
-07:03:49:   <-Sortien der Knoten beendet
-07:03:49:   ->Löschen des Knoten/Kanten-Index gestartet
-07:03:49:   <-Löschen des Knoten/Kanten-Index beendet
-07:03:49:   ->Suchen der Startkante gestartet
-07:03:49:     Kante: 44106 - 44107 als Startkante
-07:03:49:   <-Suchen der Startkante beendet
-07:03:54:   42479 von ca. 312498 Elementen erzeugt (127437 Kanten)
-07:03:54:   5.02 sec -> 0.0001 sec pro Element, Dauer noch ca. 64 sec
-07:03:59:   82402 von ca. 312498 Elementen erzeugt (247206 Kanten)
-07:03:59:   10.03 sec -> 0.0001 sec pro Element, Dauer noch ca. 56 sec
-07:04:04:   122140 von ca. 312498 Elementen erzeugt (366420 Kanten)
-07:04:04:   15.06 sec -> 0.0001 sec pro Element, Dauer noch ca. 47 sec
-07:04:09:   160169 von ca. 312498 Elementen erzeugt (480507 Kanten)
-07:04:09:   20.08 sec -> 0.0001 sec pro Element, Dauer noch ca. 38 sec
-07:04:14:   197228 von ca. 312498 Elementen erzeugt (591684 Kanten)
-07:04:14:   25.09 sec -> 0.0001 sec pro Element, Dauer noch ca. 29 sec
-07:04:19:   235156 von ca. 312498 Elementen erzeugt (705468 Kanten)
-07:04:19:   30.11 sec -> 0.0001 sec pro Element, Dauer noch ca. 20 sec
-07:04:24:   270744 von ca. 312498 Elementen erzeugt (812232 Kanten)
-07:04:24:   35.12 sec -> 0.0001 sec pro Element, Dauer noch ca. 11 sec
-07:04:29:   305972 von ca. 312498 Elementen erzeugt (917916 Kanten)
-07:04:29:   40.14 sec -> 0.0001 sec pro Element, Dauer noch ca. 2 sec
-07:04:34:   311351 von ca. 312498 Elementen erzeugt (934053 Kanten)
-07:04:34:   45.16 sec -> 0.0001 sec pro Element, Dauer noch ca. 0 sec
-07:04:39:   311570 von ca. 312498 Elementen erzeugt (934710 Kanten)
-07:04:39:   50.22 sec -> 0.0002 sec pro Element, Dauer noch ca. 0 sec
-07:04:44:   311725 von ca. 312498 Elementen erzeugt (935175 Kanten)
-07:04:44:   55.25 sec -> 0.0002 sec pro Element, Dauer noch ca. 0 sec
-07:04:49:   311858 von ca. 312498 Elementen erzeugt (935574 Kanten)
-07:04:49:   60.30 sec -> 0.0002 sec pro Element, Dauer noch ca. 0 sec
-07:04:53: <-Triangulierung der Knoten beendet
+01:47:02: ->Laden des DGM in Datei 'test_daten/test_buildedgelist.xyz' gestartet
+01:47:02:   ->Laden des DGM in Datei 'test_daten/test_buildedgelist.xyz' als XYZ gestartet
+01:47:02:     13 Werte gelesen, 13 von 13 Knoten im Speicher
+01:47:02:   <-Laden des DGM in Datei 'test_daten/test_buildedgelist.xyz' als XYZ beendet
+01:47:02:   ->Suche nach doppelten Knoten gestartet
+01:47:02:     13 Knoten und keine Elemente vorhanden
+01:47:02:     0 Knoten gelöscht, 0 Elemente gelöscht
+01:47:02:   <-Suche nach doppelten Knoten beendet
+01:47:02: <-Laden des DGM in Datei 'test_daten/test_buildedgelist.xyz' beendet
+01:47:02: ->Triangulierung der Knoten gestartet
+01:47:02:   ->Sortieren Knoten gestartet
+01:47:02:   <-Sortieren der Knoten beendet
+01:47:02:   ->Löschen des Knoten/Kanten-Index gestartet
+01:47:02:   <-Löschen des Knoten/Kanten-Index beendet
+01:47:02:   ->Suchen der Startkante gestartet
+01:47:02:     Kante: 1 - 2 als Startkante
+01:47:02:   <-Suchen der Startkante beendet
+01:47:02: <-Triangulierung der Knoten beendet
+01:47:02: ->Erzeugung der Kanten gestartet
+01:47:02:   19 von 19 Elementen, 31 Kanten erzeugt
+01:47:02:   0 von 31 Kanten getestet
+01:47:02:   31 von 31 Kanten getestet
+01:47:02: <-Erzeugung der Kanten beendet
+01:47:02: ->Laden des DGM in Datei 'test_daten/dgm.shp' gestartet
+01:47:02:   ->Laden des DGM in Datei 'test_daten/dgm.shp' als SHP gestartet
+01:47:02:     ->Laden der Projektionsdatei zu 'test_daten/dgm.shp' gestartet
+01:47:02:       Projektionsdatei 'test_daten/dgm.PRJ' konnte nicht geöffnet werden
+01:47:02:     <-Laden der Projektionsdatei zu 'test_daten/dgm.shp' beendet
+01:47:02:     114 von 114 Objekten gelesen, 114 von 114 Knoten im Speicher
+01:47:02:   <-Laden des DGM in Datei 'test_daten/dgm.shp' als SHP beendet
+01:47:02:   ->Suche nach doppelten Knoten gestartet
+01:47:02:     114 Knoten und keine Elemente vorhanden
+01:47:02:     0 Knoten gelöscht, 0 Elemente gelöscht
+01:47:02:   <-Suche nach doppelten Knoten beendet
+01:47:02: <-Laden des DGM in Datei 'test_daten/dgm.shp' beendet
+01:47:02: 0.01,0.01
+01:47:02: 0.01,0.01
+01:47:02: 0.01,0.02
+01:47:02: 0.02,0.02
+01:47:02: 0.02,0.01
+01:47:02: 0.01,0.01
+01:47:02: 0.01,0.02
+01:47:02: 0.02,0.02
+01:47:02: 0.02,0.01
+01:47:02: 0.01,0.01
+01:47:02: 0.01,0.02
+01:47:02: 0.01,0.03
+01:47:02: 0.02,0.02
+01:47:02: 0.02,0.03
+01:47:02: 0.03,0.02
+01:47:02: 0.03,0.03
+01:47:02: 0.02,0.01
+01:47:02: 0.03,0.01
+01:47:02: 0.01,0.01
+01:47:02: 0.01,0.09
+01:47:02: 0.04,0.09
+01:47:02: 0.03,0.06
+01:47:02: 0.04,0.05
+01:47:02: 0.09,0.09
+01:47:02: 0.07,0.09
+01:47:02: 0.07,0.07
+01:47:02: 0.07,0.06
+01:47:02: 0.09,0.01
+01:47:02: 0.07,0.04
+01:47:02: 0.03,0.04
+01:47:02: ->Laden des DGM in Datei 'test_daten/dgm_gross.xyz' gestartet
+01:47:02:   ->Laden des DGM in Datei 'test_daten/dgm_gross.xyz' als XYZ gestartet
+01:47:02:     1126 Werte gelesen, 1126 von 1126 Knoten im Speicher
+01:47:02:   <-Laden des DGM in Datei 'test_daten/dgm_gross.xyz' als XYZ beendet
+01:47:02:   ->Suche nach doppelten Knoten gestartet
+01:47:02:     1126 Knoten und keine Elemente vorhanden
+01:47:02:     0 Knoten gelöscht, 0 Elemente gelöscht
+01:47:02:   <-Suche nach doppelten Knoten beendet
+01:47:02: <-Laden des DGM in Datei 'test_daten/dgm_gross.xyz' beendet
+01:47:02: 3501267.49,5872612.21
+01:47:02: 3500741.94,5873010.11
+01:47:02: 3500733.82,5872983.87
+01:47:02: 3500726.79,5873108.23
+01:47:02: 3500727.21,5873257.13
+01:47:02: 3500730.52,5873329.20
+01:47:02: 3500734.91,5873293.44
+01:47:02: 3500685.45,5873261.49
+01:47:02: 3500699.93,5873298.09
+01:47:02: 3500738.07,5873147.90
+01:47:02: 3500691.05,5873185.69
+01:47:02: 3500692.77,5873223.67
+01:47:02: 3500724.99,5873180.90
+01:47:02: 3500730.53,5873216.57
+01:47:02: 3500685.70,5873112.11
+01:47:02: 3500700.42,5873147.47
+01:47:02: 3500733.86,5873038.63
+01:47:02: 3500726.38,5873069.66
+01:47:02: 3500695.85,5873035.94
+01:47:02: 3500695.28,5873076.51
+01:47:02: 3500731.87,5872960.78
+01:47:02: 3500713.94,5873006.84
+01:47:02: 3500710.48,5872981.53
+01:47:02: 3500714.77,5872967.93
+01:47:02: 3500733.58,5872944.56
+01:47:02: 3501269.86,5872816.42
+01:47:02: 3501099.88,5873416.41
+01:47:02: 3501063.99,5873407.92
+01:47:02: 3501022.45,5873411.00
+01:47:02: 3500987.30,5873417.60
+01:47:02: 3500955.14,5873404.00
+01:47:02: 3500922.33,5873416.94
+01:47:02: 3500879.94,5873411.35
+01:47:02: 3500835.30,5873410.84
+01:47:02: 3500797.71,5873412.18
+01:47:02: 3501251.80,5873408.21
+01:47:02: 3501334.15,5873408.58
+01:47:02: 3501410.39,5873416.02
+01:47:02: 3501444.14,5873404.29
+01:47:02: 3501375.52,5873411.84
+01:47:02: 3501213.20,5873407.85
+01:47:02: 3501293.31,5873419.57
+01:47:02: 3501177.16,5873415.15
+01:47:02: 3501136.19,5873411.35
+01:47:02: 3501251.95,5872819.23
+01:47:02: 3501247.91,5873111.14
+01:47:02: 3501177.23,5873257.77
+01:47:02: 3501147.48,5873340.62
+01:47:02: 3501142.70,5873374.43
+01:47:02: 3501183.79,5873333.72
+01:47:02: 3501180.31,5873373.97
+01:47:02: 3501217.95,5873373.52
+01:47:02: 3501213.19,5873304.01
+01:47:02: 3501184.45,5873293.37
+01:47:02: 3501136.62,5873261.72
+01:47:02: 3501145.77,5873302.23
+01:47:02: 3501263.50,5873260.93
+01:47:02: 3501259.17,5873331.73
+01:47:02: 3501256.42,5873367.06
+01:47:02: 3501224.98,5873337.01
+01:47:02: 3501296.42,5873339.25
+01:47:02: 3501293.05,5873382.51
+01:47:02: 3501298.37,5873266.32
+01:47:02: 3501284.76,5873299.04
+01:47:02: 3501221.67,5873264.43
+01:47:02: 3501247.43,5873298.09
+01:47:02: 3501288.19,5873113.25
+01:47:02: 3501256.03,5873186.16
+01:47:02: 3501248.53,5873224.43
+01:47:02: 3501293.02,5873187.36
+01:47:02: 3501289.61,5873226.83
+01:47:02: 3501300.28,5873152.80
+01:47:02: 3501262.38,5873148.08
+01:47:02: 3501221.72,5873152.04
+01:47:02: 3501210.24,5873111.86
+01:47:02: 3501147.05,5873190.51
+01:47:02: 3501142.62,5873224.06
+01:47:02: 3501217.82,5873192.87
+01:47:02: 3501180.39,5873216.01
+01:47:02: 3501212.35,5873229.77
+01:47:02: 3501181.50,5873177.77
+01:47:02: 3501177.08,5873105.90
+01:47:02: 3501180.06,5873140.75
+01:47:02: 3501139.21,5873112.89
+01:47:02: 3501142.94,5873156.09
+01:47:02: 3501326.44,5873107.03
+01:47:02: 3501331.45,5873253.41
+01:47:02: 3501335.30,5873331.59
+01:47:02: 3501330.44,5873366.95
+01:47:02: 3501369.03,5873336.90
+01:47:02: 3501368.22,5873374.38
+01:47:02: 3501405.85,5873336.38
+01:47:02: 3501367.01,5873268.75
+01:47:02: 3501363.40,5873303.35
+01:47:02: 3501403.28,5873295.62
+01:47:02: 3501401.10,5873257.08
+01:47:02: 3501325.99,5873295.48
+01:47:02: 3501440.19,5873265.38
+01:47:02: 3501443.83,5873343.78
+01:47:02: 3501407.30,5873377.34
+01:47:02: 3501443.41,5873374.10
+01:47:02: 3501442.85,5873306.61
+01:47:02: 3501410.28,5873227.36
+01:47:02: 3501364.60,5873113.67
+01:47:02: 3501330.36,5873176.63
+01:47:02: 3501330.04,5873215.80
+01:47:02: 3501363.44,5873191.14
+01:47:02: 3501371.23,5873226.76
+01:47:02: 3501405.96,5873185.52
+01:47:02: 3501402.31,5873106.54
+01:47:02: 3501369.06,5873156.21
+01:47:02: 3501405.50,5873141.20
+01:47:02: 3501331.89,5873138.57
+01:47:02: 3501323.29,5872851.93
+01:47:02: 3501322.72,5872961.19
+01:47:02: 3501329.42,5873027.24
+01:47:02: 3501334.53,5873069.66
+01:47:02: 3501362.75,5873041.40
+01:47:02: 3501375.73,5873073.47
+01:47:02: 3501364.72,5872965.28
+01:47:02: 3501368.01,5873006.17
+01:47:02: 3501335.84,5872992.78
+01:47:02: 3501332.60,5872865.63
+01:47:02: 3501330.76,5872887.44
+01:47:02: 3501335.29,5872925.67
+01:47:02: 3501290.05,5872816.47
+01:47:02: 3501147.89,5872960.56
+01:47:02: 3501137.56,5873041.01
+01:47:02: 3501150.96,5873073.29
+01:47:02: 3501214.91,5873038.09
+01:47:02: 3501188.50,5873072.32
+01:47:02: 3501173.03,5873035.24
+01:47:02: 3501180.24,5872961.77
+01:47:02: 3501183.47,5872996.92
+01:47:02: 3501210.46,5872961.30
+01:47:02: 3501140.95,5873001.24
+01:47:02: 3501284.89,5872962.09
+01:47:02: 3501255.33,5873027.33
+01:47:02: 3501223.54,5873077.76
+01:47:02: 3501259.03,5873069.47
+01:47:02: 3501292.63,5873043.39
+01:47:02: 3501297.30,5873077.96
+01:47:02: 3501296.77,5873002.29
+01:47:02: 3501247.70,5872961.39
+01:47:02: 3501226.84,5872999.13
+01:47:02: 3501262.40,5872991.16
+01:47:02: 3501233.71,5872816.50
+01:47:02: 3501239.10,5872876.42
+01:47:02: 3501221.78,5872925.08
+01:47:02: 3501259.53,5872925.33
+01:47:02: 3501256.06,5872889.47
+01:47:02: 3501237.33,5872898.41
+01:47:02: 3501274.61,5872876.44
+01:47:02: 3501297.60,5872925.39
+01:47:02: 3501293.36,5872888.43
+01:47:02: 3501312.18,5872897.81
+01:47:02: 3501274.47,5872898.46
+01:47:02: 3501310.44,5872816.53
+01:47:02: 3501273.70,5872858.16
+01:47:02: 3501298.49,5872855.04
+01:47:02: 3501291.41,5872868.26
+01:47:02: 3501312.06,5872872.11
+01:47:02: 3501308.56,5872835.82
+01:47:02: 3501267.74,5872835.91
+01:47:02: 3501287.18,5872837.17
+01:47:02: 3501245.66,5872835.10
+01:47:02: 3501231.54,5872851.41
+01:47:02: 3501224.10,5872864.38
+01:47:02: 3501260.98,5872849.75
+01:47:02: 3501248.90,5872861.27
+01:47:02: 3501258.31,5872869.82
+01:47:02: 3501247.51,5872851.07
+01:47:02: 3501224.15,5872834.64
+01:47:02: 3501210.50,5872814.37
+01:47:02: 3501142.37,5872889.76
+01:47:02: 3501142.36,5872919.79
+01:47:02: 3501162.30,5872894.94
+01:47:02: 3501125.47,5872894.52
+01:47:02: 3501218.32,5872886.87
+01:47:02: 3501180.42,5872927.13
+01:47:02: 3501199.62,5872896.32
+01:47:02: 3501182.02,5872888.23
+01:47:02: 3501187.96,5872817.11
+01:47:02: 3501185.26,5872853.86
+01:47:02: 3501174.50,5872870.61
+01:47:02: 3501208.65,5872851.45
+01:47:02: 3501199.30,5872867.49
+01:47:02: 3501214.97,5872870.87
+01:47:02: 3501205.55,5872832.66
+01:47:02: 3501187.15,5872835.82
+01:47:02: 3501166.84,5872816.82
+01:47:02: 3501146.79,5872851.56
+01:47:02: 3501129.24,5872860.15
+01:47:02: 3501165.39,5872857.58
+01:47:02: 3501149.71,5872873.72
+01:47:02: 3501165.59,5872837.46
+01:47:02: 3501146.76,5872815.84
+01:47:02: 3501128.45,5872819.34
+01:47:02: 3501144.14,5872833.69
+01:47:02: 3501107.18,5872815.07
+01:47:02: 3500912.76,5873116.86
+01:47:02: 3500840.35,5873264.82
+01:47:02: 3500767.75,5873344.49
+01:47:02: 3500767.78,5873381.38
+01:47:02: 3500807.89,5873333.43
+01:47:02: 3500805.86,5873373.64
+01:47:02: 3500838.21,5873303.01
+01:47:02: 3500805.11,5873291.43
+01:47:02: 3500800.94,5873256.04
+01:47:02: 3500767.07,5873268.41
+01:47:02: 3500768.94,5873307.67
+01:47:02: 3500913.32,5873265.15
+01:47:02: 3500876.57,5873340.25
+01:47:02: 3500845.54,5873372.09
+01:47:02: 3500885.10,5873370.29
+01:47:02: 3500847.14,5873332.02
+01:47:02: 3500916.54,5873336.09
+01:47:02: 3500917.84,5873381.57
+01:47:02: 3500922.64,5873294.86
+01:47:02: 3500879.77,5873254.67
+01:47:02: 3500880.51,5873298.62
+01:47:02: 3500926.60,5873149.37
+01:47:02: 3500879.61,5873193.06
+01:47:02: 3500849.25,5873223.58
+01:47:02: 3500880.80,5873223.73
+01:47:02: 3500913.31,5873181.35
+01:47:02: 3500919.01,5873223.93
+01:47:02: 3500876.98,5873107.08
+01:47:02: 3500847.98,5873143.55
+01:47:02: 3500883.38,5873151.96
+01:47:02: 3500834.23,5873110.17
+01:47:02: 3500760.19,5873186.29
+01:47:02: 3500770.45,5873227.14
+01:47:02: 3500839.62,5873182.20
+01:47:02: 3500813.51,5873223.01
+01:47:02: 3500797.99,5873187.01
+01:47:02: 3500813.75,5873148.92
+01:47:02: 3500796.43,5873110.44
+01:47:02: 3500776.41,5873148.75
+01:47:02: 3500762.14,5873115.93
+01:47:02: 3501098.09,5873109.81
+01:47:02: 3501000.29,5873260.77
+01:47:02: 3500955.63,5873336.67
+01:47:02: 3500955.20,5873366.47
+01:47:02: 3500994.13,5873337.42
+01:47:02: 3500993.10,5873380.95
+01:47:02: 3501022.86,5873298.52
+01:47:02: 3500987.23,5873294.02
+01:47:02: 3500955.67,5873261.70
+01:47:02: 3500955.47,5873305.97
+01:47:02: 3501105.69,5873261.31
+01:47:02: 3501064.19,5873340.74
+01:47:02: 3501032.54,5873371.46
+01:47:02: 3501073.24,5873369.69
+01:47:02: 3501034.48,5873331.90
+01:47:02: 3501105.70,5873335.98
+01:47:02: 3501105.46,5873381.14
+01:47:02: 3501105.34,5873293.22
+01:47:02: 3501074.61,5873261.24
+01:47:02: 3501065.41,5873301.97
+01:47:02: 3501038.47,5873261.35
+01:47:02: 3501062.38,5873115.47
+01:47:02: 3501064.09,5873182.03
+01:47:02: 3501064.90,5873220.27
+01:47:02: 3501105.11,5873186.61
+01:47:02: 3501104.79,5873229.40
+01:47:02: 3501110.44,5873143.84
+01:47:02: 3501076.58,5873149.19
+01:47:02: 3501037.63,5873148.04
+01:47:02: 3501026.69,5873107.74
+01:47:02: 3500951.62,5873188.63
+01:47:02: 3500954.81,5873224.11
+01:47:02: 3501030.10,5873186.27
+01:47:02: 3500985.27,5873224.11
+01:47:02: 3501023.11,5873223.69
+01:47:02: 3500992.60,5873186.29
+01:47:02: 3500984.92,5873110.95
+01:47:02: 3501001.35,5873147.88
+01:47:02: 3500949.26,5873110.68
+01:47:02: 3500963.93,5873149.18
+01:47:02: 3501124.15,5872838.14
+01:47:02: 3501025.76,5872962.80
+01:47:02: 3500956.03,5873027.96
+01:47:02: 3500957.26,5873069.06
+01:47:02: 3501026.72,5873031.73
+01:47:02: 3500997.39,5873078.42
+01:47:02: 3501031.11,5873065.63
+01:47:02: 3500992.65,5873043.10
+01:47:02: 3500989.14,5872962.66
+01:47:02: 3500996.81,5873002.11
+01:47:02: 3500950.22,5872962.71
+01:47:02: 3500960.82,5872994.52
+01:47:02: 3501109.08,5872963.52
+01:47:02: 3501065.72,5873040.07
+01:47:02: 3501067.86,5873080.47
+01:47:02: 3501105.27,5873028.74
+01:47:02: 3501108.66,5873070.37
+01:47:02: 3501101.44,5872993.67
+01:47:02: 3501067.75,5872963.78
+01:47:02: 3501038.13,5872998.98
+01:47:02: 3501072.08,5873003.81
+01:47:02: 3501101.81,5872836.95
+01:47:02: 3501042.01,5872875.95
+01:47:02: 3501049.13,5872935.85
+01:47:02: 3501068.33,5872925.32
+01:47:02: 3501075.31,5872883.06
+01:47:02: 3501066.74,5872902.35
+01:47:02: 3501065.34,5872889.34
+01:47:02: 3501050.51,5872886.17
+01:47:02: 3501033.08,5872903.34
+01:47:02: 3501049.64,5872911.19
+01:47:02: 3501124.91,5872876.83
+01:47:02: 3501089.36,5872932.76
+01:47:02: 3501116.95,5872935.34
+01:47:02: 3501109.02,5872887.71
+01:47:02: 3501108.76,5872909.18
+01:47:02: 3501100.11,5872879.94
+01:47:02: 3501084.77,5872907.14
+01:47:02: 3501093.11,5872891.98
+01:47:02: 3501086.13,5872821.18
+01:47:02: 3501082.61,5872839.63
+01:47:02: 3501079.70,5872871.28
+01:47:02: 3501090.27,5872858.11
+01:47:02: 3501110.25,5872853.02
+01:47:02: 3501109.41,5872869.13
+01:47:02: 3501068.00,5872814.42
+01:47:02: 3501042.65,5872857.60
+01:47:02: 3501065.35,5872853.75
+01:47:02: 3501060.70,5872872.06
+01:47:02: 3501064.53,5872833.30
+01:47:02: 3501047.52,5872817.09
+01:47:02: 3501044.11,5872837.33
+01:47:02: 3501023.73,5872817.36
+01:47:02: 3500976.12,5872895.51
+01:47:02: 3500956.28,5872926.96
+01:47:02: 3500938.25,5872914.04
+01:47:02: 3500974.87,5872914.20
+01:47:02: 3500973.99,5872936.29
+01:47:02: 3500964.72,5872878.32
+01:47:02: 3500958.83,5872907.54
+01:47:02: 3500951.32,5872898.62
+01:47:02: 3501025.72,5872889.28
+01:47:02: 3500993.38,5872926.09
+01:47:02: 3501030.67,5872925.41
+01:47:02: 3501011.42,5872935.20
+01:47:02: 3501012.50,5872909.90
+01:47:02: 3501006.08,5872877.51
+01:47:02: 3500992.09,5872905.90
+01:47:02: 3501000.92,5872892.40
+01:47:02: 3500986.33,5872876.32
+01:47:02: 3501026.19,5872839.59
+01:47:02: 3501000.81,5872857.91
+01:47:02: 3501020.57,5872854.31
+01:47:02: 3501023.76,5872870.61
+01:47:02: 3501001.25,5872814.92
+01:47:02: 3501004.85,5872835.50
+01:47:02: 3500982.32,5872817.64
+01:47:02: 3500957.59,5872858.04
+01:47:02: 3500942.94,5872874.58
+01:47:02: 3500983.78,5872837.83
+01:47:02: 3500978.29,5872857.54
+01:47:02: 3500965.97,5872841.75
+01:47:02: 3500961.93,5872821.83
+01:47:02: 3500940.00,5872815.40
+01:47:02: 3500947.10,5872836.70
+01:47:02: 3500937.49,5872855.01
+01:47:02: 3500841.93,5872957.06
+01:47:02: 3500770.03,5873039.00
+01:47:02: 3500765.42,5873077.17
+01:47:02: 3500840.16,5873040.20
+01:47:02: 3500808.78,5873070.45
+01:47:02: 3500801.01,5873031.95
+01:47:02: 3500816.97,5872973.22
+01:47:02: 3500809.91,5873002.22
+01:47:02: 3500789.69,5872970.41
+01:47:02: 3500770.53,5872997.97
+01:47:02: 3500769.28,5872963.04
+01:47:02: 3500750.76,5872969.58
+01:47:02: 3500751.90,5872950.19
+01:47:02: 3500913.32,5872962.89
+01:47:02: 3500880.41,5873027.26
+01:47:02: 3500847.20,5873077.54
+01:47:02: 3500880.99,5873065.10
+01:47:02: 3500918.91,5873044.15
+01:47:02: 3500917.47,5873080.60
+01:47:02: 3500921.53,5873002.66
+01:47:02: 3500876.00,5872962.78
+01:47:02: 3500848.17,5872998.34
+01:47:02: 3500886.12,5872994.25
+01:47:02: 3500937.36,5872892.10
+01:47:02: 3500883.43,5872926.01
+01:47:02: 3500862.10,5872931.81
+01:47:02: 3500882.18,5872895.73
+01:47:02: 3500876.93,5872907.96
+01:47:02: 3500877.64,5872877.13
+01:47:02: 3500852.13,5872911.07
+01:47:02: 3500862.37,5872894.75
+01:47:02: 3500855.33,5872877.12
+01:47:02: 3500936.74,5872935.56
+01:47:02: 3500900.25,5872934.30
+01:47:02: 3500920.39,5872929.76
+01:47:02: 3500915.48,5872914.84
+01:47:02: 3500926.52,5872901.73
+01:47:02: 3500922.77,5872880.33
+01:47:02: 3500912.77,5872892.31
+01:47:02: 3500901.73,5872904.85
+01:47:02: 3500896.40,5872890.05
+01:47:02: 3500917.25,5872817.03
+01:47:02: 3500905.58,5872837.85
+01:47:02: 3500901.20,5872873.38
+01:47:02: 3500898.20,5872854.69
+01:47:02: 3500918.99,5872859.22
+01:47:02: 3500925.41,5872836.61
+01:47:02: 3500896.30,5872817.09
+01:47:02: 3500875.50,5872817.45
+01:47:02: 3500859.20,5872857.55
+01:47:02: 3500879.92,5872857.92
+01:47:02: 3500884.79,5872837.31
+01:47:02: 3500855.15,5872816.69
+01:47:02: 3500863.69,5872837.35
+01:47:02: 3500842.46,5872927.13
+01:47:02: 3500788.09,5872946.59
+01:47:02: 3500770.46,5872940.66
+01:47:02: 3500755.77,5872933.07
+01:47:02: 3500757.95,5872913.49
+01:47:02: 3500787.86,5872928.78
+01:47:02: 3500777.96,5872921.57
+01:47:02: 3500794.25,5872897.66
+01:47:02: 3500781.43,5872911.91
+01:47:02: 3500777.30,5872878.18
+01:47:02: 3500772.67,5872896.66
+01:47:02: 3500823.51,5872930.12
+01:47:02: 3500809.91,5872947.81
+01:47:02: 3500802.53,5872917.30
+01:47:02: 3500803.36,5872929.93
+01:47:02: 3500827.33,5872914.18
+01:47:02: 3500839.00,5872894.88
+01:47:02: 3500815.41,5872897.61
+01:47:02: 3500818.54,5872878.10
+01:47:02: 3500797.60,5872878.09
+01:47:02: 3500836.45,5872874.95
+01:47:02: 3500818.43,5872857.50
+01:47:02: 3500800.61,5872860.50
+01:47:02: 3500819.00,5872838.01
+01:47:02: 3500839.00,5872857.09
+01:47:02: 3500836.52,5872814.29
+01:47:02: 3500840.94,5872835.88
+01:47:02: 3500818.63,5872817.37
+01:47:02: 3500800.95,5872820.10
+01:47:02: 3500796.28,5872839.60
+01:47:02: 3500772.62,5872837.50
+01:47:02: 3500782.20,5872857.64
+01:47:02: 3500782.21,5872817.07
+01:47:02: 3500758.25,5872815.41
+01:47:02: 3501270.00,5872629.60
+01:47:02: 3501122.32,5872634.24
+01:47:02: 3500920.58,5872543.15
+01:47:02: 3500829.46,5872657.27
+01:47:02: 3500775.86,5872737.11
+01:47:02: 3500752.90,5872775.57
+01:47:02: 3500759.85,5872793.77
+01:47:02: 3500776.55,5872778.50
+01:47:02: 3500776.04,5872799.11
+01:47:02: 3500780.52,5872758.67
+01:47:02: 3500753.50,5872736.52
+01:47:02: 3500761.61,5872756.10
+01:47:02: 3500835.29,5872735.63
+01:47:02: 3500818.23,5872780.39
+01:47:02: 3500797.68,5872796.19
+01:47:02: 3500798.40,5872772.36
+01:47:02: 3500836.01,5872773.44
+01:47:02: 3500820.87,5872799.15
+01:47:02: 3500841.36,5872794.51
+01:47:02: 3500843.44,5872755.12
+01:47:02: 3500820.43,5872757.97
+01:47:02: 3500816.02,5872737.94
+01:47:02: 3500798.14,5872751.41
+01:47:02: 3500798.14,5872731.31
+01:47:02: 3500805.93,5872665.68
+01:47:02: 3500798.83,5872695.26
+01:47:02: 3500817.26,5872716.74
+01:47:02: 3500820.10,5872696.38
+01:47:02: 3500839.67,5872694.61
+01:47:02: 3500838.95,5872715.10
+01:47:02: 3500822.62,5872677.10
+01:47:02: 3500843.03,5872671.82
+01:47:02: 3500803.40,5872680.06
+01:47:02: 3500777.26,5872653.82
+01:47:02: 3500757.68,5872699.44
+01:47:02: 3500758.04,5872717.86
+01:47:02: 3500778.26,5872695.59
+01:47:02: 3500777.64,5872716.40
+01:47:02: 3500795.80,5872712.66
+01:47:02: 3500782.39,5872674.09
+01:47:02: 3500761.30,5872668.45
+01:47:02: 3500758.86,5872682.49
+01:47:02: 3500897.89,5872651.18
+01:47:02: 3500877.56,5872737.67
+01:47:02: 3500855.41,5872775.99
+01:47:02: 3500863.79,5872796.29
+01:47:02: 3500875.34,5872776.16
+01:47:02: 3500884.94,5872796.92
+01:47:02: 3500884.56,5872756.12
+01:47:02: 3500857.78,5872733.39
+01:47:02: 3500864.05,5872755.62
+01:47:02: 3500922.89,5872733.79
+01:47:02: 3500896.06,5872776.82
+01:47:02: 3500905.37,5872797.16
+01:47:02: 3500917.45,5872776.54
+01:47:02: 3500925.86,5872796.41
+01:47:02: 3500921.55,5872755.51
+01:47:02: 3500899.20,5872736.77
+01:47:02: 3500903.53,5872758.44
+01:47:02: 3500917.39,5872656.45
+01:47:02: 3500898.72,5872695.92
+01:47:02: 3500903.21,5872717.77
+01:47:02: 3500922.34,5872692.44
+01:47:02: 3500919.04,5872712.09
+01:47:02: 3500924.13,5872671.82
+01:47:02: 3500902.94,5872673.91
+01:47:02: 3500863.65,5872659.67
+01:47:02: 3500855.96,5872691.76
+01:47:02: 3500860.35,5872710.50
+01:47:02: 3500876.05,5872695.88
+01:47:02: 3500882.04,5872716.91
+01:47:02: 3500882.92,5872659.10
+01:47:02: 3500881.72,5872676.90
+01:47:02: 3500863.28,5872677.84
+01:47:02: 3500932.76,5872579.75
+01:47:02: 3500850.35,5872578.79
+01:47:02: 3500864.11,5872627.62
+01:47:02: 3500853.00,5872648.86
+01:47:02: 3500887.29,5872617.03
+01:47:02: 3500876.53,5872640.46
+01:47:02: 3500870.71,5872605.35
+01:47:02: 3500928.58,5872611.24
+01:47:02: 3500900.07,5872632.05
+01:47:02: 3500909.95,5872639.29
+01:47:02: 3500923.60,5872623.64
+01:47:02: 3500925.70,5872640.40
+01:47:02: 3500891.48,5872577.00
+01:47:02: 3500909.44,5872608.12
+01:47:02: 3500899.53,5872505.24
+01:47:02: 3500886.12,5872537.71
+01:47:02: 3500853.71,5872543.18
+01:47:02: 3500856.95,5872502.88
+01:47:02: 3500820.23,5872548.97
+01:47:02: 3500774.30,5872576.19
+01:47:02: 3500756.75,5872646.65
+01:47:02: 3500778.43,5872614.65
+01:47:02: 3500796.74,5872647.50
+01:47:02: 3500810.24,5872582.64
+01:47:02: 3500815.22,5872620.62
+01:47:02: 3500817.46,5872647.41
+01:47:02: 3500841.29,5872635.38
+01:47:02: 3500842.84,5872608.02
+01:47:02: 3500817.21,5872513.96
+01:47:02: 3500782.56,5872540.34
+01:47:02: 3501121.81,5872598.65
+01:47:02: 3501019.35,5872654.55
+01:47:02: 3500979.76,5872733.04
+01:47:02: 3500960.15,5872778.46
+01:47:02: 3500944.33,5872794.53
+01:47:02: 3500939.44,5872774.38
+01:47:02: 3500981.33,5872778.05
+01:47:02: 3500963.88,5872799.18
+01:47:02: 3500962.34,5872739.70
+01:47:02: 3500962.37,5872760.17
+01:47:02: 3500944.53,5872732.39
+01:47:02: 3500941.67,5872751.87
+01:47:02: 3501024.02,5872734.91
+01:47:02: 3501002.68,5872772.57
+01:47:02: 3500985.20,5872798.95
+01:47:02: 3501005.18,5872794.70
+01:47:02: 3501023.44,5872776.30
+01:47:02: 3501025.93,5872794.89
+01:47:02: 3501021.79,5872758.07
+01:47:02: 3500999.64,5872735.39
+01:47:02: 3500984.41,5872754.54
+01:47:02: 3501005.83,5872752.74
+01:47:02: 3501025.85,5872675.02
+01:47:02: 3501006.54,5872694.40
+01:47:02: 3500985.24,5872716.77
+01:47:02: 3501003.58,5872714.96
+01:47:02: 3501023.70,5872694.34
+01:47:02: 3501024.09,5872711.88
+01:47:02: 3500999.00,5872653.89
+01:47:02: 3500985.41,5872671.67
+01:47:02: 3501003.29,5872674.51
+01:47:02: 3500978.44,5872653.61
+01:47:02: 3500958.75,5872694.55
+01:47:02: 3500939.98,5872713.54
+01:47:02: 3500941.39,5872694.44
+01:47:02: 3500982.65,5872694.61
+01:47:02: 3500963.86,5872715.98
+01:47:02: 3500966.44,5872674.88
+01:47:02: 3500959.29,5872656.97
+01:47:02: 3500943.85,5872675.41
+01:47:02: 3500940.14,5872653.50
+01:47:02: 3501124.54,5872713.13
+01:47:02: 3501062.87,5872732.89
+01:47:02: 3501042.20,5872778.44
+01:47:02: 3501044.10,5872797.35
+01:47:02: 3501063.19,5872777.58
+01:47:02: 3501062.28,5872798.81
+01:47:02: 3501066.70,5872754.34
+01:47:02: 3501046.54,5872738.13
+01:47:02: 3501042.91,5872757.62
+01:47:02: 3501124.38,5872757.75
+01:47:02: 3501084.77,5872776.09
+01:47:02: 3501083.68,5872798.76
+01:47:02: 3501124.81,5872798.41
+01:47:02: 3501103.24,5872794.15
+01:47:02: 3501108.10,5872774.75
+01:47:02: 3501110.30,5872735.44
+01:47:02: 3501103.32,5872752.88
+01:47:02: 3501085.20,5872735.50
+01:47:02: 3501087.59,5872758.25
+01:47:02: 3501107.74,5872655.44
+01:47:02: 3501083.39,5872692.30
+01:47:02: 3501087.50,5872712.39
+01:47:02: 3501106.21,5872698.61
+01:47:02: 3501103.19,5872718.29
+01:47:02: 3501106.11,5872678.25
+01:47:02: 3501083.07,5872652.54
+01:47:02: 3501088.43,5872671.12
+01:47:02: 3501061.08,5872655.24
+01:47:02: 3501040.37,5872694.44
+01:47:02: 3501045.80,5872716.46
+01:47:02: 3501060.57,5872694.50
+01:47:02: 3501069.11,5872714.57
+01:47:02: 3501069.37,5872673.58
+01:47:02: 3501039.44,5872655.25
+01:47:02: 3501048.44,5872674.05
+01:47:03: 3501115.29,5872578.40
+01:47:03: 3501072.16,5872604.47
+01:47:03: 3501042.90,5872621.64
+01:47:03: 3501047.12,5872638.76
+01:47:03: 3501063.65,5872616.36
+01:47:03: 3501066.31,5872634.53
+01:47:03: 3501057.54,5872591.37
+01:47:03: 3501047.34,5872607.37
+01:47:03: 3501037.96,5872597.83
+01:47:03: 3501040.42,5872577.91
+01:47:03: 3501109.16,5872615.97
+01:47:03: 3501086.08,5872618.17
+01:47:03: 3501085.36,5872634.95
+01:47:03: 3501102.06,5872635.09
+01:47:03: 3501099.55,5872590.34
+01:47:03: 3501084.08,5872595.98
+01:47:03: 3501096.98,5872601.56
+01:47:03: 3501078.23,5872579.53
+01:47:03: 3501117.18,5872538.63
+01:47:03: 3501097.28,5872569.03
+01:47:03: 3501078.77,5872546.75
+01:47:03: 3501111.32,5872501.40
+01:47:03: 3501075.10,5872509.26
+01:47:03: 3501040.94,5872538.96
+01:47:03: 3501059.49,5872568.87
+01:47:03: 3501036.13,5872501.02
+01:47:03: 3501000.21,5872540.43
+01:47:03: 3500966.11,5872584.15
+01:47:03: 3500948.06,5872619.02
+01:47:03: 3500941.10,5872634.03
+01:47:03: 3500972.88,5872616.09
+01:47:03: 3500962.34,5872636.44
+01:47:03: 3501022.52,5872610.28
+01:47:03: 3500997.70,5872613.19
+01:47:03: 3500985.70,5872633.81
+01:47:03: 3501006.78,5872634.11
+01:47:03: 3501028.24,5872636.30
+01:47:03: 3501019.38,5872620.14
+01:47:03: 3501018.89,5872590.18
+01:47:03: 3500996.17,5872597.86
+01:47:03: 3501002.82,5872504.66
+01:47:03: 3500993.51,5872570.39
+01:47:03: 3501021.62,5872568.54
+01:47:03: 3500960.32,5872544.50
+01:47:03: 3500969.85,5872510.23
+01:47:03: 3500938.44,5872507.21
+01:47:03: 3501124.90,5872469.44
+01:47:03: 3501010.66,5872468.95
+01:47:03: 3500967.61,5872469.72
+01:47:03: 3500960.00,5872426.24
+01:47:03: 3500995.84,5872432.90
+01:47:03: 3501011.33,5872393.41
+01:47:03: 3501000.95,5872353.37
+01:47:03: 3500974.22,5872393.15
+01:47:03: 3500961.63,5872360.89
+01:47:03: 3501086.22,5872469.19
+01:47:03: 3501050.00,5872468.05
+01:47:03: 3501075.11,5872428.77
+01:47:03: 3501033.83,5872432.08
+01:47:03: 3501110.97,5872436.38
+01:47:03: 3501113.65,5872397.35
+01:47:03: 3501119.99,5872353.74
+01:47:03: 3501084.17,5872361.10
+01:47:03: 3501074.74,5872389.75
+01:47:03: 3501045.74,5872398.81
+01:47:03: 3501043.45,5872359.11
+01:47:03: 3501115.81,5872311.04
+01:47:03: 3501041.63,5872319.47
+01:47:03: 3501074.73,5872285.20
+01:47:03: 3501033.93,5872280.15
+01:47:03: 3501079.03,5872326.51
+01:47:03: 3501111.12,5872275.51
+01:47:03: 3501124.82,5872244.39
+01:47:03: 3501086.06,5872243.80
+01:47:03: 3501109.72,5872211.91
+01:47:03: 3501048.90,5872244.38
+01:47:03: 3501074.92,5872202.83
+01:47:03: 3501036.06,5872212.33
+01:47:03: 3501008.37,5872314.87
+01:47:03: 3500969.06,5872322.43
+01:47:03: 3500963.12,5872278.45
+01:47:03: 3500997.83,5872285.43
+01:47:03: 3501003.58,5872244.52
+01:47:03: 3501007.92,5872201.54
+01:47:03: 3500961.78,5872238.88
+01:47:03: 3500973.90,5872206.31
+01:47:03: 3500923.76,5872475.45
+01:47:03: 3500816.62,5872479.09
+01:47:03: 3500779.10,5872499.54
+01:47:03: 3500779.96,5872459.99
+01:47:03: 3500815.38,5872439.43
+01:47:03: 3500813.62,5872399.18
+01:47:03: 3500821.37,5872362.92
+01:47:03: 3500777.95,5872422.73
+01:47:03: 3500773.13,5872387.98
+01:47:03: 3500786.31,5872356.18
+01:47:03: 3500928.16,5872438.87
+01:47:03: 3500886.82,5872466.21
+01:47:03: 3500848.88,5872463.97
+01:47:03: 3500855.02,5872427.59
+01:47:03: 3500896.12,5872428.30
+01:47:03: 3500928.40,5872393.15
+01:47:03: 3500887.33,5872398.52
+01:47:03: 3500888.67,5872359.68
+01:47:03: 3500851.89,5872386.38
+01:47:03: 3500929.24,5872349.43
+01:47:03: 3500890.00,5872290.11
+01:47:03: 3500850.64,5872349.88
+01:47:03: 3500856.65,5872314.33
+01:47:03: 3500930.28,5872310.92
+01:47:03: 3500895.97,5872324.49
+01:47:03: 3500924.45,5872276.70
+01:47:03: 3500928.54,5872243.07
+01:47:03: 3500931.49,5872202.39
+01:47:03: 3500892.61,5872214.33
+01:47:03: 3500889.81,5872250.70
+01:47:03: 3500852.39,5872272.75
+01:47:03: 3500853.62,5872235.57
+01:47:03: 3500815.42,5872326.63
+01:47:03: 3500776.58,5872315.36
+01:47:03: 3500816.70,5872289.28
+01:47:03: 3500816.74,5872251.90
+01:47:03: 3500815.84,5872214.07
+01:47:03: 3500778.79,5872273.93
+01:47:03: 3500778.32,5872235.27
+01:47:03: 3501268.36,5872651.95
+01:47:03: 3501273.15,5872673.37
+01:47:03: 3501206.84,5872652.17
+01:47:03: 3501167.57,5872735.36
+01:47:03: 3501147.20,5872772.03
+01:47:03: 3501128.97,5872779.53
+01:47:03: 3501167.38,5872776.57
+01:47:03: 3501148.91,5872795.04
+01:47:03: 3501171.45,5872796.38
+01:47:03: 3501165.70,5872754.56
+01:47:03: 3501150.83,5872735.34
+01:47:03: 3501144.10,5872753.21
+01:47:03: 3501130.40,5872735.15
+01:47:03: 3501205.11,5872732.35
+01:47:03: 3501189.78,5872777.25
+01:47:03: 3501190.31,5872799.48
+01:47:03: 3501213.01,5872776.02
+01:47:03: 3501205.77,5872793.33
+01:47:03: 3501206.44,5872754.65
+01:47:03: 3501186.51,5872737.79
+01:47:03: 3501185.49,5872758.31
+01:47:03: 3501212.00,5872673.73
+01:47:03: 3501189.91,5872696.99
+01:47:03: 3501187.52,5872714.94
+01:47:03: 3501206.30,5872691.87
+01:47:03: 3501210.65,5872712.82
+01:47:03: 3501183.73,5872653.67
+01:47:03: 3501189.75,5872675.30
+01:47:03: 3501163.20,5872653.46
+01:47:03: 3501144.34,5872696.90
+01:47:03: 3501146.94,5872714.93
+01:47:03: 3501126.51,5872689.86
+01:47:03: 3501167.28,5872694.24
+01:47:03: 3501167.71,5872718.18
+01:47:03: 3501169.69,5872671.83
+01:47:03: 3501149.03,5872676.32
+01:47:03: 3501144.43,5872656.58
+01:47:03: 3501126.33,5872670.15
+01:47:03: 3501128.73,5872650.84
+01:47:03: 3501270.19,5872694.10
+01:47:03: 3501244.83,5872735.84
+01:47:03: 3501233.49,5872775.89
+01:47:03: 3501223.68,5872796.70
+01:47:03: 3501252.38,5872778.98
+01:47:03: 3501247.19,5872799.54
+01:47:03: 3501251.37,5872756.84
+01:47:03: 3501224.29,5872735.89
+01:47:03: 3501228.82,5872755.92
+01:47:03: 3501268.13,5872734.01
+01:47:03: 3501269.92,5872776.05
+01:47:03: 3501269.96,5872796.88
+01:47:03: 3501287.77,5872773.87
+01:47:03: 3501292.04,5872794.99
+01:47:03: 3501309.00,5872778.76
+01:47:03: 3501290.72,5872735.69
+01:47:03: 3501294.92,5872755.97
+01:47:03: 3501273.90,5872755.56
+01:47:03: 3501267.86,5872712.83
+01:47:03: 3501289.02,5872713.12
+01:47:03: 3501246.92,5872651.20
+01:47:03: 3501229.01,5872694.63
+01:47:03: 3501231.16,5872717.20
+01:47:03: 3501251.37,5872696.43
+01:47:03: 3501249.43,5872715.24
+01:47:03: 3501249.95,5872674.10
+01:47:03: 3501228.69,5872657.13
+01:47:03: 3501229.44,5872674.50
+01:47:03: 3501249.38,5872633.13
+01:47:03: 3501249.74,5872614.46
+01:47:03: 3501228.59,5872638.46
+01:47:03: 3501227.10,5872617.03
+01:47:03: 3501253.84,5872596.37
+01:47:03: 3501245.91,5872584.12
+01:47:03: 3501233.91,5872598.50
+01:47:03: 3501221.09,5872587.02
+01:47:03: 3501229.17,5872566.01
+01:47:03: 3501235.75,5872537.12
+01:47:03: 3501221.53,5872504.89
+01:47:03: 3501208.92,5872628.63
+01:47:03: 3501168.87,5872632.40
+01:47:03: 3501145.49,5872636.07
+01:47:03: 3501130.61,5872615.00
+01:47:03: 3501149.72,5872617.40
+01:47:03: 3501166.18,5872610.15
+01:47:03: 3501171.45,5872592.84
+01:47:03: 3501154.94,5872577.85
+01:47:03: 3501146.63,5872595.74
+01:47:03: 3501215.25,5872598.93
+01:47:03: 3501190.90,5872636.44
+01:47:03: 3501186.70,5872618.93
+01:47:03: 3501204.96,5872609.52
+01:47:03: 3501196.27,5872589.93
+01:47:03: 3501185.64,5872601.20
+01:47:03: 3501200.73,5872573.39
+01:47:03: 3501175.15,5872570.49
+01:47:03: 3501198.38,5872544.26
+01:47:03: 3501185.98,5872511.14
+01:47:03: 3501157.49,5872542.35
+01:47:03: 3501134.63,5872572.55
+01:47:03: 3501149.75,5872502.63
+01:47:03: 3501313.28,5872798.83
+01:47:03: 3501190.54,5872476.55
+01:47:03: 3501158.30,5872464.89
+01:47:03: 3501146.03,5872431.03
+01:47:03: 3501188.70,5872434.92
+01:47:03: 3501191.42,5872395.80
+01:47:03: 3501197.21,5872360.71
+01:47:03: 3501153.26,5872393.92
+01:47:03: 3501161.53,5872356.63
+01:47:03: 3501228.07,5872468.26
+01:47:03: 3501149.64,5872322.94
+01:47:03: 3501151.77,5872285.31
+01:47:03: 3501186.94,5872320.54
+01:47:03: 3501161.56,5872244.95
+01:47:03: 3501145.72,5872206.68
+01:47:03: 3500854.22,5872197.56
+01:47:03: 3500927.33,5872161.12
+01:47:03: 3500816.58,5872175.26
+01:47:03: 3500778.68,5872198.44
+01:47:03: 3500779.77,5872160.21
+01:47:03: 3500778.74,5872129.13
+01:47:03: 3500815.96,5872127.14
+01:47:03: 3500815.54,5872069.75
+01:47:03: 3500778.23,5872088.68
+01:47:03: 3500891.58,5872175.92
+01:47:03: 3500853.63,5872160.36
+01:47:03: 3500853.43,5872129.54
+01:47:03: 3500928.83,5872130.70
+01:47:03: 3500891.12,5872129.13
+01:47:03: 3500931.36,5872094.45
+01:47:03: 3500889.75,5872079.02
+01:47:03: 3500852.79,5872090.85
+01:47:03: 3500920.49,5872045.31
+01:47:03: 3500854.99,5872024.70
+01:47:03: 3500905.33,5871992.51
+01:47:03: 3500922.91,5871936.17
+01:47:03: 3500777.28,5872008.56
+01:47:03: 3500840.99,5871944.30
+01:47:03: 3500768.58,5871929.93
+01:47:03: 3501114.99,5872177.32
+01:47:03: 3501000.39,5872163.85
+01:47:03: 3500961.83,5872173.37
+01:47:03: 3500964.61,5872134.63
+01:47:03: 3501003.83,5872123.68
+01:47:03: 3501004.68,5872085.01
+01:47:03: 3501003.75,5872053.96
+01:47:03: 3500970.68,5872097.71
+01:47:03: 3500966.41,5872054.34
+01:47:03: 3501078.10,5872161.09
+01:47:03: 3501041.10,5872176.30
+01:47:03: 3501041.03,5872139.33
+01:47:03: 3501117.52,5872138.91
+01:47:03: 3501078.55,5872122.63
+01:47:03: 3501116.03,5872100.44
+01:47:03: 3501078.56,5872085.16
+01:47:03: 3501078.32,5872054.46
+01:47:03: 3501041.31,5872100.06
+01:47:03: 3501040.97,5872051.99
+01:47:03: 3501077.72,5872015.58
+01:47:03: 3501040.56,5871994.57
+01:47:03: 3501079.95,5871949.46
+01:47:03: 3501003.24,5872013.49
+01:47:03: 3500961.04,5871998.43
+01:47:03: 3501002.28,5871933.36
+01:47:03: 3500993.59,5871854.72
+01:47:03: 3501009.73,5871783.70
+01:47:03: 3500995.69,5871708.12
+01:47:03: 3500861.08,5871875.95
+01:47:03: 3500793.26,5871863.77
+01:47:03: 3500762.15,5871794.93
+01:47:03: 3500928.45,5871864.52
+01:47:03: 3500926.18,5871790.29
+01:47:03: 3500847.80,5871798.46
+01:47:03: 3500855.74,5871717.74
+01:47:03: 3500927.97,5871716.56
+01:47:03: 3500788.08,5871729.94
+01:47:03: 3500746.73,5872548.92
+01:47:03: 3500741.50,5872515.34
+01:47:03: 3500554.52,5872536.05
+01:47:03: 3500553.66,5872655.76
+01:47:03: 3500514.07,5872737.50
+01:47:03: 3500557.26,5872742.45
+01:47:03: 3500523.52,5872766.56
+01:47:03: 3500547.05,5872758.16
+01:47:03: 3500550.10,5872691.87
+01:47:03: 3500542.43,5872723.04
+01:47:03: 3500520.03,5872661.30
+01:47:03: 3500510.78,5872695.85
+01:47:03: 3500557.04,5872578.11
+01:47:03: 3500512.85,5872622.81
+01:47:03: 3500553.08,5872618.96
+01:47:03: 3500521.05,5872586.92
+01:47:03: 3500521.06,5872511.64
+01:47:03: 3500512.49,5872548.24
+01:47:03: 3500740.71,5872581.44
+01:47:03: 3500625.25,5872653.51
+01:47:03: 3500594.12,5872741.34
+01:47:03: 3500570.58,5872749.75
+01:47:03: 3500617.65,5872732.94
+01:47:03: 3500652.04,5872779.45
+01:47:03: 3500639.07,5872740.47
+01:47:03: 3500653.76,5872759.24
+01:47:03: 3500613.07,5872743.49
+01:47:03: 3500631.11,5872753.51
+01:47:03: 3500644.85,5872684.21
+01:47:03: 3500622.57,5872708.21
+01:47:03: 3500647.70,5872706.55
+01:47:03: 3500641.19,5872724.53
+01:47:03: 3500617.00,5872682.26
+01:47:03: 3500589.07,5872654.43
+01:47:03: 3500572.74,5872723.89
+01:47:03: 3500586.97,5872692.10
+01:47:03: 3500596.78,5872722.05
+01:47:03: 3500703.36,5872658.44
+01:47:03: 3500697.32,5872737.95
+01:47:03: 3500673.33,5872774.86
+01:47:03: 3500679.06,5872796.81
+01:47:03: 3500692.57,5872778.51
+01:47:03: 3500698.80,5872794.78
+01:47:03: 3500694.37,5872758.01
+01:47:03: 3500657.48,5872737.33
+01:47:03: 3500673.09,5872754.41
+01:47:03: 3500676.93,5872736.94
+01:47:03: 3500732.62,5872736.91
+01:47:03: 3500711.90,5872776.04
+01:47:03: 3500718.17,5872798.99
+01:47:03: 3500731.92,5872776.60
+01:47:03: 3500740.66,5872797.00
+01:47:03: 3500740.88,5872756.05
+01:47:03: 3500714.23,5872734.19
+01:47:03: 3500717.99,5872754.77
+01:47:03: 3500736.14,5872669.34
+01:47:03: 3500711.79,5872699.31
+01:47:03: 3500720.38,5872716.36
+01:47:03: 3500735.33,5872690.90
+01:47:03: 3500740.00,5872720.23
+01:47:03: 3500735.93,5872703.47
+01:47:03: 3500712.63,5872682.28
+01:47:03: 3500665.69,5872652.65
+01:47:03: 3500666.67,5872691.00
+01:47:03: 3500666.91,5872707.30
+01:47:03: 3500664.72,5872716.12
+01:47:03: 3500688.26,5872707.71
+01:47:03: 3500682.40,5872721.75
+01:47:03: 3500700.68,5872718.41
+01:47:03: 3500687.42,5872683.86
+01:47:03: 3500737.44,5872615.10
+01:47:03: 3500697.67,5872619.98
+01:47:03: 3500661.45,5872614.15
+01:47:03: 3500665.40,5872581.10
+01:47:03: 3500703.43,5872581.99
+01:47:03: 3500729.43,5872643.94
+01:47:03: 3500711.01,5872543.86
+01:47:03: 3500700.87,5872502.87
+01:47:03: 3500674.94,5872544.30
+01:47:03: 3500662.87,5872511.75
+01:47:03: 3500636.71,5872544.82
+01:47:03: 3500595.33,5872586.04
+01:47:03: 3500590.02,5872618.88
+01:47:03: 3500627.80,5872580.06
+01:47:03: 3500628.60,5872619.05
+01:47:03: 3500625.04,5872504.51
+01:47:03: 3500595.65,5872548.26
+01:47:03: 3500585.02,5872512.61
+01:47:03: 3500740.12,5872477.95
+01:47:03: 3500633.41,5872464.78
+01:47:03: 3500594.14,5872472.82
+01:47:03: 3500586.26,5872435.47
+01:47:03: 3500621.32,5872431.77
+01:47:03: 3500629.55,5872394.19
+01:47:03: 3500631.67,5872354.02
+01:47:03: 3500591.61,5872401.83
+01:47:03: 3500591.30,5872363.83
+01:47:03: 3500741.41,5872438.62
+01:47:03: 3500702.79,5872461.27
+01:47:03: 3500667.06,5872476.86
+01:47:03: 3500663.34,5872434.95
+01:47:03: 3500738.26,5872397.28
+01:47:03: 3500703.37,5872424.36
+01:47:03: 3500703.49,5872394.22
+01:47:03: 3500744.17,5872353.91
+01:47:03: 3500704.88,5872362.83
+01:47:03: 3500667.89,5872391.45
+01:47:03: 3500671.33,5872351.55
+01:47:03: 3500740.91,5872319.59
+01:47:03: 3500658.64,5872318.54
+01:47:03: 3500671.37,5872286.53
+01:47:03: 3500741.22,5872288.53
+01:47:03: 3500703.30,5872319.13
+01:47:03: 3500741.27,5872251.42
+01:47:03: 3500704.23,5872274.00
+01:47:03: 3500739.28,5872210.16
+01:47:03: 3500703.76,5872205.92
+01:47:03: 3500703.07,5872236.08
+01:47:03: 3500665.88,5872250.36
+01:47:03: 3500666.09,5872204.34
+01:47:03: 3500623.55,5872313.96
+01:47:03: 3500590.65,5872327.99
+01:47:03: 3500592.06,5872288.78
+01:47:03: 3500631.62,5872277.10
+01:47:03: 3500628.41,5872236.08
+01:47:03: 3500628.42,5872204.88
+01:47:03: 3500591.72,5872250.62
+01:47:03: 3500590.94,5872202.42
+01:47:03: 3500552.66,5872496.27
+01:47:03: 3500552.76,5872460.53
+01:47:03: 3500513.01,5872471.98
+01:47:03: 3500516.07,5872432.57
+01:47:03: 3500553.45,5872423.76
+01:47:03: 3500523.29,5872394.52
+01:47:03: 3500558.79,5872388.63
+01:47:03: 3500550.62,5872352.44
+01:47:03: 3500511.11,5872362.02
+01:47:03: 3500553.05,5872311.19
+01:47:03: 3500514.04,5872285.62
+01:47:03: 3500516.25,5872326.35
+01:47:03: 3500553.70,5872273.28
+01:47:03: 3500520.54,5872248.16
+01:47:03: 3500554.69,5872235.29
+01:47:03: 3500553.69,5872204.37
+01:47:03: 3500516.18,5872204.69
+01:47:03: 3500481.36,5872244.86
+01:47:03: 3500745.65,5872172.94
+01:47:03: 3500552.45,5872083.72
+01:47:03: 3500397.99,5872087.39
+01:47:03: 3500396.78,5872167.26
+01:47:03: 3500455.14,5872143.54
+01:47:03: 3500553.23,5872163.90
+01:47:03: 3500510.96,5872149.13
+01:47:03: 3500469.87,5872195.85
+01:47:03: 3500472.20,5872085.07
+01:47:03: 3500543.58,5872005.13
+01:47:03: 3500477.48,5872015.71
+01:47:03: 3500560.21,5871934.17
+01:47:03: 3500488.57,5871951.37
+01:47:03: 3500402.48,5872016.05
+01:47:03: 3500411.44,5871936.00
+01:47:03: 3500706.36,5872169.66
+01:47:03: 3500629.99,5872099.90
+01:47:03: 3500590.54,5872144.97
+01:47:03: 3500627.78,5872166.07
+01:47:03: 3500741.40,5872129.51
+01:47:03: 3500664.75,5872154.22
+01:47:03: 3500736.04,5872073.62
+01:47:03: 3500695.48,5872120.52
+01:47:03: 3500680.32,5872067.71
+01:47:03: 3500697.90,5872011.37
+01:47:03: 3500703.18,5871939.50
+01:47:03: 3500615.99,5872019.51
+01:47:03: 3500636.02,5871950.86
+01:47:03: 3500708.26,5871858.66
+01:47:03: 3500623.89,5871873.10
+01:47:03: 3500637.94,5871805.31
+01:47:03: 3500689.98,5871777.60
+01:47:03: 3500712.05,5871710.13
+01:47:03: 3500621.23,5871727.03
+01:47:03: 3500640.64,5871658.27
+01:47:03: 3500545.81,5871858.97
+01:47:03: 3500392.05,5871856.69
+01:47:03: 3500409.63,5871797.55
+01:47:03: 3500470.74,5871877.22
+01:47:03: 3500562.22,5871786.24
+01:47:03: 3500480.84,5871795.79
+01:47:03: 3500546.42,5871710.56
+01:47:03: 3500478.48,5871721.86
+01:47:03: 3500328.59,5872089.91
+01:47:03: 3500325.72,5872016.30
+01:47:03: ->Auswertung der Kommandozeilen-Parameter gestartet
+01:47:03:   Parameterdatei: 'test_daten\test.par'
+01:47:03:   ->Laden der Parameterdatei 'test_daten\test.par' gestartet
+01:47:03:   <-Laden der Parameterdatei 'test_daten\test.par' beendet
+01:47:03:   DGM-Datei: 'egal.shp'
+01:47:03:   Profillagen-Datei: 'egal.shp'
+01:47:03:   WSP-Datei: 'egal.shp'
+01:47:03:   Gewässerachse: 'egal.shp'
+01:47:03:   Bruch- und Sperr-Datei: 'egal.shp'
+01:47:03:   Gelände wirkt als Sperre
+01:47:03:   Delta: Von = 0.00 Bis = 1.00 Diff = 0.23
+01:47:03:   Ausgabe-Datei: 'egal.shp'
+01:47:03: <-Auswertung der Kommandozeilen-Parameter beendet
+01:47:03: ->Laden des DGM in Datei 'test_daten/dgmtin/tnxy.adf' gestartet
+01:47:03:   ->Laden des DGM in Datei 'test_daten/dgmtin/tnxy.adf' als TIN gestartet
+01:47:03:     ->Laden der Knoten gestartet
+01:47:03:       118 Werten gelesen, 114 von 114 Knoten im Speicher
+01:47:03:     <-Laden der Knoten beendet
+01:47:03:     ->Laden der Elemente gestartet
+01:47:03:       230 Werte geladen, 218 von 230 Elementen im Speicher
+01:47:03:     <-Laden der Elemente beendet
+01:47:03:   <-Laden des DGM in Datei 'test_daten/dgmtin/tnxy.adf' als TIN beendet
+01:47:03:   ->Suche nach doppelten Knoten gestartet
+01:47:03:     114 Knoten und 218 Elemente vorhanden
+01:47:03:     0 Knoten gelöscht, 0 Elemente gelöscht
+01:47:03:   <-Suche nach doppelten Knoten beendet
+01:47:03: <-Laden des DGM in Datei 'test_daten/dgmtin/tnxy.adf' beendet
+01:47:03: ->Laden des DGM in Datei 'test_daten/dgmtin/tnxy.adf' gestartet
+01:47:03:   ->Laden des DGM in Datei 'test_daten/dgmtin/tnxy.adf' als TIN gestartet
+01:47:03:     ->Laden der Knoten gestartet
+01:47:03:       118 Werten gelesen, 52 von 52 Knoten im Speicher
+01:47:03:     <-Laden der Knoten beendet
+01:47:03:     ->Laden der Elemente gestartet
+01:47:03:       230 Werte geladen, 72 von 230 Elementen im Speicher
+01:47:03:     <-Laden der Elemente beendet
+01:47:03:   <-Laden des DGM in Datei 'test_daten/dgmtin/tnxy.adf' als TIN beendet
+01:47:03:   ->Suche nach doppelten Knoten gestartet
+01:47:03:     52 Knoten und 72 Elemente vorhanden
+01:47:03:     0 Knoten gelöscht, 0 Elemente gelöscht
+01:47:03:   <-Suche nach doppelten Knoten beendet
+01:47:03: <-Laden des DGM in Datei 'test_daten/dgmtin/tnxy.adf' beendet
+01:47:03: ->Laden des DGM in Datei 'test_daten/dgm.grd' gestartet
+01:47:03:   ->Laden des DGM in Datei 'test_daten/dgm.grd' als GRD gestartet
+01:47:03:     10000 von 71250 Werten gelesen, 0 von 0 Knoten im Speicher
+01:47:03:     20000 von 71250 Werten gelesen, 5130 von 5130 Knoten im Speicher
+01:47:03:     30000 von 71250 Werten gelesen, 11135 von 11135 Knoten im Speicher
+01:47:03:     40000 von 71250 Werten gelesen, 17145 von 17145 Knoten im Speicher
+01:47:03:     50000 von 71250 Werten gelesen, 23155 von 23155 Knoten im Speicher
+01:47:03:     60000 von 71250 Werten gelesen, 24624 von 24624 Knoten im Speicher
+01:47:03:     70000 von 71250 Werten gelesen, 24624 von 24624 Knoten im Speicher
+01:47:03:     71250 von 71250 Werten gelesen, 24624 von 24624 Knoten im Speicher
+01:47:03:   <-Laden des DGM in Datei 'test_daten/dgm.grd' als GRD beendet
+01:47:03:   ->Suche nach doppelten Knoten gestartet
+01:47:03:     24624 Knoten und keine Elemente vorhanden
+01:47:03:     10000 von 24624 Knoten, 0 Knoten gelöscht
+01:47:03:     20000 von 24624 Knoten, 0 Knoten gelöscht
+01:47:03:     0 Knoten gelöscht, 0 Elemente gelöscht
+01:47:03:   <-Suche nach doppelten Knoten beendet
+01:47:03: <-Laden des DGM in Datei 'test_daten/dgm.grd' beendet
+01:47:03: ->Laden des DGM in Datei 'test_daten/dgm.xyz' gestartet
+01:47:03:   ->Laden des DGM in Datei 'test_daten/dgm.xyz' als XYZ gestartet
+01:47:03:     10 Werte gelesen, 10 von 10 Knoten im Speicher
+01:47:03:   <-Laden des DGM in Datei 'test_daten/dgm.xyz' als XYZ beendet
+01:47:03:   ->Suche nach doppelten Knoten gestartet
+01:47:03:     10 Knoten und keine Elemente vorhanden
+01:47:03:     0 Knoten gelöscht, 0 Elemente gelöscht
+01:47:03:   <-Suche nach doppelten Knoten beendet
+01:47:03: <-Laden des DGM in Datei 'test_daten/dgm.xyz' beendet
+01:47:03: ->Laden des DGM in Datei 'test_daten/dgm_gross.xyz' gestartet
+01:47:03:   ->Laden des DGM in Datei 'test_daten/dgm_gross.xyz' als XYZ gestartet
+01:47:03:     1126 Werte gelesen, 1126 von 1126 Knoten im Speicher
+01:47:03:   <-Laden des DGM in Datei 'test_daten/dgm_gross.xyz' als XYZ beendet
+01:47:03:   ->Suche nach doppelten Knoten gestartet
+01:47:03:     1126 Knoten und keine Elemente vorhanden
+01:47:03:     0 Knoten gelöscht, 0 Elemente gelöscht
+01:47:03:   <-Suche nach doppelten Knoten beendet
+01:47:03: <-Laden des DGM in Datei 'test_daten/dgm_gross.xyz' beendet
+01:47:03: ->Laden des DGM in Datei 'test_daten/dgm_ziemlich_gross.xyz' gestartet
+01:47:03:   ->Laden des DGM in Datei 'test_daten/dgm_ziemlich_gross.xyz' als XYZ gestartet
+01:47:03:     10000 Werte gelesen, 9999 von 9999 Knoten im Speicher
+01:47:03:     20000 Werte gelesen, 19999 von 19999 Knoten im Speicher
+01:47:03:     30000 Werte gelesen, 29999 von 29999 Knoten im Speicher
+01:47:04:     40000 Werte gelesen, 39999 von 39999 Knoten im Speicher
+01:47:04:     43332 Werte gelesen, 43332 von 43332 Knoten im Speicher
+01:47:04:   <-Laden des DGM in Datei 'test_daten/dgm_ziemlich_gross.xyz' als XYZ beendet
+01:47:04:   ->Suche nach doppelten Knoten gestartet
+01:47:04:     43332 Knoten und keine Elemente vorhanden
+01:47:04:     10000 von 43332 Knoten, 0 Knoten gelöscht
+01:47:04:     20000 von 43332 Knoten, 0 Knoten gelöscht
+01:47:04:     30000 von 43332 Knoten, 0 Knoten gelöscht
+01:47:04:     40000 von 43332 Knoten, 0 Knoten gelöscht
+01:47:04:     0 Knoten gelöscht, 0 Elemente gelöscht
+01:47:04:   <-Suche nach doppelten Knoten beendet
+01:47:04: <-Laden des DGM in Datei 'test_daten/dgm_ziemlich_gross.xyz' beendet
+01:47:04: ->Laden des DGM in Datei 'test_daten/dgm_sehr_gross.xyz' gestartet
+01:47:04:   ->Laden des DGM in Datei 'test_daten/dgm_sehr_gross.xyz' als XYZ gestartet
+01:47:04:     10000 Werte gelesen, 9999 von 9999 Knoten im Speicher
+01:47:04:     20000 Werte gelesen, 19999 von 19999 Knoten im Speicher
+01:47:04:     30000 Werte gelesen, 29999 von 29999 Knoten im Speicher
+01:47:04:     40000 Werte gelesen, 39999 von 39999 Knoten im Speicher
+01:47:05:     50000 Werte gelesen, 49999 von 49999 Knoten im Speicher
+01:47:05:     60000 Werte gelesen, 59999 von 59999 Knoten im Speicher
+01:47:05:     70000 Werte gelesen, 69999 von 69999 Knoten im Speicher
+01:47:05:     80000 Werte gelesen, 79999 von 79999 Knoten im Speicher
+01:47:05:     90000 Werte gelesen, 89999 von 89999 Knoten im Speicher
+01:47:05:     98636 Werte gelesen, 98636 von 98636 Knoten im Speicher
+01:47:05:   <-Laden des DGM in Datei 'test_daten/dgm_sehr_gross.xyz' als XYZ beendet
+01:47:05:   ->Suche nach doppelten Knoten gestartet
+01:47:05:     98636 Knoten und keine Elemente vorhanden
+01:47:06:     10000 von 98636 Knoten, 0 Knoten gelöscht
+01:47:06:     20000 von 98636 Knoten, 0 Knoten gelöscht
+01:47:06:     30000 von 98636 Knoten, 0 Knoten gelöscht
+01:47:06:     40000 von 98636 Knoten, 0 Knoten gelöscht
+01:47:06:     50000 von 98636 Knoten, 0 Knoten gelöscht
+01:47:06:     60000 von 98636 Knoten, 0 Knoten gelöscht
+01:47:06:     70000 von 98636 Knoten, 0 Knoten gelöscht
+01:47:06:     80000 von 98636 Knoten, 0 Knoten gelöscht
+01:47:06:     90000 von 98636 Knoten, 0 Knoten gelöscht
+01:47:06:     0 Knoten gelöscht, 0 Elemente gelöscht
+01:47:06:   <-Suche nach doppelten Knoten beendet
+01:47:06: <-Laden des DGM in Datei 'test_daten/dgm_sehr_gross.xyz' beendet
+01:47:06: ->Laden des DGM in Datei 'test_daten/dgm.shp' gestartet
+01:47:06:   ->Laden des DGM in Datei 'test_daten/dgm.shp' als SHP gestartet
+01:47:06:     ->Laden der Projektionsdatei zu 'test_daten/dgm.shp' gestartet
+01:47:06:       Projektionsdatei 'test_daten/dgm.PRJ' konnte nicht geöffnet werden
+01:47:06:     <-Laden der Projektionsdatei zu 'test_daten/dgm.shp' beendet
+01:47:06:     114 von 114 Objekten gelesen, 114 von 114 Knoten im Speicher
+01:47:06:   <-Laden des DGM in Datei 'test_daten/dgm.shp' als SHP beendet
+01:47:06:   ->Suche nach doppelten Knoten gestartet
+01:47:06:     114 Knoten und keine Elemente vorhanden
+01:47:06:     0 Knoten gelöscht, 0 Elemente gelöscht
+01:47:06:   <-Suche nach doppelten Knoten beendet
+01:47:06: <-Laden des DGM in Datei 'test_daten/dgm.shp' beendet
+01:47:06: ->Laden des DGM in Datei 'test_daten/dgm2.shp' gestartet
+01:47:06:   ->Laden des DGM in Datei 'test_daten/dgm2.shp' als SHP gestartet
+01:47:06:     ->Laden der Projektionsdatei zu 'test_daten/dgm2.shp' gestartet
+01:47:06:       Projektionsdatei 'test_daten/dgm2.PRJ' konnte nicht geöffnet werden
+01:47:06:     <-Laden der Projektionsdatei zu 'test_daten/dgm2.shp' beendet
+01:47:06:     10000 von 156249 Objekten gelesen, 9247 von 9247 Knoten im Speicher
+01:47:06:     20000 von 156249 Objekten gelesen, 11875 von 11875 Knoten im Speicher
+01:47:06:     30000 von 156249 Objekten gelesen, 11875 von 11875 Knoten im Speicher
+01:47:07:     40000 von 156249 Objekten gelesen, 11875 von 11875 Knoten im Speicher
+01:47:07:     50000 von 156249 Objekten gelesen, 11875 von 11875 Knoten im Speicher
+01:47:07:     60000 von 156249 Objekten gelesen, 11875 von 11875 Knoten im Speicher
+01:47:07:     70000 von 156249 Objekten gelesen, 12088 von 12088 Knoten im Speicher
+01:47:07:     80000 von 156249 Objekten gelesen, 13793 von 13793 Knoten im Speicher
+01:47:07:     90000 von 156249 Objekten gelesen, 15747 von 15747 Knoten im Speicher
+01:47:07:     100000 von 156249 Objekten gelesen, 17727 von 17727 Knoten im Speicher
+01:47:08:     110000 von 156249 Objekten gelesen, 19707 von 19707 Knoten im Speicher
+01:47:08:     120000 von 156249 Objekten gelesen, 21687 von 21687 Knoten im Speicher
+01:47:08:     130000 von 156249 Objekten gelesen, 23667 von 23667 Knoten im Speicher
+01:47:08:     140000 von 156249 Objekten gelesen, 25482 von 25482 Knoten im Speicher
+01:47:08:     150000 von 156249 Objekten gelesen, 27462 von 27462 Knoten im Speicher
+01:47:08:     156249 von 156249 Objekten gelesen, 28287 von 28287 Knoten im Speicher
+01:47:08:   <-Laden des DGM in Datei 'test_daten/dgm2.shp' als SHP beendet
+01:47:08:   ->Suche nach doppelten Knoten gestartet
+01:47:08:     28287 Knoten und keine Elemente vorhanden
+01:47:08:     10000 von 28287 Knoten, 0 Knoten gelöscht
+01:47:08:     20000 von 28287 Knoten, 0 Knoten gelöscht
+01:47:08:     0 Knoten gelöscht, 0 Elemente gelöscht
+01:47:08:   <-Suche nach doppelten Knoten beendet
+01:47:08: <-Laden des DGM in Datei 'test_daten/dgm2.shp' beendet
+01:47:08: ->Laden des DGM in Datei 'test_daten/dgm.2dm' gestartet
+01:47:08:   ->Laden des DGM in Datei 'test_daten/dgm.2dm' als 2DM gestartet
+01:47:08:     2225 Elemente und 1126 Knoten geladen
+01:47:08:     1126 Knoten insgesamt
+01:47:08:   <-Laden des DGM in Datei 'test_daten/dgm.2dm' als 2DM beendet
+01:47:08:   ->Suche nach doppelten Knoten gestartet
+01:47:08:     1126 Knoten und 2225 Elemente vorhanden
+01:47:08:     0 Knoten gelöscht, 0 Elemente gelöscht
+01:47:08:   <-Suche nach doppelten Knoten beendet
+01:47:08: <-Laden des DGM in Datei 'test_daten/dgm.2dm' beendet
+01:47:08: ->Laden der Profilspuren gestartet
+01:47:08:   ->Laden der Projektionsdatei zu 'test_daten/profile.shp' gestartet
+01:47:08:     Projektionsdatei 'test_daten/profile.PRJ' konnte nicht geöffnet werden
+01:47:08:   <-Laden der Projektionsdatei zu 'test_daten/profile.shp' beendet
+01:47:08:   Nur Profile mit einer Station kleiner als 9999.9000 werden geladen
+01:47:08:   8 von 8 Objekten geladen, 8 Profilspuren im Speicher
+01:47:08: <-Laden der Profilspuren beendet
+01:47:08: ->Ausrichten der Profilspuren gestartet
+01:47:08:   8 von 8 Profilspuren ausgerichtet, 3 gedreht
+01:47:08: <-Ausrichten der Profilspuren beendet
+01:47:08: ->Laden der Profilspuren gestartet
+01:47:08:   ->Laden der Projektionsdatei zu 'test_daten/profilez.shp' gestartet
+01:47:08:     Projektionsdatei 'test_daten/profilez.PRJ' konnte nicht geöffnet werden
+01:47:08:   <-Laden der Projektionsdatei zu 'test_daten/profilez.shp' beendet
+01:47:08:   Nur Profile mit einer Station kleiner als 9999.9000 werden geladen
+01:47:09:   5 von 5 Objekten geladen, 5 Profilspuren im Speicher
+01:47:09: <-Laden der Profilspuren beendet
+01:47:09: ->Ausrichten der Profilspuren gestartet
+01:47:09:   5 von 5 Profilspuren ausgerichtet, 0 gedreht
+01:47:09: <-Ausrichten der Profilspuren beendet
+01:47:09: ->Laden der Linien Strukturen (Sperren, Gräben und Rohre) gestartet
+01:47:09:   ->Laden der Projektionsdatei zu 'test_daten/linien.shp' gestartet
+01:47:09:     Projektionsdatei 'test_daten/linien.PRJ' konnte nicht geöffnet werden
+01:47:09:   <-Laden der Projektionsdatei zu 'test_daten/linien.shp' beendet
+Warnung (9999)
+Der Typ 'Bruch' wurde in der Datei 'test_daten/linien.DBF' benutzt.
+Er wird nur noch ubergangweise unterstützt.
+Bitte ändern sie ihn in 'GRABEN'.
+Warnung (9999)
+Warnung (9999)
+Der Typ 'Bruch' wurde in der Datei 'test_daten/linien.DBF' benutzt.
+Er wird nur noch ubergangweise unterstützt.
+Bitte ändern sie ihn in 'GRABEN'.
+Warnung (9999)
+Warnung (9999)
+Der Typ 'Bruch' wurde in der Datei 'test_daten/linien.DBF' benutzt.
+Er wird nur noch ubergangweise unterstützt.
+Bitte ändern sie ihn in 'GRABEN'.
+Warnung (9999)
+Warnung (9999)
+Der Typ 'Bruch' wurde in der Datei 'test_daten/linien.DBF' benutzt.
+Er wird nur noch ubergangweise unterstützt.
+Bitte ändern sie ihn in 'GRABEN'.
+Warnung (9999)
+01:47:09:   9 von 9 Liniensstrukturen geladen, 5 Sperren, 4 Gräben, 0 Rohre
+01:47:09: <-Laden der Linien Strukturen (Sperren, Gräben und Rohre) beendet
+01:47:09: ->Laden der Wasserstände gestartet
+01:47:09:   ->Laden der Wasserstände im ASCII-Format gestartet
+01:47:09:     100 Zeilen geladen, 99 Wasserstände im Speicher
+01:47:09:     200 Zeilen geladen, 199 Wasserstände im Speicher
+01:47:09:     300 Zeilen geladen, 299 Wasserstände im Speicher
+01:47:09:     400 Zeilen geladen, 399 Wasserstände im Speicher
+01:47:09:     500 Zeilen geladen, 499 Wasserstände im Speicher
+01:47:09:     600 Zeilen geladen, 599 Wasserstände im Speicher
+01:47:09:     700 Zeilen geladen, 699 Wasserstände im Speicher
+01:47:09:     800 Zeilen geladen, 799 Wasserstände im Speicher
+01:47:09:     900 Zeilen geladen, 899 Wasserstände im Speicher
+01:47:09:     1000 Zeilen geladen, 999 Wasserstände im Speicher
+01:47:09:     1100 Zeilen geladen, 1099 Wasserstände im Speicher
+01:47:09:     1200 Zeilen geladen, 1199 Wasserstände im Speicher
+01:47:09:     1300 Zeilen geladen, 1299 Wasserstände im Speicher
+01:47:09:     1400 Zeilen geladen, 1399 Wasserstände im Speicher
+01:47:09:     1500 Zeilen geladen, 1499 Wasserstände im Speicher
+01:47:09:     1600 Zeilen geladen, 1599 Wasserstände im Speicher
+01:47:09:     1700 Zeilen geladen, 1699 Wasserstände im Speicher
+01:47:09:     1800 Zeilen geladen, 1799 Wasserstände im Speicher
+01:47:09:     1900 Zeilen geladen, 1899 Wasserstände im Speicher
+01:47:09:     2000 Zeilen geladen, 1999 Wasserstände im Speicher
+01:47:09:     2100 Zeilen geladen, 2099 Wasserstände im Speicher
+01:47:09:     2200 Zeilen geladen, 2199 Wasserstände im Speicher
+01:47:09:     2300 Zeilen geladen, 2299 Wasserstände im Speicher
+01:47:09:     2400 Zeilen geladen, 2399 Wasserstände im Speicher
+01:47:09:     2500 Zeilen geladen, 2499 Wasserstände im Speicher
+01:47:09:     2600 Zeilen geladen, 2599 Wasserstände im Speicher
+01:47:09:     2700 Zeilen geladen, 2699 Wasserstände im Speicher
+01:47:09:     2800 Zeilen geladen, 2799 Wasserstände im Speicher
+01:47:09:     2900 Zeilen geladen, 2899 Wasserstände im Speicher
+01:47:09:     3000 Zeilen geladen, 2999 Wasserstände im Speicher
+01:47:09:     3100 Zeilen geladen, 3099 Wasserstände im Speicher
+01:47:09:     3200 Zeilen geladen, 3199 Wasserstände im Speicher
+01:47:09:     3300 Zeilen geladen, 3299 Wasserstände im Speicher
+01:47:09:     3400 Zeilen geladen, 3399 Wasserstände im Speicher
+01:47:09:     3500 Zeilen geladen, 3499 Wasserstände im Speicher
+01:47:09:     3600 Zeilen geladen, 3599 Wasserstände im Speicher
+01:47:09:     3700 Zeilen geladen, 3699 Wasserstände im Speicher
+01:47:09:     3800 Zeilen geladen, 3799 Wasserstände im Speicher
+01:47:09:     3900 Zeilen geladen, 3899 Wasserstände im Speicher
+01:47:09:     4000 Zeilen geladen, 3999 Wasserstände im Speicher
+01:47:09:     4100 Zeilen geladen, 4099 Wasserstände im Speicher
+01:47:09:     4200 Zeilen geladen, 4199 Wasserstände im Speicher
+01:47:09:     4300 Zeilen geladen, 4299 Wasserstände im Speicher
+01:47:09:     4400 Zeilen geladen, 4399 Wasserstände im Speicher
+01:47:09:     4500 Zeilen geladen, 4499 Wasserstände im Speicher
+01:47:09:     4600 Zeilen geladen, 4599 Wasserstände im Speicher
+01:47:09:     4700 Zeilen geladen, 4699 Wasserstände im Speicher
+01:47:09:     4800 Zeilen geladen, 4799 Wasserstände im Speicher
+01:47:09:     4900 Zeilen geladen, 4899 Wasserstände im Speicher
+01:47:09:     5000 Zeilen geladen, 4999 Wasserstände im Speicher
+01:47:09:     5100 Zeilen geladen, 5099 Wasserstände im Speicher
+01:47:09:     5200 Zeilen geladen, 5199 Wasserstände im Speicher
+01:47:09:     5300 Zeilen geladen, 5299 Wasserstände im Speicher
+01:47:09:     5400 Zeilen geladen, 5399 Wasserstände im Speicher
+01:47:09:     5500 Zeilen geladen, 5499 Wasserstände im Speicher
+01:47:09:     5600 Zeilen geladen, 5599 Wasserstände im Speicher
+01:47:09:     5669 Zeilen geladen, 5668 Wasserstände im Speicher
+01:47:09:   <-Laden der Wasserstände im ASCII-Format beendet
+01:47:09: <-Laden der Wasserstände beendet
+01:47:09: ->Laden der Wasserstände gestartet
+01:47:09:   ->Laden der Wasserstände im DBF-Format gestartet
+01:47:09:     42 von 42 Objekten gelesen, 42 Wasserstände im Speicher
+01:47:09:   <-Laden der Wasserstände im DBF-Format beendet
+01:47:09: <-Laden der Wasserstände beendet
+01:47:09: ->Laden der Gewässerachsen gestartet
+01:47:09:   ->Laden der Projektionsdatei zu 'test_daten/achse.shp' gestartet
+01:47:09:     Projektionsdatei 'test_daten/achse.PRJ' konnte nicht geöffnet werden
+01:47:09:   <-Laden der Projektionsdatei zu 'test_daten/achse.shp' beendet
+01:47:09:   10 von 14 Objekten gelesen, 10 Gewässerachsen im Speicher
+01:47:09:   14 von 14 Objekten gelesen, 14 Gewässerachsen im Speicher
+01:47:09: <-Laden der Gewässerachsen beendet
+01:47:09: ->Triangulierung der Knoten gestartet
+01:47:09:   ->Sortieren Knoten gestartet
+01:47:09:   <-Sortieren der Knoten beendet
+01:47:09:   ->Löschen des Knoten/Kanten-Index gestartet
+01:47:09:   <-Löschen des Knoten/Kanten-Index beendet
+01:47:09:   ->Suchen der Startkante gestartet
+01:47:09:     Kante: 1 - 2 als Startkante
+01:47:09:   <-Suchen der Startkante beendet
+01:47:09: <-Triangulierung der Knoten beendet
+01:47:09: ->Laden des DGM in Datei 'test_daten/dgm.xyz' gestartet
+01:47:09:   ->Laden des DGM in Datei 'test_daten/dgm.xyz' als XYZ gestartet
+01:47:09:     10 Werte gelesen, 10 von 10 Knoten im Speicher
+01:47:09:   <-Laden des DGM in Datei 'test_daten/dgm.xyz' als XYZ beendet
+01:47:09:   ->Suche nach doppelten Knoten gestartet
+01:47:09:     10 Knoten und keine Elemente vorhanden
+01:47:09:     0 Knoten gelöscht, 0 Elemente gelöscht
+01:47:09:   <-Suche nach doppelten Knoten beendet
+01:47:09: <-Laden des DGM in Datei 'test_daten/dgm.xyz' beendet
+01:47:09: ->Triangulierung der Knoten gestartet
+01:47:09:   ->Sortieren Knoten gestartet
+01:47:09:   <-Sortieren der Knoten beendet
+01:47:09:   ->Löschen des Knoten/Kanten-Index gestartet
+01:47:09:   <-Löschen des Knoten/Kanten-Index beendet
+01:47:09:   ->Suchen der Startkante gestartet
+01:47:09:     Kante: 7 - 1 als Startkante
+01:47:09:   <-Suchen der Startkante beendet
+01:47:09: <-Triangulierung der Knoten beendet
+01:47:09: ->Triangulierung der Knoten gestartet
+01:47:09:   ->Sortieren Knoten gestartet
+01:47:09:   <-Sortieren der Knoten beendet
+01:47:09:   ->Löschen des Knoten/Kanten-Index gestartet
+01:47:09:   <-Löschen des Knoten/Kanten-Index beendet
+01:47:09:   ->Suchen der Startkante gestartet
+01:47:09:     Kante: 1 - 4 als Startkante
+01:47:09:   <-Suchen der Startkante beendet
+01:47:09: <-Triangulierung der Knoten beendet
+01:47:09: ->Laden des DGM in Datei 'test_daten/dgm.shp' gestartet
+01:47:09:   ->Laden des DGM in Datei 'test_daten/dgm.shp' als SHP gestartet
+01:47:09:     ->Laden der Projektionsdatei zu 'test_daten/dgm.shp' gestartet
+01:47:09:       Projektionsdatei 'test_daten/dgm.PRJ' konnte nicht geöffnet werden
+01:47:09:     <-Laden der Projektionsdatei zu 'test_daten/dgm.shp' beendet
+01:47:09:     114 von 114 Objekten gelesen, 114 von 114 Knoten im Speicher
+01:47:09:   <-Laden des DGM in Datei 'test_daten/dgm.shp' als SHP beendet
+01:47:09:   ->Suche nach doppelten Knoten gestartet
+01:47:09:     114 Knoten und keine Elemente vorhanden
+01:47:09:     0 Knoten gelöscht, 0 Elemente gelöscht
+01:47:09:   <-Suche nach doppelten Knoten beendet
+01:47:09: <-Laden des DGM in Datei 'test_daten/dgm.shp' beendet
+01:47:09: ->Triangulierung der Knoten gestartet
+01:47:09:   ->Sortieren Knoten gestartet
+01:47:09:   <-Sortieren der Knoten beendet
+01:47:09:   ->Löschen des Knoten/Kanten-Index gestartet
+01:47:09:   <-Löschen des Knoten/Kanten-Index beendet
+01:47:09:   ->Suchen der Startkante gestartet
+01:47:09:     Kante: 59 - 58 als Startkante
+01:47:09:   <-Suchen der Startkante beendet
+01:47:09: <-Triangulierung der Knoten beendet
+01:47:09: ->Laden des DGM in Datei 'test_daten/dgm_gross.xyz' gestartet
+01:47:09:   ->Laden des DGM in Datei 'test_daten/dgm_gross.xyz' als XYZ gestartet
+01:47:09:     1126 Werte gelesen, 1126 von 1126 Knoten im Speicher
+01:47:09:   <-Laden des DGM in Datei 'test_daten/dgm_gross.xyz' als XYZ beendet
+01:47:09:   ->Suche nach doppelten Knoten gestartet
+01:47:09:     1126 Knoten und keine Elemente vorhanden
+01:47:09:     0 Knoten gelöscht, 0 Elemente gelöscht
+01:47:09:   <-Suche nach doppelten Knoten beendet
+01:47:09: <-Laden des DGM in Datei 'test_daten/dgm_gross.xyz' beendet
+01:47:09: ->Triangulierung der Knoten gestartet
+01:47:09:   ->Sortieren Knoten gestartet
+01:47:09:   <-Sortieren der Knoten beendet
+01:47:09:   ->Löschen des Knoten/Kanten-Index gestartet
+01:47:09:   <-Löschen des Knoten/Kanten-Index beendet
+01:47:09:   ->Suchen der Startkante gestartet
+01:47:09:     Kante: 1126 - 1125 als Startkante
+01:47:09:   <-Suchen der Startkante beendet
+01:47:09: <-Triangulierung der Knoten beendet
+01:47:09: ->Laden des DGM in Datei 'test_daten/dgm_ziemlich_gross.xyz' gestartet
+01:47:09:   ->Laden des DGM in Datei 'test_daten/dgm_ziemlich_gross.xyz' als XYZ gestartet
+01:47:09:     10000 Werte gelesen, 9999 von 9999 Knoten im Speicher
+01:47:09:     20000 Werte gelesen, 19999 von 19999 Knoten im Speicher
+01:47:09:     30000 Werte gelesen, 29999 von 29999 Knoten im Speicher
+01:47:09:     40000 Werte gelesen, 39999 von 39999 Knoten im Speicher
+01:47:09:     43332 Werte gelesen, 43332 von 43332 Knoten im Speicher
+01:47:09:   <-Laden des DGM in Datei 'test_daten/dgm_ziemlich_gross.xyz' als XYZ beendet
+01:47:09:   ->Suche nach doppelten Knoten gestartet
+01:47:09:     43332 Knoten und keine Elemente vorhanden
+01:47:09:     10000 von 43332 Knoten, 0 Knoten gelöscht
+01:47:09:     20000 von 43332 Knoten, 0 Knoten gelöscht
+01:47:09:     30000 von 43332 Knoten, 0 Knoten gelöscht
+01:47:09:     40000 von 43332 Knoten, 0 Knoten gelöscht
+01:47:09:     0 Knoten gelöscht, 0 Elemente gelöscht
+01:47:09:   <-Suche nach doppelten Knoten beendet
+01:47:09: <-Laden des DGM in Datei 'test_daten/dgm_ziemlich_gross.xyz' beendet
+01:47:09: ->Triangulierung der Knoten gestartet
+01:47:09:   ->Sortieren Knoten gestartet
+01:47:10:   <-Sortieren der Knoten beendet
+01:47:10:   ->Löschen des Knoten/Kanten-Index gestartet
+01:47:10:   <-Löschen des Knoten/Kanten-Index beendet
+01:47:10:   ->Suchen der Startkante gestartet
+01:47:10:     Kante: 41055 - 41054 als Startkante
+01:47:10:   <-Suchen der Startkante beendet
+01:47:11:   16289 von ca. 86664 Elementen erzeugt (31685 von 32581 Kanten)
+01:47:11:   1.01 sec -> 0.0001 sec pro Element, Dauer noch ca. 9 sec
+01:47:12:   57777 von ca. 86664 Elementen erzeugt (114419 von 115557 Kanten)
+01:47:12:   2.03 sec -> 0.0000 sec pro Element, Dauer noch ca. 2 sec
+01:47:13: <-Triangulierung der Knoten beendet
+01:47:13: ->Laden des DGM in Datei 'test_daten/dgm.grd' gestartet
+01:47:13:   ->Laden des DGM in Datei 'test_daten/dgm.grd' als GRD gestartet
+01:47:13:     10000 von 71250 Werten gelesen, 9999 von 9999 Knoten im Speicher
+01:47:13:     20000 von 71250 Werten gelesen, 19999 von 19999 Knoten im Speicher
+01:47:13:     30000 von 71250 Werten gelesen, 29999 von 29999 Knoten im Speicher
+01:47:13:     40000 von 71250 Werten gelesen, 39999 von 39999 Knoten im Speicher
+01:47:13:     50000 von 71250 Werten gelesen, 49999 von 49999 Knoten im Speicher
+01:47:13:     60000 von 71250 Werten gelesen, 59999 von 59999 Knoten im Speicher
+01:47:14:     70000 von 71250 Werten gelesen, 69999 von 69999 Knoten im Speicher
+01:47:14:     71250 von 71250 Werten gelesen, 71250 von 71250 Knoten im Speicher
+01:47:14:   <-Laden des DGM in Datei 'test_daten/dgm.grd' als GRD beendet
+01:47:14:   ->Suche nach doppelten Knoten gestartet
+01:47:14:     71250 Knoten und keine Elemente vorhanden
+01:47:14:     10000 von 71250 Knoten, 0 Knoten gelöscht
+01:47:14:     20000 von 71250 Knoten, 0 Knoten gelöscht
+01:47:14:     30000 von 71250 Knoten, 0 Knoten gelöscht
+01:47:14:     40000 von 71250 Knoten, 0 Knoten gelöscht
+01:47:14:     50000 von 71250 Knoten, 0 Knoten gelöscht
+01:47:14:     60000 von 71250 Knoten, 0 Knoten gelöscht
+01:47:14:     70000 von 71250 Knoten, 0 Knoten gelöscht
+01:47:14:     0 Knoten gelöscht, 0 Elemente gelöscht
+01:47:14:   <-Suche nach doppelten Knoten beendet
+01:47:14: <-Laden des DGM in Datei 'test_daten/dgm.grd' beendet
+01:47:14: ->Triangulierung der Knoten gestartet
+01:47:14:   ->Sortieren Knoten gestartet
+01:47:14:   <-Sortieren der Knoten beendet
+01:47:14:   ->Löschen des Knoten/Kanten-Index gestartet
+01:47:14:   <-Löschen des Knoten/Kanten-Index beendet
+01:47:14:   ->Suchen der Startkante gestartet
+01:47:14:     Kante: 1 - 286 als Startkante
+01:47:14:   <-Suchen der Startkante beendet
+01:47:15:   53582 von ca. 142500 Elementen erzeugt (106561 von 107167 Kanten)
+01:47:15:   1.01 sec -> 0.0000 sec pro Element, Dauer noch ca. 3 sec
+01:47:16:   109899 von ca. 142500 Elementen erzeugt (219134 von 219801 Kanten)
+01:47:16:   2.03 sec -> 0.0000 sec pro Element, Dauer noch ca. 1 sec
+01:47:17: <-Triangulierung der Knoten beendet
+01:47:18: ->Laden des DGM in Datei 'test_daten/dgm2.shp' gestartet
+01:47:18:   ->Laden des DGM in Datei 'test_daten/dgm2.shp' als SHP gestartet
+01:47:18:     ->Laden der Projektionsdatei zu 'test_daten/dgm2.shp' gestartet
+01:47:18:       Projektionsdatei 'test_daten/dgm2.PRJ' konnte nicht geöffnet werden
+01:47:18:     <-Laden der Projektionsdatei zu 'test_daten/dgm2.shp' beendet
+01:47:18:     10000 von 156249 Objekten gelesen, 9999 von 9999 Knoten im Speicher
+01:47:18:     20000 von 156249 Objekten gelesen, 19999 von 19999 Knoten im Speicher
+01:47:18:     30000 von 156249 Objekten gelesen, 29999 von 29999 Knoten im Speicher
+01:47:18:     40000 von 156249 Objekten gelesen, 39999 von 39999 Knoten im Speicher
+01:47:19:     50000 von 156249 Objekten gelesen, 49999 von 49999 Knoten im Speicher
+01:47:19:     60000 von 156249 Objekten gelesen, 59999 von 59999 Knoten im Speicher
+01:47:19:     70000 von 156249 Objekten gelesen, 69999 von 69999 Knoten im Speicher
+01:47:19:     80000 von 156249 Objekten gelesen, 79999 von 79999 Knoten im Speicher
+01:47:19:     90000 von 156249 Objekten gelesen, 89999 von 89999 Knoten im Speicher
+01:47:19:     100000 von 156249 Objekten gelesen, 99999 von 99999 Knoten im Speicher
+01:47:20:     110000 von 156249 Objekten gelesen, 109999 von 109999 Knoten im Speicher
+01:47:20:     120000 von 156249 Objekten gelesen, 119999 von 119999 Knoten im Speicher
+01:47:20:     130000 von 156249 Objekten gelesen, 129999 von 129999 Knoten im Speicher
+01:47:20:     140000 von 156249 Objekten gelesen, 139999 von 139999 Knoten im Speicher
+01:47:20:     150000 von 156249 Objekten gelesen, 149999 von 149999 Knoten im Speicher
+01:47:20:     156249 von 156249 Objekten gelesen, 156249 von 156249 Knoten im Speicher
+01:47:20:   <-Laden des DGM in Datei 'test_daten/dgm2.shp' als SHP beendet
+01:47:20:   ->Suche nach doppelten Knoten gestartet
+01:47:20:     156249 Knoten und keine Elemente vorhanden
+01:47:21:     10000 von 156249 Knoten, 0 Knoten gelöscht
+01:47:21:     20000 von 156249 Knoten, 0 Knoten gelöscht
+01:47:21:     30000 von 156249 Knoten, 0 Knoten gelöscht
+01:47:21:     40000 von 156249 Knoten, 0 Knoten gelöscht
+01:47:21:     50000 von 156249 Knoten, 0 Knoten gelöscht
+01:47:21:     60000 von 156249 Knoten, 0 Knoten gelöscht
+01:47:21:     70000 von 156249 Knoten, 0 Knoten gelöscht
+01:47:21:     80000 von 156249 Knoten, 0 Knoten gelöscht
+01:47:21:     90000 von 156249 Knoten, 0 Knoten gelöscht
+01:47:21:     100000 von 156249 Knoten, 0 Knoten gelöscht
+01:47:21:     110000 von 156249 Knoten, 0 Knoten gelöscht
+01:47:21:     120000 von 156249 Knoten, 0 Knoten gelöscht
+01:47:21:     130000 von 156249 Knoten, 0 Knoten gelöscht
+01:47:21:     140000 von 156249 Knoten, 0 Knoten gelöscht
+01:47:21:     150000 von 156249 Knoten, 0 Knoten gelöscht
+01:47:21:     0 Knoten gelöscht, 0 Elemente gelöscht
+01:47:21:   <-Suche nach doppelten Knoten beendet
+01:47:21: <-Laden des DGM in Datei 'test_daten/dgm2.shp' beendet
+01:47:21: ->Triangulierung der Knoten gestartet
+01:47:21:   ->Sortieren Knoten gestartet
+01:47:21:   <-Sortieren der Knoten beendet
+01:47:21:   ->Löschen des Knoten/Kanten-Index gestartet
+01:47:21:   <-Löschen des Knoten/Kanten-Index beendet
+01:47:21:   ->Suchen der Startkante gestartet
+01:47:21:     Kante: 156260 - 44106 als Startkante
+01:47:21:   <-Suchen der Startkante beendet
+01:47:22:   21561 von ca. 312538 Elementen erzeugt (42071 von 43125 Kanten)
+01:47:22:   1.01 sec -> 0.0000 sec pro Element, Dauer noch ca. 27 sec
+01:47:23:   46659 von ca. 312538 Elementen erzeugt (91768 von 93321 Kanten)
+01:47:23:   2.08 sec -> 0.0000 sec pro Element, Dauer noch ca. 24 sec
+01:47:24:   71977 von ca. 312538 Elementen erzeugt (142030 von 143957 Kanten)
+01:47:24:   3.12 sec -> 0.0000 sec pro Element, Dauer noch ca. 21 sec
+01:47:25:   114679 von ca. 312538 Elementen erzeugt (227356 von 229361 Kanten)
+01:47:25:   4.14 sec -> 0.0000 sec pro Element, Dauer noch ca. 14 sec
+01:47:26:   157597 von ca. 312538 Elementen erzeugt (313225 von 315197 Kanten)
+01:47:26:   5.16 sec -> 0.0000 sec pro Element, Dauer noch ca. 10 sec
+01:47:27:   204655 von ca. 312538 Elementen erzeugt (407420 von 409313 Kanten)
+01:47:27:   6.17 sec -> 0.0000 sec pro Element, Dauer noch ca. 7 sec
+01:47:28:   249505 von ca. 312538 Elementen erzeugt (497362 von 499013 Kanten)
+01:47:28:   7.19 sec -> 0.0000 sec pro Element, Dauer noch ca. 4 sec
+01:47:29:   285462 von ca. 312538 Elementen erzeugt (569509 von 570927 Kanten)
+01:47:29:   8.20 sec -> 0.0000 sec pro Element, Dauer noch ca. 2 sec
+01:47:30:   302948 von ca. 312538 Elementen erzeugt (604787 von 605899 Kanten)
+01:47:30:   9.22 sec -> 0.0000 sec pro Element, Dauer noch ca. 1 sec
+01:47:31:   311322 von ca. 312538 Elementen erzeugt (622261 von 622647 Kanten)
+01:47:31:   10.23 sec -> 0.0000 sec pro Element, Dauer noch ca. 0 sec
+01:47:32:   312323 von ca. 312538 Elementen erzeugt (624645 von 624649 Kanten)
+01:47:32:   11.25 sec -> 0.0000 sec pro Element, Dauer noch ca. 0 sec
+01:47:33:   312411 von ca. 312538 Elementen erzeugt (624821 von 624825 Kanten)
+01:47:33:   12.27 sec -> 0.0000 sec pro Element, Dauer noch ca. 0 sec
+01:47:34:   312493 von ca. 312538 Elementen erzeugt (624985 von 624989 Kanten)
+01:47:34:   13.28 sec -> 0.0000 sec pro Element, Dauer noch ca. 0 sec
+01:47:35: <-Triangulierung der Knoten beendet

Modified: trunk/src/Makefile
===================================================================
--- trunk/src/Makefile	2006-05-26 05:12:48 UTC (rev 49)
+++ trunk/src/Makefile	2006-06-04 23:49:03 UTC (rev 50)
@@ -5,14 +5,14 @@
 .SUFFIXES: .cpp
 
 CC=gcc
-CPPFLAGS=-O2
+CPPFLAGS=-Wall -O2 -g
 LDFLAGS=
 LIBS=-lstdc++
 
 PROJECT=wsplgen.exe
 TEST=test.exe
-OBJFILES=tools.o xy.o tri.o parameter.o file.o shape.o
-TESTOBJFILES= test_profil.o test_tools.o test_xy.o test_tri.o test_file.o test_nodes.o
+OBJFILES=tools.o xy.o tri.o parameter.o file.o shape.o quadtree.o
+TESTOBJFILES= test_profil.o test_tools.o test_xy.o test_tri.o test_file.o test_nodes.o test_quadtree.o
 
 all: ../bin/test.exe ../bin/wsplgen.exe
 
@@ -22,11 +22,11 @@
 ../bin/wsplgen.exe: wsplgen.o $(OBJFILES)
 	$(CC) $(LDFLAGS) -o ../bin/wsplgen.exe wsplgen.o $(OBJFILES) $(LIBS)
 
-%.o: %.cpp %.h
-	$(CC) -Wall -c $(CPPFLAGS) $*.cpp 
+%.o: %.cpp %.h Makefile
+	$(CC) -c $(CPPFLAGS) $*.cpp 
 
-%.o: %.cpp
-	$(CC) -Wall -c $(CPPFLAGS) $*.cpp 
+# %.o: %.cpp  Makefile
+# 	$(CC) -c $(CPPFLAGS) $*.cpp 
 
 clean:
 	rm -f *.o

Modified: trunk/src/file.cpp
===================================================================
--- trunk/src/file.cpp	2006-05-26 05:12:48 UTC (rev 49)
+++ trunk/src/file.cpp	2006-06-04 23:49:03 UTC (rev 50)
@@ -207,20 +207,20 @@
 
 			if (Z < 1e30 && Z > -1e30)
 			{
-				X = (long)(X * 100.0 + 0.5) / 100.0;
-				Y = (long)(Y * 100.0 + 0.5) / 100.0;
-				Z = (long)(Z * 100.0 + 0.5) / 100.0;
+				long XL = (long)(X * 100.0 + 0.5);
+				long YL = (long)(Y * 100.0 + 0.5);
+				int ZI = (long)(Z * 100.0 + 0.5);
 
 				TInsideTyp InsideTyp = INSIDE;
-				if (XyList) InsideTyp = XyList->IsInsideXYList(X, Y);
+				if (XyList) InsideTyp = XyList->IsInsideXYList(XL, YL);
 				if (InsideTyp == INSIDE || InsideTyp == ON_LINE)
 				{
 					AnzKnoten++;
 
 					if (AnzKnoten < MaxNodesPerSlice)
 					{
-						TNode *Node = new TNode(AnzWerte, X, Y, Z);
-						NodeList->push_back(Node);
+						TNode *Node = new TNode(AnzWerte, XL, YL, ZI);
+						NodeList->Add(Node);
 					}
 				}
 			}
@@ -488,20 +488,20 @@
 			write_fortschritt("%d von %d Werten gelesen, %d von %d Knoten im Speicher\n", AnzWerte, MaxWerte, NodeList->size(), AnzKnoten);
 		}
 
-		X = (long)(X * 100 + 0.5) / 100.0;
-		Y = (long)(Y * 100 + 0.5) / 100.0;
-		Z = (long)(Z * 100 + 0.5) / 100.0;
+		long XL = (long)(X * 100 + 0.5);
+		long YL = (long)(Y * 100 + 0.5);
+		int ZI = (long)(Z * 100 + 0.5);
 
 		TInsideTyp InsideTyp = INSIDE;
-		if (XyList) InsideTyp = XyList->IsInsideXYList(X, Y);
+		if (XyList) InsideTyp = XyList->IsInsideXYList(XL, YL);
 		if (InsideTyp == INSIDE || InsideTyp == ON_LINE)
 		{
 			AnzKnoten++;
 
 			if (AnzKnoten < MaxNodesPerSlice)
 			{
-				TNode *Node = new TNode(AnzKnoten, X, Y, Z);
-				NodeList->push_back(Node);
+				TNode *Node = new TNode(AnzKnoten, XL, YL, ZI);
+				NodeList->Add(Node);
 			}
 		}
 	}
@@ -541,9 +541,9 @@
 	{
 		AnzZeilen ++;
 
-		double X=0.0;
-		double Y=0.0;
-		double Z=0.0;
+		double X = 0.0;
+		double Y = 0.0;
+		double Z = 0.0;
 
 		bool Leer = true;
 		for (unsigned int i=0; i<strlen(line); i++)
@@ -566,20 +566,20 @@
 			write_fortschritt("%d Werte gelesen, %d von %d Knoten im Speicher\n", AnzWerte, NodeList->size(), AnzKnoten);
 		}
 
-		X = (long)(X * 100) / 100.0;
-		Y = (long)(Y * 100) / 100.0;
-		Z = (long)(Z * 100) / 100.0;
+		long XL = (long)(X * 100 + 0.5);
+		long YL = (long)(Y * 100 + 0.5);
+		int ZI = (long)(Z * 100 + 0.5);
 
 		TInsideTyp InsideTyp = INSIDE;
-		if (XyList) InsideTyp = XyList->IsInsideXYList(X, Y);
+		if (XyList) InsideTyp = XyList->IsInsideXYList(XL, YL);
 		if (InsideTyp == INSIDE || InsideTyp == ON_LINE)
 		{
 			AnzKnoten++;
 
 			if (AnzKnoten < MaxNodesPerSlice)
 			{
-				TNode *Node = new TNode(AnzKnoten, X, Y, Z);
-				NodeList->push_back(Node);
+				TNode *Node = new TNode(AnzKnoten, XL, YL, ZI);
+				NodeList->Add(Node);
 			}
 		}
 	}
@@ -747,9 +747,9 @@
 
 			if (ZFieldIndex >= 0)	Z = DBFReadDoubleAttribute(hDBF, i, ZFieldIndex);
 
-			X = (long)(X * 100) / 100.0;
-			Y = (long)(Y * 100) / 100.0;
-			Z = (long)(Z * 100) / 100.0;
+			long XL = (long)(X * 100 + 0.5);
+			long YL = (long)(Y * 100 + 0.5);
+			int ZI = (long)(Z * 100 + 0.5);
 
 			AnzWerte++;
 
@@ -759,15 +759,15 @@
 			}
 
 			TInsideTyp InsideTyp = INSIDE;
-			if (XyList) InsideTyp = XyList->IsInsideXYList(X, Y);
+			if (XyList) InsideTyp = XyList->IsInsideXYList(XL, YL);
 			if (InsideTyp == INSIDE || InsideTyp == ON_LINE)
 			{
 				AnzKnoten++;
 
 				if (AnzKnoten < MaxNodesPerSlice)
 				{
-					TNode* Node = new TNode(AnzKnoten, X, Y, Z);
-					NodeList->push_back(Node);
+					TNode* Node = new TNode(AnzKnoten, XL, YL, ZI);
+					NodeList->Add(Node);
 				}
 			}
 		}
@@ -838,20 +838,20 @@
 				write_error(2297, "Konnte keine 3 Werte in der Datei '%s' in der Zeile %d lesen\n", FileName.c_str(), AnzZeilen);
 			}
 
-			X = (long)(X * 100) / 100.0;
-			Y = (long)(Y * 100) / 100.0;
-			Z = (long)(Z * 100) / 100.0;
+			long XL = (long)(X * 100 + 0.5);
+			long YL = (long)(Y * 100 + 0.5);
+			int ZI = (long)(Z * 100 + 0.5);
 
 			TInsideTyp InsideTyp = INSIDE;
-			if (XyList) InsideTyp = XyList->IsInsideXYList(X, Y);
+			if (XyList) InsideTyp = XyList->IsInsideXYList(XL, YL);
 			if (InsideTyp == INSIDE || InsideTyp == ON_LINE)
 			{
 				AnzKnoten++;
 
 				if (AnzKnoten < MaxNodesPerSlice)
 				{
-					TNode *Node = new TNode(Nr, X, Y, Z);
-					NodeList->push_back(Node);
+					TNode *Node = new TNode(Nr, XL, YL, ZI);
+					NodeList->Add(Node);
 				}
 			}
 		}
@@ -1151,9 +1151,9 @@
 				double X = psCShape->padfX[j];
 				double Y = psCShape->padfY[j];
 
-				X = (long)(X * 100.0 + 0.5) / 100.0;
-				Y = (long)(Y * 100.0 + 0.5) / 100.0;
-				Profil->AddPoint(X, Y);
+				long XL = (long)(X * 100.0 + 0.5);
+				long YL = (long)(Y * 100.0 + 0.5);
+				Profil->AddPoint(XL, YL);
 			}
 
 			SHPDestroyObject(psCShape);
@@ -1259,8 +1259,8 @@
 			TProfil* ExChangeProfil = new TProfil(NachProfil->Gewaesser, NachProfil->Station);
 			for (TPointList::reverse_iterator j = NachProfil->PointList->rbegin(); j != NachProfil->PointList->rend(); j++)
 			{
-				double X = (*j)->X;
-				double Y = (*j)->Y;
+				long X = (*j)->X;
+				long Y = (*j)->Y;
 
 				ExChangeProfil->AddPoint(X, Y);
 			}
@@ -1454,7 +1454,7 @@
 		}
 
 		// Der Wasserstand muss so hoch sein, damit später auch alle Knoten der Bruckkante erzeugt werden können
-		TProfil* Linie = new TProfil(Typ, i, 9999.9);
+		TProfil* Linie = new TProfil(Typ, i, 999999);
 
 		if (Typ == "SPERRE")		SperrenList->insert(Linie);
 		else if (Typ == "GRABEN")	GrabenList->insert(Linie);
@@ -1466,9 +1466,9 @@
 			double X = psCShape->padfX[j];
 			double Y = psCShape->padfY[j];
 
-			X = (long)(X * 100.0 + 0.5) / 100.0;
-			Y = (long)(Y * 100.0 + 0.5) / 100.0;
-			Linie->AddPoint(X, Y);
+			long XL = (long)(X * 100.0 + 0.5);
+			long YL = (long)(Y * 100.0 + 0.5);
+			Linie->AddPoint(XL, YL);
 		}
 
 		SHPDestroyObject(psCShape);
@@ -1549,7 +1549,7 @@
 
 		std::string Gewaesser = "";
 		double		StationD = 0.0;
-		double		Wsp = 0.0;
+		double		WspD = 0.0;
 
 		int AktCol = 0;
 		int ColOk = 0;
@@ -1597,7 +1597,7 @@
 				}
 				if (AktCol == WspCol)
 				{
-					if (1 != sscanf(Col, "%lf", &Wsp))
+					if (1 != sscanf(Col, "%lf", &WspD))
 					{
 						write_error(2216, "Konnte keine Zahl in Spalte %d erkennen\n", AktCol);
 					}
@@ -1618,6 +1618,9 @@
 		int Station = (int)(StationD * 10000.0 + 0.5);
 		if (StationD < 0)	Station = (int)(StationD * 10000.0 - 0.5);
 
+		int Wsp = (int)(WspD * 100.0 + 0.5);
+		if (WspD < 0)	Wsp = (int)(WspD * 100.0 - 0.5);
+
 		TProfil* Profil = new TProfil(Gewaesser, Station, Wsp);
 
 		ProfilList->insert(Profil);
@@ -1821,14 +1824,14 @@
 	for (int i = 0; i<RecordCount; i++)
 	{
 		std::string Gewaesser = DBFReadStringAttribute(hDBF, i, GewFieldIndex);
-		double S = DBFReadDoubleAttribute(hDBF, i, StationFieldIndex);
-		double W = DBFReadDoubleAttribute(hDBF, i, WspFieldIndex);
+		double StationD = DBFReadDoubleAttribute(hDBF, i, StationFieldIndex);
+		double WspD = DBFReadDoubleAttribute(hDBF, i, WspFieldIndex);
 
-		int Station = (int)(S * 10000.0 + 0.5);
-		if (S < 0)	Station = (int)(S * 10000.0 - 0.5);
+		int Station = (int)(StationD * 10000.0 + 0.5);
+		if (StationD) Station = (int)(StationD * 10000.0 - 0.5);
 
-		double Wsp = (int)(W * 100.0 + 0.5) / 100.0;
-		if (Wsp < 0)	Wsp = (int)(W * 100.0 - 0.5) / 100.0;
+		int Wsp = (int)(WspD * 100.0 + 0.5);
+		if (WspD < 0)	Wsp = (int)(WspD * 100.0 - 0.5);
 
 		if (ProfilList->Find(Gewaesser, Station))
 		{
@@ -2006,9 +2009,9 @@
 			double X = psCShape->padfX[j];
 			double Y = psCShape->padfY[j];
 
-			X = (long)(X * 100.0 + 0.5) / 100.0;
-			Y = (long)(Y * 100.0 + 0.5) / 100.0;
-			GewaesserAchse->AddPoint(X, Y);
+			long XL = (long)(X * 100.0 + 0.5);
+			long YL = (long)(Y * 100.0 + 0.5);
+			GewaesserAchse->AddPoint(XL, YL);
 		}
 
 		SHPDestroyObject(psCShape);
@@ -2130,7 +2133,7 @@
 
 		TNode *Node = (*NodeList)[i];
 
-		fprintf(fh, "ND %6d %15.9e %15.9e %15.9e\n", Node->Nr, Node->X, Node->Y, Node->Z);
+		fprintf(fh, "ND %6d %15.9e %15.9e %15.9e\n", Node->Nr, Node->X / 100.0, Node->Y / 100.0, Node->Z / 100.0);
 	}
 
 	write_fortschritt("%d von %d Knoten gespeichert\n", NodeList->size(), NodeList->size());
@@ -2212,7 +2215,7 @@
 
 		TNode *Node = (*NodeList)[i];
 
-		fprintf(fh, "%15.9f\n", Node->Wsp);
+		fprintf(fh, "%15.9f\n", Node->Wsp / 100.0);
 	}
 
 	write_fortschritt("%d von %d Wasserstände gespeichert\n", NodeList->size(), NodeList->size());
@@ -2264,8 +2267,8 @@
 		TProfil* Profil = *i;
 
 		std::string Gewaesser = Profil->Gewaesser;
-		double		Station = Profil->Station;
-		double		Wsp = Profil->Wsp;
+		double		Station = Profil->Station / 10000.0;
+		double		Wsp = Profil->Wsp / 100;
 
 		double	*x = (double *)malloc(sizeof(double) * (Profil->PointList->size() + 1));
 		double 	*y = (double *)malloc(sizeof(double) * (Profil->PointList->size() + 1));
@@ -2276,8 +2279,8 @@
 		{
 			TPoint* Point = *j;
 
-			double X = Point->X;
-			double Y = Point->Y;
+			double X = Point->X / 100.0;
+			double Y = Point->Y / 100.0;
 
 			x[AnzPoint] = X;
 			y[AnzPoint] = Y;
@@ -2358,8 +2361,8 @@
 	{
 		TXY* Xy = *i;
 
-		double X = Xy->X;
-		double Y = Xy->Y;
+		double X = Xy->X / 100.0;
+		double Y = Xy->Y / 100.0;
 
 		x[AnzPoint] = X;
 		y[AnzPoint] = Y;
@@ -2376,8 +2379,8 @@
 	TXYList::iterator i = XyList->begin();
 	TXY* Xy = *i;
 
-	double X = Xy->X;
-	double Y = Xy->Y;
+	double X = Xy->X / 100.0;
+	double Y = Xy->Y / 100.0;
 
 	x[AnzPoint] = X;
 	y[AnzPoint] = Y;
@@ -2483,8 +2486,8 @@
 
 			TXY *Xy = *First;
 
-			double	X = Xy->X;
-			double	Y = Xy->Y;
+			long	X = Xy->X;
+			long	Y = Xy->Y;
 
 			bool IsInnerRing = false;
 			for (TErgebnisPolygonList::iterator k = ErgebnisPolygonList->begin(); k != ErgebnisPolygonList->end(); k++)
@@ -2532,8 +2535,8 @@
 			{
 				TXY *Xy = *i;
 
-				double X = Xy->X;
-				double Y = Xy->Y;
+				double X = Xy->X / 100.0;
+				double Y = Xy->Y / 100.0;
 
 				x[AnzPolyPoints] = X;
 				y[AnzPolyPoints] = Y;
@@ -2607,13 +2610,13 @@
 		double Depth = 0.0;
 		double Topo = 0.0;
 
-		double Z1 = Node1->Z;
-		double Z2 = Node2->Z;
-		double Z3 = Node3->Z;
+		double Z1 = Node1->Z / 100.0;
+		double Z2 = Node2->Z / 100.0;
+		double Z3 = Node3->Z / 100.0;
 
-		double W1 = Node1->Wsp;
-		double W2 = Node2->Wsp;
-		double W3 = Node3->Wsp;
+		double W1 = Node1->Wsp / 100.0;
+		double W2 = Node2->Wsp / 100.0;
+		double W3 = Node3->Wsp / 100.0;
 
 		if (W1 <= Z1)	W1 = 0.00;
 		if (W2 <= Z2)	W2 = 0.00;
@@ -2662,27 +2665,27 @@
 
 		if (win > 180)
 		{
-			x[0] = Node1->X;
-			x[1] = Node2->X;
-			x[2] = Node3->X;
-			x[3] = Node1->X;
+			x[0] = Node1->X / 100.0;
+			x[1] = Node2->X / 100.0;
+			x[2] = Node3->X / 100.0;
+			x[3] = Node1->X / 100.0;
 
-			y[0] = Node1->Y;
-			y[1] = Node2->Y;
-			y[2] = Node3->Y;
-			y[3] = Node1->Y;
+			y[0] = Node1->Y / 100.0;
+			y[1] = Node2->Y / 100.0;
+			y[2] = Node3->Y / 100.0;
+			y[3] = Node1->Y / 100.0;
 		}
 		else
 		{
-			x[0] = Node1->X;
-			x[1] = Node3->X;
-			x[2] = Node2->X;
-			x[3] = Node1->X;
+			x[0] = Node1->X / 100.0;
+			x[1] = Node3->X / 100.0;
+			x[2] = Node2->X / 100.0;
+			x[3] = Node1->X / 100.0;
 
-			y[0] = Node1->Y;
-			y[1] = Node3->Y;
-			y[2] = Node2->Y;
-			y[3] = Node1->Y;
+			y[0] = Node1->Y / 100.0;
+			y[1] = Node3->Y / 100.0;
+			y[2] = Node2->Y / 100.0;
+			y[3] = Node1->Y / 100.0;
 		}
 
 		z[0] = 0.0;
@@ -2819,17 +2822,17 @@
 
 		TNode *Node = *i;
 
-		double X = Node->X;
-		double Y = Node->Y;
+		double X = Node->X / 100.0;
+		double Y = Node->Y / 100.0;
 		double Z = 0.0;
 
 		SHPObject *psShape = SHPCreateSimpleObject(SHPT_POINT, 1, &X, &Y, &Z);
 		SHPWriteObject(SHPHandle, -1, psShape);
 		SHPDestroyObject(psShape);
 
-		DBFWriteDoubleAttribute(DBFHandle, AnzNodes, 0, Node->Z);
-		DBFWriteDoubleAttribute(DBFHandle, AnzNodes, 1, Node->Wsp);
-		DBFWriteDoubleAttribute(DBFHandle, AnzNodes, 2, Node->Wsp - Node->Z);
+		DBFWriteDoubleAttribute(DBFHandle, AnzNodes, 0, Node->Z / 100.0);
+		DBFWriteDoubleAttribute(DBFHandle, AnzNodes, 1, Node->Wsp / 100.0);
+		DBFWriteDoubleAttribute(DBFHandle, AnzNodes, 2, Node->Wsp / 100.0 - Node->Z / 100.0);
 
 		AnzNodes++;
 	}
@@ -2885,11 +2888,11 @@
 	z[1] = 0.0;
 
 	int Count = 0;
-	for (TEdgeListNrSorted::iterator i = EdgeList->EdgeListNrSorted.begin(); i != EdgeList->EdgeListNrSorted.end(); i++)
+	for (TEdgeVector::iterator i = EdgeList->EdgeVector.begin(); i != EdgeList->EdgeVector.end(); i++)
 	{
 		if (DebugLevel >= 9 || (DebugLevel >= 1 && Count % 5000 == 0) || (Count > 0 && Count % 50000 == 0))
 		{
-			write_fortschritt("%d von %d Kanten gespeichert\n", Count, EdgeList->EdgeListNrSorted.size());
+			write_fortschritt("%d von %d Kanten gespeichert\n", Count, EdgeList->EdgeVector.size());
 		}
 
 		TEdge* Edge = *i;
@@ -2900,10 +2903,10 @@
 		int Nr1 = Node1->Nr;
 		int Nr2 = Node2->Nr;
 
-		x[0] = Node1->X;
-		y[0] = Node1->Y;
-		x[1] = Node2->X;
-		y[1] = Node2->Y;
+		x[0] = Node1->X / 100.0;
+		y[0] = Node1->Y / 100.0;
+		x[1] = Node2->X / 100.0;
+		y[1] = Node2->Y / 100.0;
 
 		SHPObject *psShape = SHPCreateSimpleObject(SHPT_ARC, 2, x, y, z);
 		SHPWriteObject(SHPHandle, -1, psShape);
@@ -2916,7 +2919,7 @@
 
 		Count++;
 	}
-	write_fortschritt("%d von %d Kanten gespeichert\n", Count, EdgeList->EdgeListNrSorted.size());
+	write_fortschritt("%d von %d Kanten gespeichert\n", Count, EdgeList->EdgeVector.size());
 
 	DBFClose(DBFHandle);
 	SHPClose(SHPHandle);

Modified: trunk/src/parameter.cpp
===================================================================
--- trunk/src/parameter.cpp	2006-05-26 05:12:48 UTC (rev 49)
+++ trunk/src/parameter.cpp	2006-06-04 23:49:03 UTC (rev 50)
@@ -29,11 +29,11 @@
 
 	IsSetDelta = false;
 	IsSetVon = false;
-	Von = 0.0;
+	Von = 0;
 	IsSetBis = false;
-	Bis = 0.0;
+	Bis = 0;
 	IsSetDiff = false;
-	Diff = 0.0;
+	Diff = 0;
 
 	IsSetGel = false;
 	Sperre = true;
@@ -262,30 +262,30 @@
 			if (1 == sscanf(Parameter.substr(7).c_str(), "%lf", &D))
 			{
 				IsSetVon = true;
-				Von = D;
+				Von = (int)(D * 100.0 + 0.5);
 			}
 
 			if (1 == sscanf(Parameter.substr(FirstKommaPos + 1).c_str(), "%lf", &D))
 			{
 				IsSetBis = true;
-				Bis = D;
+				Bis = (int)(D * 100.0 + 0.5);
 			}
 
 			if (1 == sscanf(Parameter.substr(SecondKommaPos + 1).c_str(), "%lf", &D))
 			{
 				IsSetDiff = true;
-				Diff = D;
+				Diff = (int)(D * 100.0 + 0.5);
 			}
 
 			IsSetDelta = true;
 
-			if (IsSetVon && IsSetBis && IsSetDiff)	write_fortschritt("Delta: Von = %.2f Bis = %.2f Diff = %.2f\n", Von, Bis, Diff);
-			else if (IsSetVon && IsSetBis)			write_fortschritt("Delta: Von = %.2f Bis = %.2f Diff = <default>\n", Von, Bis);
-			else if (IsSetVon && IsSetDiff)			write_fortschritt("Delta: Von = %.2f Bis = <default> Diff = %.2f\n", Von, Diff);
-			else if (IsSetBis && IsSetBis)			write_fortschritt("Delta: Von = <default> Bis = %.2f Diff = %.2f\n", Bis, Diff);
-			else if (IsSetVon)						write_fortschritt("Delta: Von = %.2f Bis = <default> Diff = <default>\n", Von);
-			else if (IsSetBis)						write_fortschritt("Delta: Von = <default> Bis = %.2f Diff = <default>\n", Bis);
-			else if (IsSetDiff)						write_fortschritt("Delta: Von = <default> Bis = <default> Diff = %.2f\n", Diff);
+			if (IsSetVon && IsSetBis && IsSetDiff)	write_fortschritt("Delta: Von = %.2f Bis = %.2f Diff = %.2f\n", Von / 100.0, Bis / 100.0, Diff / 100.0);
+			else if (IsSetVon && IsSetBis)			write_fortschritt("Delta: Von = %.2f Bis = %.2f Diff = <default>\n", Von / 100.0, Bis / 100.0);
+			else if (IsSetVon && IsSetDiff)			write_fortschritt("Delta: Von = %.2f Bis = <default> Diff = %.2f\n", Von / 100.0, Diff / 100.0);
+			else if (IsSetBis && IsSetBis)			write_fortschritt("Delta: Von = <default> Bis = %.2f Diff = %.2f\n", Bis / 100.0, Diff / 100.0);
+			else if (IsSetVon)						write_fortschritt("Delta: Von = %.2f Bis = <default> Diff = <default>\n", Von / 100.0);
+			else if (IsSetBis)						write_fortschritt("Delta: Von = <default> Bis = %.2f Diff = <default>\n", Bis / 100.0);
+			else if (IsSetDiff)						write_fortschritt("Delta: Von = <default> Bis = <default> Diff = %.2f\n", Diff / 100.0);
 			else									write_fortschritt("Delta: Von = <default> Bis = <default> Diff = <default>\n");
 		}
 		else if (Parameter.substr(0, 4) == "-GEL" || Parameter.substr(0, 4) == "-gel")

Modified: trunk/src/parameter.h
===================================================================
--- trunk/src/parameter.h	2006-05-26 05:12:48 UTC (rev 49)
+++ trunk/src/parameter.h	2006-06-04 23:49:03 UTC (rev 50)
@@ -32,11 +32,11 @@
 
 		bool		IsSetDelta;
 		bool		IsSetVon;
-		double		Von;
+		int			Von;
 		bool		IsSetBis;
-		double		Bis;
+		int			Bis;
 		bool		IsSetDiff;
-		double		Diff;
+		int			Diff;
 
 		bool		IsSetGel;
 		bool		Sperre;

Added: trunk/src/quadtree.cpp
===================================================================
--- trunk/src/quadtree.cpp	2006-05-26 05:12:48 UTC (rev 49)
+++ trunk/src/quadtree.cpp	2006-06-04 23:49:03 UTC (rev 50)
@@ -0,0 +1,209 @@
+//
+// $Id: quadtree.cpp 49 2006-05-26 05:12:48Z mrchip $
+//
+// Copyright (C) 2005 STADT-LAND-FLUSS INGENIEURDIENSTE GmbH
+//
+// Authors:
+// Ulrich Kiel <u.kiel at S-L-F.de>
+//
+// This program is free software under the GPL (>=v2)
+// Read the file COPYING coming with WSPLGEN for details.
+//
+
+#ifdef __BORLANDC__
+#pragma hdrstop
+#endif
+
+//---------------------------------------------------------------------
+#include "xy.h"
+#include "tools.h"
+#include "quadtree.h"
+
+//---------------------------------------------------------------------
+// TQuadTree
+//---------------------------------------------------------------------
+
+//---------------------------------------------------------------------
+template <class TXyList, class TXy> TQuadTree<TXyList, TXy>::TQuadTree(void)
+{
+	NW = 0;
+	NE = 0;
+	SW = 0;
+	SE = 0;
+	Xy = 0;
+}
+
+//---------------------------------------------------------------------
+template <class TXyList, class TXy> TQuadTree<TXyList, TXy>::TQuadTree(TXy *xy)
+{
+	NW = 0;
+	NE = 0;
+	SW = 0;
+	SE = 0;
+	Xy = xy;
+}
+
+//---------------------------------------------------------------------
+template <class TXyList, class TXy> TQuadTree<TXyList, TXy>::~TQuadTree(void)
+{
+	if (NW)	delete NW;
+	if (NE)	delete NE;
+	if (SW)	delete SW;
+	if (SE)	delete SE;
+
+	Xy = 0;
+}
+
+//---------------------------------------------------------------------
+template <class TXyList, class TXy> int TQuadTree<TXyList, TXy>::ListAll(void)
+{
+	int Summe = 0;
+
+	if (Xy)
+	{
+		write_fortschritt("%.2f,%.2f\n", Xy->X / 100.0, Xy->Y / 100.0);
+		Summe = Summe + 1;
+	}
+
+	if (NW)	Summe = Summe + NW->ListAll();
+	if (NE)	Summe = Summe + NE->ListAll();
+	if (SE)	Summe = Summe + SE->ListAll();
+	if (SW)	Summe = Summe + SW->ListAll();
+
+	return (Summe);
+}
+
+//---------------------------------------------------------------------
+template <class TXyList, class TXy> bool TQuadTree<TXyList, TXy>::Insert(long XMin, long XMax, long YMin, long YMax, TXy *xy)
+{
+	if (0 == Xy)
+	{
+		Xy = xy;
+		return(true);
+	}
+
+	if (Xy->X == xy->X && Xy->Y == xy->Y)
+	{
+		return (false);
+	}
+
+	long XCenter = (XMin + XMax) >> 1;
+	long YCenter = (YMin + YMax) >> 1;
+
+	if (xy->X < XCenter)
+	{
+		if (xy->Y < YCenter)
+		{
+			if (SW)	return (SW->Insert(XMin, XCenter, YMin, YCenter, xy));
+			else   	SW = new TQuadTree(xy);
+		}
+		else
+		{
+			if (NW)	return (NW->Insert(XMin, XCenter, YCenter, YMax, xy));
+			else   	NW = new TQuadTree(xy);
+		}
+	}
+	else
+	{
+		if (xy->Y < YCenter)
+		{
+			if (SE)	return (SE->Insert(XCenter, XMax, YMin, YCenter, xy));
+			else   	SE = new TQuadTree(xy);
+		}
+		else
+		{
+			if (NE)	return (NE->Insert(XCenter, XMax, YCenter, YMax, xy));
+			else   	NE = new TQuadTree(xy);
+		}
+	}
+
+	return (true);
+}
+
+//---------------------------------------------------------------------
+template <class TXyList, class TXy> TXy* TQuadTree<TXyList, TXy>::Search(long X, long Y, long XMin, long XMax, long YMin, long YMax)
+{
+	if (0 == Xy)	return(0);
+
+	if (X == Xy->X && Y == Xy->Y)
+	{
+		return (Xy);
+	}
+
+	long XCenter = (XMin + XMax) >> 1;
+	long YCenter = (YMin + YMax) >> 1;
+
+	if (X < XCenter)
+	{
+		if (Y < YCenter)
+		{
+			if (SW)	return(SW->Search(X, Y, XMin, XCenter, YMin, YCenter));
+			else	return (0);
+		}
+		else
+		{
+			if (NW)	return(NW->Search(X, Y, XMin, XCenter, YCenter, YMax));
+			else	return (0);
+		}
+	}
+	else
+	{
+		if (Y < YCenter)
+		{
+			if (SE)	return(SE->Search(X, Y, XCenter, XMax, YMin, YCenter));
+			else	return (0);
+		}
+		else
+		{
+			if (NE)	return(NE->Search(X, Y, XCenter, XMax, YCenter, YMax));
+			else	return (0);
+		}
+	}
+}
+
+//---------------------------------------------------------------------
+template <class TXyList, class TXy> int TQuadTree<TXyList, TXy>::SearchAll(double X, double Y, double R, TXyList* FoundXyList, long XMin, long XMax, long YMin, long YMax)
+{
+	if (0 == Xy)	return(0);
+
+	int Summe = 0;
+
+	double Dx = Xy->X - X;
+	double Dy = Xy->Y - Y;
+
+	if (Dx * Dx + Dy * Dy <= R * R)
+	{
+		Summe = Summe + 1;
+		FoundXyList->push_back(Xy);
+	}
+
+	long XCenter = (XMin + XMax) >> 1;
+	long YCenter = (YMin + YMax) >> 1;
+
+	if (X - R < XCenter && Y - R < YCenter)
+	{
+		if (SW)	Summe = Summe + SW->SearchAll(X, Y, R, FoundXyList, XMin, XCenter, YMin, YCenter);
+	}
+
+	if (X - R < XCenter && Y + R >= YCenter)
+	{
+		if (NW)	Summe = Summe + NW->SearchAll(X, Y, R, FoundXyList, XMin, XCenter, YCenter, YMax);
+	}
+
+	if (X + R >= XCenter && Y - R < YCenter)
+	{
+		if (SE)	Summe = Summe + SE->SearchAll(X, Y, R, FoundXyList, XCenter, XMax, YMin, YCenter);
+	}
+
+	if (X + R  >= XCenter && Y + R >= YCenter)
+	{
+		if (NE)	Summe = Summe + NE->SearchAll(X, Y, R, FoundXyList, XCenter, XMax, YCenter, YMax);
+	}
+
+	return (Summe);
+}
+
+//---------------------------------------------------------------------
+template class TQuadTree<TNodeList, TNode>;
+template class TQuadTree<TXYList, TXY>;
+

Added: trunk/src/quadtree.h
===================================================================
--- trunk/src/quadtree.h	2006-05-26 05:12:48 UTC (rev 49)
+++ trunk/src/quadtree.h	2006-06-04 23:49:03 UTC (rev 50)
@@ -0,0 +1,43 @@
+//
+// $Id: quadtree.h 48 2006-05-11 21:32:40Z mrchip $
+//
+// Copyright (C) 2005 STADT-LAND-FLUSS INGENIEURDIENSTE GmbH
+//
+// Authors:
+// Ulrich Kiel <u.kiel at S-L-F.de>
+//
+// This program is free software under the GPL (>=v2)
+// Read the file COPYING coming with WSPLGEN for details.
+//
+
+//---------------------------------------------------------------------------
+#ifndef quadtreeH
+#define quadtreeH
+
+//----------------------------------------------------------------------------
+// TQuadTree
+//----------------------------------------------------------------------------
+template <class TXyList, class TXy> class TQuadTree
+{
+	public:
+		TQuadTree	*NW;
+		TQuadTree	*NE;
+		TQuadTree	*SW;
+		TQuadTree	*SE;
+
+		TXy			*Xy;
+
+		TQuadTree(void);
+		TQuadTree(TXy *xy);
+		~TQuadTree(void);
+
+		// Insert liefert true zurück, wenn das Objekt eingefügt werden konnte,
+		// und false, falls es schon eingefügt war
+		bool 		Insert(long XMin, long XMax, long YMin, long YMax, TXy *xy);
+		int 		ListAll(void);
+		TXy*		Search(long X, long Y, long XMin, long XMax, long YMin, long YMax);
+		int			SearchAll(double X, double Y, double R, TXyList* FoundXyList, long XMin, long XMax, long YMin, long YMax);
+};
+
+#endif
+

Modified: trunk/src/test.cpp
===================================================================
--- trunk/src/test.cpp	2006-05-26 05:12:48 UTC (rev 49)
+++ trunk/src/test.cpp	2006-06-04 23:49:03 UTC (rev 50)
@@ -23,18 +23,19 @@
 //---------------------------------------------------------------------
 int main(unsigned int argc, char **argv)
 {
-	// Alle Feler und normalen Ausgaben werden in stderr geschrieben,
+	// Alle Fehler und normalen Ausgaben werden in stderr geschrieben,
 	// damit die Testausgaben auf stdout gehen können.
 	fhlog = stderr;
 	fhsta = stderr;
 
 	try
 	{
-		if (argc <= 1 || strncmp(argv[1], "file", 4) == 0)		test_file();
 		if (argc <= 1 || strncmp(argv[1], "tools", 5) == 0)		test_tools();
 		if (argc <= 1 || strncmp(argv[1], "xy", 2) == 0)		test_xy();
 		if (argc <= 1 || strncmp(argv[1], "profil", 6) == 0)	test_profil();
 		if (argc <= 1 || strncmp(argv[1], "nodes", 5) == 0)		test_nodes();
+		if (argc <= 1 || strncmp(argv[1], "quadtree", 8) == 0)	test_quadtree();
+		if (argc <= 1 || strncmp(argv[1], "file", 4) == 0)		test_file();
 		if (argc <= 1 || strncmp(argv[1], "tri", 3) == 0)		test_tri();
 	}
 	catch (TFehler Fehler)
@@ -42,14 +43,14 @@
 		printf ("Fehler '%s' korrekt gefangen\n", Fehler.Fehlermeldung.c_str());
 		printf ("Programmabbruch\n");
 
-		return (9298);
+		return (3);
 	}
 	catch (...)
 	{
 		printf ("Fehler nicht korrekt gefangen\n");
 		printf ("Programmabbruch\n");
 
-		return (9299);
+		return (3);
 	}
 
 	return (ReturnCode);

Modified: trunk/src/test.h
===================================================================
--- trunk/src/test.h	2006-05-26 05:12:48 UTC (rev 49)
+++ trunk/src/test.h	2006-06-04 23:49:03 UTC (rev 50)
@@ -21,6 +21,7 @@
 extern void	test_profil(void);
 extern void	test_nodes(void);
 extern void	test_tri(void);
+extern void	test_quadtree(void);
 
 //----------------------------------------------------------------------------
 #endif

Modified: trunk/src/test_file.cpp
===================================================================
--- trunk/src/test_file.cpp	2006-05-26 05:12:48 UTC (rev 49)
+++ trunk/src/test_file.cpp	2006-06-04 23:49:03 UTC (rev 50)
@@ -90,7 +90,7 @@
 		else if (!Parameter->IsSetLin || Parameter->FileNameLin != "egal.shp")			printf("Failed\n");
 		else if (!Parameter->IsSetGel || Parameter->Sperre != true)						printf("Failed\n");
 		else if (!Parameter->IsSetDelta)												printf("Failed\n");
-		else if (Parameter->Von != 0 || Parameter->Bis != 1 || Parameter->Diff != 0.23)	printf("Failed\n");
+		else if (Parameter->Von != 0 || Parameter->Bis != 100 || Parameter->Diff != 23)	printf("Failed\n");
 		else if (!Parameter->IsSetAusgabe || Parameter->FileNameAusgabe != "egal.shp")	printf("Failed\n");
 		else																			printf("Pass\n");
 
@@ -109,8 +109,9 @@
 
 		LoadDGM(DGMTINFILE, NodeList, ElementList, 0, 100000, 8);
 
-		if (NodeList->size() == 114 && ElementList->size() == 218)	printf("Pass\n");
-		else														printf("Failed\n");
+		if (NodeList->size() != 114)			printf("Failed\n");
+		else if (ElementList->size() != 218)	printf("Failed\n");
+		else									printf("Pass\n");
 
 		delete NodeList;
 		delete ElementList;
@@ -127,16 +128,18 @@
 		TElementList *ElementList = new TElementList();
 		TXYList *XyList = new TXYList();
 
-		XyList->Add(new TXY(8077115.0, 2467168.0));
-		XyList->Add(new TXY(8077115.0, 2625595.0));
-		XyList->Add(new TXY(8266487.0, 2625595.0));
-		XyList->Add(new TXY(8266487.0, 2467168.0));
+		XyList->Add(new TXY(807711500, 246716800));
+		XyList->Add(new TXY(807711500, 262559500));
+		XyList->Add(new TXY(826648700, 262559500));
+		XyList->Add(new TXY(826648700, 246716800));
 
 		LoadDGM(DGMTINFILE, NodeList, ElementList, XyList, 100000, 8);
 
-		if (NodeList->size() == 52 && ElementList->size() == 72)	printf("Pass\n");
-		else														printf("Failed\n");
+		if (NodeList->size() != 52)			printf("Failed\n");
+		else if (ElementList->size() != 72)	printf("Failed\n");
+		else								printf("Pass\n");
 
+		delete XyList;
 		delete NodeList;
 		delete ElementList;
 	}
@@ -152,16 +155,17 @@
 		TElementList *ElementList = new TElementList();
 		TXYList *XyList = new TXYList();
 
-		XyList->Add(new TXY(8078110.0, 2467168.0));
-		XyList->Add(new TXY(8078110.0, 2625595.0));
-		XyList->Add(new TXY(8266487.0, 2625595.0));
-		XyList->Add(new TXY(8266487.0, 2467168.0));
+		XyList->Add(new TXY(807811000, 246716800));
+		XyList->Add(new TXY(807811000, 262559500));
+		XyList->Add(new TXY(826648700, 262559500));
+		XyList->Add(new TXY(826648700, 246716800));
 
 		LoadDGM(DGMGRDFILE, NodeList, ElementList, XyList, 100000, 8);
 
-		if (NodeList->size() == 24624)	printf("Pass\n");
-		else							printf("Failed\n");
+		if (NodeList->size() != 24624)	printf("Failed\n");
+		else							printf("Pass\n");
 
+		delete XyList;
 		delete NodeList;
 		delete ElementList;
 	}
@@ -178,8 +182,8 @@
 
 		LoadDGM(DGMXYZFILE, NodeList, ElementList, 0, 100000, 8);
 
-		if (NodeList->size() == 10)	printf("Pass\n");
-		else						printf("Failed\n");
+		if (NodeList->size() != 10)	printf("Failed\n");
+		else						printf("Pass\n");
 
 		delete NodeList;
 		delete ElementList;
@@ -197,8 +201,8 @@
 
 		LoadDGM(DGMXYZFILE2, NodeList, ElementList, 0, 100000, 8);
 
-		if (NodeList->size() == 1126)	printf("Pass\n");
-		else							printf("Failed\n");
+		if (NodeList->size() != 1126)	printf("Failed\n");
+		else							printf("Pass\n");
 
 		delete NodeList;
 		delete ElementList;
@@ -216,8 +220,8 @@
 
 		LoadDGM(DGMXYZFILE3, NodeList, ElementList, 0, 100000, 8);
 
-		if (NodeList->size() == 43332)	printf("Pass\n");
-		else							printf("Failed\n");
+		if (NodeList->size() != 43332)	printf("Failed\n");
+		else							printf("Pass\n");
 
 		delete NodeList;
 		delete ElementList;
@@ -235,11 +239,9 @@
 
 		LoadDGM(DGMXYZFILE4, NodeList, ElementList, 0, 100000, 8);
 
-		if (NodeList->size() == 98636)	printf("Pass\n");
-		else							printf("Failed\n");
+		if (NodeList->size() != 98636)	printf("Failed\n");
+		else							printf("Pass\n");
 
-// SaveNodes("test_daten\\test_nodes7.shp", NodeList, 9);
-
 		delete NodeList;
 		delete ElementList;
 	}
@@ -256,8 +258,8 @@
 
 		LoadDGM(DGMSHPFILE, NodeList, ElementList, 0, 100000, 8);
 
-		if (NodeList->size() == 114)	printf("Pass\n");
-		else							printf("Failed\n");
+		if (NodeList->size() != 114)	printf("Failed\n");
+		else							printf("Pass\n");
 
 		delete NodeList;
 		delete ElementList;
@@ -274,16 +276,17 @@
 		TElementList *ElementList = new TElementList();
 		TXYList *XyList = new TXYList();
 
-		XyList->Add(new TXY(3494781.0, 5874834.0));
-		XyList->Add(new TXY(3494781.0, 5874936.0));
-		XyList->Add(new TXY(3495164.0, 5874936.0));
-		XyList->Add(new TXY(3495164.0, 5874834.0));
+		XyList->Add(new TXY(349478100, 587483400));
+		XyList->Add(new TXY(349478100, 587493600));
+		XyList->Add(new TXY(349516400, 587493600));
+		XyList->Add(new TXY(349516400, 587483400));
 
 		LoadDGM(DGMSHPFILE2, NodeList, ElementList, XyList, 100000, 8);
 
-		if (NodeList->size() == 28287)	printf("Pass\n");
-		else							printf("Failed\n");
+		if (NodeList->size() != 28287)	printf("Failed\n");
+		else							printf("Pass\n");
 
+		delete XyList;
 		delete NodeList;
 		delete ElementList;
 	}
@@ -300,8 +303,9 @@
 
 		LoadDGM(DGM2DMFILE, NodeList, ElementList, 0, 100000, 8);
 
-		if (NodeList->size() == 1126 && ElementList->size() == 2225)	printf("Pass\n");
-		else															printf("Failed\n");
+		if (NodeList->size() != 1126)			printf("Failed\n");
+		else if (ElementList->size() != 2225)	printf("Failed\n");
+		else									printf("Pass\n");
 
 		delete NodeList;
 		delete ElementList;
@@ -318,8 +322,8 @@
 
 		LoadProfile(PROFILFILE, ProfilList, -9999.9, 9999.9, 8);
 
-		if (ProfilList->size() == 8)	printf("Pass\n");
-		else							printf("Failed\n");
+		if (ProfilList->size() != 8)	printf("Failed\n");
+		else							printf("Pass\n");
 
 		delete ProfilList;
 	}
@@ -335,8 +339,8 @@
 
 		LoadProfile(PROFILZFILE, ProfilList, -9999.9, 9999.9, 8);
 
-		if (ProfilList->size() == 5)	printf("Pass\n");
-		else							printf("Failed\n");
+		if (ProfilList->size() != 5)	printf("Failed\n");
+		else							printf("Pass\n");
 
 		delete ProfilList;
 	}
@@ -354,8 +358,10 @@
 
 		LoadLinien(LINIENFILE, SperrenList, GrabenList, RohreList, 8);
 
-		if (SperrenList->size() == 5 && GrabenList->size() == 4 && RohreList->size() == 0)	printf("Pass\n");
-		else																				printf("Failed\n");
+		if (SperrenList->size() != 5)		printf("Failed\n");
+		else if (GrabenList->size() != 4)	printf("Failed\n");
+		else if (RohreList->size() != 0)	printf("Failed\n");
+		else								printf("Pass\n");
 
 		delete RohreList;
 		delete GrabenList;
@@ -373,8 +379,8 @@
 
 		LoadWsp(WSPFILE, WspList, 8);
 
-		if (WspList->size() == 5668)	printf("Pass\n");
-		else							printf("Failed\n");
+		if (WspList->size() != 5668)	printf("Failed\n");
+		else							printf("Pass\n");
 
 		delete WspList;
 	}
@@ -390,8 +396,8 @@
 
 		LoadWsp(WSPFILE2, WspList, 8);
 
-		if (WspList->size() == 42)	printf("Pass\n");
-		else						printf("Failed\n");
+		if (WspList->size() != 42)	printf("Failed\n");
+		else						printf("Pass\n");
 
 		delete WspList;
 	}
@@ -407,8 +413,8 @@
 
 		LoadAchse(ACHSEFILE, AchsenList, 8);
 
-		if (AchsenList->size() == 14)	printf("Pass\n");
-		else							printf("Failed\n");
+		if (AchsenList->size() != 14)	printf("Failed\n");
+		else							printf("Pass\n");
 
 		delete AchsenList;
 	}

Modified: trunk/src/test_nodes.cpp
===================================================================
--- trunk/src/test_nodes.cpp	2006-05-26 05:12:48 UTC (rev 49)
+++ trunk/src/test_nodes.cpp	2006-06-04 23:49:03 UTC (rev 50)
@@ -16,9 +16,9 @@
 
 //---------------------------------------------------------------------------
 #ifdef __BORLANDC__
-#define DGMTINFILE		"test_daten\\dgmtin\\tnxy.adf"
+#define DGMSHPFILE		"test_daten\\dgm.shp"
 #else
-#define DGMTINFILE		"test_daten/dgmtin/tnxy.adf"
+#define DGMSHPFILE		"test_daten/dgm.shp"
 #endif
 
 //---------------------------------------------------------------------------
@@ -40,63 +40,55 @@
 	{
 		printf ("Test Knoten:                                                         ");
 
-		TNode *P11 = new TNode(1, 1.0, 1.0, 0.0);
-		TNode *P12 = new TNode(2, 9.0, 1.0, 0.0);
-		TNode *P13 = new TNode(3, 9.0, 9.0, 0.0);
-		TNode *P14 = new TNode(4, 1.0, 9.0, 0.0);
-		TNode *P15 = new TNode(5, 4.0, 9.0, 0.0);
-		TNode *P16 = new TNode(6, 7.0, 9.0, 0.0);
-		TNode *P17 = new TNode(7, 7.0, 7.0, 0.0);
-		// NrSumme = 28, XSumme = 38, YSumme = 45, ZSumme = 0, WspSumme = -69993
+		TNode *P11 = new TNode(1, 1, 1, 0);
+		TNode *P12 = new TNode(2, 9, 1, 0);
+		TNode *P13 = new TNode(3, 9, 9, 0);
+		TNode *P14 = new TNode(4, 1, 9, 0);
+		TNode *P15 = new TNode(5, 4, 9, 0);
+		TNode *P16 = new TNode(6, 7, 9, 0);
+		TNode *P17 = new TNode(7, 7, 7, 0);
 
-		// NrSumme = 15, XSumme = 24, YSumme = 25, ZSumme = 15, WspSumme = -49995
-		TNode *P21 = new TNode(1, 3.0, 4.0, 1.0);
-		TNode *P22 = new TNode(2, 7.0, 4.0, 2.0);
-		TNode *P23 = new TNode(3, 7.0, 6.0, 3.0);
-		TNode *P24 = new TNode(4, 3.0, 6.0, 4.0);
-		TNode *P25 = new TNode(5, 4.0, 5.0, 5.0);
-		// NrSumme = 43, XSumme = 62, YSumme = 70, ZSumme = 15, WspSumme = -119988
+		TNode *P21 = new TNode(1, 3, 4, 1);
+		TNode *P22 = new TNode(2, 7, 4, 2);
+		TNode *P23 = new TNode(3, 7, 6, 3);
+		TNode *P24 = new TNode(4, 3, 6, 4);
+		TNode *P25 = new TNode(5, 4, 5, 5);
 
-		// NrSumme = 3, XSumme = 10, YSumme = 11, ZSumme = 8, WspSumme = 7
 		TNode *P31 = new TNode(P21);
-		TNode *P32 = new TNode(2, 7.0, 7.0, 7.0, 7.0);
+		TNode *P32 = new TNode(2, 7, 7, 7, 7);
 
 		// Jetzt zwei leere KnotenListen generieren
 		TNodeList *PL1 = new TNodeList();
 		TNodeList *PL2 = new TNodeList();
 
 		// Ein paar Punkte zur ersten Polylinie zuweisen
-		PL1->push_back(P11);
-		PL1->push_back(P12);
-		PL1->push_back(P13);
-		PL1->push_back(P14);
-		PL1->push_back(P15);
-		PL1->push_back(P16);
-		PL1->push_back(P17);
+		PL1->Add(P11);
+		PL1->Add(P12);
+		PL1->Add(P13);
+		PL1->Add(P14);
+		PL1->Add(P15);
+		PL1->Add(P16);
+		PL1->Add(P17);
 
 		// Ein paar Punkte zur zweiten Polylinie zuweisen
-		PL2->push_back(P21);
-		PL2->push_back(P22);
-		PL2->push_back(P23);
-		PL2->push_back(P24);
-		PL2->push_back(P25);
+		PL2->Add(P21);
+		PL2->Add(P22);
+		PL2->Add(P23);
+		PL2->Add(P24);
+		PL2->Add(P25);
 
 		// Die zweite Knotenliste verdoppeln
 		// Dabei werden alle Punkte mit verdoppelt
 
-		// NrSumme = 15, XSumme = 24, YSumme = 25, ZSumme = 15, WspSumme = -49995
 		TNodeList *PL3 = PL2->Copy();
-		// NrSumme = 58, XSumme = 86, YSumme = 95, ZSumme = 30, WspSumme = -169983
 
 		// Und noch zwei Punkte dazu
-		// NrSumme = 3, XSumme = 10, YSumme = 11, ZSumme = 8, WspSumme = -9999+7
-		PL3->push_back(P31);
-		PL3->push_back(P32);
-		// NrSumme = 61, XSumme = 96, YSumme = 106, ZSumme = 38, WspSumme = -179975
+		PL3->Add(P31);
+		PL3->Add(P32);
 
 		int NrSumme = 0;
-		int XSumme = 0;
-		int YSumme = 0;
+		long XSumme = 0;
+		long YSumme = 0;
 		int ZSumme = 0;
 		int WspSumme = 0;
 
@@ -104,77 +96,76 @@
 		{
 			TNode* Node = *i;
 
-			NrSumme = NrSumme + (int)Node->Nr;
-			XSumme = XSumme + (int)Node->X;
-			YSumme = YSumme + (int)Node->Y;
-			ZSumme = ZSumme + (int)Node->Z;
-			WspSumme = WspSumme + (int)Node->Wsp;
+			NrSumme = NrSumme + Node->Nr;
+			XSumme = XSumme + Node->X;
+			YSumme = YSumme + Node->Y;
+			ZSumme = ZSumme + Node->Z;
+			WspSumme = WspSumme + Node->Wsp;
 		}
 
 		for (TNodeList::iterator i = PL2->begin(); i != PL2->end(); i++)
 		{
 			TNode* Node = *i;
 
-			NrSumme = NrSumme + (int)Node->Nr;
-			XSumme = XSumme + (int)Node->X;
-			YSumme = YSumme + (int)Node->Y;
-			ZSumme = ZSumme + (int)Node->Z;
-			WspSumme = WspSumme + (int)Node->Wsp;
+			NrSumme = NrSumme + Node->Nr;
+			XSumme = XSumme + Node->X;
+			YSumme = YSumme + Node->Y;
+			ZSumme = ZSumme + Node->Z;
+			WspSumme = WspSumme + Node->Wsp;
 		}
 
 		for (TNodeList::iterator i = PL3->begin(); i != PL3->end(); i++)
 		{
 			TNode* Node = *i;
 
-			NrSumme = NrSumme + (int)Node->Nr;
-			XSumme = XSumme + (int)Node->X;
-			YSumme = YSumme + (int)Node->Y;
-			ZSumme = ZSumme + (int)Node->Z;
-			WspSumme = WspSumme + (int)Node->Wsp;
+			NrSumme = NrSumme + Node->Nr;
+			XSumme = XSumme + Node->X;
+			YSumme = YSumme + Node->Y;
+			ZSumme = ZSumme + Node->Z;
+			WspSumme = WspSumme + Node->Wsp;
 		}
 
 		if (PL1->size() != 7 || PL2->size() != 5 || PL3->size() != 7)	printf("Failed\n");
 		else if (NrSumme != 61 || XSumme != 96 || YSumme != 106)		printf("Failed\n");
-		else if (ZSumme != 38 || WspSumme != -9999 * 18 + 7)			printf("Failed\n");
+		else if (ZSumme != 38 || WspSumme != -17999975)					printf("Failed\n");
 		else															printf("Pass\n");
 	}
 
 	{
 		printf ("Test Knoten Sortieren:                                               ");
 
-		TNode *P11 = new TNode(1, 1.0, 1.0, 0.0);
-		TNode *P12 = new TNode(2, 9.0, 1.0, 0.0);
-		TNode *P13 = new TNode(3, 9.0, 9.0, 0.0);
-		TNode *P14 = new TNode(4, 1.0, 9.0, 0.0);
-		TNode *P15 = new TNode(5, 4.0, 9.0, 0.0);
-		TNode *P16 = new TNode(6, 7.0, 9.0, 0.0);
-		TNode *P17 = new TNode(7, 7.0, 7.0, 0.0);
+		TNode *P11 = new TNode(3, 1, 1, 0);
+		TNode *P12 = new TNode(2, 9, 1, 0);
+		TNode *P13 = new TNode(1, 9, 9, 0);
+		TNode *P14 = new TNode(4, 1, 9, 0);
+		TNode *P15 = new TNode(7, 4, 9, 0);
+		TNode *P16 = new TNode(6, 7, 9, 0);
+		TNode *P17 = new TNode(5, 7, 7, 0);
 
 		// Jetzt eine leere KnotenListe generieren
 		TNodeList *PL1 = new TNodeList();
 
 		// Ein paar Punkte zur ersten Polylinie zuweisen
-		PL1->push_back(P11);
-		PL1->push_back(P12);
-		PL1->push_back(P13);
-		PL1->push_back(P14);
-		PL1->push_back(P15);
-		PL1->push_back(P16);
-		PL1->push_back(P17);
+		PL1->Add(P11);
+		PL1->Add(P12);
+		PL1->Add(P13);
+		PL1->Add(P14);
+		PL1->Add(P15);
+		PL1->Add(P16);
+		PL1->Add(P17);
 
-		PL1->SortByXY();
 		// Der letzt Knoten
-		TNode *Node11 = *PL1->begin();
-		TNode *Node12 = *PL1->rbegin();
+		TNode *Node1 = *PL1->begin();
+		TNode *Node2 = *PL1->rbegin();
 
 		PL1->SortByNr();
-		// Der letzt Knoten
-		TNode *Node21 = *PL1->begin();
-		TNode *Node22 = *PL1->rbegin();
 
-		if (Node11->Nr != 1 || Node12->Nr != 3)			printf("Failed\n");
-		else if (Node21->Nr != 1 || Node22->Nr != 7)	printf("Failed\n");
-		else											printf("Pass\n");
+		TNode *Node3 = *PL1->begin();
+		TNode *Node4 = *PL1->rbegin();
+
+		if (Node1->Nr != 3 || Node2->Nr != 5)		printf("Failed\n");
+		else if (Node3->Nr != 1 || Node4->Nr != 7)	printf("Failed\n");
+		else								   		printf("Pass\n");
 	}
 
 	{
@@ -183,18 +174,20 @@
 		TNodeList *NodeList = new TNodeList();
 		TElementList *ElementList = new TElementList();
 
-		LoadDGM(DGMTINFILE, NodeList, ElementList, 0, 100000, 8);
+		LoadDGM(DGMSHPFILE, NodeList, ElementList, 0, 100000, 8);
 
-		TNode* Node1 = NodeList->FindByXY(8080895.32, 2623659.13, 1);
+		NodeList->SortByXY();
 
-		TNodeList *FoundList = NodeList->FindAllByXY(8080854.58, 2623659.69, 30000.0);
+		TNode* Node1 = NodeList->FindByXY(808089533,262365914);
 
+		TNodeList *FoundList = NodeList->FindAllByXY(808089533, 262365914, 3000000.0);
+
 		TNode* Node2 = *FoundList->begin();
 		TNode* Node3 = *FoundList->rbegin();
 
-		if (Node1 == 0 || Node1->Nr != 50)			printf("Failed\n");
-		else if (Node2 == 0 || Node2->Nr != 115)	printf("Failed\n");
-		else if (Node3 == 0 || Node3->Nr != 39)		printf("Failed\n");
+		if (Node1 == 0 || Node1->Nr != 46)			printf("Failed\n");
+		else if (Node2 == 0 || Node2->Nr != 54)		printf("Failed\n");
+		else if (Node3 == 0 || Node3->Nr != 35)		printf("Failed\n");
 		else if (FoundList->size() != 4)			printf("Failed\n");
 		else										printf("Pass\n");
 	}

Modified: trunk/src/test_profil.cpp
===================================================================
--- trunk/src/test_profil.cpp	2006-05-26 05:12:48 UTC (rev 49)
+++ trunk/src/test_profil.cpp	2006-06-04 23:49:03 UTC (rev 50)
@@ -26,95 +26,104 @@
 	// Test der Profilverwaltung
 	////////////////////////////////////////
 
-	printf ("********************\n");
-	printf ("Test Punktverwaltung\n");
+	printf ("*************************************************************************\n");
+	printf ("Test Profilverwaltung\n");
 
+	printf ("Test Profile erzeugen:                                               ");
+
 	TProfil *Profil1 = new TProfil("Weser", 2502000);
 	TProfil *Profil2 = new TProfil("Weser", 2507000);
 
-	Profil1->AddPoint(1.0, 2.0);
-	Profil1->AddPoint(3.0, 2.0, 1.0);
-	Profil1->AddPoint(6.0, 6.0, 2.0);
+	Profil1->AddPoint(1, 2);
+	Profil1->AddPoint(3, 2, 1);
+	Profil1->AddPoint(6, 6, 2);
 
-	Profil2->AddPoint(8.0,   9.0);
-	Profil2->AddPoint(10.0, 13.0, 3.0);
-	Profil2->AddPoint(12.0, 19.0);
+	Profil2->AddPoint(8, 9);
+	Profil2->AddPoint(10, 13, 3);
+	Profil2->AddPoint(12, 19);
+	Profil2->AddPoint(14, 20);
 
 	TProfil *Profil3 = new TProfil(Profil1);
 
 	// Sonst wird es nicht in die ProfilListe aufgenommen (doppelte Station verboten)
 	Profil3->Station = 1234000;
 
-	double X1 = 0.0;
-	double Y1 = 0.0;
-	Profil1->GetXY(0.0, &X1, &Y1);
+	if (Profil1->PointList->size() != 3)		printf("Failed\n");
+	else if (Profil2->PointList->size() != 4)	printf("Failed\n");
+	else if (Profil3->PointList->size() != 3)	printf("Failed\n");
+	else										printf("Pass\n");
 
-	double X2 = 0.0;
-	double Y2 = 0.0;
-	Profil1->GetXY(1.0, &X2, &Y2);
 
-	double X3 = 0.0;
-	double Y3 = 0.0;
-	Profil1->GetXY(2.0, &X3, &Y3);
+	////////////////////////////////////////
+	////////////////////////////////////////
 
-	double X4 = 0.0;
-	double Y4 = 0.0;
-	Profil1->GetXY(4.5, &X4, &Y4);
+	printf ("Test Koordinaten ermitteln:                                          ");
 
-	printf("Meter 0.0 -> X = %.3f Y = %.3f\n", X1, Y1);
-	printf("Meter 1.0 -> X = %.3f Y = %.3f\n", X2, Y2);
-	printf("Meter 2.0 -> X = %.3f Y = %.3f\n", X3, Y3);
-	printf("Meter 4.5 -> X = %.3f Y = %.3f\n", X4, Y4);
+	long X1 = 0;
+	long Y1 = 0;
+	Profil1->GetXY(0, &X1, &Y1);
 
-	TProfil *Profil4 = new TProfil("Weser", 1050000);
+	long X2 = 0;
+	long Y2 = 0;
+	Profil1->GetXY(1, &X2, &Y2);
 
-	Profil4->AddPoint(4.0, 2.0);
-	Profil4->AddPoint(5.0, 3.0);
-	Profil4->AddPoint(6.0, 4.0, 5.0);
-	Profil4->AddPoint(7.0, 5.0);
-	Profil4->AddPoint(8.0, 6.0);
+	long X3 = 0;
+	long Y3 = 0;
+	Profil1->GetXY(3, &X3, &Y3);
 
-	TProfil *Profil5 = new TProfil("Weser", 1015000);
+	long X4 = 0;
+	long Y4 = 0;
+	Profil1->GetXY(45, &X4, &Y4);
 
-	Profil5->AddPoint(14.0, 22.0);
-	Profil5->AddPoint(15.0, 23.0);
-	Profil5->AddPoint(16.0, 24.0);
-	Profil5->AddPoint(17.0, 25.0);
-	Profil5->AddPoint(18.0, 26.0);
+	if (X1 != 1 || Y1 != 2)			printf("Failed\n");
+	else if (X2 != 2 || Y2 != 2)	printf("Failed\n");
+	else if (X3 != 4 || Y3 != 3)	printf("Failed\n");
+	else if (X4 != 29 || Y4 != 36)	printf("Failed\n");
+	else							printf("Pass\n");
 
-	TProfil *Profil6 = new TProfil("Aller", 994000);
+	////////////////////////////////////////
+	////////////////////////////////////////
 
-	Profil6->AddPoint(4.0, 2.0);
-	Profil6->AddPoint(1.0, 2.0);
-	Profil6->AddPoint(6.0, 4.0);
-	Profil6->AddPoint(1.0, 2.0);
-	Profil6->AddPoint(8.0, 6.0);
+	printf ("Test Profilliste:                                                    ");
 
+	TProfil *Profil4 = new TProfil("Weser", 1050000);
 
-	TProfilList ProfilList;
+	Profil4->AddPoint(4, 2);
+	Profil4->AddPoint(5, 3);
+	Profil4->AddPoint(6, 4, 5);
+	Profil4->AddPoint(7, 5);
+	Profil4->AddPoint(8, 6);
 
-	ProfilList.insert(Profil1);
-	ProfilList.insert(Profil2);
-	ProfilList.insert(Profil3);
-	ProfilList.insert(Profil4);
-	ProfilList.insert(Profil5);
-	ProfilList.insert(Profil6);
+	TProfil *Profil5 = new TProfil("Weser", 1015000);
 
-	printf("Anzahl der Profile %d\n", ProfilList.size());
+	Profil5->AddPoint(14, 22);
+	Profil5->AddPoint(15, 23);
+	Profil5->AddPoint(16, 24);
+	Profil5->AddPoint(17, 25);
+	Profil5->AddPoint(18, 26);
 
-	int Anz1 = 0;
-	for (TProfilList::iterator i = ProfilList.begin(); i != ProfilList.end(); i++)
-	{
-		printf("Profil %d hat Station %d\n", Anz1, (*i)->Station);
-		Anz1++;
-	}
+	TProfil *Profil6 = new TProfil("Aller", 994000);
 
-	ProfilList.clear();
+	Profil6->AddPoint(4, 2);
+	Profil6->AddPoint(1, 2);
+	Profil6->AddPoint(6, 4);
+	Profil6->AddPoint(1, 2);
+	Profil6->AddPoint(8, 6);
 
-	printf("Nach dem 'clearen' ist die Anzahl der Profile %d\n", ProfilList.size());
+	TProfilList *ProfilList = new TProfilList;
 
-	// Jetzt nochmal mit dynamisch erzeugt Pointern
+	ProfilList->insert(Profil1);
+	ProfilList->insert(Profil2);
+	ProfilList->insert(Profil3);
+	ProfilList->insert(Profil4);
+	ProfilList->insert(Profil5);
+	ProfilList->insert(Profil6);
 
+	int Size1 = ProfilList->size();
+
+	ProfilList->Clear();
+
+	// Jetzt nochmal mit dynamisch erzeugt Pointern
 	for (unsigned int i=0; i < 113; i++)
 	{
 		TProfil *Profil = new TProfil("Weser", (i * 79) % 113);
@@ -125,81 +134,46 @@
 		Profil->AddPoint(i, i+3, 44000);
 		Profil->AddPoint(i, i+4, 55000);
 
-		ProfilList.insert(Profil);
-
-//		delete Profil;
+		ProfilList->insert(Profil);
 	}
 
+	int Size2 = ProfilList->size();
+
 	TProfil *Profil10 = new TProfil("Aller", 100000);
 
 	Profil10->AddPoint(101, 101, 101);
 	Profil10->AddPoint(102, 102, 102);
 
-	ProfilList.insert(Profil10);
+	ProfilList->insert(Profil10);
 
 	TProfil *Profil11 = new TProfil("Aller", 110000);
 
 	Profil11->AddPoint(111, 111, 111);
 	Profil11->AddPoint(112, 112, 112);
 
-	ProfilList.insert(Profil11);
+	ProfilList->insert(Profil11);
 
-	printf("Anzahl der Profile %d\n", ProfilList.size());
+	int Size3 = ProfilList->size();
 
-	int Anz3 = 0;
-	for (TProfilList::iterator i = ProfilList.begin(); i != ProfilList.end(); i++)
-	{
-		TProfil *Profil = *i;
+	if (Size1 != 6)				printf("Failed\n");
+	else if (Size2 != 113)		printf("Failed\n");
+	else if (Size3 != 115)		printf("Failed\n");
+	else						printf("Pass\n");
 
-		int z = 0;
-		for (TPointList::iterator j = Profil->PointList->begin(); j != Profil->PointList->end(); j++)
-		{
-			TPoint *Point = *j;
+	////////////////////////////////////////
+	////////////////////////////////////////
 
-			printf("Profil %d hat Station %d und X: %.3f (%d) Y: %.3f (%d) Z: %.3f\n", Anz3, Profil->Station, Point->X, (int)(Point->X * 79) % 113, Point->Y, (int)((Point->Y - z) * 79) % 113, Point->Z);
-			z++;
-		}
-		Anz3++;
-	}
+	printf ("Test Profilsuche:                                                    ");
 
-	TProfilList ProfilList2 = ProfilList;
+	TProfil* FoundProfil1 = ProfilList->Find("Weser", 79);
+	TProfil* FoundProfil2 = ProfilList->Find("Aller", 100000);
 
-	ProfilList.clear();
+	if (0 == FoundProfil1)						printf("Failed\n");
+	else if (0 == FoundProfil2)					printf("Failed\n");
+	else if (FoundProfil1->Station != 79)		printf("Failed\n");
+	else if (FoundProfil2->Station != 100000)	printf("Failed\n");
+	else										printf("Pass\n");
 
-	int Anz4 = 0;
-	for (TProfilList::iterator i = ProfilList2.begin(); i != ProfilList2.end(); i++)
-	{
-		TProfil *Profil = *i;
-
-		int z = 0;
-		for (TPointList::iterator i = Profil->PointList->begin(); i != Profil->PointList->end(); i++)
-		{
-			TPoint *Point = *i;
-
-			printf("Profil %d hat Station %d und Rechts: %.3f (%d) Hoch: %.3f (%d)\n", Anz4, Profil->Station, Point->X, (int)(Point->X * 79) % 113, Point->Y, (int)((Point->Y - z) * 79) % 113);
-			z++;
-		}
-		Anz4++;
-	}
-
-	for (int Station = 00000; Station < 1140000; Station++)
-	{
-		TProfil* Profil = ProfilList2.Find("Weser", Station);
-
-		if (0 == Profil)	printf("'%s' %d wurde nicht gefunden\n", "Weser", Station);
-		else				printf("'%s' %d wurde gefunden\n", Profil->Gewaesser.c_str(), Profil->Station);
-	}
-
-	TProfil* SProfil11 = ProfilList2.Find("Aller", 110000);
-
-	if (0 == SProfil11)	printf("'%s' %d wurde nicht gefunden\n", SProfil11->Gewaesser.c_str(), SProfil11->Station);
-	else				printf("'%s' %d wurde gefunden\n", SProfil11->Gewaesser.c_str(), SProfil11->Station);
-
-	TProfil* SProfil12 = ProfilList2.Find("Aller", 120000);
-
-	if (0 == SProfil12)	printf("'%s' %d wurde nicht gefunden\n", "Aller", 120000);
-	else				printf("'%s' %d wurde gefunden\n", SProfil12->Gewaesser.c_str(), SProfil12->Station);
-
-	printf ("********************\n");
+	printf ("*************************************************************************\n");
 }
 

Added: trunk/src/test_quadtree.cpp
===================================================================
--- trunk/src/test_quadtree.cpp	2006-05-26 05:12:48 UTC (rev 49)
+++ trunk/src/test_quadtree.cpp	2006-06-04 23:49:03 UTC (rev 50)
@@ -0,0 +1,309 @@
+//
+// $Id: test_tri.cpp 49 2006-05-26 05:12:48Z mrchip $
+//
+// Copyright (C) 2005 STADT-LAND-FLUSS INGENIEURDIENSTE GmbH
+//
+// Authors:
+// Ulrich Kiel <u.kiel at S-L-F.de>
+//
+// This program is free software under the GPL (>=v2)
+// Read the file COPYING coming with WSPLGEN for details.
+//
+
+#ifdef __BORLANDC__
+#pragma hdrstop
+#endif
+
+//---------------------------------------------------------------------------
+#ifdef __BORLANDC__
+#define DGMFILE		"test_daten\\dgm_gross.xyz"
+#else
+#define DGMFILE		"test_daten/dgm_gross.xyz"
+#endif
+
+//---------------------------------------------------------------------------
+#include <stdio.h>
+
+#include "file.h"
+
+#include "xy.h"
+#include "quadtree.h"
+
+//---------------------------------------------------------------------
+void test_quadtree(void)
+{
+	////////////////////////////////////////
+	// Test des QuadTre
+	////////////////////////////////////////
+
+	printf ("*************************************************************************\n");
+	printf ("Test QuadTree\n");
+
+	{
+		printf ("Test QuadTree 1 Knoten :                                             ");
+
+		// Zuerst einen paar Punkte generieren
+		TNode *Node = new TNode(1, 1, 1, 0);
+
+		long MinX = 0;
+		long MaxX = 2;
+		long MinY = 0;
+		long MaxY = 2;
+
+		TQuadTree<TNodeList, TNode> *QuadTree = new TQuadTree<TNodeList, TNode>(Node);
+
+		TNode* FoundNode1 = QuadTree->Search(1, 1, MinX, MaxX, MinY, MaxY);
+		TNode* FoundNode2 = QuadTree->Search(2, 2, MinX, MaxX, MinY, MaxY);
+
+		if (1 != QuadTree->ListAll())	printf("Failed\n");
+		else if (!FoundNode1)			printf("Failed\n");
+		else if (FoundNode2)			printf("Failed\n");
+		else							printf("Pass\n");
+
+		delete QuadTree;
+		delete Node;
+	}
+
+	{
+		printf ("Test QuadTree 4 Knoten :                                             ");
+
+		// Zuerst einen paar Punkte generieren
+		TNode *Node1 = new TNode(1, 1, 1, 0);
+		TNode *Node2 = new TNode(1, 1, 2, 0);
+		TNode *Node3 = new TNode(1, 2, 1, 0);
+		TNode *Node4 = new TNode(1, 2, 2, 0);
+
+		TQuadTree<TNodeList, TNode> *QuadTree = new TQuadTree<TNodeList, TNode>();
+
+		long MinX = 0;
+		long MaxX = 3;
+		long MinY = 0;
+		long MaxY = 5;
+
+		QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node1);
+		QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node2);
+		QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node3);
+		QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node4);
+
+		TNode* FoundNode1 = QuadTree->Search(Node1->X, Node1->Y, MinX, MaxX, MinY, MaxY);
+		TNode* FoundNode2 = QuadTree->Search(Node2->X, Node2->Y, MinX, MaxX, MinY, MaxY);
+		TNode* FoundNode3 = QuadTree->Search(Node3->X, Node3->Y, MinX, MaxX, MinY, MaxY);
+		TNode* FoundNode4 = QuadTree->Search(Node4->X, Node4->Y, MinX, MaxX, MinY, MaxY);
+
+		if (4 != QuadTree->ListAll())	printf("Failed\n");
+		else if (!FoundNode1)			printf("Failed\n");
+		else if (!FoundNode2)			printf("Failed\n");
+		else if (!FoundNode3)			printf("Failed\n");
+		else if (!FoundNode4)			printf("Failed\n");
+		else							printf("Pass\n");
+
+		delete QuadTree;
+		delete Node1;
+		delete Node2;
+		delete Node3;
+		delete Node4;
+	}
+
+	{
+		printf ("Test QuadTree 7 Knoten :                                             ");
+
+		// Zuerst einen paar Punkte generieren
+		TNode *Node1 = new TNode(1, 1, 1, 0);
+		TNode *Node2 = new TNode(1, 1, 2, 0);
+		TNode *Node3 = new TNode(1, 2, 1, 0);
+		TNode *Node4 = new TNode(1, 2, 2, 0);
+		TNode *Node5 = new TNode(1, 2, 2, 0);
+		TNode *Node6 = new TNode(1, 1, 2, 0);
+		TNode *Node7 = new TNode(1, 2, 1, 0);
+
+		long MinX = 0;
+		long MaxX = 3;
+		long MinY = 0;
+		long MaxY = 5;
+
+		TQuadTree<TNodeList, TNode> *QuadTree = new TQuadTree<TNodeList, TNode>();
+
+		bool Insert1 = QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node1);
+		bool Insert2 = QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node2);
+		bool Insert3 = QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node3);
+		bool Insert4 = QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node4);
+		bool Insert5 = QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node5);
+		bool Insert6 = QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node6);
+		bool Insert7 = QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node7);
+
+		if (4 != QuadTree->ListAll())	printf("Failed\n");
+		else if (!Insert1)				printf("Failed\n");
+		else if (!Insert2)				printf("Failed\n");
+		else if (!Insert3)				printf("Failed\n");
+		else if (!Insert4)				printf("Failed\n");
+		else if (Insert5)				printf("Failed\n");
+		else if (Insert6)				printf("Failed\n");
+		else if (Insert7)				printf("Failed\n");
+		else							printf("Pass\n");
+
+		delete QuadTree;
+		delete Node1;
+		delete Node2;
+		delete Node3;
+		delete Node4;
+		delete Node5;
+		delete Node6;
+		delete Node7;
+	}
+
+	{
+		printf ("Test QuadTree 9 Knoten :                                             ");
+		TNode *Node01 = new TNode(1, 1, 1, 0);
+		TNode *Node02 = new TNode(2, 1, 2, 0);
+		TNode *Node03 = new TNode(3, 1, 3, 0);
+		TNode *Node04 = new TNode(4, 2, 1, 0);
+		TNode *Node05 = new TNode(5, 2, 2, 0);
+		TNode *Node06 = new TNode(6, 2, 3, 0);
+		TNode *Node07 = new TNode(7, 3, 1, 0);
+		TNode *Node08 = new TNode(8, 3, 2, 0);
+		TNode *Node09 = new TNode(9, 3, 3, 0);
+
+		long MinX = 1;
+		long MaxX = 3;
+		long MinY = 1;
+		long MaxY = 3;
+
+		TQuadTree<TNodeList, TNode> *QuadTree = new TQuadTree<TNodeList, TNode>();
+
+		QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node01);
+		QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node02);
+		QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node03);
+		QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node04);
+		QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node05);
+		QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node06);
+		QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node07);
+		QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node08);
+		QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node09);
+
+		TNodeList*	FoundNodeList = new TNodeList();
+
+		int AnzFound = QuadTree->SearchAll(2, 2, 2.0, FoundNodeList, MinX, MaxX, MinY, MaxY);
+
+		if (9 != QuadTree->ListAll())	printf("Failed\n");
+		else if (9 != AnzFound)			printf("Failed\n");
+		else							printf("Pass\n");
+
+		delete QuadTree;
+		delete Node01;
+		delete Node02;
+		delete Node03;
+		delete Node04;
+		delete Node05;
+		delete Node06;
+		delete Node07;
+		delete Node08;
+		delete Node09;
+	}
+
+	{
+		printf ("Test QuadTree 12 Knoten :                                            ");
+		TNode *Node01 = new TNode(1, 1, 1, 0);
+		TNode *Node02 = new TNode(2, 9, 1, 0);
+		TNode *Node03 = new TNode(3, 9, 9, 0);
+		TNode *Node04 = new TNode(4, 1, 9, 0);
+		TNode *Node05 = new TNode(5, 4, 9, 0);
+		TNode *Node06 = new TNode(6, 7, 9, 0);
+		TNode *Node07 = new TNode(7, 7, 7, 0);
+		TNode *Node08 = new TNode(8, 3, 4, 0);
+		TNode *Node09 = new TNode(9, 7, 4, 0);
+		TNode *Node10 = new TNode(10, 7, 6, 0);
+		TNode *Node11 = new TNode(11, 3, 6, 0);
+		TNode *Node12 = new TNode(12, 4, 5, 0);
+
+		long MinX = 1;
+		long MaxX = 9;
+		long MinY = 1;
+		long MaxY = 9;
+
+		TQuadTree<TNodeList, TNode> *QuadTree = new TQuadTree<TNodeList, TNode>();
+
+		QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node01);
+		QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node02);
+		QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node03);
+		QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node04);
+		QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node05);
+		QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node06);
+		QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node07);
+		QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node08);
+		QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node09);
+		QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node10);
+		QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node11);
+		QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node12);
+
+		TNodeList*	FoundNodeList = new TNodeList();
+
+		int AnzFound = QuadTree->SearchAll(8, 5, 8.0, FoundNodeList, MinX, MaxX, MinY, MaxY);
+
+		if (12 != QuadTree->ListAll())	printf("Failed\n");
+		else if (10 != AnzFound)		printf("Failed\n");
+		else							printf("Pass\n");
+
+		delete QuadTree;
+		delete Node01;
+		delete Node02;
+		delete Node03;
+		delete Node04;
+		delete Node05;
+		delete Node06;
+		delete Node07;
+		delete Node08;
+		delete Node09;
+		delete Node10;
+		delete Node11;
+		delete Node12;
+	}
+
+	{
+		printf ("Test QuadTree 1126 Knoten :                                          ");
+
+		TNodeList *NodeList = new TNodeList();
+		TElementList *ElementList = new TElementList();
+
+		LoadDGM(DGMFILE, NodeList, ElementList, 0, 200000, 1);
+
+		TQuadTree<TNodeList, TNode> *QuadTree = new TQuadTree<TNodeList, TNode>();
+
+		long MinX = 350000000;
+		long MaxX = 350150000;
+		long MinY = 587160000;
+		long MaxY = 587400000;
+
+		for (TNodeList::iterator i = NodeList->begin(); i != NodeList->end(); i++)
+		{
+			TNode *Node = *i;
+			QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node);
+		}
+
+		TNode* FoundNode1 = QuadTree->Search(350051407, 587273750, MinX, MaxX, MinY, MaxY);
+		TNode* FoundNode2 = QuadTree->Search(350039678, 587216726, MinX, MaxX, MinY, MaxY);
+		TNode* FoundNode3 = QuadTree->Search(350122901, 587269463, MinX, MaxX, MinY, MaxY);
+		TNode* FoundNode4 = QuadTree->Search(350117145, 587279638, MinX, MaxX, MinY, MaxY);
+
+		TNodeList*	FoundNodeList = new TNodeList();
+
+		int AnzFound1 = QuadTree->SearchAll(350121497, 587287087, 2000.0, FoundNodeList, MinX, MaxX, MinY, MaxY);
+		int AnzFound2 = QuadTree->SearchAll(350121497, 587287087, 4000.0, FoundNodeList, MinX, MaxX, MinY, MaxY);
+		int AnzFound3 = QuadTree->SearchAll(350111497, 587277087, 1500.0, FoundNodeList, MinX, MaxX, MinY, MaxY);
+
+		if (1126 != QuadTree->ListAll())	printf("Failed\n");
+		else if (!FoundNode1)				printf("Failed\n");
+		else if (!FoundNode2)				printf("Failed\n");
+		else if (!FoundNode3)				printf("Failed\n");
+		else if (!FoundNode4)				printf("Failed\n");
+		else if (4 != AnzFound1)			printf("Failed\n");
+		else if (15 != AnzFound2)			printf("Failed\n");
+		else if (1 != AnzFound3)			printf("Failed\n");
+		else								printf("Pass\n");
+
+		delete QuadTree;
+		delete ElementList;
+		delete NodeList;
+	}
+
+	printf ("*************************************************************************\n");
+}

Modified: trunk/src/test_tools.cpp
===================================================================
--- trunk/src/test_tools.cpp	2006-05-26 05:12:48 UTC (rev 49)
+++ trunk/src/test_tools.cpp	2006-06-04 23:49:03 UTC (rev 50)
@@ -45,26 +45,26 @@
 	{
 		printf ("Test CircumCircle :                                                  ");
 
-		TNode N1(1, 1.0, 1.0, 1.0);
-		TNode N2(2, 3.0, 4.0, 1.0);
-		TNode N3(3, 3.0, 6.0, 1.0);
-		TNode N4(4, 3.0, 7.0, 1.0);
-		TNode N5(5, 3500833.39, 5873151.40, 1.0);
-		TNode N6(6, 3500835.54, 5873155.65, 1.0);
-		TNode N7(7, 3500809.24, 5873159.03, 1.0);
-		TNode N8(8, 3500815.10, 5873170.62, 1.0);
+		TNode N1(1, 1, 1, 1);
+		TNode N2(2, 3, 4, 1);
+		TNode N3(3, 3, 6, 1);
+		TNode N4(4, 3, 7, 1);
+		TNode N5(5, 350083339,587315140, 100);
+		TNode N6(6, 350083554,587315565, 100);
+		TNode N7(7, 350080924,587315903, 100);
+		TNode N8(8, 350081510,587317062, 100);
 
 		double CX1, CY1, R1;
-		bool OK1 = CircumCircle(&N1, &N2, &N3, &CX1, &CY1, &R1);
+		bool OK1 = CircumCircle(N1.X, N1.Y, N2.X, N2.Y, N3.X, N3.Y, &CX1, &CY1, &R1);
 
 		double CX2, CY2, R2;
-		bool OK2 = CircumCircle(&N2, &N3, &N4, &CX2, &CY2, &R2);
+		bool OK2 = CircumCircle(N2.X, N2.Y, N3.X, N3.Y, N4.X, N4.Y, &CX2, &CY2, &R2);
 
 		double CX3, CY3, R3;
-		bool OK3 = CircumCircle(&N5, &N6, &N7, &CX3, &CY3, &R3);
+		bool OK3 = CircumCircle(N5.X, N5.Y, N6.X, N6.Y, N7.X, N7.Y, &CX3, &CY3, &R3);
 
 		double CX4, CY4, R4;
-		bool OK4 = CircumCircle(&N5, &N6, &N8, &CX4, &CY4, &R4);
+		bool OK4 = CircumCircle(N5.X, N5.Y, N6.X, N6.Y, N8.X, N8.Y, &CX4, &CY4, &R4);
 
 		if (false == OK1)							printf("Failed\n");
 		else if (fabs(sqrt(R1) - 4.8541) > 0.001)	printf("Failed\n");
@@ -72,13 +72,13 @@
 		else if (fabs(CY1 - 5) > 0.001)				printf("Failed\n");
 		else if (true == OK2)						printf("Failed\n");
 		else if (false == OK3)						printf("Failed\n");
-		else if (fabs(sqrt(R3) - 13.4348) > 0.001)	printf("Failed\n");
-		else if (fabs(CX3 - 3500822.6668) > 0.001)	printf("Failed\n");
-		else if (fabs(CY3 - 5873159.4935) > 0.001)	printf("Failed\n");
+		else if (fabs(sqrt(R3) - 1343.476) > 0.01)	printf("Failed\n");
+		else if (fabs(CX3 - 350082266.676) > 0.01)	printf("Failed\n");
+		else if (fabs(CY3 - 587315949.352) > 0.01)	printf("Failed\n");
 		else if (false == OK4)						printf("Failed\n");
-		else if (fabs(sqrt(R4) - 13.4458) > 0.001)	printf("Failed\n");
-		else if (fabs(CX4 - 3500822.6567) > 0.001)	printf("Failed\n");
-		else if (fabs(CY4 - 5873159.4986) > 0.001)	printf("Failed\n");
+		else if (fabs(sqrt(R4) - 1344.582) > 0.01)	printf("Failed\n");
+		else if (fabs(CX4 - 350082265.674) > 0.01)	printf("Failed\n");
+		else if (fabs(CY4 - 587315949.859) > 0.01)	printf("Failed\n");
 		else										printf("Pass\n");
 	}
 
@@ -212,7 +212,7 @@
 
 		int Alpha1 = IsInside(XyList, 1.0, 1.0);
 
-		XyList->push_back(new TXY(2.0, 3.0));
+		XyList->push_back(new TXY(2, 3));
 
 		int Alpha2 = IsInside(XyList, 2.0, 3.0);
 		int Alpha3 = IsInside(XyList, 1.0, 1.0);
@@ -260,7 +260,7 @@
 		bool WrongSorted = false;
 		bool WrongOrder = false;
 		TEdge* LastEdge = 0;
-		for (TEdgeListNrSorted::iterator i=EdgeList->EdgeListNrSorted.begin(); i!=EdgeList->EdgeListNrSorted.end(); i++)
+		for (TEdgeVector::iterator i=EdgeList->EdgeVector.begin(); i!=EdgeList->EdgeVector.end(); i++)
 		{
 			TEdge* Edge = *i;
 			int Node1Nr = Edge->Node1->Nr;
@@ -288,10 +288,10 @@
 			}
 		}
 
-		if (EdgeList->EdgeListNrSorted.size() != 31)	printf("Failed\n");
-		else if (WrongOrder)							printf("Failed\n");
-		else if (WrongSorted)							printf("Failed\n");
-		else											printf("Pass\n");
+		if (EdgeList->EdgeVector.size() != 31)	printf("Failed\n");
+		else if (WrongOrder)					printf("Failed\n");
+		else if (WrongSorted)					printf("Failed\n");
+		else									printf("Pass\n");
 	}
 
 	printf ("*************************************************************************\n");

Modified: trunk/src/test_tri.cpp
===================================================================
--- trunk/src/test_tri.cpp	2006-05-26 05:12:48 UTC (rev 49)
+++ trunk/src/test_tri.cpp	2006-06-04 23:49:03 UTC (rev 50)
@@ -16,9 +16,19 @@
 
 //---------------------------------------------------------------------------
 #ifdef __BORLANDC__
-#define DGMFILE		"test_daten\\dgm2.shp"
+#define DGMFILE1		"test_daten\\dgm.shp"
+#define DGMFILE2		"test_daten\\dgm.grd"
+#define DGMFILE3		"test_daten\\dgm.xyz"
+#define DGMFILE4		"test_daten\\dgm_gross.xyz"
+#define DGMFILE5		"test_daten\\dgm_ziemlich_gross.xyz"
+#define DGMFILE6		"test_daten\\dgm2.shp"
 #else
-#define DGMFILE		"test_daten/dgm2.shp"
+#define DGMFILE1		"test_daten/dgm.shp"
+#define DGMFILE2		"test_daten/dgm.grd"
+#define DGMFILE3		"test_daten/dgm.xyz"
+#define DGMFILE4		"test_daten/dgm_gross.xyz"
+#define DGMFILE5		"test_daten/dgm_ziemlich_gross.xyz"
+#define DGMFILE6		"test_daten/dgm2.shp"
 #endif
 
 //---------------------------------------------------------------------------
@@ -27,6 +37,7 @@
 #include "file.h"
 
 #include "xy.h"
+#include "tools.h"
 #include "tri.h"
 
 //---------------------------------------------------------------------
@@ -43,87 +54,218 @@
 		printf ("Test Triangulierung 3 Knoten :                                       ");
 
 		// Zuerst ein paar Punkte generieren
-		TNode *N01 = new TNode(1, 1.0, 1.0, 0.0);
-		TNode *N02 = new TNode(2, 9.0, 1.0, 0.0);
-		TNode *N03 = new TNode(3, 9.0, 9.0, 0.0);
+		TNode *N01 = new TNode(1, 1, 1, 0);
+		TNode *N02 = new TNode(2, 9, 1, 0);
+		TNode *N03 = new TNode(3, 9, 9, 0);
 
 		TNodeList *NodeList = new TNodeList();
 
-		NodeList->push_back(N01);
-		NodeList->push_back(N02);
-		NodeList->push_back(N03);
+		NodeList->Add(N01);
+		NodeList->Add(N02);
+		NodeList->Add(N03);
 
 		TElementList *ElementList = new TElementList();
 
 		Triangulate(NodeList, ElementList, 8);
 
-		if (ElementList->size() != 1)	printf("Failed\n");
-		else							printf("Pass\n");
+		if (ElementList->size() != 1)  	printf("Failed\n");
+		else if (NodeList->size() != 3)	printf("Failed\n");
+		else						   	printf("Pass\n");
 
 		delete ElementList;
 		delete NodeList;
 	}
 
 	{
+		printf ("Test Triangulierung 10 Knoten:                                       ");
+
+		TNodeList *NodeList = new TNodeList();
+		TElementList *ElementList = new TElementList();
+
+		LoadDGM(DGMFILE3, NodeList, ElementList, 0, 200000, 1);
+
+		Triangulate(NodeList, ElementList, 8);
+
+		if (ElementList->size() != 11)		printf("Failed\n");
+		else if (NodeList->size() != 10)	printf("Failed\n");
+		else						  		printf("Pass\n");
+
+		delete ElementList;
+		delete NodeList;
+	}
+
+	{
 		printf ("Test Triangulierung 12 Knoten:                                       ");
 
-		TNode *N01 = new TNode(1, 1.0, 1.0, 0.0);
-		TNode *N02 = new TNode(2, 9.0, 1.0, 0.0);
-		TNode *N03 = new TNode(3, 9.0, 9.0, 0.0);
-		TNode *N04 = new TNode(4, 1.0, 9.0, 0.0);
-		TNode *N05 = new TNode(5, 4.0, 9.0, 0.0);
-		TNode *N06 = new TNode(6, 7.0, 9.0, 0.0);
-		TNode *N07 = new TNode(7, 7.0, 7.0, 0.0);
-		TNode *N08 = new TNode(8, 3.0, 4.0, 0.0);
-		TNode *N09 = new TNode(9, 7.0, 4.0, 0.0);
-		TNode *N10 = new TNode(10, 7.0, 6.0, 0.0);
-		TNode *N11 = new TNode(11, 3.0, 6.0, 0.0);
-		TNode *N12 = new TNode(12, 4.0, 5.0, 0.0);
+		TNode *N01 = new TNode(1, 1, 1, 0);
+		TNode *N02 = new TNode(2, 9, 1, 0);
+		TNode *N03 = new TNode(3, 9, 9, 0);
+		TNode *N04 = new TNode(4, 1, 9, 0);
+		TNode *N05 = new TNode(5, 4, 9, 0);
+		TNode *N06 = new TNode(6, 7, 9, 0);
+		TNode *N07 = new TNode(7, 7, 7, 0);
+		TNode *N08 = new TNode(8, 3, 4, 0);
+		TNode *N09 = new TNode(9, 7, 4, 0);
+		TNode *N10 = new TNode(10, 7, 6, 0);
+		TNode *N11 = new TNode(11, 3, 6, 0);
+		TNode *N12 = new TNode(12, 4, 5, 0);
 
 		TNodeList *NodeList = new TNodeList();
 
-		NodeList->push_back(N01);
-		NodeList->push_back(N02);
-		NodeList->push_back(N03);
-		NodeList->push_back(N04);
-		NodeList->push_back(N05);
-		NodeList->push_back(N06);
-		NodeList->push_back(N07);
-		NodeList->push_back(N08);
-		NodeList->push_back(N09);
-		NodeList->push_back(N10);
-		NodeList->push_back(N11);
-		NodeList->push_back(N12);
+		NodeList->Add(N01);
+		NodeList->Add(N02);
+		NodeList->Add(N03);
+		NodeList->Add(N04);
+		NodeList->Add(N05);
+		NodeList->Add(N06);
+		NodeList->Add(N07);
+		NodeList->Add(N08);
+		NodeList->Add(N09);
+		NodeList->Add(N10);
+		NodeList->Add(N11);
+		NodeList->Add(N12);
 
 		TElementList *ElementList = new TElementList();
 
 		Triangulate(NodeList, ElementList, 8);
 
-		if (ElementList->size() != 16)	printf("Failed\n");
-		else							printf("Pass\n");
+		if (ElementList->size() != 16)		printf("Failed\n");
+		else if (NodeList->size() != 12)	printf("Failed\n");
+		else								printf("Pass\n");
 
 		delete ElementList;
 		delete NodeList;
 	}
 
 	{
-		printf ("Test Triangulierung 156249 Knoten:                                   ");
+		printf ("Test Triangulierung 114 Knoten:                                      ");
 
 		TNodeList *NodeList = new TNodeList();
 		TElementList *ElementList = new TElementList();
 
-		LoadDGM(DGMFILE, NodeList, ElementList, 0, 200000, 1);
+		LoadDGM(DGMFILE1, NodeList, ElementList, 0, 200000, 1);
 
-		Triangulate(NodeList, ElementList, 1);
+		Triangulate(NodeList, ElementList, 8);
 
-		if (ElementList->size() != 311860)	printf("Failed\n");
+		if (ElementList->size() != 218)		printf("Failed\n");
+		else if (NodeList->size() != 114)	printf("Failed\n");
 		else								printf("Pass\n");
 
-// SaveNet("test_tri.2dm", NodeList, ElementList, 8);
+		delete ElementList;
+		delete NodeList;
+	}
 
+	{
+		printf ("Test Triangulierung 1126 Knoten:                                     ");
+
+		TNodeList *NodeList = new TNodeList();
+		TElementList *ElementList = new TElementList();
+
+		LoadDGM(DGMFILE4, NodeList, ElementList, 0, 200000, 1);
+
+		Triangulate(NodeList, ElementList, 8);
+
+		if (ElementList->size() != 2224)	printf("Failed\n");
+		else if (NodeList->size() != 1126)	printf("Failed\n");
+		else								printf("Pass\n");
+
 		delete ElementList;
 		delete NodeList;
 	}
 
+	{
+		printf ("Test Triangulierung 43332 Knoten:                                    ");
+
+		TNodeList *NodeList = new TNodeList();
+		TElementList *ElementList = new TElementList();
+
+		LoadDGM(DGMFILE5, NodeList, ElementList, 0, 200000, 1);
+
+		Triangulate(NodeList, ElementList, 8);
+
+		if (ElementList->size() != 86563)	printf("Failed\n");
+		else if (NodeList->size() != 43332)	printf("Failed\n");
+		else								printf("Pass\n");
+
+		delete ElementList;
+		delete NodeList;
+	}
+
+	{
+		printf ("Test Triangulierung 71250 Knoten:                                    ");
+
+		TNodeList *NodeList = new TNodeList();
+		TElementList *ElementList = new TElementList();
+
+		LoadDGM(DGMFILE2, NodeList, ElementList, 0, 200000, 1);
+
+		Triangulate(NodeList, ElementList, 8);
+
+		if (ElementList->size() != 141432)	printf("Failed\n");
+		else if (NodeList->size() != 71250)	printf("Failed\n");
+		else								printf("Pass\n");
+
+		delete ElementList;
+		delete NodeList;
+	}
+
+	{
+		printf ("Test Triangulierung 156249 Knoten:                                   ");
+
+		TNodeList *NodeList = new TNodeList();
+		TElementList *ElementList = new TElementList();
+
+		LoadDGM(DGMFILE6, NodeList, ElementList, 0, 200000, 1);
+
+		long MinX = NodeList->MinX;
+		long MaxX = NodeList->MaxX;
+		long MinY = NodeList->MinY;
+		long MaxY = NodeList->MaxY;
+
+		double cx1, cy1, cr1;
+		double cx2, cy2, cr2;
+		double cx3, cy3, cr3;
+		double cx4, cy4, cr4;
+		CircumCircle(MinX, MinY, MinX, MaxY, MaxX, MinY, &cx1, &cy1, &cr1);
+		CircumCircle(MinX, MinY, MaxX, MaxY, MaxX, MinY, &cx2, &cy2, &cr2);
+		CircumCircle(MinX, MaxY, MaxX, MaxY, MaxX, MinY, &cx3, &cy3, &cr3);
+		CircumCircle(MinX, MaxY, MaxX, MaxY, MinX, MinY, &cx4, &cy4, &cr4);
+
+		double SX = cx1;
+		double SY = cy1;
+		double SR = cr1;
+		if (cr2 > SR)
+		{
+			SX = cx2;
+			SY = cy2;
+			SR = cr2;
+		}
+		if (cr3 > SR)
+		{
+			SX = cx3;
+			SY = cy3;
+			SR = cr3;
+		}
+		if (cr4 > SR)
+		{
+			SX = cx4;
+			SY = cy4;
+			SR = cr4;
+		}
+
+		SR = sqrt(SR) + 10;
+
+		unsigned int Anz = 20;
+
+		Triangulate(NodeList, ElementList, 8, Anz, SX, SY, SR);
+
+		if (ElementList->size() != 312515)		printf("Failed\n");
+		else if (NodeList->size() != 156269)	printf("Failed\n");
+		else									printf("Pass\n");
+
+		delete ElementList;
+		delete NodeList;
+	}
+
 	printf ("*************************************************************************\n");
 }

Modified: trunk/src/test_xy.cpp
===================================================================
--- trunk/src/test_xy.cpp	2006-05-26 05:12:48 UTC (rev 49)
+++ trunk/src/test_xy.cpp	2006-06-04 23:49:03 UTC (rev 50)
@@ -36,23 +36,36 @@
 	////////////////////////////////////////
 
 	{
+		printf ("Test XY-Punkte Speicherung:                                          ");
+
+		TXY *Xy = new TXY(999999999, 999999999);
+
+		if (Xy->X != 999999999 || Xy->Y != 999999999)		printf("Failed\n");
+		else												printf("Pass\n");
+	}
+
+	////////////////////////////////////////
+	// Zuerst TXY
+	////////////////////////////////////////
+
+	{
 		printf ("Test XY-Punkte:                                                      ");
 
-		TXY *P11 = new TXY(1.0, 1.0);
-		TXY *P12 = new TXY(9.0, 1.0);
-		TXY *P13 = new TXY(9.0, 9.0);
-		TXY *P14 = new TXY(1.0, 9.0);
-		TXY *P15 = new TXY(4.0, 9.0);
-		TXY *P16 = new TXY(7.0, 9.0);
-		TXY *P17 = new TXY(7.0, 7.0);
+		TXY *P11 = new TXY(1, 1);
+		TXY *P12 = new TXY(9, 1);
+		TXY *P13 = new TXY(9, 9);
+		TXY *P14 = new TXY(1, 9);
+		TXY *P15 = new TXY(4, 9);
+		TXY *P16 = new TXY(7, 9);
+		TXY *P17 = new TXY(7, 7);
 		// XSumme = 38, YSumme = 45
 
 		// XSumme = 24, YSumme = 25
-		TXY *P21 = new TXY(3.0, 4.0);
-		TXY *P22 = new TXY(7.0, 4.0);
-		TXY *P23 = new TXY(7.0, 6.0);
-		TXY *P24 = new TXY(3.0, 6.0);
-		TXY *P25 = new TXY(4.0, 5.0);
+		TXY *P21 = new TXY(3, 4);
+		TXY *P22 = new TXY(7, 4);
+		TXY *P23 = new TXY(7, 6);
+		TXY *P24 = new TXY(3, 6);
+		TXY *P25 = new TXY(4, 5);
 		// XSumme = 62, YSumme = 70
 
 		// XSumme = 3, YSumme = 4
@@ -117,264 +130,155 @@
 		}
 
 		if (PL1->size() != 7 || PL2->size() != 5 || PL3->size() != 6)	printf("Failed\n");
-		else if (XSumme != 89 || YSumme != 99)							printf("Failed\n");
-		else															printf("Pass\n");
-	}
+		else if (XSumme != 89 || YSumme != 99)					   		printf("Failed\n");
+		else														  	printf("Pass\n");
 
-
-/*
-	////////////////////////////////////////
-	// XErgebnisPolygone
-	////////////////////////////////////////
-
-	printf ("Test XY-Punkt-Liste: ");
-
-	// Jetzt zwei leere PolyliniePolygone generieren
-	TErgebnisPolygon *EP1 = new TErgebnisPolygon(0.0);
-	TErgebnisPolygon *EP2 = new TErgebnisPolygon(0.0);
-
-	// Ein paar Punkte zur ersten Polylinie zuweisen
-	EP1->push_back(P11);
-	EP1->push_back(P12);
-	EP1->push_back(P13);
-	EP1->push_back(P14);
-	EP1->push_back(P15);
-	EP1->push_back(P16);
-	EP1->push_back(P17);
-
-	// Ein paar Punkte zur zweiten Polylinie zuweisen
-	EP2->push_back(P21);
-	EP2->push_back(P22);
-	EP2->push_back(P23);
-	EP2->push_back(P24);
-	EP2->push_back(P25);
-
-	// Eine leere Liste von Polylinien generieren
-	TErgebnisPolygonList *EPL1 = new TErgebnisPolygonList();
-
-	// Die Polylinien zuweisen
-	EPL1->push_back(EP1);
-	EPL1->push_back(EP2);
-
-	printf("\nEine Ergebnispolygon-Liste wurde erzeugt\n\n");
-
-	// Alles ausgeben
-	printf("Anzahl Polygone in PolygonList 1: %d\n", EPL1->size());
-	for (unsigned int i=0; i<EPL1->size(); i++)
-	{
-		TXYList *PL = (*EPL1)[i];
-
-		printf("Anzahl Punktepaare in Polygon %d: %d\n", i, PL->size());
-
-		for (unsigned int j=0; j<PL->size(); j++)
-		{
-			TXY *XY = (*PL)[j];
-
-			printf("Koordinaten von Punkt %d: %.3f,%.3f\n", j, XY->X, XY->Y);
-		}
+		delete PL1;
+		delete PL2;
+		delete PL3;
 	}
 
-	// Alle Polylinien verdoppeln
-	// Dabei werden alle Polylinien und Punkte in der Liste mit verdoppelt
-	TErgebnisPolygonList *EPL2 = EPL1->Copy();
-
-	printf("\nDie PolygonListe wurde verdoppelt\n\n");
-
-	// Wieder alle ausgeben
-	printf("Anzahl Polygone in PolygonList 2: %d\n", EPL2->size());
-	for (unsigned int i=0; i<EPL2->size(); i++)
 	{
-		TXYList *PL = (*EPL2)[i];
+		////////////////////////////////////////
+		// XErgebnisPolygone 1
+		////////////////////////////////////////
 
-		printf("Anzahl Punktepaare in Polygon %d: %d\n", i, PL->size());
+		printf ("Test XY-Punkt-Liste:                                                 ");
 
-		for (unsigned int j=0; j<PL->size(); j++)
-		{
-			TXY *XY = (*PL)[j];
+		TXY *P11 = new TXY(1, 1);
+		TXY *P12 = new TXY(9, 1);
+		TXY *P13 = new TXY(9, 9);
+		TXY *P14 = new TXY(1, 9);
+		TXY *P15 = new TXY(4, 9);
+		TXY *P16 = new TXY(7, 9);
+		TXY *P17 = new TXY(7, 7);
+		// XSumme = 38, YSumme = 45
 
-			printf("Koordinaten von Punkt %d: %.3f,%.3f\n", j, XY->X, XY->Y);
-		}
-	}
+		// XSumme = 24, YSumme = 25
+		TXY *P21 = new TXY(3, 4);
+		TXY *P22 = new TXY(7, 4);
+		TXY *P23 = new TXY(7, 6);
+		TXY *P24 = new TXY(3, 6);
+		TXY *P25 = new TXY(4, 5);
+		// XSumme = 62, YSumme = 70
 
-	// Die erste Polylinie der zweiten Liste ermitteln
-	TErgebnisPolygon *PL = EPL2->First();
+		// Jetzt zwei leere PolyliniePolygone generieren
+		TErgebnisPolygon *EP1 = new TErgebnisPolygon(0.0);
+		TErgebnisPolygon *EP2 = new TErgebnisPolygon(0.0);
 
-	printf("\nDie erste Polylinie der 2. PolygonListe wurde ermittelt\n\n");
+		// Ein paar Punkte zur ersten Polylinie zuweisen
+		EP1->push_back(P11);
+		EP1->push_back(P12);
+		EP1->push_back(P13);
+		EP1->push_back(P14);
+		EP1->push_back(P15);
+		EP1->push_back(P16);
+		EP1->push_back(P17);
 
-	// Von dieser Polylinie alle Punkte ausgeben
-	printf("Anzahl Punktepaare im ersten Polygon von PolygonList 2: %d\n", PL->size());
-	for (unsigned int j=0; j<PL->size(); j++)
-	{
-		TXY *XY = (*PL)[j];
+		// Ein paar Punkte zur zweiten Polylinie zuweisen
+		EP2->push_back(P21);
+		EP2->push_back(P22);
+		EP2->push_back(P23);
+		EP2->push_back(P24);
+		EP2->push_back(P25);
 
-		printf("Koordinaten von Punkt %d: %.3f,%.3f\nXYKombi: %s\n", j, XY->X, XY->Y, UnsignedInt64ToDez(XY->XYKombi).c_str());
-	}
+		// Eine leere Liste von Polylinien generieren
+		TErgebnisPolygonList *EPL1 = new TErgebnisPolygonList();
 
-	PL->SortByXY();
+		// Die Polylinien zuweisen
+		EPL1->push_back(EP1);
+		EPL1->push_back(EP2);
 
-	printf("\nDie erste Polylinien der 2. PolygonListe wurde sortiert\n\n");
-
-	// Von dieser Polylinie alle Punkte ausgeben
-	printf("Anzahl Punktepaare im ersten Polygon von PolygonList 2: %d\n", PL->size());
-	for (unsigned int j=0; j<PL->size(); j++)
-	{
-		TXY *XY = (*PL)[j];
-
-		printf("Koordinaten von Punkt %d: %.3f,%.3f\nXYKombi: %s\n", j, XY->X, XY->Y, UnsignedInt64ToDez(XY->XYKombi).c_str());
-	}
-
-
-	printf("\nSuchen wird getestet\n\n");
-
-	TXY *XYS = (*PL)[2];
-	TXY *XYF = PL->FindByXY(XYS->X, XYS->Y);
-	if (XYF == 0)	printf("Punkt %d: %.3f,%.3f nicht gefunden\n", 2, XYS->X, XYS->Y);
-	else            printf("Punkt %d: %.3f,%.3f gefunden\n", 2, XYF->X, XYF->Y);
-
-	XYS = (*PL)[0];
-	XYF = PL->FindByXY(XYS->X, XYS->Y);
-	if (XYF == 0)	printf("Punkt %d: %.3f,%.3f nicht gefunden\n", 0, XYS->X, XYS->Y);
-	else         	printf("Punkt %d: %.3f,%.3f gefunden\n", 0, XYF->X, XYF->Y);
-
-	XYS = new TXY(9.0, 9.0);
-	XYF = PL->FindByXY(XYS->X, XYS->Y);
-	if (XYF == 0)	printf("Punkt mit den Koordinaten %.3f,%.3f nicht gefunden\n", XYS->X, XYS->Y);
-	else         	printf("Punkt mit den Koordinaten %.3f,%.3f gefunden\n", XYF->X, XYF->Y);
-	delete XYS;
-
-	XYS = new TXY(4.0, 7.0);
-	XYF = PL->FindByXY(XYS->X, XYS->Y);
-	if (XYF == 0)	printf("Punkt mit den Koordinaten %.3f,%.3f nicht gefunden\n", XYS->X, XYS->Y);
-	else         	printf("Punkt mit den Koordinaten %.3f,%.3f gefunden\n", XYF->X, XYF->Y);
-	delete XYS;
-
-
-	// Die erste Liste von Polylinien komplett löschen
-	delete EPL1;
-	EPL1 = 0;
-
-	printf("\nNach dem 'Löschen' von PolygonList 1\n\n");
-
-	// Wieder alle ausgeben
-	printf("Anzahl Polygone in PolygonList 2: %d\n", EPL2->size());
-	for (unsigned int i=0; i<EPL2->size(); i++)
-	{
-		TXYList *PL = (*EPL2)[i];
-
-		printf("Anzahl Punktepaare in Polygon %d: %d\n", i, PL->size());
-
-		for (unsigned int j=0; j<PL->size(); j++)
+		int Anz1 = 0;
+		for (unsigned int i=0; i<EPL1->size(); i++)
 		{
-			TXY *XY = (*PL)[j];
+			TXYList *PL = (*EPL1)[i];
 
-			printf("Koordinaten von Punkt %d: %.3f,%.3f\n", j, XY->X, XY->Y);
+			Anz1 = Anz1 + PL->size();
 		}
-	}
 
-	// Die zweite Liste leeren, die Liste selbst bleibt bestehen
-	// Dabei werden auch alle Elemente in der Liste freigegeben (Polylinien und Punkte)
-	EPL2->Clear();
+		if (EPL1->size() != 2)		printf("Failed\n");
+		else if (Anz1 != 12)		printf("Failed\n");
+		else						printf("Pass\n");
 
-	printf("\nNach dem 'Clearen' von PolygonList 2\n\n");
+		////////////////////////////////////////
+		// XErgebnisPolygone 2
+		////////////////////////////////////////
 
-	// Wieder alle ausgeben
-	printf("Anzahl Polygone in PolygonList 2: %d\n", EPL2->size());
-	for (unsigned int i=0; i<EPL2->size(); i++)
-	{
-		TXYList *PL = (*EPL2)[i];
+		printf ("Test XY-Punkt-Liste kopieren:                                        ");
 
-		printf("Anzahl Punktepaare in Polygon %d: %d\n", i, PL->size());
+		// Alle Polylinien kopieren
+		// Dabei werden alle Polylinien und Punkte in der Liste mit verdoppelt
+		TErgebnisPolygonList *EPL2 = EPL1->Copy();
 
-		for (unsigned int j=0; j<PL->size(); j++)
+		int Anz2 = 0;
+		for (unsigned int i=0; i<EPL2->size(); i++)
 		{
-			TXY *XY = (*PL)[j];
+			TXYList *PL = (*EPL2)[i];
 
-			printf("Koordinaten von Punkt %d: %.3f,%.3f\n", j, XY->X, XY->Y);
+			Anz2 = Anz2 + PL->size();
 		}
-	}
 
-	// Die zweite Liste von Polylinien komplett löschen
-	// Dabei werden auch alle Elemente in der Liste freigegeben (Polylinien und Punkte)
-	delete EPL2;
-	EPL2 = 0;
+		if (EPL2->size() != 2)		printf("Failed\n");
+		else if (Anz2 != 12)		printf("Failed\n");
+		else						printf("Pass\n");
 
+		////////////////////////////////////////
+		// XErgebnisPolygone 3
+		////////////////////////////////////////
 
-/////////////////////////////////////////////
-	// Jetzt der Node Teil
-	/////////////////////////////////////////////
+		printf ("Test XY-Punkt-Liste First:                                           ");
 
-	printf("\nNode nach XY sortieren wird getestet\n\n");
+		// Die erste Polylinie der zweiten Liste ermitteln
+		TErgebnisPolygon *PL = EPL2->First();
 
-	NL1->SortByXY();
+		TXY *XY = (*PL)[0];
 
-	printf("Anzahl Punktepaare in 3D-PunkteListe: %d\n", NL1->size());
-	for (unsigned int j=0; j<NL1->size(); j++)
-	{
-		TNode *Node = (*NL1)[j];
-		printf("Koordinaten von Knoten %d: %d, %.3f,%.3f,%.3f\nXYKombi: %s\n", j, Node->Nr, Node->X, Node->Y, Node->Z, UnsignedInt64ToDez(Node->XYKombi).c_str());
-	}
+		if (PL->size() != 7)		printf("Failed\n");
+		else if (XY->X  != 1)		printf("Failed\n");
+		else if (XY->Y  != 1)		printf("Failed\n");
+		else						printf("Pass\n");
 
-	printf("\nNode Suchen XY wird getestet\n\n");
+		////////////////////////////////////////
+		// XErgebnisPolygone 3
+		////////////////////////////////////////
 
-	TNode *NodeS = (*NL1)[3];
-	TNode *NodeF = NL1->FindByXY(NodeS->X, NodeS->Y);
-	if (NodeF == 0)	printf("Knoten %d: %d, %.3f,%.3f,%.3f nicht gefunden\n", 3, NodeS->Nr, NodeS->X, NodeS->Y, NodeS->Z);
-	else            printf("Knoten %d: %d, %.3f,%.3f,%.3f gefunden\n", 3, NodeF->Nr, NodeF->X, NodeF->Y, NodeF->Z);
+		printf ("Test XY-Punkt-Suchen:                                                ");
 
-	NodeS = (*NL1)[0];
-	NodeF = NL1->FindByXY(NodeS->X, NodeS->Y);
-	if (NodeF == 0)	printf("Knoten %d: %d, %.3f,%.3f,%.3f nicht gefunden\n", 0, NodeS->Nr, NodeS->X, NodeS->Y, NodeS->Z);
-	else            printf("Knoten %d: %d, %.3f,%.3f,%.3f gefunden\n", 0, NodeF->Nr, NodeF->X, NodeF->Y, NodeF->Z);
+		PL->SortByXY();
 
-	NodeS = new TNode(4, 9.0, 9.0, 1.0);
-	NodeF = NL1->FindByXY(NodeS->X, NodeS->Y);
-	if (NodeF == 0)	printf("Knoten mit den Werten %d, %.3f,%.3f,%.3f nicht gefunden\n", NodeS->Nr, NodeS->X, NodeS->Y, NodeS->Z);
-	else            printf("Knoten mit den Werten %d, %.3f,%.3f,%.3f gefunden\n", NodeF->Nr, NodeF->X, NodeF->Y, NodeF->Z);
-	delete NodeS;
+		TXY *XYS1 = (*PL)[2];
+		TXY *XYF1 = PL->FindByXY(XYS1->X, XYS1->Y);
 
-	NodeS = new TNode(1, 4.0, 7.0, 2.0);
-	NodeF = NL1->FindByXY(NodeS->X, NodeS->Y);
-	if (NodeF == 0)	printf("Knoten mit den Werten %d, %.3f,%.3f,%.3f nicht gefunden\n", NodeS->Nr, NodeS->X, NodeS->Y, NodeS->Z);
-	else            printf("Knoten mit den Werten %d, %.3f,%.3f,%.3f gefunden\n", NodeF->Nr, NodeF->X, NodeF->Y, NodeF->Z);
-	delete NodeS;
+		TXY *XYS2 = (*PL)[0];
+		TXY *XYF2 = PL->FindByXY(XYS2->X, XYS2->Y);
 
+		TXY *XYS3 = new TXY(9, 9);
+		TXY *XYF3 = PL->FindByXY(XYS3->X, XYS3->Y);
 
-	printf("\nNode nach Nr sortieren wird getestet\n\n");
+		TXY *XYS4 = new TXY(4, 7);
+		TXY *XYF4 = PL->FindByXY(XYS4->X, XYS4->Y);
 
-	NL1->SortByNr();
+		if (XYF1 == 0)					printf("Failed\n");
+		else if (XYF1->X != XYS1->X)	printf("Failed\n");
+		else if (XYF1->Y != XYS1->Y)	printf("Failed\n");
+		else if (XYF2 == 0)				printf("Failed\n");
+		else if (XYF2->X != XYS2->X)	printf("Failed\n");
+		else if (XYF2->Y != XYS2->Y)	printf("Failed\n");
+		else if (XYF3 == 0)				printf("Failed\n");
+		else if (XYF3->X != XYS3->X)	printf("Failed\n");
+		else if (XYF3->Y != XYS3->Y)	printf("Failed\n");
+		else if (XYF4 != 0)				printf("Failed\n");
+		else							printf("Pass\n");
 
-	printf("Anzahl Punktepaare in 3D-PunkteListe: %d\n", NL1->size());
-	for (unsigned int j=0; j<NL1->size(); j++)
-	{
-		TNode *Node = (*NL1)[j];
-		printf("Koordinaten von Knoten %d: %d, %.3f,%.3f,%.3f\nXYKombi: %s\n", j, Node->Nr, Node->X, Node->Y, Node->Z, UnsignedInt64ToDez(Node->XYKombi).c_str());
+		delete XYS3;
+		delete XYS4;
+
+		delete EPL1;
+		delete EPL2;
 	}
 
-	printf("\nNode Suchen Nr wird getestet\n\n");
-
-	NodeS = (*NL1)[3];
-	NodeF = NL1->FindByNr(NodeS->Nr);
-	if (NodeF == 0)	printf("Knoten %d: %d, %.3f,%.3f,%.3f nicht gefunden\n", 3, NodeS->Nr, NodeS->X, NodeS->Y, NodeS->Z);
-	else            printf("Knoten %d: %d, %.3f,%.3f,%.3f gefunden\n", 3, NodeF->Nr, NodeF->X, NodeF->Y, NodeF->Z);
-
-	NodeS = (*NL1)[0];
-	NodeF = NL1->FindByNr(NodeS->Nr);
-	if (NodeF == 0)	printf("Knoten %d: %d, %.3f,%.3f,%.3f nicht gefunden\n", 0, NodeS->Nr, NodeS->X, NodeS->Y, NodeS->Z);
-	else            printf("Knoten %d: %d, %.3f,%.3f,%.3f gefunden\n", 0, NodeF->Nr, NodeF->X, NodeF->Y, NodeF->Z);
-
-	NodeS = new TNode(7, 9.0, 9.0, 1.0);
-	NodeF = NL1->FindByNr(NodeS->Nr);
-	if (NodeF == 0)	printf("Knoten mit den Werten %d, %.3f,%.3f,%.3f nicht gefunden\n", NodeS->Nr, NodeS->X, NodeS->Y, NodeS->Z);
-	else            printf("Knoten mit den Werten %d, %.3f,%.3f,%.3f gefunden\n", NodeF->Nr, NodeF->X, NodeF->Y, NodeF->Z);
-	delete NodeS;
-
-	NodeS = new TNode(10, 4.0, 7.0, 2.0);
-	NodeF = NL1->FindByNr(NodeS->Nr);
-	if (NodeF == 0)	printf("Knoten mit den Werten %d, %.3f,%.3f,%.3f nicht gefunden\n", NodeS->Nr, NodeS->X, NodeS->Y, NodeS->Z);
-	else            printf("Knoten mit den Werten %d, %.3f,%.3f,%.3f gefunden\n", NodeF->Nr, NodeF->X, NodeF->Y, NodeF->Z);
-	delete NodeS;
-
-
+/*
 	/////////////////////////////////////////////
 	// Jetzt der Edge Teil
 	/////////////////////////////////////////////

Modified: trunk/src/tools.cpp
===================================================================
--- trunk/src/tools.cpp	2006-05-26 05:12:48 UTC (rev 49)
+++ trunk/src/tools.cpp	2006-06-04 23:49:03 UTC (rev 50)
@@ -331,33 +331,33 @@
 }
 
 //---------------------------------------------------------------------------
-long double CrossProduct(TNode *n1, TNode *n2, TNode *n3)
+long double CrossProduct(double X1, double Y1, double X2, double Y2, double X3, double Y3)
 {
-	long double Dx1 =  n2->X - n1->X;
-	long double Dy1 =  n2->Y - n1->Y;
-	long double Dx2 =  n3->X - n1->X;
-	long double Dy2 =  n3->Y - n1->Y;
+	long double Dx1 =  X2 - X1;
+	long double Dy1 =  Y2 - Y1;
+	long double Dx2 =  X3 - X1;
+	long double Dy2 =  Y3 - Y1;
 
 	return (Dx1 * Dy2 - Dy1 * Dx2);
 }
 
 //---------------------------------------------------------------------------
-bool CircumCircle(TNode *n1, TNode *n2, TNode *n3, double *CX, double *CY, double *CR)
+bool CircumCircle(double X1, double Y1, double X2, double Y2, double X3, double Y3, double *CX, double *CY, double *CR)
 {
-	long double cp = CrossProduct(n1, n2, n3);
+	long double cp = CrossProduct(X1, Y1, X2, Y2, X3, Y3);
 
 	if (cp != 0.0)
 	{
-		long double n1Sq = n1->X * n1->X + n1->Y * n1->Y;
-		long double n2Sq = n2->X * n2->X + n2->Y * n2->Y;
-		long double n3Sq = n3->X * n3->X + n3->Y * n3->Y;
-		long double numx = n1Sq * (n2->Y - n3->Y) + n2Sq * (n3->Y - n1->Y) + n3Sq * (n1->Y - n2->Y);
+		long double n1Sq = X1 * X1 + Y1 * Y1;
+		long double n2Sq = X2 * X2 + Y2 * Y2;
+		long double n3Sq = X3 * X3 + Y3 * Y3;
+		long double numx = n1Sq * (Y2 - Y3) + n2Sq * (Y3 - Y1) + n3Sq * (Y1 - Y2);
 		long double x = numx / (2.0 * cp);
-		long double numy = n1Sq * (n3->X - n2->X) + n2Sq * (n1->X - n3->X) + n3Sq * (n2->X - n1->X);
+		long double numy = n1Sq * (X3 - X2) + n2Sq * (X1 - X3) + n3Sq * (X2 - X1);
 		long double y = numy / (2.0 * cp);
 
-		long double dx = n3->X - x;
-		long double dy = n3->Y - y;
+		long double dx = X3 - x;
+		long double dy = Y3 - y;
 
 		*CX = x;
 		*CY = y;
@@ -731,7 +731,7 @@
 				TNode *Node1 = Element->Node1;
 				if (Node1->Nr != 0)
 				{
-					TNode *Node2 = NodeList->FindByXY(Node1->X, Node1->Y, 0.01);
+					TNode *Node2 = NodeList->FindByXY(Node1->X, Node1->Y);
 
 					if (Node2->Nr != 0)
 					{
@@ -762,7 +762,7 @@
 				Node1 = Element->Node2;
 				if (Node1->Nr != 0)
 				{
-					TNode *Node2 = NodeList->FindByXY(Node1->X, Node1->Y, 0.01);
+					TNode *Node2 = NodeList->FindByXY(Node1->X, Node1->Y);
 
 					if (Node2->Nr != 0)
 					{
@@ -792,7 +792,7 @@
 				Node1 = Element->Node3;
 				if (Node1->Nr != 0)
 				{
-					TNode *Node2 = NodeList->FindByXY(Node1->X, Node1->Y, 0.01);
+					TNode *Node2 = NodeList->FindByXY(Node1->X, Node1->Y);
 
 					if (Node2->Nr != 0)
 					{
@@ -886,8 +886,15 @@
 		for (TNodeList::iterator i = NodeList->begin(); i != NodeList->end(); i++)
 		{
 			TNode *Node1 = *i;
-			TNode *Node2 = NodeList->FindByXY(Node1->X, Node1->Y, 0.01);
 
+			TNode *Node2 = NodeList->FindByXY(Node1->X, Node1->Y);
+
+			if (0 == Node2)
+			{
+				dump_error(__FILE__, __LINE__, "Knoten %d (%.4f,%.4f) wurde nicht gefunden\n", Node1->Nr, Node1->X, Node1->Y);
+			}
+
+
 			if (Node1->Nr != Node2->Nr)
 			{
 				NodeList->erase(i);
@@ -1073,12 +1080,12 @@
 	if (DebugLevel >= 8)
 	{
 		Count = 0;
-		TEdgeListNrSorted::iterator i = EdgeList->EdgeListNrSorted.begin();
-		while (i != EdgeList->EdgeListNrSorted.end())
+		TEdgeVector::iterator i = EdgeList->EdgeVector.begin();
+		while (i != EdgeList->EdgeVector.end())
 		{
 			if (DebugLevel >= 9 || (DebugLevel >= 1 && Count % 10000 == 0) || (Count > 0 && Count % 100000 == 0))
 			{
-				write_fortschritt("%d von %d Kanten getestet\n", Count, EdgeList->EdgeListNrSorted.size());
+				write_fortschritt("%d von %d Kanten getestet\n", Count, EdgeList->EdgeVector.size());
 			}
 
 			TEdge *Edge = *i++;
@@ -1086,19 +1093,16 @@
 			TNode* Node1 = Edge->Node1;
 			TNode* Node2 = Edge->Node2;
 
-			int Nr1 = Node1->Nr;
-			int Nr2 = Node2->Nr;
+			TEdge* AntiEdge = EdgeList->FindWithIndex(Node2, Node1);
 
-			TEdge* AntiEdge = EdgeList->Find(Nr2, Nr1);
-
 			if (0 != AntiEdge)
 			{
-				dump_error(__FILE__, __LINE__, "Diese Kante dürfte es nicht geben");
+				dump_error(__FILE__, __LINE__, "Die Kante %d - %d dürfte es nicht geben", Node2->Nr, Node1->Nr);
 			}
 
 			Count++;
 		}
-		write_fortschritt("%d von %d Kanten getestet\n", Count, EdgeList->EdgeListNrSorted.size());
+		write_fortschritt("%d von %d Kanten getestet\n", Count, EdgeList->EdgeVector.size());
 	}
 
 	write_fortschritt ("<-Erzeugung der Kanten beendet\n");
@@ -1121,7 +1125,7 @@
 
 		std::string Gewaesser = Profil->Gewaesser;
 		int Station = Profil->Station;
-		double Wsp = Profil->Wsp;
+		int Wsp = Profil->Wsp;
 
 		if (Wsp < -9999)	continue;
 
@@ -1173,11 +1177,12 @@
 				}
 			}
 
-			double X = Point->X;
-			double Y = Point->Y;
+			long X = Point->X;
+			long Y = Point->Y;
 
-			double Z = 0.0;
-			double WspDummy = 0.0;
+			int Z = 0;
+			int WspDummy = 0;
+
 			bool Found = NodeList->Interpolate(SperrenList, X, Y, AvgDistance, &Z, &WspDummy);
 
 			if (false == Found)
@@ -1185,7 +1190,7 @@
 				// Dies bedeutet, die Profile ragen aus dem DGM raus oder die Punkte sind lokal sehr weit auseinander
 				if (DebugLevel >= 9)
 				{
-					write_warning(9999, "Für Profilpunkt (%.2f, %.2f) konnte keine Höhe interpoliert werden\n", X, Y);
+					write_warning(9999, "Für Profilpunkt (%.2f, %.2f) konnte keine Höhe interpoliert werden\n", X / 100.0, Y / 100.0);
 				}
 				continue;
 			}
@@ -1194,7 +1199,7 @@
 			{
 				NodeNr++;
 				TNode* Node = new TNode(NodeNr, X, Y, Z, Wsp);
-				ProfilNodeList->push_back(Node);
+				ProfilNodeList->Add(Node);
 			}
 			else if (Sperre)
 			{
@@ -1239,11 +1244,12 @@
 				}
 			}
 
-			double X = Point->X;
-			double Y = Point->Y;
+			long X = Point->X;
+			long Y = Point->Y;
 
-			double Z = 0.0;
-			double WspDummy = 0.0;
+			int Z = 0;
+			int WspDummy = 0;
+
 			bool Found = NodeList->Interpolate(SperrenList, X, Y, AvgDistance, &Z, &WspDummy);
 
 			if (false == Found)
@@ -1252,7 +1258,7 @@
 
 				if (DebugLevel >= 9)
 				{
-					write_warning(9999, "Für Profilpunkt (%.2f, %.2f) konnte keine Höhe interpoliert werden\n", X, Y);
+					write_warning(9999, "Für Profilpunkt (%.2f, %.2f) konnte keine Höhe interpoliert werden\n", X / 100.0, Y / 100.0);
 				}
 				continue;
 			}
@@ -1261,7 +1267,7 @@
 			{
 				NodeNr++;
 				TNode* Node = new TNode(NodeNr, X, Y, Z, Wsp);
-				ProfilNodeList->push_back(Node);
+				ProfilNodeList->Add(Node);
 			}
 			else if (Sperre)
 			{
@@ -1300,11 +1306,12 @@
 
 		TNode* Node = *i;
 
-		double X = Node->X;
-		double Y = Node->Y;
+		long X = Node->X;
+		long Y = Node->Y;
 
-		double ZDummy = 0.0;
-		double Wsp = 0.0;
+		int ZDummy = 0;
+		int Wsp = 0;
+
 		bool Found = ProfilNodeList->Interpolate(SperrenList, X, Y, AvgDistance, &ZDummy, &Wsp);
 
 		if (Found)
@@ -1316,12 +1323,12 @@
 			}
 			else
 			{
-				Node->Wsp = -9999.9;
+				Node->Wsp = -999999;
 			}
 		}
 		else
 		{
-			Node->Wsp = -9999.9;
+			Node->Wsp = -999999;
 		}
 		Count++;
 	}
@@ -1349,8 +1356,8 @@
 		TProfil* Rohr = *i;
 		TPoint* Point = *Rohr->PointList->rbegin();
 
-		double X = Point->X;
-		double Y = Point->Y;
+		long X = Point->X;
+		long Y = Point->Y;
 
 		TNodeList* FoundNodeList = NodeList->FindAllByXY(X, Y, AvgDistance);
 
@@ -1409,16 +1416,17 @@
 
 		TPoint* Point = *Rohr->PointList->begin();
 
-		double X = Point->X;
-		double Y = Point->Y;
+		long X = Point->X;
+		long Y = Point->Y;
 
-		double ZDummy = 0.0;
-		double Wsp = 0.0;
+		int ZDummy = 0;
+		int Wsp = 0;
+
 		bool Found = NodeList->Interpolate(0, X, Y, AvgDistance, &ZDummy, &Wsp);
 
 		if (Found)
 		{
-			if (DebugLevel >= 6)	write_fortschritt("Rohr %d hat Wasserstand %.3f\n", Count, Wsp);
+			if (DebugLevel >= 6)	write_fortschritt("Rohr %d hat Wasserstand %.3f\n", Count, Wsp / 100.0);
 		}
 
 		Rohr->Wsp = Wsp;
@@ -1672,9 +1680,9 @@
 static int AnzWetBoundaries = 0;
 
 //---------------------------------------------------------------------------
-bool FindFirstChangeEdge(TEdgeListNrSorted::iterator *Start, TEdgeList *EdgeList, TEdge **edge, TNode **node)
+bool FindFirstChangeEdge(TEdgeVector::iterator *Start, TEdgeList *EdgeList, TEdge **edge, TNode **node)
 {
-	for (TEdgeListNrSorted::iterator i = *Start; i != EdgeList->EdgeListNrSorted.end(); i++)
+	for (TEdgeVector::iterator i = *Start; i != EdgeList->EdgeVector.end(); i++)
 	{
 		TEdge *Edge = *i;
 
@@ -1698,7 +1706,7 @@
 			}
 		}
 	}
-	*Start = EdgeList->EdgeListNrSorted.end();
+	*Start = EdgeList->EdgeVector.end();
 
 	return (false);
 }
@@ -1713,8 +1721,8 @@
 		{
 			(*edge)->Ready = true;
 
-			double X = (*node)->X;
-			double Y = (*node)->Y;
+			long X = (*node)->X;
+			long Y = (*node)->Y;
 
 			TXY *XY = new TXY(X, Y);
 			PunktList->Add(XY);
@@ -1780,9 +1788,9 @@
 }
 
 //---------------------------------------------------------------------------
-bool FindFirstWetBoundaryEdge(TEdgeListNrSorted::iterator *Start, TEdgeList *EdgeList, TEdge **edge, TNode **node)
+bool FindFirstWetBoundaryEdge(TEdgeVector::iterator *Start, TEdgeList *EdgeList, TEdge **edge, TNode **node)
 {
-	for (TEdgeListNrSorted::iterator i = *Start; i != EdgeList->EdgeListNrSorted.end(); i++)
+	for (TEdgeVector::iterator i = *Start; i != EdgeList->EdgeVector.end(); i++)
 	{
 		TEdge *Edge = *i;
 
@@ -1798,7 +1806,7 @@
 		}
 	}
 
-	*Start = EdgeList->EdgeListNrSorted.end();
+	*Start = EdgeList->EdgeVector.end();
 
 	return (false);
 }
@@ -1835,7 +1843,7 @@
 }
 
 //---------------------------------------------------------------------------
-void NassTrockenBerechnung(TNodeList *NodeList, TEdgeList *EdgeList, TErgebnisPolygonList* ErgebnisPolygone, double Von, double Bis, double Diff, int DebugLevel)
+void NassTrockenBerechnung(TNodeList *NodeList, TEdgeList *EdgeList, TErgebnisPolygonList* ErgebnisPolygone, int Von, int Bis, int Diff, int DebugLevel)
 {
 	write_fortschritt("->Ermittlung der Überschwemmungsgrenzen gestartet\n");
 
@@ -1846,11 +1854,11 @@
 		dump_error(__FILE__, __LINE__, "Diff ist kleiner gleich Null");
 	}
 
-	for (double DeltaTopo = Von; DeltaTopo <= Bis; DeltaTopo = DeltaTopo + Diff)
+	for (int DeltaTopo = Von; DeltaTopo <= Bis; DeltaTopo = DeltaTopo + Diff)
 	{
 		AnzWetBoundaries = 0;
 
-		write_fortschritt("Wasserstand %.3f zwischen %.3f und %.3f wird bearbeitet\n", DeltaTopo, Von, Bis);
+		write_fortschritt("Wasserstand %.3f zwischen %.3f und %.3f wird bearbeitet\n", DeltaTopo / 100.0, Von / 100.0, Bis / 100.0);
 
 		// Zuerst alles wieder wie gehabt einstellen
 		// Bloss das die Topographie etwas angehoben wird
@@ -1924,7 +1932,7 @@
 		// Die Kanten bestimmen, die an einem Ende einen nassen und am anderen Ende einen trockenen Knoten haben
 		// Dies ist die Anfangskanten
 		TEdgeList *Temp2EdgeList = new TEdgeList();
-		for (TEdgeListNrSorted::iterator i = EdgeList->EdgeListNrSorted.begin(); i != EdgeList->EdgeListNrSorted.end(); i++)
+		for (TEdgeVector::iterator i = EdgeList->EdgeVector.begin(); i != EdgeList->EdgeVector.end(); i++)
 		{
 			TEdge *Edge = *i;
 
@@ -1954,7 +1962,7 @@
 			TempEdgeList->Empty();
 
 			// Alle bisher ermittelten Wechsel-Kanten übertragen
-			for (TEdgeListNrSorted::iterator i = Temp2EdgeList->EdgeListNrSorted.begin(); i != Temp2EdgeList->EdgeListNrSorted.end(); i++)
+			for (TEdgeVector::iterator i = Temp2EdgeList->EdgeVector.begin(); i != Temp2EdgeList->EdgeVector.end(); i++)
 			{
 				TEdge *Edge = *i;
 
@@ -1973,7 +1981,7 @@
 			Temp2EdgeList->Empty();
 
 			Changed = 0;
-			for (TEdgeListDistanceSorted::iterator i = TempEdgeList->EdgeListDistanceSorted.begin(); i != TempEdgeList->EdgeListDistanceSorted.end(); i++)
+			for (TEdgeVector::iterator i = TempEdgeList->EdgeVector.begin(); i != TempEdgeList->EdgeVector.end(); i++)
 			{
 				TEdge *Edge = *i;
 
@@ -1993,8 +2001,9 @@
 					{
 						TEdgeIndex *NextEdgeIndex = AktEdgeIndex->NextEdgeIndex;
 
-//						Temp2EdgeList->Add(new TEdge(AktEdgeIndex->Edge));
-						if (0 == Temp2EdgeList->Find(AktEdgeIndex->Edge)) Temp2EdgeList->Add(AktEdgeIndex->Edge);
+// Hier war eine ganze Zeit die erste Zeile auskommentiert und die zweite nicht
+						Temp2EdgeList->Add(new TEdge(AktEdgeIndex->Edge));
+//						if (0 == Temp2EdgeList->Find(AktEdgeIndex->Edge)) Temp2EdgeList->Add(AktEdgeIndex->Edge);
 
 						AktEdgeIndex = NextEdgeIndex;
 					}
@@ -2017,8 +2026,9 @@
 					{
 						TEdgeIndex *NextEdgeIndex = AktEdgeIndex->NextEdgeIndex;
 
-//						Temp2EdgeList->Add(new TEdge(AktEdgeIndex->Edge));
-						if (0 == Temp2EdgeList->Find(AktEdgeIndex->Edge)) Temp2EdgeList->Add(AktEdgeIndex->Edge);
+// Hier war eine ganze Zeit die erste Zeile auskommentiert und die zweite nicht
+						Temp2EdgeList->Add(new TEdge(AktEdgeIndex->Edge));
+//						if (0 == Temp2EdgeList->Find(AktEdgeIndex->Edge)) Temp2EdgeList->Add(AktEdgeIndex->Edge);
 
 						AktEdgeIndex = NextEdgeIndex;
 					}
@@ -2063,12 +2073,12 @@
 
 
 		//Zuerst die Übergangspunkt der Kanten löschen
-		for (TEdgeListNrSorted::iterator i = EdgeList->EdgeListNrSorted.begin(); i != EdgeList->EdgeListNrSorted.end(); i++)
+		for (TEdgeVector::iterator i = EdgeList->EdgeVector.begin(); i != EdgeList->EdgeVector.end(); i++)
 		{
 			TEdge *Edge = *i;
 
-			Edge->X = 0.0;
-			Edge->Y = 0.0;
+			Edge->X = 0;
+			Edge->Y = 0;
 			Edge->Ready = false;
 		}
 
@@ -2076,27 +2086,27 @@
 
 		// Jetzt die Nass/Trocken Übergänge bestimmen
 		int FoundWetDry = 0;
-		for (TEdgeListNrSorted::iterator i = EdgeList->EdgeListNrSorted.begin(); i != EdgeList->EdgeListNrSorted.end(); i++)
+		for (TEdgeVector::iterator i = EdgeList->EdgeVector.begin(); i != EdgeList->EdgeVector.end(); i++)
 		{
 			TEdge *Edge = *i;
 
-			double Z1 = Edge->Node1->Z;
-			double Wsp1 = Edge->Node1->Wsp;
+			int Z1 = Edge->Node1->Z;
+			int Wsp1 = Edge->Node1->Wsp;
 
-			double Z2 = Edge->Node2->Z;
-			double Wsp2 = Edge->Node2->Wsp;
+			int Z2 = Edge->Node2->Z;
+			int Wsp2 = Edge->Node2->Wsp;
 
 
 			// Testen wir mal, ob es hier einen Übergang gibt
-			if (Wsp1 - Z1 <= 0.0 && Wsp2 - Z2 > 0.0 ||
-				Wsp1 - Z1 > 0.0 &&  Wsp2 - Z2 <= 0.0)
+			if (Wsp1 - Z1 <= 0 && Wsp2 - Z2 > 0 ||
+				Wsp1 - Z1 > 0 &&  Wsp2 - Z2 <= 0)
 			{
    				double Dx = Edge->Node1->X - Edge->Node2->X;
     			double Dy = Edge->Node1->Y - Edge->Node2->Y;
 	    		double D1 = 0.0;
 		    	double D2 = 0.0;
 
-			    if (Wsp1 - Z1 <= 0.0 && Wsp2 - Z2 > 0.0)
+			    if (Wsp1 - Z1 <= 0 && Wsp2 - Z2 > 0)
    				{
     				D1 = Z1 - Wsp1;
 	    			D2 = Wsp2 - Z2;
@@ -2124,8 +2134,8 @@
                 {
                     Faktor = 0.01;
                 }
-	    	    double X = Edge->Node2->X + Dx * Faktor;
-		        double Y = Edge->Node2->Y + Dy * Faktor;
+	    	    long X = (long)(Edge->Node2->X + Dx * Faktor + 0.5);
+		        long Y = (long)(Edge->Node2->Y + Dy * Faktor + 0.5);
 
    				Edge->X = X;
     			Edge->Y = Y;
@@ -2141,7 +2151,7 @@
 		// Jetzt muss man sie nur noch verbinden
 
 		bool FoundStartChangeEdge = false;
-		TEdgeListNrSorted::iterator StartChange = EdgeList->EdgeListNrSorted.begin();
+		TEdgeVector::iterator StartChange = EdgeList->EdgeVector.begin();
 		do
 		{
 			TEdge   *Edge = 0;
@@ -2153,14 +2163,14 @@
 			{
 				TErgebnisPolygon* ErgebnisPolygon = new TErgebnisPolygon(DeltaTopo);
 
-				double X = Edge->X;
-				double Y = Edge->Y;
+				long X = Edge->X;
+				long Y = Edge->Y;
 
 				TXY *XY = new TXY(X, Y);
 				ErgebnisPolygon->Add(XY);
 
-				double Ox = X;
-				double Oy = Y;
+				long Ox = X;
+				long Oy = Y;
 
 				bool FoundChangeEdge = FindNextChangeEdge (&Edge, &Node, ErgebnisPolygon);
 
@@ -2183,7 +2193,7 @@
 
 		} while (FoundStartChangeEdge);
 
-		if (fabs(DeltaTopo - Von) < 0.001)
+		if (DeltaTopo != Von)
 		{
 			// Jetzt die Wasserstände sichern
 			TNodeList::iterator n = NodeList->begin();

Modified: trunk/src/tools.h
===================================================================
--- trunk/src/tools.h	2006-05-26 05:12:48 UTC (rev 49)
+++ trunk/src/tools.h	2006-06-04 23:49:03 UTC (rev 50)
@@ -52,8 +52,8 @@
 std::string				ExchangeFileExt(std::string FileName, std::string Ext);
 std::string				GetFilePath(std::string FileName);
 std::string				ToUpperCase(std::string InString);
-long double 		  	CrossProduct(TNode *n1, TNode *n2, TNode *n3);
-bool 					CircumCircle(TNode *n1, TNode *n2, TNode *n3, double *x, double *y, double *r);
+long double 			CrossProduct(double X1, double Y1, double X2, double Y2, double X3, double Y3);
+bool 					CircumCircle(double X1, double Y1, double X2, double Y2, double X3, double Y3, double *CX, double *CY, double *CR);
 long 					CheckSpeed(int DebugLevel);
 const char*				ShapeTypeName(TShpType ShapeType);
 const char*				ShapePartTypeName(TPartType PartType);
@@ -73,7 +73,7 @@
 void					TransferWsp(TNodeList *ProfilNodeList, TNodeList *NodeList, TProfilList* SperrenList, double AvgDistance, int DebugLevel);
 void 					TransferWsp(TProfilList *RohreList, TNodeList *NodeList, double AvgDistance, int DebugLevel);
 void 					GetWspFromNodeList(TNodeList* NodeList, TProfilList* RohreList, double AvgDistance, int DebugLevel);
-void 					NassTrockenBerechnung(TNodeList *NodeList, TEdgeList *edgelist, TErgebnisPolygonList* ErgebnisPolygone, double Von, double Bis, double Diff, int DebugLevel);
+void 					NassTrockenBerechnung(TNodeList *NodeList, TEdgeList *edgelist, TErgebnisPolygonList* ErgebnisPolygone, int Von, int Bis, int Diff, int DebugLevel);
 
 //---------------------------------------------------------------------------
 template<class TClass> int IsInside(TClass *p, double x, double y)

Modified: trunk/src/tri.cpp
===================================================================
--- trunk/src/tri.cpp	2006-05-26 05:12:48 UTC (rev 49)
+++ trunk/src/tri.cpp	2006-06-04 23:49:03 UTC (rev 50)
@@ -20,7 +20,7 @@
 #include "tools.h"
 #include "tri.h"
 
-TNode TestNode(1, 0.0, 0.0, 0.0);
+TNode TestNode(1, 0, 0, 0);
 double cx = 0;
 double cy = 0;
 double cr = 0;
@@ -78,20 +78,27 @@
 }
 
 //---------------------------------------------------------------------
-//
-// Complete a facet by looking for the circle free point to the left
-// of the edge "e_i".  Add the facet to the triangulation.
-//
-// This function is a bit long and may be better split.
-//
-//---------------------------------------------------------------------
-void CompleteFacet(TNodeList* NodeList, TElementList* ElementList, TEdgeList *TodoEdgeList, TEdgeList *ReadyEdgeList, int DebugLevel)
+unsigned int CompleteFacet(TNodeList* NodeList, TElementList* ElementList, TEdgeList *EdgeList, unsigned int AktEdgeIndex, int DebugLevel)
 {
-	TEdge* AktEdge = TodoEdgeList->First();
+	TEdge* AktEdge = EdgeList->EdgeVector[AktEdgeIndex++];
 
-	TNode *Node1 = AktEdge->Node1;
-	TNode *Node2 = AktEdge->Node2;
+	TNode *Node1 = AktEdge->Node2;
+	TNode *Node2 = AktEdge->Node1;
 
+/*
+	if (AktEdgeIndex % 100 == 0)
+	{
+		write_fortschritt("\n");
+		for (int i = AktEdgeIndex-1; i < EdgeList->EdgeVector.size(); i++)
+		{
+			TEdge* E = EdgeList->EdgeVector[i];
+			write_fortschritt("%5d %5d  %5d - %5d\n", AktEdgeIndex-1, i, E->Node1->Nr, E->Node2->Nr);
+		}
+	}
+*/
+
+	if (EdgeList->FindWithIndex(Node1, Node2)) return (AktEdgeIndex);
+
 	double X1 = Node1->X;
 	double Y1 = Node1->Y;
 	double X2 = Node2->X;
@@ -105,8 +112,8 @@
 	double X = (X1 + X2) / 2;
 	double Y = (Y1 + Y2) / 2;
 
-	int MaxTestWeite = 128;
-	int TestWeite = 1;
+	double MaxWeite = 256.0;
+	double TestWeite = 0.5;
 	int FoundAnz = 0;
 	do
 	{
@@ -115,13 +122,10 @@
 		double SX = X - TestWeite * Dy;
 		double SY = Y + TestWeite * Dx;
 
-		TestNode.X = SX;
-		TestNode.Y = SY;
+		CircumCircle(Node1->X, Node1->Y, Node2->X, Node2->Y, SX, SY, &cx, &cy, &cr);
 
-		CircumCircle(Node1, Node2, &TestNode, &cx, &cy, &cr);
+		FoundNodeList = NodeList->FindAllByXY(cx, cy, sqrt(cr) + 2);
 
-		FoundNodeList = NodeList->FindAllByXY(cx, cy, sqrt(cr)+0.01);
-
 		if (FoundNodeList->size() <= 2)
 		{
 			// Da waren nur die beiden Kanten-Knoten selbst drin
@@ -144,7 +148,7 @@
 			{
 				Node->Wsp = 0;
 			}
-			else if (CrossProduct(Node1, Node2, Node) < 0.0000001)
+			else if (CrossProduct(Node1->X, Node1->Y, Node2->X, Node2->Y, Node->X, Node->Y) < 0.0000001)
 			{
 				Node->Wsp = 0;
 			}
@@ -154,7 +158,7 @@
 			}
 			i++;
 		}
-	} while (FoundAnz <= 0 && TestWeite < MaxTestWeite);
+	} while (FoundAnz <= 0 && TestWeite <= MaxWeite);
 
 /*
 	// Dann versuche ich es noch mal mit allen
@@ -176,35 +180,16 @@
 
 	if (NewNode)
 	{
-		// Find best point to form a triangle
+		CircumCircle(Node1->X, Node1->Y, Node2->X, Node2->Y, NewNode->X, NewNode->Y, &cx, &cy, &cr);
 
-		CircumCircle(Node1, Node2, NewNode, &cx, &cy, &cr);
-
 		while (i != FoundNodeList->end())
 		{
-			TNode* Node = *i;
+			TNode* Node = *i++;
 
-			if (Node->Wsp < 1)
-			{
-				i++;
-				continue;
-			}
+			// Dieser Knoten durfte es nicht sein
+			// siehe oben (Wsp = 0)
+			if (Node->Wsp < 1)	continue;
 
-			if (Node->Nr == Node1->Nr || Node->Nr == Node2->Nr || Node->Nr == NewNode->Nr)
-			{
-				dump_error(__FILE__, __LINE__, "Einer der gefundenen Knoten ist einer der bereits getesteten Kantenknoten");
-			}
-
-			if (DebugLevel >= 8)
-			{
-				double CP = CrossProduct(Node1, Node2, Node);
-
-				if (CP < 0.0000001)
-				{
-					dump_error(__FILE__, __LINE__, "Einer der gefundenen Knoten ist auf der falschen Seite");
-				}
-			}
-
 			double X = Node->X;
 			double Y = Node->Y;
 
@@ -212,50 +197,46 @@
 			double Dy = cy - Y;
 
 			// Liegt er im Umkreis ?
-			if (Dx * Dx + Dy * Dy < cr - 0.1)
+			if (Dx * Dx + Dy * Dy < cr - 2)
 			{
 				// Er ist deutlich dichter dran, also ist er besser
 				NewNode = Node;
-				CircumCircle(Node1, Node2, NewNode, &cx, &cy, &cr);
-				i++;
+				CircumCircle(Node1->X, Node1->Y, Node2->X, Node2->Y, NewNode->X, NewNode->Y, &cx, &cy, &cr);
 				continue;
 			}
 
-			if (Dx * Dx + Dy * Dy > cr + 0.1)
+			if (Dx * Dx + Dy * Dy > cr + 2)
 			{
 				// Er ist deutlich weiter weg, also brauchen wir ihn nicht weiter zu beachten
-				i++;
 				continue;
 			}
 
 			// Die beiden Knoten sind gleich oder wenigstens fast gleich gut
 			// Dann hilft nur eine andere Art der Unterscheidung
 
-			double CP = CrossProduct(Node1, NewNode, Node);
+			double CP = CrossProduct(Node1->X, Node1->Y, NewNode->X, NewNode->Y, Node->X, Node->Y);
 
 			if (CP < 0.0000001)
 			{
 				// die Diagonalen sind Node1 - Node und NewNode - Node2
 
 				// Gab es die Diagonale Node1 - Node ?
-				TEdge* Edge = ReadyEdgeList->FindWithIndex(Node1, Node);
+				TEdge* Edge = EdgeList->FindWithIndex(Node1, Node);
 
 				if (Edge)
 				{
 					// Dann müssen wir Node auch nehmen
 					NewNode = Node;
-					CircumCircle(Node1, Node2, NewNode, &cx, &cy, &cr);
-					i++;
+					CircumCircle(Node1->X, Node1->Y, Node2->X, Node2->Y, NewNode->X, NewNode->Y, &cx, &cy, &cr);
 					continue;
 				}
 
 				// Gab es schon die Diagonale NewNode - Node2 ?
-				Edge = ReadyEdgeList->FindWithIndex(NewNode, Node2);
+				Edge = EdgeList->FindWithIndex(NewNode, Node2);
 
 				// Dann müssen wir NewNode auch nehmen
 				if (Edge)
 				{
-					i++;
 					continue;
 				}
 			}
@@ -264,24 +245,22 @@
 				// die Diagonalen sind Node - Node2 und Node1 - NewNode
 
 				// Gab es die Diagonale Node - Node2 ?
-				TEdge* Edge = ReadyEdgeList->FindWithIndex(Node, Node2);
+				TEdge* Edge = EdgeList->FindWithIndex(Node, Node2);
 
 				if (Edge)
 				{
 					// Dann müssen wir Node auch nehmen
 					NewNode = Node;
-					CircumCircle(Node1, Node2, NewNode, &cx, &cy, &cr);
-					i++;
+					CircumCircle(Node1->X, Node1->Y, Node2->X, Node2->Y, NewNode->X, NewNode->Y, &cx, &cy, &cr);
 					continue;
 				}
 
 				// Gab es schon die Diagonale Node1 - NewNode ?
-				Edge = ReadyEdgeList->FindWithIndex(Node1, NewNode);
+				Edge = EdgeList->FindWithIndex(Node1, NewNode);
 
 				// Dann müssen wir NewNode auch nehmen
 				if (Edge)
 				{
-					i++;
 					continue;
 				}
 			}
@@ -289,219 +268,49 @@
 			if (Dx * Dx + Dy * Dy < cr)
 			{
 				// Er ist dichter dran, also ist er besser
-				// Runddungsfehler spielen keine Rolle mehr
+				// Rundungsfehler spielen keine Rolle mehr
 				NewNode = Node;
-				CircumCircle(Node1, Node2, NewNode, &cx, &cy, &cr);
-				i++;
+				CircumCircle(Node1->X, Node1->Y, Node2->X, Node2->Y, NewNode->X, NewNode->Y, &cx, &cy, &cr);
 				continue;
 			}
-
-			i++;
 		}
 	}
 
-/*
 	if (NewNode)
 	{
-		// Wenn eine neue Kante schon als Aussenkante definiert wurde, dann
-		// Bleibt das auch so
-
-		TEdge* Edge = ReadyEdgeList->FindWithIndex(Node1, NewNode);
-		if (Edge && Edge->IsBoundary)
+		if (DebugLevel >= 8)
 		{
-			NewNode = 0;
-		}
-	}
-
-	if (NewNode)
-	{
-		// Wenn eine neue Kante schon als Aussenkante definiert wurde, dann
-		// Bleibt das auch so
-
-		TEdge* Edge = ReadyEdgeList->FindWithIndex(NewNode, Node2);
-		if (Edge && Edge->IsBoundary)
-		{
-			NewNode = 0;
-		}
-	}
-*/
-
-/*
-	if (NewNode)
-	{
-		double X3 = NewNode->X;
-		double Y3 = NewNode->Y;
-		double Win = ThreeToWin(X1, Y1, X2, Y2, X3, Y3, 1);
-
-		if (Win < 2 || Win > 178)
-		{
-			TEdge* Edge2 = ReadyEdgeList->FindWithIndex(Node2, NewNode);
-			TEdge* Edge3 = ReadyEdgeList->FindWithIndex(NewNode, Node1);
-
-			if (Edge2 == 0 || Edge3 == 0)
+			if (EdgeList->FindWithIndex(Node2, NewNode))
 			{
-				// Das neue Element wäre mir zu spitz oder flach
-				// und wurde nicht unbedingt benötigt
-				NewNode = 0;
+				dump_error(__FILE__, __LINE__, "Kante %d in Bearbeitung.\nDie Kante %d - %d wurde bereits erzeugt\n", AktEdgeIndex-1, Node2->Nr, NewNode->Nr);
 			}
-		}
-	}
-
-	if (NewNode)
-	{
-		double X3 = NewNode->X;
-		double Y3 = NewNode->Y;
-		double Win = ThreeToWin(X2, Y2, X3, Y3, X1, Y1, 1);
-
-//		double Dx = X3 - X2;
-//		double Dy = Y3 - Y2;
-
-//		if ((ReadyEdgeList->Anz > 100 && sqrt(Dx*Dx+Dy*Dy) > ReadyEdgeList->AvgDistance * 10) || Win < 2 || Win > 178)
-		if (Win < 2 || Win > 178)
-		{
-			TEdge* Edge2 = ReadyEdgeList->FindWithIndex(Node2, NewNode);
-			TEdge* Edge3 = ReadyEdgeList->FindWithIndex(NewNode, Node1);
-
-			if (Edge2 == 0 || Edge3 == 0)
+			if (EdgeList->FindWithIndex(NewNode, Node1))
 			{
-				// Das neue Element wäre mir zu spitz oder flach
-				// und wurde nicht unbedingt benötigt
-				NewNode = 0;
+				dump_error(__FILE__, __LINE__, "Kante %d in Bearbeitung.\nDie Kante %d - %d wurde bereits erzeugt\n", AktEdgeIndex-1, NewNode->Nr, Node1->Nr);
 			}
 		}
-	}
 
-	if (NewNode)
-	{
-		double X3 = NewNode->X;
-		double Y3 = NewNode->Y;
-		double Win = ThreeToWin(X3, Y3, X1, Y1, X2, Y2, 1);
-
-//		double Dx = X3 - X1;
-//		double Dy = Y3 - Y1;
-
-//		if ((ReadyEdgeList->Anz > 100 && sqrt(Dx*Dx+Dy*Dy) > ReadyEdgeList->AvgDistance * 10) || Win < 2 || Win > 178)
-		if (Win < 2 || Win > 178)
+		if (AktEdgeIndex == 1 || AktEdgeIndex == 2)
 		{
-			TEdge* Edge2 = ReadyEdgeList->FindWithIndex(Node2, NewNode);
-			TEdge* Edge3 = ReadyEdgeList->FindWithIndex(NewNode, Node1);
-
-			if (Edge2 == 0 || Edge3 == 0)
-			{
-				// Das neue Element wäre mir zu spitz oder flach
-				// und wurde nicht unbedingt benötigt
-				NewNode = 0;
-			}
+			EdgeList->AddWithIndex(Node1, Node2);
 		}
-	}
-*/
+		EdgeList->AddWithIndex(Node2, NewNode);
+		EdgeList->AddWithIndex(NewNode, Node1);
 
-	if (NewNode)
-	{
-		if (DebugLevel >= 8)
-		{
-			TEdge* Edge1 = ReadyEdgeList->FindWithIndex(Node1, Node2);
-			TEdge* Edge2 = ReadyEdgeList->FindWithIndex(Node2, NewNode);
-			TEdge* Edge3 = ReadyEdgeList->FindWithIndex(NewNode, Node1);
-
-			if (Edge1 || Edge2 || Edge3)
-			{
-				write_fortschritt("%d Anzahl fertiger Kanten\n", ReadyEdgeList->Anz);
-				dump_error(__FILE__, __LINE__, "Kante war schon fertig");
-			}
-		}
-
-		ReadyEdgeList->AddWithIndex(Node1, Node2);
-		ReadyEdgeList->AddWithIndex(Node2, NewNode);
-		ReadyEdgeList->AddWithIndex(NewNode, Node1);
-
 		TElement *Element = 0;
 		Element = new TElement(Node1, Node2, NewNode);
 		ElementList->push_back(Element);
-
-
-		////////////////////////////////////
-		// Jetzt eintragen was noch muss
-		////////////////////////////////////
-
-		// Diese Richtung ist jetzt fertig
-		// Falls sie also in der Todo-Liste war -> raus
-		TEdge* Edge = TodoEdgeList->Find(Node2, NewNode);
-		if (Edge)
-		{
-			// In Todo Gefunden
-			// Sollte noch, ist aber nicht mehr nötig da schon fertig
-			TodoEdgeList->Erase(Edge);
-		}
-		else
-		{
-/*
-			if (DebugLevel >= 8)
-			{
-				// Wenn diese Richtung nicht in der Todo-Liste war,
-				// so kann die Gegenrichtung noch nicht fertig sein
-				Edge = ReadyEdgeList->FindWithIndex(NewNode, Node2);
-				if (Edge)
-				{
-					dump_error(__FILE__, __LINE__, "Eine fertige Kante sollte noch mal eingetragen werden");
-				}
-			}
-
-			Edge = new TEdge(NewNode, Node2);
-			TodoEdgeList->Add(Edge);
-*/
-			Edge = ReadyEdgeList->FindWithIndex(NewNode, Node2);
-			if (0 == Edge)
-			{
-				Edge = new TEdge(NewNode, Node2);
-				TodoEdgeList->Add(Edge);
-			}
-		}
-
-		// Richtung: Ist schon fertig
-		Edge = TodoEdgeList->Find(NewNode, Node1);
-		if (Edge)
-		{
-			// In Todo Gefunden
-			// Sollte noch, ist aber nicht mehr nötig da schon fertig
-			TodoEdgeList->Erase(Edge);
-		}
-		else
-		{
-/*
-			if (DebugLevel >= 8)
-			{
-				Edge = ReadyEdgeList->FindWithIndex(Node1, NewNode);
-				if (Edge)
-				{
-					dump_error(__FILE__, __LINE__, "Eine fertige Kante sollte noch mal eingetragen werden");
-				}
-			}
-
-			Edge = new TEdge(Node1, NewNode);
-			TodoEdgeList->Add(Edge);
-*/
-			Edge = ReadyEdgeList->FindWithIndex(Node1, NewNode);
-			if (0 == Edge)
-			{
-				Edge = new TEdge(Node1, NewNode);
-				TodoEdgeList->Add(Edge);
-			}
-		}
 	}
 	else
 	{
-		// Wenn diese Kante nichts war, so ist die andere Richtung eine Aussenkante
-		TEdge* Edge = ReadyEdgeList->FindWithIndex(Node2, Node1);
-		if (Edge)	Edge->IsBoundary = true;
+		AktEdge->IsBoundary = true;
 	}
 
-	// Die Kante ist jetzt fertig
-	TodoEdgeList->Erase(AktEdge);
+	return (AktEdgeIndex);
 }
 
 //---------------------------------------------------------------------
-bool	Triangulate(TNodeList *NodeList, TElementList *ElementList, int DebugLevel)
+bool	Triangulate(TNodeList *NodeList, TElementList *ElementList, int DebugLevel, unsigned int Anz, double SX, double SY, double SR)
 {
 	write_fortschritt("->Triangulierung der Knoten gestartet\n");
 
@@ -510,16 +319,26 @@
 		write_error(1234, "Es sind im DGM nur %d Knoten vorhanden.\nEs werden aber mindestens 3 Knoten benötigt\n", NodeList->size());
 	}
 
-	write_fortschritt("->Sortien Knoten gestartet\n");
+	for (unsigned int i=0; i<Anz; i++)
+	{
+		long X = (long)(SX + SR * cos(i * 2.0 * M_PI / Anz) + 0.5);
+		long Y = (long)(SY + SR * sin(i * 2.0 * M_PI / Anz) + 0.5);
+
+		TNode* NewNode = new TNode(NodeList->MaxNr+1, X, Y, 9999);
+
+		NodeList->Add(NewNode);
+	}
+
+	write_fortschritt("->Sortieren Knoten gestartet\n");
+
 	NodeList->SortByXY();
-	write_fortschritt("<-Sortien der Knoten beendet\n");
+	write_fortschritt("<-Sortieren der Knoten beendet\n");
 
 	write_fortschritt("->Löschen des Knoten/Kanten-Index gestartet\n");
 	NodeList->ClearEdgeIndex();
 	write_fortschritt("<-Löschen des Knoten/Kanten-Index beendet\n");
 
-	TEdgeList *TodoEdgeList = new TEdgeList;
-	TEdgeList *ReadyEdgeList = new TEdgeList;
+	TEdgeList *EdgeList = new TEdgeList;
 
 	TNode *Node1 = 0;
 	TNode *Node2 = 0;
@@ -527,14 +346,17 @@
 	// Find closest neighbours
 	FindLeftMostNeighbours(NodeList, &Node1, &Node2);
 
-	// Erzeuge die ersten beiden Kanten
-	TEdge* SeedEdge1 = new TEdge(Node1, Node2);
-	TodoEdgeList->Add(SeedEdge1);
+	// Hier wirklich nur Add und nicht AddWithIndex
+	// damit die Kanten zwar als Start benutzt, aber nicht sofort gefunden werden.
+	// Erst wenn klar ist welche von beiden eine echte und welche eine Randkante ist
+	// werden sie nachträglich richtig eingefügt.
+	// !!! Es können auch beides richtige Kanten sein (bzw. werden). !!!
+	TEdge* Edge1 = new TEdge(Node1, Node2);
+	EdgeList->Add(Edge1);
 
-	TEdge* SeedEdge2 = new TEdge(Node2, Node1);
-	TodoEdgeList->Add(SeedEdge2);
+	TEdge* Edge2 = new TEdge(Node2, Node1);
+	EdgeList->Add(Edge2);
 
-
 	int TimeDiff = 5000;
 	if (DebugLevel >= 2)	TimeDiff = 1000;
 
@@ -544,19 +366,23 @@
 	int StartMSec = Now.time * 1000 + Now.millitm;
 	int NextMSec = StartMSec + TimeDiff;
 
-	while (TodoEdgeList->Anz > 0)
+	unsigned int AktEdgeIndex = 0;
+	while (AktEdgeIndex < EdgeList->EdgeVector.size())
 	{
-		CompleteFacet(NodeList, ElementList, TodoEdgeList, ReadyEdgeList, DebugLevel);
+		AktEdgeIndex = CompleteFacet(NodeList, ElementList, EdgeList, AktEdgeIndex, DebugLevel);
 
+
+
 /*
 #include "file.h"
-if (ReadyEdgeList->Anz >= 128901)
+if (AktEdgeIndex >= 292088)
 {
 	SaveElements("tmp_elements.shp", ElementList, DebugLevel);
 	SaveNet("tmp.2dm", NodeList, ElementList, DebugLevel);
 }
 */
 
+
 		ftime (&Now);
 		int NowMSec = Now.time * 1000 + Now.millitm;
 
@@ -566,7 +392,7 @@
 
 			int DiffMSec = NowMSec - StartMSec;
 
-			write_fortschritt("%d von ca. %d Elementen erzeugt (%d Kanten)\n", ElementList->size(), NodeList->size() * 2, ReadyEdgeList->Anz);
+			write_fortschritt("%d von ca. %d Elementen erzeugt (%d von %d Kanten)\n", ElementList->size(), NodeList->size() * 2, AktEdgeIndex, EdgeList->Anz);
 
 			if (ElementList->size() > 0)
 			{
@@ -576,11 +402,8 @@
 		}
 	}
 
-	delete TodoEdgeList;
+	delete EdgeList;
 
-	ReadyEdgeList->Clear();
-	delete ReadyEdgeList;
-
 	write_fortschritt("<-Triangulierung der Knoten beendet\n");
 
 	return (true);

Modified: trunk/src/tri.h
===================================================================
--- trunk/src/tri.h	2006-05-26 05:12:48 UTC (rev 49)
+++ trunk/src/tri.h	2006-06-04 23:49:03 UTC (rev 50)
@@ -1,5 +1,5 @@
 //
-// $Id: tri.h 14 2005-12-07 20:40:16Z mrchip $
+// $Id$
 //
 // Copyright (C) 2005 STADT-LAND-FLUSS INGENIEURDIENSTE GmbH
 //
@@ -22,7 +22,7 @@
 typedef enum { SUNDEFINED, SLEFT, SRIGHT, SUNIVERSE } TSide;
 
 //---------------------------------------------------------------------------
-bool	Triangulate(TNodeList* NodeList, TElementList *ElementList, int DebugLevel);
+bool Triangulate(TNodeList *NodeList, TElementList *ElementList, int DebugLevel, unsigned int Anz = 0, double SX = 0.0, double SY = 0.0, double SR = 0.0);
 
 //---------------------------------------------------------------------------
 #endif

Modified: trunk/src/wsplgen.cpp
===================================================================
--- trunk/src/wsplgen.cpp	2006-05-26 05:12:48 UTC (rev 49)
+++ trunk/src/wsplgen.cpp	2006-06-04 23:49:03 UTC (rev 50)
@@ -90,12 +90,6 @@
 	// (und an andere Klassen in Form von Pointern ausgeliehen)
 	TNodeList NodeList;
 
-	// Hier werden die Elemente drin verwaltet
-	// Die Elemente werden aus ausgeliehenen Knoten gebildet
-	// Daher muss man immer erst die Knoten einlesen und dann die Elemente
-	// Eigentlich braucht man die Elemente nicht
-	TElementList ElementList;
-
 	// Hier werden die Gewaesserachsen drin verwaltet
 	TGewaesserAchseList GewaesserAchseList;
 
@@ -204,10 +198,16 @@
 				GewProfilList->InterpoliereProfile(SollAbstand);
 			}
 
+			// Hier werden die Elemente drin verwaltet
+			// Die Elemente werden aus ausgeliehenen Knoten gebildet
+			// Daher muss man immer erst die Knoten einlesen und dann die Elemente
+			// Eigentlich braucht man die Elemente nicht
+			TElementList *ElementList = new TElementList;
+
 			// Mal wieder Zwischenergebnisse produzieren
 			if (Parameter.DebugLevel >= 5) SaveProfile("debug_output\\04_" + Gewaesser + "_Profile_100" + ".shp", GewProfilList, Parameter.DebugLevel);
 
-			unsigned int AnzScheiben = LoadDGM(Parameter.FileNameDgm, &NodeList, &ElementList, &Bereichspolygon, MaxNodesPerSlice, Parameter.DebugLevel);
+			unsigned int AnzScheiben = LoadDGM(Parameter.FileNameDgm, &NodeList, ElementList, &Bereichspolygon, MaxNodesPerSlice, Parameter.DebugLevel);
 
 			// Wenn LoadDGM eine Scheibenanzahl von mehr als 1 ergeben hat, ist das DGM nicht geladen,
 			// es muss jetzt mit Scheiben gearbeitet werden.
@@ -258,31 +258,31 @@
 
 				if (AnzScheiben > 1)
 				{
-					LoadDGM(Parameter.FileNameDgm, &NodeList, &ElementList, &Bereichspolygon, 99999999, Parameter.DebugLevel);
+					LoadDGM(Parameter.FileNameDgm, &NodeList, ElementList, &Bereichspolygon, 99999999, Parameter.DebugLevel);
 				}
 
 				// Wenn die Elementliste noch leer ist, müssen die Knoten noch trianguliert werden.
-				if (ElementList.size() == 0)
+				if (ElementList->size() == 0)
 				{
-					if (false == Triangulate (&NodeList, &ElementList, Parameter.DebugLevel))	return (false);
+					if (false == Triangulate (&NodeList, ElementList, Parameter.DebugLevel))	return (false);
 				}
 
 				NodeList.SortByNr();
 
-				if (Parameter.DebugLevel >= 7) SaveNet("debug_output\\06_" + Gewaesser + "_Net_" + VC + NC + ".2dm", &NodeList, &ElementList, Parameter.DebugLevel);
+				if (Parameter.DebugLevel >= 7) SaveNet("debug_output\\06_" + Gewaesser + "_Net_" + VC + NC + ".2dm", &NodeList, ElementList, Parameter.DebugLevel);
 				if (Parameter.DebugLevel >= 5) SaveNodes("debug_output\\07_" + Gewaesser + "_Nodes_" + VC + NC + ".shp", &NodeList, Parameter.DebugLevel);
-				if (Parameter.DebugLevel >= 5) SaveElements("debug_output\\08_" + Gewaesser + "_Elements_" + VC + NC + ".shp", &ElementList, Parameter.DebugLevel);
+				if (Parameter.DebugLevel >= 5) SaveElements("debug_output\\08_" + Gewaesser + "_Elements_" + VC + NC + ".shp", ElementList, Parameter.DebugLevel);
 
 				if (SperrenList.size() > 0 || GrabenList.size() > 0)
 				{
 					// Jetzt die gesperrten Elemente entfernen
-					ElementList.ChangeElements(&NodeList, &SperrenList, &GrabenList, Parameter.DebugLevel);
-					CheckForDuplicates(&NodeList, &ElementList, Parameter.DebugLevel);
+					ElementList->ChangeElements(&NodeList, &SperrenList, &GrabenList, Parameter.DebugLevel);
+					CheckForDuplicates(&NodeList, ElementList, Parameter.DebugLevel);
 				}
 
-				if (Parameter.DebugLevel >= 7) SaveNet("debug_output\\09_" + Gewaesser + "_Net_" + VC + NC + ".2dm", &NodeList, &ElementList, Parameter.DebugLevel);
+				if (Parameter.DebugLevel >= 7) SaveNet("debug_output\\09_" + Gewaesser + "_Net_" + VC + NC + ".2dm", &NodeList, ElementList, Parameter.DebugLevel);
 				if (Parameter.DebugLevel >= 5) SaveNodes("debug_output\\10_" + Gewaesser + "_Nodes_" + VC + NC + ".shp", &NodeList, Parameter.DebugLevel);
-				if (Parameter.DebugLevel >= 5) SaveElements("debug_output\\11_" + Gewaesser + "_Elements_" + VC + NC + ".shp", &ElementList, Parameter.DebugLevel);
+				if (Parameter.DebugLevel >= 5) SaveElements("debug_output\\11_" + Gewaesser + "_Elements_" + VC + NC + ".shp", ElementList, Parameter.DebugLevel);
 
 				// Hier werden die Kanten drin verwaltet
 				// Die Kanten werden im Moment noch aus den Elementen generiert
@@ -290,10 +290,11 @@
 				// Der durchschnittliche Abstand der Knoten (bzw. die Kantenlänge) wird dabei mit ermittelt.
 				// Das DGM sollte einigermassen homogen sein
 				TEdgeList* EdgeList = new TEdgeList;
-				BuildEdgeList(&NodeList, &ElementList, EdgeList, Parameter.DebugLevel);
+				BuildEdgeList(&NodeList, ElementList, EdgeList, Parameter.DebugLevel);
 
 				// Die Elemete werden nun nicht mehr gebraucht
-				ElementList.Clear();
+				delete ElementList;
+				ElementList = 0;
 
 				// Den alten Knoten Kanten Index löschen
 				NodeList.ClearEdgeIndex();
@@ -360,26 +361,27 @@
 				// wenn es nicht schon bestimmt wurde
 				if (false == Parameter.IsSetDiff)
 				{
-					Parameter.Diff = (int)((Parameter.Bis - Parameter.Von) / 10.0 * 100.0 + 0.5) / 100.0;
+					Parameter.Diff = (int)((Parameter.Bis - Parameter.Von) / 10.0 + 0.5);
 				}
 
 				if (Parameter.Von > Parameter.Bis)
 				{
-					write_error(1210, "Das Argument <Von> (%.2f) ist größer als das Argument <Bis> (%.2f).\nGeben sie bitte sowohl den Parameter <Von> als auch den Parameter <Bis> sinnvoll an.\n", Parameter.Von, Parameter.Bis);
+					write_error(1210, "Das Argument <Von> (%.2f) ist größer als das Argument <Bis> (%.2f).\nGeben sie bitte sowohl den Parameter <Von> als auch den Parameter <Bis> sinnvoll an.\n", Parameter.Von / 100.0, Parameter.Bis / 100.0);
 				}
 
 				if (Parameter.Diff <= 0.0)
 				{
-					if (Parameter.Bis - Parameter.Von > 0.0001)
+					if (Parameter.Bis != Parameter.Von)
 					{
-						write_error(1212, "Das Argument <Diff> darf nur dann Null sein, wenn <Von> (%.2f) und <Bis> (%.2f) gleich sind.\n", Parameter.Von, Parameter.Bis);
+						write_error(1212, "Das Argument <Diff> darf nur dann Null sein, wenn <Von> (%.2f) und <Bis> (%.2f) gleich sind.\n", Parameter.Von / 100.0, Parameter.Bis / 100.0);
+						
 					}
 					else
 					{
 						// Wenn 'Von' == 'Bis' ist
 						// wird Diff auf 1 gesetzt
 						// Der Wert spielt keine Rolle, nur größer als Null sollte er sein.
-						Parameter.Diff = 1.0;
+						Parameter.Diff = 1;
 					}
 				}
 

Modified: trunk/src/wsplgen.h
===================================================================
--- trunk/src/wsplgen.h	2006-05-26 05:12:48 UTC (rev 49)
+++ trunk/src/wsplgen.h	2006-06-04 23:49:03 UTC (rev 50)
@@ -10,8 +10,17 @@
 // Read the file COPYING coming with WSPLGEN for details.
 //
 
-const char Version[] = "0.9.7 r1";
+const char Version[] = "0.9.8 r1";
 
+// Es wurde die Triangulierung und die Verwaltung der Kanten deutlich verbessert
+
+// const char Version[] = "0.9.7 r2";
+
+// Es wurde ein Rundungsfehler beim Lader der DGM-XYZ,DGM-SHP und DGM-2DM Daten behoben.
+// (int)(X * 100.0 + 0.5) /100.0 statt (int)(X * 100.0) / 100.0  
+
+// const char Version[] = "0.9.7 r1";
+
 // Das Erzeugen von Kanten wurde beschleunigt
 // Ein Fehler beim Erzeugen der Gräben wurde korrigiert (NO_ELEMENT wurde nicht beachtet)
 

Modified: trunk/src/xy.cpp
===================================================================
--- trunk/src/xy.cpp	2006-05-26 05:12:48 UTC (rev 49)
+++ trunk/src/xy.cpp	2006-06-04 23:49:03 UTC (rev 50)
@@ -23,18 +23,17 @@
 #include "xy.h"
 
 //---------------------------------------------------------------------------
-static const double 		MinNodeDistanceKonst = 0.01;
+static const double 		MinNodeDistanceKonst = 1;
 
 //---------------------------------------------------------------------
 // TXY
 //---------------------------------------------------------------------
 
 //---------------------------------------------------------------------
-TXY::TXY(double x, double y)
+TXY::TXY(long x, long y)
 {
 	X = x;
 	Y = y;
-	XYKombi = CalcXYKombi(X, Y);
 }
 
 //---------------------------------------------------------------------
@@ -42,33 +41,23 @@
 {
 	X = xy->X;
 	Y = xy->Y;
-	XYKombi = xy->XYKombi;
 }
 
 //---------------------------------------------------------------------
-struct TXYSort
-{
-	 bool operator()(TXY* const &XY1, TXY* const &XY2)
-	 {
-		  return(XY1->XYKombi < XY2->XYKombi);
-	 }
-};
-
-//---------------------------------------------------------------------
 // TNode
 //---------------------------------------------------------------------
 
 //---------------------------------------------------------------------
-TNode::TNode(int nr, double x, double y, double z) : TXY (x, y)
+TNode::TNode(int nr, long x, long y, int z) : TXY (x, y)
 {
 	Nr = nr;
 	Z = z;
-	Wsp = -9999.9;
+	Wsp = -999999;
 	EdgeIndex = 0;
 }
 
 //---------------------------------------------------------------------
-TNode::TNode(int nr, double x, double y, double z, double wsp) : TXY (x, y)
+TNode::TNode(int nr, long x, long y, int z, int wsp) : TXY (x, y)
 {
 	Nr = nr;
 	Z = z;
@@ -161,15 +150,6 @@
 }
 
 //---------------------------------------------------------------------
-struct TNodeSortByXY
-{
-	 bool operator()(TNode* const &Node1, TNode* const &Node2)
-	 {
-		  return(Node1->XYKombi < Node2->XYKombi);
-	 }
-};
-
-//---------------------------------------------------------------------
 struct TNodeSortByNr
 {
 	 bool operator()(TNode* const &Node1, TNode* const &Node2)
@@ -183,14 +163,14 @@
 //---------------------------------------------------------------------
 
 //---------------------------------------------------------------------
-TPoint::TPoint(double x, double y, double meter) : TXY (x, y)
+TPoint::TPoint(long x, long y, int meter) : TXY (x, y)
 {
-	Z = -9999.9;
+	Z = -999999;
 	Meter = meter;
 }
 
 //---------------------------------------------------------------------
-TPoint::TPoint(double x, double y, double z, double meter) : TXY (x, y)
+TPoint::TPoint(long x, long y, int z, int meter) : TXY (x, y)
 {
 	Z = z;
 	Meter = meter;
@@ -247,18 +227,18 @@
 //---------------------------------------------------------------------------
 TXYList::TXYList(void)
 {
-	XYKombiIndex = 0;
-	MinX = 0.0;
-	MaxX = 0.0;
-	MinY = 0.0;
-	MaxY = 0.0;
+	QuadTree = 0;
+	MinX = 0;
+	MaxX = 0;
+	MinY = 0;
+	MaxY = 0;
 }
 
 //---------------------------------------------------------------------------
 TXYList::~TXYList(void)
 {
-	if (XYKombiIndex)   delete XYKombiIndex;
-	XYKombiIndex = 0;
+	if (QuadTree)   delete QuadTree;
+	QuadTree = 0;
 
 	Clear();
 }
@@ -273,10 +253,10 @@
 	}
 	clear();
 
-	MinX = 0.0;
-	MaxX = 0.0;
-	MinY = 0.0;
-	MaxY = 0.0;
+	MinX = 0;
+	MaxX = 0;
+	MinY = 0;
+	MaxY = 0;
 }
 
 //---------------------------------------------------------------------
@@ -301,29 +281,27 @@
 //---------------------------------------------------------------------
 void TXYList::SortByXY(void)
 {
-	std::sort(this->begin(), this->end(), TXYSort());
+	if (QuadTree)   delete QuadTree;
+	QuadTree = new TQuadTree<TXYList, TXY>();
 
-	if (XYKombiIndex)   delete XYKombiIndex;
-	XYKombiIndex = new TXYKombiIndex<TXYList, TXY>();
-	XYKombiIndex->Build(this, 0, size());
+	for (iterator i = begin(); i != end(); i++)
+	{
+		TXY* Xy = *i;
+		QuadTree->Insert(MinX, MaxX, MinY, MaxY, Xy);
+	}
 }
 
 //---------------------------------------------------------------------
-TXY* TXYList::FindByXY(double X, double Y, double Eps)
+TXY* TXYList::FindByXY(long X, long Y)
 {
 	if (size() <= 0) return (0);
 
-	int Index = XYKombiIndex->Search(this, X, Y, Eps);
+	TXY* Xy = QuadTree->Search(X, Y, MinX, MaxX, MinY, MaxY);
 
-	if (Index >= 0)
+	if (Xy)
 	{
-		TXY *Xy = (* this)[Index];
-
-		double Dx = Xy->X - X;
-		double Dy = Xy->Y - Y;
-		double R = sqrt(Dx * Dx + Dy * Dy);
-
-		if (R <= Eps)
+/*
+		if (Xy->X == X && Xy->Y == Y)
 		{
 			return (Xy);
 		}
@@ -331,45 +309,39 @@
 		{
 			dump_error(__FILE__, __LINE__, "Falschen Knoten gefunden\n");
 		}
+*/
+
+		return(Xy);
 	}
-	else
+
+/*
+	for (unsigned int i=0; i<size(); i++)
 	{
-		for (unsigned int i=0; i<size(); i++)
-		{
-			TXY *Xy = (* this)[i];
+		TXY *Xy = (* this)[i];
 
-			double Dx = Xy->X - X;
-			double Dy = Xy->Y - Y;
-			double R = sqrt(Dx * Dx + Dy * Dy);
-
-			if (R <= Eps)
-			{
-				dump_error(__FILE__, __LINE__, "Existierenden Knoten nicht gefunden\n");
-			}
+		if (Xy->X >= X - Eps && Xy->X <= X + Eps && Xy->Y >= Y - Eps && Xy->Y <= Y + Eps)
+		{
+			dump_error(__FILE__, __LINE__, "Existierenden Knoten nicht gefunden\n");
 		}
-		return (0);
 	}
+*/
 
-	if (Index < 0)  return (0);
-
-	TXY *Xy = (* this)[Index];
-
-	return(Xy);
+	return (0);
 }
 
 //---------------------------------------------------------------------
-TInsideTyp TXYList::IsInsideXYList(double X, double Y)
+TInsideTyp TXYList::IsInsideXYList(long X, long Y)
 {
 	if (X < MinX || X > MaxX || Y < MinY || Y > MaxY)	return (NOT_INSIDE);
 
 	int alpha = IsInside(this, X, Y);
 
-	if (alpha == 0)		return (NOT_INSIDE);  // not inside
-	if (alpha == 4)		return (INSIDE);   // inside
-	if (alpha == -4)	return (INSIDE);   // inside
-	if (alpha == -1)	return (ON_LINE);   // on line
-	if (alpha == 2)	    return (ON_LINE);   // on line twisted
-	if (alpha == -2)    return (ON_LINE);   // on line twisted
+	if (alpha == 0)		return (NOT_INSIDE);	// not inside
+	if (alpha == 4)		return (INSIDE);   		// inside
+	if (alpha == -4)	return (INSIDE);   		// inside
+	if (alpha == -1)	return (ON_LINE);   	// on line
+	if (alpha == 2)	    return (ON_LINE);   	// on line twisted
+	if (alpha == -2)    return (ON_LINE);   	// on line twisted
 
 	dump_error(__FILE__, __LINE__, "Alpha (%d) ungültig\n", alpha);
 
@@ -398,20 +370,12 @@
 }
 
 //---------------------------------------------------------------------
-void TXYList::Add(double X, double Y)
+void TXYList::Add(long X, long Y)
 {
 	TXY *Xy = new TXY(X, Y);
 	Add(Xy);
 }
 
-TErgebnisPolygon::TErgebnisPolygon(double diff)
-{
-	Gewaesser = "dummy";
-	VonKm = 0.0;
-	BisKm = 0.0;
-	Diff = diff;
-}
-
 //---------------------------------------------------------------------
 // TNodeList
 //---------------------------------------------------------------------
@@ -419,8 +383,13 @@
 //---------------------------------------------------------------------------
 TNodeList::TNodeList(void)
 {
-	XYKombiIndex = 0;
+	QuadTree = 0;
 	SearchNodeList = 0;
+	MaxNr = -1;
+	MinX = 0;
+	MaxX = 0;
+	MinY = 0;
+	MaxY = 0;
 }
 
 //---------------------------------------------------------------------------
@@ -432,11 +401,8 @@
 //---------------------------------------------------------------------
 void TNodeList::Clear(void)
 {
-	if (XYKombiIndex)
-	{
-		delete XYKombiIndex;
-		XYKombiIndex = 0;
-	}
+	if (QuadTree)	delete QuadTree;
+	QuadTree = 0;
 
 	if (SearchNodeList)
 	{
@@ -451,6 +417,12 @@
 		delete Node;
 	}
 	clear();
+
+	MaxNr = -1;
+	MinX = 0;
+	MaxX = 0;
+	MinY = 0;
+	MaxY = 0;
 }
 
 //---------------------------------------------------------------------
@@ -464,17 +436,50 @@
 		TNode *NewNode = new TNode(OldNode);
 		NewNodeList->push_back(NewNode);
 	}
+
+	NewNodeList->MaxNr = MaxNr;
+	NewNodeList->MinX = MinX;
+	NewNodeList->MaxX = MaxX;
+	NewNodeList->MinY = MinY;
+	NewNodeList->MaxY = MaxY;
+
 	return(NewNodeList);
 }
 
 //---------------------------------------------------------------------
+void TNodeList::Add(TNode *Node)
+{
+	push_back(Node);
+
+	if (size() == 1)
+	{
+		MaxNr = Node->Nr;
+		MinX = Node->X;
+		MaxX = Node->X;
+		MinY = Node->Y;
+		MaxY = Node->Y;
+	}
+	else
+	{
+		if (MaxNr < Node->Nr) MaxNr = Node->Nr;
+		if (MinX > Node->X) MinX = Node->X;
+		if (MaxX < Node->X) MaxX = Node->X;
+		if (MinY > Node->Y) MinY = Node->Y;
+		if (MaxY < Node->Y) MaxY = Node->Y;
+	}
+}
+
+//---------------------------------------------------------------------
 void TNodeList::SortByXY(void)
 {
-	std::sort(this->begin(), this->end(), TNodeSortByXY());
+	if (QuadTree)   delete QuadTree;
+	QuadTree = new TQuadTree<TNodeList, TNode>();
 
-	if (XYKombiIndex)   delete XYKombiIndex;
-	XYKombiIndex = new TXYKombiIndex<TNodeList, TNode>();
-	XYKombiIndex->Build(this, 0, size());
+	for (iterator i = begin(); i != end(); i++)
+	{
+		TNode* Node = *i;
+		QuadTree->Insert(MinX, MaxX, MinY, MaxY, Node);
+	}
 }
 
 //---------------------------------------------------------------------
@@ -514,26 +519,16 @@
 }
 
 //---------------------------------------------------------------------
-TNode* TNodeList::FindByXY(double X, double Y, double R)
+TNode* TNodeList::FindByXY(long X, long Y)
 {
-	if (size() != XYKombiIndex->Anzahl)
-	{
-		dump_error(__FILE__, __LINE__, "Knotenanzahl (%d) und XYKombiIndex-Anzahl (%d) stimmen nicht überein\n", size(), XYKombiIndex->Anzahl);
-	}
-
 	if (size() <= 0) return (0);
 
-	int Index = XYKombiIndex->Search(this, X, Y, R);
+	TNode* Node = QuadTree->Search(X, Y, MinX, MaxX, MinY, MaxY);
 
-/*
-	if (Index >= 0)
+	if (Node)
 	{
-		TNode *Node = (* this)[Index];
-
-		double Dx = Node->X - X;
-		double Dy = Node->Y - Y;
-
-		if (sqrt(Dx * Dx + Dy * Dy) < R)
+/*
+		if (Node->X == X && Node->Y == Y)
 		{
 			return (Node);
 		}
@@ -541,72 +536,46 @@
 		{
 			dump_error(__FILE__, __LINE__, "Falschen Knoten gefunden\n");
 		}
+*/
+
+		return (Node);
 	}
-	else
+
+/*
+	for (unsigned int i=0; i<size(); i++)
 	{
-		for (unsigned int i=0; i<size(); i++)
-		{
-			TNode *Node = (* this)[i];
+		TNode *Node = (* this)[i];
 
-			double Dx = Node->X - X;
-			double Dy = Node->Y - Y;
-
-			if (sqrt(Dx * Dx + Dy * Dy) < R)
-			{
-				dump_error(__FILE__, __LINE__, "Existierenden Knoten nicht gefunden\n");
-			}
+		if (Node->X >= X - Eps && Node->X <= X + Eps && Node->Y >= Y - Eps && Node->Y <= Y + Eps)
+		{
+			dump_error(__FILE__, __LINE__, "Existierenden Knoten (%.4f,%.4f -> %.4f,%.4f) nicht gefunden\n", X, Y, Node->X, Node->Y);
 		}
-		return (0);
 	}
 */
 
-	if (Index < 0)  return (0);
-
-	TNode *Node = (* this)[Index];
-
-	return(Node);
+	return (0);
 }
 
 //---------------------------------------------------------------------
 TNodeList* TNodeList::FindAllByXY(double X, double Y, double R)
 {
 	// Wichtig ist das kleingeschriebene clear
-	// In dieser Nodelist sind villeicht Knoten drin, die nur geliehen sind.
+	// In dieser Nodelist sind vielleicht Knoten drin, die nur geliehen sind.
 	// Die Knoten selbst sollen nicht gelöscht werden
 
 	if (SearchNodeList)	SearchNodeList->clear();
 	else				SearchNodeList = new TNodeList;
 
-	if (size() != XYKombiIndex->Anzahl)
-	{
-		dump_error(__FILE__, __LINE__, "Knotenanzahl (%d) und XYKombiIndex-Anzahl (%d) stimmen nicht überein\n", size(), XYKombiIndex->Anzahl);
-	}
-
 	if (size() <= 0) return(SearchNodeList);
 
-	std::vector<int> NodeIndexList;
+	QuadTree->SearchAll(X, Y, R, SearchNodeList, MinX, MaxX, MinY, MaxY);
 
-	XYKombiIndex->SearchAll(&NodeIndexList, this, X, Y, R);
-
-	for (unsigned int i = 0; i<NodeIndexList.size(); i++)
-	{
-		int Index = NodeIndexList[i];
-		TNode *Node = (* this)[Index];
-
-		SearchNodeList->push_back(Node);
-	}
-
 	return (SearchNodeList);
 }
 
 //---------------------------------------------------------------------
-bool TNodeList::Interpolate(TProfilList *SperrenList, double X, double Y, double R, double *ZWert, double *WspWert)
+bool TNodeList::Interpolate(TProfilList *SperrenList, long X, long Y, double R, int *ZWert, int *WspWert)
 {
-	if (size() != XYKombiIndex->Anzahl)
-	{
-		dump_error(__FILE__, __LINE__, "Knotenanzahl (%d) und XYKombiIndex-Anzahl (%d) stimmen nicht überein\n", size(), XYKombiIndex->Anzahl);
-	}
-
 	TNodeList *SearchNodeList = FindAllByXY(X, Y, R);
 
 	TNode* TLNode = 0;
@@ -625,9 +594,9 @@
 	{
 		TNode* Node = *i;
 
-		double NDx = X - Node->X;
-		double NDy = Y - Node->Y;
-		if (fabs(NDx) < 0.01 && fabs(NDy) < 0.01)
+		long NDx = X - Node->X;
+		long NDy = Y - Node->Y;
+		if (NDx == 0 && NDy == 0)
 		{
 			*ZWert = Node->Z;
 			*WspWert = Node->Wsp;
@@ -647,16 +616,16 @@
 			if (0 == TRNode)
 			{
 				TRNode = Node;
-				double Dx = TRNode->X - X;
-				double Dy = TRNode->Y - Y;
+				long Dx = TRNode->X - X;
+				long Dy = TRNode->Y - Y;
 
 				TRD = Dx*Dx + Dy*Dy;
 				continue;
 			}
 			else
 			{
-				double Dx = Node->X - X;
-				double Dy = Node->Y - Y;
+				long Dx = Node->X - X;
+				long Dy = Node->Y - Y;
 
 				double D = Dx*Dx + Dy*Dy;
 
@@ -674,16 +643,16 @@
 			if (0 == TLNode)
 			{
 				TLNode = Node;
-				double Dx = TLNode->X - X;
-				double Dy = TLNode->Y - Y;
+				long Dx = TLNode->X - X;
+				long Dy = TLNode->Y - Y;
 
 				TLD = Dx*Dx + Dy*Dy;
 				continue;
 			}
 			else
 			{
-				double Dx = Node->X - X;
-				double Dy = Node->Y - Y;
+				long Dx = Node->X - X;
+				long Dy = Node->Y - Y;
 
 				double D = Dx*Dx + Dy*Dy;
 
@@ -701,16 +670,16 @@
 			if (0 == BLNode)
 			{
 				BLNode = Node;
-				double Dx = BLNode->X - X;
-				double Dy = BLNode->Y - Y;
+				long Dx = BLNode->X - X;
+				long Dy = BLNode->Y - Y;
 
 				BLD = Dx*Dx + Dy*Dy;
 				continue;
 			}
 			else
 			{
-				double Dx = Node->X - X;
-				double Dy = Node->Y - Y;
+				long Dx = Node->X - X;
+				long Dy = Node->Y - Y;
 
 				double D = Dx*Dx + Dy*Dy;
 
@@ -728,16 +697,16 @@
 			if (0 == BRNode)
 			{
 				BRNode = Node;
-				double Dx = BRNode->X - X;
-				double Dy = BRNode->Y - Y;
+				long Dx = BRNode->X - X;
+				long Dy = BRNode->Y - Y;
 
 				BRD = Dx*Dx + Dy*Dy;
 				continue;
 			}
 			else
 			{
-				double Dx = Node->X - X;
-				double Dy = Node->Y - Y;
+				long Dx = Node->X - X;
+				long Dy = Node->Y - Y;
 
 				double D = Dx*Dx + Dy*Dy;
 
@@ -806,28 +775,28 @@
 
 	if (WspAnzahl > 0)
 	{
-		double Wsp = 0.0;
+		int Wsp = 0;
 
-		if (TLNode != 0 && TLNode->Wsp > -9999.0) Wsp = Wsp +  1 / TLD / WspSumme * TLNode->Wsp;
-		if (TRNode != 0 && TRNode->Wsp > -9999.0) Wsp = Wsp +  1 / TRD / WspSumme * TRNode->Wsp;
-		if (BLNode != 0 && BLNode->Wsp > -9999.0) Wsp = Wsp +  1 / BLD / WspSumme * BLNode->Wsp;
-		if (BRNode != 0 && BRNode->Wsp > -9999.0) Wsp = Wsp +  1 / BRD / WspSumme * BRNode->Wsp;
+		if (TLNode != 0 && TLNode->Wsp > -9999) Wsp = Wsp + (int)(1 / TLD / WspSumme * TLNode->Wsp + 0.5);
+		if (TRNode != 0 && TRNode->Wsp > -9999) Wsp = Wsp + (int)(1 / TRD / WspSumme * TRNode->Wsp + 0.5);
+		if (BLNode != 0 && BLNode->Wsp > -9999) Wsp = Wsp + (int)(1 / BLD / WspSumme * BLNode->Wsp + 0.5);
+		if (BRNode != 0 && BRNode->Wsp > -9999) Wsp = Wsp + (int)(1 / BRD / WspSumme * BRNode->Wsp + 0.5);
 
 		*WspWert = Wsp;
 	}
 	else
 	{
-		*WspWert = -9999.9;
+		*WspWert = -999999;
 	}
 
 	if (ZAnzahl > 0)
 	{
-		double Z = 0.0;
+		int Z = 0;
 
-		if (TLNode != 0) Z = Z +  1 / TLD / ZSumme * TLNode->Z;
-		if (TRNode != 0) Z = Z +  1 / TRD / ZSumme * TRNode->Z;
-		if (BLNode != 0) Z = Z +  1 / BLD / ZSumme * BLNode->Z;
-		if (BRNode != 0) Z = Z +  1 / BRD / ZSumme * BRNode->Z;
+		if (TLNode != 0) Z = Z + (int)(1 / TLD / ZSumme * TLNode->Z + 0.5);
+		if (TRNode != 0) Z = Z + (int)(1 / TRD / ZSumme * TRNode->Z + 0.5);
+		if (BLNode != 0) Z = Z + (int)(1 / BLD / ZSumme * BLNode->Z + 0.5);
+		if (BRNode != 0) Z = Z + (int)(1 / BRD / ZSumme * BRNode->Z + 0.5);
 
 		*ZWert = Z;
 
@@ -848,11 +817,11 @@
 }
 
 //---------------------------------------------------------------------
-double TNodeList::GetMaxDepth(int DebugLevel)
+int TNodeList::GetMaxDepth(int DebugLevel)
 {
 	write_fortschritt("->Ermittlung der maximalen Wassertiefe gestartet\n");
 
-	double MaxDepth = 0.0;
+	int MaxDepth = 0;
 	int Count = 0;
 	for (iterator i = begin(); i != end(); i++)
 	{
@@ -860,9 +829,9 @@
 
 		if (Node->Wsp < -9999)	continue;
 
-		double Depth = Node->Wsp - Node->Z;
+		int Depth = Node->Wsp - Node->Z;
 
-		if (Depth < 0.0)
+		if (Depth < 0)
 		{
 			dump_error(__FILE__, __LINE__, "Der Wasserstand ist negative\n");
 		}
@@ -878,7 +847,7 @@
 	}
 	write_fortschritt("Knoten %d von %d untersucht.\n", Count, size());
 
-	write_fortschritt("Maximale Wassertiefe: %.3f.\n", MaxDepth);
+	write_fortschritt("Maximale Wassertiefe: %.3f.\n", MaxDepth / 100.0);
 
 	write_fortschritt("<-Ermittlung der maximalen Wassertiefe beendet\n");
 
@@ -886,11 +855,11 @@
 }
 
 //---------------------------------------------------------------------
-double TNodeList::GetMaxWsp(int DebugLevel)
+int TNodeList::GetMaxWsp(int DebugLevel)
 {
 	write_fortschritt("->Ermittlung des maximalen Wasserstandes gestartet\n");
 
-	double MaxWsp = 0.0;
+	int MaxWsp = 0;
 	int Count = 0;
 	for (iterator i = begin(); i != end(); i++)
 	{
@@ -898,7 +867,7 @@
 
 		if (Node->Wsp > 9999)	continue;
 
-		double Wsp = Node->Wsp;
+		int Wsp = Node->Wsp;
 
 		if (Wsp < 0.0)
 		{
@@ -916,7 +885,7 @@
 	}
 	write_fortschritt("Knoten %d von %d untersucht.\n", Count, size());
 
-	write_fortschritt("Maximaler Wasserstand: %.3f.\n", MaxWsp);
+	write_fortschritt("Maximaler Wasserstand: %.3f.\n", MaxWsp / 100.0);
 
 	write_fortschritt("<-Ermittlung des maximalen Wasserstandes beendet\n");
 
@@ -924,17 +893,17 @@
 }
 
 //---------------------------------------------------------------------
-double TNodeList::GetMaxZ(int DebugLevel)
+int TNodeList::GetMaxZ(int DebugLevel)
 {
 	write_fortschritt("->Ermittlung der maximale Geländehöhe gestartet\n");
 
-	double MaxZ = 0.0;
+	int MaxZ = 0;
 	int Count = 0;
 	for (iterator i = begin(); i != end(); i++)
 	{
 		TNode* Node = *i;
 
-		double Z = Node->Z;
+		int Z = Node->Z;
 
 		if (Count == 0 || Z > MaxZ)	MaxZ = Z;
 
@@ -947,7 +916,7 @@
 	}
 	write_fortschritt("Knoten %d von %d untersucht.\n", Count, size());
 
-	write_fortschritt("Maximale Geländehöhe: %.3f.\n", MaxZ);
+	write_fortschritt("Maximale Geländehöhe: %.3f.\n", MaxZ / 100.0);
 
 	write_fortschritt("<-Ermittlung der maximale Geländehöhe beendet\n");
 
@@ -993,8 +962,8 @@
 
 	int ChangeCount = 0;
 
-	double SperrZ = 9999.9;
-	double GrabenZ = -9999.9;
+	int SperrZ = 999999;
+	int GrabenZ = -999999;
 
 	int Count = 0;
 	for (TElementList::iterator i = begin(); i != end(); i++)
@@ -1019,32 +988,33 @@
 
 		double Lambda = 0.0;
 		double Meter = 0.0;
-		double X = 0.0;
-		double Y = 0.0;
+		double XD = 0.0;
+		double YD = 0.0;
 
-		double N12Dx = Node2->X - Node1->X;
-		double N12Dy = Node2->Y - Node1->Y;
-		if (fabs(N12Dx) < 0.00000001 && fabs(N12Dy) < 0.00000001)
+		if (Node1->X == Node2->X && Node1->Y == Node2->Y)
 		{
-			write_error(3214, "Knotenabstand (%.3f %.3f) - (%.3f %.3f) ist zu klein\n", Node1->X, Node1->Y, Node2->X, Node2->Y);
+			write_error(3214, "Knotenabstand (%.3f %.3f) - (%.3f %.3f) ist zu klein\n", Node1->X / 100.0, Node1->Y / 100.0, Node2->X / 100.0, Node2->Y / 100.0);
 		}
 
-		if (CalcProfilSchnitt(Node1->X, Node1->Y, Node2->X, Node2->Y, SperrenList, &X, &Y, &Lambda, &Meter))
+		if (CalcProfilSchnitt(Node1->X, Node1->Y, Node2->X, Node2->Y, SperrenList, &XD, &YD, &Lambda, &Meter))
 		{
-			if (fabs(Node1->X - X) < 0.1 && fabs(Node1->Y - Y) < 0.1)
+			long X = (long)(XD + 0.5);
+			long Y = (long)(YD + 0.5);
+
+			if (Node1->X == X && Node1->Y == Y)
 			{
 				Node1->Z = SperrZ;
-				if (DebugLevel >= 8) write_fortschritt("Knoten %d wird erhöht (Lambda = %.5f)\n", Node1->Nr, Lambda);
+				if (DebugLevel >= 9) write_fortschritt("Knoten %d wird erhöht (Lambda = %.5f)\n", Node1->Nr, Lambda);
 			}
-			else if (fabs(Node2->X - X) < 0.1 && fabs(Node2->Y - Y) < 0.1)
+			else if (Node2->X == X && Node2->Y == Y)
 			{
 				Node2->Z = SperrZ;
-				if (DebugLevel >= 8) write_fortschritt("Knoten %d wird erhöht (Lambda = %.5f)\n", Node2->Nr, Lambda);
+				if (DebugLevel >= 9) write_fortschritt("Knoten %d wird erhöht (Lambda = %.5f)\n", Node2->Nr, Lambda);
 			}
 			else
 			{
 				TNode* Node = new TNode(++MaxNodeNr, X, Y, SperrZ);
-				NodeList->push_back(Node);
+				NodeList->Add(Node);
 
 				NewElement = new TElement(Node1, Node, Node3);
 				push_back(NewElement);
@@ -1052,7 +1022,7 @@
 				NewElement = new TElement(Node2, Node3, Node);
 				push_back(NewElement);
 
-				if (DebugLevel >= 8) write_fortschritt("Element %d : %d - %d - %d wird geändert\n", Count, Node1->Nr, Node2->Nr, Node3->Nr);
+				if (DebugLevel >= 9) write_fortschritt("Element %d : %d - %d - %d wird geändert\n", Count, Node1->Nr, Node2->Nr, Node3->Nr);
 
 				Element->Typ = NO_ELEMENT;
 				ChangeCount++;
@@ -1060,29 +1030,30 @@
 			}
 		}
 
-		double N23Dx = Node3->X - Node2->X;
-		double N23Dy = Node3->Y - Node2->Y;
-		if (fabs(N23Dx) < 0.00000001 && fabs(N23Dy) < 0.00000001)
+		if (Node2->X == Node3->X && Node2->Y == Node3->Y)
 		{
-			write_error(3214, "Knotenabstand (%.3f %.3f) - (%.3f %.3f) ist zu klein\n", Node2->X, Node2->Y, Node3->X, Node3->Y);
+			write_error(3214, "Knotenabstand (%.3f %.3f) - (%.3f %.3f) ist zu klein\n", Node2->X / 100.0, Node2->Y / 100.0, Node3->X / 100.0, Node3->Y / 100.0);
 		}
 
-		if (CalcProfilSchnitt(Node2->X, Node2->Y, Node3->X, Node3->Y, SperrenList, &X, &Y, &Lambda, &Meter))
+		if (CalcProfilSchnitt(Node2->X, Node2->Y, Node3->X, Node3->Y, SperrenList, &XD, &YD, &Lambda, &Meter))
 		{
-			if (fabs(Node2->X - X) < 0.1 && fabs(Node2->Y - Y) < 0.1)
+			long X = (long)(XD + 0.5);
+			long Y = (long)(YD + 0.5);
+
+			if (Node2->X == X && Node2->Y == Y)
 			{
 				Node2->Z = SperrZ;
-				if (DebugLevel >= 8) write_fortschritt("Knoten %d wird erhöht (Lambda = %.5f)\n", Node2->Nr, Lambda);
+				if (DebugLevel >= 9) write_fortschritt("Knoten %d wird erhöht (Lambda = %.5f)\n", Node2->Nr, Lambda);
 			}
-			else if (fabs(Node3->X - X) < 0.1 && fabs(Node3->Y - Y) < 0.1)
+			else if (Node3->X == X && Node3->Y == Y)
 			{
 				Node3->Z = SperrZ;
-				if (DebugLevel >= 8) write_fortschritt("Knoten %d wird erhöht (Lambda = %.5f)\n", Node3->Nr, Lambda);
+				if (DebugLevel >= 9) write_fortschritt("Knoten %d wird erhöht (Lambda = %.5f)\n", Node3->Nr, Lambda);
 			}
 			else
 			{
 				TNode* Node = new TNode(++MaxNodeNr, X, Y, SperrZ);
-				NodeList->push_back(Node);
+				NodeList->Add(Node);
 
 				NewElement = new TElement(Node2, Node, Node1);
 				push_back(NewElement);
@@ -1090,7 +1061,7 @@
 				NewElement = new TElement(Node3, Node1, Node);
 				push_back(NewElement);
 
-				if (DebugLevel >= 8) write_fortschritt("Element %d : %d - %d - %d wird geändert\n", Count, Node1->Nr, Node2->Nr, Node3->Nr);
+				if (DebugLevel >= 9) write_fortschritt("Element %d : %d - %d - %d wird geändert\n", Count, Node1->Nr, Node2->Nr, Node3->Nr);
 
 				Element->Typ = NO_ELEMENT;
 				ChangeCount++;
@@ -1098,29 +1069,30 @@
 			}
 		}
 
-		double N31Dx = Node1->X - Node3->X;
-		double N31Dy = Node1->Y - Node3->Y;
-		if (fabs(N31Dx) < 0.00000001 && fabs(N31Dy) < 0.00000001)
+		if (Node3->X == Node1->X && Node3->Y == Node1->Y)
 		{
-			write_error(3214, "Knotenabstand (%.3f %.3f) - (%.3f %.3f) ist zu klein\n", Node3->X, Node3->Y, Node1->X, Node1->Y);
+			write_error(3214, "Knotenabstand (%.3f %.3f) - (%.3f %.3f) ist zu klein\n", Node3->X / 100.0, Node3->Y / 100.0, Node1->X / 100.0, Node1->Y / 100.0);
 		}
 
-		if (CalcProfilSchnitt(Node3->X, Node3->Y, Node1->X, Node1->Y, SperrenList, &X, &Y, &Lambda, &Meter))
+		if (CalcProfilSchnitt(Node3->X, Node3->Y, Node1->X, Node1->Y, SperrenList, &XD, &YD, &Lambda, &Meter))
 		{
-			if (fabs(Node3->X - X) < 0.1 && fabs(Node3->Y - Y) < 0.1)
+			long X = (long)(XD + 0.5);
+			long Y = (long)(YD + 0.5);
+
+			if (Node3->X == X && Node3->Y == Y)
 			{
 				Node3->Z = SperrZ;
-				if (DebugLevel >= 8) write_fortschritt("Knoten %d wird erhöht (Lambda = %.5f)\n", Node3->Nr, Lambda);
+				if (DebugLevel >= 9) write_fortschritt("Knoten %d wird erhöht (Lambda = %.5f)\n", Node3->Nr, Lambda);
 			}
-			else if (fabs(Node1->X - X) < 0.1 && fabs(Node1->Y - Y) < 0.1)
+			else if (Node1->X == X && Node1->Y == Y)
 			{
 				Node1->Z = SperrZ;
-				if (DebugLevel >= 8) write_fortschritt("Knoten %d wird erhöht (Lambda = %.5f)\n", Node1->Nr, Lambda);
+				if (DebugLevel >= 9) write_fortschritt("Knoten %d wird erhöht (Lambda = %.5f)\n", Node1->Nr, Lambda);
 			}
 			else
 			{
 				TNode* Node = new TNode(++MaxNodeNr, X, Y, SperrZ);
-				NodeList->push_back(Node);
+				NodeList->Add(Node);
 
 				NewElement = new TElement(Node3, Node, Node2);
 				push_back(NewElement);
@@ -1128,7 +1100,7 @@
 				NewElement = new TElement(Node1, Node2, Node);
 				push_back(NewElement);
 
-				if (DebugLevel >= 8) write_fortschritt("Element %d : %d - %d - %d wird geändert\n", Count, Node1->Nr, Node2->Nr, Node3->Nr);
+				if (DebugLevel >= 9) write_fortschritt("Element %d : %d - %d - %d wird geändert\n", Count, Node1->Nr, Node2->Nr, Node3->Nr);
 
 				Element->Typ = NO_ELEMENT;
 				ChangeCount++;
@@ -1172,32 +1144,33 @@
 
 		double Lambda = 0.0;
 		double Meter = 0.0;
-		double X = 0.0;
-		double Y = 0.0;
+		double XD = 0.0;
+		double YD = 0.0;
 
-		double N12Dx = Node2->X - Node1->X;
-		double N12Dy = Node2->Y - Node1->Y;
-		if (fabs(N12Dx) < 0.00000001 && fabs(N12Dy) < 0.00000001)
+		if (Node2->X == Node1->X && Node2->Y == Node1->Y)
 		{
-			write_error(3214, "Knotenabstand (%.3f %.3f) - (%.3f %.3f) ist zu klein\n", Node1->X, Node1->Y, Node2->X, Node2->Y);
+			write_error(3214, "Knotenabstand (%.3f %.3f) - (%.3f %.3f) ist zu klein\n", Node1->X / 100.0, Node1->Y / 100.0, Node2->X / 100.0, Node2->Y / 100.0);
 		}
 
-		if (CalcProfilSchnitt(Node1->X, Node1->Y, Node2->X, Node2->Y, GrabenList, &X, &Y, &Lambda, &Meter))
+		if (CalcProfilSchnitt(Node1->X, Node1->Y, Node2->X, Node2->Y, GrabenList, &XD, &YD, &Lambda, &Meter))
 		{
-			if (fabs(Node1->X - X) < 0.1 && fabs(Node1->Y - Y) < 0.1)
+			long X = (long)(XD + 0.5);
+			long Y = (long)(YD + 0.5);
+
+			if (Node1->X == X && Node1->Y == Y)
 			{
 				Node1->Z = GrabenZ;
-				if (DebugLevel >= 8) write_fortschritt("Knoten %d wird abgesenkt (Lambda = %.5f)\n", Node1->Nr, Lambda);
+				if (DebugLevel >= 9) write_fortschritt("Knoten %d wird abgesenkt (Lambda = %.5f)\n", Node1->Nr, Lambda);
 			}
-			else if (fabs(Node2->X - X) < 0.1 && fabs(Node2->Y - Y) < 0.1)
+			else if (Node2->X == X && Node2->Y == Y)
 			{
 				Node2->Z = GrabenZ;
-				if (DebugLevel >= 8) write_fortschritt("Knoten %d wird abgesenkt (Lambda = %.5f)\n", Node2->Nr, Lambda);
+				if (DebugLevel >= 9) write_fortschritt("Knoten %d wird abgesenkt (Lambda = %.5f)\n", Node2->Nr, Lambda);
 			}
 			else
 			{
 				TNode* Node = new TNode(++MaxNodeNr, X, Y, GrabenZ);
-				NodeList->push_back(Node);
+				NodeList->Add(Node);
 
 				NewElement = new TElement(Node1, Node, Node3);
 				push_back(NewElement);
@@ -1205,7 +1178,7 @@
 				NewElement = new TElement(Node2, Node3, Node);
 				push_back(NewElement);
 
-				if (DebugLevel >= 8) write_fortschritt("Element %d : %d - %d - %d wird geändert\n", Count, Node1->Nr, Node2->Nr, Node3->Nr);
+				if (DebugLevel >= 9) write_fortschritt("Element %d : %d - %d - %d wird geändert\n", Count, Node1->Nr, Node2->Nr, Node3->Nr);
 
 				Element->Typ = NO_ELEMENT;
 				ChangeCount++;
@@ -1213,29 +1186,30 @@
 			}
 		}
 
-		double N23Dx = Node3->X - Node2->X;
-		double N23Dy = Node3->Y - Node2->Y;
-		if (fabs(N23Dx) < 0.00000001 && fabs(N23Dy) < 0.00000001)
+		if (Node3->X == Node2->X && Node3->Y == Node2->Y)
 		{
-			write_error(3214, "Knotenabstand (%.3f %.3f) - (%.3f %.3f) ist zu klein\n", Node2->X, Node2->Y, Node3->X, Node3->Y);
+			write_error(3214, "Knotenabstand (%.3f %.3f) - (%.3f %.3f) ist zu klein\n", Node2->X / 100.0, Node2->Y / 100.0, Node3->X / 100.0, Node3->Y / 100.0);
 		}
 
-		if (CalcProfilSchnitt(Node2->X, Node2->Y, Node3->X, Node3->Y, GrabenList, &X, &Y, &Lambda, &Meter))
+		if (CalcProfilSchnitt(Node2->X, Node2->Y, Node3->X, Node3->Y, GrabenList, &XD, &YD, &Lambda, &Meter))
 		{
-			if (fabs(Node2->X - X) < 0.1 && fabs(Node2->Y - Y) < 0.1)
+			long X = (long)(XD + 0.5);
+			long Y = (long)(YD + 0.5);
+
+			if (Node2->X == X && Node2->Y == Y)
 			{
 				Node2->Z = GrabenZ;
-				if (DebugLevel >= 8) write_fortschritt("Knoten %d wird abgesenkt (Lambda = %.5f)\n", Node2->Nr, Lambda);
+				if (DebugLevel >= 9) write_fortschritt("Knoten %d wird abgesenkt (Lambda = %.5f)\n", Node2->Nr, Lambda);
 			}
-			else if (fabs(Node3->X - X) < 0.1 && fabs(Node3->Y - Y) < 0.1)
+			else if (Node3->X == X && Node3->Y == Y)
 			{
 				Node3->Z = GrabenZ;
-				if (DebugLevel >= 8) write_fortschritt("Knoten %d wird erhöht (Lambda = %.5f)\n", Node3->Nr, Lambda);
+				if (DebugLevel >= 9) write_fortschritt("Knoten %d wird erhöht (Lambda = %.5f)\n", Node3->Nr, Lambda);
 			}
 			else
 			{
 				TNode* Node = new TNode(++MaxNodeNr, X, Y, GrabenZ);
-				NodeList->push_back(Node);
+				NodeList->Add(Node);
 
 				NewElement = new TElement(Node2, Node, Node1);
 				push_back(NewElement);
@@ -1243,7 +1217,7 @@
 				NewElement = new TElement(Node3, Node1, Node);
 				push_back(NewElement);
 
-				if (DebugLevel >= 8) write_fortschritt("Element %d : %d - %d - %d wird geändert\n", Count, Node1->Nr, Node2->Nr, Node3->Nr);
+				if (DebugLevel >= 9) write_fortschritt("Element %d : %d - %d - %d wird geändert\n", Count, Node1->Nr, Node2->Nr, Node3->Nr);
 
 				Element->Typ = NO_ELEMENT;
 				ChangeCount++;
@@ -1251,29 +1225,30 @@
 			}
 		}
 
-		double N31Dx = Node1->X - Node3->X;
-		double N31Dy = Node1->Y - Node3->Y;
-		if (fabs(N31Dx) < 0.00000001 && fabs(N31Dy) < 0.00000001)
+		if (Node1->X == Node3->X && Node1->Y == Node3->Y)
 		{
-			write_error(3214, "Knotenabstand (%.3f %.3f) - (%.3f %.3f) ist zu klein\n", Node3->X, Node3->Y, Node1->X, Node1->Y);
+			write_error(3214, "Knotenabstand (%.3f %.3f) - (%.3f %.3f) ist zu klein\n", Node3->X / 100.0, Node3->Y / 100.0, Node1->X / 100.0, Node1->Y / 100.0);
 		}
 
-		if (CalcProfilSchnitt(Node3->X, Node3->Y, Node1->X, Node1->Y, GrabenList, &X, &Y, &Lambda, &Meter))
+		if (CalcProfilSchnitt(Node3->X, Node3->Y, Node1->X, Node1->Y, GrabenList, &XD, &YD, &Lambda, &Meter))
 		{
-			if (fabs(Node3->X - X) < 0.1 && fabs(Node3->Y - Y) < 0.1)
+			long X = (long)(XD + 0.5);
+			long Y = (long)(YD + 0.5);
+
+			if (Node3->X == X && Node3->Y == Y)
 			{
 				Node3->Z = GrabenZ;
-				if (DebugLevel >= 8) write_fortschritt("Knoten %d wird abgesenkt (Lambda = %.5f)\n", Node3->Nr, Lambda);
+				if (DebugLevel >= 9) write_fortschritt("Knoten %d wird abgesenkt (Lambda = %.5f)\n", Node3->Nr, Lambda);
 			}
-			else if (fabs(Node1->X - X) < 0.1 && fabs(Node1->Y - Y) < 0.1)
+			else if (Node1->X == X && Node1->Y == Y)
 			{
 				Node1->Z = GrabenZ;
-				if (DebugLevel >= 8) write_fortschritt("Knoten %d wird abgesenkt (Lambda = %.5f)\n", Node1->Nr, Lambda);
+				if (DebugLevel >= 9) write_fortschritt("Knoten %d wird abgesenkt (Lambda = %.5f)\n", Node1->Nr, Lambda);
 			}
 			else
 			{
 				TNode* Node = new TNode(++MaxNodeNr, X, Y, GrabenZ);
-				NodeList->push_back(Node);
+				NodeList->Add(Node);
 
 				NewElement = new TElement(Node3, Node, Node2);
 				push_back(NewElement);
@@ -1281,7 +1256,7 @@
 				NewElement = new TElement(Node1, Node2, Node);
 				push_back(NewElement);
 
-				if (DebugLevel >= 8) write_fortschritt("Element %d : %d - %d - %d wird geändert\n", Count, Node1->Nr, Node2->Nr, Node3->Nr);
+				if (DebugLevel >= 9) write_fortschritt("Element %d : %d - %d - %d wird geändert\n", Count, Node1->Nr, Node2->Nr, Node3->Nr);
 
 				Element->Typ = NO_ELEMENT;
 				ChangeCount++;
@@ -1299,9 +1274,22 @@
 }
 
 //---------------------------------------------------------------------
-// TPolygonList
+// TErgebnisPolygon
 //---------------------------------------------------------------------
 
+//---------------------------------------------------------------------
+TErgebnisPolygon::TErgebnisPolygon(double diff)
+{
+	Gewaesser = "dummy";
+	VonKm = 0.0;
+	BisKm = 0.0;
+	Diff = diff;
+}
+
+//---------------------------------------------------------------------
+// TErgebnisPolygonList
+//---------------------------------------------------------------------
+
 //---------------------------------------------------------------------------
 TErgebnisPolygonList::~TErgebnisPolygonList(void)
 {
@@ -1374,7 +1362,7 @@
 }
 
 //---------------------------------------------------------------------
-TInsideTyp TErgebnisPolygonList::IsInsidePolygonList(double X, double Y)
+TInsideTyp TErgebnisPolygonList::IsInsidePolygonList(long X, long Y)
 {
 
 	for (TErgebnisPolygonList::iterator i = begin(); i != end(); i++)
@@ -1422,14 +1410,14 @@
 
 	if (Distance < MinNodeDistanceKonst)
 	{
-		dump_error (__FILE__, __LINE__, "Beim Erzeugen einer Kante ist der Abstand der Knoten zu dicht\nAbstand: %f\nKnoten 1: (%d,%f,%f)\nKnoten 2: (%d,%f,%f)\n", Distance, Node1->Nr, Node1->X, Node1->Y, Node2->Nr, Node2->X, Node2->Y);
+		dump_error (__FILE__, __LINE__, "Beim Erzeugen einer Kante ist der Abstand der Knoten zu dicht\nAbstand: %f\nKnoten 1: (%d,%d,%d)\nKnoten 2: (%d,%d,%d)\n", Distance, Node1->Nr, Node1->X, Node1->Y, Node2->Nr, Node2->X, Node2->Y);
 	}
 
 	Arc = acos (Dx / Distance) * 180.0 / M_PI;
 	if (Dy < 0) Arc = 360.0 - Arc;
 
-	X = 0.0;
-	Y = 0.0;
+	X = 0;
+	Y = 0;
 	Ready = false;
 	IsBoundary = false;
 }
@@ -1458,7 +1446,7 @@
 TEdgeList::TEdgeList(void)
 {
 	Anz = 0;
-	AvgDistance = 0.0;
+	AvgDistance = 0;
 
 	// Nur als Hüllen für das Suchen nach Kanten
 	SearchNode1 = new TNode(0, 1, 1, 1);
@@ -1479,7 +1467,7 @@
 //---------------------------------------------------------------------
 void TEdgeList::Clear(void)
 {
-	for (TEdgeListNrSorted::const_iterator i = EdgeListNrSorted.begin(); i != EdgeListNrSorted.end(); i++)
+	for (TEdgeVector::const_iterator i = EdgeVector.begin(); i != EdgeVector.end(); i++)
 	{
 		TEdge *Edge = *i;
 		delete Edge;
@@ -1490,16 +1478,15 @@
 		dump_error(__FILE__, __LINE__, "Anz der Kanten ist nicht 0\n");
 	}
 
-	AvgDistance = 0.0;
+	AvgDistance = 0;
 
-	EdgeListNrSorted.clear();
-	EdgeListDistanceSorted.clear();
+	EdgeVector.clear();
 }
 
 //---------------------------------------------------------------------
 void TEdgeList::Empty(void)
 {
-	for (TEdgeListNrSorted::const_iterator i = EdgeListNrSorted.begin(); i != EdgeListNrSorted.end(); i++)
+	for (TEdgeVector::const_iterator i = EdgeVector.begin(); i != EdgeVector.end(); i++)
 	{
 		Anz--;
 	}
@@ -1509,63 +1496,21 @@
 		dump_error(__FILE__, __LINE__, "Anz der Kanten ist nicht 0\n");
 	}
 
-	AvgDistance = 0.0;
+	AvgDistance = 0;
 
-	EdgeListNrSorted.clear();
-	EdgeListDistanceSorted.clear();
+	EdgeVector.clear();
 }
 
 //---------------------------------------------------------------------
-TEdge* TEdgeList::First(void)
-{
-	if (Anz == 0) return(0);
-
-	if (EdgeListDistanceSorted.size() == 0)
-	{
-		dump_error(__FILE__, __LINE__, "Da ist nichts mehr drin\n");
-	}
-
-	TEdge *Edge = 0;
-	TEdgeListDistanceSorted::iterator It = EdgeListDistanceSorted.begin();
-	while (It != EdgeListDistanceSorted.end())
-	{
-		Edge = *It++;
-		if (false == Edge->IsBoundary)	break;
-	}
-	return (Edge);
-}
-
-//---------------------------------------------------------------------
 void TEdgeList::Add(TEdge *edge)
 {
-	EdgeListNrSorted.insert(edge);
+	EdgeVector.push_back(edge);
 	AvgDistance = AvgDistance * Anz;
 	Anz++;
-	AvgDistance = (AvgDistance + edge->Distance) / Anz;
-
-	if (Anz != EdgeListNrSorted.size())
-	{
-		write_warning(9197, "Die Kante (%d - %d) wurde bereits erzeugt.\n", edge->Node1->Nr, edge->Node2->Nr);
-
-		Anz = EdgeListNrSorted.size();
-	}
-	else
-	{
-		EdgeListDistanceSorted.insert(edge);
-	}
+	AvgDistance = (unsigned int)((AvgDistance + edge->Distance) / Anz + 0.5);
 }
 
 //---------------------------------------------------------------------
-TEdge* TEdgeList::Add(TNode *Node1, TNode *Node2)
-{
-	TEdge *NewEdge = new TEdge(Node1, Node2);
-
-	Add(NewEdge);
-
-	return (NewEdge);
-}
-
-//---------------------------------------------------------------------
 TEdge* TEdgeList::AddWithIndex(TNode *Node1, TNode *Node2)
 {
 	TEdge *NewEdge = new TEdge(Node1, Node2);
@@ -1580,136 +1525,6 @@
 }
 
 //---------------------------------------------------------------------
-void TEdgeList::Erase(TEdge *edge)
-{
-	if (Anz == 0)
-	{
-		dump_error(__FILE__, __LINE__, "Konnte Kante nicht löschen da keine Kanten mehr da waren\n");
-	}
-
-	TEdgeListNrSorted::iterator NrIt = EdgeListNrSorted.find(edge);
-
-	if (NrIt == EdgeListNrSorted.end())
-	{
-		dump_error(__FILE__, __LINE__, "Konnte Kante nicht löschen, da sie nicht gefunden wurde\n");
-	}
-
-	TEdgeListDistanceSorted::iterator DistanceIt = EdgeListDistanceSorted.find(edge);
-
-	if (DistanceIt == EdgeListDistanceSorted.end())
-	{
-		dump_error(__FILE__, __LINE__, "Konnte Kante nicht löschen, da sie nicht gefunden wurde\n");
-	}
-
-	TEdge *Edge1 = *NrIt;
-	TEdge *Edge2 = *DistanceIt;
-
-	if (Edge1->Node1->Nr != Edge2->Node1->Nr || Edge1->Node2->Nr != Edge2->Node2->Nr)
-	{
-		dump_error(__FILE__, __LINE__, "Es werden zwei verschiedene Kanten gelöscht (durch Nr identifiziert)\n");
-	}
-
-	if (Edge1->Node1 != Edge2->Node1 || Edge1->Node2 != Edge2->Node2)
-	{
-		dump_error(__FILE__, __LINE__, "Es werden zwei verschiedene Kanten gelöscht (durch Nodes identifiziert)\n");
-	}
-
-
-	AvgDistance = AvgDistance * Anz;
-	AvgDistance = AvgDistance - edge->Distance;
-
-	TEdge *Edge = *NrIt;
-	delete Edge;
-
-	// Kante aus Nr-Liste löschen
-	EdgeListNrSorted.erase(NrIt);
-	EdgeListDistanceSorted.erase(DistanceIt);
-	Anz--;
-
-	if (Anz == 0)	AvgDistance = 0.0;
-	else			AvgDistance = AvgDistance / Anz;
-
-	if (Anz != EdgeListNrSorted.size())
-	{
-		dump_error(__FILE__, __LINE__, "Anz = %d size() = %d A\n", Anz, EdgeListNrSorted.size());
-	}
-
-	if (Anz != EdgeListDistanceSorted.size())
-	{
-		dump_error(__FILE__, __LINE__, "Anz = %d size() = %d B\n", Anz, EdgeListDistanceSorted.size());
-	}
-}
-
-//---------------------------------------------------------------------
-void TEdgeList::EraseWithIndex(TEdge* edge)
-{
-	edge->Node1->EraseEdgeIndex(edge);
-	edge->Node2->EraseEdgeIndex(edge);
-
-	Erase(edge);
-}
-
-//---------------------------------------------------------------------
-TEdge* TEdgeList::Find(TEdge *edge)
-{
-	if (Anz == 0)	return(0);
-
-	TEdgeListNrSorted::iterator NrIt = EdgeListNrSorted.find(edge);
-
-	TEdge *Edge = 0;
-	if (NrIt != EdgeListNrSorted.end())	Edge = *NrIt;
-
-/*
-	for (TEdgeListNrSorted::iterator i=EdgeListNrSorted.begin(); i!=EdgeListNrSorted.end(); i++)
-	{
-		TEdge* TestEdge = *i;
-
-		if (0 == Edge && edge->Node1->Nr == TestEdge->Node1->Nr && edge->Node2->Nr == TestEdge->Node2->Nr)
-		{
-			TEdgeListNrSorted::iterator NrIt = EdgeListNrSorted.find(edge);
-			for (TEdgeListNrSorted::iterator j=EdgeListNrSorted.begin(); j!=EdgeListNrSorted.end(); j++)
-			{
-				TEdge* E = *j;
-				write_fortschritt("E %d - %d\n", E->Node1->Nr, E->Node2->Nr);
-			}
-		}
-	}
-
-	if (Edge && (Edge->Node1->Nr != edge->Node1->Nr || Edge->Node2->Nr != edge->Node2->Nr))
-	{
-		TEdgeListNrSorted::iterator NrIt = EdgeListNrSorted.find(edge);
-		write_warning(9999, "Kante %d - %d gefunden\n", edge->Node1->Nr, edge->Node2->Nr);
-	}
-*/
-
-	return (Edge);
-}
-
-//---------------------------------------------------------------------
-TEdge* TEdgeList::Find(int NodeNr1, int NodeNr2)
-{
-	if (Anz == 0)	return(0);
-
-	// SearchNode1 und SearchNode2 sind Elemente von SearchNode
-	SearchNode1->Nr = NodeNr1;
-	SearchNode2->Nr = NodeNr2;
-
-	return (Find(SearchEdge));
-}
-
-//---------------------------------------------------------------------
-TEdge* TEdgeList::Find(TNode *Node1, TNode *Node2)
-{
-	if (Anz == 0)	return(0);
-
-	// SearchNode1 und SearchNode2 sind Elemente von SearchNode
-	SearchNode1->Nr = Node1->Nr;
-	SearchNode2->Nr = Node2->Nr;
-
-	return (Find(SearchEdge));
-}
-
-//---------------------------------------------------------------------
 TEdge* TEdgeList::FindWithIndex(TNode *Node1, TNode *Node2)
 {
 	if (Anz == 0)	return(0);
@@ -1736,7 +1551,7 @@
 //---------------------------------------------------------------------
 void TEdgeList::BuildEdgeIndex(void)
 {
-	for (TEdgeListNrSorted::const_iterator i=EdgeListNrSorted.begin(); i != EdgeListNrSorted.end(); i++)
+	for (TEdgeVector::const_iterator i=EdgeVector.begin(); i != EdgeVector.end(); i++)
 	{
 		TEdge *Edge = *i;
 
@@ -1764,7 +1579,7 @@
 //---------------------------------------------------------------------
 
 //---------------------------------------------------------------------
-TProfil::TProfil(std::string gewaesser, int station, double wsp)
+TProfil::TProfil(std::string gewaesser, int station, int wsp)
 {
 	Gewaesser = gewaesser;
 	Station = station;
@@ -1799,27 +1614,25 @@
 		for (TPointList::iterator i=PointList->begin(); i != PointList->end(); i++)
 		{
 			TPoint *Point = *i;
-
 			delete Point;
 		}
-
 		delete PointList;
 	}
 }
 
 //---------------------------------------------------------------------
-void TProfil::AddPoint(double meter)
+void TProfil::AddPoint(int meter)
 {
 	if (0 == PointList || PointList->size() < 2)
 	{
 		dump_error(__FILE__, __LINE__, "Weniger als 2 Punkte im Profil vorhanden\n");
 	}
 
-	double X = 0.0;
-	double Y = 0.0;
+	long X = 0;
+	long Y = 0;
 	GetXY(meter, &X, &Y);
 
-	TPoint* NewPoint = new TPoint(X, Y, 0.0, meter);
+	TPoint* NewPoint = new TPoint(X, Y, 0, meter);
 
 	unsigned int Anz = PointList->size();
 
@@ -1833,7 +1646,7 @@
 }
 
 //---------------------------------------------------------------------
-void TProfil::AddPoint(double x, double y, double z)
+void TProfil::AddPoint(long x, long y, int z)
 {
 	if (0 == PointList)	PointList = new TPointList;
 
@@ -1846,29 +1659,31 @@
 		i++;
 	}
 
-	double Meter = 0.0;
+	double MeterD = 0.0;
 
 	if (LastPoint)
 	{
-		double X = LastPoint->X;
-		double Y = LastPoint->Y;
-		double M = LastPoint->Meter;
+		long X = LastPoint->X;
+		long Y = LastPoint->Y;
+		int M = LastPoint->Meter;
 
 		double Dx = X - x;
 		double Dy = Y - y;
 
 		double D = sqrt(Dx * Dx + Dy * Dy);
 
-		Meter = M + D;
+		MeterD = M + D;
 	}
 
+	int Meter = (int)(MeterD + 0.5);
+	
 	TPoint* NewPoint = new TPoint(x, y, z, Meter);
 
 	PointList->insert(NewPoint);
 }
 
 //---------------------------------------------------------------------
-bool TProfil::GetXY(double meter, double *x, double *y)
+bool TProfil::GetXY(int meter, long *x, long *y)
 {
 	if (0 == PointList || PointList->size() < 2)
 	{
@@ -1881,7 +1696,7 @@
 	TPoint *Point = 0;
 	while (i != PointList->end())
 	{
-		Point = *i;
+		Point = *i++;
 
 		if (Point->Meter == meter)
 		{
@@ -1901,8 +1716,8 @@
 
 				double Faktor = (meter - LastPoint->Meter) / Dm;
 
-				*x = LastPoint->X + Dx * Faktor;
-				*y = LastPoint->Y + Dy * Faktor;
+				*x = (long)(LastPoint->X + Dx * Faktor + 0.5);
+				*y = (long)(LastPoint->Y + Dy * Faktor + 0.5);
 
 				if (Faktor >= 0.0)
 				{
@@ -1911,7 +1726,7 @@
 
 				return (false);
 			}
-			else if (meter > LastPoint->Meter && meter < Point->Meter)
+			else if (meter >= LastPoint->Meter && meter <= Point->Meter)
 			{
 				// Der gesuchte Punkt liegt zwischen Punkten des Profils
 				double Dx = Point->X - LastPoint->X;
@@ -1920,8 +1735,8 @@
 
 				double Faktor = (meter - LastPoint->Meter) / Dm;
 
-				*x = LastPoint->X + Dx * Faktor;
-				*y = LastPoint->Y + Dy * Faktor;
+				*x = (long)(LastPoint->X + Dx * Faktor + 0.5);
+				*y = (long)(LastPoint->Y + Dy * Faktor + 0.5);
 
 				if (Faktor <= 0.0 || Faktor >= 1.0)
 				{
@@ -1930,29 +1745,32 @@
 
 				return (true);
 			}
+			else if (i == PointList->end())
+			{
+				// Der gesuchte Punkt liegt hinter dem letzten Punkt des Profils
+				double Dx = Point->X - LastPoint->X;
+				double Dy = Point->Y - LastPoint->Y;
+				double Dm = Point->Meter - LastPoint->Meter;
 
-		}
+				double Faktor = (meter - LastPoint->Meter) / Dm;
 
-		LastPoint = Point;
+				*x = (long)(LastPoint->X + Dx * Faktor + 0.5);
+				*y = (long)(LastPoint->Y + Dy * Faktor + 0.5);
 
-		i++;
-	}
+				if (Faktor <= 1.0)
+				{
+					dump_error(__FILE__, __LINE__,  "Faktor ist nicht größer als 1, aber der gesuchte Punkt liegt hinter dem Profil\n");
+				}
 
-	// Der gesuchte Punkt liegt hinter dem letzten Punkt des Profils
-	double Dx = Point->X - LastPoint->X;
-	double Dy = Point->Y - LastPoint->Y;
-	double Dm = Point->Meter - LastPoint->Meter;
+				return (false);
+			}
+		}
 
-	double Faktor = (meter - LastPoint->Meter) / Dm;
-
-	*x = LastPoint->X + Dx * Faktor;
-	*y = LastPoint->Y + Dy * Faktor;
-
-	if (Faktor <= 1.0)
-	{
-		dump_error(__FILE__, __LINE__,  "Faktor ist nicht größer als 1, aber der gesuchte Punkt liegt hinter dem Profil\n");
+		LastPoint = Point;
 	}
 
+	dump_error(__FILE__, __LINE__,  "So kann der Punkt nicht ermittelt werden\n");
+
 	return (false);
 }
 
@@ -1985,7 +1803,7 @@
 		double MeterTwoI = PointTwoI->Meter;
 
 		double Prozent = (MeterTwoI - MeterTwoVon) / LaengeTwo;
-		double Meter = MeterOneVon + LaengeOne * Prozent;
+		int Meter = (int)(MeterOneVon + LaengeOne * Prozent + 0.5);
 
 		int OldAnz = PointList->size();
 		int NewAnz = PointList->size();
@@ -1993,7 +1811,7 @@
 		{
 			AddPoint(Meter);
 			NewAnz = PointList->size();
-			Meter = Meter + 0.1;
+			Meter = Meter + 1;
 		}
 	}
 }
@@ -2016,11 +1834,11 @@
 
 		double VX = VPoint->X;
 		double NX = NPoint->X;
-		double X = VX + Prozent * (NX - VX);
+		long X = (long)(VX + Prozent * (NX - VX) + 0.5);
 
 		double VY = VPoint->Y;
 		double NY = NPoint->Y;
-		double Y = VY + Prozent * (NY - VY);
+		long Y = (long)(VY + Prozent * (NY - VY) + 0.5);
 
 		AddPoint(X, Y);
 	}
@@ -2202,7 +2020,7 @@
 		{
 			double Prozent = j * Abstand / Diff;
 			int NewStation = (int)(FirstProfil->Station + j * Abstand + 0.5);
-			double NewWsp = FirstProfil->Wsp + Prozent * (NextProfil->Wsp - FirstProfil->Wsp);
+			int NewWsp = (int)(FirstProfil->Wsp + Prozent * (NextProfil->Wsp - FirstProfil->Wsp) + 0.5);
 
 			TProfil* NewProfil = new TProfil(FirstProfil->Gewaesser, NewStation, NewWsp);
 			NewProfil->InterpolateProfil(FirstProfilNeu, NextProfilNeu, Prozent);
@@ -2275,7 +2093,7 @@
 
 			for (int k=1; k<=Anz; k++)
 			{
-				double Meter = FirstPoint->Meter + k * Abstand;
+				int Meter = (int)(FirstPoint->Meter + k * Abstand + 0.5);
 
 				Profil->AddPoint(Meter);
 
@@ -2356,10 +2174,10 @@
 {
 	Gewaesser = gewaesser;
 	ID = id;
-	MinX = 99999999.9;
-	MaxX = -99999999.9;
-	MinY = 99999999.9;
-	MaxY = -99999999.9;
+	MinX = 999999999;
+	MaxX = -999999999;
+	MinY = 999999999;
+	MaxY = -999999999;
 
 	PointList = 0;
 }
@@ -2370,10 +2188,10 @@
 	Gewaesser = gewaesserAchse->Gewaesser;
 	ID = gewaesserAchse->ID;
 
-	MinX = 99999999.9;
-	MaxX = -99999999.9;
-	MinY = 99999999.9;
-	MaxY = -99999999.9;
+	MinX = 999999999;
+	MaxX = -999999999;
+	MinY = 999999999;
+	MaxY = -999999999;
 
 	PointList = new TPointList;
 	for (TPointList::iterator i=gewaesserAchse->PointList->begin(); i != gewaesserAchse->PointList->end(); i++)
@@ -2415,22 +2233,25 @@
 
 		delete PointList;
 	}
-	MinX = 99999999.9;
-	MaxX = -99999999.9;
-	MinY = 99999999.9;
-	MaxY = -99999999.9;
+	MinX = 999999999;
+	MaxX = -999999999;
+	MinY = 999999999;
+	MaxY = -999999999;
 }
 
 //---------------------------------------------------------------------
-void TGewaesserAchse::AddPoint(double meter)
+void TGewaesserAchse::AddPoint(int meter)
 {
-	if (0 == PointList || PointList->size() < 2)	dump_error(__FILE__, __LINE__, "Weniger als 2 Punkte im Gewässerachse vorhanden\n");
+	if (0 == PointList || PointList->size() < 2)
+	{
+		dump_error(__FILE__, __LINE__, "Weniger als 2 Punkte im Gewässerachse vorhanden\n");
+	}
 
-	double X = 0.0;
-	double Y = 0.0;
+	long X = 0;
+	long Y = 0;
 	GetXY(meter, &X, &Y);
 
-	TPoint* NewPoint = new TPoint(X, Y, 0.0, meter);
+	TPoint* NewPoint = new TPoint(X, Y, 0, meter);
 
 	PointList->insert(NewPoint);
 
@@ -2441,7 +2262,7 @@
 }
 
 //---------------------------------------------------------------------
-void TGewaesserAchse::AddPoint(double x, double y, double z)
+void TGewaesserAchse::AddPoint(long x, long y, int z)
 {
 	if (0 == PointList)	PointList = new TPointList;
 
@@ -2454,7 +2275,7 @@
 		i++;
 	}
 
-	double Meter = 0.0;
+	double MeterD = 0.0;
 
 	if (LastPoint)
 	{
@@ -2467,9 +2288,11 @@
 
 		double D = sqrt(Dx * Dx + Dy * Dy);
 
-		Meter = M + D;
+		MeterD = M + D;
 	}
 
+	int Meter = (int)(MeterD + 0.5);
+	
 	TPoint* NewPoint = new TPoint(x, y, z, Meter);
 
 	PointList->insert(NewPoint);
@@ -2481,9 +2304,12 @@
 }
 
 //---------------------------------------------------------------------
-bool TGewaesserAchse::GetXY(double meter, double *x, double *y)
+bool TGewaesserAchse::GetXY(int meter, long *x, long *y)
 {
-	if (0 == PointList || PointList->size() < 2)	dump_error(__FILE__, __LINE__, "Weniger als 2 Punkte im Gewässerachse vorhanden\n");
+	if (0 == PointList || PointList->size() < 2)
+	{
+		dump_error(__FILE__, __LINE__, "Weniger als 2 Punkte im Gewässerachse vorhanden\n");
+	}
 
 	TPointList::iterator i = PointList->begin();
 
@@ -2505,14 +2331,14 @@
 			if (meter < LastPoint->Meter)
 			{
 				// Der gesuchte Punkt liegt vor dem ersten Punkt des Profils
-				double Dx = Point->X - LastPoint->X;
-				double Dy = Point->Y - LastPoint->Y;
-				double Dm = Point->Meter - LastPoint->Meter;
+				long Dx = Point->X - LastPoint->X;
+				long Dy = Point->Y - LastPoint->Y;
+				int Dm = Point->Meter - LastPoint->Meter;
 
 				double Faktor = (meter - LastPoint->Meter) / Dm;
 
-				*x = LastPoint->X + Dx * Faktor;
-				*y = LastPoint->Y + Dy * Faktor;
+				*x = (long)(LastPoint->X + Dx * Faktor + 0.5);
+				*y = (long)(LastPoint->Y + Dy * Faktor + 0.5);
 
 				if (Faktor >= 0.0)
 				{
@@ -2524,14 +2350,14 @@
 			else if (meter > LastPoint->Meter && meter < Point->Meter)
 			{
 				// Der gesuchte Punkt liegt zwischen Punkten des Profils
-				double Dx = Point->X - LastPoint->X;
-				double Dy = Point->Y - LastPoint->Y;
-				double Dm = Point->Meter - LastPoint->Meter;
+				long Dx = Point->X - LastPoint->X;
+				long Dy = Point->Y - LastPoint->Y;
+				int Dm = Point->Meter - LastPoint->Meter;
 
 				double Faktor = (meter - LastPoint->Meter) / Dm;
 
-				*x = LastPoint->X + Dx * Faktor;
-				*y = LastPoint->Y + Dy * Faktor;
+				*x = (long)(LastPoint->X + Dx * Faktor + 0.5);
+				*y = (long)(LastPoint->Y + Dy * Faktor + 0.5);
 
 				if (Faktor <= 0.0 || Faktor >= 1.0)
 				{
@@ -2549,14 +2375,14 @@
 	}
 
 	// Der gesuchte Punkt liegt hinter dem letzten Punkt des Profils
-	double Dx = Point->X - LastPoint->X;
-	double Dy = Point->Y - LastPoint->Y;
-	double Dm = Point->Meter - LastPoint->Meter;
+	long Dx = Point->X - LastPoint->X;
+	long Dy = Point->Y - LastPoint->Y;
+	int Dm = Point->Meter - LastPoint->Meter;
 
 	double Faktor = (meter - LastPoint->Meter) / Dm;
 
-	*x = LastPoint->X + Dx * Faktor;
-	*y = LastPoint->Y + Dy * Faktor;
+	*x = (long)(LastPoint->X + Dx * Faktor + 0.5);
+	*y = (long)(LastPoint->Y + Dy * Faktor + 0.5);
 
 	if (Faktor <= 1.0)
 	{

Modified: trunk/src/xy.h
===================================================================
--- trunk/src/xy.h	2006-05-26 05:12:48 UTC (rev 49)
+++ trunk/src/xy.h	2006-06-04 23:49:03 UTC (rev 50)
@@ -24,6 +24,7 @@
 #endif
 
 //----------------------------------------------------------------------------
+#include <string>
 #include <vector>
 #include <list>
 #include <set>
@@ -31,6 +32,8 @@
 
 #include <math.h>
 
+#include "quadtree.h"
+
 //----------------------------------------------------------------------------
 typedef enum { NO_ELEMENT, TRI, QUAD } TElementTyp;
 typedef enum { NOT_INSIDE, INSIDE, ON_LINE, UNDEFINED } TInsideTyp;
@@ -74,16 +77,10 @@
 class TXY
 {
 	public:
-		double  		X;
-		double  		Y;
+		long  		X;
+		long  		Y;
 
-		// Dieser Wert ist eine abwechselt Bitweise Kombination des (long)(X * 100) und (long)(Y * 100) Wertes.
-		// X = 1.2345 -> (long)(X*100) = 123 = 0 0 1 1 1 1 0 1 1
-		// Y = 2.654  -> (long)(Y*100) = 265 = 1 0 0 0 0 1 0 0 1
-		// XYKombi = 0...0 01 00 10 10 10 11 00 10 11 = 0000000000000000000000000000000000000000000000010010101011001011
-		unsigned INT64	XYKombi;
-
-		TXY(double X, double Y);
+		TXY(long X, long Y);
 		TXY(TXY *Xy);
 };
 
@@ -95,12 +92,12 @@
 {
 	public:
 		int			Nr;
-		double 		Z;
-		double 		Wsp;
+		int			Z;
+		int 		Wsp;
 		TEdgeIndex 	*EdgeIndex;
 
-					TNode(int Nr, double X, double Y, double Z);
-					TNode(int Nr, double X, double Y, double Z, double Wsp);
+					TNode(int Nr, long X, long Y, int Z);
+					TNode(int Nr, long X, long Y, int Z, int Wsp);
 					TNode(TNode *Node);
 					~TNode(void);
 
@@ -116,11 +113,11 @@
 class TPoint : public TXY
 {
 	public:
-		double  	Z;
-		double  	Meter;
+		int  	Z;
+		int  	Meter;
 
-		TPoint(double X, double Y, double Meter);
-		TPoint(double X, double Y, double Z, double Meter);
+		TPoint(long X, long Y, int Meter);
+		TPoint(long X, long Y, int Z, int Meter);
 		TPoint(TPoint *Point);
 };
 
@@ -133,7 +130,7 @@
 	public:
 		bool operator()(TPoint* const &Point1, TPoint* const &Point2) const
 		{
-			return (Point1->Meter < Point2->Meter - 0.01);
+			return (Point1->Meter < Point2->Meter);
 		}
 };
 
@@ -181,8 +178,8 @@
 		TNode 	*Node2;
 		double  Distance;
 		double	Arc;
-		double	X;
-		double	Y;
+		long	X;
+		long	Y;
 		bool	Ready;
 		bool	IsBoundary;
 
@@ -191,248 +188,18 @@
 };
 
 //----------------------------------------------------------------------------
-// Dieses Template dient dem schnellen Zugriff auf Punkte mit X,Y-Koordinaten
-// Es wird bei Knoten (TNode) und einfache Stützstellen (TXY) verwendet
-// Das Template setzt voraus, dass es ein Feld gibt das nach XYKombi-Werten sortiert ist.
-// Dieses Feld wird indiziert (Build) und schnell abgefragt (Search und SearchAll)
-//----------------------------------------------------------------------------
-template <class TXyList, class TXy> class TXYKombiIndex
-{
-	public:
-		int				Start;
-		unsigned int	Anzahl;
-		TXYKombiIndex	*Zero;
-		TXYKombiIndex	*One;
-
-		//----------------------------------------------------------------------------
-		TXYKombiIndex(void)
-		{
-			Start = -1;
-			Anzahl = 0;
-			Zero = 0;
-			One = 0;
-		}
-
-		//----------------------------------------------------------------------------
-		~TXYKombiIndex(void)
-		{
-			if (Zero)   delete Zero;
-			Zero = 0;
-
-			if (One)    delete One;
-			One = 0;
-		}
-
-
-		//----------------------------------------------------------------------------
-		void Build(TXyList *XyList, int start, unsigned int anzahl, unsigned INT64 Mask = INT64SUFF(0x8000000000000000))
-		{
-			Start = start;
-			Anzahl = anzahl;
-
-			if (Mask && Anzahl > MaxXYKombiIndexAnzahlKonst)
-			{
-				unsigned int i = 0;
-				while (i < Anzahl)
-				{
-					TXy *Xy = (*XyList)[Start+i];
-
-					if (Xy->XYKombi & Mask) break;
-					i++;
-				}
-
-				if (i > 0)
-				{
-					Zero = new TXYKombiIndex();
-					Zero->Build(XyList, Start, i, Mask / 2);
-				}
-
-				if (Anzahl - i > 0)
-				{
-					One = new TXYKombiIndex();
-					One->Build(XyList, Start + i, Anzahl-i, Mask / 2);
-				}
-			}
-		}
-
-		//----------------------------------------------------------------------------
-		int Search(TXyList *XyList, double SX, double SY, double SR, bool LeftRight = true, unsigned INT64 XUnLi = INT64SUFF(0x00000000), unsigned INT64 YUnLi = INT64SUFF(0x00000000), unsigned INT64 XObRe = INT64SUFF(0xFFFFFFFF), unsigned INT64 YObRe = INT64SUFF(0xFFFFFFFF))
-		{
-			if (Zero == 0 && One == 0)
-			{
-				for (unsigned int i=0; i<Anzahl; i++)
-				{
-					TXy *Xy = (*XyList)[Start + i];
-
-					double Dx = Xy->X - SX;
-					double Dy = Xy->Y - SY;
-
-					if (sqrt(Dx * Dx + Dy * Dy) <  SR)
-					{
-						return (Start + i);
-					}
-				}
-				return (-1);
-			}
-
-			double DxUnLi = SX - XUnLi;
-			double DxObRe = SX - XObRe;
-			double DyUnLi = SY - YUnLi;
-			double DyObRe = SY - YObRe;
-
-			if (sqrt(DxUnLi * DxUnLi + DyUnLi * DyUnLi) < SR &&
-				sqrt(DxObRe * DxObRe + DyUnLi * DyUnLi) < SR &&
-				sqrt(DxUnLi * DxUnLi + DyObRe * DyObRe) < SR &&
-				sqrt(DxObRe * DxObRe + DyObRe * DyObRe) < SR)
-			{
-				return (Start);
-			}
-
-			if (LeftRight)
-			{
-				unsigned INT64 X = XUnLi / 2 + XObRe / 2;
-				double Left = SX - SR;
-				if (Left < 0)	Left = 0;
-				if ((unsigned INT64)(Left) <= X && Zero)
-				{
-					int Index = Zero->Search(XyList, SX, SY, SR, !LeftRight, XUnLi, YUnLi, X, YObRe);
-					if (Index >= 0) return (Index);
-				}
-
-				X = X + 1;
-
-				double Right = SX + SR;
-				if (Right > (double)0x7FFFFFFFL)	Right = (double)0x7FFFFFFFL;
-				if ((unsigned INT64)(Right) >= X && One)
-				{
-					int Index = One->Search(XyList, SX, SY, SR, !LeftRight, X, YUnLi, XObRe, YObRe);
-					if (Index >= 0) return (Index);
-				}
-			}
-			else
-			{
-				unsigned INT64 Y = YUnLi / 2 + YObRe / 2;
-				double Bottom = SY - SR;
-				if (Bottom < 0)	Bottom = 0;
-				if ((unsigned INT64)(Bottom) <= Y && Zero)
-				{
-					int Index = Zero->Search(XyList, SX, SY, SR, !LeftRight, XUnLi, YUnLi, XObRe, Y);
-					if (Index >= 0) return (Index);
-				}
-
-				Y = Y + 1;
-
-				double Top = SY + SR;
-				if (Top > (double)0x7FFFFFFFL)	Top = (double)0x7FFFFFFFL;
-				if ((unsigned INT64)(Top) >= Y && One)
-				{
-					int Index = One->Search(XyList, SX, SY, SR, !LeftRight, XUnLi, Y, XObRe, YObRe);
-					if (Index >= 0) return (Index);
-				}
-			}
-			return (-1);
-		}
-
-		//----------------------------------------------------------------------------
-		void SearchAll(std::vector<int> *NodeIndexList, TXyList *XyList, double SX, double SY, double SR, bool LeftRight = true, unsigned INT64 XUnLi = INT64SUFF(0x00000000), unsigned INT64 YUnLi = INT64SUFF(0x00000000), unsigned INT64 XObRe = INT64SUFF(0xFFFFFFFF), unsigned INT64 YObRe = INT64SUFF(0xFFFFFFFF))
-		{
-			if (Zero == 0 && One == 0)
-			{
-				for (unsigned int i=0; i<Anzahl; i++)
-				{
-					TXy *Xy = (*XyList)[Start + i];
-
-					double Dx = Xy->X - SX;
-					double Dy = Xy->Y - SY;
-
-					if (sqrt(Dx * Dx + Dy * Dy) <=  SR)
-					{
-						NodeIndexList->push_back(Start + i);
-					}
-				}
-				return;
-			}
-
-			double DxUnLi = SX - XUnLi;
-			double DxObRe = SX - XObRe;
-			double DyUnLi = SY - YUnLi;
-			double DyObRe = SY - YObRe;
-
-			if (sqrt(DxUnLi * DxUnLi + DyUnLi * DyUnLi) <= SR &&
-				sqrt(DxObRe * DxObRe + DyUnLi * DyUnLi) <= SR &&
-				sqrt(DxUnLi * DxUnLi + DyObRe * DyObRe) <= SR &&
-				sqrt(DxObRe * DxObRe + DyObRe * DyObRe) <= SR)
-			{
-				for (unsigned int i=0; i<Anzahl; i++)
-				{
-//					TXy *Xy = (*XyList)[Start + i];
-
-//					double Dx = Xy->X - SX;
-//					double Dy = Xy->Y - SY;
-
-//					if (sqrt(Dx * Dx + Dy * Dy) <  SR)
-					{
-						NodeIndexList->push_back(Start + i);
-					}
-				}
-				return;
-			}
-
-			if (LeftRight)
-			{
-				unsigned INT64 X = XUnLi / 2 + XObRe / 2;
-				double Left = SX - SR;
-				if (Left < 0)	Left = 0;
-				if ((unsigned INT64)(Left) <= X && Zero)
-				{
-					Zero->SearchAll(NodeIndexList, XyList, SX, SY, SR, !LeftRight, XUnLi, YUnLi, X, YObRe);
-				}
-
-				X = X + 1;
-
-				double Right = SX + SR;
-				if (Right > (double)0x7FFFFFFFL)	Right = (double)0x7FFFFFFFL;
-				if ((unsigned INT64)(Right) >= X && One)
-				{
-					One->SearchAll(NodeIndexList, XyList, SX, SY, SR, !LeftRight, X, YUnLi, XObRe, YObRe);
-				}
-			}
-			else
-			{
-				unsigned INT64 Y = YUnLi / 2 + YObRe / 2;
-				double Bottom = SY - SR;
-				if (Bottom < 0)	Bottom = 0;
-				if ((unsigned INT64)(Bottom) <= Y && Zero)
-				{
-					Zero->SearchAll(NodeIndexList, XyList, SX, SY, SR, !LeftRight, XUnLi, YUnLi, XObRe, Y);
-				}
-
-				Y = Y + 1;
-
-				double Top = SY + SR;
-				if (Top > (double)0x7FFFFFFFL)	Top = (double)0x7FFFFFFFL;
-				if ((unsigned INT64)(Top) >= Y && One)
-				{
-					One->SearchAll(NodeIndexList, XyList, SX, SY, SR, !LeftRight, XUnLi, Y, XObRe, YObRe);
-				}
-			}
-			return;
-		}
-};
-
-//----------------------------------------------------------------------------
 // TXYList verwaltet die TXY
 //----------------------------------------------------------------------------
 class TXYList : public std::vector<TXY *>
 {
 	private:
-		TXYKombiIndex<TXYList, TXY>	*XYKombiIndex;
+		TQuadTree<TXYList, TXY>	*QuadTree;
 
 	public:
-		double		 	MinX;
-		double		 	MaxX;
-		double		 	MinY;
-		double		 	MaxY;
+		long		 	MinX;
+		long		 	MaxX;
+		long		 	MinY;
+		long		 	MaxY;
 
 						TXYList(void);
 						~TXYList(void);
@@ -440,10 +207,10 @@
 		TXYList* 		Copy(void);
 
 		void 			Add(TXY *Xy);
-		void 			Add(double X, double Y);
+		void 			Add(long X, long Y);
 		void 			SortByXY(void);
-		TXY* 			FindByXY(double X, double Y, double Eps = 0.01);
-		TInsideTyp		IsInsideXYList(double X, double Y);
+		TXY* 			FindByXY(long X, long Y);
+		TInsideTyp		IsInsideXYList(long X, long Y);
 };
 
 //----------------------------------------------------------------------------
@@ -467,25 +234,32 @@
 class TNodeList : public std::vector<TNode *>
 {
 	private:
-		TXYKombiIndex<TNodeList, TNode>	*XYKombiIndex;
+		TQuadTree<TNodeList, TNode>*	QuadTree;
 		TNodeList*						SearchNodeList;
 
 	public:
-						TNodeList(void);
-						~TNodeList(void);
-		void 			Clear(void);
-		TNodeList* 		Copy(void);
+		int		 			MaxNr;
+		long		 		MinX;
+		long		 		MaxX;
+		long		 		MinY;
+		long		 		MaxY;
 
-		void			SortByXY(void);
-		void			SortByNr(void);
-		TNode*			FindByXY(double X, double Y, double Eps = 0.01);
-		TNodeList*		FindAllByXY(double X, double Y, double Eps = 0.01);
-		TNode*			FindByNr(int Nr);
-		bool			Interpolate(TProfilList* SperrenList, double X, double Y, double R, double *Z, double *Wsp);
-		void			ClearEdgeIndex(void);
-		double			GetMaxDepth(int DebugLevel);
-		double 			GetMaxWsp(int DebugLevel);
-		double 			GetMaxZ(int DebugLevel);
+							TNodeList(void);
+							~TNodeList(void);
+		void 				Clear(void);
+		TNodeList* 			Copy(void);
+
+		void 				Add(TNode *Node);
+		void				SortByXY(void);
+		void				SortByNr(void);
+		TNode*				FindByXY(long X, long Y);
+		TNodeList*			FindAllByXY(double X, double Y, double R);
+		TNode*				FindByNr(int Nr);
+		bool				Interpolate(TProfilList* SperrenList, long X, long Y, double R, int *Z, int *Wsp);
+		void				ClearEdgeIndex(void);
+		int					GetMaxDepth(int DebugLevel);
+		int 				GetMaxWsp(int DebugLevel);
+		int 				GetMaxZ(int DebugLevel);
 };
 
 //----------------------------------------------------------------------------
@@ -501,50 +275,11 @@
 
 
 //----------------------------------------------------------------------------
-// Hilfsfunktion zum automatischen Sortieren der Kanten nach Nummern
-//----------------------------------------------------------------------------
-class TEdgeCompNr
-{
-	public:
-		bool operator()(TEdge* const &Edge1, TEdge* const &Edge2) const
-		{
-			if (Edge1->Node1->Nr < Edge2->Node1->Nr)	return (true);
-			if (Edge1->Node1->Nr > Edge2->Node1->Nr)	return (false);
-			if (Edge1->Node2->Nr < Edge2->Node2->Nr)	return (true);
-			if (Edge1->Node2->Nr > Edge2->Node2->Nr)	return (false);
-			return (false); // Gleichheit ist NICHT kleiner
-		}
-};
-
-//----------------------------------------------------------------------------
-// Hilfsfunktion zum automatischen Sortieren der Kanten nach Längen
-//----------------------------------------------------------------------------
-class TEdgeCompDistance
-{
-	public:
-		bool operator()(TEdge* const &Edge1, TEdge* const &Edge2) const
-		{
-			if (Edge1->Distance < Edge2->Distance)		return(true);
-			if (Edge1->Distance > Edge2->Distance)		return(false);
-			if (Edge1->Node1->Nr < Edge2->Node1->Nr)	return (true);
-			if (Edge1->Node1->Nr > Edge2->Node1->Nr)	return (false);
-			if (Edge1->Node2->Nr < Edge2->Node2->Nr)	return (true);
-			if (Edge1->Node2->Nr > Edge2->Node2->Nr)	return (false);
-			return (false); // Gleichheit ist NICHT kleiner
-		}
-};
-
-//----------------------------------------------------------------------------
 // Ein 'set', das die Kanten nach Nummern sortiert speichert
 //----------------------------------------------------------------------------
-typedef std::set<TEdge *, TEdgeCompNr>				TEdgeListNrSorted;
+typedef std::vector<TEdge *>				TEdgeVector;
 
 //----------------------------------------------------------------------------
-// Ein 'set', das die Kanten nach Längen sortiert speichert
-//----------------------------------------------------------------------------
-typedef std::set<TEdge *, TEdgeCompDistance>		TEdgeListDistanceSorted;
-
-//----------------------------------------------------------------------------
 // Die EdgeList besteht aus zwei internen 'sets', die für einen schnellen
 // Zugriff auf die Kanten dienen
 //----------------------------------------------------------------------------
@@ -562,24 +297,16 @@
 									TEdgeList(void);
 									~TEdgeList(void);
 
-		TEdgeListNrSorted			EdgeListNrSorted;
-		TEdgeListDistanceSorted		EdgeListDistanceSorted;
+		TEdgeVector					EdgeVector;
 
 		unsigned int				Anz;
-		double						AvgDistance;
+		unsigned int				AvgDistance;
 
 		void 						Clear(void); // Wird verwendet, wenn auch die Kanten selbst gelöscht werden sollen
 		void 						Empty(void); // Wird verwendet, wenn es es nur geliehene Kanten waren
-		TEdge* 						First(void);
-		void 						Add(TEdge *Edge);
-		TEdge* 						Add(TNode* Node1, TNode* Node2);
+		void 						Add(TEdge *Edge);	// Wird nur für Kanten benutzt, die nicht gefunden werden sollen (siehe Triangulate)
 		TEdge* 						AddWithIndex(TNode *Node1, TNode *Node2);
-		TEdge* 						Find(TEdge *Edge);
-		TEdge* 						Find(int NodeNr1, int NodeNr2);
-		TEdge* 						Find(TNode *Node1, TNode *Node2);
 		TEdge* 						FindWithIndex(TNode *Node1, TNode *Node2);
-		void 						Erase(TEdge *Edge);
-		void 						EraseWithIndex(TEdge *Edge);
 
 		void 						BuildDistanceSortedList(void);
 		void 						BuildEdgeIndex(void);
@@ -596,7 +323,7 @@
 		TErgebnisPolygon*		First(void);
 		TErgebnisPolygonList* 	Copy(void);
 		void 					Append(TErgebnisPolygonList *AddErgebnisPolygonList);
-		TInsideTyp				IsInsidePolygonList(double X, double Y);
+		TInsideTyp				IsInsidePolygonList(long X, long Y);
 };
 
 //----------------------------------------------------------------------------
@@ -625,21 +352,21 @@
 
 		TPointList*		PointList;
 
-		double			Wsp;
+		long			Wsp;
 
-						TProfil(std::string Gewaesser, int Station, double Wsp = 0.0);
+						TProfil(std::string Gewaesser, int Station, int Wsp = 0);
 						TProfil(TProfil *Profil);
 						~TProfil(void);
 
-		void  			AddPoint(double Meter);
-		void  			AddPoint(double X, double Y, double Z = 0.0);
-		bool			GetXY(double Meter, double *X, double *Y);
+		void  			AddPoint(int Meter);
+		void  			AddPoint(long X, long Y, int Z = 0);
+		bool			GetXY(int Meter, long *X, long *Y);
 		void 			EqualizeProfil(TProfil *Profil);
 		void			InterpolateProfil(TProfil *VorProfil, TProfil *NachProfil, double Prozent);
 		double			CalcSchnitt(TGewaesserAchseList *GewaesserAchseList);
 		double  		Length(TPoint *Point1, TPoint *Point2);
-		double  		Length(double X1, double Y1, double X2, double Y2);
-		TPoint*			FindNearest(double X, double Y);
+		double  		Length(long X1, long Y1, long X2, long Y2);
+		TPoint*			FindNearest(long X, long Y);
 };
 
 //----------------------------------------------------------------------------
@@ -712,23 +439,24 @@
 	public:
 		std::string		Gewaesser;
 		int				ID;
-		double		 	MinX;
-		double		 	MaxX;
-		double		 	MinY;
-		double		 	MaxY;
 
+		long		 	MinX;
+		long		 	MaxX;
+		long		 	MinY;
+		long		 	MaxY;
+
 		TPointList*		PointList;
 
 						TGewaesserAchse(std::string Gewaesser, int ID);
 						TGewaesserAchse(TGewaesserAchse *GewaesserAchse);
 						~TGewaesserAchse(void);
 
-		void  			AddPoint(double Meter);
-		void  			AddPoint(double X, double Y, double Z = 0.0);
-		bool			GetXY(double Meter, double *X, double *Y);
+		void  			AddPoint(int Meter);
+		void  			AddPoint(long X, long Y, int Z = 0);
+		bool			GetXY(int Meter, long *X, long *Y);
 		double  		Length(TPoint *Point1, TPoint *Point2);
-		double  		Length(double X1, double Y1, double X2, double Y2);
-		TPoint*			FindNearest(double X, double Y);
+		double  		Length(long X1, long Y1, long X2, long Y2);
+		TPoint*			FindNearest(long X, long Y);
 };
 
 //----------------------------------------------------------------------------



More information about the Wsplgen-commits mailing list