Flip bounds around world zero on the requested axes — i.e. the bounds
of the geometry as it will actually be drawn after a caller negates
point coordinates per flip.
This exists because computePdfScaleLayout's offsets are derived from
bounds.min, which only lands the drawing on the page if the points
handed to worldPointToPdfMm are drawn in that same, un-negated frame.
A caller that negates X/Y when mapping points (as front/side section
exports do) but derives the layout from the original bounds gets
offsets computed for a frame the geometry was never actually drawn in —
correct only when bounds happens to be symmetric about zero, and
silently off-page for the common case of a model at positive world
coordinates. Always deriving the layout from flipBounds2D(bounds, flip)
keeps the two in sync regardless of where the drawing sits in world space.
Flip
boundsaround world zero on the requested axes — i.e. the bounds of the geometry as it will actually be drawn after a caller negates point coordinates perflip.This exists because
computePdfScaleLayout's offsets are derived frombounds.min, which only lands the drawing on the page if the points handed toworldPointToPdfMmare drawn in that same, un-negated frame. A caller that negates X/Y when mapping points (asfront/sidesection exports do) but derives the layout from the original bounds gets offsets computed for a frame the geometry was never actually drawn in — correct only whenboundshappens to be symmetric about zero, and silently off-page for the common case of a model at positive world coordinates. Always deriving the layout fromflipBounds2D(bounds, flip)keeps the two in sync regardless of where the drawing sits in world space.