图表 boundingRect 包括线条的宽度

Diagrams boundingRect including the lines' width

是否有等效于 boundingRect 函数的函数,它包括图表的线宽 (*),以便每条线,无论多粗,都完全包含在边界矩形内? (boundingRect 函数 "ignores" 它们的粗细和部分线条位于边界矩形之外)。

(*) 我的问题是关于宽度以本地单位表示的线条。

遗憾的是,目前还没有办法自动执行此操作。最简单的方法是在找到 boundingRect 之前 frame 图表。由于您使用的是本地单位,因此您只需要 frame 图中使用的本地宽度的一半(如果边界矩形也有线,则添加用于边界矩形的线宽的一半)。

这是一个简单的例子:

{-# LANGUAGE GADTs #-}

import Diagrams.Prelude
import Diagrams.Backend.Rasterific.CmdLine

main :: IO ()
main = mainWith $ frame 1 rects

rects :: Diagram B
rects = hsep 1 $ map (dia <>) [br1, br2, br3]
  where
    br1 = boundingRect dia # lwL 0.2 # lc red
    br2 = boundingRect (frame 0.1 dia) # fc dodgerblue # lw none
    br3 = boundingRect (frame 0.2 dia) # lwL 0.2 # lc red

dia :: Diagram B
dia = circle 3 # fc orange # lwL 0.2

一个更通用的解决方案是使用 Diagram 中的局部线宽绘制每条路径的偏移曲线,并找到它的边界框。 Diagrams.TwoD.Offset 几乎可以做到这一点,但我不认为它适用于所有情况。