容器与组件#
使用局部坐标组织多个对象,并通过组和本地模块复用布局。
组坐标#
组内坐标#
子元素围绕组内已有实例的中心定位,再整体放到页面。
badge = group()back = badge.add(rect(size=(44 mm, 32 mm), border_radius=3 mm, fill="#d8f0ec"), target=badge.top_left)badge.add(ellipse(size=(14 mm, 14 mm), fill="#eaa94a"), anchor=center, target=back.center)page.add(badge, target=page.top_left, offset=(29 mm, 29 mm))
源码:group-local.lay。
复现命令:laymesh validate examples/gallery/containers/group-local.lay;laymesh render examples/gallery/containers/group-local.lay -o group-local.png --dpi 150。
实测:有效:examples/gallery/containers/group-local.lay(120 × 80 mm,2 个顶层实例);PNG 709 × 472 px,150 DPI;警告:无。
嵌套与缩放#
内层组被外层组包含,外层实例统一缩放并旋转。
inner = group()inner.add(ellipse(size=(15 mm, 15 mm), fill="#f2ab47"), target=inner.top_left)outer = group()plate = outer.add(rect(size=(52 mm, 35 mm), fill="#d8f0ec"), target=outer.top_left)outer.add(inner, anchor=center, target=plate.center)page.add(outer,size=(73 mm, 49 mm), target=page.top_left, offset=(21 mm, 25 mm), rotation=-7 deg)
源码:group-nested.lay。
复现命令:laymesh validate examples/gallery/containers/group-nested.lay;laymesh render examples/gallery/containers/group-nested.lay -o group-nested.png --dpi 150。
实测:有效:examples/gallery/containers/group-nested.lay(120 × 80 mm,2 个顶层实例);PNG 709 × 472 px,150 DPI;警告:无。
复用#
同一组放置两次#
同一组以不同尺寸放置两次,不回写组内原始定义。
card = group()base = card.add(rect(size=(38 mm, 28 mm), border_radius=3 mm, fill="#d8f0ec", border_color="#087f8c", border_width=0.5 mm), target=card.top_left)card.add(ellipse(size=(10 mm, 10 mm), fill="#f2ab47"), anchor=center, target=base.center)first = page.add(card, target=page.top_left, offset=(8 mm, 30 mm))page.add(card,size=(52 mm, 38 mm), target=first.top_right, offset=(11 mm, -3 mm))
源码:group-reuse.lay。
复现命令:laymesh validate examples/gallery/containers/group-reuse.lay;laymesh render examples/gallery/containers/group-reuse.lay -o group-reuse.png --dpi 150。
实测:有效:examples/gallery/containers/group-reuse.lay(120 × 80 mm,3 个顶层实例);PNG 709 × 472 px,150 DPI;警告:无。
本地模块组件#
从同目录 .lay 模块导入卡片函数,产生两个独立实例。
import { card } from "./card-component.lay"first = page.add(card("A"), target=page.top_left, offset=(8 mm, 29 mm))page.add(card("B"), target=first.top_right, offset=(13 mm, 0 mm))
复现命令:laymesh validate examples/gallery/containers/module-import.lay;laymesh render examples/gallery/containers/module-import.lay -o module-import.png --dpi 150。
实测:有效:examples/gallery/containers/module-import.lay(120 × 80 mm,3 个顶层实例);PNG 709 × 472 px,150 DPI;警告:无。