[Wsplgen-commits] r49 - in trunk: bin/test_daten bin/test_results doc/Dokumentation doc/Feinkonzept src
scm-commit@wald.intevation.org
scm-commit at wald.intevation.org
Fri May 26 07:13:07 CEST 2006
Author: mrchip
Date: 2006-05-26 07:12:48 +0200 (Fri, 26 May 2006)
New Revision: 49
Added:
trunk/bin/test_daten/test_buildedgelist.xyz
trunk/doc/Dokumentation/WSPLGEN-Dokumentation.pdf
trunk/doc/Feinkonzept/WSPLGEN-Feinkonzept.pdf
Modified:
trunk/bin/test_results/test.txt
trunk/doc/Dokumentation/WSPLGEN-Dokumentation.tex
trunk/src/file.cpp
trunk/src/file.h
trunk/src/parameter.cpp
trunk/src/test_tools.cpp
trunk/src/test_tri.cpp
trunk/src/tools.cpp
trunk/src/tri.cpp
trunk/src/wsplgen.cpp
trunk/src/wsplgen.h
trunk/src/xy.cpp
Log:
Es wurde zwei Fehler korrigiert und das Behandeln von Projektionen eingebaut. Weiterhin wurden die Debug-Ausgaben offiziell. Zum Teil wird nun mit long double gearbeitet und durch Verwendung von min- und max-Werten wurden verschiedene Funktionen (z.B. CalcSchnitt) beschleunigt.
Added: trunk/bin/test_daten/test_buildedgelist.xyz
===================================================================
--- trunk/bin/test_daten/test_buildedgelist.xyz 2006-05-11 21:32:40 UTC (rev 48)
+++ trunk/bin/test_daten/test_buildedgelist.xyz 2006-05-26 05:12:48 UTC (rev 49)
@@ -0,0 +1,14 @@
+X Y Z
+1 1 1
+2 2 1
+3 2 1
+4 2 1
+5 2 1
+9 2 1
+3 4 1
+8 3 1
+3 5 1
+9 5 1
+4 6 1
+3 7 1
+8 7 1
Modified: trunk/bin/test_results/test.txt
===================================================================
--- trunk/bin/test_results/test.txt 2006-05-11 21:32:40 UTC (rev 48)
+++ trunk/bin/test_results/test.txt 2006-05-26 05:12:48 UTC (rev 49)
@@ -1,108 +1,93 @@
-23:29:42: ->Triangulierung der Knoten gestartet
-23:29:42: ->Sortien Knoten gestartet
-23:29:42: <-Sortien der Knoten beendet
-23:29:42: ->Löschen des Knoten/Kanten-Index gestartet
-23:29:42: <-Löschen des Knoten/Kanten-Index beendet
-23:29:42: ->Suchen der Startkante gestartet
-23:29:42: Kante: 1 - 2 als Startkante
-23:29:42: <-Suchen der Startkante beendet
-23:29:42: <-Triangulierung der Knoten beendet
-23:29:42: ->Triangulierung der Knoten gestartet
-23:29:42: ->Sortien Knoten gestartet
-23:29:42: <-Sortien der Knoten beendet
-23:29:42: ->Löschen des Knoten/Kanten-Index gestartet
-23:29:42: <-Löschen des Knoten/Kanten-Index beendet
-23:29:42: ->Suchen der Startkante gestartet
-23:29:42: Kante: 1 - 4 als Startkante
-23:29:42: <-Suchen der Startkante beendet
-23:29:42: <-Triangulierung der Knoten beendet
-23:29:42: ->Laden des DGM in Datei 'test_daten/dgm2.shp' gestartet
-23:29:42: ->Laden des DGM in Datei 'test_daten/dgm2.shp' als SHP gestartet
-23:29:43: 10000 von 156249 Objekten gelesen, 9999 von 9999 Knoten im Speicher
-23:29:43: 20000 von 156249 Objekten gelesen, 19999 von 19999 Knoten im Speicher
-23:29:43: 30000 von 156249 Objekten gelesen, 29999 von 29999 Knoten im Speicher
-23:29:43: 40000 von 156249 Objekten gelesen, 39999 von 39999 Knoten im Speicher
-23:29:44: 50000 von 156249 Objekten gelesen, 49999 von 49999 Knoten im Speicher
-23:29:44: 60000 von 156249 Objekten gelesen, 59999 von 59999 Knoten im Speicher
-23:29:45: 70000 von 156249 Objekten gelesen, 69999 von 69999 Knoten im Speicher
-23:29:45: 80000 von 156249 Objekten gelesen, 79999 von 79999 Knoten im Speicher
-23:29:45: 90000 von 156249 Objekten gelesen, 89999 von 89999 Knoten im Speicher
-23:29:46: 100000 von 156249 Objekten gelesen, 99999 von 99999 Knoten im Speicher
-23:29:46: 110000 von 156249 Objekten gelesen, 109999 von 109999 Knoten im Speicher
-23:29:47: 120000 von 156249 Objekten gelesen, 119999 von 119999 Knoten im Speicher
-23:29:47: 130000 von 156249 Objekten gelesen, 129999 von 129999 Knoten im Speicher
-23:29:47: 140000 von 156249 Objekten gelesen, 139999 von 139999 Knoten im Speicher
-23:29:48: 150000 von 156249 Objekten gelesen, 149999 von 149999 Knoten im Speicher
-23:29:48: 156249 von 156249 Objekten gelesen, 156249 von 156249 Knoten im Speicher
-23:29:48: <-Laden des DGM in Datei 'test_daten/dgm2.shp' als SHP beendet
-23:29:48: ->Suche nach doppelten Knoten gestartet
-23:29:48: 156249 Knoten und keine Elemente vorhanden
-23:29:49: 10000 von 156249 Knoten, 0 Knoten gelöscht
-23:29:50: 20000 von 156249 Knoten, 0 Knoten gelöscht
-23:29:50: 30000 von 156249 Knoten, 0 Knoten gelöscht
-23:29:50: 40000 von 156249 Knoten, 0 Knoten gelöscht
-23:29:51: 50000 von 156249 Knoten, 0 Knoten gelöscht
-23:29:51: 60000 von 156249 Knoten, 0 Knoten gelöscht
-23:29:52: 70000 von 156249 Knoten, 0 Knoten gelöscht
-23:29:52: 80000 von 156249 Knoten, 0 Knoten gelöscht
-23:29:52: 90000 von 156249 Knoten, 0 Knoten gelöscht
-23:29:53: 100000 von 156249 Knoten, 0 Knoten gelöscht
-23:29:53: 110000 von 156249 Knoten, 0 Knoten gelöscht
-23:29:54: 120000 von 156249 Knoten, 0 Knoten gelöscht
-23:29:54: 130000 von 156249 Knoten, 0 Knoten gelöscht
-23:29:55: 140000 von 156249 Knoten, 0 Knoten gelöscht
-23:29:55: 150000 von 156249 Knoten, 0 Knoten gelöscht
-23:29:55: 0 Knoten gelöscht, 0 Elemente gelöscht
-23:29:55: <-Suche nach doppelten Knoten beendet
-23:29:55: <-Laden des DGM in Datei 'test_daten/dgm2.shp' beendet
-23:29:55: ->Triangulierung der Knoten gestartet
-23:29:55: ->Sortien Knoten gestartet
-23:29:56: <-Sortien der Knoten beendet
-23:29:56: ->Löschen des Knoten/Kanten-Index gestartet
-23:29:56: <-Löschen des Knoten/Kanten-Index beendet
-23:29:56: ->Suchen der Startkante gestartet
-23:29:56: Kante: 44106 - 44107 als Startkante
-23:29:56: <-Suchen der Startkante beendet
-23:30:01: 19942 von ca. 312498 Elementen erzeugt (59826 Kanten)
-23:30:01: 5.02 sec -> 0.0003 sec pro Element, Dauer noch ca. 147 sec
-23:30:06: 39854 von ca. 312498 Elementen erzeugt (119562 Kanten)
-23:30:06: 10.05 sec -> 0.0003 sec pro Element, Dauer noch ca. 137 sec
-23:30:11: 59765 von ca. 312498 Elementen erzeugt (179295 Kanten)
-23:30:11: 15.06 sec -> 0.0003 sec pro Element, Dauer noch ca. 127 sec
-23:30:16: 79742 von ca. 312498 Elementen erzeugt (239226 Kanten)
-23:30:16: 20.11 sec -> 0.0003 sec pro Element, Dauer noch ca. 117 sec
-23:30:21: 97722 von ca. 312498 Elementen erzeugt (293166 Kanten)
-23:30:21: 25.16 sec -> 0.0003 sec pro Element, Dauer noch ca. 111 sec
-23:30:26: 117782 von ca. 312498 Elementen erzeugt (353346 Kanten)
-23:30:26: 30.22 sec -> 0.0003 sec pro Element, Dauer noch ca. 100 sec
-23:30:31: 135931 von ca. 312498 Elementen erzeugt (407793 Kanten)
-23:30:31: 35.27 sec -> 0.0003 sec pro Element, Dauer noch ca. 92 sec
-23:30:37: 155207 von ca. 312498 Elementen erzeugt (465621 Kanten)
-23:30:37: 40.31 sec -> 0.0003 sec pro Element, Dauer noch ca. 82 sec
-23:30:42: 174463 von ca. 312498 Elementen erzeugt (523389 Kanten)
-23:30:42: 45.33 sec -> 0.0003 sec pro Element, Dauer noch ca. 72 sec
-23:30:47: 191206 von ca. 312498 Elementen erzeugt (573618 Kanten)
-23:30:47: 50.34 sec -> 0.0003 sec pro Element, Dauer noch ca. 64 sec
-23:30:52: 208584 von ca. 312498 Elementen erzeugt (625752 Kanten)
-23:30:52: 55.41 sec -> 0.0003 sec pro Element, Dauer noch ca. 55 sec
-23:30:57: 226062 von ca. 312498 Elementen erzeugt (678186 Kanten)
-23:30:57: 60.42 sec -> 0.0003 sec pro Element, Dauer noch ca. 46 sec
-23:31:02: 242154 von ca. 312498 Elementen erzeugt (726462 Kanten)
-23:31:02: 65.45 sec -> 0.0003 sec pro Element, Dauer noch ca. 38 sec
-23:31:07: 259695 von ca. 312498 Elementen erzeugt (779085 Kanten)
-23:31:07: 70.47 sec -> 0.0003 sec pro Element, Dauer noch ca. 29 sec
-23:31:12: 275837 von ca. 312498 Elementen erzeugt (827511 Kanten)
-23:31:12: 75.52 sec -> 0.0003 sec pro Element, Dauer noch ca. 20 sec
-23:31:17: 293874 von ca. 312498 Elementen erzeugt (881622 Kanten)
-23:31:17: 80.53 sec -> 0.0003 sec pro Element, Dauer noch ca. 10 sec
-23:31:22: 309504 von ca. 312498 Elementen erzeugt (928512 Kanten)
-23:31:22: 85.55 sec -> 0.0003 sec pro Element, Dauer noch ca. 2 sec
-23:31:27: 311043 von ca. 312498 Elementen erzeugt (933129 Kanten)
-23:31:27: 90.64 sec -> 0.0003 sec pro Element, Dauer noch ca. 1 sec
-23:31:32: 311183 von ca. 312498 Elementen erzeugt (933549 Kanten)
-23:31:32: 95.67 sec -> 0.0003 sec pro Element, Dauer noch ca. 1 sec
-23:31:37: 311287 von ca. 312498 Elementen erzeugt (933861 Kanten)
-23:31:37: 100.69 sec -> 0.0003 sec pro Element, Dauer noch ca. 1 sec
-23:31:42: 311380 von ca. 312498 Elementen erzeugt (934140 Kanten)
-23:31:42: 105.72 sec -> 0.0003 sec pro Element, Dauer noch ca. 1 sec
-23:31:54: <-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 - 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
Added: trunk/doc/Dokumentation/WSPLGEN-Dokumentation.pdf
===================================================================
(Binary files differ)
Property changes on: trunk/doc/Dokumentation/WSPLGEN-Dokumentation.pdf
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/doc/Dokumentation/WSPLGEN-Dokumentation.tex
===================================================================
--- trunk/doc/Dokumentation/WSPLGEN-Dokumentation.tex 2006-05-11 21:32:40 UTC (rev 48)
+++ trunk/doc/Dokumentation/WSPLGEN-Dokumentation.tex 2006-05-26 05:12:48 UTC (rev 49)
@@ -33,9 +33,9 @@
\RCS$Id$
\RCS$Revision: 46 $
-\newcommand{\documentdate}{07. Mai 2006}
+\newcommand{\documentdate}{23. Mai 2006}
\newcommand{\documentrevision}{\RCSRevision}
-\newcommand{\documentversion}{0.9.12}
+\newcommand{\documentversion}{0.9.13}
\newcommand{\documentID}{\RCSId}
%----------------------------------------------
@@ -1443,14 +1443,13 @@
Fehler und Warnungen beendet wurde.
Sollte es aber zu einem Fehler oder einer Warnung gekommen sein, so wird
-ein positiver Rückgabewert in Abhängigkeit des Fehlers generiert.
+ein positiver Rückgabewert in Abhängigkeit der Meldung generiert.
Werden Warnung vom Programm erzeugt, so wird das Programm fortgesetzt und
-am Ende als Rückgabewert der Wert der {\bf ersten} Warnung zurückgegeben.
+am Ende als Rückgabewert der Wert 1 zurückgegeben.
-Will oder kann das aufrufende Programm die Protokoll-Datei nicht auswerten,
-so kann und sollte es aufgrund des Rückgabewertes trotzdem eine für den Benutzer
-sinnvolle Fehlermeldung generieren.
+Werden Fehlermedlungen vom Programm erzeugt, so wird das Programm beendet und
+am Ende als Rückgabewert der Wert 2 zurückgegeben.
Die verschiedenen Rückgabewerte mit den entsprechenden Fehlermeldungen
sind im Anhang~\ref{sec:fehlermeldungen} zusammengefasst.
@@ -1638,11 +1637,17 @@
\newpage
\section{Fehlermeldungen}\label{sec:fehlermeldungen}
+Wird das Programm ohne Fehler beendet, so als Rückgabewert der Wert 0 zurückgegeben.
+
Werden Warnung vom Programm erzeugt, so wird das Programm fortgesetzt und am Ende als
-Rückgabewert der Wert der {\bf ersten} Warnung zurückgegeben.
+Rückgabewert der Wert 1 zurückgegeben.
+Werden Fehler vom Programm erzeugt, so wird das Programm beendet und als
+Rückgabewert der Wert 2 zurückgegeben.
+
Die erste Ziffer gibt die Fehlergruppe an. Die zweite Ziffer gibt an,
-ob es sich um einen Fehler oder einen Warnung handelt. Die dritte und vierte Ziffer
+ob es sich um einen Fehler oder einen Warnung handelt. Die dritte und vierte Ziffer
+sind nur eine vortlaufende Nummer zur genauen Identifikation der Meldung.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -2014,6 +2019,14 @@
Erklärung: Zwei Knoten liegen zu dicht zusammen, so dass WSPLGEN sie
nicht unterschieden kann.
+\textbf{Rückgabewert: 3115}\\
+Fehler: Zwei Projektionen stimen nicht überein.\\
+Erklärung: Zwei Projektionsdateien wurden gelsen und zeichenweise verglichen. Dabei
+wurde ein Unterschied festgestellt. Es wird immer nur die erste erfolgreich gelesene
+Projektion verwendet. Sollten die Projektionen tatsächlich unterschiedlich sein (und
+nicht nur andere Namen haben), so kann es zu sehr merkwürdigen Effekten kommen.
+
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -2113,6 +2126,11 @@
Anhang \ref{sec:fehlermeldungen}, Fehlercode 3214:
Es wurde eine weitere Fehlermedlung aufgenommen.
+{\bf Version: 0.9.13, Datum: 23.05.2006}
+
+Anhang \ref{sec:fehlermeldungen}, Fehlercode 3115:
+Es wurde eine weitere Fehlermedlung aufgenommen.
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Added: trunk/doc/Feinkonzept/WSPLGEN-Feinkonzept.pdf
===================================================================
(Binary files differ)
Property changes on: trunk/doc/Feinkonzept/WSPLGEN-Feinkonzept.pdf
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/src/file.cpp
===================================================================
--- trunk/src/file.cpp 2006-05-11 21:32:40 UTC (rev 48)
+++ trunk/src/file.cpp 2006-05-26 05:12:48 UTC (rev 49)
@@ -23,6 +23,10 @@
#include "file.h"
//---------------------------------------------------------------------
+static char PrjIn[5000] = "";
+static char PrjOut[5000] = "";
+
+//---------------------------------------------------------------------
bool LoadPar(std::string FileName, std::vector<std::string> *ParList)
{
write_fortschritt("->Laden der Parameterdatei '%s' gestartet\n", FileName.c_str());
@@ -55,6 +59,52 @@
}
//---------------------------------------------------------------------
+bool LoadPRJ(std::string FileName, int DebugLevel)
+{
+ write_fortschritt("->Laden der Projektionsdatei zu '%s' gestartet\n", FileName.c_str());
+
+ std::string PRJFileName = ExchangeFileExt(FileName, ".PRJ");
+ FILE *ph = fopen(PRJFileName.c_str(), "r");
+ if (ph)
+ {
+ if (0 == fgets(PrjIn, sizeof(PrjIn), ph))
+ {
+ PrjIn[0] = '\0';
+ write_fortschritt("Projektionsdatei '%s' konnte nicht gelesen werden\n", PRJFileName.c_str());
+ }
+ else
+ {
+ write_fortschritt("Projektionsdatei '%s' gelesen\n", PRJFileName.c_str());
+ if (DebugLevel >= 6)
+ {
+ write_fortschritt("Projektion: '%s'\n", PrjIn);
+ }
+
+ if (PrjOut[0] == '\0')
+ {
+ strncpy(PrjOut, PrjIn, sizeof(PrjOut)-1);
+ PrjOut[sizeof(PrjOut)-1] = '\0';
+ }
+ else
+ {
+ if (strncmp(PrjOut, PrjIn, sizeof(PrjOut)-1) != 0)
+ {
+ write_warning(3115, "Nicht alle Projektionen sind gleich\nDies kann zu merkwürdigen Ergebnissen führen\n");
+ }
+ }
+ }
+ fclose(ph);
+ }
+ else
+ {
+ write_fortschritt("Projektionsdatei '%s' konnte nicht geöffnet werden\n", PRJFileName.c_str());
+ }
+ write_fortschritt("<-Laden der Projektionsdatei zu '%s' beendet\n", FileName.c_str());
+
+ return (true);
+}
+
+//---------------------------------------------------------------------
unsigned int LoadDGM(std::string FileName, TNodeList *NodeList, TElementList *ElementList, TXYList *XyList, unsigned int MaxNodesPerSlice, int DebugLevel)
{
write_fortschritt("->Laden des DGM in Datei '%s' gestartet\n", FileName.c_str());
@@ -85,7 +135,7 @@
AnzScheiben = LoadDGMGRD(FileName, NodeList, XyList, MaxNodesPerSlice, DebugLevel);
CheckForDuplicates(NodeList, ElementList, DebugLevel);
}
- else if (ToUpperCase(Ext) == ".XYZ")
+ else if (ToUpperCase(Ext) == ".XYZ" || ToUpperCase(Ext) == ".TXT")
{
AnzScheiben = LoadDGMXYZ(FileName, NodeList, XyList, MaxNodesPerSlice, DebugLevel);
CheckForDuplicates(NodeList, ElementList, DebugLevel);
@@ -548,6 +598,8 @@
{
write_fortschritt("->Laden des DGM in Datei '%s' als SHP gestartet\n", FileName.c_str());
+ LoadPRJ(FileName, DebugLevel);
+
std::string SHPFileName = ExchangeFileExt(FileName, ".SHP");
SHPHandle hSHP = SHPOpen(SHPFileName.c_str(), "rb");
@@ -886,6 +938,8 @@
{
write_fortschritt("->Laden der Profilspuren gestartet\n");
+ LoadPRJ(FileName, DebugLevel);
+
if (VonKm > -9999 && BisKm > -9999) write_fortschritt("Nur Profile von Station %.4f bis %.4f werden geladen\n", VonKm, BisKm);
else if (VonKm > -9999) write_fortschritt("Nur Profile mit einer Station größer als %.4f werden geladen\n", VonKm);
else if (BisKm > -9999) write_fortschritt("Nur Profile mit einer Station kleiner als %.4f werden geladen\n", BisKm);
@@ -1233,6 +1287,8 @@
{
write_fortschritt("->Laden der Linien Strukturen (Sperren, Gräben und Rohre) gestartet\n");
+ LoadPRJ(FileName, DebugLevel);
+
if (SperrenList == 0 || GrabenList == 0 || RohreList == 0)
{
dump_error(__FILE__, __LINE__, "Sperrenliste oder Grabenliste oder Rohreliste ist undefiniert\n");
@@ -1806,6 +1862,8 @@
{
write_fortschritt("->Laden der Gewässerachsen gestartet\n");
+ LoadPRJ(FileName, DebugLevel);
+
if (GewaesserAchseList == 0)
{
dump_error(__FILE__, __LINE__, "GewässerAchse ist undefiniert\n");
@@ -1973,6 +2031,44 @@
return (true);
}
+//---------------------------------------------------------------------
+bool SavePRJ(std::string FileName, int DebugLevel)
+{
+ if (PrjOut[0] != '\0')
+ {
+ write_fortschritt("->Speichern der Projektionsdatei zu '%s' gestartet\n", FileName.c_str());
+
+ std::string PRJFileName = ExchangeFileExt(FileName, ".PRJ");
+ FILE *ph = fopen(PRJFileName.c_str(), "w");
+ if (ph)
+ {
+ if (EOF == fputs(PrjOut, ph))
+ {
+ write_fortschritt("Projektionsdatei '%s' konnte nicht geschrieben werden\n", PRJFileName.c_str());
+ }
+ else if (EOF == fclose(ph))
+ {
+ write_fortschritt("Projektionsdatei '%s' konnte nicht geschrieben werden\n", PRJFileName.c_str());
+ }
+ else
+ {
+ write_fortschritt("Projektionsdatei '%s' geschrieben\n", PRJFileName.c_str());
+ }
+ }
+ else
+ {
+ write_fortschritt("Projektionsdatei '%s' konnte nicht zum Schreiben geöffnet werden\n", PRJFileName.c_str());
+ }
+ write_fortschritt("<-Speichern der Projektionsdatei zu '%s' beendet\n", FileName.c_str());
+ }
+ else
+ {
+ if (DebugLevel >= 3) write_fortschritt("Keine Projektionsinformationen vorhanden\n");
+ }
+
+ return (true);
+}
+
//---------------------------------------------------------------------------
bool SaveNet(std::string FileName, TNodeList *NodeList, TElementList *ElementList, int DebugLevel)
{
@@ -2133,6 +2229,8 @@
{
write_fortschritt("->Speichern der Profile gestartet\n");
+ SavePRJ(FileName, DebugLevel);
+
DBFHandle DBFHandle = DBFCreate(FileName.c_str());
if(DBFHandle == NULL )
{
@@ -2222,6 +2320,8 @@
{
write_fortschritt("->Speichern des Polygons gestartet\n");
+ SavePRJ(FileName, DebugLevel);
+
DBFHandle DBFHandle = DBFCreate(FileName.c_str());
if(DBFHandle == NULL )
{
@@ -2312,6 +2412,8 @@
{
write_fortschritt("->Speichern der Ergebnispolygone gestartet\n");
+ SavePRJ(FileName, DebugLevel);
+
DBFHandle DBFHandle = DBFCreate(FileName.c_str());
if(DBFHandle == NULL )
{
@@ -2624,6 +2726,8 @@
{
write_fortschritt("->Speichern der Elemente gestartet\n");
+ SavePRJ(FileName, DebugLevel);
+
DBFHandle DBFHandle = DBFCreate(FileName.c_str());
if(DBFHandle == NULL )
{
@@ -2677,6 +2781,8 @@
{
write_fortschritt("->Speichern der Knoten gestartet\n");
+ SavePRJ(FileName, DebugLevel);
+
DBFHandle DBFHandle = DBFCreate(FileName.c_str());
if(DBFHandle == NULL )
{
@@ -2742,6 +2848,8 @@
{
write_fortschritt("->Speichern der Kanten gestartet\n");
+ SavePRJ(FileName, DebugLevel);
+
DBFHandle DBFHandle = DBFCreate(FileName.c_str());
if(DBFHandle == NULL )
{
@@ -2760,6 +2868,12 @@
write_error(4204, "Kann bei Datei '%s' das Attribut 'Nr2' nicht erzeugen\n", FileName.c_str());
}
+ if (DBFAddField(DBFHandle, "Aussen", FTInteger, 1, 0) == -1)
+ {
+ DBFClose(DBFHandle);
+ write_error(4204, "Kann bei Datei '%s' das Attribut 'Aussen' nicht erzeugen\n", FileName.c_str());
+ }
+
SHPHandle SHPHandle = SHPCreate(FileName.c_str(), SHPT_ARC);
@@ -2797,6 +2911,8 @@
DBFWriteIntegerAttribute(DBFHandle, Count, 0, Nr1);
DBFWriteIntegerAttribute(DBFHandle, Count, 1, Nr2);
+ if (Edge->IsBoundary) DBFWriteIntegerAttribute(DBFHandle, Count, 2, 1);
+ else DBFWriteIntegerAttribute(DBFHandle, Count, 2, 0);
Count++;
}
Modified: trunk/src/file.h
===================================================================
--- trunk/src/file.h 2006-05-11 21:32:40 UTC (rev 48)
+++ trunk/src/file.h 2006-05-26 05:12:48 UTC (rev 49)
@@ -20,6 +20,8 @@
//----------------------------------------------------------------------------
bool LoadPar(std::string FileName, std::vector<std::string> *ParList);
+bool LoadPRJ(std::string FileName, int DebugLevel);
+
unsigned int LoadDGM(std::string FileName, TNodeList *NodeList, TElementList *ElementList, TXYList *XyList, unsigned int MaxNodesPerSlice, int DebugLevel);
unsigned int LoadDGMTIN(std::string FileName, TNodeList *NodeList, TElementList *ElementList, TXYList *XyList, unsigned int MaxNodesPerSlice, int DebugLevel);
unsigned int LoadDGMGRD(std::string FileName, TNodeList *NodeList, TXYList *XyList, unsigned int MaxNodesPerSlice, int DebugLevel);
@@ -36,6 +38,7 @@
bool LoadAchse(std::string FileName, TGewaesserAchseList* GewaesserAchseList, int DebugLevel);
+bool SavePRJ(std::string FileName, int DebugLevel);
bool SaveNet(std::string FileName, TNodeList *NodeList, TElementList *ElementList, int DebugLevel);
bool SaveSol(std::string FileName, TNodeList *NodeList, int DebugLevel);
bool SaveNodes(std::string FileName, TNodeList *NodeList, int DebugLevel);
Modified: trunk/src/parameter.cpp
===================================================================
--- trunk/src/parameter.cpp 2006-05-11 21:32:40 UTC (rev 48)
+++ trunk/src/parameter.cpp 2006-05-26 05:12:48 UTC (rev 49)
@@ -84,36 +84,46 @@
Parameter = ParList[j];
j++;
}
-
- if (Parameter.substr(0, 6) == "-DEBUG" || Parameter.substr(0, 6) == "-debug")
+
+ if (Parameter.substr(0, 7) == "-OUTPUT" || Parameter.substr(0, 7) == "-output")
{
///////////////////////////////////////////////
// DEBUG
///////////////////////////////////////////////
- write_fortschritt("Parameter -DEBUG erkannt.\n");
- write_fortschritt("Es werden jetzt ausführliche Informationen ausgegeben.\n");
+ write_fortschritt("Parameter -OUTPUT erkannt.\n");
if (IsSetDebug)
{
- write_warning(1106, "Der Parameter -DEBUG wurde mehrfach angegeben.\nEs wird der höchste Debuglevel verwendet\n");
+ write_warning(1106, "Der Parameter -OUTPUT wurde mehrfach angegeben.\nEs wird der höchste Outputlevel verwendet\n");
}
IsSetDebug = true;
- if (Parameter.substr(6, 1) != "=")
+ if (Parameter.substr(7, 1) != "=")
{
- write_warning(1108, "Es wurden keine Argumente für -DEBUG übergeben.\nDebuglevel wird 9 (Alle Debuginfos).\n");
+ write_warning(1108, "Es wurden keine Argumente für -OUTPUT übergeben.\nOutputlevel wird 9 (Alle Informationen).\n");
DebugLevel = 9;
continue;
}
int NewDebugLevel;
- if (1 == sscanf(Parameter.substr(7).c_str(), "%d", &NewDebugLevel))
+ if (1 == sscanf(Parameter.substr(8).c_str(), "%d", &NewDebugLevel))
{
if (NewDebugLevel > DebugLevel) DebugLevel = NewDebugLevel;
}
- write_fortschritt("DebugLevel: '%d'\n", DebugLevel);
+ write_fortschritt("OutputLevel: '%d'\n", DebugLevel);
+
+ if (DebugLevel == 0) write_fortschritt("Es werden keine zusätzlichen Informationen ausgegeben\n");
+ if (DebugLevel >= 1) write_fortschritt("Es werden kurze Zwischeninformationen und mehr Fortschrittanzeigen ausgegeben\n");
+ if (DebugLevel >= 2) write_fortschritt("Es werden zusätzlich mehr Zwischeninformationen ausgegeben\n");
+ if (DebugLevel >= 3) write_fortschritt("Es werden zusätzlich deutlich mehr Zwischeninformationen ausgegeben\n");
+ if (DebugLevel >= 4) write_fortschritt("Es werden zusätzlich mehr Fortschrittanzeigen und die wichtigsten Testausgabedateien ausgegeben\n");
+ if (DebugLevel >= 5) write_fortschritt("Es werden zusätzlich alle wichtigen Testausgabedateien ausgegeben\n");
+ if (DebugLevel >= 6) write_fortschritt("Es werden zusätzlich wichtigen Testausgabedateien ausgegeben\n");
+ if (DebugLevel >= 7) write_fortschritt("Es werden zusätzlich alle Informationen ausgegeben\n");
+ if (DebugLevel >= 8) write_fortschritt("Es werden zusätzlich alle Tests durchgeführt\n");
+ if (DebugLevel == 9) write_fortschritt("Es werden alle Informationen und Testausgabedateien erzeugt\n");
}
else if (Parameter.substr(0, 4) == "-PAR" || Parameter.substr(0, 4) == "-par")
{
@@ -140,7 +150,7 @@
IsSetPar = true;
- if (IsSetDebug) write_fortschritt("Parameterdatei: '%s'\n", FileNamePar.c_str());
+ write_fortschritt("Parameterdatei: '%s'\n", FileNamePar.c_str());
LoadPar(FileNamePar, &ParList);
AnzPar = ParList.size();
@@ -171,10 +181,7 @@
IsSetMaxNodesPerSlice = true;
- if (IsSetDebug)
- {
- write_fortschritt("Maximale Geländepunkte pro Bearbeitungsabschnitt: %d\n", MaxNodesPerSlice);
- }
+ write_fortschritt("Maximale Geländepunkte pro Bearbeitungsabschnitt: %d\n", MaxNodesPerSlice);
}
else if (Parameter.substr(0, 8) == "-STRECKE" || Parameter.substr(0, 8) == "-strecke")
{
@@ -214,13 +221,10 @@
IsSetStrecke = true;
- if (IsSetDebug)
- {
- if (IsSetVonKm && IsSetBisKm) write_fortschritt("Strecke Von = %.2f Bis = %.2f\n", VonKm, BisKm);
- else if (IsSetVonKm) write_fortschritt("Strecke Von = %.2f Bis = <default>\n", VonKm);
- else if (IsSetBisKm) write_fortschritt("Strecke Von = <default> Bis = %.2f\n", BisKm);
- else write_fortschritt("Strecke Von = <default> Bis = <default>\n");
- }
+ if (IsSetVonKm && IsSetBisKm) write_fortschritt("Strecke Von = %.2f Bis = %.2f\n", VonKm, BisKm);
+ else if (IsSetVonKm) write_fortschritt("Strecke Von = %.2f Bis = <default>\n", VonKm);
+ else if (IsSetBisKm) write_fortschritt("Strecke Von = <default> Bis = %.2f\n", BisKm);
+ else write_fortschritt("Strecke Von = <default> Bis = <default>\n");
}
else if (Parameter.substr(0, 6) == "-DELTA" || Parameter.substr(0, 6) == "-delta")
{
@@ -275,17 +279,14 @@
IsSetDelta = true;
- if (IsSetDebug)
- {
- 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);
- else write_fortschritt("Delta: Von = <default> Bis = <default> Diff = <default>\n");
- }
+ 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);
+ else write_fortschritt("Delta: Von = <default> Bis = <default> Diff = <default>\n");
}
else if (Parameter.substr(0, 4) == "-GEL" || Parameter.substr(0, 4) == "-gel")
{
@@ -320,19 +321,16 @@
write_error(1214, "Es wurden weder SPERRE noch NOSPERRE mit -GEL verwendet.\nDas Format lautet korrekt -GEL=<SPERRE|NOSPERRE>.\n");
}
- if (IsSetDebug)
+ if (IsSetGel)
{
- if (IsSetGel)
- {
- if (Sperre) write_fortschritt("Gelände wirkt als Sperre\n");
- else write_fortschritt("Gelände wirkt nicht als Sperre\n");
- }
- else
- {
- if (Sperre) write_fortschritt("Standard: Gelände wirkt als Sperre\n");
- else write_fortschritt("Standard: Gelände wirkt nicht als Sperre\n");
- }
+ if (Sperre) write_fortschritt("Gelände wirkt als Sperre\n");
+ else write_fortschritt("Gelände wirkt nicht als Sperre\n");
}
+ else
+ {
+ if (Sperre) write_fortschritt("Standard: Gelände wirkt als Sperre\n");
+ else write_fortschritt("Standard: Gelände wirkt nicht als Sperre\n");
+ }
}
else if (Parameter.substr(0, 4) == "-DGM" || Parameter.substr(0, 4) == "-dgm")
{
@@ -356,7 +354,7 @@
IsSetDgm = true;
- if (IsSetDebug) write_fortschritt("DGM-Datei: '%s'\n", FileNameDgm.c_str());
+ write_fortschritt("DGM-Datei: '%s'\n", FileNameDgm.c_str());
}
else if (Parameter.substr(0, 4) == "-PRO" || Parameter.substr(0, 4) == "-pro")
{
@@ -380,7 +378,7 @@
IsSetPro = true;
- if (IsSetDebug) write_fortschritt("Profillagen-Datei: '%s'\n", FileNamePro.c_str());
+ write_fortschritt("Profillagen-Datei: '%s'\n", FileNamePro.c_str());
}
else if (Parameter.substr(0, 4) == "-WSP" || Parameter.substr(0, 4) == "-wsp")
{
@@ -404,7 +402,7 @@
IsSetWsp = true;
- if (IsSetDebug) write_fortschritt("WSP-Datei: '%s'\n", FileNameWsp.c_str());
+ write_fortschritt("WSP-Datei: '%s'\n", FileNameWsp.c_str());
continue;
}
@@ -430,7 +428,7 @@
IsSetLin = true;
- if (IsSetDebug) write_fortschritt("Bruch- und Sperr-Datei: '%s'\n", FileNameLin.c_str());
+ write_fortschritt("Bruch- und Sperr-Datei: '%s'\n", FileNameLin.c_str());
}
else if (Parameter.substr(0, 6) == "-ACHSE" || Parameter.substr(0, 6) == "-achse")
{
@@ -454,7 +452,7 @@
IsSetAchse = true;
- if (IsSetDebug) write_fortschritt("Gewässerachse: '%s'\n", FileNameAchse.c_str());
+ write_fortschritt("Gewässerachse: '%s'\n", FileNameAchse.c_str());
continue;
}
@@ -480,7 +478,7 @@
IsSetAusgabe = true;
- if (IsSetDebug) write_fortschritt("Ausgabe-Datei: '%s'\n", FileNameAusgabe.c_str());
+ write_fortschritt("Ausgabe-Datei: '%s'\n", FileNameAusgabe.c_str());
}
else if (Parameter.substr(0, 1) == "$")
{
Modified: trunk/src/test_tools.cpp
===================================================================
--- trunk/src/test_tools.cpp 2006-05-11 21:32:40 UTC (rev 48)
+++ trunk/src/test_tools.cpp 2006-05-26 05:12:48 UTC (rev 49)
@@ -14,9 +14,19 @@
#pragma hdrstop
#endif
+//----------------------------------------------------------------------------
+#ifdef __BORLANDC__
+#define DGMXYZFILE "test_daten\\test_buildedgelist.xyz"
+#else
+#define DGMXYZFILE "test_daten/test_buildedgelist.xyz"
+#endif
+
//---------------------------------------------------------------------------
#include <stdio.h>
+#include "file.h"
+#include "tri.h"
+
#include "tools.h"
void test_tools(void)
@@ -230,6 +240,60 @@
delete XyList;
}
+ ////////////////////////////////////////
+ // Test von BuildEdgeList
+ ////////////////////////////////////////
+
+ {
+ printf ("Test BuildEdgeList : ");
+
+ TNodeList *NodeList = new TNodeList();
+ TElementList *ElementList = new TElementList();
+ TEdgeList* EdgeList = new TEdgeList;
+
+ LoadDGM(DGMXYZFILE, NodeList, ElementList, 0, 100000, 8);
+
+ Triangulate(NodeList, ElementList, 8);
+
+ BuildEdgeList(NodeList, ElementList, EdgeList, 8);
+
+ bool WrongSorted = false;
+ bool WrongOrder = false;
+ TEdge* LastEdge = 0;
+ for (TEdgeListNrSorted::iterator i=EdgeList->EdgeListNrSorted.begin(); i!=EdgeList->EdgeListNrSorted.end(); i++)
+ {
+ TEdge* Edge = *i;
+ int Node1Nr = Edge->Node1->Nr;
+ int Node2Nr = Edge->Node2->Nr;
+
+ if (Node1Nr >= Node2Nr)
+ {
+ WrongOrder = true;
+ }
+
+ if (LastEdge == 0)
+ {
+ LastEdge = Edge;
+ }
+ else
+ {
+ if (LastEdge->Node1->Nr > Edge->Node1->Nr)
+ {
+ WrongSorted = true;
+ }
+ else if (LastEdge->Node1->Nr == Edge->Node1->Nr && LastEdge->Node2->Nr > Edge->Node2->Nr)
+ {
+ WrongSorted = true;
+ }
+ }
+ }
+
+ if (EdgeList->EdgeListNrSorted.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-11 21:32:40 UTC (rev 48)
+++ trunk/src/test_tri.cpp 2006-05-26 05:12:48 UTC (rev 49)
@@ -116,10 +116,10 @@
Triangulate(NodeList, ElementList, 1);
- if (ElementList->size() != 310248) printf("Failed\n");
+ if (ElementList->size() != 311860) printf("Failed\n");
else printf("Pass\n");
-// SaveNet("debug_output\\test_tri.2dm", NodeList, ElementList, 8);
+// SaveNet("test_tri.2dm", NodeList, ElementList, 8);
delete ElementList;
delete NodeList;
Modified: trunk/src/tools.cpp
===================================================================
--- trunk/src/tools.cpp 2006-05-11 21:32:40 UTC (rev 48)
+++ trunk/src/tools.cpp 2006-05-26 05:12:48 UTC (rev 49)
@@ -59,7 +59,7 @@
fflush(fhsta);
- ReturnCode = 3;
+ ReturnCode = 2;
throw TFehler("Problem");
}
@@ -270,7 +270,7 @@
Temp = ((byte*)Bytes)[1];
((byte*)Bytes)[1] = ((byte*)Bytes)[6];
- ((byte*)Bytes)[6] = Temp;
+ ((byte*)Bytes)[6] = Temp;
Temp = ((byte*)Bytes)[2];
((byte*)Bytes)[2] = ((byte*)Bytes)[5];
@@ -917,7 +917,7 @@
EdgeList->Clear();
TEdge* NewEdge = 0;
- TEdge* AntiEdge = 0;
+ TEdge* Edge = 0;
int Count = 0;
for (TElementList::iterator i=ElementList->begin(); i!=ElementList->end(); i++)
@@ -927,9 +927,6 @@
// Testen, ob das Element gesperrt wurde
if (Element->Typ == NO_ELEMENT) continue;
- TNode* N1 = Element->Node1;
- TNode* N2 = Element->Node2;
- TNode* N3 = Element->Node3;
/*
for (TEdgeListNrSorted::iterator j=EdgeList->EdgeListNrSorted.begin(); j!=EdgeList->EdgeListNrSorted.end(); j++)
@@ -940,58 +937,72 @@
write_fortschritt("\n%d - %d - %d\n", N1->Nr, N2->Nr, N3->Nr);
*/
- AntiEdge = EdgeList->FindWithIndex(N2, N1);
- if (AntiEdge == 0)
+ TNode* N1 = 0;
+ TNode* N2 = 0;
+ TNode* N3 = 0;
+ TNode* N4 = 0;
+
+ if (Element->Node1->Nr < Element->Node2->Nr)
{
+ N1 = Element->Node1;
+ N2 = Element->Node2;
+ }
+ else
+ {
+ N1 = Element->Node2;
+ N2 = Element->Node1;
+ }
+
+ Edge = EdgeList->FindWithIndex(N1, N2);
+ if (Edge == 0)
+ {
// Im moment gehe ich mal davon aus, dass es eine neue Randkante ist
NewEdge = EdgeList->AddWithIndex(N1, N2);
NewEdge->IsBoundary = true;
}
else
{
- // Mal sehen welche ich behalte
- if (N1->Nr > N2->Nr)
- {
- // die alte ist besser, aber keine Randkante
- AntiEdge->IsBoundary = false;
- }
- else
- {
- // Die neue ist besser, aber keine Randkante
- EdgeList->EraseWithIndex(AntiEdge);
- NewEdge = EdgeList->AddWithIndex(N1, N2);
- NewEdge->IsBoundary = false;
- }
+ Edge->IsBoundary = false;
}
- AntiEdge = EdgeList->FindWithIndex(N3, N2);
- if (AntiEdge == 0)
+ if (Element->Node2->Nr < Element->Node3->Nr)
{
- // Im moment gehe ich mal davon aus, dass es keine neue Randkante ist
+ N2 = Element->Node2;
+ N3 = Element->Node3;
+ }
+ else
+ {
+ N2 = Element->Node3;
+ N3 = Element->Node2;
+ }
+
+ Edge = EdgeList->FindWithIndex(N2, N3);
+ if (Edge == 0)
+ {
+ // Im moment gehe ich mal davon aus, dass es eine neue Randkante ist
NewEdge = EdgeList->AddWithIndex(N2, N3);
NewEdge->IsBoundary = true;
}
else
{
- // Mal sehen welche ich behalte
- if (N2->Nr > N3->Nr)
+ Edge->IsBoundary = false;
+ }
+
+ if (Element->Typ == TRI)
+ {
+ if (Element->Node3->Nr < Element->Node1->Nr)
{
- // die alte ist besser, aber keine Randkante
- AntiEdge->IsBoundary = false;
+ N3 = Element->Node3;
+ N1 = Element->Node1;
}
else
{
- // Die neue ist besser, aber keine Randkante
- EdgeList->EraseWithIndex(AntiEdge);
- NewEdge = EdgeList->AddWithIndex(N2, N3);
- NewEdge->IsBoundary = false;
+ N3 = Element->Node1;
+ N1 = Element->Node3;
}
- }
- if (Element->Typ == TRI)
- {
- AntiEdge = EdgeList->FindWithIndex(N1, N3);
- if (AntiEdge == 0)
+ Edge = EdgeList->FindWithIndex(N3, N1);
+ if (Edge == 0)
{
// Im moment gehe ich mal davon aus, dass es eine neue Randkante ist
NewEdge = EdgeList->AddWithIndex(N3, N1);
@@ -999,27 +1010,24 @@
}
else
{
- // Mal sehen welche ich behalte
- if (N3->Nr > N1->Nr)
- {
- // die alte ist besser, aber keine Randkante
- AntiEdge->IsBoundary = false;
- }
- else
- {
- // Die neue ist besser, aber keine Randkante
- EdgeList->EraseWithIndex(AntiEdge);
- NewEdge = EdgeList->AddWithIndex(N3, N1);
- NewEdge->IsBoundary = false;
- }
+ Edge->IsBoundary = false;
}
}
else
{
- TNode* N4 = Element->Node4;
+ if (Element->Node3->Nr < Element->Node4->Nr)
+ {
+ N3 = Element->Node3;
+ N4 = Element->Node4;
+ }
+ else
+ {
+ N3 = Element->Node4;
+ N4 = Element->Node3;
+ }
- AntiEdge = EdgeList->FindWithIndex(N4, N3);
- if (AntiEdge == 0)
+ Edge = EdgeList->FindWithIndex(N3, N4);
+ if (Edge == 0)
{
// Im moment gehe ich mal davon aus, dass es eine neue Randkante ist
NewEdge = EdgeList->AddWithIndex(N3, N4);
@@ -1027,43 +1035,30 @@
}
else
{
- // Mal sehen welche ich behalte
- if (N3->Nr > N4->Nr)
- {
- // die alte ist besser, aber keine Randkante
- AntiEdge->IsBoundary = false;
- }
- else
- {
- // Die neue ist besser, aber keine Randkante
- EdgeList->EraseWithIndex(AntiEdge);
- NewEdge = EdgeList->AddWithIndex(N3, N4);
- NewEdge->IsBoundary = false;
- }
+ Edge->IsBoundary = false;
}
- AntiEdge = EdgeList->FindWithIndex(N1, N4);
- if (AntiEdge == 0)
+ if (Element->Node4->Nr < Element->Node1->Nr)
{
+ N4 = Element->Node4;
+ N1 = Element->Node1;
+ }
+ else
+ {
+ N4 = Element->Node1;
+ N1 = Element->Node4;
+ }
+
+ Edge = EdgeList->FindWithIndex(N4, N1);
+ if (Edge == 0)
+ {
// Im moment gehe ich mal davon aus, dass es eine neue Randkante ist
NewEdge = EdgeList->AddWithIndex(N4, N1);
NewEdge->IsBoundary = true;
}
else
{
- // Mal sehen welche ich behalte
- if (N4->Nr > N1->Nr)
- {
- // die alte ist besser, aber keine Randkante
- AntiEdge->IsBoundary = false;
- }
- else
- {
- // Die neue ist besser, aber keine Randkante
- EdgeList->EraseWithIndex(AntiEdge);
- NewEdge = EdgeList->AddWithIndex(N4, N1);
- NewEdge->IsBoundary = false;
- }
+ Edge->IsBoundary = false;
}
}
Count++;
@@ -1153,7 +1148,7 @@
if (Point->Meter > Meter) continue;
- if (NextPoint && SperrenList)
+ if (NextPoint && SperrenList->size() > 0)
{
double X = 0.0;
double Y = 0.0;
@@ -1219,7 +1214,7 @@
if (Point->Meter < Meter) continue;
- if (NextPoint && SperrenList)
+ if (NextPoint && SperrenList->size() > 0)
{
double X = 0.0;
double Y = 0.0;
@@ -1319,7 +1314,15 @@
Node->Wsp = Wsp;
WspCount++;
}
+ else
+ {
+ Node->Wsp = -9999.9;
+ }
}
+ else
+ {
+ Node->Wsp = -9999.9;
+ }
Count++;
}
write_fortschritt("%d von %d Knoten getestet, %d Wasserstände übertragen\n", Count, NodeList->size(), WspCount);
@@ -1665,6 +1668,10 @@
}
//---------------------------------------------------------------------------
+static bool OnBoundary = false;
+static int AnzWetBoundaries = 0;
+
+//---------------------------------------------------------------------------
bool FindFirstChangeEdge(TEdgeListNrSorted::iterator *Start, TEdgeList *EdgeList, TEdge **edge, TNode **node)
{
for (TEdgeListNrSorted::iterator i = *Start; i != EdgeList->EdgeListNrSorted.end(); i++)
@@ -1711,7 +1718,17 @@
TXY *XY = new TXY(X, Y);
PunktList->Add(XY);
+
+ if (false == OnBoundary)
+ {
+ OnBoundary = true;
+ AnzWetBoundaries++;
+ }
}
+ else
+ {
+ OnBoundary = false;
+ }
if (Edge->X > 0.0 && Edge->Y > 0.0)
{
@@ -1761,6 +1778,7 @@
}
} while (true);
}
+
//---------------------------------------------------------------------------
bool FindFirstWetBoundaryEdge(TEdgeListNrSorted::iterator *Start, TEdgeList *EdgeList, TEdge **edge, TNode **node)
{
@@ -1830,6 +1848,8 @@
for (double DeltaTopo = Von; DeltaTopo <= Bis; DeltaTopo = DeltaTopo + Diff)
{
+ AnzWetBoundaries = 0;
+
write_fortschritt("Wasserstand %.3f zwischen %.3f und %.3f wird bearbeitet\n", DeltaTopo, Von, Bis);
// Zuerst alles wieder wie gehabt einstellen
@@ -1899,7 +1919,7 @@
if (Node->Wsp > -9999 || Node->Z > MaxWsp) Ready++;
}
- if (DebugLevel >= 2) write_fortschritt("Ersten Kanten mit Nass/Trocken-Übergang ermitteln\n");
+ if (DebugLevel >= 2) write_fortschritt("Erste Kanten mit Nass/Trocken-Übergang ermitteln\n");
// Die Kanten bestimmen, die an einem Ende einen nassen und am anderen Ende einen trockenen Knoten haben
// Dies ist die Anfangskanten
@@ -2097,7 +2117,7 @@
if (fabs(D2) >= 0.00001) Faktor = 1 / (1 + D1/D2);
if (Z1 < -9999 || Z1 > 9999)
- {
+ {
Faktor = 0.99;
}
else if (Z2 < -9999 || Z2 > 9999)
@@ -2175,6 +2195,12 @@
SaveNode->Wsp = Node->Wsp;
}
}
+
+ if (DebugLevel >= 6) write_fortschritt("Es hat %d nasse Grenzen gegeben\n", AnzWetBoundaries);
+ if (AnzWetBoundaries > 2)
+ {
+ write_warning(1, "Es hat mehr als 2 (%d) nasse Grenzen gegeben\n", AnzWetBoundaries);
+ }
}
Modified: trunk/src/tri.cpp
===================================================================
--- trunk/src/tri.cpp 2006-05-11 21:32:40 UTC (rev 48)
+++ trunk/src/tri.cpp 2006-05-26 05:12:48 UTC (rev 49)
@@ -105,15 +105,15 @@
double X = (X1 + X2) / 2;
double Y = (Y1 + Y2) / 2;
- int MaxTestAnz = 5;
- int TestAnz = 0;
+ int MaxTestWeite = 128;
+ int TestWeite = 1;
int FoundAnz = 0;
do
{
- TestAnz++;
+ TestWeite = TestWeite * 2;
- double SX = X - 3 * TestAnz * Dy;
- double SY = Y + 3 * TestAnz * Dx;
+ double SX = X - TestWeite * Dy;
+ double SY = Y + TestWeite * Dx;
TestNode.X = SX;
TestNode.Y = SY;
@@ -154,7 +154,7 @@
}
i++;
}
- } while (FoundAnz <= 0 && TestAnz < MaxTestAnz);
+ } while (FoundAnz <= 0 && TestWeite < MaxTestWeite);
/*
// Dann versuche ich es noch mal mit allen
@@ -552,8 +552,8 @@
#include "file.h"
if (ReadyEdgeList->Anz >= 128901)
{
- SaveElements("tmp_elements.shp", ElementList, true);
- SaveNet("tmp.2dm", NodeList, ElementList, true);
+ SaveElements("tmp_elements.shp", ElementList, DebugLevel);
+ SaveNet("tmp.2dm", NodeList, ElementList, DebugLevel);
}
*/
Modified: trunk/src/wsplgen.cpp
===================================================================
--- trunk/src/wsplgen.cpp 2006-05-11 21:32:40 UTC (rev 48)
+++ trunk/src/wsplgen.cpp 2006-05-26 05:12:48 UTC (rev 49)
@@ -138,6 +138,7 @@
// Jetzt die Waserstände einlesen und
// anschliessend gleich auf die Profile interpolieren
// Dabei wird die Stationierung von km in cm umgerechnet
+ // [km] in float nach [cm] in int
TProfilList *WspProfilList = new TProfilList; // (ja, die Klasse TProfile wird hier kurz zweckentfremdet)
LoadWsp(Parameter.FileNameWsp, WspProfilList, Parameter.DebugLevel);
@@ -272,10 +273,6 @@
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);
- // Aus den Elementen werden nun die Kanten gebildet
- // Der durchschnittliche Abstand der Knoten (bzw. die Kantenlänge) wird dabei mit ermittelt.
- // Das DGM sollte einigermassen homogen sein
-
if (SperrenList.size() > 0 || GrabenList.size() > 0)
{
// Jetzt die gesperrten Elemente entfernen
@@ -289,7 +286,9 @@
// Hier werden die Kanten drin verwaltet
// Die Kanten werden im Moment noch aus den Elementen generiert
- // Dieser Umweg ist eingendlich nicht notwendig
+ // Dieser Umweg ist eigendlich nicht notwendig
+ // 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);
@@ -454,7 +453,7 @@
printf ("Unbekannter Fehler nicht korrekt abgefangen\n");
printf ("Programmabbruch\n");
- ReturnCode = 9299;
+ ReturnCode = 2;
}
write_fortschritt ("WSPLGEN wird beendet\n");
Modified: trunk/src/wsplgen.h
===================================================================
--- trunk/src/wsplgen.h 2006-05-11 21:32:40 UTC (rev 48)
+++ trunk/src/wsplgen.h 2006-05-26 05:12:48 UTC (rev 49)
@@ -10,8 +10,30 @@
// Read the file COPYING coming with WSPLGEN for details.
//
-const char Version[] = "0.9.4 r1";
+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)
+
+// const char Version[] = "0.9.6 r2";
+
+// Ein Fehler durch den Verwendung von Node->Wsp durch die Triangulierung wurde behiben
+
+// const char Version[] = "0.9.6 r1";
+
+// Die erkannten Parameter werden jetzt immer ausgegeben
+// Projektionsdateien werden unterstützt.
+
+// const char Version[] = "0.9.5 r2";
+
+// Die Umbenennung von -DEBUG in-OUTPUT wurde korrigiert
+
+// const char Version[] = "0.9.5 r1";
+
+// Der Schalter Debug wurde in OUTPUT geändert
+
+// const char Version[] = "0.9.4 r1";
+
// Es wurde ein Fehler bei der Generieung von gleichen Profilen behoben
// EqualizeProfil hatte Probleme, wenn es zu Rundungsfehlern bei der Ermittlung von
// der Meter kam und somit das Hinzufügen von Profilpunkten scheiterte
Modified: trunk/src/xy.cpp
===================================================================
--- trunk/src/xy.cpp 2006-05-11 21:32:40 UTC (rev 48)
+++ trunk/src/xy.cpp 2006-05-26 05:12:48 UTC (rev 49)
@@ -19,6 +19,7 @@
#include <math.h>
#include "tools.h"
+#include "file.h"
#include "xy.h"
//---------------------------------------------------------------------------
@@ -639,7 +640,7 @@
double DummyLambda = 0.0;
double DummyMeter = 0.0;
- if (SperrenList && CalcProfilSchnitt(Node->X, Node->Y, X, Y, SperrenList, &DummyX, &DummyY, &DummyLambda, &DummyMeter)) continue;
+ if (SperrenList->size() > 0 && CalcProfilSchnitt(Node->X, Node->Y, X, Y, SperrenList, &DummyX, &DummyY, &DummyLambda, &DummyMeter)) continue;
if (Node->X >= X && Node->Y > Y)
{
@@ -1153,6 +1154,11 @@
TElement* Element = *i;
+ if (Element->Typ == NO_ELEMENT)
+ {
+ continue;
+ }
+
if (Element->Typ == QUAD)
{
dump_error(__FILE__, __LINE__, "Viereckselemente werden im Moment noch nicht unterstützt");
@@ -2049,10 +2055,10 @@
double P1x = P1->X;
double P1y = P1->Y;
- if (P0x < GewaesserAchse->MinX && P1x < GewaesserAchse->MinX) return (false);
- if (P0x > GewaesserAchse->MaxX && P1x > GewaesserAchse->MaxX) return (false);
- if (P0y < GewaesserAchse->MinY && P1y < GewaesserAchse->MinY) return (false);
- if (P0y > GewaesserAchse->MaxY && P1y > GewaesserAchse->MaxY) return (false);
+ if (P0x < GewaesserAchse->MinX && P1x < GewaesserAchse->MinX) continue;
+ if (P0x > GewaesserAchse->MaxX && P1x > GewaesserAchse->MaxX) continue;
+ if (P0y < GewaesserAchse->MinY && P1y < GewaesserAchse->MinY) continue;
+ if (P0y > GewaesserAchse->MaxY && P1y > GewaesserAchse->MaxY) continue;
double PDx = P1x - P0x;
double PDy = P1y - P0y;
More information about the Wsplgen-commits
mailing list