[Wsplgen-commits] r91 - trunk/src
scm-commit@wald.intevation.org
scm-commit at wald.intevation.org
Wed Jul 18 23:27:06 CEST 2007
Author: mrchip
Date: 2007-07-18 23:27:05 +0200 (Wed, 18 Jul 2007)
New Revision: 91
Modified:
trunk/src/file.cpp
trunk/src/parameter.cpp
trunk/src/parameter.h
trunk/src/tools.cpp
trunk/src/tools.h
trunk/src/wsplgen.cpp
trunk/src/wsplgen.h
trunk/src/xy.h
Log:
Die Profile k?\195?\182nnen jetzt automatisch an die Gew?\195?\164sseracjhse angepasst werden. Vorsicht bei bei der Verwendung des Parameters Strecke !!!
Modified: trunk/src/file.cpp
===================================================================
--- trunk/src/file.cpp 2007-07-15 18:01:23 UTC (rev 90)
+++ trunk/src/file.cpp 2007-07-18 21:27:05 UTC (rev 91)
@@ -2485,6 +2485,24 @@
if (NodeList == 0) dump_error(__FILE__, __LINE__, "Die Knotenliste ist nicht definiert\n");
+ write_fortschritt("->Umnumerierung der Knoten gestartet\n");
+
+ for (unsigned int i=0; i<NodeList->size(); i++)
+ {
+ if (DebugLevel >= 9 || (DebugLevel >= 1 && i % 5000 == 0) || (i > 0 && i % 50000 == 0))
+ {
+ write_fortschritt("%d von %d Knoten umnumeriert\n", i, NodeList->size());
+ }
+
+ TNode *Node = (*NodeList)[i];
+
+ Node->Nr = i + 1;
+ }
+
+ write_fortschritt("%d von %d Knoten umnumeriert\n", NodeList->size(), NodeList->size());
+
+ write_fortschritt("<-Umnumerierung der Knoten beendet\n");
+
FILE *fh = fopen (FileName.c_str(), "w");
if (fh == NULL)
{
@@ -2989,12 +3007,9 @@
y[AnzPolyPoints] = (*m)->Y / 100.0;
if (DebugLevel == 9)
- {
- if (DebugLevel == 9)
- {
- write_fortschritt("%.2f %.2f\n", x[AnzPolyPoints], y[AnzPolyPoints]);
- }
- }
+ {
+ write_fortschritt("%.2f %.2f\n", x[AnzPolyPoints], y[AnzPolyPoints]);
+ }
AnzPolyPoints++;
}
@@ -3003,7 +3018,10 @@
x[AnzPolyPoints] = (*m)->X / 100.0;
y[AnzPolyPoints] = (*m)->Y / 100.0;
- write_fortschritt("%.2f %.2f\n\n", x[AnzPolyPoints], y[AnzPolyPoints]);
+ if (DebugLevel == 9)
+ {
+ write_fortschritt("%.2f %.2f\n", x[AnzPolyPoints], y[AnzPolyPoints]);
+ }
AnzPolyPoints++;
}
Modified: trunk/src/parameter.cpp
===================================================================
--- trunk/src/parameter.cpp 2007-07-15 18:01:23 UTC (rev 90)
+++ trunk/src/parameter.cpp 2007-07-18 21:27:05 UTC (rev 91)
@@ -72,6 +72,8 @@
IsSetAusgabe = false;
FileNameAusgabe = "WSPLGEN.SHP";
+ IsSetAutoRenumber = false;
+
if (argc == 0 || argv == 0)
{
write_error(1201, "Es wurden keine Parameter übergeben.\nWenigstens die Parameter -DGM=<DGM-Datei>, -PRO=<Profil-Datei> und -WSP=<Wasserstands-Datei>\nmüssen angegeben werden.\n");
@@ -550,6 +552,23 @@
continue;
}
+ else if (Parameter.substr(0, 13) == "-AUTORENUMBER" || Parameter.substr(0, 13) == "-autorenumber")
+ {
+ ///////////////////////////////////////////////
+ // AUTORENUMBER
+ ///////////////////////////////////////////////
+ if (IsSetDebug) write_fortschritt("Parameter -AUTORENUMBER erkannt.\n");
+
+ if (IsSetAutoRenumber)
+ {
+ write_warning(1106, "Der Parameter -AUTORENUMBER wurde mehrfach angegeben.\n");
+ continue;
+ }
+
+ IsSetAutoRenumber = true;
+
+ write_fortschritt("Stationierung der Profile wird an die Spur angepasst\n");
+ }
else if (Parameter.substr(0, 8) == "-AUSGABE" || Parameter.substr(0, 8) == "-ausgabe")
{
if (IsSetDebug) write_fortschritt("Parameter -AUSGABE erkannt.\n");
@@ -661,6 +680,12 @@
write_warning(1123, "Parameter -ACHSE wird ignoriert, da der Parameter -GEL den Wert NOSPERRE hat\n");
}
+ if (false == IsSetAchse && true == IsSetAutoRenumber)
+ {
+ write_warning(1125, "Parameter -AUTORENUMBER wird ignoriert, da keine Gewässerachse angegeben wurde\n");
+ IsSetAutoRenumber = false;
+ }
+
write_fortschritt("<-Auswertung der Kommandozeilen-Parameter beendet\n");
}
Modified: trunk/src/parameter.h
===================================================================
--- trunk/src/parameter.h 2007-07-15 18:01:23 UTC (rev 90)
+++ trunk/src/parameter.h 2007-07-18 21:27:05 UTC (rev 91)
@@ -74,6 +74,8 @@
bool IsSetAusgabe;
std::string FileNameAusgabe;
+
+ bool IsSetAutoRenumber;
};
//---------------------------------------------------------------------------
Modified: trunk/src/tools.cpp
===================================================================
--- trunk/src/tools.cpp 2007-07-15 18:01:23 UTC (rev 90)
+++ trunk/src/tools.cpp 2007-07-18 21:27:05 UTC (rev 91)
@@ -2569,4 +2569,122 @@
write_fortschritt("<-Ermittlung der Überschwemmungsgrenzen beendet\n");
}
+//---------------------------------------------------------------------
+TProfilList* Renumber(TProfilList* ProfilList, TGewaesserAchseList *GewaesserAchseList, int DebugLevel)
+{
+ write_fortschritt("->Umnumerierung der Profile gestartet\n");
+ TProfilList* NewProfilList = new TProfilList;
+
+ for (TProfilList::iterator i = ProfilList->begin(); i != ProfilList->end(); i++)
+ {
+ TProfil* Profil = *i;
+
+ TProfil* NewProfil = 0;
+
+ bool FoundSchnitt = false;
+
+ for (TGewaesserAchseList::iterator j = GewaesserAchseList->begin(); j != GewaesserAchseList->end(); j++)
+ {
+ TGewaesserAchse* GewaesserAchse = *j;
+
+ double SpurStation = 0.0;
+ TPoint *S0 = 0;
+ TPoint *S1 = 0;
+ for (TPointList::iterator k = GewaesserAchse->PointList->begin(); k != GewaesserAchse->PointList->end(); k++)
+ {
+ S0 = S1;
+ S1 = *k;
+
+ if (k == GewaesserAchse->PointList->begin()) continue;
+
+ long S0x = S0->X;
+ long S0y = S0->Y;
+ long S1x = S1->X;
+ long S1y = S1->Y;
+
+ long SDx = (S1x - S0x);
+ long SDy = (S1y - S0y);
+
+ if (SDx == 0L && SDy == 0L)
+ {
+ write_warning (8888, "Die Spurpunkte (%ld, %ld) und (%ld, %ld) liegen zu dicht zusammen", S0x, S0y, S1x, S1y);
+ continue;
+ }
+
+ TPoint *P0 = 0;
+ TPoint *P1 = 0;
+ for (TPointList::iterator m = Profil->PointList->begin(); m != Profil->PointList->end(); m++)
+ {
+ P0 = P1;
+ P1 = *m;
+
+ if (m == Profil->PointList->begin()) continue;
+
+ long P0x = P0->X;
+ long P0y = P0->Y;
+ long P1x = P1->X;
+ long P1y = P1->Y;
+
+ long PDx = P1x - P0x;
+ long PDy = P1y - P0y;
+
+ if (PDx == 0L && PDy == 0L)
+ {
+ write_warning (8888, "Die Profilpunkte (%ld, %ld) und (%ld, %ld) liegen zu dicht zusammen", P0x, P0y, P1x, P1y);
+ continue;
+ }
+
+ double X = 0.0;
+ double Y = 0.0;
+
+ bool Schnitt = Calc2Schnitt(P0x, P0y, P1x, P1y, S0x, S0y, S1x, S1y, &X, &Y);
+
+ if (Schnitt == true)
+ {
+ double TDx = S0x - X;
+ double TDy = S0y - Y;
+
+ double TDistance = sqrt(TDx*TDx+TDy*TDy);
+
+ if (DebugLevel >= 8)
+ {
+ // Länge durch 100 (cm nach m) und Station durch 1000.0 (m nach km)
+ write_fortschritt("Profil %.4f wird zu %.4f\n", Profil->Station / 10000.0, (int)(SpurStation + TDistance) / 100.0 / 1000.0);
+ }
+
+ NewProfil = new TProfil (Profil);
+ NewProfil->Station = (int)((SpurStation + TDistance) / 10.0); // durch von cm nach dm
+
+ FoundSchnitt = true;
+
+ break;
+ }
+ }
+ if (FoundSchnitt)
+ {
+ break;
+ }
+ else
+ {
+ double SDistance = sqrt(SDx*SDx+SDy*SDy);
+ SpurStation = SpurStation + SDistance;
+ }
+ }
+ if (FoundSchnitt)
+ {
+ break;
+ }
+ }
+
+ if (0 == NewProfil) NewProfil = new TProfil (Profil);
+ NewProfilList->insert(NewProfil);
+ }
+
+ write_fortschritt("<-Umnumerierung der Profile beendet\n");
+
+ delete ProfilList;
+
+ return (NewProfilList);
+}
+
Modified: trunk/src/tools.h
===================================================================
--- trunk/src/tools.h 2007-07-15 18:01:23 UTC (rev 90)
+++ trunk/src/tools.h 2007-07-18 21:27:05 UTC (rev 91)
@@ -75,6 +75,7 @@
void GetWspFromNodeListToGradient(TNodeList* NodeList, TProfilList* GradientenList, double AvgDistance, int DebugLevel);
void GetWspFromNodeListToRohr(TNodeList* NodeList, TProfilList* RohreList, double AvgDistance, int DebugLevel);
void NassTrockenBerechnung(TNodeList *NodeList, TEdgeList *edgelist, TErgebnisPolygonList* ErgebnisPolygone, TProfilList* RohreList, TProfilList* GradientenList, double AvgDistance, int Von, int Bis, int Diff, int DebugLevel);
+TProfilList* Renumber(TProfilList* ProfilList, TGewaesserAchseList *GewaesserAchseList, int DebugLevel);
//---------------------------------------------------------------------------
template<class TClass> int IsInside(TClass *p, double x, double y)
Modified: trunk/src/wsplgen.cpp
===================================================================
--- trunk/src/wsplgen.cpp 2007-07-15 18:01:23 UTC (rev 90)
+++ trunk/src/wsplgen.cpp 2007-07-18 21:27:05 UTC (rev 91)
@@ -104,7 +104,7 @@
TElementList *ElementList = new TElementList;
// Hier werden die Gewaesserachsen drin verwaltet
- TGewaesserAchseList GewaesserAchseList;
+ TGewaesserAchseList* GewaesserAchseList = new TGewaesserAchseList;
// Hier drin werden die Ergebnis Polygone drin verwaltet
TErgebnisPolygonList *ErgebnisPolygone = new TErgebnisPolygonList();
@@ -139,14 +139,19 @@
delete WspProfilList;
WspProfilList = 0;
- // if (Parameter.DebugLevel >= 5) SaveProfile("debug_output_02_Profile_ORIGINAL_mit_WSP.shp", &ProfilList, Parameter.DebugLevel);
-
// Jetzt die Gewässerachse einlesen, wenn es notwendig ist
- if (Parameter.Sperre)
+ if (Parameter.Sperre || Parameter.IsSetAutoRenumber)
{
- LoadAchse(Parameter.FileNameAchse, &GewaesserAchseList, Parameter.DebugLevel);
+ LoadAchse(Parameter.FileNameAchse, GewaesserAchseList, Parameter.DebugLevel);
}
+ // Jetzt die Profile umnummerieren, wenn es notwendig ist
+ if (Parameter.IsSetAutoRenumber)
+ {
+ // In Renumber wird die alte durch eine neue ProfilList ersetzt
+ ProfilList = Renumber(ProfilList, GewaesserAchseList, Parameter.DebugLevel);
+ }
+
// Jetzt die Gräben und Dämme und Rohre und Gradienten einlesen, wenn es notwendig ist
if (Parameter.IsSetLin)
{
@@ -241,22 +246,26 @@
// werden die Profile entsprechend fein interpoliert
// Dabei muss der Faktor zwischen Kantenlänge in Metern
// und Station in Centimetern beachtet werden
- ProfilList->InterpoliereProfile(AvgDistance * 4.0);
+ ProfilList->InterpoliereProfile(AvgDistance * 2.0);
// if (ProfilList->size() < 200) ProfilList->InterpoliereProfile(AvgDistance * 4.0);
// if (ProfilList->size() < 200) ProfilList->InterpoliereProfile(AvgDistance * 2.0);
// if (ProfilList->size() < 200) ProfilList->InterpoliereProfile(AvgDistance * 1.0);
// Jetzt die Stützstellen auffüllen
- ProfilList->FillProfile(AvgDistance / 2.0, -1, Parameter.DebugLevel);
+ ProfilList->FillProfile(AvgDistance / 4.0, -1, Parameter.DebugLevel);
// Mal wieder Zwischenergebnisse produzieren
std::string ProfilFileName = ExchangeFileExt(Parameter.FileNameAusgabe, "_interpolierte_profile.shp");
SaveProfile(ProfilFileName, ProfilList, Parameter.DebugLevel);
// Jetzt eine neue Knotenliste aus den Profilen generienen
- BuildProfilNodeList(ProfilList, NodeList, &GewaesserAchseList, SperrenList, ProfilNodeList, AvgDistance * 2.0, Parameter.Sperre, Parameter.DebugLevel);
+ BuildProfilNodeList(ProfilList, NodeList, GewaesserAchseList, SperrenList, ProfilNodeList, AvgDistance * 2.0, Parameter.Sperre, Parameter.DebugLevel);
+ write_fortschritt("->Freigeben des Speichers der Gewässerachsen gestartet\n");
+ delete GewaesserAchseList;
+ write_fortschritt("<-Freigeben des Speichers der Gewässerachsen beendet\n");
+
std::string ProfilKnotenFileName = ExchangeFileExt(Parameter.FileNameAusgabe, "_profilknoten.shp");
SaveNodes(ProfilKnotenFileName, ProfilNodeList, Parameter.DebugLevel);
Modified: trunk/src/wsplgen.h
===================================================================
--- trunk/src/wsplgen.h 2007-07-15 18:01:23 UTC (rev 90)
+++ trunk/src/wsplgen.h 2007-07-18 21:27:05 UTC (rev 91)
@@ -10,8 +10,14 @@
// Read the file COPYING coming with WSPLGEN for details.
//
-const char Version[] = "1.1.1";
+const char Version[] = "1.1.2";
+// Parameter AUTORENUMBER wurde eingeführt
+
+// const char Version[] = "1.1.1";
+
+// 2DM-Netze werden vor dem Speichern umnumeriert
+
// Es wird die Umhüllung bei TINs gelesen und benutzt um inaktive Kanten zu eleminieren
// Falls das Begrenzungpolygon nicht beschnitten werden muss,
Modified: trunk/src/xy.h
===================================================================
--- trunk/src/xy.h 2007-07-15 18:01:23 UTC (rev 90)
+++ trunk/src/xy.h 2007-07-18 21:27:05 UTC (rev 91)
@@ -411,7 +411,6 @@
class TGewaesserAchse
{
public:
-// int ID;
long MinX;
long MaxX;
More information about the Wsplgen-commits
mailing list