图表boundingRect包括行'宽度

时间:2016-01-20 14:06:26

标签: haskell graphics haskell-diagrams

是否有与boundingRect函数相当的函数,其中包含图表的行宽(*),因此每行(无论多么粗)都完全包含在边界矩形内? (boundingRect函数"忽略"它们的厚度和部分线条保持在边界矩形之外)。

(*)我的问题是宽度用本地单位表示的行。

1 个答案:

答案 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

bounding rectangles

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