diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2024-04-26 16:34:19 +0100 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2024-04-26 16:34:19 +0100 |
commit | 0d0a9b2f56bedc0b9394b2ad9a1199ef2907f8f2 (patch) | |
tree | ff33d20acf1e6a672b217b928d6b0176147207a9 /game | |
parent | Don't return newly created faces from split (diff) | |
download | ilt-0d0a9b2f56bedc0b9394b2ad9a1199ef2907f8f2.tar.bz2 ilt-0d0a9b2f56bedc0b9394b2ad9a1199ef2907f8f2.tar.xz ilt-0d0a9b2f56bedc0b9394b2ad9a1199ef2907f8f2.zip |
Set the face surface type when setting height
Diffstat (limited to 'game')
-rw-r--r-- | game/geoData.cpp | 12 | ||||
-rw-r--r-- | game/geoData.h | 2 |
2 files changed, 12 insertions, 2 deletions
diff --git a/game/geoData.cpp b/game/geoData.cpp index 68a1298..59feac1 100644 --- a/game/geoData.cpp +++ b/game/geoData.cpp @@ -464,7 +464,7 @@ GeoData::split(FaceHandle _fh) } void -GeoData::setHeights(const std::span<const GlobalPosition3D> triangleStrip) +GeoData::setHeights(const std::span<const GlobalPosition3D> triangleStrip, const Surface & newFaceSurface) { static const RelativeDistance MAX_SLOPE = 1.5F; static const RelativeDistance MIN_ARC = 0.01F; @@ -482,6 +482,7 @@ GeoData::setHeights(const std::span<const GlobalPosition3D> triangleStrip) return add_vertex(tsVert); }); // Create new faces + const auto initialFaceCount = static_cast<int>(n_faces()); std::for_each(strip_begin(newVerts), strip_end(newVerts), [this](const auto & newVert) { const auto [a, b, c] = newVert; add_face(a, b, c); @@ -497,6 +498,11 @@ GeoData::setHeights(const std::span<const GlobalPosition3D> triangleStrip) });) { ; } + std::vector<FaceHandle> newFaces; + std::copy_if(FaceIter {*this, FaceHandle {initialFaceCount}, true}, faces_end(), std::back_inserter(newFaces), + [this](FaceHandle fh) { + return !this->status(fh).deleted(); + }); // Extrude corners struct Extrusion { @@ -667,4 +673,8 @@ GeoData::setHeights(const std::span<const GlobalPosition3D> triangleStrip) // Tidy up update_vertex_normals_only(VertexIter {*this, vertex_handle(initialVertexCount), true}); + + std::for_each(newFaces.begin(), newFaces.end(), [&newFaceSurface, this](const auto fh) { + property(surface, fh) = &newFaceSurface; + }); } diff --git a/game/geoData.h b/game/geoData.h index 0c5cc6c..ed1734c 100644 --- a/game/geoData.h +++ b/game/geoData.h @@ -142,7 +142,7 @@ public: [[nodiscard]] HalfedgeHandle findEntry(const GlobalPosition2D from, const GlobalPosition2D to) const; - void setHeights(const std::span<const GlobalPosition3D> triangleStrip); + void setHeights(const std::span<const GlobalPosition3D> triangleStrip, const Surface &); [[nodiscard]] auto getExtents() const |