[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