Module: Ucode::Glyphs::PathBbox
- Defined in:
- lib/ucode/glyphs/path_bbox.rb
Overview
Estimates the axis-aligned bounding box of an SVG ‘<path>` `d` attribute by scanning every numeric coordinate pair in the path data. This is a conservative over-estimate: control points and implicit vertices are included, so the true curve bbox is always contained within the estimate. For grid detection and cell membership tests, the over-estimate is sufficient and avoids the cost of a Bezier solver.
Only absolute coordinates are returned. Relative commands (lowercase ‘m`, `l`, `c`, …) are NOT supported — Code Charts SVGs from every supported renderer (pdftocairo, pdf2svg, dvisvgm, mutool) emit absolute commands. If relative commands appear, parse them via a proper SVG path parser before calling this.
Defined Under Namespace
Classes: Result
Constant Summary collapse
- NUMBER =
/-?\d+(?:\.\d+)?(?:[eE][-+]?\d+)?/.freeze
Class Method Summary collapse
Class Method Details
.estimate(path_d) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/ucode/glyphs/path_bbox.rb', line 40 def estimate(path_d) return Result.new if path_d.nil? || path_d.empty? numbers = path_d.scan(NUMBER).map(&:to_f) return Result.new if numbers.empty? xs = [] ys = [] numbers.each_slice(2) do |x, y| xs << x ys << y end Result.new( min_x: xs.min, min_y: ys.min, max_x: xs.max, max_y: ys.max, ) end |