X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2F3d%2Ftracktype.cpp;h=12a1bb92a15df585e426e381cc30ab5331877b3f;hb=90790c9a28793d31b9ea38eea2f55652a0e9297b;hp=1a898d4cd5383c21e0104fe8a5bfef7758c45188;hpb=ea06222ad70b8a627b11055677d961aa5f8cf9d1;p=r2c2.git diff --git a/source/3d/tracktype.cpp b/source/3d/tracktype.cpp index 1a898d4..12a1bb9 100644 --- a/source/3d/tracktype.cpp +++ b/source/3d/tracktype.cpp @@ -82,10 +82,12 @@ TrackType3D::TrackType3D(const Catalogue3D &cat3d, const TrackType &tt): const Profile &ballast_profile = cat.get_ballast_profile(); const Point &ballast_min = ballast_profile.get_min_coords(); const Point &ballast_max = ballast_profile.get_max_coords(); + float ballast_h = ballast_max.y-ballast_min.y; const Profile &rail_profile = cat.get_rail_profile(); const Point &rail_min = rail_profile.get_min_coords(); const Point &rail_max = rail_profile.get_max_coords(); + float rail_h = rail_max.y-rail_min.y; float gauge = cat.get_gauge(); @@ -101,12 +103,28 @@ TrackType3D::TrackType3D(const Catalogue3D &cat3d, const TrackType &tt): unsigned index = 0; GL::MeshBuilder bld(rail_mesh); bld.color(0.85f, 0.85f, 0.85f); - float y = ballast_max.y-ballast_min.y-rail_min.y; + float y = ballast_h-rail_min.y; for(vector::const_iterator i=parts.begin(); i!=parts.end(); ++i) build_part(*i, rail_profile, Point(-gauge/2-rail_max.x, y), bld, index); for(vector::const_iterator i=parts.begin(); i!=parts.end(); ++i) build_part(*i, rail_profile, Point(gauge/2-rail_min.x, y), bld, index); } + + unsigned paths = tt.get_paths(); + for(unsigned i=0; paths; ++i, paths>>=1) + { + GL::Mesh *mesh = 0; + if(paths&1) + { + mesh = new GL::Mesh(GL::VERTEX3); + GL::MeshBuilder bld(*mesh); + unsigned index = 0; + for(vector::const_iterator j=parts.begin(); j!=parts.end(); ++j) + if(j->get_path()==i) + build_part(*j, cat.get_path_profile(), Point(0, ballast_h+1.5*rail_h), bld, index); + } + path_meshes.push_back(mesh); + } min_z = max_z = border.front().z; for(vector::iterator i=border.begin(); i!=border.end(); ++i) @@ -138,6 +156,13 @@ void TrackType3D::get_bounds(float angle, Point &minp, Point &maxp) const } } +const GL::Mesh &TrackType3D::get_path_mesh(unsigned p) const +{ + if(p>=path_meshes.size() || !path_meshes[p]) + throw InvalidParameterValue("Invalid path"); + return *path_meshes[p]; +} + void TrackType3D::render(const GL::Tag &tag) const { if(tag==0)