简体   繁体   English

如何在 Roassal 3 中为复合形状添加边界框?

[英]How to add a bounding box to a composite shape in Roassal 3?

I'm trying to draw a bounding box around a group of shapes.我正在尝试围绕一组形状绘制一个边界框。 I get everything in the scene, but I don't know how to make the bounding box and the text get correctly aligned:我得到了场景中的所有内容,但我不知道如何使边界框和文本正确对齐:

结果

    c := RSCanvas new.
    text := RSGroup new.
    foo := RSLabel new text: 'foo'.
    bar := RSLabel new text: 'bar'.
    text add: foo; add: bar.
    RSVerticalLineLayout on: text.
    bound := RSShapeFactory box
        model: self;
        border: (RSBorder new width: 1; color: Color black);
        cornerRadius: 5;
        width: text encompassingRectangle width + 15;
        height: text encompassingRectangle height + 10.
    all := RSComposite new shapes: { bound. text asShape }.
    c add: all.
    c  @ RSCanvasController.
    ^ c

So here is how I did it.所以这就是我的做法。 The missing key point was to put an RSLocation.缺少的关键点是放置一个 RSLocation。

在此处输入图像描述

    c := RSCanvas new.
    text := RSGroup new.
    foo := RSLabel new text: 'foo'.
    bar := RSLabel new text: 'bar'.
    text add: foo; add: bar.
    RSVerticalLineLayout on: text.
    bound := RSShapeFactory box
        model: self;
        border: (RSBorder new width: 1; color: Color black);
        cornerRadius: 5;
        width: text encompassingRectangle width + 15;
        height: text encompassingRectangle height + 10.
    contents := text asShape.
    all := RSComposite new shapes: { bound. contents }.
    RSLocation new center; outer; stick: contents on: bound.
    c add: all.
    c  @ RSCanvasController.
    ^ c

here is another solution这是另一个解决方案

在此处输入图像描述

text := 'Foo
bar'.
label := RSMultilineLabelBuilder new shapeFor: text.
box := RSBox new 
    fromRectangle: label encompassingRectangle;
    cornerRadius: 10;
    noPaint
    withBorder.
box extent: box extent + 15.
all := { box . label} asGroup asShape.

canvas := RSCanvas new.
canvas add: all.
canvas @ RSCanvasController 

Maybe in a future we can add an extension method for strings 'hello world' asRoassalShape .也许将来我们可以为字符串'hello world' asRoassalShape添加一个扩展方法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM