update src

This commit is contained in:
张壹 2021-09-16 23:09:12 +08:00
parent f5e1e808e1
commit d6984a3270
9 changed files with 1010370 additions and 393 deletions

View File

@ -5,7 +5,7 @@
#### Compile #### Compile
```shell ```shell
g++ demo.cpp g++ demo.cpp -O2
``` ```
#### Run demo #### Run demo

BIN
Untitled.nc Normal file

Binary file not shown.

View File

@ -6,10 +6,10 @@
int main(int argc, char const *argv[]) int main(int argc, char const *argv[])
{ {
// read dem grid // read dem grid
std::vector<double> topo(10201); std::vector<double> topo(1002001);
std::ifstream infile("topo.txt"); std::ifstream infile("topo2.txt");
for (int i = 0; i < 10201; ++i) for (int i = 0; i < 1002001; ++i)
{ {
infile >> topo[i]; infile >> topo[i];
} }
@ -18,10 +18,10 @@ int main(int argc, char const *argv[])
std::vector<double> err_records; std::vector<double> err_records;
std::vector<vertex2dc*> tin_vert; std::vector<vertex2dc*> tin_vert;
std::vector<triangle*> tin_ele; std::vector<triangle*> tin_ele;
dem2tin(topo, 0, 1000, 0, 1000, 10, 10, tin_vert, tin_ele, 1.0, &err_records); dem2tin(topo, 0, 1000, 0, 1000, 1, 1, tin_vert, tin_ele, 10.0, &err_records);
// Write a log file // Write a log file
std::ofstream logfile("topo_TIN.log"); std::ofstream logfile("topo2_TIN.log");
logfile << "# Insertion Maxi-Error\n"; logfile << "# Insertion Maxi-Error\n";
for (int i = 0; i < err_records.size(); ++i) for (int i = 0; i < err_records.size(); ++i)
{ {
@ -30,7 +30,7 @@ int main(int argc, char const *argv[])
logfile.close(); logfile.close();
// Write a Gmsh's .msh file // Write a Gmsh's .msh file
std::ofstream outfile("topo_TIN.msh"); std::ofstream outfile("topo2_TIN.msh");
outfile << "$MeshFormat" << std::endl << "2.2 0 8" << std::endl << "$EndMeshFormat "<<std::endl; outfile << "$MeshFormat" << std::endl << "2.2 0 8" << std::endl << "$EndMeshFormat "<<std::endl;
outfile << "$Nodes" << std::endl << tin_vert.size() << std::endl; outfile << "$Nodes" << std::endl << tin_vert.size() << std::endl;
for (int i = 0; i < tin_vert.size(); i++) for (int i = 0; i < tin_vert.size(); i++)

168
tin.h
View File

@ -131,6 +131,7 @@ struct dem_point
{ {
double x, y; // position of the DEM location double x, y; // position of the DEM location
double elev; // elevation at the DEM location double elev; // elevation at the DEM location
double err;
triangle *host; // host triangle of the DEM location triangle *host; // host triangle of the DEM location
std::vector<triangle*> circum_host; // triangles which circumcircles include the location std::vector<triangle*> circum_host; // triangles which circumcircles include the location
@ -139,10 +140,60 @@ struct dem_point
void set(double inx, double iny, double inelev) void set(double inx, double iny, double inelev)
{ {
x = inx; y = iny; elev = inelev; host = nullptr; x = inx; y = iny; elev = inelev; host = nullptr;
circum_host.clear();
return; return;
} }
}; };
/**
* @brief Utility function of the heap_sort function.
*
* @param a Input vector
* @param[in] i vector's index i
* @param[in] n vector's index n
*/
void update_heap(std::vector<dem_point*> &a, int i, int n)
{
int iMax = i, iLeft = 2 * i + 1, iRight = 2 * (i + 1);
if (iLeft < n && a[iMax]->err > a[iLeft]->err)
{
iMax = iLeft;
}
if (iRight < n && a[iMax]->err > a[iRight]->err)
{
iMax = iRight;
}
if (iMax != i)
{
dem_point *tmp = a[iMax]; a[iMax] = a[i]; a[i] = tmp;
update_heap(a, iMax, n);
}
return;
}
/**
* @brief Heap sort of the dem_point vector in a descending order with respect to the error values
*
* @param a Input vector
*/
void heap_sort(std::vector<dem_point*> &a)
{
int n = a.size();
for (int i = (n - 1) / 2; i >= 0; i--)
{
update_heap(a, i, n);
}
dem_point *tmp;
for (int i = n - 1; i > 0; --i)
{
tmp = a[i]; a[i] = a[0]; a[0] = tmp;
update_heap(a, 0, i);
}
return;
}
// End DEM definition // End DEM definition
/** /**
@ -177,33 +228,46 @@ void dem2tin(const std::vector<double> &dem, double xmin, double xmax, double ym
if (dem.size() != xnum*ynum) return; if (dem.size() != xnum*ynum) return;
// Prepare the DEM points // Prepare the DEM points
std::vector<dem_point> dem_grid(xnum*ynum); dem_point *tmp_dem;
std::vector<dem_point>::iterator d_iter; std::vector<dem_point*> dem_grid(xnum*ynum);
std::vector<dem_point*>::iterator d_iter;
for (int i = 0; i < ynum; ++i) for (int i = 0; i < ynum; ++i)
{ {
for (int j = 0; j < xnum; ++j) for (int j = 0; j < xnum; ++j)
{ {
dem_grid[j + i*xnum].set(xmin + dx*j, ymin + dy*i, dem[j + i*xnum]); dem_grid[j + i*xnum] = new dem_point(xmin + dx*j, ymin + dy*i, dem[j + i*xnum]);
} }
} }
vertex2dc *tmp_vert = nullptr; vertex2dc *tmp_vert = nullptr;
tmp_vert = new vertex2dc(xmin, ymin, dem_grid[0].elev, out_verts.size()); // lower left corner tmp_vert = new vertex2dc(xmin, ymin, dem_grid[0]->elev, out_verts.size()); // lower left corner
out_verts.push_back(tmp_vert); out_verts.push_back(tmp_vert);
d_iter = dem_grid.begin(); dem_grid.erase(d_iter);
tmp_vert = new vertex2dc(xmax, ymin, dem_grid[xnum-2].elev, out_verts.size()); // lower right corner. Note the first location is already erased d_iter = dem_grid.begin();
out_verts.push_back(tmp_vert); tmp_dem = *d_iter; delete tmp_dem;
d_iter = dem_grid.begin() + (xnum - 2); dem_grid.erase(d_iter); dem_grid.erase(d_iter);
tmp_vert = new vertex2dc(xmax, ymax, dem_grid[xnum*ynum-3].elev, out_verts.size()); // upper right corner. Note the first two locations are already erased tmp_vert = new vertex2dc(xmax, ymin, dem_grid[xnum-2]->elev, out_verts.size()); // lower right corner. Note the first location is already erased
out_verts.push_back(tmp_vert); out_verts.push_back(tmp_vert);
d_iter = dem_grid.begin() + (xnum*ynum - 3); dem_grid.erase(d_iter);
tmp_vert = new vertex2dc(xmin, ymax, dem_grid[xnum*(ynum-1) - 2].elev, out_verts.size()); // upper left corner. Note the first two locations are already erased d_iter = dem_grid.begin() + (xnum - 2);
tmp_dem = *d_iter; delete tmp_dem;
dem_grid.erase(d_iter);
tmp_vert = new vertex2dc(xmax, ymax, dem_grid[xnum*ynum-3]->elev, out_verts.size()); // upper right corner. Note the first two locations are already erased
out_verts.push_back(tmp_vert); out_verts.push_back(tmp_vert);
d_iter = dem_grid.begin() + (xnum*(ynum-1) - 2); dem_grid.erase(d_iter);
d_iter = dem_grid.begin() + (xnum*ynum - 3);
tmp_dem = *d_iter; delete tmp_dem;
dem_grid.erase(d_iter);
tmp_vert = new vertex2dc(xmin, ymax, dem_grid[xnum*(ynum-1) - 2]->elev, out_verts.size()); // upper left corner. Note the first two locations are already erased
out_verts.push_back(tmp_vert);
d_iter = dem_grid.begin() + (xnum*(ynum-1) - 2);
tmp_dem = *d_iter; delete tmp_dem;
dem_grid.erase(d_iter);
triangle *tmp_tri = nullptr; triangle *tmp_tri = nullptr;
std::vector<triangle*> cnst_tri, new_tri; std::vector<triangle*> cnst_tri, new_tri;
@ -226,9 +290,9 @@ void dem2tin(const std::vector<double> &dem, double xmin, double xmax, double ym
{ {
for (int t = 0; t < out_tris.size(); ++t) for (int t = 0; t < out_tris.size(); ++t)
{ {
if (out_tris[t]->bound_location(dem_grid[i].x, dem_grid[i].y)) if (out_tris[t]->bound_location(dem_grid[i]->x, dem_grid[i]->y))
{ {
dem_grid[i].host = out_tris[t]; dem_grid[i]->host = out_tris[t];
break; // already found, no need to search more break; // already found, no need to search more
} }
} }
@ -240,52 +304,45 @@ void dem2tin(const std::vector<double> &dem, double xmin, double xmax, double ym
{ {
for (int t = 0; t < out_tris.size(); ++t) for (int t = 0; t < out_tris.size(); ++t)
{ {
dist = (out_tris[t]->cx - dem_grid[i].x) * (out_tris[t]->cx - dem_grid[i].x) dist = (out_tris[t]->cx - dem_grid[i]->x) * (out_tris[t]->cx - dem_grid[i]->x)
+ (out_tris[t]->cy - dem_grid[i].y) * (out_tris[t]->cy - dem_grid[i].y); + (out_tris[t]->cy - dem_grid[i]->y) * (out_tris[t]->cy - dem_grid[i]->y);
if ((dist - out_tris[t]->cr) <= ZERO) // Points on the circumcircle are also included if ((dist - out_tris[t]->cr) <= ZERO) // Points on the circumcircle are also included
{ {
dem_grid[i].circum_host.push_back(out_tris[t]); dem_grid[i]->circum_host.push_back(out_tris[t]);
// no beak here. There might be more than one triangle's circumcircle includes the DEM location // no beak here. There might be more than one triangle's circumcircle includes the DEM location
} }
} }
} }
int now_maxi_id; // loop all DEM data to find the location with maximal error
double now_err, now_maxi_err; for (int i = 0; i < dem_grid.size(); ++i)
{
dem_grid[i]->err = fabs(dem_grid[i]->host->interpolate(dem_grid[i]->x, dem_grid[i]->y) - dem_grid[i]->elev);
}
heap_sort(dem_grid);
bool removed; bool removed;
edge tmp_edge; edge tmp_edge;
std::vector<edge> cnst_edge; std::vector<edge> cnst_edge;
std::vector<edge>::iterator e_iter; std::vector<edge>::iterator e_iter;
do // quit til the threshold is meet while (dem_grid[0]->err >= maxi_err) // quit til the threshold is meet
{ {
// loop all DEM data to find the location with maximal error
now_maxi_err = -1.0;
for (int i = 0; i < dem_grid.size(); ++i)
{
now_err = fabs(dem_grid[i].host->interpolate(dem_grid[i].x, dem_grid[i].y) - dem_grid[i].elev);
if (now_err > now_maxi_err)
{
now_maxi_err = now_err;
now_maxi_id = i;
}
}
if (err_records != nullptr) if (err_records != nullptr)
{ {
err_records->push_back(now_maxi_err); err_records->push_back(dem_grid[0]->err);
} }
// create a new vertex // create a new vertex
tmp_vert = new vertex2dc(dem_grid[now_maxi_id].x, dem_grid[now_maxi_id].y, dem_grid[now_maxi_id].elev, out_verts.size()); tmp_vert = new vertex2dc(dem_grid[0]->x, dem_grid[0]->y, dem_grid[0]->elev, out_verts.size());
out_verts.push_back(tmp_vert); out_verts.push_back(tmp_vert);
// Move triangles which circumcircles include the new vertex to the cnst_tri and remove it from out_tris // Move triangles which circumcircles include the new vertex to the cnst_tri and remove it from out_tris
cnst_tri.clear(); cnst_tri.clear();
for (int i = 0; i < dem_grid[now_maxi_id].circum_host.size(); ++i) for (int i = 0; i < dem_grid[0]->circum_host.size(); ++i)
{ {
cnst_tri.push_back(dem_grid[now_maxi_id].circum_host[i]); cnst_tri.push_back(dem_grid[0]->circum_host[i]);
} }
for (int i = 0; i < cnst_tri.size(); ++i) for (int i = 0; i < cnst_tri.size(); ++i)
@ -303,9 +360,10 @@ void dem2tin(const std::vector<double> &dem, double xmin, double xmax, double ym
} }
// clear host and circumcircle triangles for the used DEM location // clear host and circumcircle triangles for the used DEM location
dem_grid[now_maxi_id].host = nullptr; dem_grid[0]->circum_host.clear();
dem_grid[now_maxi_id].circum_host.clear(); d_iter = dem_grid.begin();
d_iter = dem_grid.begin() + now_maxi_id; dem_grid.erase(d_iter); tmp_dem = *d_iter; delete tmp_dem;
dem_grid.erase(d_iter);
// loop to remove duplicate edges // loop to remove duplicate edges
cnst_edge.clear(); cnst_edge.clear();
@ -351,11 +409,11 @@ void dem2tin(const std::vector<double> &dem, double xmin, double xmax, double ym
{ {
for (int i = 0; i < dem_grid.size(); ++i) for (int i = 0; i < dem_grid.size(); ++i)
{ {
for (t_iter = dem_grid[i].circum_host.begin(); t_iter != dem_grid[i].circum_host.end(); ) for (t_iter = dem_grid[i]->circum_host.begin(); t_iter != dem_grid[i]->circum_host.end(); )
{ {
if (cnst_tri[c] == *t_iter) if (cnst_tri[c] == *t_iter)
{ {
t_iter = dem_grid[i].circum_host.erase(t_iter); t_iter = dem_grid[i]->circum_host.erase(t_iter);
break; // no need to search more break; // no need to search more
} }
else t_iter++; else t_iter++;
@ -368,9 +426,10 @@ void dem2tin(const std::vector<double> &dem, double xmin, double xmax, double ym
{ {
for (int n = 0; n < new_tri.size(); ++n) // search in newly created triangles to find new host for (int n = 0; n < new_tri.size(); ++n) // search in newly created triangles to find new host
{ {
if (new_tri[n]->bound_location(dem_grid[i].x, dem_grid[i].y)) if (new_tri[n]->bound_location(dem_grid[i]->x, dem_grid[i]->y))
{ {
dem_grid[i].host = new_tri[n]; dem_grid[i]->host = new_tri[n];
dem_grid[i]->err = fabs(new_tri[n]->interpolate(dem_grid[i]->x, dem_grid[i]->y) - dem_grid[i]->elev);
break; // already found, no need to search more break; // already found, no need to search more
} }
} }
@ -381,11 +440,11 @@ void dem2tin(const std::vector<double> &dem, double xmin, double xmax, double ym
{ {
for (int n = 0; n < new_tri.size(); ++n) // search in newly created triangles to find new circumcircle triangles for (int n = 0; n < new_tri.size(); ++n) // search in newly created triangles to find new circumcircle triangles
{ {
dist = (new_tri[n]->cx - dem_grid[i].x) * (new_tri[n]->cx - dem_grid[i].x) dist = (new_tri[n]->cx - dem_grid[i]->x) * (new_tri[n]->cx - dem_grid[i]->x)
+ (new_tri[n]->cy - dem_grid[i].y) * (new_tri[n]->cy - dem_grid[i].y); + (new_tri[n]->cy - dem_grid[i]->y) * (new_tri[n]->cy - dem_grid[i]->y);
if ((dist - new_tri[n]->cr) <= ZERO) // Points on the circumcircle are also included if ((dist - new_tri[n]->cr) <= ZERO) // Points on the circumcircle are also included
{ {
dem_grid[i].circum_host.push_back(new_tri[n]); dem_grid[i]->circum_host.push_back(new_tri[n]);
// no beak here. There might be more than one triangle's circumcircle includes the DEM location // no beak here. There might be more than one triangle's circumcircle includes the DEM location
} }
} }
@ -398,7 +457,20 @@ void dem2tin(const std::vector<double> &dem, double xmin, double xmax, double ym
delete tmp_tri; tmp_tri = nullptr; delete tmp_tri; tmp_tri = nullptr;
} }
} while (now_maxi_err >= maxi_err); heap_sort(dem_grid);
}
if (err_records != nullptr)
{
err_records->push_back(dem_grid[0]->err);
}
// destroy remaining DEM data
for (int i = 0; i < dem_grid.size(); ++i)
{
tmp_dem = dem_grid[i];
delete tmp_dem; tmp_dem = nullptr;
}
return; return;
} }

1002001
topo2.txt Normal file

File diff suppressed because it is too large Load Diff

1596
topo2_TIN.log Normal file

File diff suppressed because it is too large Load Diff

6312
topo2_TIN.msh Normal file

File diff suppressed because it is too large Load Diff

View File

@ -2086,10 +2086,10 @@
2085 1.4206 2085 1.4206
2086 1.1363 2086 1.1363
2087 1.136 2087 1.136
2088 2.002 2088 1.4285
2089 1.136 2089 3.5135
2090 1.4285 2090 1.136
2091 3.5135 2091 2.002
2092 1.1352 2092 1.1352
2093 1.69885 2093 1.69885
2094 1.1346 2094 1.1346

View File

@ -2,7 +2,7 @@ $MeshFormat
2.2 0 8 2.2 0 8
$EndMeshFormat $EndMeshFormat
$Nodes $Nodes
2346 2345
1 0 0 0 1 0 0 0
2 1000 0 16.0985 2 1000 0 16.0985
3 1000 1000 1.00237 3 1000 1000 1.00237
@ -2093,11 +2093,11 @@ $Nodes
2088 350 750 84.5986 2088 350 750 84.5986
2089 330 750 89.6465 2089 330 750 89.6465
2090 240 570 45.0428 2090 240 570 45.0428
2091 700 420 115.744 2091 520 470 168.821
2092 690 420 125.532 2092 510 470 168.277
2093 520 470 168.821 2093 510 460 176.628
2094 510 470 168.277 2094 700 420 115.744
2095 510 460 176.628 2095 690 420 125.532
2096 910 280 26.9883 2096 910 280 26.9883
2097 900 260 26.7625 2097 900 260 26.7625
2098 750 460 65.73990000000001 2098 750 460 65.73990000000001
@ -2348,10 +2348,9 @@ $Nodes
2343 450 950 9.091430000000001 2343 450 950 9.091430000000001
2344 630 540 77.0005 2344 630 540 77.0005
2345 500 450 174.769 2345 500 450 174.769
2346 880 840 11.7802
$EndNodes $EndNodes
$Elements $Elements
4637 4635
1 2 0 131 88 194 1 2 0 131 88 194
2 2 0 198 32 199 2 2 0 198 32 199
3 2 0 18 151 223 3 2 0 18 151 223
@ -5811,28 +5810,28 @@ $Elements
3457 2 0 1553 1399 2090 3457 2 0 1553 1399 2090
3458 2 0 1399 1992 2090 3458 2 0 1399 1992 2090
3459 2 0 1992 962 2090 3459 2 0 1992 962 2090
3460 2 0 564 303 2091 3460 2 0 47 463 2091
3461 2 0 249 916 2092 3461 2 0 463 467 2091
3462 2 0 916 762 2092 3462 2 0 467 884 2091
3463 2 0 303 1796 2092 3463 2 0 884 468 2091
3464 2 0 1796 249 2092 3464 2 0 1867 1869 2092
3465 2 0 2091 303 2092 3465 2 0 1869 546 2092
3466 2 0 762 1112 2092 3466 2 0 468 1867 2092
3467 2 0 1112 2091 2092 3467 2 0 2091 468 2092
3468 2 0 47 463 2093 3468 2 0 464 47 2093
3469 2 0 463 467 2093 3469 2 0 532 464 2093
3470 2 0 467 884 2093 3470 2 0 546 547 2093
3471 2 0 884 468 2093 3471 2 0 2092 546 2093
3472 2 0 1867 1869 2094 3472 2 0 47 2091 2093
3473 2 0 1869 546 2094 3473 2 0 2091 2092 2093
3474 2 0 468 1867 2094 3474 2 0 564 303 2094
3475 2 0 2093 468 2094 3475 2 0 249 916 2095
3476 2 0 464 47 2095 3476 2 0 916 762 2095
3477 2 0 532 464 2095 3477 2 0 303 1796 2095
3478 2 0 546 547 2095 3478 2 0 1796 249 2095
3479 2 0 2094 546 2095 3479 2 0 2094 303 2095
3480 2 0 47 2093 2095 3480 2 0 762 1112 2095
3481 2 0 2093 2094 2095 3481 2 0 1112 2094 2095
3482 2 0 1535 2051 2096 3482 2 0 1535 2051 2096
3483 2 0 399 400 2097 3483 2 0 399 400 2097
3484 2 0 2096 399 2097 3484 2 0 2096 399 2097
@ -5987,10 +5986,10 @@ $Elements
3633 2 0 1511 563 2134 3633 2 0 1511 563 2134
3634 2 0 2133 1511 2134 3634 2 0 2133 1511 2134
3635 2 0 1112 1873 2135 3635 2 0 1112 1873 2135
3636 2 0 2091 1112 2135 3636 2 0 2094 1112 2135
3637 2 0 1873 1111 2135 3637 2 0 1873 1111 2135
3638 2 0 1111 2133 2135 3638 2 0 1111 2133 2135
3639 2 0 564 2091 2135 3639 2 0 564 2094 2135
3640 2 0 2133 2134 2135 3640 2 0 2133 2134 2135
3641 2 0 2134 564 2135 3641 2 0 2134 564 2135
3642 2 0 1208 84 2136 3642 2 0 1208 84 2136
@ -6694,301 +6693,299 @@ $Elements
4340 2 0 414 1044 2289 4340 2 0 414 1044 2289
4341 2 0 1044 1220 2289 4341 2 0 1044 1220 2289
4342 2 0 1220 1218 2289 4342 2 0 1220 1218 2289
4343 2 0 1218 2187 2289 4343 2 0 2063 414 2289
4344 2 0 2187 2064 2289 4344 2 0 2064 2063 2289
4345 2 0 1066 1067 2290 4345 2 0 1218 2187 2289
4346 2 0 1067 2051 2290 4346 2 0 2187 2064 2289
4347 2 0 2084 1066 2290 4347 2 0 1066 1067 2290
4348 2 0 2051 1535 2290 4348 2 0 1067 2051 2290
4349 2 0 1535 2123 2290 4349 2 0 2084 1066 2290
4350 2 0 822 2083 2290 4350 2 0 2051 1535 2290
4351 2 0 2123 822 2290 4351 2 0 1535 2123 2290
4352 2 0 2083 2084 2290 4352 2 0 822 2083 2290
4353 2 0 1714 281 2291 4353 2 0 2123 822 2290
4354 2 0 1158 1917 2291 4354 2 0 2083 2084 2290
4355 2 0 281 2215 2291 4355 2 0 1714 281 2291
4356 2 0 1908 1158 2291 4356 2 0 1158 1917 2291
4357 2 0 1907 1908 2291 4357 2 0 281 2215 2291
4358 2 0 2215 1907 2291 4358 2 0 1908 1158 2291
4359 2 0 386 1663 2292 4359 2 0 1907 1908 2291
4360 2 0 1876 386 2292 4360 2 0 2215 1907 2291
4361 2 0 1877 1876 2292 4361 2 0 386 1663 2292
4362 2 0 387 1657 2292 4362 2 0 1876 386 2292
4363 2 0 1657 1878 2292 4363 2 0 1877 1876 2292
4364 2 0 1663 387 2292 4364 2 0 387 1657 2292
4365 2 0 1878 1877 2292 4365 2 0 1657 1878 2292
4366 2 0 308 1087 2293 4366 2 0 1663 387 2292
4367 2 0 1910 308 2293 4367 2 0 1878 1877 2292
4368 2 0 1087 1088 2293 4368 2 0 308 1087 2293
4369 2 0 1088 1478 2293 4369 2 0 1910 308 2293
4370 2 0 1478 1910 2293 4370 2 0 1087 1088 2293
4371 2 0 147 1179 2294 4371 2 0 1088 1478 2293
4372 2 0 1179 1181 2294 4372 2 0 1478 1910 2293
4373 2 0 1182 587 2294 4373 2 0 147 1179 2294
4374 2 0 587 1217 2294 4374 2 0 1179 1181 2294
4375 2 0 1217 147 2294 4375 2 0 1182 587 2294
4376 2 0 1181 2036 2294 4376 2 0 587 1217 2294
4377 2 0 2036 1182 2294 4377 2 0 1217 147 2294
4378 2 0 1084 1514 2295 4378 2 0 1181 2036 2294
4379 2 0 1916 1084 2295 4379 2 0 2036 1182 2294
4380 2 0 311 1587 2295 4380 2 0 1084 1514 2295
4381 2 0 1587 1916 2295 4381 2 0 1916 1084 2295
4382 2 0 1514 1919 2295 4382 2 0 311 1587 2295
4383 2 0 1919 311 2295 4383 2 0 1587 1916 2295
4384 2 0 1107 1105 2296 4384 2 0 1514 1919 2295
4385 2 0 1105 1278 2296 4385 2 0 1919 311 2295
4386 2 0 1911 1107 2296 4386 2 0 1107 1105 2296
4387 2 0 2296 1278 2297 4387 2 0 1105 1278 2296
4388 2 0 229 1911 2297 4388 2 0 1911 1107 2296
4389 2 0 1911 2296 2297 4389 2 0 2296 1278 2297
4390 2 0 1277 1785 2298 4390 2 0 229 1911 2297
4391 2 0 1785 229 2298 4391 2 0 1911 2296 2297
4392 2 0 1278 1787 2298 4392 2 0 1277 1785 2298
4393 2 0 1787 1277 2298 4393 2 0 1785 229 2298
4394 2 0 229 2297 2298 4394 2 0 1278 1787 2298
4395 2 0 2297 1278 2298 4395 2 0 1787 1277 2298
4396 2 0 82 1427 2299 4396 2 0 229 2297 2298
4397 2 0 1427 1074 2299 4397 2 0 2297 1278 2298
4398 2 0 1074 1997 2299 4398 2 0 82 1427 2299
4399 2 0 1997 1715 2299 4399 2 0 1427 1074 2299
4400 2 0 1715 2285 2299 4400 2 0 1074 1997 2299
4401 2 0 2285 82 2299 4401 2 0 1997 1715 2299
4402 2 0 402 772 2300 4402 2 0 1715 2285 2299
4403 2 0 1982 402 2300 4403 2 0 2285 82 2299
4404 2 0 772 1398 2300 4404 2 0 402 772 2300
4405 2 0 2254 1982 2300 4405 2 0 1982 402 2300
4406 2 0 1398 2082 2300 4406 2 0 772 1398 2300
4407 2 0 2082 2254 2300 4407 2 0 2254 1982 2300
4408 2 0 213 649 2301 4408 2 0 1398 2082 2300
4409 2 0 649 265 2301 4409 2 0 2082 2254 2300
4410 2 0 282 757 2301 4410 2 0 213 649 2301
4411 2 0 757 213 2301 4411 2 0 649 265 2301
4412 2 0 265 1098 2301 4412 2 0 282 757 2301
4413 2 0 1098 184 2301 4413 2 0 757 213 2301
4414 2 0 184 1602 2301 4414 2 0 265 1098 2301
4415 2 0 1602 282 2301 4415 2 0 1098 184 2301
4416 2 0 370 833 2302 4416 2 0 184 1602 2301
4417 2 0 1642 1643 2302 4417 2 0 1602 282 2301
4418 2 0 1643 370 2302 4418 2 0 370 833 2302
4419 2 0 1641 1253 2303 4419 2 0 1642 1643 2302
4420 2 0 1253 1642 2303 4420 2 0 1643 370 2302
4421 2 0 1642 2302 2303 4421 2 0 1641 1253 2303
4422 2 0 833 2266 2303 4422 2 0 1253 1642 2303
4423 2 0 2302 833 2303 4423 2 0 1642 2302 2303
4424 2 0 2266 1641 2303 4424 2 0 833 2266 2303
4425 2 0 232 810 2304 4425 2 0 2302 833 2303
4426 2 0 810 1476 2304 4426 2 0 2266 1641 2303
4427 2 0 175 725 2304 4427 2 0 232 810 2304
4428 2 0 1476 175 2304 4428 2 0 810 1476 2304
4429 2 0 2009 232 2305 4429 2 0 175 725 2304
4430 2 0 232 2304 2305 4430 2 0 1476 175 2304
4431 2 0 725 1702 2305 4431 2 0 2009 232 2305
4432 2 0 2304 725 2305 4432 2 0 232 2304 2305
4433 2 0 1702 2009 2305 4433 2 0 725 1702 2305
4434 2 0 882 1588 2306 4434 2 0 2304 725 2305
4435 2 0 1588 438 2306 4435 2 0 1702 2009 2305
4436 2 0 1606 2156 2306 4436 2 0 882 1588 2306
4437 2 0 2156 882 2306 4437 2 0 1588 438 2306
4438 2 0 438 439 2307 4438 2 0 1606 2156 2306
4439 2 0 2306 438 2307 4439 2 0 2156 882 2306
4440 2 0 1606 2306 2307 4440 2 0 438 439 2307
4441 2 0 130 1617 2308 4441 2 0 2306 438 2307
4442 2 0 1237 789 2308 4442 2 0 1606 2306 2307
4443 2 0 1617 1237 2308 4443 2 0 130 1617 2308
4444 2 0 790 438 2309 4444 2 0 1237 789 2308
4445 2 0 1100 130 2309 4445 2 0 1617 1237 2308
4446 2 0 130 2308 2309 4446 2 0 790 438 2309
4447 2 0 789 790 2309 4447 2 0 1100 130 2309
4448 2 0 2308 789 2309 4448 2 0 130 2308 2309
4449 2 0 311 1919 2310 4449 2 0 789 790 2309
4450 2 0 1919 1100 2310 4450 2 0 2308 789 2309
4451 2 0 1100 2309 2310 4451 2 0 311 1919 2310
4452 2 0 1587 311 2310 4452 2 0 1919 1100 2310
4453 2 0 438 1587 2310 4453 2 0 1100 2309 2310
4454 2 0 2309 438 2310 4454 2 0 1587 311 2310
4455 2 0 1735 9 2311 4455 2 0 438 1587 2310
4456 2 0 1253 1641 2312 4456 2 0 2309 438 2310
4457 2 0 1641 1735 2312 4457 2 0 1735 9 2311
4458 2 0 1735 2311 2312 4458 2 0 1253 1641 2312
4459 2 0 9 908 2313 4459 2 0 1641 1735 2312
4460 2 0 908 2173 2313 4460 2 0 1735 2311 2312
4461 2 0 2173 1822 2313 4461 2 0 9 908 2313
4462 2 0 2311 9 2313 4462 2 0 908 2173 2313
4463 2 0 2312 2311 2313 4463 2 0 2173 1822 2313
4464 2 0 1822 827 2313 4464 2 0 2311 9 2313
4465 2 0 827 2312 2313 4465 2 0 2312 2311 2313
4466 2 0 1254 1253 2314 4466 2 0 1822 827 2313
4467 2 0 1987 1254 2314 4467 2 0 827 2312 2313
4468 2 0 827 2276 2314 4468 2 0 1254 1253 2314
4469 2 0 2276 1987 2314 4469 2 0 1987 1254 2314
4470 2 0 2312 827 2314 4470 2 0 827 2276 2314
4471 2 0 1253 2312 2314 4471 2 0 2276 1987 2314
4472 2 0 136 1078 2315 4472 2 0 2312 827 2314
4473 2 0 2263 136 2315 4473 2 0 1253 2312 2314
4474 2 0 1406 2264 2315 4474 2 0 136 1078 2315
4475 2 0 2264 2263 2315 4475 2 0 2263 136 2315
4476 2 0 1078 2277 2315 4476 2 0 1406 2264 2315
4477 2 0 2277 1406 2315 4477 2 0 2264 2263 2315
4478 2 0 826 922 2316 4478 2 0 1078 2277 2315
4479 2 0 922 155 2316 4479 2 0 2277 1406 2315
4480 2 0 1403 826 2316 4480 2 0 826 922 2316
4481 2 0 1432 1403 2316 4481 2 0 922 155 2316
4482 2 0 155 2272 2316 4482 2 0 1403 826 2316
4483 2 0 2272 1432 2316 4483 2 0 1432 1403 2316
4484 2 0 835 781 2317 4484 2 0 155 2272 2316
4485 2 0 836 964 2317 4485 2 0 2272 1432 2316
4486 2 0 964 835 2317 4486 2 0 835 781 2317
4487 2 0 716 1843 2317 4487 2 0 836 964 2317
4488 2 0 1843 836 2317 4488 2 0 964 835 2317
4489 2 0 781 2193 2317 4489 2 0 716 1843 2317
4490 2 0 2193 716 2317 4490 2 0 1843 836 2317
4491 2 0 369 2053 2318 4491 2 0 781 2193 2317
4492 2 0 2053 615 2318 4492 2 0 2193 716 2317
4493 2 0 2251 369 2318 4493 2 0 369 2053 2318
4494 2 0 615 1575 2318 4494 2 0 2053 615 2318
4495 2 0 1575 2251 2318 4495 2 0 2251 369 2318
4496 2 0 976 993 2319 4496 2 0 615 1575 2318
4497 2 0 993 1978 2319 4497 2 0 1575 2251 2318
4498 2 0 647 976 2319 4498 2 0 976 993 2319
4499 2 0 2063 647 2319 4499 2 0 993 1978 2319
4500 2 0 1978 1372 2319 4500 2 0 647 976 2319
4501 2 0 1372 2063 2319 4501 2 0 2063 647 2319
4502 2 0 1061 738 2320 4502 2 0 1978 1372 2319
4503 2 0 1486 1061 2320 4503 2 0 1372 2063 2319
4504 2 0 1204 37 2320 4504 2 0 1061 738 2320
4505 2 0 2155 1204 2320 4505 2 0 1486 1061 2320
4506 2 0 37 1486 2320 4506 2 0 1204 37 2320
4507 2 0 738 2155 2320 4507 2 0 2155 1204 2320
4508 2 0 1017 14 2321 4508 2 0 37 1486 2320
4509 2 0 1018 1017 2321 4509 2 0 738 2155 2320
4510 2 0 14 1072 2321 4510 2 0 1017 14 2321
4511 2 0 1072 1019 2321 4511 2 0 1018 1017 2321
4512 2 0 1019 1717 2321 4512 2 0 14 1072 2321
4513 2 0 1602 1018 2321 4513 2 0 1072 1019 2321
4514 2 0 1646 1602 2321 4514 2 0 1019 1717 2321
4515 2 0 1717 1646 2321 4515 2 0 1602 1018 2321
4516 2 0 510 1220 2322 4516 2 0 1646 1602 2321
4517 2 0 1307 510 2322 4517 2 0 1717 1646 2321
4518 2 0 1220 799 2322 4518 2 0 510 1220 2322
4519 2 0 799 1307 2322 4519 2 0 1307 510 2322
4520 2 0 863 406 2323 4520 2 0 1220 799 2322
4521 2 0 1449 863 2323 4521 2 0 799 1307 2322
4522 2 0 1292 1449 2323 4522 2 0 863 406 2323
4523 2 0 406 1816 2323 4523 2 0 1449 863 2323
4524 2 0 1816 1292 2323 4524 2 0 1292 1449 2323
4525 2 0 867 507 2324 4525 2 0 406 1816 2323
4526 2 0 1559 867 2324 4526 2 0 1816 1292 2323
4527 2 0 507 2186 2324 4527 2 0 867 507 2324
4528 2 0 2186 1266 2324 4528 2 0 1559 867 2324
4529 2 0 1266 2204 2324 4529 2 0 507 2186 2324
4530 2 0 2204 1559 2324 4530 2 0 2186 1266 2324
4531 2 0 142 8 2325 4531 2 0 1266 2204 2324
4532 2 0 8 408 2325 4532 2 0 2204 1559 2324
4533 2 0 225 227 2325 4533 2 0 142 8 2325
4534 2 0 408 225 2325 4534 2 0 8 408 2325
4535 2 0 227 879 2325 4535 2 0 225 227 2325
4536 2 0 879 1446 2325 4536 2 0 408 225 2325
4537 2 0 1446 142 2325 4537 2 0 227 879 2325
4538 2 0 1605 2175 2326 4538 2 0 879 1446 2325
4539 2 0 2175 1606 2326 4539 2 0 1446 142 2325
4540 2 0 439 1605 2326 4540 2 0 1605 2175 2326
4541 2 0 2307 439 2326 4541 2 0 2175 1606 2326
4542 2 0 1606 2307 2326 4542 2 0 439 1605 2326
4543 2 0 668 1573 2327 4543 2 0 2307 439 2326
4544 2 0 1681 668 2327 4544 2 0 1606 2307 2326
4545 2 0 54 1116 2327 4545 2 0 668 1573 2327
4546 2 0 1772 54 2327 4546 2 0 1681 668 2327
4547 2 0 1116 1681 2327 4547 2 0 54 1116 2327
4548 2 0 1573 1772 2327 4548 2 0 1772 54 2327
4549 2 0 241 146 2328 4549 2 0 1116 1681 2327
4550 2 0 816 241 2328 4550 2 0 1573 1772 2327
4551 2 0 1322 816 2328 4551 2 0 241 146 2328
4552 2 0 146 1396 2328 4552 2 0 816 241 2328
4553 2 0 1396 1227 2328 4553 2 0 1322 816 2328
4554 2 0 1227 1466 2328 4554 2 0 146 1396 2328
4555 2 0 1466 1322 2328 4555 2 0 1396 1227 2328
4556 2 0 51 1588 2329 4556 2 0 1227 1466 2328
4557 2 0 1588 882 2329 4557 2 0 1466 1322 2328
4558 2 0 2022 51 2329 4558 2 0 51 1588 2329
4559 2 0 1708 2022 2329 4559 2 0 1588 882 2329
4560 2 0 2156 1708 2329 4560 2 0 2022 51 2329
4561 2 0 882 2156 2329 4561 2 0 1708 2022 2329
4562 2 0 340 1555 2330 4562 2 0 2156 1708 2329
4563 2 0 1555 1485 2330 4563 2 0 882 2156 2329
4564 2 0 1485 1850 2330 4564 2 0 340 1555 2330
4565 2 0 1850 340 2330 4565 2 0 1555 1485 2330
4566 2 0 1104 1790 2331 4566 2 0 1485 1850 2330
4567 2 0 1790 1789 2331 4567 2 0 1850 340 2330
4568 2 0 1789 2283 2331 4568 2 0 1104 1790 2331
4569 2 0 2285 1715 2331 4569 2 0 1790 1789 2331
4570 2 0 2283 2284 2331 4570 2 0 1789 2283 2331
4571 2 0 2284 2285 2331 4571 2 0 2285 1715 2331
4572 2 0 1715 1714 2332 4572 2 0 2283 2284 2331
4573 2 0 2331 1715 2332 4573 2 0 2284 2285 2331
4574 2 0 1708 1104 2334 4574 2 0 1715 1714 2332
4575 2 0 2022 1708 2334 4575 2 0 2331 1715 2332
4576 2 0 2333 2022 2334 4576 2 0 1708 1104 2334
4577 2 0 1104 2331 2334 4577 2 0 2022 1708 2334
4578 2 0 2331 2332 2334 4578 2 0 2333 2022 2334
4579 2 0 2332 2333 2334 4579 2 0 1104 2331 2334
4580 2 0 1714 2291 2335 4580 2 0 2331 2332 2334
4581 2 0 2291 1917 2335 4581 2 0 2332 2333 2334
4582 2 0 1917 2022 2335 4582 2 0 1714 2291 2335
4583 2 0 2022 2333 2335 4583 2 0 2291 1917 2335
4584 2 0 2332 1714 2335 4584 2 0 1917 2022 2335
4585 2 0 2333 2332 2335 4585 2 0 2022 2333 2335
4586 2 0 1616 749 2336 4586 2 0 2332 1714 2335
4587 2 0 749 1697 2336 4587 2 0 2333 2332 2335
4588 2 0 1697 336 2336 4588 2 0 1616 749 2336
4589 2 0 342 1616 2336 4589 2 0 749 1697 2336
4590 2 0 2253 342 2336 4590 2 0 1697 336 2336
4591 2 0 336 2011 2336 4591 2 0 342 1616 2336
4592 2 0 2011 2253 2336 4592 2 0 2253 342 2336
4593 2 0 441 1735 2337 4593 2 0 336 2011 2336
4594 2 0 2103 441 2337 4594 2 0 2011 2253 2336
4595 2 0 1735 1641 2337 4595 2 0 441 1735 2337
4596 2 0 1641 2266 2338 4596 2 0 2103 441 2337
4597 2 0 2337 1641 2338 4597 2 0 1735 1641 2337
4598 2 0 2101 2103 2338 4598 2 0 1641 2266 2338
4599 2 0 2103 2337 2338 4599 2 0 2337 1641 2338
4600 2 0 2266 2101 2338 4600 2 0 2101 2103 2338
4601 2 0 1175 61 2339 4601 2 0 2103 2337 2338
4602 2 0 1575 1175 2339 4602 2 0 2266 2101 2338
4603 2 0 2251 1575 2339 4603 2 0 1175 61 2339
4604 2 0 61 1930 2339 4604 2 0 1575 1175 2339
4605 2 0 1930 1749 2339 4605 2 0 2251 1575 2339
4606 2 0 1749 2251 2339 4606 2 0 61 1930 2339
4607 2 0 1728 100 2340 4607 2 0 1930 1749 2339
4608 2 0 1866 1728 2340 4608 2 0 1749 2251 2339
4609 2 0 1986 2030 2341 4609 2 0 1728 100 2340
4610 2 0 2030 1866 2341 4610 2 0 1866 1728 2340
4611 2 0 260 1986 2341 4611 2 0 1986 2030 2341
4612 2 0 1866 2340 2341 4612 2 0 2030 1866 2341
4613 2 0 925 519 2342 4613 2 0 260 1986 2341
4614 2 0 1088 925 2342 4614 2 0 1866 2340 2341
4615 2 0 2131 1088 2342 4615 2 0 925 519 2342
4616 2 0 1731 163 2343 4616 2 0 1088 925 2342
4617 2 0 163 2131 2343 4617 2 0 2131 1088 2342
4618 2 0 519 1730 2343 4618 2 0 1731 163 2343
4619 2 0 2342 519 2343 4619 2 0 163 2131 2343
4620 2 0 1730 1731 2343 4620 2 0 519 1730 2343
4621 2 0 2131 2342 2343 4621 2 0 2342 519 2343
4622 2 0 491 903 2344 4622 2 0 1730 1731 2343
4623 2 0 902 304 2344 4623 2 0 2131 2342 2343
4624 2 0 903 902 2344 4624 2 0 491 903 2344
4625 2 0 304 1137 2344 4625 2 0 902 304 2344
4626 2 0 1137 491 2344 4626 2 0 903 902 2344
4627 2 0 547 274 2345 4627 2 0 304 1137 2344
4628 2 0 274 1690 2345 4628 2 0 1137 491 2344
4629 2 0 226 532 2345 4629 2 0 547 274 2345
4630 2 0 651 226 2345 4630 2 0 274 1690 2345
4631 2 0 1690 651 2345 4631 2 0 226 532 2345
4632 2 0 532 2095 2345 4632 2 0 651 226 2345
4633 2 0 2095 547 2345 4633 2 0 1690 651 2345
4634 2 0 2063 414 2346 4634 2 0 532 2093 2345
4635 2 0 414 2289 2346 4635 2 0 2093 547 2345
4636 2 0 2064 2063 2346
4637 2 0 2289 2064 2346
$EndElements $EndElements
$NodeData $NodeData
1 1
@ -6998,7 +6995,7 @@ $NodeData
3 3
0 0
1 1
2346 2345
1 0 1 0
2 16.0985 2 16.0985
3 1.00237 3 1.00237
@ -9089,11 +9086,11 @@ $NodeData
2088 84.5986 2088 84.5986
2089 89.6465 2089 89.6465
2090 45.0428 2090 45.0428
2091 115.744 2091 168.821
2092 125.532 2092 168.277
2093 168.821 2093 176.628
2094 168.277 2094 115.744
2095 176.628 2095 125.532
2096 26.9883 2096 26.9883
2097 26.7625 2097 26.7625
2098 65.73990000000001 2098 65.73990000000001
@ -9344,5 +9341,4 @@ $NodeData
2343 9.091430000000001 2343 9.091430000000001
2344 77.0005 2344 77.0005
2345 174.769 2345 174.769
2346 11.7802
$EndNodeData $EndNodeData