图表 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
几乎可以做到这一点,但我不认为它适用于所有情况。
是否有等效于 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
几乎可以做到这一点,但我不认为它适用于所有情况。