是否有与boundingRect函数相当的函数,其中包含图表的行宽(*),因此每行(无论多么粗)都完全包含在边界矩形内? (boundingRect
函数"忽略"它们的厚度和部分线条保持在边界矩形之外)。
(*)我的问题是宽度用本地单位表示的行。
答案 0 :(得分:1)
不幸的是,现在无法自动执行此操作。在找到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
几乎可以做到这一点,但我不认为它适用于所有情况。