[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