Jakka30 wrote:
What we noticed is that, if a point exceeds the max_distance in Z direction, but within the max_distance in x and y, it is still removing that point.

By default simplify() use:
- the default simplify strategy, bg::strategy::simplify::douglas_peucker,
- the default point-segment strategy, in cartesian bg::strategy::distance::projected_point,
- the default point-point strategy, in cartesian bg::strategy::distance::pythagoras,

The first strategy is CS-agnostic and the two other strategies are N-dimensional. The projected_point strategy first calculates the coordinates of a point projected into a segment and then calculates the distance between this point and the original point using pythagoras strategy. So a point is removed when a distance between this point and a segment created between currently analysed endpoints in douglas_peucker strategy is lesser than max_distance.

Do you have a example where it works in the z direction too?

Just added: https://github.com/boostorg/geometry/blob/develop/test/algorithms/simplify.cpp#L197
It calls simplify() with the default strategies: https://github.com/boostorg/geometry/blob/develop/test/algorithms/test_simplify.hpp#L87

Could you share a test case when the behavior is not correct?