[Wsplgen-commits] r74 - trunk/src
scm-commit@wald.intevation.org
scm-commit at wald.intevation.org
Thu Oct 26 00:00:51 CEST 2006
Author: mrchip
Date: 2006-10-26 00:00:50 +0200 (Thu, 26 Oct 2006)
New Revision: 74
Modified:
trunk/src/wsplgen.cpp
trunk/src/wsplgen.h
trunk/src/xy.cpp
Log:
Zwei Fehler wurden korrigiert.
1. Die Parameterauswertung erkennt jetzt nicht mehr immer $ und gibt die Versionsnummer aus.
2. Doppelte Punkte in Begrenzungspolygonen werden jetzt eleminiert. Bisher brach WSPLGEN immer ab, wenn es eine solche Situation vorfand.
Modified: trunk/src/wsplgen.cpp
===================================================================
--- trunk/src/wsplgen.cpp 2006-10-19 19:49:04 UTC (rev 73)
+++ trunk/src/wsplgen.cpp 2006-10-25 22:00:50 UTC (rev 74)
@@ -57,7 +57,7 @@
fhlog = fopen ("wsplgen_log.txt", "w");
fhsta = fopen ("wsplgen_sta.txt", "w");
}
- else if (argc >= 1 || argv[1][0] == '?')
+ else if (argc >= 1 && argv[1][0] == '?')
{
printf ("%s\n", Version);
return (0);
Modified: trunk/src/wsplgen.h
===================================================================
--- trunk/src/wsplgen.h 2006-10-19 19:49:04 UTC (rev 73)
+++ trunk/src/wsplgen.h 2006-10-25 22:00:50 UTC (rev 74)
@@ -10,8 +10,13 @@
// Read the file COPYING coming with WSPLGEN for details.
//
-const char Version[] = "1.0.0 rc1";
+const char Version[] = "1.0.0 rc2";
+// Eine Erkennung von doppelten Punkten in Begrenzungpolygonen wurde eingeführt.
+// Damit bricht WSPLGEN nicht mehr ab, wenn es solche Situationen findet.
+
+// const char Version[] = "1.0.0 rc1";
+
// Das Schneiden von Profilen wird jetzt noch überprüft
// const char Version[] = "0.9.18 r2";
Modified: trunk/src/xy.cpp
===================================================================
--- trunk/src/xy.cpp 2006-10-19 19:49:04 UTC (rev 73)
+++ trunk/src/xy.cpp 2006-10-25 22:00:50 UTC (rev 74)
@@ -390,10 +390,14 @@
{
TXYList* CutXyList = new TXYList();
- // Zuerst den ersten Punkt am Ende hinzufügen
- TXY* Xy = *begin();
- Add(Xy->X, Xy->Y);
+ // Zuerst (wenn notwendig )den ersten Punkt am Ende hinzufügen
+ TXY* XyFirst = *begin();
+ TXY* XyLast = *rbegin();
+ if (XyFirst->X != XyLast->X || XyFirst->Y != XyLast->Y)
+ {
+ Add(XyFirst->X, XyFirst->Y);
+ }
// Jetzt das CutProfil verlängern, damit es wirklich zwei Schnittpunkte gibt
long X = 0;
@@ -424,45 +428,50 @@
Xy0 = Xy1;
Xy1 = *i;
- if (Xy0 == 0)
- {
- continue;
- }
+ if (Xy0 == 0)
+ {
+ continue;
+ }
- TXY* CutXy0 = 0;
- TXY* CutXy1 = 0;
- bool Schnitt = false;
- double SX = 0;
- double SY = 0;
- for (TXYList::iterator j=CutXyList->begin(); j != CutXyList->end(); j++)
- {
- CutXy0 = CutXy1;
- CutXy1 = *j;
+ if (Xy0->X == Xy1->X && Xy0->Y == Xy1->Y)
+ {
+ continue;
+ }
- if (CutXy0 == 0) continue;
+ TXY* CutXy0 = 0;
+ TXY* CutXy1 = 0;
+ bool Schnitt = false;
+ double SX = 0;
+ double SY = 0;
+ for (TXYList::iterator j=CutXyList->begin(); j != CutXyList->end(); j++)
+ {
+ CutXy0 = CutXy1;
+ CutXy1 = *j;
- Schnitt = Calc2Schnitt(Xy0->X, Xy0->Y, Xy1->X, Xy1->Y, CutXy0->X, CutXy0->Y, CutXy1->X, CutXy1->Y, &SX, &SY);
+ if (CutXy0 == 0) continue;
- if (Schnitt) break;
- }
+ Schnitt = Calc2Schnitt(Xy0->X, Xy0->Y, Xy1->X, Xy1->Y, CutXy0->X, CutXy0->Y, CutXy1->X, CutXy1->Y, &SX, &SY);
- if (Schnitt)
- {
- long LSX = (long)(SX + 0.5);
- long LSY = (long)(SY + 0.5);
- SideZero->Add(LSX, LSY);
- SideOne->Add(LSX, LSY);
- Side = 1 - Side; // Wechsel von 0 zu 1 oder von 1 zu 0
- }
+ if (Schnitt) break;
+ }
- if (Side == 0)
- {
- SideZero->Add(Xy1->X, Xy1->Y);
- }
- else
- {
- SideOne->Add(Xy1->X, Xy1->Y);
- }
+ if (Schnitt)
+ {
+ long LSX = (long)(SX + 0.5);
+ long LSY = (long)(SY + 0.5);
+ SideZero->Add(LSX, LSY);
+ SideOne->Add(LSX, LSY);
+ Side = 1 - Side; // Wechsel von 0 zu 1 oder von 1 zu 0
+ }
+
+ if (Side == 0)
+ {
+ SideZero->Add(Xy1->X, Xy1->Y);
+ }
+ else
+ {
+ SideOne->Add(Xy1->X, Xy1->Y);
+ }
}
More information about the Wsplgen-commits
mailing list