屋顶装上玻璃采光亭:第七轮自动建房


继续发送 continue improve it。模型增加屋脊采光亭和实际连到阁楼的开口,并修复拆除部件时的恢复错误。这里比较第六轮与第七轮,解释测试和未解决的问题,也能真正运行 Python 生成新旧建筑。

第七轮 · 同一会话续跑 · 第一轮 · 第二轮 · 第三轮 · 第四轮 · 第五轮 · 第六轮 · 自己生成 · 看外观和内部

328 / 328最终自动测试通过
225 / 236实际试建成功,另 11 次拒绝
55 / 5656 个指定房屋输入中的主结构数
42最终外观与内部渲染图

01 · 屋顶上多了采光亭,下面真的开了井

这是一套用 Python 自动搭 Minecraft 建筑的工具,叫 Hearth。我们希望用户用短代码安排房间和部件,由共用的库负责摆方块、检查能不能拼接,并记住“这块玻璃属于哪扇窗、哪栋房子”。目标是能不断扩充的建筑积木库,不是固定房型的选择菜单。

第七轮继续原来的会话,新增消息只有 continue improve it。 这轮主要给屋脊加了一种玻璃采光亭:像一间架在屋顶上的小玻璃房,下面留出开口,连到已有家具的阁楼。它有真正的墙、窗、支撑和开口,不是把一个装饰模型贴到屋顶上。

对最初的架构目标来说,更重要的是安装接口:小部件告诉房子“我有多大、需要哪里支撑、会占哪些位置”,屋顶据此判断能否安装,只授权它改动局部屋面。选择一块玻璃,仍能自动追到窗、墙板、采光亭、屋顶和整栋房屋。

本轮还修了一个底层拆除错误:一个部件先挖掉屋顶、再让子部件填进墙和窗,整体拆掉后,原屋顶曾经不能完整恢复。这个问题不是高层用户代码写错,也不是严重到必须重做架构;原有记录里已经有恢复所需的信息,是拆除程序漏处理了一种顺序。

数字 数的是什么 不能据此推出什么
328 项测试全部通过 原 312 项原文保留,新增 16 项;报告另外独立重跑 不等于所有随机建筑都合法
220/220 正常输入建成 180 个旧输入 + 40 个新住宅/地形输入 不等于任意高层脚本都能运行
困难输入 5/16 建成 11 个输入的地面高差超过现有上限 不是说所有方法都不可能在那些场地建房
236 次最终试建,225 次成功 正常输入与困难输入合计 不能与 328 项测试混成一个成功率
42 张最终渲染图 6 个建筑,每个 3 张外观 + 4 张剖面 不是 42 个不同建筑,也不能证明普遍美观

它仍未达到八张 lodge 参考图的精致程度。 采光亭让屋顶多了一层形状,但规整房间、厚重木梁、大块空屋面、稀疏室内和简单园林仍然明显。上轮网页发现的三个失败输入,本轮原生复查仍然失败:一个屋顶接合碰到窗板,两个村落的路灯挡住通路。它们不在那 220 个正常试建输入里,下文单独列出,不能被“328 项测试通过”掩盖。

02 · 第六轮到第七轮,哪些变了,哪些没变

第六轮主要增加削斜屋顶、壁炉与餐桌。本轮是在这些成果上增加可安装、可拆卸、可查询的屋脊采光亭,并修复它暴露出的底层问题。

方面 第六轮 第七轮 具体意义
库版本 1.6 1.7 同一会话继续开发
屋脊部件 原来的屋顶、老虎窗与装饰 新增玻璃采光亭,开口连到阁楼 屋顶变化不只依赖配色
高层用法 选择坡面、端部和内饰规则 还可指定 ridge_component、是否必须安装、最短屋脊长度 用户不用手工挖屋顶或写方块归属
安装时交流的信息 原有部件接口 新增安装尺寸、实体占位、支撑点、可改动局部区域 屋顶看公开描述决定能否安装,不靠识别子部件的具体类
整栋预留高度 原屋顶约定 部件可公开声明额外高度,屋顶/阁楼/房子逐层预留 不是建完后再扩大边界来迁就越界部件
采光亭的窗户 无该部件 玻璃属于真正的窗,窗属于墙板,墙板属于采光亭 查询与保存后的身份关系完整
与老虎窗并存 未涉及新采光亭 将主体和高处顶盖分别算占位,再检查老虎窗实际高度 低处放得下的老虎窗不必被一刀切取消
检查天光通道 原来的房间灯光检查 新增空气/玻璃连通路径检查;房间仍另需实际灯光 只检查离散通道,不是完整游戏天空光模拟
拆除嵌套替换 挖掉后被后代填回的原方块可能漏恢复 修复同一次拆除刚清空的格子,按已有历史恢复 不放宽覆盖权限,也不擦掉失效标记
自动测试 312 项 328 项,新增 16 项 12 个旧测试文件字节不变
正常 / 困难试建 180/180;5/16 220/220;5/16 增加 40 个新输入,困难接地能力没提升
指定房屋输入中的主要结构 48 个输入中 47 种 56 个输入中 55 种 多了 8 个新住宅输入,不是相同样本上的增长
同样的 48 个旧房屋输入 47 种 47 种 种类计数不变,但部分房屋的具体形状变了
同样的 180 个旧正常输入 55 种 56 种 可直接对照的有限样本,统计方法没变
全部正常输入的主要结构 / 接地记录 55 / 152 65 / 187 新输入更多,不能当作整个设计空间的总量
完整保存文件对 38 对 47 对 包括一个用于补充看图的既有输入,不增加试建分母
最终渲染 30 张,5 个建筑 42 张,6 个建筑 增加采光井剖面;额外一个建筑展示较矮较宽的形状
默认五栋村落 128,174 方块 / 1,034 部件 128,194 / 1,037 合适的长屋顶也用到新部件
编号 1 的三栋村落 91,330 / 679 91,330 / 679 新增功能并不意味着每个旧输入都改变
会话与收尾时间 54.00 分钟 63.46 分钟 工作内容不同,不是生成器性能对照
请求 / 输出 Token 82 / 79,474 72 / 89,278 输出包含推理;不能仅凭用量判断质量

统计第六轮第七轮
Python 文件数98107
Python 行数(含空行注释)971710534
原文件变化基线10 修改 / 0 删除
新增 Python 文件—9

同一编号的具体变化也有例子:旧大厅 hall-0 从 14,400 方块、318 个部件变成 14,517 方块、327 个部件,主结构内容也变了;home-0、high-1 和 hearth-home-0 的这些统计没有变化。“不同结构的数量没变”不等于“每栋建筑都没变”。

报告把上一轮 196 条记录与本轮对应输入逐项对齐,核对建筑和地形编号,没有拿不同编号硬比。相同输入对比数据。

本轮确实修改了底层 hearth/kernel/scene.py。 改的是拆除时恢复旧方块的实现。新增天光通道检查在 hearth/validators.py;保存格式、随机数服务、地形模块、方块状态解析和其他内核文件没有改。不能把“接口保持不变”写成“内核一行没动”。

逐文件变化
变化文件
新增examples/building_lantern.py
新增examples/lantern_house.py
新增examples/lantern_regression.py
新增examples/lantern_report.py
新增examples/portable_lantern.py
新增examples/ridge_inspection.py
新增hearth/components/rooflantern.py
新增test/test_nested_restoration.py
新增test/test_roof_lantern.py
修改examples/building_views.py
修改hearth/__init__.py
修改hearth/components/__init__.py
修改hearth/components/building.py
修改hearth/components/lofts.py
修改hearth/components/roofcraft.py
修改hearth/kernel/scene.py
修改hearth/lodges.py
修改hearth/programs.py
修改hearth/validators.py

本轮公开接口 · 原始拆除错误说明 · 源码摘要对比。

03 · 自己动手生成建筑

不需要会写代码:先点“运行并生成”,再用鼠标拖动建筑、滚轮缩放。点“换随机编号生成”看同类建筑的新样子;点“换一种场景生成”轮流尝试不同例子,房屋布局等设置也会跟着变化。生成后可以点“打开屋顶看里面”,或点一块玻璃查看它属于哪扇窗、哪栋房子。

这是真正在你的浏览器中运行 Python 建筑程序,每次点击不会再去询问模型。第一次需要下载运行工具,可能要稍等;多栋房屋通常比单栋慢,可以随时停止。程序会检查建筑,并把保存的文件重新打开,核对内容是否一致。

下载本轮默认五栋房屋

已知问题:村落编号 314 和 348 会因路灯挡路而拒绝;宽门廊住宅编号 341、地形 0 会有屋顶与窗板冲突。上一轮已发现这些问题,本轮复查仍未解决;这次还发现水边住宅编号 381、地形 0 也有屋顶与窗板冲突。页面保留报错,不自动换编号。详情见网页实测记录。

默认展示本轮新增加的屋脊采光亭住宅。要调整采光亭,选“自己调整采光亭长度或关闭它”。要手动改变房间、屋顶等设置,请选择“自己调整房间、屋顶和阳台”,再点“使用这个例子”;其他例子只读取菜单下方写明的设置。控件值不会自动改写任意 Python 代码。家具规则会在设定长度内尝试能放下的餐桌;不是强行塞入指定尺寸。

这些控件对应哪些 Python 变量(写代码时查看)

相同版本、代码、参数和随机编号会重复生成同一结果。换编号也可能撞上同一种设计;如果把所有选择都写死,换编号不一定改变建筑。“换随机编号”保留当前代码;“换一种场景”会载入公开的轮换程序,连续 22 次尝试采光亭住宅及独立地形、新壁炉住宅、独立地形适配、阁楼住宅、宽门廊住宅、阁楼水边适配、U 形庭院住宅、三种原房屋、水边适配、村落、中庭、原来的住宅/工坊/公共用房,以及第二轮的建筑群、大厅、桥和围墙。每次也随机结构参数,不只是换颜色。这覆盖列出的现有例子,不代表穷尽整套库的可能组合。遇到拒绝会显示原因,不会偷偷重抽。

轮换程序的完整 Python 代码
# Report examples, not an exhaustive library distribution. programs = ('roof_home', 'roof_held', 'roof_pair', 'court', 'home', 'hall', 'high', 'adaptation', 'settlement', 'courtyard', 'commons', 'atelier', 'dwelling', 'campus', 'perimeter', 'sample_hall', 'sample_connector', 'sample_boundary', 'hearth_home', 'hearth_pair', 'lantern_home', 'lantern_pair') program = programs[SEED % len(programs)] if program == 'roof_home': from examples.roof_home import roof_home from hearth.lodges import lodge_scene scene = lodge_scene(roof_home(SEED), seed=SEED, environment_seed=int(ENV_SEED)) elif program == 'roof_held': from hearth import Scene, Box from hearth.environment import Terrain, gradient, wave, radial from hearth.randomness import Scope from hearth.components import adapted # Same frozen-field recipe used by the experiment; no sample substitution. es = int(ENV_SEED) rng = Scope(es).stream('roof-space-environment') domain = Box((-10, -4, -20), (52, 72, 52)) field = (gradient(rng.choice((-.025, 0, .025)), rng.choice((-.02, 0, .02)), 4) + wave(.3, .13, .09, rng.random() * 6)).blend(gradient(-.02, .02, 4) + radial(18, 18, 36, .5), radial(8, 10, 44, .6)).clamp(2, 6) water = rng.choice((None, 4, 5)) environment = Scene(es, domain=domain) environment.place('land', Terrain(domain, field, water)) environment.finalize() scene = environment.fork(seed=SEED) from examples.building_space import held_out_design scene.compose_choice(adapted("building", held_out_design(SEED), "/land")) scene.finalize() elif program == 'roof_pair': from hearth import Scene, Box from hearth.environment import Terrain, gradient, wave, radial from hearth.randomness import Scope from hearth.components import adapted # Same frozen-field recipe used by the experiment; no sample substitution. es = int(ENV_SEED) rng = Scope(es).stream('roof-space-environment') domain = Box((-10, -4, -20), (52, 72, 52)) field = (gradient(rng.choice((-.025, 0, .025)), rng.choice((-.02, 0, .02)), 4) + wave(.3, .13, .09, rng.random() * 6)).blend(gradient(-.02, .02, 4) + radial(18, 18, 36, .5), radial(8, 10, 44, .6)).clamp(2, 6) water = rng.choice((None, 4, 5)) environment = Scene(es, domain=domain) environment.place('land', Terrain(domain, field, water)) environment.finalize() scene = environment.fork(seed=SEED) from examples.roof_home import roof_home scene.compose_choice(adapted("building", roof_home(SEED), "/land")) scene.finalize() elif program == 'court': from examples.garden_house import garden_house from hearth.lodges import lodge_scene scene = lodge_scene(garden_house(SEED), seed=SEED, environment_seed=int(ENV_SEED)) elif program == 'home': from hearth.lodges import hillside_home, lodge_scene scene = lodge_scene(hillside_home(SEED), seed=SEED, environment_seed=int(ENV_SEED)) elif program == 'hall': from hearth.lodges import gabled_hall, lodge_scene scene = lodge_scene(gabled_hall(SEED), seed=SEED, environment_seed=int(ENV_SEED)) elif program == 'high': from hearth.lodges import high_house, lodge_scene scene = lodge_scene(high_house(SEED), seed=SEED, environment_seed=int(ENV_SEED)) elif program == 'adaptation': from hearth import Scene from hearth.environment import Terrain from hearth.assessment import adaptation_expression from hearth.components.building import adapted from hearth.lodges import hillside_home from hearth.quality_assessment import DOMAIN field, water = adaptation_expression(int(ENV_SEED)) environment = Scene(int(ENV_SEED), domain=DOMAIN) environment.place('land', Terrain(DOMAIN, field, water)) environment.finalize() scene = environment.fork(seed=SEED) scene.compose_choice(adapted('building', hillside_home(SEED), '/land')) scene.finalize() elif program == 'settlement': from hearth.programs import settlement_scene # Same public entry point used by the delivered generate.py. # This program consumes SEED and COUNT. Other controls are unused. scene = settlement_scene(seed=SEED, count=COUNT) elif program == 'courtyard': from examples.courtyard import build scene = build(SEED) elif program == 'commons': from hearth.programs import building_scene, commons scene = building_scene(commons(SEED), seed=SEED) elif program == 'atelier': from hearth.programs import building_scene, atelier scene = building_scene(atelier(SEED), seed=SEED) elif program == 'dwelling': from hearth.programs import building_scene, dwelling scene = building_scene(dwelling(SEED), seed=SEED) elif program == 'campus': from hearth_extensions.programs import extension_scene, branching_campus scene = extension_scene(branching_campus, seed=SEED, environment_seed=int(ENV_SEED)) elif program == 'perimeter': from hearth_extensions.programs import extension_scene, perimeter_cluster scene = extension_scene(perimeter_cluster, seed=SEED, environment_seed=int(ENV_SEED)) elif program == 'sample_hall': from hearth_extensions.assessment import hall_scene scene = hall_scene(SEED, int(ENV_SEED)) elif program == 'sample_connector': from hearth_extensions.assessment import freeze_probe, connector_scene scene = connector_scene(freeze_probe(int(ENV_SEED)), SEED) elif program == 'sample_boundary': from hearth import Scene from hearth.environment import Terrain from hearth_extensions.assessment import PROBE_DOMAIN, probe_expression, boundary_scene field, _ = probe_expression(int(ENV_SEED)) environment = Scene(int(ENV_SEED), domain=PROBE_DOMAIN) environment.place('land', Terrain(PROBE_DOMAIN, field)) environment.finalize() scene = boundary_scene(environment, SEED) elif program == 'hearth_home': from examples.hearth_house import hearth_house from hearth.lodges import lodge_scene scene = lodge_scene(hearth_house(SEED), seed=SEED, environment_seed=int(ENV_SEED)) elif program == 'hearth_pair': from hearth import Scene, Box from hearth.environment import Terrain, gradient, wave, radial from hearth.randomness import Scope from hearth.components import adapted from examples.hearth_house import hearth_house es = int(ENV_SEED) rng = Scope(es).stream('craft-environment') domain = Box((-10, -4, -20), (58, 72, 58)) field = (gradient(rng.choice((-.025, 0, .025)), rng.choice((-.02, .02)), 4) + wave(.35, .11, .08, rng.random() * 6)).blend(gradient(.02, -.01, 4) + radial(20, 18, 35, .6), radial(11, 12, 42, .7)).clamp(2, 6) water = rng.choice((None, 4, 5)) environment = Scene(es, domain=domain) environment.place('land', Terrain(domain, field, water)) environment.finalize() scene = environment.fork(seed=SEED) scene.compose_choice(adapted('building', hearth_house(SEED), '/land')) scene.finalize() elif program == 'lantern_home': from examples.lantern_house import lantern_house from hearth.lodges import lodge_scene scene = lodge_scene(lantern_house(SEED), seed=SEED, environment_seed=int(ENV_SEED)) elif program == 'lantern_pair': from hearth import Scene, Box from hearth.environment import Terrain, gradient, wave, radial from hearth.randomness import Scope from hearth.components import adapted from examples.lantern_house import lantern_house es = int(ENV_SEED) rng = Scope(es).stream('lantern-environment') domain = Box((-10, -4, -20), (58, 80, 58)) field = gradient(rng.choice((-.025, 0, .025)), rng.choice((-.02, 0, .02)), 4) + wave(rng.choice((0, .35)), .11, .08, rng.random() * 6) field = field.blend(gradient(.01, -.01, 4) + radial(20, 16, 35, .6), radial(9, 13, 42, .7)) # The final eight inputs in the original 16-field recipe add this composition. if es % 100 >= 8: field = field.transformed(dx=3, dz=-2, scale=1.2) + wave(.2, .07, .13, rng.random() * 6) * radial(18, 10, 50, 1) field = field.clamp(2, 6) water = rng.choice((None, 4, 5)) environment = Scene(es, domain=domain) environment.place('land', Terrain(domain, field, water)) environment.finalize() scene = environment.fork(seed=SEED) scene.compose_choice(adapted('building', lantern_house(SEED), '/land')) scene.finalize() print('Explored program: ' + program)

准备就绪。点击运行,开始真正的 Python 生成。

本轮采光亭住宅预览

这是之前生成的示意图。运行后会换成你这一次生成的建筑。

切开查看会暂时隐藏切线外侧的方块,下载的仍是完整建筑。单击方块查看归属,按住鼠标拖动则旋转。选中整扇窗或整栋房子时,也会包含它里面的小部件和共用支撑。

这块方块属于哪里?

下面会按“小部件 → 大部件”的顺序显示归属。点其中一个名称,再勾选“只看选中的部件”,可以单独查看它。X、Y、Z 是方块位置,其中 Y 表示高度。

方块归属的详细数据(开发者用)
尚未生成
建造结果的详细数据(开发者用)
尚未生成
运行日志和错误详情
尚未运行

下载包里有 Minecraft 建筑文件、记录“方块属于哪个部件”的文件,以及重新生成它所需的 Python 代码和设置。请一起保留:只有建筑文件,无法查询这份部件关系记录。

05 · 这个部件是怎么一层层拼进去的

可以把这次的接口理解成:采光亭先报尺寸和要求,屋顶检查后给它一个有限的安装位置,它再用普通墙和窗完成自己。 它没有获得任意改造整栋房子的权限。

层级 负责什么 本轮例子
高层用户代码 决定房间布局与要哪种屋顶部件 lantern_house 随编号选择前排 2 或 3 间房、后部房间与楼层、坡面、端部和采光亭长度
建筑/屋顶组合 预留整栋空间,决定部件能否安装 读取 mounting() 的公开描述,按实际屋面检查安装位置与支撑,再给局部修改权限
采光亭与墙窗 生成自身形状,并提出验证要求 RidgeLantern 内部拼 GlazedPanel 和独立窗户;采光井提供查询接口
共用底层 执行写入、维护归属、失败撤回、拆除与恢复 继续使用原有事务和历史记录;本轮修复一种嵌套拆除顺序

ridge_required=True 表示“必须装上,装不了就报错”;可选模式则能省略,但必须记录原因。ridge_min_run 表示允许安装的最短屋顶段。原村落和三种 lodge 示例设置为 17 格,短山墙不因此硬塞一个小亭子。

主体宽度固定为 5 格,长度可选 5、7、9,顶盖再外伸一格。一段屋顶最多安装一个。这是一个有边界的安装接口,不是任意形状、任意数量的通用屋顶附件系统。 更宽或形状不同的附件仍需要另一个合适的公开描述。

采光井的 daylight 接口只表示采光通道,不是人能走进去的入口,也不给其他部件写入权限。沿空气和玻璃找到通路,不等于 Minecraft 引擎计算出了某个天空光照值。普通房间的实际光源要求仍然独立检查。

网页“自己调整采光亭长度或关闭它”实际执行的代码如下。它复用同一份房间计划,只替换屋顶上的部件;不会在高层手工挖洞、补块或填归属。

from dataclasses import replace from examples.lantern_house import lantern_house from hearth.components import RidgeLantern from hearth.lodges import lodge_scene plan = lantern_house(SEED) roof = replace(plan.roof_design, ridge_component=RidgeLantern(LANTERN_LENGTH) if WITH_LANTERN else None) scene = lodge_scene(replace(plan, roof_design=roof), seed=SEED, environment_seed=int(ENV_SEED))

06 · 328 项测试测什么,错误在哪一层

最终自动测试 328 项通过,没有失败。 原来的 312 项全部保留,12 个旧测试文件没有被修改。两个新文件共有 10 个测试函数,展开尺寸和旋转参数后是 16 项。

新增检查 项数 用大白话解释 所在层级
屋顶尺寸、方向与实际开口 4 不同宽度、长度、轴向和削斜端部下,仍有围合、可达阁楼、真实玻璃和空的采光井 屋顶与附件组合
四个旋转方向与保存 4 窗、墙板、采光亭、房子的归属链正确;保存读回后方块集合与关系一致 部件组合 + 底层查询/保存
故意破坏支撑、顶盖、玻璃与通道 1 拆支撑、打破屋顶或玻璃、拿石头堵采光通道,应分别被检查出来 具体部件与验证函数
错误方向或不兼容安装尺寸 1 不对齐或尺寸不符必须拒绝,所有索引恢复到尝试前 安装接口与事务
必装、可选和越权修改 1 必须装却装不下要失败;可选省略要记原因;不能借安装权限挖别处屋顶 屋顶组合与权限边界
拆除后恢复、再替换重建 1 拆掉整个采光亭后,旧屋顶回来,窗的旧归属消失;重建仍合法 底层拆除与重新生成
随机数分支独立 1 一个失败尝试和无关分支不能扰乱原安装结果 随机数与部件组合
结构统计能看见新部件 1 保持房间不变,仅去掉采光亭,主要屋顶结构统计应改变 测量方法与组合
低处老虎窗和高处亭盖并存 1 能放下的四个老虎窗不应因为一个过大的笼统边界而消失 屋顶部件的空间判断
最小的挖空/填回/拆除例子 1 一块石头被父部件挖空、子部件填玻璃;整体拆除后石头和原归属都要回来,保存读回后也一样 底层恢复记录
合计 16 加上旧 312 项,最终 328 项 不是 16 栋新建筑

这些新增测试主要针对库的接口、部件和底层行为,没有专门逐个参数化调用 lantern_house(0..7) 的新单元测试。高层用户程序的实际运行由后面 40 个新完整试建输入覆盖,网页还会执行实际客户端代码。因此既不能说“全是用户代码测试”,也不能说“用户代码完全没测”。

测试中的“故意破坏后报错”是预期结果,拦住才算测试通过。它与真实开发 bug、最后保留的困难地形拒绝、网页随机探索失败,是不同的事。

采光亭测试源码 · 最小拆除测试源码 · 模型自测日志 · 报告独立重跑。

展开报告独立测试输出
........................................................................ [ 21%] ........................................................................ [ 43%] ........................................................................ [ 65%] ........................................................................ [ 87%] ........................................ [100%] 328 passed in 413.59s (0:06:53)

开发时到底什么没通过

现象 原因与层级 最终处理
第一次新测试有 2 项失败,其中一项拆采光亭后少了两块原屋顶 父部件先挖空、后代再填入,拆后代时已经清空该格,但旧循环误以为不能恢复父部件保存的原屋顶。底层拆除实现错误 使用同次拆除刚清空的坐标与原有替换历史恢复;不侵占仍由外部部件占有的格子
同一轮的另一项失败 新测试调用了不存在的 View.cells,属于测试代码自身错误 改用正确查询接口;没有修改旧测试
能放下的老虎窗被排除了 一个笼统的大包围盒把高处顶盖下方也占满,属于屋顶部件的空间描述问题 主体和高处顶盖分开描述,按老虎窗实际高度判断
首版采光亭底部厚重、长玻璃面未分段 属于部件外观设计,不是测试报警 降低窗台,把长墙分成独立窗格,保留支撑与验证
困难地形最终 11 次拒绝 地面高差 6–19 格,超出不变的 5 格上限 保留输入与两个候选的诊断;不换编号,不扩大限制

拆除修复没有引入新的所有权或保存格式。原历史记录本来就保存了被替换的屋顶,只是恢复顺序没用好这些记录。拆除导致屋顶依赖失效时,仍需要把宿主屋顶与受影响附件一起重新生成;程序没有为了让测试通过而悄悄清除失效状态。

首次新测试日志记录为 12 通过、2 失败;后面又增加测试,最终新增集合变为 16 项。因此不能把“第一次总共 14 项”和“最终新增 16 项”看成丢了记录。第一次测试 · 拆除错误解释。

07 · 试建范围、多样性与没有改善的地方

最终总数只用 building-lantern/release 的六组记录。开发阶段第一轮评估也留着,但不能再加一次。每个输入的地形先固定,再放建筑;没有为了一个房子重画地形。

试建内容 建成 / 输入 可用接地方案 / 尝试 说明
原三种房屋与独立地形 88/88 132/176 24 个房屋编号 + 64 个地形配对
阁楼与宽门廊回归 32/32 45/64 重测已有组合
庭院住宅回归 20/20 35/40 保留已有园林和房屋组合
以前额外的地形组合 16/16 16/32 已知输入,不冒充新的盲测
削斜屋顶与家具回归 24/24 38/48 第六轮新增内容
新采光住宅与地形 40/40 57/80 8 个客户端编号 + 16 地形 × 2 建筑编号
正常范围合计 220/220 323/440 117 个方案被拒绝,不等于 117 个输入失败
困难场地 5/16 6/32 11 个输入高差超限
全部 225/236 329/472 没有额外重抽输入

每个输入比较两个有限的接地方案,只要有一个符合要求就能建成。这里的方案数与采光亭的局部安装位置检查不是同一个计数,不能加在一起。

最终输入的建成与拒绝数量。困难场地仍是 5 成功、11 拒绝。
七个指定房屋程序各运行 8 次,共观察到 55 种主要结构。不是整个库的种类总数。

结构统计仍排除名称、整体平移旋转、配色、植物、家具小扰动和接地细节,包含实际房间关系与屋顶后代部件的几何。算法本轮没改。同样的旧 48 个房屋输入都是 47 种;增加新程序的 8 个输入之后,才是 55/56。全部 220 个正常输入观察到 65 种主要结构、187 种独立接地记录,不能据此估算天文数量的完整设计空间。

40 个新输入都实际造出了采光亭,观察到长度 5、7、9,部件及其子部件占 146–222 格。这些场景共包含 101 段屋顶,40 次安装成功,另 61 段因达不到声明的 17 格最短屋脊而省略;不是 61 个房子失败了。还有 116 个局部位置因端部框架被筛掉,这同样不是重抽种子次数。

新地形不是 16 种写死的环境类别,而是用坡面、波形、径向场、混合、变换和遮罩组合出的 16 个固定测试输入。后 8 个地形的额外变换组合预留到评估阶段,形成 16 个配对输入。它们都是有限测试样本,库的地形表达式本身并不只支持这些编号。

正常输入的填补量每次为 0–257 格,挖土量仍全部为 0;地基承托层另有 0–3 格填补记录。没有新增接地策略,也没有证明广泛开挖能力。正常输入记录耗时合计 806.488 秒,困难输入 10.004 秒;包含验收及选中样本的保存核对,不含所有前期准备、渲染和 pytest,不能当作整轮墙钟时间或无干扰性能基准。

预先写下的采样规则 · 原始汇总。

236 条最终试建记录,可搜索和排序
试建编号建造结果建筑编号地形编号方块数部件数原始记录
home-0建造成功0013600310
查看数据
{ "label": "home-0", "inputs": { "client": "home", "structure_seed": 0, "environment_seed": 0 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "3f3c12036c060cab739a7d19d3a0a04ce42a15abadbe6d6ae673ab04585d3ad3", "principal_signature": "424f119d69bc0c7fd7c780d05d3cac5c90a6c4453f2f51e47c5f22275a57769c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 24, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "4eca5ec0b51e81dc4b137b4e23a8ae934bbb30c5b7a8e7320bc13374dbd7f3f2" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "3d87f3596d36ab29f0a3d5dae1efa1c45f583f4100c478decb28c7f7dbbb2192" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 95, "excavation": 0, "sitework_occupied_cells": 140, "replaced_cells": 33, "new_sitework_cells": 107, "strategies": [ "stepped", "stepped", "stepped", "stepped", "stepped" ], "signature": "a1068cb5e91bf85f05b3e5a840c10beb409f4669235a254473c49c4f7cd6f916", "bearing_fill": 1 }, "blocks": 13600, "nodes": 310, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.85 ], [ 1, 1.17 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/core/home-0.litematic", "audit": { "queries": 281, "inventories": 54, "nodes": 310, "digest": "3f3c12036c060cab739a7d19d3a0a04ce42a15abadbe6d6ae673ab04585d3ad3" }, "seconds": 5.9811 }
home-1建造成功1114601286
查看数据
{ "label": "home-1", "inputs": { "client": "home", "structure_seed": 1, "environment_seed": 1 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "2b9d024497f0da7feec8aa6f74fab89d15ff6a02e0fbc1245b4929b62cebbcc7", "principal_signature": "e6ec51fd89f0d909ff361c8ea2f25ef3e8b495630a5a1a142113c26aae92fb67", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "69b463e96d153e9c5b98d5601ff80cf76b85fea4f55ecb82c1ea5be2fd54cf8d" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "463d013ac6098294317ae97a95bf3a10ba3fdd2f26ebe73f2f5dd2680567dad3" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 83, "excavation": 0, "sitework_occupied_cells": 119, "replaced_cells": 30, "new_sitework_cells": 89, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "1cc7153d51c75b87ff27cf9ab1a0fee847fd057606bbf4c4d81a8dd018e6fb68", "bearing_fill": 3 }, "blocks": 14601, "nodes": 286, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.01 ], [ 0, 1.1 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/core/home-1.litematic", "audit": { "queries": 253, "inventories": 54, "nodes": 286, "digest": "2b9d024497f0da7feec8aa6f74fab89d15ff6a02e0fbc1245b4929b62cebbcc7" }, "seconds": 5.4201 }
home-2建造成功2214357280
查看数据
{ "label": "home-2", "inputs": { "client": "home", "structure_seed": 2, "environment_seed": 2 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "0739fd43c6b71d4a1b7862a9a55f51191ef5d45a82bbfa0a4220dd03586047cb", "principal_signature": "9350c541981121a0784fd9e78e0ea6a96eb702830f8a85133f1e3bafc5a7c6ef", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "69b463e96d153e9c5b98d5601ff80cf76b85fea4f55ecb82c1ea5be2fd54cf8d" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "463d013ac6098294317ae97a95bf3a10ba3fdd2f26ebe73f2f5dd2680567dad3" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 108, "excavation": 0, "sitework_occupied_cells": 147, "replaced_cells": 30, "new_sitework_cells": 117, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "d995de1fe84840233e3ef9f80a05697c7dd7ca84bc7333cb8fafb53b16580792", "bearing_fill": 3 }, "blocks": 14357, "nodes": 280, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.2 ], [ 0, 1.32 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 3.8753 }
home-3建造成功3312408248
查看数据
{ "label": "home-3", "inputs": { "client": "home", "structure_seed": 3, "environment_seed": 3 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "9094e2b7475cc7123db5ccb69390054655ce0ac1448bb1427a7a963cb277a5ac", "principal_signature": "155767c47db4b98ad24e7f45f4e956a076bc428a90d7a65bf9bbec265369b350", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 11 ], { "height": 22, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 1, 1, 2 ] }, "c1d6f13b8c28655d5147a04faf49e1b2c3cc27a2a3fa54229cb41f9219866412" ], [ "roof.profile", [ 11, 7, 0 ], { "axis": "z", "span": 11, "rise": [ 1, 1, 2 ] }, "fab2383b4a2c0116d0b4f8202d29606f1d18d922c64a45681ef3b7d2721add60" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ] ] ], "contact": { "fill": 67, "excavation": 0, "sitework_occupied_cells": 114, "replaced_cells": 30, "new_sitework_cells": 84, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "514b816a5239b2d8f925eebd0ef8689336d8d9bcf4954795c81361ec5dba62db", "bearing_fill": 2 }, "blocks": 12408, "nodes": 248, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 0.64 ], [ 0, 0.78 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.9733 }
home-4建造成功4414767327
查看数据
{ "label": "home-4", "inputs": { "client": "home", "structure_seed": 4, "environment_seed": 4 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "0134f92ae20eef94e2e9a63b0c4b1d1c11087ff91f452c7d9b774a40f0456222", "principal_signature": "6804588ce90d5154f9c1f6f6ecdbe912a2c0583ddf837b99b4b8bb879f53f401", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "eef5dd722fcbb928a75c54b4472aaf1b58734e2135654d8a9a73ef3b9cedc893" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "e086f4de1f0a13561256a87ac7b184ea0d32b4bf0355b4d26b3c46345e1b20d0" ], [ "roof.profile", [ 11, 7, 0 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "ad36cb9fd000fe7e572d6aded697100ad14240994d4bd45f45a44dd891c5f086" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ] ] ], "contact": { "fill": 36, "excavation": 0, "sitework_occupied_cells": 70, "replaced_cells": 33, "new_sitework_cells": 37, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "fe12a458d77c8d61dca5f965a877a523edfe90125b0c53d95cf4ffe0463c320f", "bearing_fill": 2 }, "blocks": 14767, "nodes": 327, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.49 ], [ 1, 0.82 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 3.9597 }
home-5建造成功5514830294
查看数据
{ "label": "home-5", "inputs": { "client": "home", "structure_seed": 5, "environment_seed": 5 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "0a4de6697d4d7b9e89b94a35a8f7441f6ac30a84990d59ba942a11efdfaeb8c7", "principal_signature": "f9b338ece0ba11b63e678f46cc0f61410015d482fbf619dc60a628ae6ef9d395", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 24, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "4eca5ec0b51e81dc4b137b4e23a8ae934bbb30c5b7a8e7320bc13374dbd7f3f2" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "3d87f3596d36ab29f0a3d5dae1efa1c45f583f4100c478decb28c7f7dbbb2192" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 94, "excavation": 0, "sitework_occupied_cells": 130, "replaced_cells": 30, "new_sitework_cells": 100, "strategies": [ "stepped", "stepped", "stepped", "stepped", "stepped" ], "signature": "15a6f65b83bba55f18eb056a56bd476a56e155106cc8b2fa99f9f7536bc565fa", "bearing_fill": 1 }, "blocks": 14830, "nodes": 294, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.03 ], [ 0, 1.12 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 3.2033 }
home-6建造成功6612043242
查看数据
{ "label": "home-6", "inputs": { "client": "home", "structure_seed": 6, "environment_seed": 6 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "38482559560cc1101fe27a4126c2ecc73c55860babcd35d4b0f500287d949885", "principal_signature": "155767c47db4b98ad24e7f45f4e956a076bc428a90d7a65bf9bbec265369b350", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 11 ], { "height": 22, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 1, 1, 2 ] }, "c1d6f13b8c28655d5147a04faf49e1b2c3cc27a2a3fa54229cb41f9219866412" ], [ "roof.profile", [ 11, 7, 0 ], { "axis": "z", "span": 11, "rise": [ 1, 1, 2 ] }, "fab2383b4a2c0116d0b4f8202d29606f1d18d922c64a45681ef3b7d2721add60" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ] ] ], "contact": { "fill": 0, "excavation": 0, "sitework_occupied_cells": 33, "replaced_cells": 33, "new_sitework_cells": 0, "strategies": [ "stepped", "stepped", "stepped", "stepped", "stepped" ], "signature": "47df3ba9586b88f3f40e1e919c69663a74a70e5ff24c7627a31def353bee09dd", "bearing_fill": 0 }, "blocks": 12043, "nodes": 242, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.12 ], [ 1, 0.52 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/core/home-6.litematic", "audit": { "queries": 209, "inventories": 28, "nodes": 242, "digest": "38482559560cc1101fe27a4126c2ecc73c55860babcd35d4b0f500287d949885" }, "seconds": 3.2638 }
home-7建造成功7714327302
查看数据
{ "label": "home-7", "inputs": { "client": "home", "structure_seed": 7, "environment_seed": 7 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "7338fa423662c538d996746ad8bd23357590764090710f7716fe58b9cc124bb8", "principal_signature": "2593df20b3ef1c34eaa0c95118fe62809925f53768b7bab9b5ebaa3e73dcd69d", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 24, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "e627283217b8d9a357a1df61cc979648165ba1dc2c8427447bdf1a6c17c5c28e" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "d26437adf615e372b397717e3b670596451b21851c1b7b328c00005e77027115" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 27, "excavation": 0, "sitework_occupied_cells": 66, "replaced_cells": 33, "new_sitework_cells": 33, "strategies": [ "stepped", "stepped", "stepped", "stepped", "stepped" ], "signature": "28e5adba18aefa1ed9386488d3ad955254e51cb665b8fccd0d9a3b3ccfce15ba", "bearing_fill": 0 }, "blocks": 14327, "nodes": 302, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.27 ], [ 1, 0.65 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 3.3008 }
hall-0建造成功0014517327
查看数据
{ "label": "hall-0", "inputs": { "client": "hall", "structure_seed": 0, "environment_seed": 0 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "9dd3ef7e70af33a6c2ab6585e04274fcf145d73875d2204ad1d9fcff321b0605", "principal_signature": "b33e1cbef05781eeae7944b399ab6e49f4d38b12085e0c7329343bf07a6baf46", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 12, 8, 11 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "c844183792cf4649a451a8bd61196dfb2c5c3d4b096bb514d55c1dc09809e377" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "e4f8643c7b46528501d909861be21bbe41ea6c9a8dca455b07881ee600d1eb09" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 11 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 11, 0, 11 ], "room.kitchen", [ "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 101, "excavation": 0, "sitework_occupied_cells": 140, "replaced_cells": 30, "new_sitework_cells": 110, "strategies": [ "stepped", "stepped", "stepped", "stepped", "stepped" ], "signature": "599db4c6ac49dc568994157f713b6b25e631575add19a7a7deb5c5a4ddfcd51e", "bearing_fill": 1 }, "blocks": 14517, "nodes": 327, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.96 ], [ 1, 1.22 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/core/hall-0.litematic", "audit": { "queries": 299, "inventories": 45, "nodes": 327, "digest": "9dd3ef7e70af33a6c2ab6585e04274fcf145d73875d2204ad1d9fcff321b0605" }, "seconds": 3.9707 }
hall-1建造成功1112335273
查看数据
{ "label": "hall-1", "inputs": { "client": "hall", "structure_seed": 1, "environment_seed": 1 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "757bb7eebbb924437accf68a648c5ce92af2c06386f4c63fa06b9349f46c0918", "principal_signature": "aa3ce7dab03f5e304847e3a7ddf6396d8b0a2f61074447e286fd36387745b44a", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 18 ], { "height": 15, "cap_overhang": 0 } ], [ "roof.dormer", [ 6, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 8 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 9, "rise": [ 1, 2 ] }, "e4510c9376cbc4983913f493e47629c3ce5896a1b8b15077cd48707495bd4bb3" ], [ "roof.profile", [ 0, 7, 9 ], { "axis": "x", "span": 9, "rise": [ 1, 2 ] }, "61972a25cdfec6ac5a0e0434db4ee4363f77ab40cbb5714caa71f150df3cc07e" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 0, 9 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "ef83d9a5eb4d203e9d3bbe4d7a7a9f5734310d36cbf2a96c15eabceb268edd7e" ], [ "room", [ 0, 6, 9 ], "room.loft.library", [ "landing" ], false, "a1d245413a3b1c1d35d6d64ac9ed2f0069f56da8dee0fa6361cace24a159af43" ], [ "room", [ 9, 0, 9 ], "room.kitchen", [ "west" ], false, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ] ] ], "contact": { "fill": 19, "excavation": 0, "sitework_occupied_cells": 49, "replaced_cells": 30, "new_sitework_cells": 19, "strategies": [ "stepped", "stepped", "stepped", "stepped", "stepped" ], "signature": "e6582d5804795152c3f514ebd35f2b953dd923854850f928d6d724868063bddf", "bearing_fill": 1 }, "blocks": 12335, "nodes": 273, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.3 ], [ 1, 0.68 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "left", 11, "reserved ridge attachment" ], [ "right", 4, "protected circulation" ], [ "right", 11, "reserved ridge attachment" ] ] } ], "artifact": "samples/building-lantern/release/core/hall-1.litematic", "audit": { "queries": 243, "inventories": 28, "nodes": 273, "digest": "757bb7eebbb924437accf68a648c5ce92af2c06386f4c63fa06b9349f46c0918" }, "seconds": 2.7067 }
hall-2建造成功2215687309
查看数据
{ "label": "hall-2", "inputs": { "client": "hall", "structure_seed": 2, "environment_seed": 2 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "9bc868b78e058b8807d530af77736df1575648f4942a33249f33a3f90b42f41b", "principal_signature": "46296a86deb794497cea29b12c794944a69dbbf653ae5ca845e8bfc8e4366d24", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "3cc8878ed83cb1017e335cc15e26dc5e9a699e7acd4efbbb7fc4ba2e7a2e5bd0" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "a9dfa457f24252bbf62ff0ed17d0efcbff66b85a805c3d4d3eb087d91864805b" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "2f47856440cdff2d5fe98c33e8b0cf7d55a5c27d72f66a028afb9480483b25d1" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 11 ], "room.kitchen", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ] ] ], "contact": { "fill": 121, "excavation": 0, "sitework_occupied_cells": 155, "replaced_cells": 27, "new_sitework_cells": 128, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "87f7261f488834ac78be15dc3eca393b2530f185746c065d5ac5830f946ce66b", "bearing_fill": 3 }, "blocks": 15687, "nodes": 309, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.34 ], [ 0, 1.57 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.9717 }
hall-3建造成功3315912310
查看数据
{ "label": "hall-3", "inputs": { "client": "hall", "structure_seed": 3, "environment_seed": 3 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "4c036edc766f6628a90e3968a8c8ad16c37d279740c106719a25c51f67510e6b", "principal_signature": "8897ad7fe83908bb045f4c016d6453f8164cd2c236c96d638ea79a29876cbfea", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 8, 16 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 10, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 11, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "a3fd760c70cffaafb6124768bd071013d2c94b1588f1e9ed9d6249620d88ae03" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "cd712dd1b27087c4a1df5bb8af780655baa7f719006b6b3d85dc60dd0f9c7488" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.living", [ "north", "east" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "bababbf1ce522065f7a5179560438de468c2194e77c7619b2c0c0c52e35259a0" ], [ "room", [ 11, 0, 11 ], "room.kitchen", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ] ] ], "contact": { "fill": 113, "excavation": 0, "sitework_occupied_cells": 157, "replaced_cells": 27, "new_sitework_cells": 130, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "0540b6e1bf18564ee462558e3ec6b0b3fbf9dee014aa06756eff89abdea1a2e4", "bearing_fill": 3 }, "blocks": 15912, "nodes": 310, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.1 ], [ 0, 1.3 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.7137 }
hall-4建造成功4412349293
查看数据
{ "label": "hall-4", "inputs": { "client": "hall", "structure_seed": 4, "environment_seed": 4 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "99218f13e3f8ccc9c73b5c4c9c605c6eccba161087a1f13141f8a395849e4355", "principal_signature": "b35b7029f0728fade6ee26e422d4ee340691f354c6215774daa1886bd409ef2a", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 18 ], { "height": 15, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 8, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 1, 2 ] }, "5a868b6e3149f041b8c49d91c5c18d76b53bc52202019934abeb2a22e07501d1" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 1, 2 ] }, "179a40d40bef73cf049279bdebf46dbc9adc2dd676996db42e802e17d1f9783f" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 0, 9 ], "room.living", [ "north", "east" ], false, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6fe2adba33f4a74566c07d9920e6f191243b3cc2cf0b4b8f854dc078edb74625" ], [ "room", [ 9, 0, 0 ], "room.workshop", [ "south", "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 0, 9 ], "room.kitchen", [ "north", "west" ], false, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6fe2adba33f4a74566c07d9920e6f191243b3cc2cf0b4b8f854dc078edb74625" ] ] ], "contact": { "fill": 20, "excavation": 0, "sitework_occupied_cells": 50, "replaced_cells": 29, "new_sitework_cells": 21, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "98287dd56614591fd5265eecce59d047b1fdec74e67527933bbd5f05276cfc0c", "bearing_fill": 0 }, "blocks": 12349, "nodes": 293, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.35 ], [ 1, 0.64 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 11, "reserved ridge attachment" ], [ "right", 4, "protected circulation" ], [ "right", 11, "reserved ridge attachment" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "left", 11, "reserved ridge attachment" ], [ "right", 4, "protected circulation" ], [ "right", 11, "reserved ridge attachment" ] ] } ], "seconds": 2.2762 }
hall-5建造成功5513118308
查看数据
{ "label": "hall-5", "inputs": { "client": "hall", "structure_seed": 5, "environment_seed": 5 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "459226b043d48e71dc23c26e3b20e8a184a9bc7ee11d36105b0550ba3c5b963a", "principal_signature": "6722bea5f8e220fcf095f4372ed48ffdcab0e61a4f752193429b7c5adc12cfd4", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 18 ], { "height": 15, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 8, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 1, 2 ] }, "51cd422016c4a3fce9ef06b5b8db707af26c2e7e88c43eabc5d5526a63594a5d" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 1, 2 ] }, "ca633c3023b6913d5f5ceda96067b148a4041092aa323fc896047d0f68b91134" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 0, 9 ], "room.living", [ "north", "east" ], false, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6fe2adba33f4a74566c07d9920e6f191243b3cc2cf0b4b8f854dc078edb74625" ], [ "room", [ 9, 0, 0 ], "room.workshop", [ "south", "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 0, 9 ], "room.kitchen", [ "north", "west" ], false, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6fe2adba33f4a74566c07d9920e6f191243b3cc2cf0b4b8f854dc078edb74625" ] ] ], "contact": { "fill": 21, "excavation": 0, "sitework_occupied_cells": 51, "replaced_cells": 30, "new_sitework_cells": 21, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "b04cf71b4e449c7d4859f74b64577d3e2e74a7123b57241d97b8a08acf061a91", "bearing_fill": 2 }, "blocks": 13118, "nodes": 308, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.35 ], [ 1, 0.73 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 11, "reserved ridge attachment" ], [ "right", 4, "protected circulation" ], [ "right", 11, "reserved ridge attachment" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "left", 11, "reserved ridge attachment" ], [ "right", 4, "protected circulation" ], [ "right", 11, "reserved ridge attachment" ] ] } ], "seconds": 2.3883 }
hall-6建造成功6613446323
查看数据
{ "label": "hall-6", "inputs": { "client": "hall", "structure_seed": 6, "environment_seed": 6 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "8aa0072ab085c2834338aa1bb7c8b905c597b878c5f16134aa067ce346c17167", "principal_signature": "fe5fe3ac6badad5fe492b3ece4b051ee846bd73ce47d2b7b28e948c8b01d4a4d", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 18 ], { "height": 21, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 15 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 9 ], { "axis": "z", "span": 9, "rise": [ 1, 2 ] }, "0e45272d512ead81a7ca77adbd1e9b1781247379ff6b5bd9e6623f66e8d8902f" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 1, 2 ] }, "c70fcb1eba253676a089c0214e36b239ad20776bb0cb0da472657e07c3b604cf" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 1, 2 ] }, "d66581b4ae60ca108a03d59f7c178134c882e5e3d400bb13ff7851f875541d95" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 0, 9 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 9 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 9 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.workshop", [ "south", "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 0, 9 ], "room.kitchen", [ "north", "west" ], false, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 6, 0 ], "room.loft.library", [ "landing" ], false, "6fe2adba33f4a74566c07d9920e6f191243b3cc2cf0b4b8f854dc078edb74625" ] ] ], "contact": { "fill": 22, "excavation": 0, "sitework_occupied_cells": 52, "replaced_cells": 30, "new_sitework_cells": 22, "strategies": [ "stepped", "stepped", "stepped", "stepped", "stepped" ], "signature": "98ff63f7ed246d3350d0b4da6132e8a8a64421e6552e38fb56d6b8cae4ee09c9", "bearing_fill": 1 }, "blocks": 13446, "nodes": 323, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.33 ], [ 1, 0.69 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "left", 14, "reserved ridge attachment" ], [ "right", 4, "protected circulation" ], [ "right", 14, "reserved ridge attachment" ] ] } ], "artifact": "samples/building-lantern/release/core/hall-6.litematic", "audit": { "queries": 285, "inventories": 43, "nodes": 323, "digest": "8aa0072ab085c2834338aa1bb7c8b905c597b878c5f16134aa067ce346c17167" }, "seconds": 3.9962 }
hall-7建造成功7716360360
查看数据
{ "label": "hall-7", "inputs": { "client": "hall", "structure_seed": 7, "environment_seed": 7 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "910cc540629354cb309ffb2b006275e7e217a8919616082b07a8df28078f004e", "principal_signature": "f942c93d10beab6bbe57108ccae87fa20263fcfe8655b5d116507f5608043d1f", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 13, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 11 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 11 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "d4331562da3ac2a9114362a57c74012fffc0a6e680c5c1d6bb690da460618967" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "e37a93688f8fa994f3e426a62a98c7ca0ebffa42ca8cc57d1d59706d054c6b28" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 0, 6, 11 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 11, 0, 0 ], "room.workshop", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.kitchen", [ "north", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 16, "excavation": 0, "sitework_occupied_cells": 46, "replaced_cells": 30, "new_sitework_cells": 16, "strategies": [ "stepped", "stepped", "stepped", "stepped", "stepped" ], "signature": "0ba3342e93c171059f2622893a2af5c5d501fc3f71134db2f227ed400d1ebeee", "bearing_fill": 0 }, "blocks": 16360, "nodes": 360, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.28 ], [ 1, 0.66 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 4.2725 }
high-0建造成功0010077269
查看数据
{ "label": "high-0", "inputs": { "client": "high", "structure_seed": 0, "environment_seed": 0 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "138bf010e02c742e1b45c19e45ddf8769e95716d887ffe0e31dbfaf4fd939f3e", "principal_signature": "7b04f6a4348e997bb42b40d570544925d5e9c46aeb6aa21f6876fc47261564c5", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 9, 8, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "0130080411befef5eaf5704d0e73486322f060592fd96e18298374ce3309e720" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "6b76bd9c2f8f3e5ed0aeee80c32ed44d439241405b8420ac6b0f0e46d4bde2c4" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [ "north" ], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 6, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ] ] ], "contact": { "fill": 52, "excavation": 0, "sitework_occupied_cells": 90, "replaced_cells": 33, "new_sitework_cells": 57, "strategies": [ "stepped", "stepped", "stepped", "stepped", "stepped" ], "signature": "a8051fc01efd986390bc69db773f9f186134db17cf6b17885a6ae9d0eadf8091", "bearing_fill": 1 }, "blocks": 10077, "nodes": 269, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.51 ], [ 1, 0.79 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/core/high-0.litematic", "audit": { "queries": 241, "inventories": 22, "nodes": 269, "digest": "138bf010e02c742e1b45c19e45ddf8769e95716d887ffe0e31dbfaf4fd939f3e" }, "seconds": 2.6662 }
high-1建造成功1113405319
查看数据
{ "label": "high-1", "inputs": { "client": "high", "structure_seed": 1, "environment_seed": 1 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "b2e4f20409a685fe022ecc634b8e6000599032ff732b94685316c52aa9af6e75", "principal_signature": "594ddade698c40993f8d9ed90aa6b38620dd2f726ee54b84f49a6d7ab0a180d1", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 11 ], { "height": 29, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "775aa83e148e9a222b3ed5e6a3741b605f17eb61a514ef6cf3d1dced041d6c17" ], [ "roof.profile", [ 11, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "56656eb84178817c9732666b5cf997014aa4c15054e253f69cdf7d194de21e24" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 18, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 6, 0 ], "room.library", [ "east" ], true, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 12, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 6, 0 ], "room.workshop", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 67, "excavation": 0, "sitework_occupied_cells": 103, "replaced_cells": 30, "new_sitework_cells": 73, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "ca44a5148645dc4898b6b77fe6de4f5f16e3d7a973a2ea4c07b989caf0b9cd36", "bearing_fill": 2 }, "blocks": 13405, "nodes": 319, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 0.85 ], [ 0, 1.04 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/core/high-1.litematic", "audit": { "queries": 283, "inventories": 49, "nodes": 319, "digest": "b2e4f20409a685fe022ecc634b8e6000599032ff732b94685316c52aa9af6e75" }, "seconds": 4.1838 }
high-2建造成功2212702303
查看数据
{ "label": "high-2", "inputs": { "client": "high", "structure_seed": 2, "environment_seed": 2 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "32f71d8b60e33edd219bada699a2cda2adb017a86c59adc3122a943d5b1caf0d", "principal_signature": "c16f6a80a5b7e16b9851ab239073718354b82664614708b573b1ad25a84ea5f5", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 11 ], { "height": 29, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 11, 8, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "775aa83e148e9a222b3ed5e6a3741b605f17eb61a514ef6cf3d1dced041d6c17" ], [ "roof.profile", [ 11, 7, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "90962b8fcb1e529751e18812afbb5b98ea77adb1d664f0bc4be86f8ee1eaa735" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 18, 0 ], "room.loft.bedroom", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 6, 0 ], "room.library", [ "north" ], true, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ] ] ], "contact": { "fill": 91, "excavation": 0, "sitework_occupied_cells": 128, "replaced_cells": 30, "new_sitework_cells": 98, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "a76b432710671b78008ca91e92e3d455d816ec35c0730339419103815d231ac9", "bearing_fill": 2 }, "blocks": 12702, "nodes": 303, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.04 ], [ 0, 1.26 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.6606 }
high-3建造成功3310856254
查看数据
{ "label": "high-3", "inputs": { "client": "high", "structure_seed": 3, "environment_seed": 3 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "68ba3bbff855bca4d7f40e041a2ae79d26ce240f4c2f70d1b8811ab043adc82f", "principal_signature": "dec4248672e50f034b899ba4c1c3ea254343873a1bf04f7277f10c94b83c40e1", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 9, 8, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "68aa18ee96cacfbcf5a80323844f1ca6c243f7391ab76954948a4291f5978e49" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [ "north" ], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 6, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ] ] ], "contact": { "fill": 54, "excavation": 0, "sitework_occupied_cells": 96, "replaced_cells": 30, "new_sitework_cells": 66, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "6439dbe885ca23ef1e0f9d59c4c81f57dac81b5648e72d3c9de331b62fa0ed78", "bearing_fill": 2 }, "blocks": 10856, "nodes": 254, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 0.6 ], [ 0, 0.72 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.7833 }
high-4建造成功4410043258
查看数据
{ "label": "high-4", "inputs": { "client": "high", "structure_seed": 4, "environment_seed": 4 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "88e72732b9e7859e82837facee543b5fc7438142e3b97812f2787f2f89a386f2", "principal_signature": "fc3fe52f4b833a13cc733cc39c2ed31eca487afd944f7bf870b7730a4e80db1a", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 9, 8, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "519f95ca2326c9e31b6651e43b0c0d0eea548b27d5d764128a60209a9837a740" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "96f37dd25d3f6a19a6c25ff903e985ba634915adc33bd3bb854ddd3bad89fd34" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.bedroom", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ] ] ], "contact": { "fill": 10, "excavation": 0, "sitework_occupied_cells": 43, "replaced_cells": 33, "new_sitework_cells": 10, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "1a2cf64b042be7578b3d52b3e4a61f014c19526123637bd3f6948270894a8735", "bearing_fill": 0 }, "blocks": 10043, "nodes": 258, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.17 ], [ 1, 0.56 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.8332 }
high-5建造成功5511022295
查看数据
{ "label": "high-5", "inputs": { "client": "high", "structure_seed": 5, "environment_seed": 5 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "236240c9e08cfc4db17d557000f367a77eb760bacd3f4840cef5a3abd2554bad", "principal_signature": "b64d378d015fd62a0d847ea7a80ab60005fe2d4a0be919ab29ee4c467013f77c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "0130080411befef5eaf5704d0e73486322f060592fd96e18298374ce3309e720" ], [ "roof.profile", [ 9, 13, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "00485a99fedf1eb4927119dd11c650731c1beb4ee60d895664331d64f8a810d4" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.bedroom", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [ "east" ], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], false, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 6, 0 ], "room.workshop", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ] ] ], "contact": { "fill": 6, "excavation": 0, "sitework_occupied_cells": 39, "replaced_cells": 33, "new_sitework_cells": 6, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "1c56a60f6163350c1891e7d0657c11ca9e3b03c8358dca9c65e23b77b5de960a", "bearing_fill": 1 }, "blocks": 11022, "nodes": 295, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.2 ], [ 1, 0.58 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.1742 }
high-6建造成功6612806278
查看数据
{ "label": "high-6", "inputs": { "client": "high", "structure_seed": 6, "environment_seed": 6 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "5f4f07fceef4ea5f60f15d45d95983b0a495ada3e86b557e4ace7dbd0fc5ec31", "principal_signature": "f2386c9a0b8003961cd2404c884eb1b921e6cacfd903c8603f309550cebecccc", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 11 ], { "height": 29, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 11, 8, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "14d6ff0b37f6e45a10ac4485b4fc85dba306fe38d1b93092e5d61eec78c8b2ee" ], [ "roof.profile", [ 11, 7, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "abd36d743ddb304a6153f5abd0735c0a495f542aab575f5f948ab032e37d618c" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 18, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 6, 0 ], "room.library", [], true, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ] ] ], "contact": { "fill": 0, "excavation": 0, "sitework_occupied_cells": 33, "replaced_cells": 33, "new_sitework_cells": 0, "strategies": [ "stepped", "stepped", "stepped", "stepped", "stepped" ], "signature": "47df3ba9586b88f3f40e1e919c69663a74a70e5ff24c7627a31def353bee09dd", "bearing_fill": 0 }, "blocks": 12806, "nodes": 278, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.12 ], [ 1, 0.52 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/core/high-6.litematic", "audit": { "queries": 243, "inventories": 38, "nodes": 278, "digest": "5f4f07fceef4ea5f60f15d45d95983b0a495ada3e86b557e4ace7dbd0fc5ec31" }, "seconds": 3.8117 }
high-7建造成功7710778287
查看数据
{ "label": "high-7", "inputs": { "client": "high", "structure_seed": 7, "environment_seed": 7 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "85240fc5d7840bef86b82b167e952136c5638676b52900f84d83019186c5b2ab", "principal_signature": "bf17ece456bf8a0478f9418da4ec13440ad345b139a134ac4041713d221f4187", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "519f95ca2326c9e31b6651e43b0c0d0eea548b27d5d764128a60209a9837a740" ], [ "roof.profile", [ 9, 13, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "3110144264d17989f8c09673ec0c55bb4af59c3a2f3026ed6b02ed1c2cc8eb24" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [ "north", "east" ], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], false, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 12, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 6, 0 ], "room.workshop", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ] ] ], "contact": { "fill": 15, "excavation": 0, "sitework_occupied_cells": 48, "replaced_cells": 33, "new_sitework_cells": 15, "strategies": [ "stepped", "stepped", "stepped", "stepped", "stepped" ], "signature": "68f816e940120a70ab0185eec04060c8cd9bb51e9a72c0ad730f3d2eac74b526", "bearing_fill": 0 }, "blocks": 10778, "nodes": 287, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.27 ], [ 1, 0.65 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.0575 }
adaptation-00建造成功0034933151
查看数据
{ "label": "adaptation-00", "inputs": { "environment_seed": 0, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.045, -0.035, 4 ] }, { "op": "wave", "args": [ 0.4, 0.13, 0.11, 3.734703416353409 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0.4 ] } ] }, 2, 7 ] }, "water": 5, "digest": "84e4d5ef660eb9573a0b335b554fd074ded4b6c5decba1743d63a458d7581f78", "held_out_composition": false, "client": "hillside_home", "structure_seed": 0 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "029434456923b7c4eb5ca8255ef6a6027d6046ba050b33d9ca77e18791e3da86", "principal_signature": "424f119d69bc0c7fd7c780d05d3cac5c90a6c4453f2f51e47c5f22275a57769c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 24, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "4eca5ec0b51e81dc4b137b4e23a8ae934bbb30c5b7a8e7320bc13374dbd7f3f2" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "3d87f3596d36ab29f0a3d5dae1efa1c45f583f4100c478decb28c7f7dbbb2192" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 160, "excavation": 0, "sitework_occupied_cells": 166, "replaced_cells": 163, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "9f3f203c3f0e70d3683099b2ae4392d6f85b45d595b8a06946a06450ce7336c9", "bearing_fill": 3 }, "blocks": 34933, "nodes": 151, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 4.92 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/core/adaptation-00.litematic", "audit": { "queries": 133, "inventories": 54, "nodes": 151, "digest": "029434456923b7c4eb5ca8255ef6a6027d6046ba050b33d9ca77e18791e3da86" }, "seconds": 4.1034 }
adaptation-01建造成功1034844156
查看数据
{ "label": "adaptation-01", "inputs": { "environment_seed": 0, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.045, -0.035, 4 ] }, { "op": "wave", "args": [ 0.4, 0.13, 0.11, 3.734703416353409 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0.4 ] } ] }, 2, 7 ] }, "water": 5, "digest": "84e4d5ef660eb9573a0b335b554fd074ded4b6c5decba1743d63a458d7581f78", "held_out_composition": false, "client": "hillside_home", "structure_seed": 1 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "084ff77ce9f0bed941213f197d63af7af8a5150a26ec4bcedc5eb83430b828b6", "principal_signature": "e6ec51fd89f0d909ff361c8ea2f25ef3e8b495630a5a1a142113c26aae92fb67", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "69b463e96d153e9c5b98d5601ff80cf76b85fea4f55ecb82c1ea5be2fd54cf8d" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "463d013ac6098294317ae97a95bf3a10ba3fdd2f26ebe73f2f5dd2680567dad3" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 160, "excavation": 0, "sitework_occupied_cells": 166, "replaced_cells": 163, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "9f3f203c3f0e70d3683099b2ae4392d6f85b45d595b8a06946a06450ce7336c9", "bearing_fill": 3 }, "blocks": 34844, "nodes": 156, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 4.92 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.9071 }
adaptation-02建造成功2035053182
查看数据
{ "label": "adaptation-02", "inputs": { "environment_seed": 0, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.045, -0.035, 4 ] }, { "op": "wave", "args": [ 0.4, 0.13, 0.11, 3.734703416353409 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0.4 ] } ] }, 2, 7 ] }, "water": 5, "digest": "84e4d5ef660eb9573a0b335b554fd074ded4b6c5decba1743d63a458d7581f78", "held_out_composition": false, "client": "gabled_hall", "structure_seed": 2 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "f43285f15ca6118679ac779f85a4a2ea00cb15030d242132163206de63443cd0", "principal_signature": "46296a86deb794497cea29b12c794944a69dbbf653ae5ca845e8bfc8e4366d24", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "3cc8878ed83cb1017e335cc15e26dc5e9a699e7acd4efbbb7fc4ba2e7a2e5bd0" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "a9dfa457f24252bbf62ff0ed17d0efcbff66b85a805c3d4d3eb087d91864805b" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "2f47856440cdff2d5fe98c33e8b0cf7d55a5c27d72f66a028afb9480483b25d1" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 11 ], "room.kitchen", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ] ] ], "contact": { "fill": 202, "excavation": 0, "sitework_occupied_cells": 208, "replaced_cells": 205, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "fb889a40efd56f5b9c62fcd6a6b487a53c92e3e4d6cc0f484ba699eec202cdfb", "bearing_fill": 3 }, "blocks": 35053, "nodes": 182, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 6.18 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.9008 }
adaptation-03建造成功3033877154
查看数据
{ "label": "adaptation-03", "inputs": { "environment_seed": 0, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.045, -0.035, 4 ] }, { "op": "wave", "args": [ 0.4, 0.13, 0.11, 3.734703416353409 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0.4 ] } ] }, 2, 7 ] }, "water": 5, "digest": "84e4d5ef660eb9573a0b335b554fd074ded4b6c5decba1743d63a458d7581f78", "held_out_composition": false, "client": "high_house", "structure_seed": 3 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "63d1bdbd7e11323380f55d244fc14bcfbf8cf30f65aeaa0c19aeba78421a6545", "principal_signature": "dec4248672e50f034b899ba4c1c3ea254343873a1bf04f7277f10c94b83c40e1", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 9, 8, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "68aa18ee96cacfbcf5a80323844f1ca6c243f7391ab76954948a4291f5978e49" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [ "north" ], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 6, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ] ] ], "contact": { "fill": 71, "excavation": 0, "sitework_occupied_cells": 77, "replaced_cells": 74, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "f2e0f1c8993f8638dbf03b92cfef2b9a78336b814eaa3f1d5071af11f0e6ad38", "bearing_fill": 2 }, "blocks": 33877, "nodes": 154, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 2.25 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.0765 }
adaptation-04建造成功0130705151
查看数据
{ "label": "adaptation-04", "inputs": { "environment_seed": 1, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0, 4 ] }, { "op": "wave", "args": [ 0.8, 0.13, 0.11, 5.044220228402418 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0.7 ] } ] }, 2, 7 ] }, "water": null, "digest": "06de23238b6ccf3a76afec91a322bd15ad2c4b2b7c356183ee8bacde06115865", "held_out_composition": false, "client": "hillside_home", "structure_seed": 0 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "d7e8070a283018f28f34f788ee6cc42c832446870f18977b55e09f3ae38e2cff", "principal_signature": "424f119d69bc0c7fd7c780d05d3cac5c90a6c4453f2f51e47c5f22275a57769c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 24, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "4eca5ec0b51e81dc4b137b4e23a8ae934bbb30c5b7a8e7320bc13374dbd7f3f2" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "3d87f3596d36ab29f0a3d5dae1efa1c45f583f4100c478decb28c7f7dbbb2192" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 91, "excavation": 0, "sitework_occupied_cells": 103, "replaced_cells": 3, "new_sitework_cells": 100, "strategies": [ "piers" ], "signature": "e33259d98b792b6b19e8f39e470f53bd26b683ded299218bb41fb5d3c3644581", "bearing_fill": 3 }, "blocks": 30705, "nodes": 151, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.09 ], [ 0, 1.23 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.8217 }
adaptation-05建造成功1130616156
查看数据
{ "label": "adaptation-05", "inputs": { "environment_seed": 1, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0, 4 ] }, { "op": "wave", "args": [ 0.8, 0.13, 0.11, 5.044220228402418 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0.7 ] } ] }, 2, 7 ] }, "water": null, "digest": "06de23238b6ccf3a76afec91a322bd15ad2c4b2b7c356183ee8bacde06115865", "held_out_composition": false, "client": "hillside_home", "structure_seed": 1 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "54581c0fa3f1998415bc2ac65a6af468d8769dd398bccd201d443c4a899c0d33", "principal_signature": "e6ec51fd89f0d909ff361c8ea2f25ef3e8b495630a5a1a142113c26aae92fb67", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "69b463e96d153e9c5b98d5601ff80cf76b85fea4f55ecb82c1ea5be2fd54cf8d" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "463d013ac6098294317ae97a95bf3a10ba3fdd2f26ebe73f2f5dd2680567dad3" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 91, "excavation": 0, "sitework_occupied_cells": 103, "replaced_cells": 3, "new_sitework_cells": 100, "strategies": [ "piers" ], "signature": "e33259d98b792b6b19e8f39e470f53bd26b683ded299218bb41fb5d3c3644581", "bearing_fill": 3 }, "blocks": 30616, "nodes": 156, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.09 ], [ 0, 1.23 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.8428 }
adaptation-06建造成功2130848182
查看数据
{ "label": "adaptation-06", "inputs": { "environment_seed": 1, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0, 4 ] }, { "op": "wave", "args": [ 0.8, 0.13, 0.11, 5.044220228402418 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0.7 ] } ] }, 2, 7 ] }, "water": null, "digest": "06de23238b6ccf3a76afec91a322bd15ad2c4b2b7c356183ee8bacde06115865", "held_out_composition": false, "client": "gabled_hall", "structure_seed": 2 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "8c4aa80c4def7d7bed092c11d6c7a2ef9b2b21765f3e1243cb239dc15d0a3634", "principal_signature": "46296a86deb794497cea29b12c794944a69dbbf653ae5ca845e8bfc8e4366d24", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "3cc8878ed83cb1017e335cc15e26dc5e9a699e7acd4efbbb7fc4ba2e7a2e5bd0" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "a9dfa457f24252bbf62ff0ed17d0efcbff66b85a805c3d4d3eb087d91864805b" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "2f47856440cdff2d5fe98c33e8b0cf7d55a5c27d72f66a028afb9480483b25d1" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 11 ], "room.kitchen", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ] ] ], "contact": { "fill": 114, "excavation": 0, "sitework_occupied_cells": 126, "replaced_cells": 3, "new_sitework_cells": 123, "strategies": [ "piers" ], "signature": "3a87d4d5b3a048943a78f3aecef13528a3339fb39461af806910cb910ab868ec", "bearing_fill": 3 }, "blocks": 30848, "nodes": 182, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.32 ], [ 0, 1.52 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 3.0053 }
adaptation-07建造成功3129614154
查看数据
{ "label": "adaptation-07", "inputs": { "environment_seed": 1, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0, 4 ] }, { "op": "wave", "args": [ 0.8, 0.13, 0.11, 5.044220228402418 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0.7 ] } ] }, 2, 7 ] }, "water": null, "digest": "06de23238b6ccf3a76afec91a322bd15ad2c4b2b7c356183ee8bacde06115865", "held_out_composition": false, "client": "high_house", "structure_seed": 3 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "f57c0151c6ca433be53bec840008c95c78f14443dd77205f3b667b444fa39a7b", "principal_signature": "dec4248672e50f034b899ba4c1c3ea254343873a1bf04f7277f10c94b83c40e1", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 9, 8, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "68aa18ee96cacfbcf5a80323844f1ca6c243f7391ab76954948a4291f5978e49" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [ "north" ], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 6, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ] ] ], "contact": { "fill": 56, "excavation": 0, "sitework_occupied_cells": 68, "replaced_cells": 3, "new_sitework_cells": 65, "strategies": [ "piers" ], "signature": "9ee500055ac0acbab069a8a150677790a570b5abfa67f50e693124d9482a80a7", "bearing_fill": 2 }, "blocks": 29614, "nodes": 154, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 0.74 ], [ 0, 0.94 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.6339 }
adaptation-08建造成功0238082151
查看数据
{ "label": "adaptation-08", "inputs": { "environment_seed": 2, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.045, 0.035, 4 ] }, { "op": "wave", "args": [ 0.4, 0.13, 0.11, 4.998757701772476 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0.4 ] } ] }, 2, 7 ] }, "water": 6, "digest": "f3ff6572715b99e6ac24b42963c7f0b7ce38c7a885dac8614550de6de1a36682", "held_out_composition": false, "client": "hillside_home", "structure_seed": 0 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "6a5e82a8b693342eb7a7a1868d1ee0feeb3b3568eddb0f629be5435e66fbc47f", "principal_signature": "424f119d69bc0c7fd7c780d05d3cac5c90a6c4453f2f51e47c5f22275a57769c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 24, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "4eca5ec0b51e81dc4b137b4e23a8ae934bbb30c5b7a8e7320bc13374dbd7f3f2" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "3d87f3596d36ab29f0a3d5dae1efa1c45f583f4100c478decb28c7f7dbbb2192" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 129, "excavation": 0, "sitework_occupied_cells": 138, "replaced_cells": 135, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "2f2ecde66dbb2f344ecbf341b10bf398bb28fa25d6d7814eab4d45bbf15a2cf7", "bearing_fill": 3 }, "blocks": 38082, "nodes": 151, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 4.08 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/core/adaptation-08.litematic", "audit": { "queries": 133, "inventories": 54, "nodes": 151, "digest": "6a5e82a8b693342eb7a7a1868d1ee0feeb3b3568eddb0f629be5435e66fbc47f" }, "seconds": 4.1264 }
adaptation-09建造成功1237993156
查看数据
{ "label": "adaptation-09", "inputs": { "environment_seed": 2, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.045, 0.035, 4 ] }, { "op": "wave", "args": [ 0.4, 0.13, 0.11, 4.998757701772476 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0.4 ] } ] }, 2, 7 ] }, "water": 6, "digest": "f3ff6572715b99e6ac24b42963c7f0b7ce38c7a885dac8614550de6de1a36682", "held_out_composition": false, "client": "hillside_home", "structure_seed": 1 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "9d87d8290c1807c47c469b4d197daadfb34ec3211d83e4a8e3273219850ffc7e", "principal_signature": "e6ec51fd89f0d909ff361c8ea2f25ef3e8b495630a5a1a142113c26aae92fb67", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "69b463e96d153e9c5b98d5601ff80cf76b85fea4f55ecb82c1ea5be2fd54cf8d" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "463d013ac6098294317ae97a95bf3a10ba3fdd2f26ebe73f2f5dd2680567dad3" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 129, "excavation": 0, "sitework_occupied_cells": 138, "replaced_cells": 135, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "2f2ecde66dbb2f344ecbf341b10bf398bb28fa25d6d7814eab4d45bbf15a2cf7", "bearing_fill": 3 }, "blocks": 37993, "nodes": 156, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 4.08 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.8149 }
adaptation-10建造成功2238202182
查看数据
{ "label": "adaptation-10", "inputs": { "environment_seed": 2, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.045, 0.035, 4 ] }, { "op": "wave", "args": [ 0.4, 0.13, 0.11, 4.998757701772476 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0.4 ] } ] }, 2, 7 ] }, "water": 6, "digest": "f3ff6572715b99e6ac24b42963c7f0b7ce38c7a885dac8614550de6de1a36682", "held_out_composition": false, "client": "gabled_hall", "structure_seed": 2 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "a75f428f0499121b42e4fe04db0a551b8b26f6814eb911bf05cb938fb6688fab", "principal_signature": "46296a86deb794497cea29b12c794944a69dbbf653ae5ca845e8bfc8e4366d24", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "3cc8878ed83cb1017e335cc15e26dc5e9a699e7acd4efbbb7fc4ba2e7a2e5bd0" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "a9dfa457f24252bbf62ff0ed17d0efcbff66b85a805c3d4d3eb087d91864805b" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "2f47856440cdff2d5fe98c33e8b0cf7d55a5c27d72f66a028afb9480483b25d1" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 11 ], "room.kitchen", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ] ] ], "contact": { "fill": 145, "excavation": 0, "sitework_occupied_cells": 154, "replaced_cells": 151, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "b051894534fbd092ed94de1bf5d0d6d6775c30e8244729323eb7846b7e101d13", "bearing_fill": 3 }, "blocks": 38202, "nodes": 182, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 4.56 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.9055 }
adaptation-11建造成功3237026154
查看数据
{ "label": "adaptation-11", "inputs": { "environment_seed": 2, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.045, 0.035, 4 ] }, { "op": "wave", "args": [ 0.4, 0.13, 0.11, 4.998757701772476 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0.4 ] } ] }, 2, 7 ] }, "water": 6, "digest": "f3ff6572715b99e6ac24b42963c7f0b7ce38c7a885dac8614550de6de1a36682", "held_out_composition": false, "client": "high_house", "structure_seed": 3 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "bfb8e05be0c9e204bfb4f3b19f93f1ab3b1a1c496c5f5c760485001c7abc2959", "principal_signature": "dec4248672e50f034b899ba4c1c3ea254343873a1bf04f7277f10c94b83c40e1", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 9, 8, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "68aa18ee96cacfbcf5a80323844f1ca6c243f7391ab76954948a4291f5978e49" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [ "north" ], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 6, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ] ] ], "contact": { "fill": 86, "excavation": 0, "sitework_occupied_cells": 95, "replaced_cells": 92, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "b22f29cea133dd0e8bd2f35fda8a4883f73f7a62d9b7e31402626935fdbcb379", "bearing_fill": 2 }, "blocks": 37026, "nodes": 154, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 2.79 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.071 }
adaptation-12建造成功0331854155
查看数据
{ "label": "adaptation-12", "inputs": { "environment_seed": 3, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0, 4 ] }, { "op": "wave", "args": [ 0, 0.13, 0.11, 0.814364809860294 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0 ] } ] }, 2, 7 ] }, "water": null, "digest": "96e0db82efdbdbe26b58630f206491efaf5f3aa5e2e72c90fe18c6e3983556ac", "held_out_composition": false, "client": "hillside_home", "structure_seed": 0 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "1b5401d1f936451de5c11f08f957b986f0f7c0228f4946d7c133ef4fa2240b3a", "principal_signature": "424f119d69bc0c7fd7c780d05d3cac5c90a6c4453f2f51e47c5f22275a57769c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 24, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "4eca5ec0b51e81dc4b137b4e23a8ae934bbb30c5b7a8e7320bc13374dbd7f3f2" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "3d87f3596d36ab29f0a3d5dae1efa1c45f583f4100c478decb28c7f7dbbb2192" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 0, "excavation": 0, "sitework_occupied_cells": 6, "replaced_cells": 3, "new_sitework_cells": 3, "strategies": [ "stepped" ], "signature": "de4c2a6c9d2752a79195e3ff5b4929bca547a3d6c8ed5cfcab3f7f594e5a45f8", "bearing_fill": 0 }, "blocks": 31854, "nodes": 155, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.12 ], [ 1, 0.52 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.7049 }
adaptation-13建造成功1331732155
查看数据
{ "label": "adaptation-13", "inputs": { "environment_seed": 3, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0, 4 ] }, { "op": "wave", "args": [ 0, 0.13, 0.11, 0.814364809860294 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0 ] } ] }, 2, 7 ] }, "water": null, "digest": "96e0db82efdbdbe26b58630f206491efaf5f3aa5e2e72c90fe18c6e3983556ac", "held_out_composition": false, "client": "hillside_home", "structure_seed": 1 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "5b0c1a43515296b64adac921775dc2486f50c9e304852831fcc82c3d1762d47e", "principal_signature": "e6ec51fd89f0d909ff361c8ea2f25ef3e8b495630a5a1a142113c26aae92fb67", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "69b463e96d153e9c5b98d5601ff80cf76b85fea4f55ecb82c1ea5be2fd54cf8d" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "463d013ac6098294317ae97a95bf3a10ba3fdd2f26ebe73f2f5dd2680567dad3" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 0, "excavation": 0, "sitework_occupied_cells": 6, "replaced_cells": 3, "new_sitework_cells": 3, "strategies": [ "stepped" ], "signature": "de4c2a6c9d2752a79195e3ff5b4929bca547a3d6c8ed5cfcab3f7f594e5a45f8", "bearing_fill": 0 }, "blocks": 31732, "nodes": 155, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.12 ], [ 1, 0.52 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.7257 }
adaptation-14建造成功2331951183
查看数据
{ "label": "adaptation-14", "inputs": { "environment_seed": 3, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0, 4 ] }, { "op": "wave", "args": [ 0, 0.13, 0.11, 0.814364809860294 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0 ] } ] }, 2, 7 ] }, "water": null, "digest": "96e0db82efdbdbe26b58630f206491efaf5f3aa5e2e72c90fe18c6e3983556ac", "held_out_composition": false, "client": "gabled_hall", "structure_seed": 2 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "5cb9cd17aeaccf0d3f1100d193826e305cff5631106f8c179b3be64852131254", "principal_signature": "46296a86deb794497cea29b12c794944a69dbbf653ae5ca845e8bfc8e4366d24", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "3cc8878ed83cb1017e335cc15e26dc5e9a699e7acd4efbbb7fc4ba2e7a2e5bd0" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "a9dfa457f24252bbf62ff0ed17d0efcbff66b85a805c3d4d3eb087d91864805b" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "2f47856440cdff2d5fe98c33e8b0cf7d55a5c27d72f66a028afb9480483b25d1" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 11 ], "room.kitchen", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ] ] ], "contact": { "fill": 0, "excavation": 0, "sitework_occupied_cells": 6, "replaced_cells": 3, "new_sitework_cells": 3, "strategies": [ "stepped" ], "signature": "cca78d91e91dfd946f51e58967315f184d53ed2dd9fbddd7eb63cfff4b7c336d", "bearing_fill": 0 }, "blocks": 31951, "nodes": 183, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.12 ], [ 1, 0.52 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.8191 }
adaptation-15建造成功3330763154
查看数据
{ "label": "adaptation-15", "inputs": { "environment_seed": 3, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0, 4 ] }, { "op": "wave", "args": [ 0, 0.13, 0.11, 0.814364809860294 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0 ] } ] }, 2, 7 ] }, "water": null, "digest": "96e0db82efdbdbe26b58630f206491efaf5f3aa5e2e72c90fe18c6e3983556ac", "held_out_composition": false, "client": "high_house", "structure_seed": 3 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "ba5c6dc9c93a7aed66a1ad2374c650b4b5a6f429e7ef6215e8b80484f5839782", "principal_signature": "dec4248672e50f034b899ba4c1c3ea254343873a1bf04f7277f10c94b83c40e1", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 9, 8, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "68aa18ee96cacfbcf5a80323844f1ca6c243f7391ab76954948a4291f5978e49" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [ "north" ], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 6, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ] ] ], "contact": { "fill": 0, "excavation": 0, "sitework_occupied_cells": 6, "replaced_cells": 3, "new_sitework_cells": 3, "strategies": [ "stepped" ], "signature": "cf7b488deddbabdfc1cd4a449f672c728a32364891b571911cac52cb174eceeb", "bearing_fill": 0 }, "blocks": 30763, "nodes": 154, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.12 ], [ 1, 0.52 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.4718 }
adaptation-16建造成功0434933151
查看数据
{ "label": "adaptation-16", "inputs": { "environment_seed": 4, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.045, 0.035, 4 ] }, { "op": "wave", "args": [ 0.4, 0.13, 0.11, 0.5187285716175347 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0 ] } ] }, 2, 7 ] }, "water": 5, "digest": "5c90903c03656a5eeedc1ab2a56ba88feed142de9ac82ea0911c8da1eaa171bf", "held_out_composition": false, "client": "hillside_home", "structure_seed": 0 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "91b2d24821733c5ffea57caed44fc1e64cd58d8e74e6b885d97e328487ed9257", "principal_signature": "424f119d69bc0c7fd7c780d05d3cac5c90a6c4453f2f51e47c5f22275a57769c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 24, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "4eca5ec0b51e81dc4b137b4e23a8ae934bbb30c5b7a8e7320bc13374dbd7f3f2" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "3d87f3596d36ab29f0a3d5dae1efa1c45f583f4100c478decb28c7f7dbbb2192" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 145, "excavation": 0, "sitework_occupied_cells": 154, "replaced_cells": 151, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "20332c7080ab09dc2bae5881fbf9e680c0d34916e3a51e7cbeb741a56629afd5", "bearing_fill": 3 }, "blocks": 34933, "nodes": 151, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 4.56 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.744 }
adaptation-17建造成功1434844156
查看数据
{ "label": "adaptation-17", "inputs": { "environment_seed": 4, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.045, 0.035, 4 ] }, { "op": "wave", "args": [ 0.4, 0.13, 0.11, 0.5187285716175347 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0 ] } ] }, 2, 7 ] }, "water": 5, "digest": "5c90903c03656a5eeedc1ab2a56ba88feed142de9ac82ea0911c8da1eaa171bf", "held_out_composition": false, "client": "hillside_home", "structure_seed": 1 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "f858f0d6f7c4516f6d8a9cf79376b6d4a57c87bc04139debfaf9c1d468147edd", "principal_signature": "e6ec51fd89f0d909ff361c8ea2f25ef3e8b495630a5a1a142113c26aae92fb67", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "69b463e96d153e9c5b98d5601ff80cf76b85fea4f55ecb82c1ea5be2fd54cf8d" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "463d013ac6098294317ae97a95bf3a10ba3fdd2f26ebe73f2f5dd2680567dad3" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 145, "excavation": 0, "sitework_occupied_cells": 154, "replaced_cells": 151, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "20332c7080ab09dc2bae5881fbf9e680c0d34916e3a51e7cbeb741a56629afd5", "bearing_fill": 3 }, "blocks": 34844, "nodes": 156, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 4.56 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.7679 }
adaptation-18建造成功2435053182
查看数据
{ "label": "adaptation-18", "inputs": { "environment_seed": 4, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.045, 0.035, 4 ] }, { "op": "wave", "args": [ 0.4, 0.13, 0.11, 0.5187285716175347 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0 ] } ] }, 2, 7 ] }, "water": 5, "digest": "5c90903c03656a5eeedc1ab2a56ba88feed142de9ac82ea0911c8da1eaa171bf", "held_out_composition": false, "client": "gabled_hall", "structure_seed": 2 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "5aa9aa461ba755a0852f248966be9d19dc00d2978bc6576acb246383864d4658", "principal_signature": "46296a86deb794497cea29b12c794944a69dbbf653ae5ca845e8bfc8e4366d24", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "3cc8878ed83cb1017e335cc15e26dc5e9a699e7acd4efbbb7fc4ba2e7a2e5bd0" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "a9dfa457f24252bbf62ff0ed17d0efcbff66b85a805c3d4d3eb087d91864805b" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "2f47856440cdff2d5fe98c33e8b0cf7d55a5c27d72f66a028afb9480483b25d1" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 11 ], "room.kitchen", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ] ] ], "contact": { "fill": 146, "excavation": 0, "sitework_occupied_cells": 155, "replaced_cells": 152, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "7cf981d71cc1c920e19b5d9341415f417760af5c0224119e26c9734537dcae0f", "bearing_fill": 3 }, "blocks": 35053, "nodes": 182, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 4.59 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.8553 }
adaptation-19建造成功3433877154
查看数据
{ "label": "adaptation-19", "inputs": { "environment_seed": 4, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.045, 0.035, 4 ] }, { "op": "wave", "args": [ 0.4, 0.13, 0.11, 0.5187285716175347 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0 ] } ] }, 2, 7 ] }, "water": 5, "digest": "5c90903c03656a5eeedc1ab2a56ba88feed142de9ac82ea0911c8da1eaa171bf", "held_out_composition": false, "client": "high_house", "structure_seed": 3 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "6ef3261a2de6499843a341cb6d43e5bfacb5c808dd42919b779f34f61ebf68d5", "principal_signature": "dec4248672e50f034b899ba4c1c3ea254343873a1bf04f7277f10c94b83c40e1", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 9, 8, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "68aa18ee96cacfbcf5a80323844f1ca6c243f7391ab76954948a4291f5978e49" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [ "north" ], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 6, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ] ] ], "contact": { "fill": 72, "excavation": 0, "sitework_occupied_cells": 80, "replaced_cells": 77, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "78fdbb20364d0aafbaa2fe5f81ddf8acb64aa0f46e5a60fc6cecc3f927750625", "bearing_fill": 2 }, "blocks": 33877, "nodes": 154, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 2.34 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.0707 }
adaptation-20建造成功0538044151
查看数据
{ "label": "adaptation-20", "inputs": { "environment_seed": 5, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.045, 0.035, 4 ] }, { "op": "wave", "args": [ 0, 0.13, 0.11, 4.831610348091849 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0 ] } ] }, 2, 7 ] }, "water": 6, "digest": "4e20d6bb4f9f3cf14a5b7fb428e127f4eda875814caaa64784748d7a652ed422", "held_out_composition": false, "client": "hillside_home", "structure_seed": 0 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "4a9afd74fb09961f1357addd343a8dc022dad8f8c24f2749b135de93e5166b90", "principal_signature": "424f119d69bc0c7fd7c780d05d3cac5c90a6c4453f2f51e47c5f22275a57769c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 24, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "4eca5ec0b51e81dc4b137b4e23a8ae934bbb30c5b7a8e7320bc13374dbd7f3f2" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "3d87f3596d36ab29f0a3d5dae1efa1c45f583f4100c478decb28c7f7dbbb2192" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 230, "excavation": 0, "sitework_occupied_cells": 242, "replaced_cells": 239, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "d7ba3bc2c15e9e263c3bb85222d01631b98628187a7eb8d3aa96c945bb1be992", "bearing_fill": 3 }, "blocks": 38044, "nodes": 151, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 7.2 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.865 }
adaptation-21建造成功1537955156
查看数据
{ "label": "adaptation-21", "inputs": { "environment_seed": 5, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.045, 0.035, 4 ] }, { "op": "wave", "args": [ 0, 0.13, 0.11, 4.831610348091849 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0 ] } ] }, 2, 7 ] }, "water": 6, "digest": "4e20d6bb4f9f3cf14a5b7fb428e127f4eda875814caaa64784748d7a652ed422", "held_out_composition": false, "client": "hillside_home", "structure_seed": 1 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "0b095d26da611e8cf05e770d20b7314e3c1943efa6deecded692e16a854aea81", "principal_signature": "e6ec51fd89f0d909ff361c8ea2f25ef3e8b495630a5a1a142113c26aae92fb67", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "69b463e96d153e9c5b98d5601ff80cf76b85fea4f55ecb82c1ea5be2fd54cf8d" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "463d013ac6098294317ae97a95bf3a10ba3fdd2f26ebe73f2f5dd2680567dad3" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 230, "excavation": 0, "sitework_occupied_cells": 242, "replaced_cells": 239, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "d7ba3bc2c15e9e263c3bb85222d01631b98628187a7eb8d3aa96c945bb1be992", "bearing_fill": 3 }, "blocks": 37955, "nodes": 156, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 7.2 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.7738 }
adaptation-22建造成功2538164182
查看数据
{ "label": "adaptation-22", "inputs": { "environment_seed": 5, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.045, 0.035, 4 ] }, { "op": "wave", "args": [ 0, 0.13, 0.11, 4.831610348091849 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0 ] } ] }, 2, 7 ] }, "water": 6, "digest": "4e20d6bb4f9f3cf14a5b7fb428e127f4eda875814caaa64784748d7a652ed422", "held_out_composition": false, "client": "gabled_hall", "structure_seed": 2 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "a684acb911026e9fd9c8b7d7cf11d2339c0c3e333c8f13e0df686f4df3b5658a", "principal_signature": "46296a86deb794497cea29b12c794944a69dbbf653ae5ca845e8bfc8e4366d24", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "3cc8878ed83cb1017e335cc15e26dc5e9a699e7acd4efbbb7fc4ba2e7a2e5bd0" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "a9dfa457f24252bbf62ff0ed17d0efcbff66b85a805c3d4d3eb087d91864805b" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "2f47856440cdff2d5fe98c33e8b0cf7d55a5c27d72f66a028afb9480483b25d1" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 11 ], "room.kitchen", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ] ] ], "contact": { "fill": 235, "excavation": 0, "sitework_occupied_cells": 247, "replaced_cells": 244, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "509554f360f76ebc820323daef650470c5db963a424f24b0f7226c771b8bf4a7", "bearing_fill": 3 }, "blocks": 38164, "nodes": 182, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 7.35 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.2602 }
adaptation-23建造成功3536988154
查看数据
{ "label": "adaptation-23", "inputs": { "environment_seed": 5, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.045, 0.035, 4 ] }, { "op": "wave", "args": [ 0, 0.13, 0.11, 4.831610348091849 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0 ] } ] }, 2, 7 ] }, "water": 6, "digest": "4e20d6bb4f9f3cf14a5b7fb428e127f4eda875814caaa64784748d7a652ed422", "held_out_composition": false, "client": "high_house", "structure_seed": 3 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "e9fe4bf249808c33b9c9d49506fd65322aeff55e0d5b9b3858b95ab99c27c8e1", "principal_signature": "dec4248672e50f034b899ba4c1c3ea254343873a1bf04f7277f10c94b83c40e1", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 9, 8, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "68aa18ee96cacfbcf5a80323844f1ca6c243f7391ab76954948a4291f5978e49" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [ "north" ], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 6, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ] ] ], "contact": { "fill": 128, "excavation": 0, "sitework_occupied_cells": 140, "replaced_cells": 137, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "cd2ba461c8b8a0d20cb9c420627b9b1af2944dc29fb6f251102d890cfd23c575", "bearing_fill": 2 }, "blocks": 36988, "nodes": 154, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 4.14 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 3.1616 }
adaptation-24建造成功0634933151
查看数据
{ "label": "adaptation-24", "inputs": { "environment_seed": 6, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.045, 0, 4 ] }, { "op": "wave", "args": [ 0.4, 0.13, 0.11, 0.6542444831229557 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0.4 ] } ] }, 2, 7 ] }, "water": 5, "digest": "8d11645017e24042cbb11bc5adb63ce365eadbfb6f13163e43c4ebfb0c4338d9", "held_out_composition": false, "client": "hillside_home", "structure_seed": 0 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "08b97ea720b809f29e87a029076b93c8ded916ba25208bf4e91dd49320c8e619", "principal_signature": "424f119d69bc0c7fd7c780d05d3cac5c90a6c4453f2f51e47c5f22275a57769c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 24, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "4eca5ec0b51e81dc4b137b4e23a8ae934bbb30c5b7a8e7320bc13374dbd7f3f2" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "3d87f3596d36ab29f0a3d5dae1efa1c45f583f4100c478decb28c7f7dbbb2192" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 144, "excavation": 0, "sitework_occupied_cells": 150, "replaced_cells": 147, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "5b9514b098a8e3178502f498ed552c6dabd458150e6b20b601a0297bb25b374a", "bearing_fill": 3 }, "blocks": 34933, "nodes": 151, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 4.44 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 4.1888 }
adaptation-25建造成功1634844156
查看数据
{ "label": "adaptation-25", "inputs": { "environment_seed": 6, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.045, 0, 4 ] }, { "op": "wave", "args": [ 0.4, 0.13, 0.11, 0.6542444831229557 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0.4 ] } ] }, 2, 7 ] }, "water": 5, "digest": "8d11645017e24042cbb11bc5adb63ce365eadbfb6f13163e43c4ebfb0c4338d9", "held_out_composition": false, "client": "hillside_home", "structure_seed": 1 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "2786da088ca7ecd80a33ee8595ca5f3a354d333eff949bb613570e34a8fa4eab", "principal_signature": "e6ec51fd89f0d909ff361c8ea2f25ef3e8b495630a5a1a142113c26aae92fb67", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "69b463e96d153e9c5b98d5601ff80cf76b85fea4f55ecb82c1ea5be2fd54cf8d" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "463d013ac6098294317ae97a95bf3a10ba3fdd2f26ebe73f2f5dd2680567dad3" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 144, "excavation": 0, "sitework_occupied_cells": 150, "replaced_cells": 147, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "5b9514b098a8e3178502f498ed552c6dabd458150e6b20b601a0297bb25b374a", "bearing_fill": 3 }, "blocks": 34844, "nodes": 156, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 4.44 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 5.9169 }
adaptation-26建造成功2635053182
查看数据
{ "label": "adaptation-26", "inputs": { "environment_seed": 6, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.045, 0, 4 ] }, { "op": "wave", "args": [ 0.4, 0.13, 0.11, 0.6542444831229557 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0.4 ] } ] }, 2, 7 ] }, "water": 5, "digest": "8d11645017e24042cbb11bc5adb63ce365eadbfb6f13163e43c4ebfb0c4338d9", "held_out_composition": false, "client": "gabled_hall", "structure_seed": 2 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "aa14eda0baa45356a6d27e6cd310b163b05bfcf4fc403c9d8eb7fe85c137e48f", "principal_signature": "46296a86deb794497cea29b12c794944a69dbbf653ae5ca845e8bfc8e4366d24", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "3cc8878ed83cb1017e335cc15e26dc5e9a699e7acd4efbbb7fc4ba2e7a2e5bd0" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "a9dfa457f24252bbf62ff0ed17d0efcbff66b85a805c3d4d3eb087d91864805b" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "2f47856440cdff2d5fe98c33e8b0cf7d55a5c27d72f66a028afb9480483b25d1" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 11 ], "room.kitchen", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ] ] ], "contact": { "fill": 152, "excavation": 0, "sitework_occupied_cells": 158, "replaced_cells": 155, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "f6d898f6bd30749f8131b00f76c23ba1a066d484cf36925efa1978a9ff25813f", "bearing_fill": 3 }, "blocks": 35053, "nodes": 182, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 4.68 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 6.3286 }
adaptation-27建造成功3633877154
查看数据
{ "label": "adaptation-27", "inputs": { "environment_seed": 6, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.045, 0, 4 ] }, { "op": "wave", "args": [ 0.4, 0.13, 0.11, 0.6542444831229557 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0.4 ] } ] }, 2, 7 ] }, "water": 5, "digest": "8d11645017e24042cbb11bc5adb63ce365eadbfb6f13163e43c4ebfb0c4338d9", "held_out_composition": false, "client": "high_house", "structure_seed": 3 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "6db6633f80fef736929c551c2aeecd4dcd1f9197b8d6e4e385887b7b75ea0a75", "principal_signature": "dec4248672e50f034b899ba4c1c3ea254343873a1bf04f7277f10c94b83c40e1", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 9, 8, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "68aa18ee96cacfbcf5a80323844f1ca6c243f7391ab76954948a4291f5978e49" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [ "north" ], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 6, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ] ] ], "contact": { "fill": 64, "excavation": 0, "sitework_occupied_cells": 70, "replaced_cells": 67, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "83048d139205f241eb0779a4f4d0f99bee6b2b26701716c2691f723782d808c4", "bearing_fill": 2 }, "blocks": 33877, "nodes": 154, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 2.04 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.0375 }
adaptation-28建造成功0738044151
查看数据
{ "label": "adaptation-28", "inputs": { "environment_seed": 7, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.035, 4 ] }, { "op": "wave", "args": [ 0, 0.13, 0.11, 0.4943872051732314 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0 ] } ] }, 2, 7 ] }, "water": 6, "digest": "9fdea9ccf78cba68cae1b77dabb0f36997911b40e650447bbb7bf3b45b3baa16", "held_out_composition": false, "client": "hillside_home", "structure_seed": 0 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "ede1d8fe609ab1aa2e649beb02892bd47df4c51035fc03c56e2f86c1a19f6d95", "principal_signature": "424f119d69bc0c7fd7c780d05d3cac5c90a6c4453f2f51e47c5f22275a57769c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 24, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "4eca5ec0b51e81dc4b137b4e23a8ae934bbb30c5b7a8e7320bc13374dbd7f3f2" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "3d87f3596d36ab29f0a3d5dae1efa1c45f583f4100c478decb28c7f7dbbb2192" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 180, "excavation": 0, "sitework_occupied_cells": 192, "replaced_cells": 189, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "386c566c78ebafc637086d9ad8bb030a5f7fde883a97942f6da90526c79a6795", "bearing_fill": 3 }, "blocks": 38044, "nodes": 151, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 5.7 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 3.7835 }
adaptation-29建造成功1737955156
查看数据
{ "label": "adaptation-29", "inputs": { "environment_seed": 7, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.035, 4 ] }, { "op": "wave", "args": [ 0, 0.13, 0.11, 0.4943872051732314 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0 ] } ] }, 2, 7 ] }, "water": 6, "digest": "9fdea9ccf78cba68cae1b77dabb0f36997911b40e650447bbb7bf3b45b3baa16", "held_out_composition": false, "client": "hillside_home", "structure_seed": 1 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "0ef2f54b32810b618e7c573e5564190a5da706a1392bdc53daf1064c944e0223", "principal_signature": "e6ec51fd89f0d909ff361c8ea2f25ef3e8b495630a5a1a142113c26aae92fb67", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "69b463e96d153e9c5b98d5601ff80cf76b85fea4f55ecb82c1ea5be2fd54cf8d" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "463d013ac6098294317ae97a95bf3a10ba3fdd2f26ebe73f2f5dd2680567dad3" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 180, "excavation": 0, "sitework_occupied_cells": 192, "replaced_cells": 189, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "386c566c78ebafc637086d9ad8bb030a5f7fde883a97942f6da90526c79a6795", "bearing_fill": 3 }, "blocks": 37955, "nodes": 156, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 5.7 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.7826 }
adaptation-30建造成功2738164182
查看数据
{ "label": "adaptation-30", "inputs": { "environment_seed": 7, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.035, 4 ] }, { "op": "wave", "args": [ 0, 0.13, 0.11, 0.4943872051732314 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0 ] } ] }, 2, 7 ] }, "water": 6, "digest": "9fdea9ccf78cba68cae1b77dabb0f36997911b40e650447bbb7bf3b45b3baa16", "held_out_composition": false, "client": "gabled_hall", "structure_seed": 2 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "43e3291bc68a3f0041ff625ef588583951e8ae3da5ac5102dd47cd0b232d8d1d", "principal_signature": "46296a86deb794497cea29b12c794944a69dbbf653ae5ca845e8bfc8e4366d24", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "3cc8878ed83cb1017e335cc15e26dc5e9a699e7acd4efbbb7fc4ba2e7a2e5bd0" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "a9dfa457f24252bbf62ff0ed17d0efcbff66b85a805c3d4d3eb087d91864805b" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "2f47856440cdff2d5fe98c33e8b0cf7d55a5c27d72f66a028afb9480483b25d1" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 11 ], "room.kitchen", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ] ] ], "contact": { "fill": 201, "excavation": 0, "sitework_occupied_cells": 213, "replaced_cells": 210, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "7c0dc86b803fa8bafa3c68abcc38c0872c67072c4866f333e062ceb8508659bb", "bearing_fill": 3 }, "blocks": 38164, "nodes": 182, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 6.33 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.81 }
adaptation-31建造成功3736988154
查看数据
{ "label": "adaptation-31", "inputs": { "environment_seed": 7, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.035, 4 ] }, { "op": "wave", "args": [ 0, 0.13, 0.11, 0.4943872051732314 ] } ] }, { "op": "radial", "args": [ 7, 8, 22, 0 ] } ] }, 2, 7 ] }, "water": 6, "digest": "9fdea9ccf78cba68cae1b77dabb0f36997911b40e650447bbb7bf3b45b3baa16", "held_out_composition": false, "client": "high_house", "structure_seed": 3 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "90458580e4040f83207bb0f667af7d62b6a32cb9faf8b43e42d1854534280d6f", "principal_signature": "dec4248672e50f034b899ba4c1c3ea254343873a1bf04f7277f10c94b83c40e1", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 9, 8, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "68aa18ee96cacfbcf5a80323844f1ca6c243f7391ab76954948a4291f5978e49" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [ "north" ], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 6, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ] ] ], "contact": { "fill": 105, "excavation": 0, "sitework_occupied_cells": 117, "replaced_cells": 114, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "0d9746456de3366089412138642bc61869856f0eec23f52196b03eeb72aeaa9c", "bearing_fill": 2 }, "blocks": 36988, "nodes": 154, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 3.45 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.6479 }
adaptation-32建造成功0830461155
查看数据
{ "label": "adaptation-32", "inputs": { "environment_seed": 8, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0, 4 ] }, { "op": "wave", "args": [ 0.4, 0.13, 0.11, 1.4906793537687184 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": null, "digest": "2e63123e44f63ed6bb126e0206d18e6702dc1de0fcb11befe7fb54245248c2a8", "held_out_composition": true, "client": "hillside_home", "structure_seed": 0 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "25ac8c0844e1303a3beb1eda21de9060e5a61e6f6c59e4a1ced34ffbab429a38", "principal_signature": "424f119d69bc0c7fd7c780d05d3cac5c90a6c4453f2f51e47c5f22275a57769c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 24, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "4eca5ec0b51e81dc4b137b4e23a8ae934bbb30c5b7a8e7320bc13374dbd7f3f2" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "3d87f3596d36ab29f0a3d5dae1efa1c45f583f4100c478decb28c7f7dbbb2192" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 40, "excavation": 0, "sitework_occupied_cells": 46, "replaced_cells": 3, "new_sitework_cells": 43, "strategies": [ "stepped" ], "signature": "2479400e5e09b4a3a99ac253ae9a04f853f7c3f9d86fa205dac8d8abd3fd9342", "bearing_fill": 1 }, "blocks": 30461, "nodes": 155, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.52 ], [ 1, 0.92 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 4.1365 }
adaptation-33建造成功1830339155
查看数据
{ "label": "adaptation-33", "inputs": { "environment_seed": 8, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0, 4 ] }, { "op": "wave", "args": [ 0.4, 0.13, 0.11, 1.4906793537687184 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": null, "digest": "2e63123e44f63ed6bb126e0206d18e6702dc1de0fcb11befe7fb54245248c2a8", "held_out_composition": true, "client": "hillside_home", "structure_seed": 1 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "ddf37ac0914d46c915061a7e0bf27346a7b312d00f9ad285c5a2dc67e2aaacca", "principal_signature": "e6ec51fd89f0d909ff361c8ea2f25ef3e8b495630a5a1a142113c26aae92fb67", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "69b463e96d153e9c5b98d5601ff80cf76b85fea4f55ecb82c1ea5be2fd54cf8d" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "463d013ac6098294317ae97a95bf3a10ba3fdd2f26ebe73f2f5dd2680567dad3" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 40, "excavation": 0, "sitework_occupied_cells": 46, "replaced_cells": 3, "new_sitework_cells": 43, "strategies": [ "stepped" ], "signature": "2479400e5e09b4a3a99ac253ae9a04f853f7c3f9d86fa205dac8d8abd3fd9342", "bearing_fill": 1 }, "blocks": 30339, "nodes": 155, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.52 ], [ 1, 0.92 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 4.2579 }
adaptation-34建造成功2830602183
查看数据
{ "label": "adaptation-34", "inputs": { "environment_seed": 8, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0, 4 ] }, { "op": "wave", "args": [ 0.4, 0.13, 0.11, 1.4906793537687184 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": null, "digest": "2e63123e44f63ed6bb126e0206d18e6702dc1de0fcb11befe7fb54245248c2a8", "held_out_composition": true, "client": "gabled_hall", "structure_seed": 2 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "bbe52033561bf3dd18289ee5b1d4554cb6a1acb69cd827620d91f05cb37c556a", "principal_signature": "46296a86deb794497cea29b12c794944a69dbbf653ae5ca845e8bfc8e4366d24", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "3cc8878ed83cb1017e335cc15e26dc5e9a699e7acd4efbbb7fc4ba2e7a2e5bd0" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "a9dfa457f24252bbf62ff0ed17d0efcbff66b85a805c3d4d3eb087d91864805b" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "2f47856440cdff2d5fe98c33e8b0cf7d55a5c27d72f66a028afb9480483b25d1" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 11 ], "room.kitchen", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ] ] ], "contact": { "fill": 84, "excavation": 0, "sitework_occupied_cells": 90, "replaced_cells": 3, "new_sitework_cells": 87, "strategies": [ "stepped" ], "signature": "964daf58bf2502bfc352524d9988d6b32a90dbe9eefbf021d835120162e96e84", "bearing_fill": 1 }, "blocks": 30602, "nodes": 183, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.96 ], [ 1, 1.27 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 4.2152 }
adaptation-35建造成功3829354154
查看数据
{ "label": "adaptation-35", "inputs": { "environment_seed": 8, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0, 4 ] }, { "op": "wave", "args": [ 0.4, 0.13, 0.11, 1.4906793537687184 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": null, "digest": "2e63123e44f63ed6bb126e0206d18e6702dc1de0fcb11befe7fb54245248c2a8", "held_out_composition": true, "client": "high_house", "structure_seed": 3 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "8203a63f908cb254f698930f2e4dcc04b2754ec7075fbc5aa0397fa18127d014", "principal_signature": "dec4248672e50f034b899ba4c1c3ea254343873a1bf04f7277f10c94b83c40e1", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 9, 8, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "68aa18ee96cacfbcf5a80323844f1ca6c243f7391ab76954948a4291f5978e49" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [ "north" ], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 6, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ] ] ], "contact": { "fill": 24, "excavation": 0, "sitework_occupied_cells": 30, "replaced_cells": 3, "new_sitework_cells": 27, "strategies": [ "stepped" ], "signature": "413e4d26c3d97b6be9e90e464620a3c2d3a1742b6dfc9c19f722184429905df4", "bearing_fill": 1 }, "blocks": 29354, "nodes": 154, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.36 ], [ 1, 0.71 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/core/adaptation-35.litematic", "audit": { "queries": 137, "inventories": 22, "nodes": 154, "digest": "8203a63f908cb254f698930f2e4dcc04b2754ec7075fbc5aa0397fa18127d014" }, "seconds": 5.2031 }
adaptation-36建造成功0938044151
查看数据
{ "label": "adaptation-36", "inputs": { "environment_seed": 9, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, -0.035, 4 ] }, { "op": "wave", "args": [ 0, 0.13, 0.11, 5.129876042788569 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.035, 0, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": 6, "digest": "b1ad2b18771e9590495fad037971e5ae73d8c9362c543546a2ca47b773efe6c0", "held_out_composition": true, "client": "hillside_home", "structure_seed": 0 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "f086f04d503ef226169f4caa287978ff562aede4ff87647bb6cd2dddb1a2e052", "principal_signature": "424f119d69bc0c7fd7c780d05d3cac5c90a6c4453f2f51e47c5f22275a57769c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 24, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "4eca5ec0b51e81dc4b137b4e23a8ae934bbb30c5b7a8e7320bc13374dbd7f3f2" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "3d87f3596d36ab29f0a3d5dae1efa1c45f583f4100c478decb28c7f7dbbb2192" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 205, "excavation": 0, "sitework_occupied_cells": 214, "replaced_cells": 211, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "0afef37099a081ec8f36a5d41d07bfee1349e1ce1c325f5f7254b2c86901f326", "bearing_fill": 3 }, "blocks": 38044, "nodes": 151, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 6.36 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.7041 }
adaptation-37建造成功1937955156
查看数据
{ "label": "adaptation-37", "inputs": { "environment_seed": 9, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, -0.035, 4 ] }, { "op": "wave", "args": [ 0, 0.13, 0.11, 5.129876042788569 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.035, 0, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": 6, "digest": "b1ad2b18771e9590495fad037971e5ae73d8c9362c543546a2ca47b773efe6c0", "held_out_composition": true, "client": "hillside_home", "structure_seed": 1 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "f488980d16e9139c5e2057e59e4ea0e3aeadc23d061bedc1decc821ea91abc77", "principal_signature": "e6ec51fd89f0d909ff361c8ea2f25ef3e8b495630a5a1a142113c26aae92fb67", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "69b463e96d153e9c5b98d5601ff80cf76b85fea4f55ecb82c1ea5be2fd54cf8d" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "463d013ac6098294317ae97a95bf3a10ba3fdd2f26ebe73f2f5dd2680567dad3" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 205, "excavation": 0, "sitework_occupied_cells": 214, "replaced_cells": 211, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "0afef37099a081ec8f36a5d41d07bfee1349e1ce1c325f5f7254b2c86901f326", "bearing_fill": 3 }, "blocks": 37955, "nodes": 156, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 6.36 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.5995 }
adaptation-38建造成功2938164182
查看数据
{ "label": "adaptation-38", "inputs": { "environment_seed": 9, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, -0.035, 4 ] }, { "op": "wave", "args": [ 0, 0.13, 0.11, 5.129876042788569 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.035, 0, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": 6, "digest": "b1ad2b18771e9590495fad037971e5ae73d8c9362c543546a2ca47b773efe6c0", "held_out_composition": true, "client": "gabled_hall", "structure_seed": 2 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "36434dcf6ed90acfb922ae96adafc44d6f6e16660f3bd1191f2c88e2a1cc82cf", "principal_signature": "46296a86deb794497cea29b12c794944a69dbbf653ae5ca845e8bfc8e4366d24", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "3cc8878ed83cb1017e335cc15e26dc5e9a699e7acd4efbbb7fc4ba2e7a2e5bd0" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "a9dfa457f24252bbf62ff0ed17d0efcbff66b85a805c3d4d3eb087d91864805b" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "2f47856440cdff2d5fe98c33e8b0cf7d55a5c27d72f66a028afb9480483b25d1" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 11 ], "room.kitchen", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ] ] ], "contact": { "fill": 256, "excavation": 0, "sitework_occupied_cells": 265, "replaced_cells": 262, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "0da5b1a01a81e3f180bf7fe6d46e5d7b0e32ea9790f4ae3d4fa247313b0267d1", "bearing_fill": 3 }, "blocks": 38164, "nodes": 182, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 7.89 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 3.8324 }
adaptation-39建造成功3936988154
查看数据
{ "label": "adaptation-39", "inputs": { "environment_seed": 9, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, -0.035, 4 ] }, { "op": "wave", "args": [ 0, 0.13, 0.11, 5.129876042788569 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.035, 0, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": 6, "digest": "b1ad2b18771e9590495fad037971e5ae73d8c9362c543546a2ca47b773efe6c0", "held_out_composition": true, "client": "high_house", "structure_seed": 3 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "8d7bc9f53885cda9e161813806ce43ddd3b98d4dfffd1ac5766941248f64eada", "principal_signature": "dec4248672e50f034b899ba4c1c3ea254343873a1bf04f7277f10c94b83c40e1", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 9, 8, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "68aa18ee96cacfbcf5a80323844f1ca6c243f7391ab76954948a4291f5978e49" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [ "north" ], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 6, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ] ] ], "contact": { "fill": 109, "excavation": 0, "sitework_occupied_cells": 118, "replaced_cells": 115, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "f37e67a01fb0f3f69f56c8c83d54cde3c43c46aec2eab7f4b00f692d270d12b4", "bearing_fill": 2 }, "blocks": 36988, "nodes": 154, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 3.48 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.2897 }
adaptation-40建造成功01030829155
查看数据
{ "label": "adaptation-40", "inputs": { "environment_seed": 10, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.035, 4 ] }, { "op": "wave", "args": [ 0.4, 0.13, 0.11, 4.544802917156937 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.035, 0, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": null, "digest": "42908eba4ec4346b89d7b0a3d64976055aeeb4f3cfbe89ebf337af41ba8f597e", "held_out_composition": true, "client": "hillside_home", "structure_seed": 0 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "9f2cd09a3b21e4bb3d29dff6607535664ba3fac7cdcec3245d7fdee464dcf82e", "principal_signature": "424f119d69bc0c7fd7c780d05d3cac5c90a6c4453f2f51e47c5f22275a57769c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 24, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "4eca5ec0b51e81dc4b137b4e23a8ae934bbb30c5b7a8e7320bc13374dbd7f3f2" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "3d87f3596d36ab29f0a3d5dae1efa1c45f583f4100c478decb28c7f7dbbb2192" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 67, "excavation": 0, "sitework_occupied_cells": 74, "replaced_cells": 1, "new_sitework_cells": 73, "strategies": [ "stepped" ], "signature": "a7a78fb73ef80a289270539975e22a2811a6137afbcee1c966c2c9d8f997967f", "bearing_fill": 1 }, "blocks": 30829, "nodes": 155, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.76 ], [ 1, 1.06 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 5.714 }
adaptation-41建造成功11030707155
查看数据
{ "label": "adaptation-41", "inputs": { "environment_seed": 10, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.035, 4 ] }, { "op": "wave", "args": [ 0.4, 0.13, 0.11, 4.544802917156937 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.035, 0, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": null, "digest": "42908eba4ec4346b89d7b0a3d64976055aeeb4f3cfbe89ebf337af41ba8f597e", "held_out_composition": true, "client": "hillside_home", "structure_seed": 1 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "4ebabcb58adb499934d72e4aa9c6e4329f0c463ac529319d841b9e6713e59fcb", "principal_signature": "e6ec51fd89f0d909ff361c8ea2f25ef3e8b495630a5a1a142113c26aae92fb67", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "69b463e96d153e9c5b98d5601ff80cf76b85fea4f55ecb82c1ea5be2fd54cf8d" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "463d013ac6098294317ae97a95bf3a10ba3fdd2f26ebe73f2f5dd2680567dad3" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 67, "excavation": 0, "sitework_occupied_cells": 74, "replaced_cells": 1, "new_sitework_cells": 73, "strategies": [ "stepped" ], "signature": "a7a78fb73ef80a289270539975e22a2811a6137afbcee1c966c2c9d8f997967f", "bearing_fill": 1 }, "blocks": 30707, "nodes": 155, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.76 ], [ 1, 1.06 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 4.2376 }
adaptation-42建造成功21030906183
查看数据
{ "label": "adaptation-42", "inputs": { "environment_seed": 10, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.035, 4 ] }, { "op": "wave", "args": [ 0.4, 0.13, 0.11, 4.544802917156937 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.035, 0, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": null, "digest": "42908eba4ec4346b89d7b0a3d64976055aeeb4f3cfbe89ebf337af41ba8f597e", "held_out_composition": true, "client": "gabled_hall", "structure_seed": 2 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "e01788477c42b47b91f039438dd323975ac76b176c762637d1874b2a94f0c612", "principal_signature": "46296a86deb794497cea29b12c794944a69dbbf653ae5ca845e8bfc8e4366d24", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "3cc8878ed83cb1017e335cc15e26dc5e9a699e7acd4efbbb7fc4ba2e7a2e5bd0" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "a9dfa457f24252bbf62ff0ed17d0efcbff66b85a805c3d4d3eb087d91864805b" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "2f47856440cdff2d5fe98c33e8b0cf7d55a5c27d72f66a028afb9480483b25d1" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 11 ], "room.kitchen", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ] ] ], "contact": { "fill": 47, "excavation": 0, "sitework_occupied_cells": 54, "replaced_cells": 1, "new_sitework_cells": 53, "strategies": [ "stepped" ], "signature": "519ec2cba7eea84018df6372e79e703778cd9990ec187b6804050cf1638c3b20", "bearing_fill": 0 }, "blocks": 30906, "nodes": 183, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.56 ], [ 1, 0.81 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 4.1855 }
adaptation-43建造成功31029701154
查看数据
{ "label": "adaptation-43", "inputs": { "environment_seed": 10, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.035, 4 ] }, { "op": "wave", "args": [ 0.4, 0.13, 0.11, 4.544802917156937 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.035, 0, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": null, "digest": "42908eba4ec4346b89d7b0a3d64976055aeeb4f3cfbe89ebf337af41ba8f597e", "held_out_composition": true, "client": "high_house", "structure_seed": 3 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "a9827365f0e987da193fa8dbda27179bef34bf03e8ee1202aad03cdd5d80e04e", "principal_signature": "dec4248672e50f034b899ba4c1c3ea254343873a1bf04f7277f10c94b83c40e1", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 9, 8, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "68aa18ee96cacfbcf5a80323844f1ca6c243f7391ab76954948a4291f5978e49" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [ "north" ], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 6, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ] ] ], "contact": { "fill": 33, "excavation": 0, "sitework_occupied_cells": 39, "replaced_cells": 3, "new_sitework_cells": 36, "strategies": [ "stepped" ], "signature": "8865f7bb2eb8cda3204332725a05b3a0e416d6721c290a01464d3257e9255a4a", "bearing_fill": 1 }, "blocks": 29701, "nodes": 154, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.45 ], [ 1, 0.74 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.4165 }
adaptation-44建造成功01134933151
查看数据
{ "label": "adaptation-44", "inputs": { "environment_seed": 11, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.045, -0.035, 4 ] }, { "op": "wave", "args": [ 0.8, 0.13, 0.11, 2.1696793309977784 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.035, -0.045, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": 5, "digest": "ccacffc044d46bc8047e50542aaf10b28a68de02a9d472912996fbe30ebe01d2", "held_out_composition": true, "client": "hillside_home", "structure_seed": 0 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "0f70c0cd202472f8f90c3585fca30c6873cfff9321c6c58f4d1eac8e27a7d96c", "principal_signature": "424f119d69bc0c7fd7c780d05d3cac5c90a6c4453f2f51e47c5f22275a57769c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 24, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "4eca5ec0b51e81dc4b137b4e23a8ae934bbb30c5b7a8e7320bc13374dbd7f3f2" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "3d87f3596d36ab29f0a3d5dae1efa1c45f583f4100c478decb28c7f7dbbb2192" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 135, "excavation": 0, "sitework_occupied_cells": 141, "replaced_cells": 138, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "7de531d181925ba6e83ebecf4e2740498e54d4b6027e17568c7cc4148c6f50f0", "bearing_fill": 3 }, "blocks": 34933, "nodes": 151, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 4.17 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.2306 }
adaptation-45建造成功11134844156
查看数据
{ "label": "adaptation-45", "inputs": { "environment_seed": 11, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.045, -0.035, 4 ] }, { "op": "wave", "args": [ 0.8, 0.13, 0.11, 2.1696793309977784 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.035, -0.045, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": 5, "digest": "ccacffc044d46bc8047e50542aaf10b28a68de02a9d472912996fbe30ebe01d2", "held_out_composition": true, "client": "hillside_home", "structure_seed": 1 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "64bdbc627b1fa472ea47cf2c1a92cea9a3d93907f2d750395af881f52feb0ede", "principal_signature": "e6ec51fd89f0d909ff361c8ea2f25ef3e8b495630a5a1a142113c26aae92fb67", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "69b463e96d153e9c5b98d5601ff80cf76b85fea4f55ecb82c1ea5be2fd54cf8d" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "463d013ac6098294317ae97a95bf3a10ba3fdd2f26ebe73f2f5dd2680567dad3" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 135, "excavation": 0, "sitework_occupied_cells": 141, "replaced_cells": 138, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "7de531d181925ba6e83ebecf4e2740498e54d4b6027e17568c7cc4148c6f50f0", "bearing_fill": 3 }, "blocks": 34844, "nodes": 156, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 4.17 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.201 }
adaptation-46建造成功21135053182
查看数据
{ "label": "adaptation-46", "inputs": { "environment_seed": 11, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.045, -0.035, 4 ] }, { "op": "wave", "args": [ 0.8, 0.13, 0.11, 2.1696793309977784 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.035, -0.045, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": 5, "digest": "ccacffc044d46bc8047e50542aaf10b28a68de02a9d472912996fbe30ebe01d2", "held_out_composition": true, "client": "gabled_hall", "structure_seed": 2 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "0f31c1badb66c559ee2a9cf3c62a3dc8618cc2810012b613a4a36726729ac2ca", "principal_signature": "46296a86deb794497cea29b12c794944a69dbbf653ae5ca845e8bfc8e4366d24", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "3cc8878ed83cb1017e335cc15e26dc5e9a699e7acd4efbbb7fc4ba2e7a2e5bd0" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "a9dfa457f24252bbf62ff0ed17d0efcbff66b85a805c3d4d3eb087d91864805b" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "2f47856440cdff2d5fe98c33e8b0cf7d55a5c27d72f66a028afb9480483b25d1" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 11 ], "room.kitchen", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ] ] ], "contact": { "fill": 192, "excavation": 0, "sitework_occupied_cells": 198, "replaced_cells": 195, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "a167157c62c21831e4d05a4c0174c8b355f4b947b2b82736f613f944ba0f6293", "bearing_fill": 3 }, "blocks": 35053, "nodes": 182, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 5.88 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.2751 }
adaptation-47建造成功31133877154
查看数据
{ "label": "adaptation-47", "inputs": { "environment_seed": 11, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.045, -0.035, 4 ] }, { "op": "wave", "args": [ 0.8, 0.13, 0.11, 2.1696793309977784 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.035, -0.045, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": 5, "digest": "ccacffc044d46bc8047e50542aaf10b28a68de02a9d472912996fbe30ebe01d2", "held_out_composition": true, "client": "high_house", "structure_seed": 3 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "58a9ef6f0ac5b8330e49c1b3943ccb98979c50df4b1c0e312a5b751e490ffb12", "principal_signature": "dec4248672e50f034b899ba4c1c3ea254343873a1bf04f7277f10c94b83c40e1", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 9, 8, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "68aa18ee96cacfbcf5a80323844f1ca6c243f7391ab76954948a4291f5978e49" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [ "north" ], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 6, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ] ] ], "contact": { "fill": 73, "excavation": 0, "sitework_occupied_cells": 79, "replaced_cells": 76, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "a41f52908bd3bbebc2e2bc08214a90ebb86957304464ff536e155e09991c58ee", "bearing_fill": 2 }, "blocks": 33877, "nodes": 154, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 2.31 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.2991 }
adaptation-48建造成功01234933151
查看数据
{ "label": "adaptation-48", "inputs": { "environment_seed": 12, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.035, 4 ] }, { "op": "wave", "args": [ 0.4, 0.13, 0.11, 1.3321687906112092 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.035, 0, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": 5, "digest": "e4ac69d47cbe020b99a63996c2d154f16254095a539a9b3e62dfb8c67d621cf1", "held_out_composition": true, "client": "hillside_home", "structure_seed": 0 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "9d1da15a460015f5b977741e3547ed64fa570620c20cd3436176a513031249e0", "principal_signature": "424f119d69bc0c7fd7c780d05d3cac5c90a6c4453f2f51e47c5f22275a57769c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 24, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "4eca5ec0b51e81dc4b137b4e23a8ae934bbb30c5b7a8e7320bc13374dbd7f3f2" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "3d87f3596d36ab29f0a3d5dae1efa1c45f583f4100c478decb28c7f7dbbb2192" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 137, "excavation": 0, "sitework_occupied_cells": 144, "replaced_cells": 141, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "1be5a9b8c5feaa4af98fb24ba60e9c025a55e2d0bc08e0393558a505a7949eeb", "bearing_fill": 3 }, "blocks": 34933, "nodes": 151, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 4.26 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.2429 }
adaptation-49建造成功11234844156
查看数据
{ "label": "adaptation-49", "inputs": { "environment_seed": 12, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.035, 4 ] }, { "op": "wave", "args": [ 0.4, 0.13, 0.11, 1.3321687906112092 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.035, 0, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": 5, "digest": "e4ac69d47cbe020b99a63996c2d154f16254095a539a9b3e62dfb8c67d621cf1", "held_out_composition": true, "client": "hillside_home", "structure_seed": 1 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "6e3ceb3d367a8c306b3e1203fcd12aaeb0ca0e1d472237f7dc7e75053847555f", "principal_signature": "e6ec51fd89f0d909ff361c8ea2f25ef3e8b495630a5a1a142113c26aae92fb67", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "69b463e96d153e9c5b98d5601ff80cf76b85fea4f55ecb82c1ea5be2fd54cf8d" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "463d013ac6098294317ae97a95bf3a10ba3fdd2f26ebe73f2f5dd2680567dad3" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 137, "excavation": 0, "sitework_occupied_cells": 144, "replaced_cells": 141, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "1be5a9b8c5feaa4af98fb24ba60e9c025a55e2d0bc08e0393558a505a7949eeb", "bearing_fill": 3 }, "blocks": 34844, "nodes": 156, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 4.26 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.8592 }
adaptation-50建造成功21235053182
查看数据
{ "label": "adaptation-50", "inputs": { "environment_seed": 12, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.035, 4 ] }, { "op": "wave", "args": [ 0.4, 0.13, 0.11, 1.3321687906112092 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.035, 0, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": 5, "digest": "e4ac69d47cbe020b99a63996c2d154f16254095a539a9b3e62dfb8c67d621cf1", "held_out_composition": true, "client": "gabled_hall", "structure_seed": 2 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "7e532bde99ed2d2335b68e91b2af1f53e72f730f9fb7c51a2b5cd52f61cc843d", "principal_signature": "46296a86deb794497cea29b12c794944a69dbbf653ae5ca845e8bfc8e4366d24", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "3cc8878ed83cb1017e335cc15e26dc5e9a699e7acd4efbbb7fc4ba2e7a2e5bd0" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "a9dfa457f24252bbf62ff0ed17d0efcbff66b85a805c3d4d3eb087d91864805b" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "2f47856440cdff2d5fe98c33e8b0cf7d55a5c27d72f66a028afb9480483b25d1" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 11 ], "room.kitchen", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ] ] ], "contact": { "fill": 127, "excavation": 0, "sitework_occupied_cells": 134, "replaced_cells": 131, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "71ece5bfffae3449f4a5bf8070f22af12f848c50cc09a04c6aafd9eaed7ee5ad", "bearing_fill": 3 }, "blocks": 35053, "nodes": 182, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 3.96 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.8016 }
adaptation-51建造成功31233877154
查看数据
{ "label": "adaptation-51", "inputs": { "environment_seed": 12, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.035, 4 ] }, { "op": "wave", "args": [ 0.4, 0.13, 0.11, 1.3321687906112092 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.035, 0, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": 5, "digest": "e4ac69d47cbe020b99a63996c2d154f16254095a539a9b3e62dfb8c67d621cf1", "held_out_composition": true, "client": "high_house", "structure_seed": 3 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "db61797f96455b63501ffa548c210e2804cc65a9658bcf890b77ff57ce69c1b1", "principal_signature": "dec4248672e50f034b899ba4c1c3ea254343873a1bf04f7277f10c94b83c40e1", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 9, 8, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "68aa18ee96cacfbcf5a80323844f1ca6c243f7391ab76954948a4291f5978e49" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [ "north" ], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 6, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ] ] ], "contact": { "fill": 68, "excavation": 0, "sitework_occupied_cells": 74, "replaced_cells": 71, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "c42b2e523f513d8eab2144419045d97dc9319033120906040c23c2d92a9cb5c0", "bearing_fill": 2 }, "blocks": 33877, "nodes": 154, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 2.16 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.0408 }
adaptation-52建造成功01332317155
查看数据
{ "label": "adaptation-52", "inputs": { "environment_seed": 13, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.045, 0, 4 ] }, { "op": "wave", "args": [ 0.8, 0.13, 0.11, 3.358718313814367 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.045, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": null, "digest": "0d5e960996b34fcec7d4b138113eb0cb25b7d2096636fd96b2fb104c0007d1ea", "held_out_composition": true, "client": "hillside_home", "structure_seed": 0 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "bfac2f74a693a061990f4d171846d05dae8dffb59196038e08c2a04a0c778437", "principal_signature": "424f119d69bc0c7fd7c780d05d3cac5c90a6c4453f2f51e47c5f22275a57769c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 24, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "4eca5ec0b51e81dc4b137b4e23a8ae934bbb30c5b7a8e7320bc13374dbd7f3f2" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "3d87f3596d36ab29f0a3d5dae1efa1c45f583f4100c478decb28c7f7dbbb2192" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 0, "excavation": 0, "sitework_occupied_cells": 6, "replaced_cells": 3, "new_sitework_cells": 3, "strategies": [ "stepped" ], "signature": "de4c2a6c9d2752a79195e3ff5b4929bca547a3d6c8ed5cfcab3f7f594e5a45f8", "bearing_fill": 0 }, "blocks": 32317, "nodes": 155, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.12 ], [ 1, 0.52 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.6779 }
adaptation-53建造成功11332195155
查看数据
{ "label": "adaptation-53", "inputs": { "environment_seed": 13, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.045, 0, 4 ] }, { "op": "wave", "args": [ 0.8, 0.13, 0.11, 3.358718313814367 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.045, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": null, "digest": "0d5e960996b34fcec7d4b138113eb0cb25b7d2096636fd96b2fb104c0007d1ea", "held_out_composition": true, "client": "hillside_home", "structure_seed": 1 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "9a80878c9867eb88327d5d6c4f50edcea6472f28f4e87cc864bdbb032d583290", "principal_signature": "e6ec51fd89f0d909ff361c8ea2f25ef3e8b495630a5a1a142113c26aae92fb67", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "69b463e96d153e9c5b98d5601ff80cf76b85fea4f55ecb82c1ea5be2fd54cf8d" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "463d013ac6098294317ae97a95bf3a10ba3fdd2f26ebe73f2f5dd2680567dad3" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 0, "excavation": 0, "sitework_occupied_cells": 6, "replaced_cells": 3, "new_sitework_cells": 3, "strategies": [ "stepped" ], "signature": "de4c2a6c9d2752a79195e3ff5b4929bca547a3d6c8ed5cfcab3f7f594e5a45f8", "bearing_fill": 0 }, "blocks": 32195, "nodes": 155, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.12 ], [ 1, 0.52 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.6614 }
adaptation-54建造成功21332414183
查看数据
{ "label": "adaptation-54", "inputs": { "environment_seed": 13, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.045, 0, 4 ] }, { "op": "wave", "args": [ 0.8, 0.13, 0.11, 3.358718313814367 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.045, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": null, "digest": "0d5e960996b34fcec7d4b138113eb0cb25b7d2096636fd96b2fb104c0007d1ea", "held_out_composition": true, "client": "gabled_hall", "structure_seed": 2 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "d369ad51a588849bbfc8743f0cbb074309cd43fdcd9814f77c5383e9360f7341", "principal_signature": "46296a86deb794497cea29b12c794944a69dbbf653ae5ca845e8bfc8e4366d24", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "3cc8878ed83cb1017e335cc15e26dc5e9a699e7acd4efbbb7fc4ba2e7a2e5bd0" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "a9dfa457f24252bbf62ff0ed17d0efcbff66b85a805c3d4d3eb087d91864805b" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "2f47856440cdff2d5fe98c33e8b0cf7d55a5c27d72f66a028afb9480483b25d1" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 11 ], "room.kitchen", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ] ] ], "contact": { "fill": 0, "excavation": 0, "sitework_occupied_cells": 6, "replaced_cells": 3, "new_sitework_cells": 3, "strategies": [ "stepped" ], "signature": "cca78d91e91dfd946f51e58967315f184d53ed2dd9fbddd7eb63cfff4b7c336d", "bearing_fill": 0 }, "blocks": 32414, "nodes": 183, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.12 ], [ 1, 0.52 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.6929 }
adaptation-55建造成功31331226154
查看数据
{ "label": "adaptation-55", "inputs": { "environment_seed": 13, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.045, 0, 4 ] }, { "op": "wave", "args": [ 0.8, 0.13, 0.11, 3.358718313814367 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.045, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": null, "digest": "0d5e960996b34fcec7d4b138113eb0cb25b7d2096636fd96b2fb104c0007d1ea", "held_out_composition": true, "client": "high_house", "structure_seed": 3 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "d3ecee65f664ac6812ef6224c3588ecc98736f6689789a0f148e0ceea0ff7a0c", "principal_signature": "dec4248672e50f034b899ba4c1c3ea254343873a1bf04f7277f10c94b83c40e1", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 9, 8, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "68aa18ee96cacfbcf5a80323844f1ca6c243f7391ab76954948a4291f5978e49" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [ "north" ], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 6, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ] ] ], "contact": { "fill": 0, "excavation": 0, "sitework_occupied_cells": 6, "replaced_cells": 3, "new_sitework_cells": 3, "strategies": [ "stepped" ], "signature": "cf7b488deddbabdfc1cd4a449f672c728a32364891b571911cac52cb174eceeb", "bearing_fill": 0 }, "blocks": 31226, "nodes": 154, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.12 ], [ 1, 0.52 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.4837 }
adaptation-56建造成功01434933151
查看数据
{ "label": "adaptation-56", "inputs": { "environment_seed": 14, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.045, -0.035, 4 ] }, { "op": "wave", "args": [ 0, 0.13, 0.11, 2.046650951809069 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.035, -0.045, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": 5, "digest": "77dcc3135313f9633c0dd1c3b6b441f52c7d81e45a15a202ef075e29b912b9a0", "held_out_composition": true, "client": "hillside_home", "structure_seed": 0 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "d9abd860f29efc672d2236869483793e38c1ef856ad1604ed8f09ea14677013f", "principal_signature": "424f119d69bc0c7fd7c780d05d3cac5c90a6c4453f2f51e47c5f22275a57769c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 24, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "4eca5ec0b51e81dc4b137b4e23a8ae934bbb30c5b7a8e7320bc13374dbd7f3f2" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "3d87f3596d36ab29f0a3d5dae1efa1c45f583f4100c478decb28c7f7dbbb2192" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 139, "excavation": 0, "sitework_occupied_cells": 145, "replaced_cells": 142, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "887e7748b1f79ecd0ee98a12d67b60f3c63be34e06ad70ad7126016c2b2e6c40", "bearing_fill": 3 }, "blocks": 34933, "nodes": 151, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 4.29 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.6599 }
adaptation-57建造成功11434844156
查看数据
{ "label": "adaptation-57", "inputs": { "environment_seed": 14, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.045, -0.035, 4 ] }, { "op": "wave", "args": [ 0, 0.13, 0.11, 2.046650951809069 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.035, -0.045, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": 5, "digest": "77dcc3135313f9633c0dd1c3b6b441f52c7d81e45a15a202ef075e29b912b9a0", "held_out_composition": true, "client": "hillside_home", "structure_seed": 1 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "b9cd7dbc44cf5c1bd63981d3a4faa4ef579c410d9683332f5c08fffd7e37e5cd", "principal_signature": "e6ec51fd89f0d909ff361c8ea2f25ef3e8b495630a5a1a142113c26aae92fb67", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "69b463e96d153e9c5b98d5601ff80cf76b85fea4f55ecb82c1ea5be2fd54cf8d" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "463d013ac6098294317ae97a95bf3a10ba3fdd2f26ebe73f2f5dd2680567dad3" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 139, "excavation": 0, "sitework_occupied_cells": 145, "replaced_cells": 142, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "887e7748b1f79ecd0ee98a12d67b60f3c63be34e06ad70ad7126016c2b2e6c40", "bearing_fill": 3 }, "blocks": 34844, "nodes": 156, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 4.29 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.6476 }
adaptation-58建造成功21435053182
查看数据
{ "label": "adaptation-58", "inputs": { "environment_seed": 14, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.045, -0.035, 4 ] }, { "op": "wave", "args": [ 0, 0.13, 0.11, 2.046650951809069 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.035, -0.045, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": 5, "digest": "77dcc3135313f9633c0dd1c3b6b441f52c7d81e45a15a202ef075e29b912b9a0", "held_out_composition": true, "client": "gabled_hall", "structure_seed": 2 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "ceda56c88b4c2fa8110d2b2a38a414b4ae32e5400dd8674fd1be290c2a8ad1ca", "principal_signature": "46296a86deb794497cea29b12c794944a69dbbf653ae5ca845e8bfc8e4366d24", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "3cc8878ed83cb1017e335cc15e26dc5e9a699e7acd4efbbb7fc4ba2e7a2e5bd0" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "a9dfa457f24252bbf62ff0ed17d0efcbff66b85a805c3d4d3eb087d91864805b" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "2f47856440cdff2d5fe98c33e8b0cf7d55a5c27d72f66a028afb9480483b25d1" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 11 ], "room.kitchen", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ] ] ], "contact": { "fill": 196, "excavation": 0, "sitework_occupied_cells": 202, "replaced_cells": 199, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "5b4732dd893c1a7069699d43bcbf773e66ba8f678dd77c55b2ed6fea9eea064f", "bearing_fill": 3 }, "blocks": 35053, "nodes": 182, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 6.0 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.7322 }
adaptation-59建造成功31433877154
查看数据
{ "label": "adaptation-59", "inputs": { "environment_seed": 14, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.045, -0.035, 4 ] }, { "op": "wave", "args": [ 0, 0.13, 0.11, 2.046650951809069 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.035, -0.045, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": 5, "digest": "77dcc3135313f9633c0dd1c3b6b441f52c7d81e45a15a202ef075e29b912b9a0", "held_out_composition": true, "client": "high_house", "structure_seed": 3 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "aa48d5876b67df359d5e25f6595e0ec5c44456020f185870a6ce095cf2381c51", "principal_signature": "dec4248672e50f034b899ba4c1c3ea254343873a1bf04f7277f10c94b83c40e1", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 9, 8, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "68aa18ee96cacfbcf5a80323844f1ca6c243f7391ab76954948a4291f5978e49" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [ "north" ], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 6, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ] ] ], "contact": { "fill": 72, "excavation": 0, "sitework_occupied_cells": 78, "replaced_cells": 75, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "dbd2fd0f8c36451be5cc4fcead2b839e9ccd25530145bf2fee9e81dc0da9a5d8", "bearing_fill": 2 }, "blocks": 33877, "nodes": 154, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 2.28 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 0.9926 }
adaptation-60建造成功01538044151
查看数据
{ "label": "adaptation-60", "inputs": { "environment_seed": 15, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.045, 0, 4 ] }, { "op": "wave", "args": [ 0, 0.13, 0.11, 1.7100020316024998 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.045, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": 6, "digest": "f82bc80879581470cbb4ce26879ddb7913e0620bab298172dc517745febeb208", "held_out_composition": true, "client": "hillside_home", "structure_seed": 0 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "128ab6f71f147c2c3f89116ec31a0d08dd8a07acb55ec74cfc71ff40715dc535", "principal_signature": "424f119d69bc0c7fd7c780d05d3cac5c90a6c4453f2f51e47c5f22275a57769c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 24, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "4eca5ec0b51e81dc4b137b4e23a8ae934bbb30c5b7a8e7320bc13374dbd7f3f2" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "3d87f3596d36ab29f0a3d5dae1efa1c45f583f4100c478decb28c7f7dbbb2192" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 171, "excavation": 0, "sitework_occupied_cells": 180, "replaced_cells": 177, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "77ddf64f03612e253cc5de865007c416af79da3e9d2d923163c3e6a6783e75aa", "bearing_fill": 3 }, "blocks": 38044, "nodes": 151, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 5.34 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/core/adaptation-60.litematic", "audit": { "queries": 133, "inventories": 54, "nodes": 151, "digest": "128ab6f71f147c2c3f89116ec31a0d08dd8a07acb55ec74cfc71ff40715dc535" }, "seconds": 3.8001 }
adaptation-61建造成功11537955156
查看数据
{ "label": "adaptation-61", "inputs": { "environment_seed": 15, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.045, 0, 4 ] }, { "op": "wave", "args": [ 0, 0.13, 0.11, 1.7100020316024998 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.045, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": 6, "digest": "f82bc80879581470cbb4ce26879ddb7913e0620bab298172dc517745febeb208", "held_out_composition": true, "client": "hillside_home", "structure_seed": 1 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "2be1b2d57942f3a74bea0ece4c2c17ef2a87df1ae9473d8880cd0fe28e0d8e59", "principal_signature": "e6ec51fd89f0d909ff361c8ea2f25ef3e8b495630a5a1a142113c26aae92fb67", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 13 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "69b463e96d153e9c5b98d5601ff80cf76b85fea4f55ecb82c1ea5be2fd54cf8d" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "463d013ac6098294317ae97a95bf3a10ba3fdd2f26ebe73f2f5dd2680567dad3" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 171, "excavation": 0, "sitework_occupied_cells": 180, "replaced_cells": 177, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "77ddf64f03612e253cc5de865007c416af79da3e9d2d923163c3e6a6783e75aa", "bearing_fill": 3 }, "blocks": 37955, "nodes": 156, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 5.34 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.6564 }
adaptation-62建造成功21538164182
查看数据
{ "label": "adaptation-62", "inputs": { "environment_seed": 15, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.045, 0, 4 ] }, { "op": "wave", "args": [ 0, 0.13, 0.11, 1.7100020316024998 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.045, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": 6, "digest": "f82bc80879581470cbb4ce26879ddb7913e0620bab298172dc517745febeb208", "held_out_composition": true, "client": "gabled_hall", "structure_seed": 2 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "db8107f1ea9d5d50eb1a6b1bba8f635122b44d2aa315d8e7ce9d75e3c5c27f46", "principal_signature": "46296a86deb794497cea29b12c794944a69dbbf653ae5ca845e8bfc8e4366d24", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "3cc8878ed83cb1017e335cc15e26dc5e9a699e7acd4efbbb7fc4ba2e7a2e5bd0" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "a9dfa457f24252bbf62ff0ed17d0efcbff66b85a805c3d4d3eb087d91864805b" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "2f47856440cdff2d5fe98c33e8b0cf7d55a5c27d72f66a028afb9480483b25d1" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 11 ], "room.kitchen", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ] ] ], "contact": { "fill": 194, "excavation": 0, "sitework_occupied_cells": 203, "replaced_cells": 200, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "43c3a98967e60b496e922054cab08dcb03fd7e41aeb371700e3f3d0b205f128b", "bearing_fill": 3 }, "blocks": 38164, "nodes": 182, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 6.03 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.7305 }
adaptation-63建造成功31536988154
查看数据
{ "label": "adaptation-63", "inputs": { "environment_seed": 15, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.045, 0, 4 ] }, { "op": "wave", "args": [ 0, 0.13, 0.11, 1.7100020316024998 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.045, 4 ] }, { "op": "wave", "args": [ 0.6, 0.07, 0.19, 0 ] } ] }, { "op": "transform", "args": [ { "op": "radial", "args": [ 8, 9, 28, 0.7 ] }, 2, -1, 1.2 ] } ] }, 2, 7 ] }, "water": 6, "digest": "f82bc80879581470cbb4ce26879ddb7913e0620bab298172dc517745febeb208", "held_out_composition": true, "client": "high_house", "structure_seed": 3 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "fa930c5e1f2f21af2a6802ece62e9bfde0cf32ced1700e1061c9d8c6812adc08", "principal_signature": "dec4248672e50f034b899ba4c1c3ea254343873a1bf04f7277f10c94b83c40e1", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 9, 8, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "68aa18ee96cacfbcf5a80323844f1ca6c243f7391ab76954948a4291f5978e49" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [ "north" ], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 6, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ] ] ], "contact": { "fill": 100, "excavation": 0, "sitework_occupied_cells": 109, "replaced_cells": 106, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "95edffec9060ec4257c02fe543b9403c74cc5407e9f79a69b92073cfea38130c", "bearing_fill": 2 }, "blocks": 36988, "nodes": 154, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 3.21 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.2042 }
stress-00建造成功0200036461154
查看数据
{ "label": "stress-00", "inputs": { "environment_seed": 2000, "structure_seed": 0, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.12, -0.15, 4 ] }, { "op": "wave", "args": [ 2, 0.13, 0.17, 5.127977154011788 ] } ] }, -2, 20 ] }, "water": 5, "frozen_digest": "9ad307ab5cf5fbf4db3cfc9fa45a5f50b483d215ad4a42f984ad1286e015fbad" }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "d971373eb59e944584b518ee77b9072fdc66ec8716097158481713c440433ab0", "principal_signature": "7b04f6a4348e997bb42b40d570544925d5e9c46aeb6aa21f6876fc47261564c5", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 9, 8, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "0130080411befef5eaf5704d0e73486322f060592fd96e18298374ce3309e720" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "6b76bd9c2f8f3e5ed0aeee80c32ed44d439241405b8420ac6b0f0e46d4bde2c4" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [ "north" ], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 6, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ] ] ], "contact": { "fill": 105, "excavation": 0, "sitework_occupied_cells": 114, "replaced_cells": 68, "new_sitework_cells": 46, "strategies": [ "piers" ], "signature": "0b02fdd059836fbd48e2ed843053aa1b3b77b7a87fdfe1f52142f05fba426334", "bearing_fill": 2 }, "blocks": 36461, "nodes": 154, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 2.5 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.0816 }
stress-01建造成功1200141014199
查看数据
{ "label": "stress-01", "inputs": { "environment_seed": 2001, "structure_seed": 1, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.2, 4 ] }, { "op": "wave", "args": [ 2, 0.13, 0.17, 2.3640698433630662 ] } ] }, -2, 20 ] }, "water": 5, "frozen_digest": "a3567f8be4b9afbd21fb0c37b63993ef05d6c4cfa909193257f234bf348e913e" }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "3e749d3badc6abdecf665de8d867ae4874aa77b37ec584ce287fc96c2b01a5d6", "principal_signature": "594ddade698c40993f8d9ed90aa6b38620dd2f726ee54b84f49a6d7ab0a180d1", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 11 ], { "height": 29, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "775aa83e148e9a222b3ed5e6a3741b605f17eb61a514ef6cf3d1dced041d6c17" ], [ "roof.profile", [ 11, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "56656eb84178817c9732666b5cf997014aa4c15054e253f69cdf7d194de21e24" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 18, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 6, 0 ], "room.library", [ "east" ], true, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 12, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 6, 0 ], "room.workshop", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 143, "excavation": 0, "sitework_occupied_cells": 186, "replaced_cells": 71, "new_sitework_cells": 115, "strategies": [ "piers" ], "signature": "68ee46a2367b84bba9543fbdc23183c2de256820f703896798c04eb031dcc9ab", "bearing_fill": 2 }, "blocks": 41014, "nodes": 199, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 3.28 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.7085 }
stress-02拒绝建造:地面高差超限22002——
查看数据
{ "label": "stress-02", "inputs": { "environment_seed": 2002, "structure_seed": 2, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.45, -0.15, 4 ] }, { "op": "wave", "args": [ 0, 0.13, 0.17, 4.736375910500318 ] } ] }, -2, 20 ] }, "water": null, "frozen_digest": "8a9a6b3dede9cffa0ce8cf580ecf4e17119eaf98871e1cd49cf89262677e75cc" }, "attempts": 2, "accepted_candidates": 0, "retries": 0, "status": "incompatible", "diagnostic": "site-relief: /building at None: All declared alternatives violate the same condition: site-relief: /building at (0, 0, 0): Measured 11, permitted 5", "candidates": [ { "rule": "site-relief", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Measured 11, permitted 5" }, { "rule": "site-relief", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Measured 11, permitted 5" } ], "seconds": 0.3293 }
stress-03拒绝建造:地面高差超限32003——
查看数据
{ "label": "stress-03", "inputs": { "environment_seed": 2003, "structure_seed": 3, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.45, 0.2, 4 ] }, { "op": "wave", "args": [ 0, 0.13, 0.17, 5.447432368230461 ] } ] }, -2, 20 ] }, "water": 5, "frozen_digest": "29fc26399b0927a831fc9da20bdf5168727e93465df879236c18b41aace18793" }, "attempts": 2, "accepted_candidates": 0, "retries": 0, "status": "incompatible", "diagnostic": "site-relief: /building at None: All declared alternatives violate the same condition: site-relief: /building at (0, 0, 0): Measured 10, permitted 5", "candidates": [ { "rule": "site-relief", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Measured 10, permitted 5" }, { "rule": "site-relief", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Measured 10, permitted 5" } ], "seconds": 0.2311 }
stress-04建造成功4200436702153
查看数据
{ "label": "stress-04", "inputs": { "environment_seed": 2004, "structure_seed": 4, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.12, 0, 4 ] }, { "op": "wave", "args": [ 0, 0.13, 0.17, 4.272017841902214 ] } ] }, -2, 20 ] }, "water": 5, "frozen_digest": "e9a2a6807f75e575207c68a363c4c36cb967edc427fea7153f56de3e900ef743" }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "d18f8d46a890beba34893dc464d233e00afd7b9999c27c54c815b45c28bf96aa", "principal_signature": "fc3fe52f4b833a13cc733cc39c2ed31eca487afd944f7bf870b7730a4e80db1a", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 9, 8, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "519f95ca2326c9e31b6651e43b0c0d0eea548b27d5d764128a60209a9837a740" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "96f37dd25d3f6a19a6c25ff903e985ba634915adc33bd3bb854ddd3bad89fd34" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.bedroom", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ] ] ], "contact": { "fill": 74, "excavation": 0, "sitework_occupied_cells": 89, "replaced_cells": 35, "new_sitework_cells": 54, "strategies": [ "piers" ], "signature": "6459ab7d5e112519fae87e4102ba3cc626009456023480cd5fe22a770405cdd6", "bearing_fill": 2 }, "blocks": 36702, "nodes": 153, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 1.59 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 0.9918 }
stress-05拒绝建造:地面高差超限52005——
查看数据
{ "label": "stress-05", "inputs": { "environment_seed": 2005, "structure_seed": 5, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.45, 0, 4 ] }, { "op": "wave", "args": [ 5, 0.13, 0.17, 3.1088324431440615 ] } ] }, -2, 20 ] }, "water": 12, "frozen_digest": "8877ea50dbfa8c51420669384be8320703e1391d3222f8d3f60b65cf20480b81" }, "attempts": 2, "accepted_candidates": 0, "retries": 0, "status": "incompatible", "diagnostic": "site-relief: /building at None: All declared alternatives violate the same condition: site-relief: /building at (0, 0, 0): Measured 12, permitted 5", "candidates": [ { "rule": "site-relief", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Measured 12, permitted 5" }, { "rule": "site-relief", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Measured 12, permitted 5" } ], "seconds": 0.225 }
stress-06拒绝建造:地面高差超限62006——
查看数据
{ "label": "stress-06", "inputs": { "environment_seed": 2006, "structure_seed": 6, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.12, -0.15, 4 ] }, { "op": "wave", "args": [ 5, 0.13, 0.17, 2.606113206720962 ] } ] }, -2, 20 ] }, "water": 12, "frozen_digest": "21d73695147e70be6f550b550ed894af73916c4cd2b57a79b9677ee358246a1e" }, "attempts": 2, "accepted_candidates": 0, "retries": 0, "status": "incompatible", "diagnostic": "site-relief: /building at None: All declared alternatives violate the same condition: site-relief: /building at (0, 0, 0): Measured 10, permitted 5", "candidates": [ { "rule": "site-relief", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Measured 10, permitted 5" }, { "rule": "site-relief", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Measured 10, permitted 5" } ], "seconds": 0.3234 }
stress-07拒绝建造:地面高差超限72007——
查看数据
{ "label": "stress-07", "inputs": { "environment_seed": 2007, "structure_seed": 7, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.45, 0.2, 4 ] }, { "op": "wave", "args": [ 5, 0.13, 0.17, 0.7106689799805972 ] } ] }, -2, 20 ] }, "water": 12, "frozen_digest": "28a4417c18feb041b11ede6c0d08925af7b866e4fd6d683da63cb4ed9ece8ef6" }, "attempts": 2, "accepted_candidates": 0, "retries": 0, "status": "incompatible", "diagnostic": "site-relief: /building at None: All declared alternatives violate the same condition: site-relief: /building at (0, 0, 0): Measured 8, permitted 5", "candidates": [ { "rule": "site-relief", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Measured 8, permitted 5" }, { "rule": "site-relief", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Measured 8, permitted 5" } ], "seconds": 0.2286 }
stress-08拒绝建造:地面高差超限02008——
查看数据
{ "label": "stress-08", "inputs": { "environment_seed": 2008, "structure_seed": 0, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.2, 4 ] }, { "op": "wave", "args": [ 5, 0.13, 0.17, 5.3468683245721005 ] } ] }, -2, 20 ] }, "water": 12, "frozen_digest": "e5d9b98db3b96f9ee8e74e7918e5007c11ea13f16cb47f39dd735c66081a6c26" }, "attempts": 2, "accepted_candidates": 0, "retries": 0, "status": "incompatible", "diagnostic": "site-relief: /building at None: All declared alternatives violate the same condition: site-relief: /building at (0, 0, 0): Measured 10, permitted 5", "candidates": [ { "rule": "site-relief", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Measured 10, permitted 5" }, { "rule": "site-relief", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Measured 10, permitted 5" } ], "seconds": 0.2304 }
stress-09拒绝建造:地面高差超限12009——
查看数据
{ "label": "stress-09", "inputs": { "environment_seed": 2009, "structure_seed": 1, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.28, -0.15, 4 ] }, { "op": "wave", "args": [ 2, 0.13, 0.17, 4.043361591583398 ] } ] }, -2, 20 ] }, "water": 5, "frozen_digest": "615d19fcdb8adbdf2b33dfcc2b75d9f094d33985b6c79502c17dd8832595845d" }, "attempts": 2, "accepted_candidates": 0, "retries": 0, "status": "incompatible", "diagnostic": "site-relief: /building at None: All declared alternatives violate the same condition: site-relief: /building at (0, 0, 0): Measured 8, permitted 5", "candidates": [ { "rule": "site-relief", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Measured 8, permitted 5" }, { "rule": "site-relief", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Measured 8, permitted 5" } ], "seconds": 0.3311 }
stress-10拒绝建造:地面高差超限22010——
查看数据
{ "label": "stress-10", "inputs": { "environment_seed": 2010, "structure_seed": 2, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.45, 0.2, 4 ] }, { "op": "wave", "args": [ 5, 0.13, 0.17, 1.458550053272991 ] } ] }, -2, 20 ] }, "water": 5, "frozen_digest": "865249ffe712abf4e3dda38e3a1b5dff57217b1532e111f2483de0b8e89136a2" }, "attempts": 2, "accepted_candidates": 0, "retries": 0, "status": "incompatible", "diagnostic": "site-relief: /building at None: All declared alternatives violate the same condition: site-relief: /building at (0, 0, 0): Measured 19, permitted 5", "candidates": [ { "rule": "site-relief", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Measured 19, permitted 5" }, { "rule": "site-relief", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Measured 19, permitted 5" } ], "seconds": 0.3261 }
stress-11拒绝建造:地面高差超限32011——
查看数据
{ "label": "stress-11", "inputs": { "environment_seed": 2011, "structure_seed": 3, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.45, -0.15, 4 ] }, { "op": "wave", "args": [ 5, 0.13, 0.17, 3.7543484663529205 ] } ] }, -2, 20 ] }, "water": null, "frozen_digest": "314661e574d4aebd3c0cc8423d70a545e6c5a8eb883ca4d1f7fd4b9eadd07761" }, "attempts": 2, "accepted_candidates": 0, "retries": 0, "status": "incompatible", "diagnostic": "site-relief: /building at None: All declared alternatives violate the same condition: site-relief: /building at (0, 0, 0): Measured 12, permitted 5", "candidates": [ { "rule": "site-relief", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Measured 12, permitted 5" }, { "rule": "site-relief", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Measured 12, permitted 5" } ], "seconds": 0.231 }
stress-12建造成功4201236505153
查看数据
{ "label": "stress-12", "inputs": { "environment_seed": 2012, "structure_seed": 4, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.12, -0.15, 4 ] }, { "op": "wave", "args": [ 2, 0.13, 0.17, 2.959681125591585 ] } ] }, -2, 20 ] }, "water": 5, "frozen_digest": "fc37d1e7029d8b49c5f4de51b065bb697522eae61dcd79cdbd2f0cae05ff945f" }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "f2575a6e90bcb7c4b119bf386c624eeba3770a149cffdd0626bb1b369aaebfa4", "principal_signature": "fc3fe52f4b833a13cc733cc39c2ed31eca487afd944f7bf870b7730a4e80db1a", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 9, 8, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "519f95ca2326c9e31b6651e43b0c0d0eea548b27d5d764128a60209a9837a740" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "96f37dd25d3f6a19a6c25ff903e985ba634915adc33bd3bb854ddd3bad89fd34" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.bedroom", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ] ] ], "contact": { "fill": 116, "excavation": 0, "sitework_occupied_cells": 137, "replaced_cells": 48, "new_sitework_cells": 89, "strategies": [ "piers" ], "signature": "a23b14e480bd5a0e078e6518644c3c5bdd288b1708bd40cc208e003b16dedb95", "bearing_fill": 2 }, "blocks": 36505, "nodes": 153, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 2.33 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.0122 }
stress-13拒绝建造:地面高差超限52013——
查看数据
{ "label": "stress-13", "inputs": { "environment_seed": 2013, "structure_seed": 5, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.28, 0.2, 4 ] }, { "op": "wave", "args": [ 2, 0.13, 0.17, 4.2240852806150215 ] } ] }, -2, 20 ] }, "water": 5, "frozen_digest": "bc801b42ce458c6e30d68c3c3275f845970155af257a0788a9229b877741b552" }, "attempts": 2, "accepted_candidates": 0, "retries": 0, "status": "incompatible", "diagnostic": "site-relief: /building at None: All declared alternatives violate the same condition: site-relief: /building at (0, 0, 0): Measured 6, permitted 5", "candidates": [ { "rule": "site-relief", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Measured 6, permitted 5" }, { "rule": "site-relief", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Measured 6, permitted 5" } ], "seconds": 0.2326 }
stress-14建造成功6201435793170
查看数据
{ "label": "stress-14", "inputs": { "environment_seed": 2014, "structure_seed": 6, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.12, 0, 4 ] }, { "op": "wave", "args": [ 0, 0.13, 0.17, 3.926160249756597 ] } ] }, -2, 20 ] }, "water": null, "frozen_digest": "160a6c1d3cc88171e6eef7e0f8fe94fb63ee95550a3a2c46a24f3f5169d3baca" }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "dae5c0a3c8b6b944f3fb882e9b3a8fcb713761ad41fc7302e40f0bb8ea0e9b70", "principal_signature": "f2386c9a0b8003961cd2404c884eb1b921e6cacfd903c8603f309550cebecccc", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 11 ], { "height": 29, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 11, 8, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "14d6ff0b37f6e45a10ac4485b4fc85dba306fe38d1b93092e5d61eec78c8b2ee" ], [ "roof.profile", [ 11, 7, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "abd36d743ddb304a6153f5abd0735c0a495f542aab575f5f948ab032e37d618c" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 18, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 6, 0 ], "room.library", [], true, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ] ] ], "contact": { "fill": 78, "excavation": 0, "sitework_occupied_cells": 99, "replaced_cells": 3, "new_sitework_cells": 96, "strategies": [ "piers" ], "signature": "2aa6e3c2f5272ca25ac3e72b1e8c4570869b4b5dec2774a7dc32e7a45cba1a27", "bearing_fill": 2 }, "blocks": 35793, "nodes": 170, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.05 ], [ 0, 1.29 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.2863 }
stress-15拒绝建造:地面高差超限72015——
查看数据
{ "label": "stress-15", "inputs": { "environment_seed": 2015, "structure_seed": 7, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.28, 0, 4 ] }, { "op": "wave", "args": [ 2, 0.13, 0.17, 4.890932098229982 ] } ] }, -2, 20 ] }, "water": null, "frozen_digest": "8431cc1fbd03d1ac77af7e10981e3ff326545e7db7185f065c56843055ed1be1" }, "attempts": 2, "accepted_candidates": 0, "retries": 0, "status": "incompatible", "diagnostic": "site-relief: /building at None: All declared alternatives violate the same condition: site-relief: /building at (0, 0, 0): Measured 8, permitted 5", "candidates": [ { "rule": "site-relief", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Measured 8, permitted 5" }, { "rule": "site-relief", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Measured 8, permitted 5" } ], "seconds": 0.2346 }
roof-home-0建造成功0010978232
查看数据
{ "label": "roof-home-0", "inputs": { "structure_seed": 0, "environment_seed": 0, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" } ] }, "bay": 11, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 11, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 4, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "2381185dbd3cbfd12d2125c7f67894175429e7fb3cd3b14f35af48b82d435701", "principal_signature": "21698c4f248295d551371c64a673a1905a9ef3219ea1df3b1d8ff803baf4e0a8", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 22, "entrance_x": 5, "columns": [ 0, 10, 21 ] } ], [ "masonry.chimney", [ 4, 0, 11 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 13, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "a05b0abcbb2dd01db28e7ee1858b8031f8dbabb452fa0dc9009bff76e24aa204" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 79, "excavation": 0, "sitework_occupied_cells": 121, "replaced_cells": 33, "new_sitework_cells": 88, "strategies": [ "stepped", "stepped", "stepped", "stepped", "stepped" ], "signature": "2ba88b335b1e691b10b8ffea4cbba94cc26975c7b0fc72fbf0b370c5a252fee3", "bearing_fill": 1 }, "blocks": 10978, "nodes": 232, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.74 ], [ 1, 0.98 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/space/roof-home-0.litematic", "audit": { "queries": 211, "inventories": 37, "nodes": 232, "digest": "2381185dbd3cbfd12d2125c7f67894175429e7fb3cd3b14f35af48b82d435701" }, "seconds": 2.5855, "interior": { "lofts": 1, "purposes": [ "library" ], "stations": 6, "hung_lights": 7, "collar_cells": 24, "guard_cells": 14, "optional_station_omissions": 0, "furniture_signature": "a9b9bb393e627975a684cbb48470eb19ad51beaa39393db5be29cae6b5e9687f" } }
roof-home-1建造成功119558190
查看数据
{ "label": "roof-home-1", "inputs": { "structure_seed": 1, "environment_seed": 1, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" } ] }, "bay": 9, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 1, 2 ] }, "dormer_spacing": 11, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 4, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "e437e59455bf0052407dc7edc3ccffd2c3d45161abc6321aeb16e327d07b181d", "principal_signature": "4adb601f637742bcf5ff79bd5a117a1138c637b5cfafa79c1d8854838e35b445", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 18, "entrance_x": 4, "columns": [ 0, 8, 17 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 14, "cap_overhang": 0 } ], [ "roof.dormer", [ 6, 8, 8 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 9, "rise": [ 1, 1, 2 ] }, "9a2296cf6c8fc2ed61f630c098d7f4b42f6d6d31036202780c2101e2dd78ca49" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "a1d245413a3b1c1d35d6d64ac9ed2f0069f56da8dee0fa6361cace24a159af43" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], false, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ] ] ], "contact": { "fill": 1, "excavation": 0, "sitework_occupied_cells": 34, "replaced_cells": 33, "new_sitework_cells": 1, "strategies": [ "stepped", "stepped", "stepped", "stepped", "stepped" ], "signature": "6574a1fc6be32bfc69553811a15922caaf2ab473d0485ce6c004fd9beac44122", "bearing_fill": 0 }, "blocks": 9558, "nodes": 190, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.12 ], [ 1, 0.52 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.1052, "interior": { "lofts": 1, "purposes": [ "library" ], "stations": 4, "hung_lights": 3, "collar_cells": 11, "guard_cells": 11, "optional_station_omissions": 0, "furniture_signature": "a4e4365f68e3a9e41ff764657888e65a90d8b8d3acfa2442f109254a92a532c9" } }
roof-home-2建造成功2219209355
查看数据
{ "label": "roof-home-2", "inputs": { "structure_seed": 2, "environment_seed": 2, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "library" } ] }, "bay": 13, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 11, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 4, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "57771e66fc0d605e129b304694bfec3886529cfbba914e143efe1afcec75cc35", "principal_signature": "cce606473fe4e977129a0ebf1a8ed087de35c9363b9aee2882b922f3d509d7b3", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 18, 0, 26 ], { "height": 18, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 25, 8, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "688cc4eac3ccc70e169b0bfb1544694f6e1eec716c782415315b51e5c3f80ff4" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "274e76b8d893e31dc009dabcec4e65e9ab914d31b1f2d39b51468b8e9cc5fcd4" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.library", [], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "south", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 0, 13 ], "room.library", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6ed9ba1fa820f1d0c789bdd31f07a2ee286fd2cfdfbebf17b1da050c2387895f" ] ] ], "contact": { "fill": 117, "excavation": 0, "sitework_occupied_cells": 156, "replaced_cells": 30, "new_sitework_cells": 126, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "4151f0590d7f0b86f8dded94dec42088673143e162522f155a6916191abad0aa", "bearing_fill": 2 }, "blocks": 19209, "nodes": 355, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.29 ], [ 0, 1.61 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "left", 15, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/space/roof-home-2.litematic", "audit": { "queries": 321, "inventories": 28, "nodes": 355, "digest": "57771e66fc0d605e129b304694bfec3886529cfbba914e143efe1afcec75cc35" }, "seconds": 5.8249, "interior": { "lofts": 2, "purposes": [ "bedroom", "bedroom" ], "stations": 12, "hung_lights": 13, "collar_cells": 56, "guard_cells": 28, "optional_station_omissions": 0, "furniture_signature": "83b4ce938fb0e786c5903b0c92b8d4c55ed9dcbf6162555639f0ad65541e4de6" } }
roof-home-3建造成功3310365224
查看数据
{ "label": "roof-home-3", "inputs": { "structure_seed": 3, "environment_seed": 3, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "library" } ] }, "bay": 9, "porch": true, "roof_axis": "auto", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 8, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 0 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 4, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "6cc73d57fc879090ea3bcc5f134ca2052fddb5b071e87f512290c7e6dcf12ff6", "principal_signature": "aa4c129fc81b91f84e0780879eebca8a8abf4c8ac653bde20dbdefb3d22de979", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 18, "entrance_x": 4, "columns": [ 0, 8, 17 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 21, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 9, "rise": [ 1, 2 ] }, "0e45272d512ead81a7ca77adbd1e9b1781247379ff6b5bd9e6623f66e8d8902f" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 1, 2 ] }, "f815fb619499912e9a8f4d1fb7a6993c801100d67f5714a4b6fb9ce7305d0770" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 6, 0 ], "room.loft.library", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ] ] ], "contact": { "fill": 52, "excavation": 0, "sitework_occupied_cells": 94, "replaced_cells": 30, "new_sitework_cells": 64, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "bcf08a3a14d27a58c8f8f92931ea92addb8fb33e55b53ac63f884bc79e24291f", "bearing_fill": 2 }, "blocks": 10365, "nodes": 224, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 0.58 ], [ 0, 0.72 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.363, "interior": { "lofts": 2, "purposes": [ "library", "library" ], "stations": 4, "hung_lights": 4, "collar_cells": 11, "guard_cells": 18, "optional_station_omissions": 0, "furniture_signature": "ccba1557440c352c3369f04ca18b96b3713fd7bd62fcc0c1f607dc25e3c4ff13" } }
roof-home-4建造成功4411531246
查看数据
{ "label": "roof-home-4", "inputs": { "structure_seed": 4, "environment_seed": 4, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "library" } ] }, "bay": 11, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 8, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 4, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "ea77f47b630ab0d6c28bb5b456a5c2393fd422dae25008abf295b0aae358e522", "principal_signature": "6cfbe23dbf3fcff1333790c6deb67bbc90122daf8b03fb26b56ef3fc4e1b006a", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 22, "entrance_x": 5, "columns": [ 0, 10, 21 ] } ], [ "masonry.chimney", [ 4, 0, 11 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 17, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "79ee98aed289bc97683b497e9b23d1e0e6c928b715062ff2c253661e3c8dffcc" ], [ "roof.profile", [ 11, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "449ff44ac7f398063089dce87238e771d21a2368aede0e131ebbb1861d9d3cdc" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.library", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 0 ], "room.loft.library", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ] ] ], "contact": { "fill": 31, "excavation": 0, "sitework_occupied_cells": 65, "replaced_cells": 33, "new_sitework_cells": 32, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "50f5616b85e3af8acb25eb915aedaa32232c8d0da9c32e35429fa3151d626caf", "bearing_fill": 0 }, "blocks": 11531, "nodes": 246, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.41 ], [ 1, 0.77 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/space/roof-home-4.litematic", "audit": { "queries": 216, "inventories": 22, "nodes": 246, "digest": "ea77f47b630ab0d6c28bb5b456a5c2393fd422dae25008abf295b0aae358e522" }, "seconds": 2.8995, "interior": { "lofts": 2, "purposes": [ "library", "library" ], "stations": 6, "hung_lights": 5, "collar_cells": 16, "guard_cells": 20, "optional_station_omissions": 0, "furniture_signature": "4836664b1332045e24468048ea368cae7ec61297f35c0b49d4f56c5772d1e129" } }
roof-home-5建造成功5519250364
查看数据
{ "label": "roof-home-5", "inputs": { "structure_seed": 5, "environment_seed": 5, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "library" } ] }, "bay": 13, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 8, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 4, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "c0bdad131d03b40c2f54f84e241019b58518ccb6310cc8e271889e08932818ab", "principal_signature": "ad40bc9f2de8ae8fa9b7c57d8dbbfc943612b3f5f6f47745b1c9799a481686ae", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 18, 0, 26 ], { "height": 18, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 8, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 14 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 22 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 25, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 25, 8, 18 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "ed7c382c9b9873b0c608161589470db09c0516f1305c41f2046adbe351413991" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "4da79b24b5b1f01f5fcb02a8049d976db893b45b0a0afa5e9c9683e1f1b17f51" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "south", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 0, 13 ], "room.library", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "6ed9ba1fa820f1d0c789bdd31f07a2ee286fd2cfdfbebf17b1da050c2387895f" ] ] ], "contact": { "fill": 108, "excavation": 0, "sitework_occupied_cells": 144, "replaced_cells": 30, "new_sitework_cells": 114, "strategies": [ "stepped", "stepped", "stepped", "stepped", "stepped" ], "signature": "f30abed4de479a66d5f06c5ad113468c9d790629a9995baab5790815f28ab82d", "bearing_fill": 0 }, "blocks": 19250, "nodes": 364, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.0 ], [ 0, 1.26 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 3.81, "interior": { "lofts": 2, "purposes": [ "library", "library" ], "stations": 12, "hung_lights": 13, "collar_cells": 58, "guard_cells": 25, "optional_station_omissions": 0, "furniture_signature": "9e4774a8ba701a2081f902592de524ed92afe91684d3946ef661ddf74c6a46ee" } }
roof-home-6建造成功6615785310
查看数据
{ "label": "roof-home-6", "inputs": { "structure_seed": 6, "environment_seed": 6, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "library" } ] }, "bay": 11, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 8, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 0 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 4, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "498289e62163d4deadcf27f69145b346af911235180572b20a51614e08ba31e2", "principal_signature": "ec0dd44dca298d8d3d88fa097c472a7e1a28e270c27aec17b41919754857fa8e", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 22, "entrance_x": 5, "columns": [ 0, 10, 21 ] } ], [ "masonry.chimney", [ 15, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 21, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "0dfc3106094ec8d461ea41254c23a7395b2f36e637efd274e63445a5beb3d54e" ], [ "roof.profile", [ 11, 7, 0 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "dcff50aff67f2cd35389d92dd2351af580456b85f44794d251366669b10b5339" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 6, 0 ], "room.library", [], true, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.library", [ "north" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 0 ], "room.loft.library", [ "landing" ], false, "bababbf1ce522065f7a5179560438de468c2194e77c7619b2c0c0c52e35259a0" ] ] ], "contact": { "fill": 0, "excavation": 0, "sitework_occupied_cells": 33, "replaced_cells": 33, "new_sitework_cells": 0, "strategies": [ "stepped", "stepped", "stepped", "stepped", "stepped" ], "signature": "578cb630c81d72e727de29614b448ec62d8f0c6b2387dc7ba93fe39392c5d5e6", "bearing_fill": 0 }, "blocks": 15785, "nodes": 310, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.12 ], [ 1, 0.52 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "left", 12, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.9766, "interior": { "lofts": 2, "purposes": [ "library", "library" ], "stations": 9, "hung_lights": 8, "collar_cells": 29, "guard_cells": 24, "optional_station_omissions": 0, "furniture_signature": "b13f1e921e39797f5615b065997c124f8e371a16fe9694ea5bee9b23f97d8ae3" } }
roof-home-7建造成功7715024288
查看数据
{ "label": "roof-home-7", "inputs": { "structure_seed": 7, "environment_seed": 7, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "library" } ] }, "bay": 11, "porch": true, "roof_axis": "auto", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 1, 2 ] }, "dormer_spacing": 11, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 4, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "79589bd20d41a278787998e22df80d32165d2976f069103c90667a6ebe85d8eb", "principal_signature": "9e4bd8ffdc71a7f0df25c059a393d1bcb42ba70c3d3f63efe688f89173d2a503", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 22, "entrance_x": 5, "columns": [ 0, 10, 21 ] } ], [ "masonry.chimney", [ 15, 0, 22 ], { "height": 16, "cap_overhang": 0 } ], [ "roof.dormer", [ 11, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 1, 2 ] }, "2c9f47408b8479e8ea772b54f19385a52b24be69e2cfe4f274ce333600e711e9" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 1, 1, 2 ] }, "6d0a19425a24bdac60698019f543f5936da408ec26d7a130216b03e8d630a734" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.library", [ "north" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ] ] ], "contact": { "fill": 15, "excavation": 0, "sitework_occupied_cells": 48, "replaced_cells": 33, "new_sitework_cells": 15, "strategies": [ "stepped", "stepped", "stepped", "stepped", "stepped" ], "signature": "bcb313f0f2d4d1c48c4f4e33c48c68e16099e7d41074c85ec09903e0c18c40f4", "bearing_fill": 0 }, "blocks": 15024, "nodes": 288, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.27 ], [ 1, 0.65 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/space/roof-home-7.litematic", "audit": { "queries": 255, "inventories": 45, "nodes": 288, "digest": "79589bd20d41a278787998e22df80d32165d2976f069103c90667a6ebe85d8eb" }, "seconds": 3.7269, "interior": { "lofts": 2, "purposes": [ "library", "library" ], "stations": 9, "hung_lights": 7, "collar_cells": 28, "guard_cells": 26, "optional_station_omissions": 0, "furniture_signature": "4bd0f5633b978cf4e6a8a3aea3cc0e668562e790df9dd7747bee57e92f621eb3" } }
pair-0-2建造成功2510046868193
查看数据
{ "label": "pair-0-2", "inputs": { "environment_seed": 5100, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.025, -0.02, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 1.1149140955172765 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": 4, "digest": "f078b420800a86cbb65bf2adaef9a4ee4b7c1c5d173d085b2445dbc95d19531f", "structure_seed": 2, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "library" } ] }, "bay": 13, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 11, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 4, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "14ad3d7aeff9c3b397d830c62999a02eb723d773c3af9f5213564e3245a047f3", "principal_signature": "cce606473fe4e977129a0ebf1a8ed087de35c9363b9aee2882b922f3d509d7b3", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 18, 0, 26 ], { "height": 18, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 25, 8, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "688cc4eac3ccc70e169b0bfb1544694f6e1eec716c782415315b51e5c3f80ff4" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "274e76b8d893e31dc009dabcec4e65e9ab914d31b1f2d39b51468b8e9cc5fcd4" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.library", [], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "south", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 0, 13 ], "room.library", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6ed9ba1fa820f1d0c789bdd31f07a2ee286fd2cfdfbebf17b1da050c2387895f" ] ] ], "contact": { "fill": 0, "excavation": 0, "sitework_occupied_cells": 6, "replaced_cells": 3, "new_sitework_cells": 3, "strategies": [ "stepped" ], "signature": "ee78d9544ff20cd3548bb02db2324d61446f3fc69ddf6ddc480fcbeabb391ed0", "bearing_fill": 0 }, "blocks": 46868, "nodes": 193, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.12 ], [ 1, 0.52 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "left", 15, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/space/pair-0-2.litematic", "audit": { "queries": 170, "inventories": 28, "nodes": 193, "digest": "14ad3d7aeff9c3b397d830c62999a02eb723d773c3af9f5213564e3245a047f3" }, "seconds": 6.662, "interior": { "lofts": 2, "purposes": [ "bedroom", "bedroom" ], "stations": 12, "hung_lights": 13, "collar_cells": 56, "guard_cells": 28, "optional_station_omissions": 0, "furniture_signature": "7f74bf5ce8e205eede99d005f343e42f8e221697f3e56b8be261e439ccf1c478" } }
pair-0-7建造成功7510045088148
查看数据
{ "label": "pair-0-7", "inputs": { "environment_seed": 5100, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.025, -0.02, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 1.1149140955172765 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": 4, "digest": "f078b420800a86cbb65bf2adaef9a4ee4b7c1c5d173d085b2445dbc95d19531f", "structure_seed": 7, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "library" } ] }, "bay": 11, "porch": true, "roof_axis": "auto", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 1, 2 ] }, "dormer_spacing": 11, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 4, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "9bd04b02d6a04e9492e5f7c4e04d288e36764f974d9bbe1979a98c96af3f9120", "principal_signature": "9e4bd8ffdc71a7f0df25c059a393d1bcb42ba70c3d3f63efe688f89173d2a503", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 22, "entrance_x": 5, "columns": [ 0, 10, 21 ] } ], [ "masonry.chimney", [ 15, 0, 22 ], { "height": 16, "cap_overhang": 0 } ], [ "roof.dormer", [ 11, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 1, 2 ] }, "2c9f47408b8479e8ea772b54f19385a52b24be69e2cfe4f274ce333600e711e9" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 1, 1, 2 ] }, "6d0a19425a24bdac60698019f543f5936da408ec26d7a130216b03e8d630a734" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.library", [ "north" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ] ] ], "contact": { "fill": 0, "excavation": 0, "sitework_occupied_cells": 6, "replaced_cells": 3, "new_sitework_cells": 3, "strategies": [ "stepped" ], "signature": "94365427bd1925e1f606bcdb97fbbe6ebb4a5f6122aa465f6790a9c7d6530fdb", "bearing_fill": 0 }, "blocks": 45088, "nodes": 148, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.12 ], [ 1, 0.52 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.4692, "interior": { "lofts": 2, "purposes": [ "library", "library" ], "stations": 9, "hung_lights": 7, "collar_cells": 28, "guard_cells": 26, "optional_station_omissions": 0, "furniture_signature": "4bd0f5633b978cf4e6a8a3aea3cc0e668562e790df9dd7747bee57e92f621eb3" } }
pair-1-2建造成功2510146545193
查看数据
{ "label": "pair-1-2", "inputs": { "environment_seed": 5101, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.025, -0.02, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 3.711345471405261 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": 4, "digest": "6479c79fab2f2a18c60ab67a0ded5b2b62da51c5813c7c43c0808fdceff34478", "structure_seed": 2, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "library" } ] }, "bay": 13, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 11, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 4, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "949c3b95dfcab7d5c97b9d627865bc2eea2bd426b7e858181b4d722ee6e527b6", "principal_signature": "cce606473fe4e977129a0ebf1a8ed087de35c9363b9aee2882b922f3d509d7b3", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 18, 0, 26 ], { "height": 18, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 25, 8, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "688cc4eac3ccc70e169b0bfb1544694f6e1eec716c782415315b51e5c3f80ff4" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "274e76b8d893e31dc009dabcec4e65e9ab914d31b1f2d39b51468b8e9cc5fcd4" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.library", [], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "south", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 0, 13 ], "room.library", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6ed9ba1fa820f1d0c789bdd31f07a2ee286fd2cfdfbebf17b1da050c2387895f" ] ] ], "contact": { "fill": 59, "excavation": 0, "sitework_occupied_cells": 65, "replaced_cells": 62, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "fc54c5b7798624fe1ef22fcd641d9358d1406a4d86b940d52a303c176e488d3d", "bearing_fill": 2 }, "blocks": 46545, "nodes": 193, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 1.89 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "left", 15, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.5822, "interior": { "lofts": 2, "purposes": [ "bedroom", "bedroom" ], "stations": 12, "hung_lights": 13, "collar_cells": 56, "guard_cells": 28, "optional_station_omissions": 0, "furniture_signature": "83b4ce938fb0e786c5903b0c92b8d4c55ed9dcbf6162555639f0ad65541e4de6" } }
pair-1-7建造成功7510144770148
查看数据
{ "label": "pair-1-7", "inputs": { "environment_seed": 5101, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.025, -0.02, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 3.711345471405261 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": 4, "digest": "6479c79fab2f2a18c60ab67a0ded5b2b62da51c5813c7c43c0808fdceff34478", "structure_seed": 7, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "library" } ] }, "bay": 11, "porch": true, "roof_axis": "auto", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 1, 2 ] }, "dormer_spacing": 11, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 4, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "f3a3991d381803b1f1b916a14ceffd96ab70cb5b7d0dd9673b396047116cdc06", "principal_signature": "9e4bd8ffdc71a7f0df25c059a393d1bcb42ba70c3d3f63efe688f89173d2a503", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 22, "entrance_x": 5, "columns": [ 0, 10, 21 ] } ], [ "masonry.chimney", [ 15, 0, 22 ], { "height": 16, "cap_overhang": 0 } ], [ "roof.dormer", [ 11, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 1, 2 ] }, "2c9f47408b8479e8ea772b54f19385a52b24be69e2cfe4f274ce333600e711e9" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 1, 1, 2 ] }, "6d0a19425a24bdac60698019f543f5936da408ec26d7a130216b03e8d630a734" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.library", [ "north" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ] ] ], "contact": { "fill": 65, "excavation": 0, "sitework_occupied_cells": 71, "replaced_cells": 68, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "5071a2e7d42930d3bc4354cd8426c330e77902231d816eeceba606ef12ebb0f5", "bearing_fill": 3 }, "blocks": 44770, "nodes": 148, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 2.07 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.6444, "interior": { "lofts": 2, "purposes": [ "library", "library" ], "stations": 9, "hung_lights": 7, "collar_cells": 28, "guard_cells": 25, "optional_station_omissions": 0, "furniture_signature": "43127d579e4cbef7e0809168d1c6508742dffe210505f450a2b0155a696f203a" } }
pair-2-2建造成功2510251144193
查看数据
{ "label": "pair-2-2", "inputs": { "environment_seed": 5102, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.025, -0.02, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 0.2996337894235028 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": 5, "digest": "a42c8c00773d132fbc4f6f97a6f16242cab8d833c96cdbd85a65eb9ddfc24d63", "structure_seed": 2, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "library" } ] }, "bay": 13, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 11, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 4, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "5b87cf2c582fcfdb0dd6ebdf3f3449bcc689ab62673db501d38a6b4b596a55de", "principal_signature": "cce606473fe4e977129a0ebf1a8ed087de35c9363b9aee2882b922f3d509d7b3", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 18, 0, 26 ], { "height": 18, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 25, 8, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "688cc4eac3ccc70e169b0bfb1544694f6e1eec716c782415315b51e5c3f80ff4" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "274e76b8d893e31dc009dabcec4e65e9ab914d31b1f2d39b51468b8e9cc5fcd4" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.library", [], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "south", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 0, 13 ], "room.library", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6ed9ba1fa820f1d0c789bdd31f07a2ee286fd2cfdfbebf17b1da050c2387895f" ] ] ], "contact": { "fill": 153, "excavation": 0, "sitework_occupied_cells": 159, "replaced_cells": 156, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "742f4de41ca7c5df9b3255be9a116c0e1e00ae4f7ebc1745cec57c1f18f6bf72", "bearing_fill": 2 }, "blocks": 51144, "nodes": 193, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 4.71 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "left", 15, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.5867, "interior": { "lofts": 2, "purposes": [ "bedroom", "bedroom" ], "stations": 12, "hung_lights": 13, "collar_cells": 56, "guard_cells": 28, "optional_station_omissions": 0, "furniture_signature": "83b4ce938fb0e786c5903b0c92b8d4c55ed9dcbf6162555639f0ad65541e4de6" } }
pair-2-7建造成功7510249369148
查看数据
{ "label": "pair-2-7", "inputs": { "environment_seed": 5102, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.025, -0.02, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 0.2996337894235028 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": 5, "digest": "a42c8c00773d132fbc4f6f97a6f16242cab8d833c96cdbd85a65eb9ddfc24d63", "structure_seed": 7, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "library" } ] }, "bay": 11, "porch": true, "roof_axis": "auto", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 1, 2 ] }, "dormer_spacing": 11, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 4, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "b6f823392447b648c5c850468e5e95f61636a19a10b4fc1ddde955ad037a73eb", "principal_signature": "9e4bd8ffdc71a7f0df25c059a393d1bcb42ba70c3d3f63efe688f89173d2a503", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 22, "entrance_x": 5, "columns": [ 0, 10, 21 ] } ], [ "masonry.chimney", [ 15, 0, 22 ], { "height": 16, "cap_overhang": 0 } ], [ "roof.dormer", [ 11, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 1, 2 ] }, "2c9f47408b8479e8ea772b54f19385a52b24be69e2cfe4f274ce333600e711e9" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 1, 1, 2 ] }, "6d0a19425a24bdac60698019f543f5936da408ec26d7a130216b03e8d630a734" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.library", [ "north" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ] ] ], "contact": { "fill": 155, "excavation": 0, "sitework_occupied_cells": 161, "replaced_cells": 158, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "d3091f4b63873356ad22aebae11230f94cfde9bae5af74cb40716c12a405dea9", "bearing_fill": 3 }, "blocks": 49369, "nodes": 148, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 4.77 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.6592, "interior": { "lofts": 2, "purposes": [ "library", "library" ], "stations": 9, "hung_lights": 7, "collar_cells": 28, "guard_cells": 25, "optional_station_omissions": 0, "furniture_signature": "43127d579e4cbef7e0809168d1c6508742dffe210505f450a2b0155a696f203a" } }
pair-3-2建造成功2510346545193
查看数据
{ "label": "pair-3-2", "inputs": { "environment_seed": 5103, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 3.5820797235383988 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": 4, "digest": "52de40a9f9688fe6d5336e33268503458d35cae9e83588245290bb7e51b31380", "structure_seed": 2, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "library" } ] }, "bay": 13, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 11, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 4, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "62143b433b91935efb3fced58771c7fdc560651ea324b624b9e0b7f5f4b20189", "principal_signature": "cce606473fe4e977129a0ebf1a8ed087de35c9363b9aee2882b922f3d509d7b3", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 18, 0, 26 ], { "height": 18, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 25, 8, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "688cc4eac3ccc70e169b0bfb1544694f6e1eec716c782415315b51e5c3f80ff4" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "274e76b8d893e31dc009dabcec4e65e9ab914d31b1f2d39b51468b8e9cc5fcd4" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.library", [], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "south", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 0, 13 ], "room.library", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6ed9ba1fa820f1d0c789bdd31f07a2ee286fd2cfdfbebf17b1da050c2387895f" ] ] ], "contact": { "fill": 14, "excavation": 0, "sitework_occupied_cells": 20, "replaced_cells": 17, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "48a64f4e4fcc8a8eb7c3207a8108f6b59d75cdba82caee0c8312f115c5460b3c", "bearing_fill": 0 }, "blocks": 46545, "nodes": 193, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 0.54 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "left", 15, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.5894, "interior": { "lofts": 2, "purposes": [ "bedroom", "bedroom" ], "stations": 12, "hung_lights": 13, "collar_cells": 56, "guard_cells": 28, "optional_station_omissions": 0, "furniture_signature": "83b4ce938fb0e786c5903b0c92b8d4c55ed9dcbf6162555639f0ad65541e4de6" } }
pair-3-7建造成功7510344770148
查看数据
{ "label": "pair-3-7", "inputs": { "environment_seed": 5103, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 3.5820797235383988 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": 4, "digest": "52de40a9f9688fe6d5336e33268503458d35cae9e83588245290bb7e51b31380", "structure_seed": 7, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "library" } ] }, "bay": 11, "porch": true, "roof_axis": "auto", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 1, 2 ] }, "dormer_spacing": 11, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 4, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "6a1f5af2d83df3ac94fcde5f34026e8e2d1cd712b456482e6eca25cf277af8b8", "principal_signature": "9e4bd8ffdc71a7f0df25c059a393d1bcb42ba70c3d3f63efe688f89173d2a503", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 22, "entrance_x": 5, "columns": [ 0, 10, 21 ] } ], [ "masonry.chimney", [ 15, 0, 22 ], { "height": 16, "cap_overhang": 0 } ], [ "roof.dormer", [ 11, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 1, 2 ] }, "2c9f47408b8479e8ea772b54f19385a52b24be69e2cfe4f274ce333600e711e9" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 1, 1, 2 ] }, "6d0a19425a24bdac60698019f543f5936da408ec26d7a130216b03e8d630a734" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.library", [ "north" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ] ] ], "contact": { "fill": 13, "excavation": 0, "sitework_occupied_cells": 19, "replaced_cells": 16, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "e52770d892127bcb856bd41f329a2451a06985b33d0a1d624e89d3695d9376d7", "bearing_fill": 0 }, "blocks": 44770, "nodes": 148, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 0.51 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/space/pair-3-7.litematic", "audit": { "queries": 130, "inventories": 45, "nodes": 148, "digest": "6a1f5af2d83df3ac94fcde5f34026e8e2d1cd712b456482e6eca25cf277af8b8" }, "seconds": 4.0525, "interior": { "lofts": 2, "purposes": [ "library", "library" ], "stations": 9, "hung_lights": 7, "collar_cells": 28, "guard_cells": 25, "optional_station_omissions": 0, "furniture_signature": "43127d579e4cbef7e0809168d1c6508742dffe210505f450a2b0155a696f203a" } }
pair-4-2建造成功2510451144193
查看数据
{ "label": "pair-4-2", "inputs": { "environment_seed": 5104, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 5.74665332849318 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": 5, "digest": "9bf089c4098431257ca338c7a798099adedebd7ff5aba115663e3679b960cc73", "structure_seed": 2, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "library" } ] }, "bay": 13, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 11, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 4, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "ba424e5ea5bbf5eaca162ed3d04d248c83595f9b41c96acbf8bbab39e83b6905", "principal_signature": "cce606473fe4e977129a0ebf1a8ed087de35c9363b9aee2882b922f3d509d7b3", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 18, 0, 26 ], { "height": 18, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 25, 8, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "688cc4eac3ccc70e169b0bfb1544694f6e1eec716c782415315b51e5c3f80ff4" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "274e76b8d893e31dc009dabcec4e65e9ab914d31b1f2d39b51468b8e9cc5fcd4" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.library", [], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "south", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 0, 13 ], "room.library", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6ed9ba1fa820f1d0c789bdd31f07a2ee286fd2cfdfbebf17b1da050c2387895f" ] ] ], "contact": { "fill": 110, "excavation": 0, "sitework_occupied_cells": 119, "replaced_cells": 116, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "c448c75cc530c84c1e20f8dc6c370e1cf70f7edbf1a74d1cdaaded1e293af9b7", "bearing_fill": 2 }, "blocks": 51144, "nodes": 193, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 3.51 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "left", 15, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.7408, "interior": { "lofts": 2, "purposes": [ "bedroom", "bedroom" ], "stations": 12, "hung_lights": 13, "collar_cells": 56, "guard_cells": 28, "optional_station_omissions": 0, "furniture_signature": "83b4ce938fb0e786c5903b0c92b8d4c55ed9dcbf6162555639f0ad65541e4de6" } }
pair-4-7建造成功7510449369148
查看数据
{ "label": "pair-4-7", "inputs": { "environment_seed": 5104, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 5.74665332849318 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": 5, "digest": "9bf089c4098431257ca338c7a798099adedebd7ff5aba115663e3679b960cc73", "structure_seed": 7, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "library" } ] }, "bay": 11, "porch": true, "roof_axis": "auto", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 1, 2 ] }, "dormer_spacing": 11, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 4, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "4500cadbc0ca1ecde5c09b9620b9a2e7d6d0eab2e3892fe2c6fac427c8fc9f19", "principal_signature": "9e4bd8ffdc71a7f0df25c059a393d1bcb42ba70c3d3f63efe688f89173d2a503", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 22, "entrance_x": 5, "columns": [ 0, 10, 21 ] } ], [ "masonry.chimney", [ 15, 0, 22 ], { "height": 16, "cap_overhang": 0 } ], [ "roof.dormer", [ 11, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 1, 2 ] }, "2c9f47408b8479e8ea772b54f19385a52b24be69e2cfe4f274ce333600e711e9" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 1, 1, 2 ] }, "6d0a19425a24bdac60698019f543f5936da408ec26d7a130216b03e8d630a734" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.library", [ "north" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ] ] ], "contact": { "fill": 103, "excavation": 0, "sitework_occupied_cells": 112, "replaced_cells": 109, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "387c096344017a08612ef8dc631f8a5628dd172de08acae39a13e07dffd4fe10", "bearing_fill": 3 }, "blocks": 49369, "nodes": 148, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 3.3 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.8537, "interior": { "lofts": 2, "purposes": [ "library", "library" ], "stations": 9, "hung_lights": 7, "collar_cells": 28, "guard_cells": 25, "optional_station_omissions": 0, "furniture_signature": "43127d579e4cbef7e0809168d1c6508742dffe210505f450a2b0155a696f203a" } }
pair-5-2建造成功2510543748193
查看数据
{ "label": "pair-5-2", "inputs": { "environment_seed": 5105, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.025, 0.02, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 3.1794406062920424 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": null, "digest": "e2d600842cafe8efc4ae63ae1b4fabf92f61e2f80bfad89038ae9f4326c31ba9", "structure_seed": 2, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "library" } ] }, "bay": 13, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 11, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 4, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "d16a47ebb3e0f4dc1bfe30d8c1f5ab68897341bcee7297fb402432eca22d6e0e", "principal_signature": "cce606473fe4e977129a0ebf1a8ed087de35c9363b9aee2882b922f3d509d7b3", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 18, 0, 26 ], { "height": 18, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 25, 8, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "688cc4eac3ccc70e169b0bfb1544694f6e1eec716c782415315b51e5c3f80ff4" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "274e76b8d893e31dc009dabcec4e65e9ab914d31b1f2d39b51468b8e9cc5fcd4" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.library", [], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "south", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 0, 13 ], "room.library", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6ed9ba1fa820f1d0c789bdd31f07a2ee286fd2cfdfbebf17b1da050c2387895f" ] ] ], "contact": { "fill": 66, "excavation": 0, "sitework_occupied_cells": 78, "replaced_cells": 3, "new_sitework_cells": 75, "strategies": [ "stepped" ], "signature": "69b5eea91dcd68d7d8336480dedfa33a32f66421c345d4b8c1e8e0423520a770", "bearing_fill": 0 }, "blocks": 43748, "nodes": 193, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.84 ], [ 1, 0.95 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "left", 15, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 4.445, "interior": { "lofts": 2, "purposes": [ "bedroom", "bedroom" ], "stations": 12, "hung_lights": 13, "collar_cells": 56, "guard_cells": 28, "optional_station_omissions": 0, "furniture_signature": "7f74bf5ce8e205eede99d005f343e42f8e221697f3e56b8be261e439ccf1c478" } }
pair-5-7建造成功7510541950148
查看数据
{ "label": "pair-5-7", "inputs": { "environment_seed": 5105, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.025, 0.02, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 3.1794406062920424 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": null, "digest": "e2d600842cafe8efc4ae63ae1b4fabf92f61e2f80bfad89038ae9f4326c31ba9", "structure_seed": 7, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "library" } ] }, "bay": 11, "porch": true, "roof_axis": "auto", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 1, 2 ] }, "dormer_spacing": 11, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 4, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "90b6688e3e00b22f81a28b2430a27cf1e9cedfcdfdba81732624a0a533ac96d1", "principal_signature": "9e4bd8ffdc71a7f0df25c059a393d1bcb42ba70c3d3f63efe688f89173d2a503", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 22, "entrance_x": 5, "columns": [ 0, 10, 21 ] } ], [ "masonry.chimney", [ 15, 0, 22 ], { "height": 16, "cap_overhang": 0 } ], [ "roof.dormer", [ 11, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 1, 2 ] }, "2c9f47408b8479e8ea772b54f19385a52b24be69e2cfe4f274ce333600e711e9" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 1, 1, 2 ] }, "6d0a19425a24bdac60698019f543f5936da408ec26d7a130216b03e8d630a734" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.library", [ "north" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ] ] ], "contact": { "fill": 48, "excavation": 0, "sitework_occupied_cells": 60, "replaced_cells": 3, "new_sitework_cells": 57, "strategies": [ "stepped" ], "signature": "da4171b0363f0c355b91a423b3c54e5d9a36c775e9c0fa4cc56e9c6539e07dc8", "bearing_fill": 0 }, "blocks": 41950, "nodes": 148, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.66 ], [ 1, 0.96 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.4016, "interior": { "lofts": 2, "purposes": [ "library", "library" ], "stations": 9, "hung_lights": 7, "collar_cells": 28, "guard_cells": 26, "optional_station_omissions": 0, "furniture_signature": "4bd0f5633b978cf4e6a8a3aea3cc0e668562e790df9dd7747bee57e92f621eb3" } }
pair-6-2建造成功2510646545193
查看数据
{ "label": "pair-6-2", "inputs": { "environment_seed": 5106, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, -0.02, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 0.5068836374330448 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": 4, "digest": "f75208f81aff20beb34a406fc97e9a8a9902cb28804d8e529df273c09c9d2dbd", "structure_seed": 2, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "library" } ] }, "bay": 13, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 11, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 4, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "fdf3d23b6c0ef3af4f4517eb9195c40527b190791f2e75409cdf8fe0af2df760", "principal_signature": "cce606473fe4e977129a0ebf1a8ed087de35c9363b9aee2882b922f3d509d7b3", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 18, 0, 26 ], { "height": 18, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 25, 8, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "688cc4eac3ccc70e169b0bfb1544694f6e1eec716c782415315b51e5c3f80ff4" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "274e76b8d893e31dc009dabcec4e65e9ab914d31b1f2d39b51468b8e9cc5fcd4" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.library", [], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "south", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 0, 13 ], "room.library", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6ed9ba1fa820f1d0c789bdd31f07a2ee286fd2cfdfbebf17b1da050c2387895f" ] ] ], "contact": { "fill": 44, "excavation": 0, "sitework_occupied_cells": 50, "replaced_cells": 47, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "e222bacb0415946f4cbc4b78e46b2b1853f34bfa1c4873cf74739bc34971ec54", "bearing_fill": 2 }, "blocks": 46545, "nodes": 193, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 1.44 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "left", 15, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.6298, "interior": { "lofts": 2, "purposes": [ "bedroom", "bedroom" ], "stations": 12, "hung_lights": 13, "collar_cells": 56, "guard_cells": 28, "optional_station_omissions": 0, "furniture_signature": "83b4ce938fb0e786c5903b0c92b8d4c55ed9dcbf6162555639f0ad65541e4de6" } }
pair-6-7建造成功7510644770148
查看数据
{ "label": "pair-6-7", "inputs": { "environment_seed": 5106, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, -0.02, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 0.5068836374330448 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": 4, "digest": "f75208f81aff20beb34a406fc97e9a8a9902cb28804d8e529df273c09c9d2dbd", "structure_seed": 7, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "library" } ] }, "bay": 11, "porch": true, "roof_axis": "auto", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 1, 2 ] }, "dormer_spacing": 11, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 4, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "76e741ad78fd1be91cab90c38dbbeaa06688a989fb39c01e24c60b73806793a4", "principal_signature": "9e4bd8ffdc71a7f0df25c059a393d1bcb42ba70c3d3f63efe688f89173d2a503", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 22, "entrance_x": 5, "columns": [ 0, 10, 21 ] } ], [ "masonry.chimney", [ 15, 0, 22 ], { "height": 16, "cap_overhang": 0 } ], [ "roof.dormer", [ 11, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 1, 2 ] }, "2c9f47408b8479e8ea772b54f19385a52b24be69e2cfe4f274ce333600e711e9" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 1, 1, 2 ] }, "6d0a19425a24bdac60698019f543f5936da408ec26d7a130216b03e8d630a734" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.library", [ "north" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ] ] ], "contact": { "fill": 48, "excavation": 0, "sitework_occupied_cells": 54, "replaced_cells": 51, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "8568657beedbe69bad48a9fc8a3a9bee4f22fbe14d011759a8a3183f3f3e50a2", "bearing_fill": 3 }, "blocks": 44770, "nodes": 148, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 1.56 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.649, "interior": { "lofts": 2, "purposes": [ "library", "library" ], "stations": 9, "hung_lights": 7, "collar_cells": 28, "guard_cells": 25, "optional_station_omissions": 0, "furniture_signature": "43127d579e4cbef7e0809168d1c6508742dffe210505f450a2b0155a696f203a" } }
pair-7-2建造成功2510751244193
查看数据
{ "label": "pair-7-2", "inputs": { "environment_seed": 5107, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.025, 0.02, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 3.7380169651488773 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": 5, "digest": "09a62a558dc4bdf737fb16f532e399782f4c0254cc70f18456d3daca6483c709", "structure_seed": 2, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "library" } ] }, "bay": 13, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 11, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 4, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "bdb0085f6b1a2aaeeffbe5bdca39d0a6c55d8164a5aeb516fb21219f769a1e04", "principal_signature": "cce606473fe4e977129a0ebf1a8ed087de35c9363b9aee2882b922f3d509d7b3", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 18, 0, 26 ], { "height": 18, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 25, 8, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "688cc4eac3ccc70e169b0bfb1544694f6e1eec716c782415315b51e5c3f80ff4" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "274e76b8d893e31dc009dabcec4e65e9ab914d31b1f2d39b51468b8e9cc5fcd4" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.library", [], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "south", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 0, 13 ], "room.library", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6ed9ba1fa820f1d0c789bdd31f07a2ee286fd2cfdfbebf17b1da050c2387895f" ] ] ], "contact": { "fill": 95, "excavation": 0, "sitework_occupied_cells": 101, "replaced_cells": 98, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "44ca4d6f61decf41bb9d30131bb4fa2883ae94013f753311dcf30851762c1f50", "bearing_fill": 2 }, "blocks": 51244, "nodes": 193, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 2.97 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "left", 15, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/space/pair-7-2.litematic", "audit": { "queries": 172, "inventories": 28, "nodes": 193, "digest": "bdb0085f6b1a2aaeeffbe5bdca39d0a6c55d8164a5aeb516fb21219f769a1e04" }, "seconds": 5.3274, "interior": { "lofts": 2, "purposes": [ "bedroom", "bedroom" ], "stations": 12, "hung_lights": 13, "collar_cells": 56, "guard_cells": 28, "optional_station_omissions": 0, "furniture_signature": "83b4ce938fb0e786c5903b0c92b8d4c55ed9dcbf6162555639f0ad65541e4de6" } }
pair-7-7建造成功7510749469148
查看数据
{ "label": "pair-7-7", "inputs": { "environment_seed": 5107, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.025, 0.02, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 3.7380169651488773 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": 5, "digest": "09a62a558dc4bdf737fb16f532e399782f4c0254cc70f18456d3daca6483c709", "structure_seed": 7, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "library" } ] }, "bay": 11, "porch": true, "roof_axis": "auto", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 1, 2 ] }, "dormer_spacing": 11, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 4, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "ed2ba8a8be75ecd8d802ec14cac61e4440cd3a3292250ef1d89d84135ce5b5fa", "principal_signature": "9e4bd8ffdc71a7f0df25c059a393d1bcb42ba70c3d3f63efe688f89173d2a503", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 22, "entrance_x": 5, "columns": [ 0, 10, 21 ] } ], [ "masonry.chimney", [ 15, 0, 22 ], { "height": 16, "cap_overhang": 0 } ], [ "roof.dormer", [ 11, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 1, 2 ] }, "2c9f47408b8479e8ea772b54f19385a52b24be69e2cfe4f274ce333600e711e9" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 1, 1, 2 ] }, "6d0a19425a24bdac60698019f543f5936da408ec26d7a130216b03e8d630a734" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.library", [ "north" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ] ] ], "contact": { "fill": 94, "excavation": 0, "sitework_occupied_cells": 100, "replaced_cells": 97, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "3885c70473c6b58cfa1a79f102b5027639e4acf97c3c51225b05762d777868d6", "bearing_fill": 3 }, "blocks": 49469, "nodes": 148, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 2.94 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.6392, "interior": { "lofts": 2, "purposes": [ "library", "library" ], "stations": 9, "hung_lights": 7, "collar_cells": 28, "guard_cells": 25, "optional_station_omissions": 0, "furniture_signature": "43127d579e4cbef7e0809168d1c6508742dffe210505f450a2b0155a696f203a" } }
held-out-0建造成功0510047000233
查看数据
{ "label": "held-out-0", "inputs": { "environment_seed": 5100, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.025, -0.02, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 1.1149140955172765 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": 4, "digest": "f078b420800a86cbb65bf2adaef9a4ee4b7c1c5d173d085b2445dbc95d19531f", "structure_seed": 0, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 7, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 0 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 3, "interior_design": null } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "b61e21a4d316cd1000161b1a0a4eeb30f841a4a20683d062fbb3412f2740e19c", "principal_signature": "e1ac09724599b47eb5f37722cbceda3fd2156107d8b2af2affbb77c6f1346eec", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 33, "entrance_x": 5, "columns": [ 0, 11, 21, 32 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 13, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 28, 14, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "b62d8e8b73590a3f0bc19e614936c46fe93119b06618899b7909d17bd57da105" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "c23108e7d8c8fab9290b7956fe84197e765636e99425d7a86a9d9c8cc5ee6c60" ], [ "roof.profile", [ 22, 13, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "07086ae80e71229461491cb8741040d422f181438eee9feb49a63a034a11d6c6" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.kitchen", [ "north" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 0, 6, 11 ], "room.loft.library", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 0 ], "room.library", [ "west", "east" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 22, 12, 0 ], "room.loft.library", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 22, 6, 0 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ] ] ], "contact": { "fill": 18, "excavation": 0, "sitework_occupied_cells": 24, "replaced_cells": 21, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "efa1047cda4a2121d76ea90788606a8d02b3a6456b5beb40fc6df92f7d8e7145", "bearing_fill": 3 }, "blocks": 47000, "nodes": 233, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 0.66 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/space/held-out-0.litematic", "audit": { "queries": 211, "inventories": 69, "nodes": 233, "digest": "b61e21a4d316cd1000161b1a0a4eeb30f841a4a20683d062fbb3412f2740e19c" }, "seconds": 4.704, "interior": { "lofts": 3, "purposes": [ "library", "library", "library" ], "stations": 12, "hung_lights": 10, "collar_cells": 31, "guard_cells": 36, "optional_station_omissions": 0, "furniture_signature": "4e22f425977b4d4d455b2b4ff2ad33296612a7791b2240398e8573ad1eaeb4c9" } }
held-out-1建造成功1510146599229
查看数据
{ "label": "held-out-1", "inputs": { "environment_seed": 5101, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.025, -0.02, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 3.711345471405261 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": 4, "digest": "6479c79fab2f2a18c60ab67a0ded5b2b62da51c5813c7c43c0808fdceff34478", "structure_seed": 1, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "auto", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 7, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 0 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 3, "interior_design": null } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "3b4f9c71d96b41c7ffe63c26a6c71582b8234a308728f2d3e0513a2f64e8e8dc", "principal_signature": "5c7c662a46418dd21b2b1e913d01140774d00c961072219f923e2fec82b388cc", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 33, "entrance_x": 5, "columns": [ 0, 11, 21, 32 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 8, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 20 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 10, 8, 16 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 11, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "c24e86f35df4e54c53425ba15a7b0a906403244e59de1f02b8e85275a25f400f" ], [ "roof.profile", [ 11, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "0dfc3106094ec8d461ea41254c23a7395b2f36e637efd274e63445a5beb3d54e" ], [ "roof.profile", [ 22, 7, 0 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "f4adbb7bc52ddf6444a267731d16ecface1d73753b37e290208683eaeea158a9" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.kitchen", [ "north" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "bababbf1ce522065f7a5179560438de468c2194e77c7619b2c0c0c52e35259a0" ], [ "room", [ 11, 0, 0 ], "room.library", [ "west", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 12, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 6, 0 ], "room.bedroom", [], true, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 22, 6, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ] ] ], "contact": { "fill": 64, "excavation": 0, "sitework_occupied_cells": 70, "replaced_cells": 67, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "c012842df872969d49784deef3c0492f23b32b3a7ab10c49d2c302702da2c8da", "bearing_fill": 3 }, "blocks": 46599, "nodes": 229, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 2.04 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ], [ "right", 11, "existing upper volume" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.1246, "interior": { "lofts": 3, "purposes": [ "library", "library", "library" ], "stations": 12, "hung_lights": 13, "collar_cells": 30, "guard_cells": 35, "optional_station_omissions": 0, "furniture_signature": "14d342662aebcba6ebe631d23ba1516075fcc6ff785394338da92ffd1db83467" } }
held-out-2建造成功2510251110227
查看数据
{ "label": "held-out-2", "inputs": { "environment_seed": 5102, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.025, -0.02, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 0.2996337894235028 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": 5, "digest": "a42c8c00773d132fbc4f6f97a6f16242cab8d833c96cdbd85a65eb9ddfc24d63", "structure_seed": 2, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "auto", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 1, 2 ] }, "dormer_spacing": 7, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 0 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "storage", "porch_bays": 3, "interior_design": null } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "b0f4c72b1893257386eeacd90e6928c5202f2fa0d4408168be4880d64abb9c60", "principal_signature": "91e815321e0de83f8f10e04e3421710915262611e8423e8c15cc2468c25814c8", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 33, "entrance_x": 5, "columns": [ 0, 11, 21, 32 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 16, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 24, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 27, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 31, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 1, 1, 2 ] }, "4ee22d6e4b98982772d815b60466e346d24b1cbba3351905c7b514206ff92149" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 1, 1, 2 ] }, "11f95192cba869fbc558f7fbe04da374eada32483e1001944b2948b5a4614cc0" ], [ "roof.profile", [ 11, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 1, 2 ] }, "a4e883f1246db7c5a52778c1dfda65a848a962959e5c0d1d4bfaabd38e73c8e4" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.kitchen", [ "north" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 0 ], "room.loft.storage", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [], true, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 6, 11 ], "room.loft.storage", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 0, 0 ], "room.library", [ "west", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 0 ], "room.loft.storage", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 163, "excavation": 0, "sitework_occupied_cells": 169, "replaced_cells": 166, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "026dba9eecb1518a1351c98794e3b8aa34e3f42936f0a55861ef0c45556db4b6", "bearing_fill": 3 }, "blocks": 51110, "nodes": 227, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 5.01 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.0874, "interior": { "lofts": 3, "purposes": [ "storage", "storage", "storage" ], "stations": 12, "hung_lights": 11, "collar_cells": 26, "guard_cells": 39, "optional_station_omissions": 0, "furniture_signature": "a8028a06381c4d834d016640f507fe755d3ec5e90bef89abed595baf63fee4dd" } }
held-out-3建造成功3510345155200
查看数据
{ "label": "held-out-3", "inputs": { "environment_seed": 5103, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 3.5820797235383988 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": 4, "digest": "52de40a9f9688fe6d5336e33268503458d35cae9e83588245290bb7e51b31380", "structure_seed": 3, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 9, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 1, 2 ] }, "dormer_spacing": 7, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 0 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 3, "interior_design": null } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "1aaf7c786c7777c8104094f0d59d172bd27d17cc8e8feb96fe3d22925424edab", "principal_signature": "a8a37cdc594dcd0f4aa46955b4dbf3c292be484205dc7a4b17dd7f735e1e1cbb", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 27, "entrance_x": 4, "columns": [ 0, 9, 17, 26 ] } ], [ "masonry.chimney", [ 3, 0, 18 ], { "height": 14, "cap_overhang": 0 } ], [ "roof.dormer", [ 13, 8, 8 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 24, 14, 8 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 8 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 9, "rise": [ 1, 1, 2 ] }, "d0fac873ee9e3e53da4ece2a7ef453c994b152f90badd9a9a3d70860def2c406" ], [ "roof.profile", [ 0, 7, 9 ], { "axis": "x", "span": 9, "rise": [ 1, 1, 2 ] }, "188401f5ff54ca7ecf2e2b17ac86babc4df56e66651292f748348adb7db8f2b1" ], [ "roof.profile", [ 18, 13, 0 ], { "axis": "x", "span": 9, "rise": [ 1, 1, 2 ] }, "ead63bfd163b1beaea8fd93840c3d28a1be684fd09af016be5fb298d772954fc" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 0, 9 ], "room.kitchen", [ "north" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "a1d245413a3b1c1d35d6d64ac9ed2f0069f56da8dee0fa6361cace24a159af43" ], [ "room", [ 0, 6, 9 ], "room.loft.bedroom", [ "landing" ], false, "ef83d9a5eb4d203e9d3bbe4d7a7a9f5734310d36cbf2a96c15eabceb268edd7e" ], [ "room", [ 18, 0, 0 ], "room.workshop", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 18, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "ef83d9a5eb4d203e9d3bbe4d7a7a9f5734310d36cbf2a96c15eabceb268edd7e" ], [ "room", [ 18, 6, 0 ], "room.bedroom", [], true, "ef83d9a5eb4d203e9d3bbe4d7a7a9f5734310d36cbf2a96c15eabceb268edd7e" ], [ "room", [ 9, 0, 0 ], "room.library", [ "west", "east" ], false, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ] ] ], "contact": { "fill": 15, "excavation": 0, "sitework_occupied_cells": 21, "replaced_cells": 18, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "c11bc2441b1dacd15fdab4817b7242cc5acbcb73401fcb2fb698d8233e204c68", "bearing_fill": 0 }, "blocks": 45155, "nodes": 200, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 0.57 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.433, "interior": { "lofts": 3, "purposes": [ "bedroom", "bedroom", "bedroom" ], "stations": 8, "hung_lights": 7, "collar_cells": 18, "guard_cells": 28, "optional_station_omissions": 0, "furniture_signature": "8a4c2c002719b2fc9a92c4ab3bf549d52b8e56db93145f21856cf97f29fa21b2" } }
held-out-4建造成功4510451091231
查看数据
{ "label": "held-out-4", "inputs": { "environment_seed": 5104, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 5.74665332849318 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": 5, "digest": "9bf089c4098431257ca338c7a798099adedebd7ff5aba115663e3679b960cc73", "structure_seed": 4, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 1, 2 ] }, "dormer_spacing": 12, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 0 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 3, "interior_design": null } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "5da82a8bdad39d3a42e8a2c410f51b7f1a37962b95bae9d56f886eb9ec0bf950", "principal_signature": "58ecd61843ffaf08ccd2ac960d69acba08d41fc6cc7cb6248143aea3dae666ed", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 33, "entrance_x": 5, "columns": [ 0, 11, 21, 32 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 16, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 8, 18 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 10, 8, 14 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 11, 8, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 22, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "z", "span": 11, "rise": [ 1, 1, 2 ] }, "854d29c80810c4d670740f64f4df5c9f6b0575e77aae9fd2f7a166f43b6ab2dd" ], [ "roof.profile", [ 11, 7, 0 ], { "axis": "z", "span": 11, "rise": [ 1, 1, 2 ] }, "d184fe76b5538e52c7be0965d2629d25e5797bfb7b470ca5195fd1b420451452" ], [ "roof.profile", [ 22, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 1, 1, 2 ] }, "4ee22d6e4b98982772d815b60466e346d24b1cbba3351905c7b514206ff92149" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.kitchen", [ "north" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "bababbf1ce522065f7a5179560438de468c2194e77c7619b2c0c0c52e35259a0" ], [ "room", [ 11, 0, 0 ], "room.library", [ "west", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 22, 12, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 22, 6, 0 ], "room.bedroom", [], true, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ] ] ], "contact": { "fill": 134, "excavation": 0, "sitework_occupied_cells": 143, "replaced_cells": 140, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "ac2a94553ddb4b3d412c6427ce1e680e315e6a56f51d947088ae9017251a3b4d", "bearing_fill": 3 }, "blocks": 51091, "nodes": 231, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 4.23 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.1014, "interior": { "lofts": 3, "purposes": [ "library", "library", "library" ], "stations": 12, "hung_lights": 12, "collar_cells": 35, "guard_cells": 35, "optional_station_omissions": 0, "furniture_signature": "de52a9cbb5abe16625c477c91476851fcd5b27cef9616d62ff2301efe85bb952" } }
held-out-5建造成功5510545138243
查看数据
{ "label": "held-out-5", "inputs": { "environment_seed": 5105, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.025, 0.02, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 3.1794406062920424 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": null, "digest": "e2d600842cafe8efc4ae63ae1b4fabf92f61e2f80bfad89038ae9f4326c31ba9", "structure_seed": 5, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 13, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 1, 2 ] }, "dormer_spacing": 12, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 0 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 3, "interior_design": null } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "d25b9b6438fdb4033a5dcc986cb292e97e9d9d79f93afc0fe3348d1d6bb98a2f", "principal_signature": "5412a11259ea092f9ac6db2be6de7dec3e9e5ad86ec93eea13e253914e531b4d", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 39, "entrance_x": 6, "columns": [ 0, 10, 19, 28, 38 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 14, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 18, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 32, 14, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 25 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 13, "rise": [ 1, 1, 2 ] }, "b77c5e89a64a888faa955a760b104760e3f37873cde9913dbe8d51b2eed9c7b2" ], [ "roof.profile", [ 0, 7, 13 ], { "axis": "x", "span": 13, "rise": [ 1, 1, 2 ] }, "256996200607c0c5ff04846da05bd1a341e5f0e12b4c933df2b588fdeb236f7a" ], [ "roof.profile", [ 26, 13, 0 ], { "axis": "x", "span": 13, "rise": [ 1, 1, 2 ] }, "9f7f58413085c5e91dbcd906af3630de2bf3069e4ecd896c19d8ae4d415ae7b9" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.kitchen", [ "north" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "1f772d91fe5efb4a7e000b7e2ffc7f9ee53707dca111e1b07b68bfe6f063ff12" ], [ "room", [ 0, 6, 13 ], "room.loft.library", [ "landing" ], false, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 13, 0, 0 ], "room.library", [ "west", "east" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 0, 0 ], "room.workshop", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 12, 0 ], "room.loft.library", [ "landing" ], false, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 26, 6, 0 ], "room.bedroom", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ] ] ], "contact": { "fill": 122, "excavation": 0, "sitework_occupied_cells": 134, "replaced_cells": 3, "new_sitework_cells": 131, "strategies": [ "stepped" ], "signature": "bc9b874bda0ddac4b6a98764f1adde451574aa1da415841598ef25119405b7d3", "bearing_fill": 0 }, "blocks": 45138, "nodes": 243, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 0.94 ], [ 0, 1.4 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 4.2908, "interior": { "lofts": 3, "purposes": [ "library", "library", "library" ], "stations": 16, "hung_lights": 18, "collar_cells": 66, "guard_cells": 42, "optional_station_omissions": 0, "furniture_signature": "dfd212695b687e659376cc639debed1c3ef9924e910d4b173cfec19a58961c18" } }
held-out-6建造成功6510645318202
查看数据
{ "label": "held-out-6", "inputs": { "environment_seed": 5106, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, -0.02, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 0.5068836374330448 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": 4, "digest": "f75208f81aff20beb34a406fc97e9a8a9902cb28804d8e529df273c09c9d2dbd", "structure_seed": 6, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 9, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 7, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 0 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "storage", "porch_bays": 3, "interior_design": null } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "ee2793762425ffb05fa82d0ab53fa9f91c2278c28a436e9d35cb9ced673bc5eb", "principal_signature": "7d317635f464098651d90177da6d190da0f8a780e61edde0edffbf521cf7cf73", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 27, "entrance_x": 4, "columns": [ 0, 9, 17, 26 ] } ], [ "masonry.chimney", [ 3, 0, 18 ], { "height": 15, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 8, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 18, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 8, 8, 9 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 1, 2 ] }, "125bd510ddbb06dc73ea564cf51577aa423c6acd5a963e5c30b09c5b977fc899" ], [ "roof.profile", [ 18, 13, 0 ], { "axis": "z", "span": 9, "rise": [ 1, 2 ] }, "3656e62c9a151cedc5cb39ba55526143d5abdf84d48f72ba37045146b0195f8b" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 1, 2 ] }, "5828ba6f6f90c65059d5416c3a40b2e0f69e9a50307737f18c5625d2e5179750" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 0, 9 ], "room.kitchen", [ "north" ], false, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 6, 0 ], "room.loft.storage", [ "landing" ], false, "6fe2adba33f4a74566c07d9920e6f191243b3cc2cf0b4b8f854dc078edb74625" ], [ "room", [ 18, 0, 0 ], "room.workshop", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 18, 12, 0 ], "room.loft.storage", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 18, 6, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.library", [ "west", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 6, 0 ], "room.loft.storage", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ] ] ], "contact": { "fill": 20, "excavation": 0, "sitework_occupied_cells": 26, "replaced_cells": 23, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "e6a2ef90da06f6490a1de5b5ba2f54422d3a9caec66f1d3f64e0c927801d2870", "bearing_fill": 1 }, "blocks": 45318, "nodes": 202, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 0.72 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.4428, "interior": { "lofts": 3, "purposes": [ "storage", "storage", "storage" ], "stations": 8, "hung_lights": 8, "collar_cells": 23, "guard_cells": 30, "optional_station_omissions": 0, "furniture_signature": "f851c94f0cbf11d31fdcb683a100a8b76ab41de46d459b303bee0d70c7c166dd" } }
held-out-7建造成功7510751134225
查看数据
{ "label": "held-out-7", "inputs": { "environment_seed": 5107, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.025, 0.02, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 3.7380169651488773 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": 5, "digest": "09a62a558dc4bdf737fb16f532e399782f4c0254cc70f18456d3daca6483c709", "structure_seed": 7, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 1, 2 ] }, "dormer_spacing": 12, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 0 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 3, "interior_design": null } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "8db2a800660e5a87eceef12c814d330a37a3b00915f9f968773435b0a2e096f9", "principal_signature": "392ba87055e3727093770ff05cc09c2251b626c9983594e7335b8fcd56894ee1", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 33, "entrance_x": 5, "columns": [ 0, 11, 21, 32 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 16, "cap_overhang": 0 } ], [ "roof.dormer", [ 17, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 25, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 29, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 1, 2 ] }, "ed3e5c24517a17e34daa4951cbd6fde78904f60eb0c757e36672b37d19e6420c" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 1, 2 ] }, "76dd91872082d3298fd4b105e1ba78e2a93f95879745eff1a145601ee03ae57a" ], [ "roof.profile", [ 11, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 1, 2 ] }, "28b95c6896ca5b7fd61a342b5b8d866e369e50964b0a54d47cdff074fe3d074d" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.kitchen", [ "north" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 11 ], "room.loft.library", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 0 ], "room.library", [ "west", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 0 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 104, "excavation": 0, "sitework_occupied_cells": 110, "replaced_cells": 107, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "be7c49fd5fe21d30261076f93d7c12802857998ea5fa8a6bbf43423ab1c36d19", "bearing_fill": 3 }, "blocks": 51134, "nodes": 225, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 3.24 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/space/held-out-7.litematic", "audit": { "queries": 203, "inventories": 65, "nodes": 225, "digest": "8db2a800660e5a87eceef12c814d330a37a3b00915f9f968773435b0a2e096f9" }, "seconds": 4.7589, "interior": { "lofts": 3, "purposes": [ "library", "library", "library" ], "stations": 12, "hung_lights": 11, "collar_cells": 35, "guard_cells": 37, "optional_station_omissions": 0, "furniture_signature": "e1233f32f652a0b43369e39afb56576b51f1cd96284dd2b91e06c11ac71077b2" } }
court-0建造成功0410026215486
查看数据
{ "label": "court-0", "inputs": { "structure_seed": 0, "environment_seed": 4100, "garden": true }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "a649d4946ec8dfc0901345b712fc7c1fdd67e28ea894dfd8ff84e43b8d022e10", "principal_signature": "349f70dc96b5d11bcb0574148bc2a00d6f3f5951c11c069aca124ff6420651d0", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 18, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 8, 15 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 24 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 12, 8, 11 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 12, 8, 20 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 12, 8, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 25, 8, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 38, 14, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 38, 8, 15 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "9e0fbadaa825da6bd49f1860058d4ee2072b69221954bdca3c2fcf07f6f58532" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "68dbd3e8a1b5921b193db12a19f1067c7c99f982bd11ceb32104e9d52f6995ab" ], [ "roof.profile", [ 26, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "cf5a97413e2d22c31d3c6ecb3c483b97d0df4fc91cd611acb8975b09668a3442" ], [ "roof.profile", [ 26, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "fa6d3b312c2bad4b384c8bf71d324c87581769852a2d04780e510ff1c0c7d6fc" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.kitchen", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 0, 0 ], "room.library", [ "west", "east" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 0, 0 ], "room.workshop", [ "south", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 0, 13 ], "room.storage", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 6, 0 ], "room.bedroom", [], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 158, "excavation": 0, "sitework_occupied_cells": 194, "replaced_cells": 30, "new_sitework_cells": 164, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "98da4571e1fc2464eb1c11be8301f666dcf3630c0c3305b019518adeebcccd24", "bearing_fill": 3 }, "blocks": 26215, "nodes": 486, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.76 ], [ 0, 1.98 ] ], "chosen": 1 } ], "optional_omissions": [], "artifact": "samples/building-lantern/release/detail/court-0.litematic", "audit": { "queries": 454, "inventories": 77, "nodes": 486, "digest": "a649d4946ec8dfc0901345b712fc7c1fdd67e28ea894dfd8ff84e43b8d022e10" }, "seconds": 5.6237, "details": { "stations": "0bc8be3eeb50ce841fa908bf68d68fe7839ab40d747a63486c9616969449e964", "facade_openings": "d4c82ff591a0c88b9629ad8c90740fa710e31cf810585451cbbef3b5c85d62a4", "station_count": 12, "window_count": 47, "window_boxes": 28 } }
court-1建造成功1410026798502
查看数据
{ "label": "court-1", "inputs": { "structure_seed": 1, "environment_seed": 4100, "garden": true }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "0a37a4422106f309b184b600a1ed289bfb8adfac10bbd7ca3176ed595414ddd9", "principal_signature": "86a3e831520914dac013d96baac42c5169995e07483fc02b4d39f67b2fb74d59", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 18, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 12, 14, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 12, 8, 15 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 25, 8, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 38, 14, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 38, 8, 15 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "ece9d410f10acb23958b8c67dca72a32b36c1f947b984761eeec33802654b525" ], [ "roof.profile", [ 0, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "bd9684f9c786190f4efc8b833b48d80b50826d3cfaeae3b5dd16634395ae28ce" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "d49534a1275c85be52320e5ffca54e2ba73ce438a76733a362277a17118f9c3a" ], [ "roof.profile", [ 26, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "cf5a97413e2d22c31d3c6ecb3c483b97d0df4fc91cd611acb8975b09668a3442" ], [ "roof.profile", [ 26, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "fa6d3b312c2bad4b384c8bf71d324c87581769852a2d04780e510ff1c0c7d6fc" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.kitchen", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.library", [ "west", "east" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 0, 0 ], "room.workshop", [ "south", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 0, 13 ], "room.storage", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 6, 0 ], "room.bedroom", [], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 158, "excavation": 0, "sitework_occupied_cells": 194, "replaced_cells": 30, "new_sitework_cells": 164, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "98da4571e1fc2464eb1c11be8301f666dcf3630c0c3305b019518adeebcccd24", "bearing_fill": 3 }, "blocks": 26798, "nodes": 502, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.76 ], [ 0, 1.98 ] ], "chosen": 1 } ], "optional_omissions": [], "seconds": 4.6138, "details": { "stations": "8a6ab5a03a11254aff9af317e2a7406b45c499d11601ca723bebcbacc6abec73", "facade_openings": "af8241cf8267fdc233a16060e3366755e0846e96a30db1c72f8537b456612927", "station_count": 14, "window_count": 51, "window_boxes": 30 } }
court-2建造成功2410021081408
查看数据
{ "label": "court-2", "inputs": { "structure_seed": 2, "environment_seed": 4100, "garden": true }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "ce0716689f3a86345c2d0ac72ce6136248fe521f45e0701bc38330a9126076cb", "principal_signature": "c1f1277cbddc2fdf6c2490788b6039406f31efc8ba7e6ef50950e3842f1d05ee", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 10, 8, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 22, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 22, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 32, 8, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "c1a11f0f69059d517411ef5e7e60a41e467ab257ac61a4baef00a61de4f2486e" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "f077435e219f2885917fcc7f32ff74239a4d66c67ab33ea3d3a2140859ebf277" ], [ "roof.profile", [ 11, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "65a63520d3754a281ba3f181431ede58eaaf05dd18704d58ec8d47b0a371d9e2" ], [ "roof.profile", [ 22, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "c517627449fef556818812285f34a7a967540385454012fad9fecd7b6eeef1e5" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.kitchen", [ "north" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 0, 0 ], "room.library", [ "west", "east" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 22, 0, 11 ], "room.storage", [ "north" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 130, "excavation": 0, "sitework_occupied_cells": 166, "replaced_cells": 30, "new_sitework_cells": 136, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "7e864981ff2dd3b1ef1c295649a234f0d1513e02868d75127f432eb49588ecdb", "bearing_fill": 3 }, "blocks": 21081, "nodes": 408, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.48 ], [ 0, 1.74 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-3/cover", "dormers": [ [ "right", 4, "existing upper volume" ] ] } ], "artifact": "samples/building-lantern/release/detail/court-2.litematic", "audit": { "queries": 377, "inventories": 66, "nodes": 408, "digest": "ce0716689f3a86345c2d0ac72ce6136248fe521f45e0701bc38330a9126076cb" }, "seconds": 5.1816, "details": { "stations": "16785425ba8f8301abc9f1acb9e88aaaddfcf45a4ac6adef2e377d5d237a58b8", "facade_openings": "c1d4f5bdb65be2a10c45629adf7fc549459e2b123e6dc1002ee3c2bf7cda8506", "station_count": 12, "window_count": 40, "window_boxes": 22 } }
court-3建造成功3410021783458
查看数据
{ "label": "court-3", "inputs": { "structure_seed": 3, "environment_seed": 4100, "garden": true }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "280e7f682ff30edb5d541c4b18533323d0d18f0b1bc8b1b047f7367e93cdd7d9", "principal_signature": "688fe7f93fdc73b9c82a9aa98648de5052727c4c006c3a33e4eda9aa68a8dc64", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 10, 14, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 10, 8, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 11, 8, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 21, 8, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 22, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 22, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 32, 14, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 32, 8, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "de7d264120d5b6d0a0ab30722d9331f55c74ff3c916d72aede52e773e2db4711" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "0357138907cf6c28e5690169bc5833d9202516d7e3335b43532573efc9f0e4a4" ], [ "roof.profile", [ 11, 7, 0 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "9db9e114b27109bd4fac816134dfa3de88927ee621c2a5a4f8936d8f6177d560" ], [ "roof.profile", [ 22, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "9a58cc022b1d53f7dbb961794d57172ff3108541b3cf7b0c82d2dd8cc6d07e2f" ], [ "roof.profile", [ 22, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "d8cbdd7f3ba160ae30c6c33c86ccfda503a93c2af004d69eb332d9e7e9f71010" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.kitchen", [ "north" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 0, 0 ], "room.library", [ "west", "east" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "south", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 22, 0, 11 ], "room.storage", [ "north" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 22, 6, 0 ], "room.bedroom", [], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ] ] ], "contact": { "fill": 130, "excavation": 0, "sitework_occupied_cells": 166, "replaced_cells": 30, "new_sitework_cells": 136, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "7e864981ff2dd3b1ef1c295649a234f0d1513e02868d75127f432eb49588ecdb", "bearing_fill": 3 }, "blocks": 21783, "nodes": 458, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.48 ], [ 0, 1.74 ] ], "chosen": 1 } ], "optional_omissions": [], "seconds": 3.8792, "details": { "stations": "ff08a415a324db40b078f927d514eaef060da539bccddf64c938abed7788ee2a", "facade_openings": "5cfaab216354afea192994134a2992005fbf820f0a70d14fec45a382d69408fb", "station_count": 14, "window_count": 51, "window_boxes": 26 } }
court-4建造成功4410032565588
查看数据
{ "label": "court-4", "inputs": { "structure_seed": 4, "environment_seed": 4100, "garden": true }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "315caa86dcd56be5fbef9756214119e438fa56bedb2f88cdd2e0112e90f14967", "principal_signature": "893c857e5470a6883e5d59bee4136a7fd781b2f64e5d3d822eaae09f5fc6fc88", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 31, 0, 39 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 12, 14, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 12, 8, 15 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 25, 8, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 8, 28 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 8, 37 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 38, 14, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 38, 8, 15 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 38, 8, 24 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 38, 8, 33 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "a082c43f217b782b78ef106b80833172af52e21207ef56a28138b46855e23adb" ], [ "roof.profile", [ 0, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "8a09a1b47cbef6c29c6a8c3c7b1c1da523fee4b0f3636f58f23f5014ff23dee9" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "da18108e2be2359ef7876d2a95146e6b1d56d27652f6b7568ca9851a08a6a7f4" ], [ "roof.profile", [ 26, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "11cf4fffcd367b7f838214e095c5b53a2c789bef9c72cb4ef18d8a0b240db875" ], [ "roof.profile", [ 26, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "c5edc055a7577d689a44fd692ccbd84320059f277fdd34be88097cf530558a29" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.kitchen", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.library", [ "west", "east" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 0, 0 ], "room.workshop", [ "south", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 0, 13 ], "room.storage", [ "north", "south" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 0, 26 ], "room.library", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 6, 0 ], "room.bedroom", [], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 202, "excavation": 0, "sitework_occupied_cells": 238, "replaced_cells": 30, "new_sitework_cells": 208, "strategies": [ "stepped", "stepped", "stepped", "stepped", "stepped" ], "signature": "734c9db84ed38a5507d88de742d111aea743428cf186f07213f1c67b02598f06", "bearing_fill": 1 }, "blocks": 32565, "nodes": 588, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.87 ], [ 0, 2.2 ] ], "chosen": 0 } ], "optional_omissions": [], "seconds": 5.8557, "details": { "stations": "71cfc978cf88ac30db13a6c69d0b36a6c3cc4d10cfc3edeacaf204c9be11bfa9", "facade_openings": "dfa0f779378036ac43b565a553e3aabbf93abaa767515dc60c520fe7c5075a79", "station_count": 16, "window_count": 59, "window_boxes": 34 } }
court-5建造成功5410032807586
查看数据
{ "label": "court-5", "inputs": { "structure_seed": 5, "environment_seed": 4100, "garden": true }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "93a546fe08724d55faab5d47608aef3c77f6c033aeae61b655659aaf9b7cde92", "principal_signature": "d51eda62fc177a4b569a088be8719f64cbdf04089223de94e8fb678542b31f93", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 31, 0, 39 ], { "height": 18, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 12, 14, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 12, 8, 15 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 25, 8, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 8, 28 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 8, 37 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 38, 14, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 38, 8, 15 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 38, 8, 24 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 38, 8, 33 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "ece9d410f10acb23958b8c67dca72a32b36c1f947b984761eeec33802654b525" ], [ "roof.profile", [ 0, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "072cce6798df18e301f84f7a1fc866ddcba2897180aa7c210a703d3d41709939" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "d49534a1275c85be52320e5ffca54e2ba73ce438a76733a362277a17118f9c3a" ], [ "roof.profile", [ 26, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "cf5a97413e2d22c31d3c6ecb3c483b97d0df4fc91cd611acb8975b09668a3442" ], [ "roof.profile", [ 26, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "8ceb8c49931931ee9ef9e06e3d906d764293e6f24ddb382f06f25ba649fd2c9e" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.kitchen", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.library", [ "west", "east" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 0, 0 ], "room.workshop", [ "south", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 0, 13 ], "room.storage", [ "north", "south" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 0, 26 ], "room.library", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 6, 0 ], "room.bedroom", [], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 202, "excavation": 0, "sitework_occupied_cells": 238, "replaced_cells": 30, "new_sitework_cells": 208, "strategies": [ "stepped", "stepped", "stepped", "stepped", "stepped" ], "signature": "734c9db84ed38a5507d88de742d111aea743428cf186f07213f1c67b02598f06", "bearing_fill": 1 }, "blocks": 32807, "nodes": 586, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.87 ], [ 0, 2.2 ] ], "chosen": 0 } ], "optional_omissions": [], "seconds": 5.2409, "details": { "stations": "50671a67d3b1803cbc8e7f120d42546dc2ab9eede1e3d6e9510dfec1bc28e648", "facade_openings": "dfa0f779378036ac43b565a553e3aabbf93abaa767515dc60c520fe7c5075a79", "station_count": 16, "window_count": 59, "window_boxes": 34 } }
court-6建造成功6410025327483
查看数据
{ "label": "court-6", "inputs": { "structure_seed": 6, "environment_seed": 4100, "garden": true }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "a8b7a37f33330114926e1fa847efdb26b0aefec56d865cde092e33eebcae0439", "principal_signature": "6931283cff6c5216e81502dadf445357c14ba6ac7f6d2e84397fff9b7d57204c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 26, 0, 33 ], { "height": 16, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 10, 8, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 22, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 22, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 22, 8, 26 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 32, 8, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 32, 8, 22 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 1, 1, 2 ] }, "b5960813c15baacc09e1bc1e1298e2ce8f4f79aac67b6f9b068fcbfc0c97a00f" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 1, 1, 2 ] }, "0d9934de806de6d6d1021c253f73884b02238d04fadf3e8669c7f0468534ae0f" ], [ "roof.profile", [ 11, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 1, 2 ] }, "595466ba1966d36b0db7ff6ca2e37478802430fdbbf27b2afeff741fbbb30b7a" ], [ "roof.profile", [ 22, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 1, 1, 2 ] }, "3d4abd3a0f589e729bafb3c5ac7b88499b16c259d0b03227d476955694a32a78" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.kitchen", [ "north" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 0, 0 ], "room.library", [ "west", "east" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 22, 0, 11 ], "room.storage", [ "north", "south" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 22, 0, 22 ], "room.library", [ "north" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 142, "excavation": 0, "sitework_occupied_cells": 178, "replaced_cells": 30, "new_sitework_cells": 148, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "84fd456b345606cabad862c724a9c2e4053a932bc6f0769550d31910392b680b", "bearing_fill": 1 }, "blocks": 25327, "nodes": 483, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.6 ], [ 0, 1.94 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-3/cover", "dormers": [ [ "right", 4, "existing upper volume" ] ] } ], "seconds": 3.3617, "details": { "stations": "9002d2cf5945b6f790ef0c9aaa9d0b580721e5a34ac9539ffabda82589208dd0", "facade_openings": "d4e84c6f7fa5732324242db12c6e6956afd82470c3484f07bd7598861f50d8ba", "station_count": 14, "window_count": 46, "window_boxes": 26 } }
court-7建造成功7410026590484
查看数据
{ "label": "court-7", "inputs": { "structure_seed": 7, "environment_seed": 4100, "garden": true }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "2c4d10384bafd846d04d126881700b64fc8b13812f0f7b79db1d3e1262757d72", "principal_signature": "1a892d64672f51e6aa86c1f22ad2acc39d7735f84a0b5db04190132fa2c39cdf", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 12, 14, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 12, 8, 15 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 25, 8, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 38, 14, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 38, 8, 15 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "a082c43f217b782b78ef106b80833172af52e21207ef56a28138b46855e23adb" ], [ "roof.profile", [ 0, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "ac58a23bade7310373b47f1e8f6e751c218827d6cb8b28d46e27b3f84563379a" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "da18108e2be2359ef7876d2a95146e6b1d56d27652f6b7568ca9851a08a6a7f4" ], [ "roof.profile", [ 26, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "11cf4fffcd367b7f838214e095c5b53a2c789bef9c72cb4ef18d8a0b240db875" ], [ "roof.profile", [ 26, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "99196cdad567087f649bc679b00253e86a6b19283e1079be2d3892e091e9d1a8" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.kitchen", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.library", [ "west", "east" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 0, 0 ], "room.workshop", [ "south", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 0, 13 ], "room.storage", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 6, 0 ], "room.bedroom", [], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 158, "excavation": 0, "sitework_occupied_cells": 194, "replaced_cells": 30, "new_sitework_cells": 164, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "98da4571e1fc2464eb1c11be8301f666dcf3630c0c3305b019518adeebcccd24", "bearing_fill": 3 }, "blocks": 26590, "nodes": 484, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.76 ], [ 0, 1.98 ] ], "chosen": 1 } ], "optional_omissions": [], "artifact": "samples/building-lantern/release/detail/court-7.litematic", "audit": { "queries": 449, "inventories": 83, "nodes": 484, "digest": "2c4d10384bafd846d04d126881700b64fc8b13812f0f7b79db1d3e1262757d72" }, "seconds": 6.0282, "details": { "stations": "2d185a0f0ccd9124f863de23c2599a41fb9e7dcdcb6fd5172a5dbd11e280624e", "facade_openings": "af8241cf8267fdc233a16060e3366755e0846e96a30db1c72f8537b456612927", "station_count": 14, "window_count": 51, "window_boxes": 30 } }
new-pair-0-2建造成功2410043935231
查看数据
{ "label": "new-pair-0-2", "inputs": { "environment_seed": 4100, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, -0.02, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 1.9376801597532656 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": null, "digest": "a8c9e47c77a14eaa94764e1e104d6bf780e6135cd16dbf1a242602cc00f95e94", "structure_seed": 2, "garden": false }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "2ca9a6b45d547dafbdb9122bb71cfb3e38055f0099645ea497e8702db0a8371a", "principal_signature": "c1f1277cbddc2fdf6c2490788b6039406f31efc8ba7e6ef50950e3842f1d05ee", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 10, 8, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 22, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 22, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 32, 8, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "c1a11f0f69059d517411ef5e7e60a41e467ab257ac61a4baef00a61de4f2486e" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "f077435e219f2885917fcc7f32ff74239a4d66c67ab33ea3d3a2140859ebf277" ], [ "roof.profile", [ 11, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "65a63520d3754a281ba3f181431ede58eaaf05dd18704d58ec8d47b0a371d9e2" ], [ "roof.profile", [ 22, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "c517627449fef556818812285f34a7a967540385454012fad9fecd7b6eeef1e5" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.kitchen", [ "north" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 0, 0 ], "room.library", [ "west", "east" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 22, 0, 11 ], "room.storage", [ "north" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 76, "excavation": 0, "sitework_occupied_cells": 82, "replaced_cells": 3, "new_sitework_cells": 79, "strategies": [ "stepped" ], "signature": "0f423edcc8b81cd4e92f3ff705d398d247a16ebe17a6bf0675b5a53bf2f19667", "bearing_fill": 1 }, "blocks": 43935, "nodes": 231, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.88 ], [ 1, 1.18 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-3/cover", "dormers": [ [ "right", 4, "existing upper volume" ] ] } ], "artifact": "samples/building-lantern/release/detail/new-pair-0-2.litematic", "audit": { "queries": 215, "inventories": 66, "nodes": 231, "digest": "2ca9a6b45d547dafbdb9122bb71cfb3e38055f0099645ea497e8702db0a8371a" }, "seconds": 5.005, "details": { "stations": "cf868a3f22c811cc98cbd36963c80fda618d70fe73571b25c71b609cd82efb88", "facade_openings": "c1d4f5bdb65be2a10c45629adf7fc549459e2b123e6dc1002ee3c2bf7cda8506", "station_count": 12, "window_count": 40, "window_boxes": 22 } }
new-pair-0-7建造成功7410046146272
查看数据
{ "label": "new-pair-0-7", "inputs": { "environment_seed": 4100, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, -0.02, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 1.9376801597532656 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": null, "digest": "a8c9e47c77a14eaa94764e1e104d6bf780e6135cd16dbf1a242602cc00f95e94", "structure_seed": 7, "garden": false }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "55b5ccfc98d6c995e694837d89b2ac45efbe96c37a1ce399094368af29fbb2c5", "principal_signature": "1a892d64672f51e6aa86c1f22ad2acc39d7735f84a0b5db04190132fa2c39cdf", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 12, 14, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 12, 8, 15 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 25, 8, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 38, 14, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 38, 8, 15 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "a082c43f217b782b78ef106b80833172af52e21207ef56a28138b46855e23adb" ], [ "roof.profile", [ 0, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "ac58a23bade7310373b47f1e8f6e751c218827d6cb8b28d46e27b3f84563379a" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "da18108e2be2359ef7876d2a95146e6b1d56d27652f6b7568ca9851a08a6a7f4" ], [ "roof.profile", [ 26, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "11cf4fffcd367b7f838214e095c5b53a2c789bef9c72cb4ef18d8a0b240db875" ], [ "roof.profile", [ 26, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "99196cdad567087f649bc679b00253e86a6b19283e1079be2d3892e091e9d1a8" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.kitchen", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.library", [ "west", "east" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 0, 0 ], "room.workshop", [ "south", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 0, 13 ], "room.storage", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 6, 0 ], "room.bedroom", [], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 127, "excavation": 0, "sitework_occupied_cells": 133, "replaced_cells": 3, "new_sitework_cells": 130, "strategies": [ "stepped" ], "signature": "9796e5b7166098e20609edfef2bbf2a44157030e212f649fba0aba9d75a4ad84", "bearing_fill": 1 }, "blocks": 46146, "nodes": 272, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 1.39 ], [ 1, 1.44 ] ], "chosen": 0 } ], "optional_omissions": [], "artifact": "samples/building-lantern/release/detail/new-pair-0-7.litematic", "audit": { "queries": 252, "inventories": 83, "nodes": 272, "digest": "55b5ccfc98d6c995e694837d89b2ac45efbe96c37a1ce399094368af29fbb2c5" }, "seconds": 6.0616, "details": { "stations": "8d685ea9888d15d1a68f7a096c2af8cfd3b966c43c599db9e7561c989a290cce", "facade_openings": "af8241cf8267fdc233a16060e3366755e0846e96a30db1c72f8537b456612927", "station_count": 14, "window_count": 51, "window_boxes": 30 } }
new-pair-1-2建造成功2410147217231
查看数据
{ "label": "new-pair-1-2", "inputs": { "environment_seed": 4101, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, -0.02, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 1.6091962898701053 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": 4, "digest": "8f82df698da53194e6d29699c8a29bec3b44f5e47cbca0f1df6458325a0668b2", "structure_seed": 2, "garden": false }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "a17384b12691b3d62010c11e4aafe71caa1c111e35d96e62701953a17d500622", "principal_signature": "c1f1277cbddc2fdf6c2490788b6039406f31efc8ba7e6ef50950e3842f1d05ee", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 10, 8, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 22, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 22, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 32, 8, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "c1a11f0f69059d517411ef5e7e60a41e467ab257ac61a4baef00a61de4f2486e" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "f077435e219f2885917fcc7f32ff74239a4d66c67ab33ea3d3a2140859ebf277" ], [ "roof.profile", [ 11, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "65a63520d3754a281ba3f181431ede58eaaf05dd18704d58ec8d47b0a371d9e2" ], [ "roof.profile", [ 22, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "c517627449fef556818812285f34a7a967540385454012fad9fecd7b6eeef1e5" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.kitchen", [ "north" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 0, 0 ], "room.library", [ "west", "east" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 22, 0, 11 ], "room.storage", [ "north" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 73, "excavation": 0, "sitework_occupied_cells": 79, "replaced_cells": 76, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "2b119f7acdc305f171f30421b9ff8882f5627572c13e57b8273b3bc25867beed", "bearing_fill": 3 }, "blocks": 47217, "nodes": 231, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 2.31 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-3/cover", "dormers": [ [ "right", 4, "existing upper volume" ] ] } ], "artifact": "samples/building-lantern/release/detail/new-pair-1-2.litematic", "audit": { "queries": 215, "inventories": 66, "nodes": 231, "digest": "a17384b12691b3d62010c11e4aafe71caa1c111e35d96e62701953a17d500622" }, "seconds": 4.2667, "details": { "stations": "16785425ba8f8301abc9f1acb9e88aaaddfcf45a4ac6adef2e377d5d237a58b8", "facade_openings": "c1d4f5bdb65be2a10c45629adf7fc549459e2b123e6dc1002ee3c2bf7cda8506", "station_count": 12, "window_count": 40, "window_boxes": 22 } }
new-pair-1-7建造成功7410149377272
查看数据
{ "label": "new-pair-1-7", "inputs": { "environment_seed": 4101, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, -0.02, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 1.6091962898701053 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": 4, "digest": "8f82df698da53194e6d29699c8a29bec3b44f5e47cbca0f1df6458325a0668b2", "structure_seed": 7, "garden": false }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "86cff0c1a9eab88ef9e837dbe706db1f57eb53f545bb10152cca0a7b3e58efe8", "principal_signature": "1a892d64672f51e6aa86c1f22ad2acc39d7735f84a0b5db04190132fa2c39cdf", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 12, 14, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 12, 8, 15 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 25, 8, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 38, 14, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 38, 8, 15 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "a082c43f217b782b78ef106b80833172af52e21207ef56a28138b46855e23adb" ], [ "roof.profile", [ 0, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "ac58a23bade7310373b47f1e8f6e751c218827d6cb8b28d46e27b3f84563379a" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "da18108e2be2359ef7876d2a95146e6b1d56d27652f6b7568ca9851a08a6a7f4" ], [ "roof.profile", [ 26, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "11cf4fffcd367b7f838214e095c5b53a2c789bef9c72cb4ef18d8a0b240db875" ], [ "roof.profile", [ 26, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "99196cdad567087f649bc679b00253e86a6b19283e1079be2d3892e091e9d1a8" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.kitchen", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.library", [ "west", "east" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 0, 0 ], "room.workshop", [ "south", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 0, 13 ], "room.storage", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 6, 0 ], "room.bedroom", [], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 100, "excavation": 0, "sitework_occupied_cells": 106, "replaced_cells": 103, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "910918d4fec0706daa067306e15b95ae3648602b9a5f1a6ae1ffccd5d6935cf8", "bearing_fill": 3 }, "blocks": 49377, "nodes": 272, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 3.12 ] ], "chosen": 1 } ], "optional_omissions": [], "artifact": "samples/building-lantern/release/detail/new-pair-1-7.litematic", "audit": { "queries": 252, "inventories": 83, "nodes": 272, "digest": "86cff0c1a9eab88ef9e837dbe706db1f57eb53f545bb10152cca0a7b3e58efe8" }, "seconds": 5.2644, "details": { "stations": "2d185a0f0ccd9124f863de23c2599a41fb9e7dcdcb6fd5172a5dbd11e280624e", "facade_openings": "af8241cf8267fdc233a16060e3366755e0846e96a30db1c72f8537b456612927", "station_count": 14, "window_count": 51, "window_boxes": 30 } }
new-pair-2-2建造成功2410247217231
查看数据
{ "label": "new-pair-2-2", "inputs": { "environment_seed": 4102, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 5.333154877072996 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": 4, "digest": "17a14b8b8ee4263f9c770f7b0dbb6ecb483dea3c0f72530310f28689db99427f", "structure_seed": 2, "garden": false }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "389806b95c04539b90bff06f767063755fa03d504793c9f9797472459dc91759", "principal_signature": "c1f1277cbddc2fdf6c2490788b6039406f31efc8ba7e6ef50950e3842f1d05ee", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 10, 8, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 22, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 22, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 32, 8, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "c1a11f0f69059d517411ef5e7e60a41e467ab257ac61a4baef00a61de4f2486e" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "f077435e219f2885917fcc7f32ff74239a4d66c67ab33ea3d3a2140859ebf277" ], [ "roof.profile", [ 11, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "65a63520d3754a281ba3f181431ede58eaaf05dd18704d58ec8d47b0a371d9e2" ], [ "roof.profile", [ 22, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "c517627449fef556818812285f34a7a967540385454012fad9fecd7b6eeef1e5" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.kitchen", [ "north" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 0, 0 ], "room.library", [ "west", "east" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 22, 0, 11 ], "room.storage", [ "north" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 31, "excavation": 0, "sitework_occupied_cells": 37, "replaced_cells": 34, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "4b8e9fb76e5bbdc6c5e699333a1dc632e291dcd2ab93acca990b4da019037df7", "bearing_fill": 0 }, "blocks": 47217, "nodes": 231, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 1.05 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-3/cover", "dormers": [ [ "right", 4, "existing upper volume" ] ] } ], "seconds": 1.7028, "details": { "stations": "16785425ba8f8301abc9f1acb9e88aaaddfcf45a4ac6adef2e377d5d237a58b8", "facade_openings": "c1d4f5bdb65be2a10c45629adf7fc549459e2b123e6dc1002ee3c2bf7cda8506", "station_count": 12, "window_count": 40, "window_boxes": 22 } }
new-pair-2-7建造成功7410249377272
查看数据
{ "label": "new-pair-2-7", "inputs": { "environment_seed": 4102, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 5.333154877072996 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": 4, "digest": "17a14b8b8ee4263f9c770f7b0dbb6ecb483dea3c0f72530310f28689db99427f", "structure_seed": 7, "garden": false }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "925ea1ba989c6c2c0412ab5d64c0798eb0b9e594e3e9145460c88678ed1cbc0c", "principal_signature": "1a892d64672f51e6aa86c1f22ad2acc39d7735f84a0b5db04190132fa2c39cdf", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 12, 14, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 12, 8, 15 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 25, 8, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 38, 14, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 38, 8, 15 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "a082c43f217b782b78ef106b80833172af52e21207ef56a28138b46855e23adb" ], [ "roof.profile", [ 0, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "ac58a23bade7310373b47f1e8f6e751c218827d6cb8b28d46e27b3f84563379a" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "da18108e2be2359ef7876d2a95146e6b1d56d27652f6b7568ca9851a08a6a7f4" ], [ "roof.profile", [ 26, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "11cf4fffcd367b7f838214e095c5b53a2c789bef9c72cb4ef18d8a0b240db875" ], [ "roof.profile", [ 26, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "99196cdad567087f649bc679b00253e86a6b19283e1079be2d3892e091e9d1a8" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.kitchen", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.library", [ "west", "east" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 0, 0 ], "room.workshop", [ "south", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 0, 13 ], "room.storage", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 6, 0 ], "room.bedroom", [], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 48, "excavation": 0, "sitework_occupied_cells": 54, "replaced_cells": 51, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "bdc923b5d979bd86ed3f7af7a273d914d4fd414e013d87dcc550f39c8af59d79", "bearing_fill": 0 }, "blocks": 49377, "nodes": 272, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 1.56 ] ], "chosen": 1 } ], "optional_omissions": [], "seconds": 2.38, "details": { "stations": "2d185a0f0ccd9124f863de23c2599a41fb9e7dcdcb6fd5172a5dbd11e280624e", "facade_openings": "af8241cf8267fdc233a16060e3366755e0846e96a30db1c72f8537b456612927", "station_count": 14, "window_count": 51, "window_boxes": 30 } }
new-pair-3-2建造成功2410345625231
查看数据
{ "label": "new-pair-3-2", "inputs": { "environment_seed": 4103, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 0.5111599696578073 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": null, "digest": "8ac94e427f762dfd8328fba902c7e230565fc58407c48af9072dc64c3636dfed", "structure_seed": 2, "garden": false }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "25388e3047fc11294dfd94ff132c05fcced1cdf70ea997407ab4dc61bbc0f873", "principal_signature": "c1f1277cbddc2fdf6c2490788b6039406f31efc8ba7e6ef50950e3842f1d05ee", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 10, 8, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 22, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 22, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 32, 8, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "c1a11f0f69059d517411ef5e7e60a41e467ab257ac61a4baef00a61de4f2486e" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "f077435e219f2885917fcc7f32ff74239a4d66c67ab33ea3d3a2140859ebf277" ], [ "roof.profile", [ 11, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "65a63520d3754a281ba3f181431ede58eaaf05dd18704d58ec8d47b0a371d9e2" ], [ "roof.profile", [ 22, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "c517627449fef556818812285f34a7a967540385454012fad9fecd7b6eeef1e5" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.kitchen", [ "north" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 0, 0 ], "room.library", [ "west", "east" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 22, 0, 11 ], "room.storage", [ "north" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 32, "excavation": 0, "sitework_occupied_cells": 38, "replaced_cells": 3, "new_sitework_cells": 35, "strategies": [ "stepped" ], "signature": "5c7e2f17f4f56f9c6e465fb096bc01d0443407cffeb8b1e4a24d1c9321aaaac2", "bearing_fill": 0 }, "blocks": 45625, "nodes": 231, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.44 ], [ 1, 0.78 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-3/cover", "dormers": [ [ "right", 4, "existing upper volume" ] ] } ], "seconds": 2.4291, "details": { "stations": "cf868a3f22c811cc98cbd36963c80fda618d70fe73571b25c71b609cd82efb88", "facade_openings": "c1d4f5bdb65be2a10c45629adf7fc549459e2b123e6dc1002ee3c2bf7cda8506", "station_count": 12, "window_count": 40, "window_boxes": 22 } }
new-pair-3-7建造成功7410347799272
查看数据
{ "label": "new-pair-3-7", "inputs": { "environment_seed": 4103, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 0.5111599696578073 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": null, "digest": "8ac94e427f762dfd8328fba902c7e230565fc58407c48af9072dc64c3636dfed", "structure_seed": 7, "garden": false }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "5331f307667f44b05b39a90636b4beedbf083630f7260d4c2aa1f6cc84cecf65", "principal_signature": "1a892d64672f51e6aa86c1f22ad2acc39d7735f84a0b5db04190132fa2c39cdf", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 12, 14, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 12, 8, 15 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 25, 8, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 38, 14, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 38, 8, 15 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "a082c43f217b782b78ef106b80833172af52e21207ef56a28138b46855e23adb" ], [ "roof.profile", [ 0, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "ac58a23bade7310373b47f1e8f6e751c218827d6cb8b28d46e27b3f84563379a" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "da18108e2be2359ef7876d2a95146e6b1d56d27652f6b7568ca9851a08a6a7f4" ], [ "roof.profile", [ 26, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "11cf4fffcd367b7f838214e095c5b53a2c789bef9c72cb4ef18d8a0b240db875" ], [ "roof.profile", [ 26, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "99196cdad567087f649bc679b00253e86a6b19283e1079be2d3892e091e9d1a8" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.kitchen", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.library", [ "west", "east" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 0, 0 ], "room.workshop", [ "south", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 0, 13 ], "room.storage", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 6, 0 ], "room.bedroom", [], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 46, "excavation": 0, "sitework_occupied_cells": 52, "replaced_cells": 3, "new_sitework_cells": 49, "strategies": [ "stepped" ], "signature": "89f84ae2325499b0a1b5f9afea768966d694f939b28cad1fb8b0f8e089e9d849", "bearing_fill": 0 }, "blocks": 47799, "nodes": 272, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.58 ], [ 1, 0.88 ] ], "chosen": 0 } ], "optional_omissions": [], "seconds": 3.4211, "details": { "stations": "8d685ea9888d15d1a68f7a096c2af8cfd3b966c43c599db9e7561c989a290cce", "facade_openings": "af8241cf8267fdc233a16060e3366755e0846e96a30db1c72f8537b456612927", "station_count": 14, "window_count": 51, "window_boxes": 30 } }
new-pair-4-2建造成功2410447518231
查看数据
{ "label": "new-pair-4-2", "inputs": { "environment_seed": 4104, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.025, -0.02, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 0.1223935432842791 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": 4, "digest": "3396f0ea8e525372bb7569c27f0a869dadd2a85402d9b636f1db196662175966", "structure_seed": 2, "garden": false }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "13cab84fe9b8d3df0428bd25fd7c29a92d9aaec22304b31e34d9c4b5bf18c715", "principal_signature": "c1f1277cbddc2fdf6c2490788b6039406f31efc8ba7e6ef50950e3842f1d05ee", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 10, 8, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 22, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 22, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 32, 8, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "c1a11f0f69059d517411ef5e7e60a41e467ab257ac61a4baef00a61de4f2486e" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "f077435e219f2885917fcc7f32ff74239a4d66c67ab33ea3d3a2140859ebf277" ], [ "roof.profile", [ 11, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "65a63520d3754a281ba3f181431ede58eaaf05dd18704d58ec8d47b0a371d9e2" ], [ "roof.profile", [ 22, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "c517627449fef556818812285f34a7a967540385454012fad9fecd7b6eeef1e5" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.kitchen", [ "north" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 0, 0 ], "room.library", [ "west", "east" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 22, 0, 11 ], "room.storage", [ "north" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 0, "excavation": 0, "sitework_occupied_cells": 6, "replaced_cells": 3, "new_sitework_cells": 3, "strategies": [ "stepped" ], "signature": "06ea11357cb8ebe51ce59a9fb3cc90529f7cb8ae0970b083ee967bea669e7676", "bearing_fill": 0 }, "blocks": 47518, "nodes": 231, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.12 ], [ 1, 0.52 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-3/cover", "dormers": [ [ "right", 4, "existing upper volume" ] ] } ], "seconds": 2.345, "details": { "stations": "cf868a3f22c811cc98cbd36963c80fda618d70fe73571b25c71b609cd82efb88", "facade_openings": "c1d4f5bdb65be2a10c45629adf7fc549459e2b123e6dc1002ee3c2bf7cda8506", "station_count": 12, "window_count": 40, "window_boxes": 22 } }
new-pair-4-7建造成功7410449678272
查看数据
{ "label": "new-pair-4-7", "inputs": { "environment_seed": 4104, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.025, -0.02, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 0.1223935432842791 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": 4, "digest": "3396f0ea8e525372bb7569c27f0a869dadd2a85402d9b636f1db196662175966", "structure_seed": 7, "garden": false }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "daed39ec6acd1c0a9eaf5c373c112f8ab4e37aa23f6f9c71d461437d907cf143", "principal_signature": "1a892d64672f51e6aa86c1f22ad2acc39d7735f84a0b5db04190132fa2c39cdf", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 12, 14, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 12, 8, 15 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 25, 8, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 38, 14, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 38, 8, 15 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "a082c43f217b782b78ef106b80833172af52e21207ef56a28138b46855e23adb" ], [ "roof.profile", [ 0, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "ac58a23bade7310373b47f1e8f6e751c218827d6cb8b28d46e27b3f84563379a" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "da18108e2be2359ef7876d2a95146e6b1d56d27652f6b7568ca9851a08a6a7f4" ], [ "roof.profile", [ 26, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "11cf4fffcd367b7f838214e095c5b53a2c789bef9c72cb4ef18d8a0b240db875" ], [ "roof.profile", [ 26, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "99196cdad567087f649bc679b00253e86a6b19283e1079be2d3892e091e9d1a8" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.kitchen", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.library", [ "west", "east" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 0, 0 ], "room.workshop", [ "south", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 0, 13 ], "room.storage", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 6, 0 ], "room.bedroom", [], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 14, "excavation": 0, "sitework_occupied_cells": 20, "replaced_cells": 17, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "fb80c881bde38fa55e8c0941c1b873d9fa5ee92d53cf95840f36884843dad39c", "bearing_fill": 3 }, "blocks": 49678, "nodes": 272, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 0.54 ] ], "chosen": 1 } ], "optional_omissions": [], "seconds": 2.4537, "details": { "stations": "2d185a0f0ccd9124f863de23c2599a41fb9e7dcdcb6fd5172a5dbd11e280624e", "facade_openings": "af8241cf8267fdc233a16060e3366755e0846e96a30db1c72f8537b456612927", "station_count": 14, "window_count": 51, "window_boxes": 30 } }
new-pair-5-2建造成功2410543568231
查看数据
{ "label": "new-pair-5-2", "inputs": { "environment_seed": 4105, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.025, 0, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 1.299058974263774 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": null, "digest": "2f0f2680707f39505d74387868c1eebfe74f7a1a2a18e147ba8a18c1b206c553", "structure_seed": 2, "garden": false }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "d33d1cfb95d2fbd78bf48e0e411ee7127cbd36b23800ff1d632b4bc5c4ebd959", "principal_signature": "c1f1277cbddc2fdf6c2490788b6039406f31efc8ba7e6ef50950e3842f1d05ee", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 10, 8, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 22, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 22, 8, 17 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 32, 8, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "c1a11f0f69059d517411ef5e7e60a41e467ab257ac61a4baef00a61de4f2486e" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "f077435e219f2885917fcc7f32ff74239a4d66c67ab33ea3d3a2140859ebf277" ], [ "roof.profile", [ 11, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "65a63520d3754a281ba3f181431ede58eaaf05dd18704d58ec8d47b0a371d9e2" ], [ "roof.profile", [ 22, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 1, 2 ] }, "c517627449fef556818812285f34a7a967540385454012fad9fecd7b6eeef1e5" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.kitchen", [ "north" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 0, 0 ], "room.library", [ "west", "east" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 22, 0, 11 ], "room.storage", [ "north" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 98, "excavation": 0, "sitework_occupied_cells": 105, "replaced_cells": 2, "new_sitework_cells": 103, "strategies": [ "stepped" ], "signature": "447d5e288aac00c23c2aafed1a9632056a239663a32e58d16fd41872eff9d521", "bearing_fill": 0 }, "blocks": 43568, "nodes": 231, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 1.09 ], [ 1, 1.23 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-3/cover", "dormers": [ [ "right", 4, "existing upper volume" ] ] } ], "seconds": 2.3325, "details": { "stations": "cf868a3f22c811cc98cbd36963c80fda618d70fe73571b25c71b609cd82efb88", "facade_openings": "c1d4f5bdb65be2a10c45629adf7fc549459e2b123e6dc1002ee3c2bf7cda8506", "station_count": 12, "window_count": 40, "window_boxes": 22 } }
new-pair-5-7建造成功7410545757272
查看数据
{ "label": "new-pair-5-7", "inputs": { "environment_seed": 4105, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.025, 0, 4 ] }, { "op": "wave", "args": [ 0.3, 0.13, 0.09, 1.299058974263774 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.02, 4 ] }, { "op": "radial", "args": [ 18, 18, 36, 0.5 ] } ] }, { "op": "radial", "args": [ 8, 10, 44, 0.6 ] } ] }, 2, 6 ] }, "water": null, "digest": "2f0f2680707f39505d74387868c1eebfe74f7a1a2a18e147ba8a18c1b206c553", "structure_seed": 7, "garden": false }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "39df4bd8c5f39326ce86a75a2531e664b99702b41c28c8429e6d03a5274609cf", "principal_signature": "1a892d64672f51e6aa86c1f22ad2acc39d7735f84a0b5db04190132fa2c39cdf", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 4, "width": 13, "entrance_x": 6, "columns": [ 0, 12 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 12, 14, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 12, 8, 15 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 25, 8, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 26, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 38, 14, 2 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 38, 8, 15 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "a082c43f217b782b78ef106b80833172af52e21207ef56a28138b46855e23adb" ], [ "roof.profile", [ 0, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "ac58a23bade7310373b47f1e8f6e751c218827d6cb8b28d46e27b3f84563379a" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "da18108e2be2359ef7876d2a95146e6b1d56d27652f6b7568ca9851a08a6a7f4" ], [ "roof.profile", [ 26, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "11cf4fffcd367b7f838214e095c5b53a2c789bef9c72cb4ef18d8a0b240db875" ], [ "roof.profile", [ 26, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 1, 2 ] }, "99196cdad567087f649bc679b00253e86a6b19283e1079be2d3892e091e9d1a8" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.kitchen", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.library", [ "west", "east" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 0, 0 ], "room.workshop", [ "south", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 0, 13 ], "room.storage", [ "north" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 26, 6, 0 ], "room.bedroom", [], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 125, "excavation": 0, "sitework_occupied_cells": 133, "replaced_cells": 1, "new_sitework_cells": 132, "strategies": [ "stepped" ], "signature": "f631de76958ac2167b4090eed37db52b886e7acfb6527b4dcf5cd5aaff9874d7", "bearing_fill": 0 }, "blocks": 45757, "nodes": 272, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 1.35 ], [ 1, 1.41 ] ], "chosen": 0 } ], "optional_omissions": [], "seconds": 3.4463, "details": { "stations": "8d685ea9888d15d1a68f7a096c2af8cfd3b966c43c599db9e7561c989a290cce", "facade_openings": "af8241cf8267fdc233a16060e3366755e0846e96a30db1c72f8537b456612927", "station_count": 14, "window_count": 51, "window_boxes": 30 } }
0-high_house-5建造成功5300034204180
查看数据
{ "label": "0-high_house-5", "inputs": { "environment_seed": 3000, "expression": { "op": "clamp", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.04, 0.03, 4 ] }, { "op": "wave", "args": [ 0.35, 0.17, 0.05, 3.9604651402756024 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.03, 4 ] }, { "op": "radial", "args": [ 13, 10, 25, 0.7 ] } ] }, { "op": "radial", "args": [ 5, 8, 32, 0.8 ] } ] }, 2, -3, 1.1 ] }, 2, 7 ] }, "water": 5, "digest": "29bcb08f41366f7d80aaf01074172db2ee52a37799aa5e811bbbc041d7677451", "client": "high_house", "structure_seed": 5 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "b9604b708dbb039d7d123411bbeb33d4834978c7053b0075ad5fa98ea17f4bd0", "principal_signature": "b64d378d015fd62a0d847ea7a80ab60005fe2d4a0be919ab29ee4c467013f77c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "0130080411befef5eaf5704d0e73486322f060592fd96e18298374ce3309e720" ], [ "roof.profile", [ 9, 13, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "00485a99fedf1eb4927119dd11c650731c1beb4ee60d895664331d64f8a810d4" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.bedroom", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [ "east" ], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], false, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 6, 0 ], "room.workshop", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ] ] ], "contact": { "fill": 50, "excavation": 0, "sitework_occupied_cells": 56, "replaced_cells": 53, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "3ad242d8fc64f9d1c01c3e58537b80508c02bef6a4461625bb85df49160b4170", "bearing_fill": 2 }, "blocks": 34204, "nodes": 180, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 1.62 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/holdout/0-high_house-5.litematic", "audit": { "queries": 161, "inventories": 23, "nodes": 180, "digest": "b9604b708dbb039d7d123411bbeb33d4834978c7053b0075ad5fa98ea17f4bd0" }, "seconds": 2.9953 }
0-gabled_hall-7建造成功7300035813217
查看数据
{ "label": "0-gabled_hall-7", "inputs": { "environment_seed": 3000, "expression": { "op": "clamp", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.04, 0.03, 4 ] }, { "op": "wave", "args": [ 0.35, 0.17, 0.05, 3.9604651402756024 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.03, 4 ] }, { "op": "radial", "args": [ 13, 10, 25, 0.7 ] } ] }, { "op": "radial", "args": [ 5, 8, 32, 0.8 ] } ] }, 2, -3, 1.1 ] }, 2, 7 ] }, "water": 5, "digest": "29bcb08f41366f7d80aaf01074172db2ee52a37799aa5e811bbbc041d7677451", "client": "gabled_hall", "structure_seed": 7 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "dfb3fd52c1a5914530ffbe61eb4db5ff19d4fb8553960e8b1564c008e7a2c8b9", "principal_signature": "cc046ffa51a5d4959cfd53eaa727c070304236bf5f0627d4832dcf702e4b09bf", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 13, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 11 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 11 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "b64d85e397eb5ecefd335dcfd3134e9fa60e1e44cd052e25104ff9328cf73e62" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "80194f0e8ebe0d05342f1ee6399c64352aedba4b8a8f610b6acb018a78b69bb1" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 0, 6, 11 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 11, 0, 0 ], "room.workshop", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.kitchen", [ "north", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 128, "excavation": 0, "sitework_occupied_cells": 134, "replaced_cells": 131, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "57fd9eea3b5b9d306a265083e16e61b79a37b474ef943735407c5f5e08dc7c5a", "bearing_fill": 3 }, "blocks": 35813, "nodes": 217, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 3.96 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/holdout/0-gabled_hall-7.litematic", "audit": { "queries": 197, "inventories": 75, "nodes": 217, "digest": "dfb3fd52c1a5914530ffbe61eb4db5ff19d4fb8553960e8b1564c008e7a2c8b9" }, "seconds": 4.3549 }
1-high_house-5建造成功5300137315180
查看数据
{ "label": "1-high_house-5", "inputs": { "environment_seed": 3001, "expression": { "op": "clamp", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, -0.03, 4 ] }, { "op": "wave", "args": [ 0.35, 0.17, 0.05, 4.560197649098296 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.03, 4 ] }, { "op": "radial", "args": [ 13, 10, 25, 0.7 ] } ] }, { "op": "radial", "args": [ 5, 8, 32, 0.8 ] } ] }, 2, -3, 1.1 ] }, 2, 7 ] }, "water": 6, "digest": "3fd3038ceb1872c8e7716c435791b06e79085c1c4aed0b9542186adf165f4b1f", "client": "high_house", "structure_seed": 5 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "8a169922bbfeffe80edbf4a6f354c2dbecbd45e2f919a98d52dcafe21441a836", "principal_signature": "b64d378d015fd62a0d847ea7a80ab60005fe2d4a0be919ab29ee4c467013f77c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "0130080411befef5eaf5704d0e73486322f060592fd96e18298374ce3309e720" ], [ "roof.profile", [ 9, 13, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "00485a99fedf1eb4927119dd11c650731c1beb4ee60d895664331d64f8a810d4" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.bedroom", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [ "east" ], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], false, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 6, 0 ], "room.workshop", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ] ] ], "contact": { "fill": 96, "excavation": 0, "sitework_occupied_cells": 105, "replaced_cells": 102, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "1490da7746ba07c9995e60f09372a1b8b622c639b117f632166185908a8fa981", "bearing_fill": 2 }, "blocks": 37315, "nodes": 180, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 3.09 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.0988 }
1-gabled_hall-7建造成功7300138924217
查看数据
{ "label": "1-gabled_hall-7", "inputs": { "environment_seed": 3001, "expression": { "op": "clamp", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, -0.03, 4 ] }, { "op": "wave", "args": [ 0.35, 0.17, 0.05, 4.560197649098296 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.03, 4 ] }, { "op": "radial", "args": [ 13, 10, 25, 0.7 ] } ] }, { "op": "radial", "args": [ 5, 8, 32, 0.8 ] } ] }, 2, -3, 1.1 ] }, 2, 7 ] }, "water": 6, "digest": "3fd3038ceb1872c8e7716c435791b06e79085c1c4aed0b9542186adf165f4b1f", "client": "gabled_hall", "structure_seed": 7 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "b6ef487edf832aa48de0f503d3502af4b73b0dabf40ce3149a5d78d22c9ead0e", "principal_signature": "cc046ffa51a5d4959cfd53eaa727c070304236bf5f0627d4832dcf702e4b09bf", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 13, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 11 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 11 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "b64d85e397eb5ecefd335dcfd3134e9fa60e1e44cd052e25104ff9328cf73e62" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "80194f0e8ebe0d05342f1ee6399c64352aedba4b8a8f610b6acb018a78b69bb1" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 0, 6, 11 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 11, 0, 0 ], "room.workshop", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.kitchen", [ "north", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 257, "excavation": 0, "sitework_occupied_cells": 266, "replaced_cells": 263, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "3813e9b636a13a3f2da2abd773ad47f9f3a68b073011755dbf91599013a66edc", "bearing_fill": 3 }, "blocks": 38924, "nodes": 217, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 7.92 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.2644 }
2-high_house-5建造成功5300234375180
查看数据
{ "label": "2-high_house-5", "inputs": { "environment_seed": 3002, "expression": { "op": "clamp", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.04, 0.03, 4 ] }, { "op": "wave", "args": [ 0.35, 0.17, 0.05, 3.2115633617859816 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.03, 4 ] }, { "op": "radial", "args": [ 13, 10, 25, 0.7 ] } ] }, { "op": "radial", "args": [ 5, 8, 32, 0.8 ] } ] }, 2, -3, 1.1 ] }, 2, 7 ] }, "water": 5, "digest": "33442db94e6d5b9d442150ef3f6b16e36070ec38d493053650d966eb240de1d0", "client": "high_house", "structure_seed": 5 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "e509ec9c934e542a3dc0d8e10dac446493341833dd39afdeb8092e6b445a171f", "principal_signature": "b64d378d015fd62a0d847ea7a80ab60005fe2d4a0be919ab29ee4c467013f77c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "0130080411befef5eaf5704d0e73486322f060592fd96e18298374ce3309e720" ], [ "roof.profile", [ 9, 13, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "00485a99fedf1eb4927119dd11c650731c1beb4ee60d895664331d64f8a810d4" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.bedroom", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [ "east" ], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], false, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 6, 0 ], "room.workshop", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ] ] ], "contact": { "fill": 49, "excavation": 0, "sitework_occupied_cells": 55, "replaced_cells": 52, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "cf482cf1f74c6f70fa789f3a72d852d64ccfe6e503265084da3d625c9f94fa01", "bearing_fill": 2 }, "blocks": 34375, "nodes": 180, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 1.59 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.0752 }
2-gabled_hall-7建造成功7300235984217
查看数据
{ "label": "2-gabled_hall-7", "inputs": { "environment_seed": 3002, "expression": { "op": "clamp", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.04, 0.03, 4 ] }, { "op": "wave", "args": [ 0.35, 0.17, 0.05, 3.2115633617859816 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.03, 4 ] }, { "op": "radial", "args": [ 13, 10, 25, 0.7 ] } ] }, { "op": "radial", "args": [ 5, 8, 32, 0.8 ] } ] }, 2, -3, 1.1 ] }, 2, 7 ] }, "water": 5, "digest": "33442db94e6d5b9d442150ef3f6b16e36070ec38d493053650d966eb240de1d0", "client": "gabled_hall", "structure_seed": 7 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "e6a58b669d101fa056ad0236e3e27669cd9e4d055dc7dcbb89f96efd4a64ff7d", "principal_signature": "cc046ffa51a5d4959cfd53eaa727c070304236bf5f0627d4832dcf702e4b09bf", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 13, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 11 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 11 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "b64d85e397eb5ecefd335dcfd3134e9fa60e1e44cd052e25104ff9328cf73e62" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "80194f0e8ebe0d05342f1ee6399c64352aedba4b8a8f610b6acb018a78b69bb1" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 0, 6, 11 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 11, 0, 0 ], "room.workshop", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.kitchen", [ "north", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 101, "excavation": 0, "sitework_occupied_cells": 107, "replaced_cells": 104, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "1e4598ef6c6b33e9a6bac7a3fb0b9e5acbf02743150f73473289728965e5a922", "bearing_fill": 3 }, "blocks": 35984, "nodes": 217, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 3.15 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.1838 }
3-high_house-5建造成功5300334204180
查看数据
{ "label": "3-high_house-5", "inputs": { "environment_seed": 3003, "expression": { "op": "clamp", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.03, 4 ] }, { "op": "wave", "args": [ 0.35, 0.17, 0.05, 2.008807956041616 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.03, 4 ] }, { "op": "radial", "args": [ 13, 10, 25, 0.7 ] } ] }, { "op": "radial", "args": [ 5, 8, 32, 0.8 ] } ] }, 2, -3, 1.1 ] }, 2, 7 ] }, "water": 5, "digest": "a4f3dd3069448018ce63ab0b8a26423676f170b58b4cfe956dd9249416b3fb2e", "client": "high_house", "structure_seed": 5 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "eab8c138048db29e06a5f197abe444f2c5bcc1f9d1e09775dae5d50bc46fc918", "principal_signature": "b64d378d015fd62a0d847ea7a80ab60005fe2d4a0be919ab29ee4c467013f77c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "0130080411befef5eaf5704d0e73486322f060592fd96e18298374ce3309e720" ], [ "roof.profile", [ 9, 13, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "00485a99fedf1eb4927119dd11c650731c1beb4ee60d895664331d64f8a810d4" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.bedroom", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [ "east" ], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], false, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 6, 0 ], "room.workshop", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ] ] ], "contact": { "fill": 49, "excavation": 0, "sitework_occupied_cells": 55, "replaced_cells": 52, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "cf482cf1f74c6f70fa789f3a72d852d64ccfe6e503265084da3d625c9f94fa01", "bearing_fill": 2 }, "blocks": 34204, "nodes": 180, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 1.59 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.0818 }
3-gabled_hall-7建造成功7300335813217
查看数据
{ "label": "3-gabled_hall-7", "inputs": { "environment_seed": 3003, "expression": { "op": "clamp", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.03, 4 ] }, { "op": "wave", "args": [ 0.35, 0.17, 0.05, 2.008807956041616 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.03, 4 ] }, { "op": "radial", "args": [ 13, 10, 25, 0.7 ] } ] }, { "op": "radial", "args": [ 5, 8, 32, 0.8 ] } ] }, 2, -3, 1.1 ] }, 2, 7 ] }, "water": 5, "digest": "a4f3dd3069448018ce63ab0b8a26423676f170b58b4cfe956dd9249416b3fb2e", "client": "gabled_hall", "structure_seed": 7 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "6214cc6fac7ac30ed253472b1c6f0aa1ef2d5b235efb1e46d810607fdf78ef85", "principal_signature": "cc046ffa51a5d4959cfd53eaa727c070304236bf5f0627d4832dcf702e4b09bf", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 13, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 11 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 11 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "b64d85e397eb5ecefd335dcfd3134e9fa60e1e44cd052e25104ff9328cf73e62" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "80194f0e8ebe0d05342f1ee6399c64352aedba4b8a8f610b6acb018a78b69bb1" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 0, 6, 11 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 11, 0, 0 ], "room.workshop", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.kitchen", [ "north", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 117, "excavation": 0, "sitework_occupied_cells": 126, "replaced_cells": 123, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "d047c98ac75832f2f22e1a9321846f4ca6315bcbca42d0edd97c7a718be69018", "bearing_fill": 3 }, "blocks": 35813, "nodes": 217, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 3.72 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.17 }
4-high_house-5建造成功5300434204180
查看数据
{ "label": "4-high_house-5", "inputs": { "environment_seed": 3004, "expression": { "op": "clamp", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.04, -0.03, 4 ] }, { "op": "wave", "args": [ 0.35, 0.17, 0.05, 4.568642839893792 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.03, 4 ] }, { "op": "radial", "args": [ 13, 10, 25, 0.7 ] } ] }, { "op": "radial", "args": [ 5, 8, 32, 0.8 ] } ] }, 2, -3, 1.1 ] }, 2, 7 ] }, "water": 5, "digest": "a7007273bd822f246d872eb3545016d88225df2d3590c972f7c6e8335d7a8f64", "client": "high_house", "structure_seed": 5 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "63cec50f7920f32aca92e7e2b233af1e505ecd241b1f89d21b374781995cf805", "principal_signature": "b64d378d015fd62a0d847ea7a80ab60005fe2d4a0be919ab29ee4c467013f77c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "0130080411befef5eaf5704d0e73486322f060592fd96e18298374ce3309e720" ], [ "roof.profile", [ 9, 13, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "00485a99fedf1eb4927119dd11c650731c1beb4ee60d895664331d64f8a810d4" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.bedroom", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [ "east" ], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], false, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 6, 0 ], "room.workshop", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ] ] ], "contact": { "fill": 53, "excavation": 0, "sitework_occupied_cells": 59, "replaced_cells": 56, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "273a9de1bed16fce2b72a6d27acc254655315360401dae5115b27e39c8fe1ad6", "bearing_fill": 2 }, "blocks": 34204, "nodes": 180, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 1.71 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.0777 }
4-gabled_hall-7建造成功7300435813217
查看数据
{ "label": "4-gabled_hall-7", "inputs": { "environment_seed": 3004, "expression": { "op": "clamp", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.04, -0.03, 4 ] }, { "op": "wave", "args": [ 0.35, 0.17, 0.05, 4.568642839893792 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.03, 4 ] }, { "op": "radial", "args": [ 13, 10, 25, 0.7 ] } ] }, { "op": "radial", "args": [ 5, 8, 32, 0.8 ] } ] }, 2, -3, 1.1 ] }, 2, 7 ] }, "water": 5, "digest": "a7007273bd822f246d872eb3545016d88225df2d3590c972f7c6e8335d7a8f64", "client": "gabled_hall", "structure_seed": 7 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "49c888bcbc0f29b6c0faeb94b6278c5d83fca9857704e34ac43ee0807d7daae7", "principal_signature": "cc046ffa51a5d4959cfd53eaa727c070304236bf5f0627d4832dcf702e4b09bf", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 13, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 11 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 11 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "b64d85e397eb5ecefd335dcfd3134e9fa60e1e44cd052e25104ff9328cf73e62" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "80194f0e8ebe0d05342f1ee6399c64352aedba4b8a8f610b6acb018a78b69bb1" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 0, 6, 11 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 11, 0, 0 ], "room.workshop", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.kitchen", [ "north", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 178, "excavation": 0, "sitework_occupied_cells": 184, "replaced_cells": 181, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "d10e7e4935f1d3917e0aa0b917aad838a2a7a8b33e54155af32bc5e73c9b3fc1", "bearing_fill": 3 }, "blocks": 35813, "nodes": 217, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 5.46 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.1727 }
5-high_house-5建造成功5300534204180
查看数据
{ "label": "5-high_house-5", "inputs": { "environment_seed": 3005, "expression": { "op": "clamp", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.04, -0.03, 4 ] }, { "op": "wave", "args": [ 0.35, 0.17, 0.05, 4.214052939583466 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.03, 4 ] }, { "op": "radial", "args": [ 13, 10, 25, 0.7 ] } ] }, { "op": "radial", "args": [ 5, 8, 32, 0.8 ] } ] }, 2, -3, 1.1 ] }, 2, 7 ] }, "water": 5, "digest": "f9063ca9ea89bddc647f483aca6259fbc63ffab882ff90572bf48a44d6d8107e", "client": "high_house", "structure_seed": 5 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "94af7afcec6649e6683087853472f755c279f34211ad222630a151d5baeec14d", "principal_signature": "b64d378d015fd62a0d847ea7a80ab60005fe2d4a0be919ab29ee4c467013f77c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "0130080411befef5eaf5704d0e73486322f060592fd96e18298374ce3309e720" ], [ "roof.profile", [ 9, 13, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "00485a99fedf1eb4927119dd11c650731c1beb4ee60d895664331d64f8a810d4" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.bedroom", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [ "east" ], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], false, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 6, 0 ], "room.workshop", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ] ] ], "contact": { "fill": 53, "excavation": 0, "sitework_occupied_cells": 59, "replaced_cells": 56, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "273a9de1bed16fce2b72a6d27acc254655315360401dae5115b27e39c8fe1ad6", "bearing_fill": 2 }, "blocks": 34204, "nodes": 180, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 1.71 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.1455 }
5-gabled_hall-7建造成功7300535813217
查看数据
{ "label": "5-gabled_hall-7", "inputs": { "environment_seed": 3005, "expression": { "op": "clamp", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.04, -0.03, 4 ] }, { "op": "wave", "args": [ 0.35, 0.17, 0.05, 4.214052939583466 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.03, 4 ] }, { "op": "radial", "args": [ 13, 10, 25, 0.7 ] } ] }, { "op": "radial", "args": [ 5, 8, 32, 0.8 ] } ] }, 2, -3, 1.1 ] }, 2, 7 ] }, "water": 5, "digest": "f9063ca9ea89bddc647f483aca6259fbc63ffab882ff90572bf48a44d6d8107e", "client": "gabled_hall", "structure_seed": 7 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "d90d074732ba9047f136b8f9c6fa658aa92531f42d8df75cd1853bc3f3f9336c", "principal_signature": "cc046ffa51a5d4959cfd53eaa727c070304236bf5f0627d4832dcf702e4b09bf", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 13, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 11 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 11 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "b64d85e397eb5ecefd335dcfd3134e9fa60e1e44cd052e25104ff9328cf73e62" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "80194f0e8ebe0d05342f1ee6399c64352aedba4b8a8f610b6acb018a78b69bb1" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 0, 6, 11 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 11, 0, 0 ], "room.workshop", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.kitchen", [ "north", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 176, "excavation": 0, "sitework_occupied_cells": 182, "replaced_cells": 179, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "c464711a3d6366c861ca0635c0506d2b38d2eccf850d5a1a650db977777eb2c6", "bearing_fill": 3 }, "blocks": 35813, "nodes": 217, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 5.4 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.1972 }
6-high_house-5建造成功5300634204180
查看数据
{ "label": "6-high_house-5", "inputs": { "environment_seed": 3006, "expression": { "op": "clamp", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0, 4 ] }, { "op": "wave", "args": [ 0.35, 0.17, 0.05, 0.38624098499448767 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.03, 4 ] }, { "op": "radial", "args": [ 13, 10, 25, 0.7 ] } ] }, { "op": "radial", "args": [ 5, 8, 32, 0.8 ] } ] }, 2, -3, 1.1 ] }, 2, 7 ] }, "water": 5, "digest": "5d26de5bff946ce2c1e069f22c997c123a26fbb40339bcb2a8b02a3d44dc9673", "client": "high_house", "structure_seed": 5 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "1edb5ae7a3086d82643b8d77c20d8aec31ef56fb9beb6d30ab006d9206e0467a", "principal_signature": "b64d378d015fd62a0d847ea7a80ab60005fe2d4a0be919ab29ee4c467013f77c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "0130080411befef5eaf5704d0e73486322f060592fd96e18298374ce3309e720" ], [ "roof.profile", [ 9, 13, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "00485a99fedf1eb4927119dd11c650731c1beb4ee60d895664331d64f8a810d4" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.bedroom", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [ "east" ], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], false, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 6, 0 ], "room.workshop", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ] ] ], "contact": { "fill": 49, "excavation": 0, "sitework_occupied_cells": 55, "replaced_cells": 52, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "cf482cf1f74c6f70fa789f3a72d852d64ccfe6e503265084da3d625c9f94fa01", "bearing_fill": 2 }, "blocks": 34204, "nodes": 180, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 1.59 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.0752 }
6-gabled_hall-7建造成功7300635813217
查看数据
{ "label": "6-gabled_hall-7", "inputs": { "environment_seed": 3006, "expression": { "op": "clamp", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0, 4 ] }, { "op": "wave", "args": [ 0.35, 0.17, 0.05, 0.38624098499448767 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.03, 4 ] }, { "op": "radial", "args": [ 13, 10, 25, 0.7 ] } ] }, { "op": "radial", "args": [ 5, 8, 32, 0.8 ] } ] }, 2, -3, 1.1 ] }, 2, 7 ] }, "water": 5, "digest": "5d26de5bff946ce2c1e069f22c997c123a26fbb40339bcb2a8b02a3d44dc9673", "client": "gabled_hall", "structure_seed": 7 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "2e55acf06864633d844bdd7db0dc483bfa1b98f9b9bfb5f756b4379f39aa0f13", "principal_signature": "cc046ffa51a5d4959cfd53eaa727c070304236bf5f0627d4832dcf702e4b09bf", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 13, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 11 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 11 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "b64d85e397eb5ecefd335dcfd3134e9fa60e1e44cd052e25104ff9328cf73e62" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "80194f0e8ebe0d05342f1ee6399c64352aedba4b8a8f610b6acb018a78b69bb1" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 0, 6, 11 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 11, 0, 0 ], "room.workshop", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.kitchen", [ "north", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 116, "excavation": 0, "sitework_occupied_cells": 122, "replaced_cells": 119, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "2c89062acf3e90088f4fd7e47b2e0fe05f6f023dee16b93e6ab0fb078784f5e5", "bearing_fill": 3 }, "blocks": 35813, "nodes": 217, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 3.6 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.229 }
7-high_house-5建造成功5300734204180
查看数据
{ "label": "7-high_house-5", "inputs": { "environment_seed": 3007, "expression": { "op": "clamp", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.04, -0.03, 4 ] }, { "op": "wave", "args": [ 0.35, 0.17, 0.05, 3.076591304124151 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.03, 4 ] }, { "op": "radial", "args": [ 13, 10, 25, 0.7 ] } ] }, { "op": "radial", "args": [ 5, 8, 32, 0.8 ] } ] }, 2, -3, 1.1 ] }, 2, 7 ] }, "water": 5, "digest": "eb2445f2e618f9e63ecfba38198ff96f1451730ec034add72bf4c2f0463ae97d", "client": "high_house", "structure_seed": 5 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "1261c0c9afb5763fb4fc34b27e055e6165630d55b5d014ab1ab4836d06d92cb4", "principal_signature": "b64d378d015fd62a0d847ea7a80ab60005fe2d4a0be919ab29ee4c467013f77c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 4, "width": 9, "entrance_x": 4, "columns": [ 0, 8 ] } ], [ "masonry.chimney", [ 3, 0, 9 ], { "height": 28, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 20, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "0130080411befef5eaf5704d0e73486322f060592fd96e18298374ce3309e720" ], [ "roof.profile", [ 9, 13, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "00485a99fedf1eb4927119dd11c650731c1beb4ee60d895664331d64f8a810d4" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "east" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 0, 12, 0 ], "room.bedroom", [], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 18, 0 ], "room.loft.bedroom", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 0, 6, 0 ], "room.library", [ "east" ], true, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 0, 0 ], "room.kitchen", [ "west" ], false, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ], [ "room", [ 9, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "f40b714da9dc38d2cc7b647ce7a15d6fbfeb627b6255edfdee0690662e7ba81f" ], [ "room", [ 9, 6, 0 ], "room.workshop", [ "west" ], true, "1a87adcdab17411140e351219c2dedb4072716c712d3e00e0ec33c116b7124e1" ] ] ], "contact": { "fill": 49, "excavation": 0, "sitework_occupied_cells": 55, "replaced_cells": 52, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "cf482cf1f74c6f70fa789f3a72d852d64ccfe6e503265084da3d625c9f94fa01", "bearing_fill": 2 }, "blocks": 34204, "nodes": 180, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 1.59 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.0719 }
7-gabled_hall-7建造成功7300735813217
查看数据
{ "label": "7-gabled_hall-7", "inputs": { "environment_seed": 3007, "expression": { "op": "clamp", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.04, -0.03, 4 ] }, { "op": "wave", "args": [ 0.35, 0.17, 0.05, 3.076591304124151 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ -0.02, 0.03, 4 ] }, { "op": "radial", "args": [ 13, 10, 25, 0.7 ] } ] }, { "op": "radial", "args": [ 5, 8, 32, 0.8 ] } ] }, 2, -3, 1.1 ] }, 2, 7 ] }, "water": 5, "digest": "eb2445f2e618f9e63ecfba38198ff96f1451730ec034add72bf4c2f0463ae97d", "client": "gabled_hall", "structure_seed": 7 }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "98ce21a1b836f6323361c8be082d036dd001ecb97cd9b647042be00a839b1ee0", "principal_signature": "cc046ffa51a5d4959cfd53eaa727c070304236bf5f0627d4832dcf702e4b09bf", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 11, "entrance_x": 5, "columns": [ 0, 10 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 13, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 11 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 11 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "b64d85e397eb5ecefd335dcfd3134e9fa60e1e44cd052e25104ff9328cf73e62" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "80194f0e8ebe0d05342f1ee6399c64352aedba4b8a8f610b6acb018a78b69bb1" ], [ "room", [ 0, 0, 0 ], "room.library", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.living", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 0, 6, 11 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 11, 0, 0 ], "room.workshop", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.kitchen", [ "north", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 169, "excavation": 0, "sitework_occupied_cells": 175, "replaced_cells": 172, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "297a695a9e3681e75cfc990fac116273fb1fcaa2893f595683cbe9869b1aeaaf", "bearing_fill": 3 }, "blocks": 35813, "nodes": 217, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 5.19 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.1742 }
hearth-home-0建造成功0016020383
查看数据
{ "label": "hearth-home-0", "inputs": { "structure_seed": 0, "environment_seed": 0, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 2, 1 ] }, "dormer_spacing": 7, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 3, 1 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "68e3fa01aad6e20e2ce3463fceb07fcf78f504cd565a645f541263e9bc1464c6", "principal_signature": "0fd9f927c7845b9f9fb5d585b9b56d1b72fd8fa5a7528aa225d302a0b46800c2", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 22, "entrance_x": 5, "columns": [ 0, 10, 21 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 8, 13 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 0, 8, 20 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 0, 8, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 10, 8, 16 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 11, 14, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 11, 8, 17 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "fc8b95b51f6bc834abf9e794bfc47585bdb58c3a19f28aeb7d80189d9db05f69" ], [ "roof.profile", [ 11, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "e03b237062ae747154f66dada3973ae0f89f8508bffa9ef56bf09afa618738fa" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "15e8819a1dd77acb636eb82f83edb29c87f153a786649eb7d74eb5447277fd48" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north", "east" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "bababbf1ce522065f7a5179560438de468c2194e77c7619b2c0c0c52e35259a0" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.workshop", [ "north", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 6, 0 ], "room.bedroom", [], true, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ] ] ], "contact": { "fill": 118, "excavation": 0, "sitework_occupied_cells": 157, "replaced_cells": 30, "new_sitework_cells": 127, "strategies": [ "stepped", "stepped", "stepped", "stepped", "stepped" ], "signature": "b44634c145653957580ad6389839b95ab4f37b16eafc92e39668213b6ec8ffe8", "bearing_fill": 1 }, "blocks": 16020, "nodes": 383, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 1.13 ], [ 1, 1.47 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ], [ "right", 11, "existing upper volume" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/craft/hearth-home-0.litematic", "audit": { "queries": 345, "inventories": 44, "nodes": 383, "digest": "68e3fa01aad6e20e2ce3463fceb07fcf78f504cd565a645f541263e9bc1464c6" }, "seconds": 5.18, "furnishings": { "stations": 29, "hearths": 2, "dining_lengths": [ 4, 4 ], "interior_signature": "dc3559661de9af74f2c30bb8d088ccfc2ebba8f64c49cba2a7130959322f14eb", "optional_omissions": [ { "component": "/building/room-0-0-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ], [ 5, "no clear supported station and route" ], [ 6, "no clear supported station and route" ], [ 8, "no clear supported station and route" ] ] }, { "component": "/building/room-1-0-0/furniture", "omissions": [ [ 2, "compatible dining alternative already placed" ], [ 3, "compatible dining alternative already placed" ], [ 4, "no clear supported station and route" ], [ 5, "no clear supported station and route" ], [ 7, "no clear supported station and route" ] ] }, { "component": "/building/room-0-1-0/furniture", "omissions": [ [ 3, "compatible dining alternative already placed" ], [ 4, "compatible dining alternative already placed" ], [ 6, "no clear supported station and route" ], [ 8, "station budget" ] ] }, { "component": "/building/room-1-1-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 4, "no clear supported station and route" ] ] }, { "component": "/building/room-1-0-1/furniture", "omissions": [ [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ] ] } ] } }
hearth-home-1建造成功1117641399
查看数据
{ "label": "hearth-home-1", "inputs": { "structure_seed": 1, "environment_seed": 1, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 2, 1 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": true, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "97d4a35806f6baa4a70ed85949f0fce9f0a1c25c1ede4e37dc5fd3b6f4d43797", "principal_signature": "f705b9d34d3b0a686530f3f97fd00818bc55afd5c5c20a79497f87609cd38141", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 5, "width": 22, "entrance_x": 5, "columns": [ 0, 10, 21 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 0, 8, 17 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 11, 14, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 11, 8, 17 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "6884dd2ce12084e02b67d2be6fbc292f8c54ea94e614fad84284fd9c991f920a" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "67043b4be11c0b9d5e5186300cf57a9b2793bc71564007ea96bada9fea4c1e58" ], [ "roof.profile", [ 11, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "ca4f0c0e87a777d02bd3398c994c446dbe9593c14a70b201c00f9b3706e09101" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "147cdd88a206d9840d077b994a86dfc6980f0cf7bd6678941ec83198cb211d70" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north", "east" ], true, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 6, 11 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.workshop", [ "north", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 12, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 6, 0 ], "room.bedroom", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ] ] ], "contact": { "fill": 120, "excavation": 0, "sitework_occupied_cells": 153, "replaced_cells": 27, "new_sitework_cells": 126, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "2c74df87497aefb27a97e1e4bcc1bf7e7cb0bafb658f78fabc7f0452c35a6466", "bearing_fill": 3 }, "blocks": 17641, "nodes": 399, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.38 ], [ 0, 1.54 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-3/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 4.2067, "furnishings": { "stations": 34, "hearths": 2, "dining_lengths": [ 2, 4 ], "interior_signature": "8f07e18acd2ad9fd3f823e92624e9625874b327413fb400564944ecfed00fe18", "optional_omissions": [ { "component": "/building/room-0-0-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 5, "no clear supported station and route" ], [ 6, "no clear supported station and route" ], [ 8, "no clear supported station and route" ] ] }, { "component": "/building/room-1-0-0/furniture", "omissions": [ [ 2, "compatible dining alternative already placed" ], [ 3, "compatible dining alternative already placed" ], [ 7, "station budget" ] ] }, { "component": "/building/room-0-1-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ], [ 5, "no clear supported station and route" ], [ 6, "no clear supported station and route" ] ] }, { "component": "/building/room-1-1-0/furniture", "omissions": [ [ 4, "no clear supported station and route" ] ] }, { "component": "/building/room-0-0-1/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ] ] }, { "component": "/building/room-1-0-1/furniture", "omissions": [ [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ] ] } ] } }
hearth-home-2建造成功2219948386
查看数据
{ "label": "hearth-home-2", "inputs": { "structure_seed": 2, "environment_seed": 2, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 13, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": true, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "ae79b252a38a57b24fe823715660eafefe65f1174ef29c29a1cf96f8fbdc6da8", "principal_signature": "c999651fe114a8d1e82b88ee0979366935b894564f629dc1bdd2da02d31ac48e", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 18, "cap_overhang": 0 } ], [ "roof.dormer", [ 12, 14, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 14, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 25 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "98de5c87983ad5ddec6e322b0f90ec43524d0f12366cbdf9de67f8040c0777ba" ], [ "roof.profile", [ 0, 7, 13 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "1637c0b7c9805a5fc69445860965c3ba734b7405933078e9ac98204ab0358afc" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "1f772d91fe5efb4a7e000b7e2ffc7f9ee53707dca111e1b07b68bfe6f063ff12" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north", "east" ], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 6, 13 ], "room.loft.bedroom", [ "landing" ], false, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.bedroom", [ "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ] ] ], "contact": { "fill": 141, "excavation": 0, "sitework_occupied_cells": 177, "replaced_cells": 27, "new_sitework_cells": 150, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "de0092873f60452d5fa2e5ee59c3a8b70746c3c42c4dc775ecb6a49d8a3f8eee", "bearing_fill": 3 }, "blocks": 19948, "nodes": 386, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.53 ], [ 0, 1.82 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/craft/hearth-home-2.litematic", "audit": { "queries": 349, "inventories": 59, "nodes": 386, "digest": "ae79b252a38a57b24fe823715660eafefe65f1174ef29c29a1cf96f8fbdc6da8" }, "seconds": 6.7211, "furnishings": { "stations": 37, "hearths": 2, "dining_lengths": [ 4, 4, 4 ], "interior_signature": "23ce33332fd9c3e7c2141ee687f90cd6e0729163d5dca667b97cc293a6fe3110", "optional_omissions": [ { "component": "/building/room-0-0-0/furniture", "omissions": [ [ 3, "compatible dining alternative already placed" ], [ 4, "compatible dining alternative already placed" ], [ 7, "station budget" ], [ 8, "station budget" ] ] }, { "component": "/building/room-1-0-0/furniture", "omissions": [ [ 2, "compatible dining alternative already placed" ], [ 3, "compatible dining alternative already placed" ], [ 7, "station budget" ] ] }, { "component": "/building/room-0-1-0/furniture", "omissions": [ [ 3, "compatible dining alternative already placed" ], [ 4, "compatible dining alternative already placed" ], [ 7, "station budget" ], [ 8, "station budget" ] ] } ] } }
hearth-home-3建造成功3321124398
查看数据
{ "label": "hearth-home-3", "inputs": { "structure_seed": 3, "environment_seed": 3, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 13, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 7, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "cf9789f82da0c0b8d5d181f9a201f5bef1ff5587e557159d2bc2e3ded6ec3fe6", "principal_signature": "7c1251918d61f18f7f2b5f51a1f9e4c01e9532434c57d5b7710774b43d07334b", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 18, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 20 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 25, 8, 16 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 25, 8, 9 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "baba60667874f77a69795d6056c2a956f3ff851dc91b8cdf2ba6e3f6f0b9f32e" ], [ "roof.profile", [ 0, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "15d728fd505e6d32149f143d33c48f0626ad010adc513810b4778eb106dc4440" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "9a862e3b042793083ad3b0152fd4a8b2ff78084ff5dbca52f712c3dc8d5a3019" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 13 ], "room.loft.library", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "south", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 0, 13 ], "room.workshop", [ "north", "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "6ed9ba1fa820f1d0c789bdd31f07a2ee286fd2cfdfbebf17b1da050c2387895f" ] ] ], "contact": { "fill": 100, "excavation": 0, "sitework_occupied_cells": 141, "replaced_cells": 27, "new_sitework_cells": 114, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "8cd8487822892ccec7f981b070601d64401ad50846fe212394796f7659c4ebe3", "bearing_fill": 3 }, "blocks": 21124, "nodes": 398, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.02 ], [ 0, 1.26 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "left", 11, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 5.9417, "furnishings": { "stations": 41, "hearths": 2, "dining_lengths": [ 2, 4, 4 ], "interior_signature": "e0d6688c422935e5999b7aa9bb0599dcf76fa1e3b6bce06594507913b83d7d78", "optional_omissions": [ { "component": "/building/room-0-0-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 7, "station budget" ], [ 8, "station budget" ] ] }, { "component": "/building/room-1-0-0/furniture", "omissions": [ [ 2, "compatible dining alternative already placed" ], [ 3, "compatible dining alternative already placed" ], [ 7, "station budget" ] ] }, { "component": "/building/room-0-1-0/furniture", "omissions": [ [ 3, "compatible dining alternative already placed" ], [ 4, "compatible dining alternative already placed" ], [ 7, "station budget" ], [ 8, "station budget" ] ] } ] } }
hearth-home-4建造成功4418873409
查看数据
{ "label": "hearth-home-4", "inputs": { "structure_seed": 4, "environment_seed": 4, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 13, "porch": true, "roof_axis": "auto", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 2, 1 ] }, "dormer_spacing": 7, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": true, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 3, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "e104f017cf33a31556d1d978309551a068efda0e88ef248abb2918ed018828f6", "principal_signature": "1abb74793d040c9c4e90732c54afb1f55431df18fc04cb23665ec8926856d7b7", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 19, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 8, 19 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 13, 14, 12 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 16, 14, 0 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 20, 14, 12 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 6, 14, 12 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 9, 14, 0 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "x", "span": 13, "rise": [ 2, 1 ] }, "05965ff7be268dfea3a7316bdc096e806757b3c3a833410f3e3bede9932c6535" ], [ "roof.profile", [ 0, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 2, 1 ] }, "c76ba2d37902ffa6ff1257e7d468570f01a144638dffd73e3e55101f527fdf46" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "1f772d91fe5efb4a7e000b7e2ffc7f9ee53707dca111e1b07b68bfe6f063ff12" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north", "east" ], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 6, 13 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.bedroom", [ "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ] ] ], "contact": { "fill": 72, "excavation": 0, "sitework_occupied_cells": 110, "replaced_cells": 30, "new_sitework_cells": 80, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "d944c4c0ce2510f36fd726bdc0bae5b726638d7461935b2edbd58c79972feba8", "bearing_fill": 3 }, "blocks": 18873, "nodes": 409, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.84 ], [ 1, 1.04 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 5.4681, "furnishings": { "stations": 37, "hearths": 2, "dining_lengths": [ 3, 3, 3 ], "interior_signature": "a018b3d1e111bfd2e7d560f299c49290bc81f86ebfa7fae22f6ea59a343d6c84", "optional_omissions": [ { "component": "/building/room-0-0-0/furniture", "omissions": [ [ 3, "compatible dining alternative already placed" ], [ 6, "station budget" ], [ 7, "station budget" ] ] }, { "component": "/building/room-1-0-0/furniture", "omissions": [ [ 2, "compatible dining alternative already placed" ], [ 6, "station budget" ] ] }, { "component": "/building/room-0-1-0/furniture", "omissions": [ [ 3, "compatible dining alternative already placed" ], [ 6, "station budget" ], [ 7, "station budget" ] ] } ] } }
hearth-home-5建造成功5520606402
查看数据
{ "label": "hearth-home-5", "inputs": { "structure_seed": 5, "environment_seed": 5, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 13, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 2, 1 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": true, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "933fcf06f8e0a32fd95cd036b3edc377681b5f7312a34cf720dc95606b141b57", "principal_signature": "172ffc5692c0e912968bdf6bf2d2e28032b3ff82fc62a9aca6835fb36130fdde", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 19, "cap_overhang": 0 } ], [ "roof.dormer", [ 12, 14, 0 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 16, 14, 12 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 6, 14, 12 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 6, 8, 25 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "x", "span": 13, "rise": [ 2, 1 ] }, "9c9283ec12f308385be4da141e3cdc1c61a9b87b203930941d5ef332feb1eb1a" ], [ "roof.profile", [ 0, 7, 13 ], { "axis": "x", "span": 13, "rise": [ 2, 1 ] }, "af9f302054b99b91df9f183d092981f540faf50b89b25dbf8f70e29c4f640388" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "1f772d91fe5efb4a7e000b7e2ffc7f9ee53707dca111e1b07b68bfe6f063ff12" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north", "east" ], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 6, 13 ], "room.loft.library", [ "landing" ], false, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.bedroom", [ "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ] ] ], "contact": { "fill": 153, "excavation": 0, "sitework_occupied_cells": 186, "replaced_cells": 27, "new_sitework_cells": 159, "strategies": [ "stepped", "stepped", "stepped", "stepped", "stepped" ], "signature": "9fdeddb94f6fd324b6c034cfd1028fb71d15a4e2fb441f2059d69894c0ad9205", "bearing_fill": 1 }, "blocks": 20606, "nodes": 402, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.42 ], [ 0, 1.71 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/craft/hearth-home-5.litematic", "audit": { "queries": 363, "inventories": 83, "nodes": 402, "digest": "933fcf06f8e0a32fd95cd036b3edc377681b5f7312a34cf720dc95606b141b57" }, "seconds": 7.0483, "furnishings": { "stations": 37, "hearths": 2, "dining_lengths": [ 4, 4, 4 ], "interior_signature": "401650884df07965d47560901680a74caf23242189d30f252a3c03832221d293", "optional_omissions": [ { "component": "/building/room-0-0-0/furniture", "omissions": [ [ 3, "compatible dining alternative already placed" ], [ 4, "compatible dining alternative already placed" ], [ 7, "station budget" ], [ 8, "station budget" ] ] }, { "component": "/building/room-1-0-0/furniture", "omissions": [ [ 2, "compatible dining alternative already placed" ], [ 3, "compatible dining alternative already placed" ], [ 7, "station budget" ] ] }, { "component": "/building/room-0-1-0/furniture", "omissions": [ [ 3, "compatible dining alternative already placed" ], [ 4, "compatible dining alternative already placed" ], [ 7, "station budget" ], [ 8, "station budget" ] ] } ] } }
hearth-home-6建造成功6621388433
查看数据
{ "label": "hearth-home-6", "inputs": { "structure_seed": 6, "environment_seed": 6, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 13, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 3, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "8a86e67652c545dc2e33a402e5b72a97b62ea24cb3eac2a664303aee4a1e3b97", "principal_signature": "e5fd95c649dfd61d18d437869766d5324186426c547a321e8ab6f4b2e4ab3dc3", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 18, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "34a2c81f5f1fe5aef6c63d5848839c11790258a40ab6cc3e8f46a2c6b18274b0" ], [ "roof.profile", [ 0, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "f67c34de8392fcd9495ec5955820942f2e6559a744f8bebbf4cb5920352c8e17" ], [ "roof.profile", [ 13, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "99017f168d5ac9601b2a6b19408cb89d09eae63b394c24d4b8b2a313056edb83" ], [ "roof.profile", [ 13, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "6bae4fe0fe6d6a2fe84800ea9830c061ac32b2f136a28897bcd4a7b084937e08" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "east" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 13 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "south", "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 0, 13 ], "room.workshop", [ "north", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 6, 0 ], "room.bedroom", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 13 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 130, "excavation": 0, "sitework_occupied_cells": 163, "replaced_cells": 27, "new_sitework_cells": 136, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "84ca7edf0ba7c90423084fe92cd8a047f62acefae997d9a9061357d0da4c06e2", "bearing_fill": 3 }, "blocks": 21388, "nodes": 433, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.48 ], [ 0, 1.99 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-3/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 6.3226, "furnishings": { "stations": 46, "hearths": 2, "dining_lengths": [ 3, 3, 2 ], "interior_signature": "91d69c485bac612789c6a5f966e17cbebf09322b0918c254a065dde5a0468e97", "optional_omissions": [ { "component": "/building/room-0-0-0/furniture", "omissions": [ [ 3, "compatible dining alternative already placed" ], [ 6, "station budget" ], [ 7, "station budget" ] ] }, { "component": "/building/room-1-0-0/furniture", "omissions": [ [ 2, "compatible dining alternative already placed" ], [ 6, "station budget" ] ] }, { "component": "/building/room-0-1-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 6, "station budget" ], [ 7, "station budget" ] ] } ] } }
hearth-home-7建造成功7719329364
查看数据
{ "label": "hearth-home-7", "inputs": { "structure_seed": 7, "environment_seed": 7, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 13, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 2, 1 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 3, 1 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "cac0950efe0ab35dcfcf5099f9e80cb0f666eaf119c8930322306d1ca7a5ff32", "principal_signature": "4a4142ecfae0cb53587f1ad878b92c6adebc5d094f5f822f6559a27b648b3bed", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 19, "cap_overhang": 0 } ], [ "roof.dormer", [ 19, 8, 12 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 6, 14, 12 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 6, 8, 25 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "x", "span": 13, "rise": [ 2, 1 ] }, "fb4eea14034cbeef458c0e8395085494f4cf3444806f2adff17adb90d6e90052" ], [ "roof.profile", [ 0, 7, 13 ], { "axis": "x", "span": 13, "rise": [ 2, 1 ] }, "3031f8d89a7f9477fbc2771918d05f44afe427579a4cc02cb1bafffc1a779976" ], [ "roof.profile", [ 13, 7, 0 ], { "axis": "x", "span": 13, "rise": [ 2, 1 ] }, "2c4968df63604ad0bbfeaf488f133a74098a5f2d847de407b52050aa0b1179be" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 6, 13 ], "room.loft.library", [ "landing" ], false, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 0 ], "room.loft.library", [ "landing" ], false, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ] ] ], "contact": { "fill": 28, "excavation": 0, "sitework_occupied_cells": 64, "replaced_cells": 30, "new_sitework_cells": 34, "strategies": [ "stepped", "stepped", "stepped", "stepped", "stepped" ], "signature": "560d59053092a19f570f8152af1a388fcb42bf1d9499274b0636f805210e2d3b", "bearing_fill": 0 }, "blocks": 19329, "nodes": 364, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.28 ], [ 1, 0.66 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/craft/hearth-home-7.litematic", "audit": { "queries": 325, "inventories": 67, "nodes": 364, "digest": "cac0950efe0ab35dcfcf5099f9e80cb0f666eaf119c8930322306d1ca7a5ff32" }, "seconds": 5.7984, "furnishings": { "stations": 32, "hearths": 2, "dining_lengths": [ 2, 4, 4 ], "interior_signature": "c371349b034576f06cb8926c88c24e40135f439de83f8c89fd2aead749681617", "optional_omissions": [ { "component": "/building/room-0-0-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 7, "station budget" ], [ 8, "station budget" ] ] }, { "component": "/building/room-1-0-0/furniture", "omissions": [ [ 2, "compatible dining alternative already placed" ], [ 3, "compatible dining alternative already placed" ], [ 7, "station budget" ] ] }, { "component": "/building/room-0-1-0/furniture", "omissions": [ [ 3, "compatible dining alternative already placed" ], [ 4, "compatible dining alternative already placed" ], [ 7, "station budget" ], [ 8, "station budget" ] ] } ] } }
pair-0-1建造成功1610057406252
查看数据
{ "label": "pair-0-1", "inputs": { "environment_seed": 6100, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.025, 0.02, 4 ] }, { "op": "wave", "args": [ 0.35, 0.11, 0.08, 2.7500109207954706 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.02, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 18, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 11, 12, 42, 0.7 ] } ] }, 2, 6 ] }, "water": 4, "digest": "e606a9df1f88b20909f561cb2e333d8fbd5ff4bf014d2e0d33e2fa7590d06fdb", "structure_seed": 1, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 2, 1 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": true, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "3f316a40443c951beed81c268ae9f35e65e010cce701996bfd64e26cf3295592", "principal_signature": "f705b9d34d3b0a686530f3f97fd00818bc55afd5c5c20a79497f87609cd38141", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 5, "width": 22, "entrance_x": 5, "columns": [ 0, 10, 21 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 0, 8, 17 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 11, 14, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 11, 8, 17 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "6884dd2ce12084e02b67d2be6fbc292f8c54ea94e614fad84284fd9c991f920a" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "67043b4be11c0b9d5e5186300cf57a9b2793bc71564007ea96bada9fea4c1e58" ], [ "roof.profile", [ 11, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "ca4f0c0e87a777d02bd3398c994c446dbe9593c14a70b201c00f9b3706e09101" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "147cdd88a206d9840d077b994a86dfc6980f0cf7bd6678941ec83198cb211d70" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north", "east" ], true, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 6, 11 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.workshop", [ "north", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 12, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 6, 0 ], "room.bedroom", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ] ] ], "contact": { "fill": 6, "excavation": 0, "sitework_occupied_cells": 12, "replaced_cells": 9, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "d6d1b8288296db2441edf7c2548197a9ec17c27cff56d5d0c652af7dbbcc2b36", "bearing_fill": 0 }, "blocks": 57406, "nodes": 252, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 0.3 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-3/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/craft/pair-0-1.litematic", "audit": { "queries": 217, "inventories": 80, "nodes": 252, "digest": "3f316a40443c951beed81c268ae9f35e65e010cce701996bfd64e26cf3295592" }, "seconds": 5.753, "furnishings": { "stations": 34, "hearths": 2, "dining_lengths": [ 2, 4 ], "interior_signature": "8f07e18acd2ad9fd3f823e92624e9625874b327413fb400564944ecfed00fe18", "optional_omissions": [ { "component": "/building/room-0-0-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 5, "no clear supported station and route" ], [ 6, "no clear supported station and route" ], [ 8, "no clear supported station and route" ] ] }, { "component": "/building/room-1-0-0/furniture", "omissions": [ [ 2, "compatible dining alternative already placed" ], [ 3, "compatible dining alternative already placed" ], [ 7, "station budget" ] ] }, { "component": "/building/room-0-1-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ], [ 5, "no clear supported station and route" ], [ 6, "no clear supported station and route" ] ] }, { "component": "/building/room-1-1-0/furniture", "omissions": [ [ 4, "no clear supported station and route" ] ] }, { "component": "/building/room-0-0-1/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ] ] }, { "component": "/building/room-1-0-1/furniture", "omissions": [ [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ] ] } ] } }
pair-0-6建造成功6610058871272
查看数据
{ "label": "pair-0-6", "inputs": { "environment_seed": 6100, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.025, 0.02, 4 ] }, { "op": "wave", "args": [ 0.35, 0.11, 0.08, 2.7500109207954706 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.02, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 18, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 11, 12, 42, 0.7 ] } ] }, 2, 6 ] }, "water": 4, "digest": "e606a9df1f88b20909f561cb2e333d8fbd5ff4bf014d2e0d33e2fa7590d06fdb", "structure_seed": 6, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 13, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 3, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "957149897e1a88d7b10eb6506bbbbbff278d2b9f6ec9de470f26d4aee6a0a90e", "principal_signature": "e5fd95c649dfd61d18d437869766d5324186426c547a321e8ab6f4b2e4ab3dc3", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 18, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "34a2c81f5f1fe5aef6c63d5848839c11790258a40ab6cc3e8f46a2c6b18274b0" ], [ "roof.profile", [ 0, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "f67c34de8392fcd9495ec5955820942f2e6559a744f8bebbf4cb5920352c8e17" ], [ "roof.profile", [ 13, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "99017f168d5ac9601b2a6b19408cb89d09eae63b394c24d4b8b2a313056edb83" ], [ "roof.profile", [ 13, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "6bae4fe0fe6d6a2fe84800ea9830c061ac32b2f136a28897bcd4a7b084937e08" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "east" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 13 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "south", "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 0, 13 ], "room.workshop", [ "north", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 6, 0 ], "room.bedroom", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 13 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 6, "excavation": 0, "sitework_occupied_cells": 12, "replaced_cells": 9, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "1c9f9dbde013d59271ede72daf6822123d8a3b3af967975dbd51653a788be975", "bearing_fill": 0 }, "blocks": 58871, "nodes": 272, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 0.3 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-3/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 3.7612, "furnishings": { "stations": 46, "hearths": 2, "dining_lengths": [ 3, 3, 2 ], "interior_signature": "91d69c485bac612789c6a5f966e17cbebf09322b0918c254a065dde5a0468e97", "optional_omissions": [ { "component": "/building/room-0-0-0/furniture", "omissions": [ [ 3, "compatible dining alternative already placed" ], [ 6, "station budget" ], [ 7, "station budget" ] ] }, { "component": "/building/room-1-0-0/furniture", "omissions": [ [ 2, "compatible dining alternative already placed" ], [ 6, "station budget" ] ] }, { "component": "/building/room-0-1-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 6, "station budget" ], [ 7, "station budget" ] ] } ] } }
pair-1-1建造成功1610155211252
查看数据
{ "label": "pair-1-1", "inputs": { "environment_seed": 6101, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.025, -0.02, 4 ] }, { "op": "wave", "args": [ 0.35, 0.11, 0.08, 5.416250367093774 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.02, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 18, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 11, 12, 42, 0.7 ] } ] }, 2, 6 ] }, "water": 4, "digest": "7d76e3751b945d4405461b7cdb353af10f5b11618e89ef39b4435898dec85eb7", "structure_seed": 1, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 2, 1 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": true, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "9daaf3d6fa389c70ad885c0b1e0e6c0ad14fbfdbee92618b10b6aabcd3157a3b", "principal_signature": "f705b9d34d3b0a686530f3f97fd00818bc55afd5c5c20a79497f87609cd38141", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 5, "width": 22, "entrance_x": 5, "columns": [ 0, 10, 21 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 0, 8, 17 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 11, 14, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 11, 8, 17 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "6884dd2ce12084e02b67d2be6fbc292f8c54ea94e614fad84284fd9c991f920a" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "67043b4be11c0b9d5e5186300cf57a9b2793bc71564007ea96bada9fea4c1e58" ], [ "roof.profile", [ 11, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "ca4f0c0e87a777d02bd3398c994c446dbe9593c14a70b201c00f9b3706e09101" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "147cdd88a206d9840d077b994a86dfc6980f0cf7bd6678941ec83198cb211d70" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north", "east" ], true, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 6, 11 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.workshop", [ "north", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 12, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 6, 0 ], "room.bedroom", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ] ] ], "contact": { "fill": 35, "excavation": 0, "sitework_occupied_cells": 41, "replaced_cells": 38, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "745851e79e159f4e3aad67dd4fd26ac7ecb26a5c05e474f1e616230541ae8919", "bearing_fill": 3 }, "blocks": 55211, "nodes": 252, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 1.17 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-3/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.6485, "furnishings": { "stations": 34, "hearths": 2, "dining_lengths": [ 2, 4 ], "interior_signature": "8f07e18acd2ad9fd3f823e92624e9625874b327413fb400564944ecfed00fe18", "optional_omissions": [ { "component": "/building/room-0-0-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 5, "no clear supported station and route" ], [ 6, "no clear supported station and route" ], [ 8, "no clear supported station and route" ] ] }, { "component": "/building/room-1-0-0/furniture", "omissions": [ [ 2, "compatible dining alternative already placed" ], [ 3, "compatible dining alternative already placed" ], [ 7, "station budget" ] ] }, { "component": "/building/room-0-1-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ], [ 5, "no clear supported station and route" ], [ 6, "no clear supported station and route" ] ] }, { "component": "/building/room-1-1-0/furniture", "omissions": [ [ 4, "no clear supported station and route" ] ] }, { "component": "/building/room-0-0-1/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ] ] }, { "component": "/building/room-1-0-1/furniture", "omissions": [ [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ] ] } ] } }
pair-1-6建造成功6610156676272
查看数据
{ "label": "pair-1-6", "inputs": { "environment_seed": 6101, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.025, -0.02, 4 ] }, { "op": "wave", "args": [ 0.35, 0.11, 0.08, 5.416250367093774 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.02, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 18, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 11, 12, 42, 0.7 ] } ] }, 2, 6 ] }, "water": 4, "digest": "7d76e3751b945d4405461b7cdb353af10f5b11618e89ef39b4435898dec85eb7", "structure_seed": 6, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 13, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 3, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "3abbe828bc270cf58f21d89c1bf21103ff9bc851f01665d90b5938aea142fbc1", "principal_signature": "e5fd95c649dfd61d18d437869766d5324186426c547a321e8ab6f4b2e4ab3dc3", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 18, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "34a2c81f5f1fe5aef6c63d5848839c11790258a40ab6cc3e8f46a2c6b18274b0" ], [ "roof.profile", [ 0, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "f67c34de8392fcd9495ec5955820942f2e6559a744f8bebbf4cb5920352c8e17" ], [ "roof.profile", [ 13, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "99017f168d5ac9601b2a6b19408cb89d09eae63b394c24d4b8b2a313056edb83" ], [ "roof.profile", [ 13, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "6bae4fe0fe6d6a2fe84800ea9830c061ac32b2f136a28897bcd4a7b084937e08" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "east" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 13 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "south", "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 0, 13 ], "room.workshop", [ "north", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 6, 0 ], "room.bedroom", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 13 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 38, "excavation": 0, "sitework_occupied_cells": 44, "replaced_cells": 41, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "3d43482dbb63ec16faf27d8a873d5aecb56826eff879a777c2e55e5198d30252", "bearing_fill": 3 }, "blocks": 56676, "nodes": 272, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 1.26 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-3/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 3.747, "furnishings": { "stations": 46, "hearths": 2, "dining_lengths": [ 3, 3, 2 ], "interior_signature": "91d69c485bac612789c6a5f966e17cbebf09322b0918c254a065dde5a0468e97", "optional_omissions": [ { "component": "/building/room-0-0-0/furniture", "omissions": [ [ 3, "compatible dining alternative already placed" ], [ 6, "station budget" ], [ 7, "station budget" ] ] }, { "component": "/building/room-1-0-0/furniture", "omissions": [ [ 2, "compatible dining alternative already placed" ], [ 6, "station budget" ] ] }, { "component": "/building/room-0-1-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 6, "station budget" ], [ 7, "station budget" ] ] } ] } }
pair-2-1建造成功1610254890252
查看数据
{ "label": "pair-2-1", "inputs": { "environment_seed": 6102, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.025, 0.02, 4 ] }, { "op": "wave", "args": [ 0.35, 0.11, 0.08, 2.8287945666367516 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.02, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 18, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 11, 12, 42, 0.7 ] } ] }, 2, 6 ] }, "water": 4, "digest": "87cdc6da4c8e38d684a74c6562e531ef079e103dde0a82f0a8fc93fde7f5b774", "structure_seed": 1, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 2, 1 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": true, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "03dd9e17adafdb8ab580e19cc68ceca29687931a13e05f5ca67bc47905004129", "principal_signature": "f705b9d34d3b0a686530f3f97fd00818bc55afd5c5c20a79497f87609cd38141", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 5, "width": 22, "entrance_x": 5, "columns": [ 0, 10, 21 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 0, 8, 17 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 11, 14, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 11, 8, 17 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "6884dd2ce12084e02b67d2be6fbc292f8c54ea94e614fad84284fd9c991f920a" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "67043b4be11c0b9d5e5186300cf57a9b2793bc71564007ea96bada9fea4c1e58" ], [ "roof.profile", [ 11, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "ca4f0c0e87a777d02bd3398c994c446dbe9593c14a70b201c00f9b3706e09101" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "147cdd88a206d9840d077b994a86dfc6980f0cf7bd6678941ec83198cb211d70" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north", "east" ], true, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 6, 11 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.workshop", [ "north", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 12, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 6, 0 ], "room.bedroom", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ] ] ], "contact": { "fill": 6, "excavation": 0, "sitework_occupied_cells": 11, "replaced_cells": 8, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "88d21d8c1761f4a2b2fe1793d52a4c0335195562f40eacd06ca3fab32dd54b9f", "bearing_fill": 0 }, "blocks": 54890, "nodes": 252, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 0.27 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-3/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.5836, "furnishings": { "stations": 34, "hearths": 2, "dining_lengths": [ 2, 4 ], "interior_signature": "8f07e18acd2ad9fd3f823e92624e9625874b327413fb400564944ecfed00fe18", "optional_omissions": [ { "component": "/building/room-0-0-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 5, "no clear supported station and route" ], [ 6, "no clear supported station and route" ], [ 8, "no clear supported station and route" ] ] }, { "component": "/building/room-1-0-0/furniture", "omissions": [ [ 2, "compatible dining alternative already placed" ], [ 3, "compatible dining alternative already placed" ], [ 7, "station budget" ] ] }, { "component": "/building/room-0-1-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ], [ 5, "no clear supported station and route" ], [ 6, "no clear supported station and route" ] ] }, { "component": "/building/room-1-1-0/furniture", "omissions": [ [ 4, "no clear supported station and route" ] ] }, { "component": "/building/room-0-0-1/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ] ] }, { "component": "/building/room-1-0-1/furniture", "omissions": [ [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ] ] } ] } }
pair-2-6建造成功6610256355272
查看数据
{ "label": "pair-2-6", "inputs": { "environment_seed": 6102, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.025, 0.02, 4 ] }, { "op": "wave", "args": [ 0.35, 0.11, 0.08, 2.8287945666367516 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.02, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 18, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 11, 12, 42, 0.7 ] } ] }, 2, 6 ] }, "water": 4, "digest": "87cdc6da4c8e38d684a74c6562e531ef079e103dde0a82f0a8fc93fde7f5b774", "structure_seed": 6, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 13, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 3, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "79963b42f09e55b1cb06a5c863cb4ff33ab1b312eb4ccaab83b852ed6e246501", "principal_signature": "e5fd95c649dfd61d18d437869766d5324186426c547a321e8ab6f4b2e4ab3dc3", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 18, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "34a2c81f5f1fe5aef6c63d5848839c11790258a40ab6cc3e8f46a2c6b18274b0" ], [ "roof.profile", [ 0, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "f67c34de8392fcd9495ec5955820942f2e6559a744f8bebbf4cb5920352c8e17" ], [ "roof.profile", [ 13, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "99017f168d5ac9601b2a6b19408cb89d09eae63b394c24d4b8b2a313056edb83" ], [ "roof.profile", [ 13, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "6bae4fe0fe6d6a2fe84800ea9830c061ac32b2f136a28897bcd4a7b084937e08" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "east" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 13 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "south", "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 0, 13 ], "room.workshop", [ "north", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 6, 0 ], "room.bedroom", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 13 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 10, "excavation": 0, "sitework_occupied_cells": 14, "replaced_cells": 11, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "7b920bc7d8d4eae13244cbc683ce122620ca2b2c79ececf2d90a9352083e7542", "bearing_fill": 0 }, "blocks": 56355, "nodes": 272, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 0.36 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-3/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 3.7096, "furnishings": { "stations": 46, "hearths": 2, "dining_lengths": [ 3, 3, 2 ], "interior_signature": "91d69c485bac612789c6a5f966e17cbebf09322b0918c254a065dde5a0468e97", "optional_omissions": [ { "component": "/building/room-0-0-0/furniture", "omissions": [ [ 3, "compatible dining alternative already placed" ], [ 6, "station budget" ], [ 7, "station budget" ] ] }, { "component": "/building/room-1-0-0/furniture", "omissions": [ [ 2, "compatible dining alternative already placed" ], [ 6, "station budget" ] ] }, { "component": "/building/room-0-1-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 6, "station budget" ], [ 7, "station budget" ] ] } ] } }
pair-3-1建造成功1610354691252
查看数据
{ "label": "pair-3-1", "inputs": { "environment_seed": 6103, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.025, -0.02, 4 ] }, { "op": "wave", "args": [ 0.35, 0.11, 0.08, 2.2756439402846844 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.02, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 18, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 11, 12, 42, 0.7 ] } ] }, 2, 6 ] }, "water": 4, "digest": "eb586ac07002dc19577ce3071a900dfbed2280b1fba56376553c9437e6bfe75f", "structure_seed": 1, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 2, 1 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": true, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "b5ce0ca430b09d81f37822d6daa27494a78c6fbb24e75af12737a3d05a2782a9", "principal_signature": "f705b9d34d3b0a686530f3f97fd00818bc55afd5c5c20a79497f87609cd38141", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 5, "width": 22, "entrance_x": 5, "columns": [ 0, 10, 21 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 0, 8, 17 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 11, 14, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 11, 8, 17 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "6884dd2ce12084e02b67d2be6fbc292f8c54ea94e614fad84284fd9c991f920a" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "67043b4be11c0b9d5e5186300cf57a9b2793bc71564007ea96bada9fea4c1e58" ], [ "roof.profile", [ 11, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "ca4f0c0e87a777d02bd3398c994c446dbe9593c14a70b201c00f9b3706e09101" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "147cdd88a206d9840d077b994a86dfc6980f0cf7bd6678941ec83198cb211d70" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north", "east" ], true, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 6, 11 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.workshop", [ "north", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 12, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 6, 0 ], "room.bedroom", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ] ] ], "contact": { "fill": 46, "excavation": 0, "sitework_occupied_cells": 52, "replaced_cells": 49, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "3e3155fff305b58eccd602e5ae27e625780d45f7829ed8bc0d05f1e60ee642fd", "bearing_fill": 3 }, "blocks": 54691, "nodes": 252, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 1.5 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-3/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.5972, "furnishings": { "stations": 34, "hearths": 2, "dining_lengths": [ 2, 4 ], "interior_signature": "8f07e18acd2ad9fd3f823e92624e9625874b327413fb400564944ecfed00fe18", "optional_omissions": [ { "component": "/building/room-0-0-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 5, "no clear supported station and route" ], [ 6, "no clear supported station and route" ], [ 8, "no clear supported station and route" ] ] }, { "component": "/building/room-1-0-0/furniture", "omissions": [ [ 2, "compatible dining alternative already placed" ], [ 3, "compatible dining alternative already placed" ], [ 7, "station budget" ] ] }, { "component": "/building/room-0-1-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ], [ 5, "no clear supported station and route" ], [ 6, "no clear supported station and route" ] ] }, { "component": "/building/room-1-1-0/furniture", "omissions": [ [ 4, "no clear supported station and route" ] ] }, { "component": "/building/room-0-0-1/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ] ] }, { "component": "/building/room-1-0-1/furniture", "omissions": [ [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ] ] } ] } }
pair-3-6建造成功6610356156272
查看数据
{ "label": "pair-3-6", "inputs": { "environment_seed": 6103, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.025, -0.02, 4 ] }, { "op": "wave", "args": [ 0.35, 0.11, 0.08, 2.2756439402846844 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.02, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 18, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 11, 12, 42, 0.7 ] } ] }, 2, 6 ] }, "water": 4, "digest": "eb586ac07002dc19577ce3071a900dfbed2280b1fba56376553c9437e6bfe75f", "structure_seed": 6, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 13, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 3, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "327b9828b59ba6c2c1cd35c3f990affd0356733737259dd0d07d7ff763c99405", "principal_signature": "e5fd95c649dfd61d18d437869766d5324186426c547a321e8ab6f4b2e4ab3dc3", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 18, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "34a2c81f5f1fe5aef6c63d5848839c11790258a40ab6cc3e8f46a2c6b18274b0" ], [ "roof.profile", [ 0, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "f67c34de8392fcd9495ec5955820942f2e6559a744f8bebbf4cb5920352c8e17" ], [ "roof.profile", [ 13, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "99017f168d5ac9601b2a6b19408cb89d09eae63b394c24d4b8b2a313056edb83" ], [ "roof.profile", [ 13, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "6bae4fe0fe6d6a2fe84800ea9830c061ac32b2f136a28897bcd4a7b084937e08" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "east" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 13 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "south", "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 0, 13 ], "room.workshop", [ "north", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 6, 0 ], "room.bedroom", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 13 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 60, "excavation": 0, "sitework_occupied_cells": 66, "replaced_cells": 63, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "d4e640ce53b63105f11371080d235e20b9d8ff35d34a27ba9b3ada67a9b6f7b3", "bearing_fill": 3 }, "blocks": 56156, "nodes": 272, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 1.92 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-3/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/craft/pair-3-6.litematic", "audit": { "queries": 237, "inventories": 77, "nodes": 272, "digest": "327b9828b59ba6c2c1cd35c3f990affd0356733737259dd0d07d7ff763c99405" }, "seconds": 7.0617, "furnishings": { "stations": 46, "hearths": 2, "dining_lengths": [ 3, 3, 2 ], "interior_signature": "91d69c485bac612789c6a5f966e17cbebf09322b0918c254a065dde5a0468e97", "optional_omissions": [ { "component": "/building/room-0-0-0/furniture", "omissions": [ [ 3, "compatible dining alternative already placed" ], [ 6, "station budget" ], [ 7, "station budget" ] ] }, { "component": "/building/room-1-0-0/furniture", "omissions": [ [ 2, "compatible dining alternative already placed" ], [ 6, "station budget" ] ] }, { "component": "/building/room-0-1-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 6, "station budget" ], [ 7, "station budget" ] ] } ] } }
pair-4-1建造成功1610457457252
查看数据
{ "label": "pair-4-1", "inputs": { "environment_seed": 6104, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.025, 0.02, 4 ] }, { "op": "wave", "args": [ 0.35, 0.11, 0.08, 5.069130213443985 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.02, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 18, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 11, 12, 42, 0.7 ] } ] }, 2, 6 ] }, "water": null, "digest": "632e4a73864115036f0eb0d1183f57ae536ca23e39ce5e3e79b3e6e3e0fd1025", "structure_seed": 1, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 2, 1 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": true, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "daca2abd2e6b4f9a3abc3af10d542ee1167ef0577c6f38964328c5c9d6d7ab25", "principal_signature": "f705b9d34d3b0a686530f3f97fd00818bc55afd5c5c20a79497f87609cd38141", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 5, "width": 22, "entrance_x": 5, "columns": [ 0, 10, 21 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 0, 8, 17 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 11, 14, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 11, 8, 17 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "6884dd2ce12084e02b67d2be6fbc292f8c54ea94e614fad84284fd9c991f920a" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "67043b4be11c0b9d5e5186300cf57a9b2793bc71564007ea96bada9fea4c1e58" ], [ "roof.profile", [ 11, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "ca4f0c0e87a777d02bd3398c994c446dbe9593c14a70b201c00f9b3706e09101" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "147cdd88a206d9840d077b994a86dfc6980f0cf7bd6678941ec83198cb211d70" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north", "east" ], true, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 6, 11 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.workshop", [ "north", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 12, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 6, 0 ], "room.bedroom", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ] ] ], "contact": { "fill": 123, "excavation": 0, "sitework_occupied_cells": 135, "replaced_cells": 3, "new_sitework_cells": 132, "strategies": [ "piers" ], "signature": "7990e12be086a3530627adf163328135f2259b0e9ad013abff9e654ae7ee7f39", "bearing_fill": 3 }, "blocks": 57457, "nodes": 252, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.41 ], [ 0, 1.55 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-3/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 4.1026, "furnishings": { "stations": 34, "hearths": 2, "dining_lengths": [ 2, 4 ], "interior_signature": "8f07e18acd2ad9fd3f823e92624e9625874b327413fb400564944ecfed00fe18", "optional_omissions": [ { "component": "/building/room-0-0-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 5, "no clear supported station and route" ], [ 6, "no clear supported station and route" ], [ 8, "no clear supported station and route" ] ] }, { "component": "/building/room-1-0-0/furniture", "omissions": [ [ 2, "compatible dining alternative already placed" ], [ 3, "compatible dining alternative already placed" ], [ 7, "station budget" ] ] }, { "component": "/building/room-0-1-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ], [ 5, "no clear supported station and route" ], [ 6, "no clear supported station and route" ] ] }, { "component": "/building/room-1-1-0/furniture", "omissions": [ [ 4, "no clear supported station and route" ] ] }, { "component": "/building/room-0-0-1/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ] ] }, { "component": "/building/room-1-0-1/furniture", "omissions": [ [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ] ] } ] } }
pair-4-6建造成功6610458909272
查看数据
{ "label": "pair-4-6", "inputs": { "environment_seed": 6104, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.025, 0.02, 4 ] }, { "op": "wave", "args": [ 0.35, 0.11, 0.08, 5.069130213443985 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.02, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 18, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 11, 12, 42, 0.7 ] } ] }, 2, 6 ] }, "water": null, "digest": "632e4a73864115036f0eb0d1183f57ae536ca23e39ce5e3e79b3e6e3e0fd1025", "structure_seed": 6, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 13, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 3, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "3d428eba70fb7d1b313e68cc51bb3fb37f4cf4f9a95abe8514947668574d8c0a", "principal_signature": "e5fd95c649dfd61d18d437869766d5324186426c547a321e8ab6f4b2e4ab3dc3", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 18, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "34a2c81f5f1fe5aef6c63d5848839c11790258a40ab6cc3e8f46a2c6b18274b0" ], [ "roof.profile", [ 0, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "f67c34de8392fcd9495ec5955820942f2e6559a744f8bebbf4cb5920352c8e17" ], [ "roof.profile", [ 13, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "99017f168d5ac9601b2a6b19408cb89d09eae63b394c24d4b8b2a313056edb83" ], [ "roof.profile", [ 13, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "6bae4fe0fe6d6a2fe84800ea9830c061ac32b2f136a28897bcd4a7b084937e08" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "east" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 13 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "south", "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 0, 13 ], "room.workshop", [ "north", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 6, 0 ], "room.bedroom", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 13 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 110, "excavation": 0, "sitework_occupied_cells": 122, "replaced_cells": 3, "new_sitework_cells": 119, "strategies": [ "piers" ], "signature": "588d42bb8f84ffdce095cf080f2d6a8759a606196d20353795c9c9dc60cee8af", "bearing_fill": 3 }, "blocks": 58909, "nodes": 272, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.28 ], [ 0, 1.65 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-3/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 5.9713, "furnishings": { "stations": 46, "hearths": 2, "dining_lengths": [ 3, 3, 2 ], "interior_signature": "91d69c485bac612789c6a5f966e17cbebf09322b0918c254a065dde5a0468e97", "optional_omissions": [ { "component": "/building/room-0-0-0/furniture", "omissions": [ [ 3, "compatible dining alternative already placed" ], [ 6, "station budget" ], [ 7, "station budget" ] ] }, { "component": "/building/room-1-0-0/furniture", "omissions": [ [ 2, "compatible dining alternative already placed" ], [ 6, "station budget" ] ] }, { "component": "/building/room-0-1-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 6, "station budget" ], [ 7, "station budget" ] ] } ] } }
pair-5-1建造成功1610557105249
查看数据
{ "label": "pair-5-1", "inputs": { "environment_seed": 6105, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.025, 0.02, 4 ] }, { "op": "wave", "args": [ 0.35, 0.11, 0.08, 0.7221659045901236 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.02, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 18, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 11, 12, 42, 0.7 ] } ] }, 2, 6 ] }, "water": null, "digest": "90c095ca0a3aa36a1bf161b40a5c9b660fdaf47a5a1eee9a07ccb09f96b7eaa0", "structure_seed": 1, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 2, 1 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": true, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "13c801e34d506cfce8432022d1e462168b61a2f6e4502a5609482ef4e50ae805", "principal_signature": "f705b9d34d3b0a686530f3f97fd00818bc55afd5c5c20a79497f87609cd38141", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 5, "width": 22, "entrance_x": 5, "columns": [ 0, 10, 21 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 0, 8, 17 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 11, 14, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 11, 8, 17 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "6884dd2ce12084e02b67d2be6fbc292f8c54ea94e614fad84284fd9c991f920a" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "67043b4be11c0b9d5e5186300cf57a9b2793bc71564007ea96bada9fea4c1e58" ], [ "roof.profile", [ 11, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "ca4f0c0e87a777d02bd3398c994c446dbe9593c14a70b201c00f9b3706e09101" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "147cdd88a206d9840d077b994a86dfc6980f0cf7bd6678941ec83198cb211d70" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north", "east" ], true, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 6, 11 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.workshop", [ "north", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 12, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 6, 0 ], "room.bedroom", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ] ] ], "contact": { "fill": 0, "excavation": 0, "sitework_occupied_cells": 6, "replaced_cells": 3, "new_sitework_cells": 3, "strategies": [ "stepped" ], "signature": "e635039e24f0db63a759a1ffca56b5aa99fe2d15ca908785b824bba801f7173b", "bearing_fill": 0 }, "blocks": 57105, "nodes": 249, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.12 ], [ 1, 0.52 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-3/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 4.0909, "furnishings": { "stations": 30, "hearths": 2, "dining_lengths": [ 4 ], "interior_signature": "d51fc8ece478c1bfa39d95b3830b2abc548de7612be97fc373070326820e04ac", "optional_omissions": [ { "component": "/building/room-0-0-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ], [ 5, "no clear supported station and route" ], [ 6, "no clear supported station and route" ], [ 8, "no clear supported station and route" ] ] }, { "component": "/building/room-1-0-0/furniture", "omissions": [ [ 2, "compatible dining alternative already placed" ], [ 3, "compatible dining alternative already placed" ], [ 7, "station budget" ] ] }, { "component": "/building/room-0-1-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ], [ 5, "no clear supported station and route" ], [ 6, "no clear supported station and route" ], [ 8, "no clear supported station and route" ] ] }, { "component": "/building/room-1-1-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ] ] }, { "component": "/building/room-0-0-1/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 4, "no clear supported station and route" ] ] }, { "component": "/building/room-1-0-1/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ] ] } ] } }
pair-5-6建造成功6610558729272
查看数据
{ "label": "pair-5-6", "inputs": { "environment_seed": 6105, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.025, 0.02, 4 ] }, { "op": "wave", "args": [ 0.35, 0.11, 0.08, 0.7221659045901236 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.02, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 18, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 11, 12, 42, 0.7 ] } ] }, 2, 6 ] }, "water": null, "digest": "90c095ca0a3aa36a1bf161b40a5c9b660fdaf47a5a1eee9a07ccb09f96b7eaa0", "structure_seed": 6, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 13, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 3, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "053c10dfc78c8e909f2a32ca2c4a1f93b3bfa76af955856ec1dfe78ff4ed5921", "principal_signature": "e5fd95c649dfd61d18d437869766d5324186426c547a321e8ab6f4b2e4ab3dc3", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 18, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "34a2c81f5f1fe5aef6c63d5848839c11790258a40ab6cc3e8f46a2c6b18274b0" ], [ "roof.profile", [ 0, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "f67c34de8392fcd9495ec5955820942f2e6559a744f8bebbf4cb5920352c8e17" ], [ "roof.profile", [ 13, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "99017f168d5ac9601b2a6b19408cb89d09eae63b394c24d4b8b2a313056edb83" ], [ "roof.profile", [ 13, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "6bae4fe0fe6d6a2fe84800ea9830c061ac32b2f136a28897bcd4a7b084937e08" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "east" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 13 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "south", "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 0, 13 ], "room.workshop", [ "north", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 6, 0 ], "room.bedroom", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 13 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 110, "excavation": 0, "sitework_occupied_cells": 122, "replaced_cells": 3, "new_sitework_cells": 119, "strategies": [ "piers" ], "signature": "def1414a0070d7901c71bac1b6d3154041cb9140f8975fcde383b48d75ae9d9f", "bearing_fill": 3 }, "blocks": 58729, "nodes": 272, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.68 ], [ 0, 1.76 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-3/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 5.9681, "furnishings": { "stations": 46, "hearths": 2, "dining_lengths": [ 3, 3, 2 ], "interior_signature": "91d69c485bac612789c6a5f966e17cbebf09322b0918c254a065dde5a0468e97", "optional_omissions": [ { "component": "/building/room-0-0-0/furniture", "omissions": [ [ 3, "compatible dining alternative already placed" ], [ 6, "station budget" ], [ 7, "station budget" ] ] }, { "component": "/building/room-1-0-0/furniture", "omissions": [ [ 2, "compatible dining alternative already placed" ], [ 6, "station budget" ] ] }, { "component": "/building/room-0-1-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 6, "station budget" ], [ 7, "station budget" ] ] } ] } }
pair-6-1建造成功1610653903249
查看数据
{ "label": "pair-6-1", "inputs": { "environment_seed": 6106, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.02, 4 ] }, { "op": "wave", "args": [ 0.35, 0.11, 0.08, 2.290998585202554 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.02, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 18, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 11, 12, 42, 0.7 ] } ] }, 2, 6 ] }, "water": null, "digest": "7094eed11ada121b2ff549c593ffbde4b8d6a3c66655bb50b08cbf7da59b55c1", "structure_seed": 1, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 2, 1 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": true, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "362def65c6ea4a1fec38b2a9f016436b0293b968686af262877161d49679a664", "principal_signature": "f705b9d34d3b0a686530f3f97fd00818bc55afd5c5c20a79497f87609cd38141", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 5, "width": 22, "entrance_x": 5, "columns": [ 0, 10, 21 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 0, 8, 17 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 11, 14, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 11, 8, 17 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "6884dd2ce12084e02b67d2be6fbc292f8c54ea94e614fad84284fd9c991f920a" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "67043b4be11c0b9d5e5186300cf57a9b2793bc71564007ea96bada9fea4c1e58" ], [ "roof.profile", [ 11, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "ca4f0c0e87a777d02bd3398c994c446dbe9593c14a70b201c00f9b3706e09101" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "147cdd88a206d9840d077b994a86dfc6980f0cf7bd6678941ec83198cb211d70" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north", "east" ], true, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 6, 11 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.workshop", [ "north", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 12, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 6, 0 ], "room.bedroom", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ] ] ], "contact": { "fill": 14, "excavation": 0, "sitework_occupied_cells": 21, "replaced_cells": 2, "new_sitework_cells": 19, "strategies": [ "stepped" ], "signature": "38ed5af7f7893fcd17644cb3686985259bd6fceb9321aba10f8a6d04fb70b1c8", "bearing_fill": 0 }, "blocks": 53903, "nodes": 249, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.25 ], [ 1, 0.63 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-3/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 4.0073, "furnishings": { "stations": 30, "hearths": 2, "dining_lengths": [ 4 ], "interior_signature": "d51fc8ece478c1bfa39d95b3830b2abc548de7612be97fc373070326820e04ac", "optional_omissions": [ { "component": "/building/room-0-0-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ], [ 5, "no clear supported station and route" ], [ 6, "no clear supported station and route" ], [ 8, "no clear supported station and route" ] ] }, { "component": "/building/room-1-0-0/furniture", "omissions": [ [ 2, "compatible dining alternative already placed" ], [ 3, "compatible dining alternative already placed" ], [ 7, "station budget" ] ] }, { "component": "/building/room-0-1-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ], [ 5, "no clear supported station and route" ], [ 6, "no clear supported station and route" ], [ 8, "no clear supported station and route" ] ] }, { "component": "/building/room-1-1-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ] ] }, { "component": "/building/room-0-0-1/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 4, "no clear supported station and route" ] ] }, { "component": "/building/room-1-0-1/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ] ] } ] } }
pair-6-6建造成功6610655394270
查看数据
{ "label": "pair-6-6", "inputs": { "environment_seed": 6106, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.02, 4 ] }, { "op": "wave", "args": [ 0.35, 0.11, 0.08, 2.290998585202554 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.02, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 18, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 11, 12, 42, 0.7 ] } ] }, 2, 6 ] }, "water": null, "digest": "7094eed11ada121b2ff549c593ffbde4b8d6a3c66655bb50b08cbf7da59b55c1", "structure_seed": 6, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 13, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 3, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "b096d200df645eea701770e1a303966ed5fd46dbdd88343ab038a80e8920f233", "principal_signature": "e5fd95c649dfd61d18d437869766d5324186426c547a321e8ab6f4b2e4ab3dc3", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 18, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "34a2c81f5f1fe5aef6c63d5848839c11790258a40ab6cc3e8f46a2c6b18274b0" ], [ "roof.profile", [ 0, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "f67c34de8392fcd9495ec5955820942f2e6559a744f8bebbf4cb5920352c8e17" ], [ "roof.profile", [ 13, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "99017f168d5ac9601b2a6b19408cb89d09eae63b394c24d4b8b2a313056edb83" ], [ "roof.profile", [ 13, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "6bae4fe0fe6d6a2fe84800ea9830c061ac32b2f136a28897bcd4a7b084937e08" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "east" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 13 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "south", "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 0, 13 ], "room.workshop", [ "north", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 6, 0 ], "room.bedroom", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 13 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 14, "excavation": 0, "sitework_occupied_cells": 20, "replaced_cells": 3, "new_sitework_cells": 17, "strategies": [ "stepped" ], "signature": "a1bcc932662f44dd74fe41b43f853abbbadbbf83b8056bebc0ae1f458a412c7b", "bearing_fill": 0 }, "blocks": 55394, "nodes": 270, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.26 ], [ 1, 0.64 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-3/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 5.9814, "furnishings": { "stations": 46, "hearths": 2, "dining_lengths": [ 3, 3, 3 ], "interior_signature": "e53668bff60b9207e7e196747877f77d1b4d39914e148e433f39054d66f039f5", "optional_omissions": [ { "component": "/building/room-0-0-0/furniture", "omissions": [ [ 3, "compatible dining alternative already placed" ], [ 6, "station budget" ], [ 7, "station budget" ] ] }, { "component": "/building/room-1-0-0/furniture", "omissions": [ [ 2, "compatible dining alternative already placed" ], [ 6, "station budget" ] ] }, { "component": "/building/room-0-1-0/furniture", "omissions": [ [ 3, "compatible dining alternative already placed" ], [ 6, "station budget" ], [ 7, "station budget" ] ] } ] } }
pair-7-1建造成功1610754691252
查看数据
{ "label": "pair-7-1", "inputs": { "environment_seed": 6107, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.025, -0.02, 4 ] }, { "op": "wave", "args": [ 0.35, 0.11, 0.08, 5.890664017330813 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.02, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 18, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 11, 12, 42, 0.7 ] } ] }, 2, 6 ] }, "water": 4, "digest": "218800f338e77a3a1ce7980305dd1926422445c376667ae22f529949384f6bed", "structure_seed": 1, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 2, 1 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": true, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "f7b1c720eb3379c2e0eae894d8c3a1cefa27b1bc0b68febbd65f2887b7346ccc", "principal_signature": "f705b9d34d3b0a686530f3f97fd00818bc55afd5c5c20a79497f87609cd38141", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": true, "depth": 5, "width": 22, "entrance_x": 5, "columns": [ 0, 10, 21 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 17, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 0, 8, 17 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 11, 14, 6 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 11, 8, 17 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "6884dd2ce12084e02b67d2be6fbc292f8c54ea94e614fad84284fd9c991f920a" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "67043b4be11c0b9d5e5186300cf57a9b2793bc71564007ea96bada9fea4c1e58" ], [ "roof.profile", [ 11, 13, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "ca4f0c0e87a777d02bd3398c994c446dbe9593c14a70b201c00f9b3706e09101" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "147cdd88a206d9840d077b994a86dfc6980f0cf7bd6678941ec83198cb211d70" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "north", "east" ], true, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 0, 6, 11 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.workshop", [ "north", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 12, 0 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ], [ "room", [ 11, 6, 0 ], "room.bedroom", [ "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.library", [ "landing" ], false, "892ab014ba1ce15bdcf3aeee00aa4f2ef05178ab6ed1bcecc15a72734df2513d" ] ] ], "contact": { "fill": 52, "excavation": 0, "sitework_occupied_cells": 58, "replaced_cells": 55, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "0642406a4efb6c5adc04d7e4a64183320c67acb63f47bbf41cb4f7c342e000d4", "bearing_fill": 3 }, "blocks": 54691, "nodes": 252, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 1.68 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-3/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/craft/pair-7-1.litematic", "audit": { "queries": 218, "inventories": 80, "nodes": 252, "digest": "f7b1c720eb3379c2e0eae894d8c3a1cefa27b1bc0b68febbd65f2887b7346ccc" }, "seconds": 5.6423, "furnishings": { "stations": 34, "hearths": 2, "dining_lengths": [ 2, 4 ], "interior_signature": "8f07e18acd2ad9fd3f823e92624e9625874b327413fb400564944ecfed00fe18", "optional_omissions": [ { "component": "/building/room-0-0-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 5, "no clear supported station and route" ], [ 6, "no clear supported station and route" ], [ 8, "no clear supported station and route" ] ] }, { "component": "/building/room-1-0-0/furniture", "omissions": [ [ 2, "compatible dining alternative already placed" ], [ 3, "compatible dining alternative already placed" ], [ 7, "station budget" ] ] }, { "component": "/building/room-0-1-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ], [ 5, "no clear supported station and route" ], [ 6, "no clear supported station and route" ] ] }, { "component": "/building/room-1-1-0/furniture", "omissions": [ [ 4, "no clear supported station and route" ] ] }, { "component": "/building/room-0-0-1/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ] ] }, { "component": "/building/room-1-0-1/furniture", "omissions": [ [ 3, "no clear supported station and route" ], [ 4, "no clear supported station and route" ] ] } ] } }
pair-7-6建造成功6610756156272
查看数据
{ "label": "pair-7-6", "inputs": { "environment_seed": 6107, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.025, -0.02, 4 ] }, { "op": "wave", "args": [ 0.35, 0.11, 0.08, 5.890664017330813 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.02, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 18, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 11, 12, 42, 0.7 ] } ] }, 2, 6 ] }, "water": 4, "digest": "218800f338e77a3a1ce7980305dd1926422445c376667ae22f529949384f6bed", "structure_seed": 6, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 0, "z": 0, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 1, "purpose": "bedroom" } ] }, "bay": 13, "porch": true, "roof_axis": "z", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": null, "ridge_required": false, "ridge_min_run": 0 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 3, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "8df14b94dba8bf3978811a17888469a7f80b7c9059ca783f0e9af1e7f0bb2052", "principal_signature": "e5fd95c649dfd61d18d437869766d5324186426c547a321e8ab6f4b2e4ab3dc3", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 18, "cap_overhang": 0 } ], [ "roof.dormer", [ 0, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 14, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 13, 8, 19 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "34a2c81f5f1fe5aef6c63d5848839c11790258a40ab6cc3e8f46a2c6b18274b0" ], [ "roof.profile", [ 0, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "f67c34de8392fcd9495ec5955820942f2e6559a744f8bebbf4cb5920352c8e17" ], [ "roof.profile", [ 13, 13, 0 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "99017f168d5ac9601b2a6b19408cb89d09eae63b394c24d4b8b2a313056edb83" ], [ "roof.profile", [ 13, 7, 13 ], { "axis": "z", "span": 13, "rise": [ 1, 2 ] }, "6bae4fe0fe6d6a2fe84800ea9830c061ac32b2f136a28897bcd4a7b084937e08" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 0 ], "room.bedroom", [ "east" ], true, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 0, 6, 13 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "south", "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 0, 13 ], "room.workshop", [ "north", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 12, 0 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ], [ "room", [ 13, 6, 0 ], "room.bedroom", [ "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 13 ], "room.loft.bedroom", [ "landing" ], false, "e6a1b2f4b7cc518b62b00c9003fe72b80b3ad927b612e3997ba5f526adb421eb" ] ] ], "contact": { "fill": 56, "excavation": 0, "sitework_occupied_cells": 62, "replaced_cells": 59, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "93e645c80fd30d7e7e9849e6f0a2303b48b4f0a00f7c61eee451ecde02b5e6ce", "bearing_fill": 3 }, "blocks": 56156, "nodes": 272, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 1.8 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-3/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 3.8069, "furnishings": { "stations": 46, "hearths": 2, "dining_lengths": [ 3, 3, 2 ], "interior_signature": "91d69c485bac612789c6a5f966e17cbebf09322b0918c254a065dde5a0468e97", "optional_omissions": [ { "component": "/building/room-0-0-0/furniture", "omissions": [ [ 3, "compatible dining alternative already placed" ], [ 6, "station budget" ], [ 7, "station budget" ] ] }, { "component": "/building/room-1-0-0/furniture", "omissions": [ [ 2, "compatible dining alternative already placed" ], [ 6, "station budget" ] ] }, { "component": "/building/room-0-1-0/furniture", "omissions": [ [ 2, "no clear supported station and route" ], [ 6, "station budget" ], [ 7, "station budget" ] ] } ] } }
lantern-house-0建造成功0016663422
查看数据
{ "label": "lantern-house-0", "inputs": { "structure_seed": 0, "environment_seed": 0, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "storage" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 2, "purpose": "library" } ] }, "bay": 11, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 0 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 7, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "38ceea9db714045ff1c9a1e67f8958d442a4f5bac27103da94ad10bf03837bf7", "principal_signature": "1a1387fc317f28fce0dff933072a2c8ae8088a04f1405e0d9b51b1ec0357b7dd", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 22, "entrance_x": 5, "columns": [ 0, 10, 21 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 29, "cap_overhang": 0 } ], [ "roof.dormer", [ 12, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 20, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 19, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "71be82ebea1fb69ec60c556b6826b1884e36c9668a9930aafd085a2483af95ed" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "77d9687f7e6eedd9ef472045a940c1ceef77c4a22d4671b18513febdecedadce" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "c982ba7c32a4a90a04230800707659a9d0396f24f8dbbaa1ad7224f09af698d6" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.library", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 18, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.storage", [ "north", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ] ] ], "contact": { "fill": 118, "excavation": 0, "sitework_occupied_cells": 157, "replaced_cells": 30, "new_sitework_cells": 127, "strategies": [ "stepped", "stepped", "stepped", "stepped", "stepped" ], "signature": "b44634c145653957580ad6389839b95ab4f37b16eafc92e39668213b6ec8ffe8", "bearing_fill": 1 }, "blocks": 16663, "nodes": 422, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 1.13 ], [ 1, 1.47 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/new/lantern-house-0.litematic", "audit": { "queries": 383, "inventories": 61, "nodes": 422, "digest": "38ceea9db714045ff1c9a1e67f8958d442a4f5bac27103da94ad10bf03837bf7" }, "seconds": 8.7052, "ridge_lights": { "lanterns": 1, "lengths": [ 7 ], "current_cells": 184, "mounts": [ { "component": "/building/roof-2/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 5, 9, 9 ], "screened_out": [], "optional_omission": false }, { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true } ] } }
lantern-house-1建造成功1120671417
查看数据
{ "label": "lantern-house-1", "inputs": { "structure_seed": 1, "environment_seed": 1, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 2, "purpose": "library" } ] }, "bay": 13, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "6694cd0c74adf48775e14b5550b7edd0b00946c4e2ab5448ff24fc91f1abc106", "principal_signature": "46cb3da868e0c443ab050335332cad5ad2654231f1e6b62850f6dbd0a1af189c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 30, "cap_overhang": 0 } ], [ "roof.dormer", [ 12, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 20, 25 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 19, 13 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "db17e9be4baa9e2c4bec8b5015d72903e3d4f6d094ae4720f0fb5c2ba3284da3" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "38314bd90ebead636459e4d0c31a241a3cada8fea5f073a8f1ec06544f6bb2d6" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 13 ], "room.library", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 18, 13 ], "room.loft.bedroom", [ "landing" ], false, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "1f772d91fe5efb4a7e000b7e2ffc7f9ee53707dca111e1b07b68bfe6f063ff12" ], [ "room", [ 0, 6, 13 ], "room.bedroom", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ] ] ], "contact": { "fill": 124, "excavation": 0, "sitework_occupied_cells": 157, "replaced_cells": 27, "new_sitework_cells": 130, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "5bcb840ccbec341c760b29a8765ca9fdbd96750d442b721cd7f16e6f8a2d7282", "bearing_fill": 3 }, "blocks": 20671, "nodes": 417, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.42 ], [ 0, 1.73 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/new/lantern-house-1.litematic", "audit": { "queries": 378, "inventories": 44, "nodes": 417, "digest": "6694cd0c74adf48775e14b5550b7edd0b00946c4e2ab5448ff24fc91f1abc106" }, "seconds": 9.7595, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 13 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 6, 10, 11 ], "screened_out": [ { "start": 18, "reason": "ridge end framing" }, { "start": 19, "reason": "ridge end framing" } ], "optional_omission": false } ] } }
lantern-house-2建造成功2221467416
查看数据
{ "label": "lantern-house-2", "inputs": { "structure_seed": 2, "environment_seed": 2, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "storage" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 2, 1 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 9, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 3, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "950d19c915e37cd692bd05699bdc236942ddaeb7c949e14e10802f3b388587b2", "principal_signature": "142210f59dc633e041c6a0ed9bc0976ee9d0ee97ebc77e0de7f2da97ce365654", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 33, "entrance_x": 5, "columns": [ 0, 11, 21, 32 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 12, 8, 0 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 16, 8, 10 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 22, 8, 0 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 26, 8, 10 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 2, 1 ] }, "c25cbb9f5d33fc203a94b7f4703b760c58f16deee1beb9bc591b363ccfc9f412" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 2, 1 ] }, "1c68477b377e968e8b5c25a97c65ea783d6077de620d6b55869a0d53703cf932" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 2, 1 ] }, "0ae19da515456baa5b1a680e021a9449c034181b77b6c7f33d6943306ebf0bf9" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.library", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "6241faebbf1ebbf7d2a03c9b94287834b0216989b3125d8a79d602ea48faea8e" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west", "east" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.storage", [ "north", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.library", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 146, "excavation": 0, "sitework_occupied_cells": 180, "replaced_cells": 27, "new_sitework_cells": 153, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "26670dab6a972b7499b4fc65210dec71464e565149877514142ce2c0a97bc135", "bearing_fill": 3 }, "blocks": 21467, "nodes": 416, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.59 ], [ 0, 1.86 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 6.527, "ridge_lights": { "lanterns": 1, "lengths": [ 9 ], "current_cells": 222, "mounts": [ { "component": "/building/roof-2/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 5, 9, 11 ], "screened_out": [ { "start": 2, "reason": "ridge end framing" }, { "start": 3, "reason": "ridge end framing" }, { "start": 21, "reason": "ridge end framing" }, { "start": 22, "reason": "ridge end framing" } ], "optional_omission": false }, { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true } ] } }
lantern-house-3建造成功3321327412
查看数据
{ "label": "lantern-house-3", "inputs": { "structure_seed": 3, "environment_seed": 3, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "storage" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" } ] }, "bay": 13, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 7, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 9, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "f489f5e879a9ab612dbadcb242169eea38beb226677b05b0f388140276d79d07", "principal_signature": "ba8c6056cc028fa609e9d730ef5cbfc2074e550c7a168296c88126e74ed0c9c8", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 24, "cap_overhang": 0 } ], [ "roof.dormer", [ 16, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 19, 8, 25 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 25 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 13 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "f4d040da19b6abde59c88dadb1463915f3b1a1535404838538608620f06a24be" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "b4ec11538a259bc385b3dda21fdc4c9f7ec5812b21f60a2cb41ecfa3cf32e85e" ], [ "roof.profile", [ 13, 7, 13 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "0a2849117b51ae0b579c6d255757f6419e121aeb420becce33ce435619c4da90" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 13 ], "room.loft.library", [ "landing" ], false, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "1f772d91fe5efb4a7e000b7e2ffc7f9ee53707dca111e1b07b68bfe6f063ff12" ], [ "room", [ 0, 6, 13 ], "room.bedroom", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "south", "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 0, 13 ], "room.storage", [ "north", "west" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 13, 6, 13 ], "room.loft.library", [ "landing" ], false, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ] ] ], "contact": { "fill": 100, "excavation": 0, "sitework_occupied_cells": 141, "replaced_cells": 27, "new_sitework_cells": 114, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "8cd8487822892ccec7f981b070601d64401ad50846fe212394796f7659c4ebe3", "bearing_fill": 3 }, "blocks": 21327, "nodes": 412, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.02 ], [ 0, 1.26 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "left", 11, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 6.7561, "ridge_lights": { "lanterns": 1, "lengths": [ 9 ], "current_cells": 222, "mounts": [ { "component": "/building/roof-2/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 13 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 6, 10, 7 ], "screened_out": [ { "start": 2, "reason": "ridge end framing" }, { "start": 3, "reason": "ridge end framing" }, { "start": 14, "reason": "ridge end framing" }, { "start": 15, "reason": "ridge end framing" } ], "optional_omission": false }, { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 13 } ], "optional_omission": true } ] } }
lantern-house-4建造成功4416621408
查看数据
{ "label": "lantern-house-4", "inputs": { "structure_seed": 4, "environment_seed": 4, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "storage" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 2, "purpose": "library" } ] }, "bay": 11, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 7, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 9, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "862cba1c1eaf26274e131e4bb725f641bc7df840f1482f99d25c41ae9a30f9b6", "principal_signature": "542d678d9d0f812cab95d36e8b4e47f73bc5d867340c7b3b80fb0ba8a94c1425", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 22, "entrance_x": 5, "columns": [ 0, 10, 21 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 29, "cap_overhang": 0 } ], [ "roof.dormer", [ 13, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 20, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 19, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "79ee98aed289bc97683b497e9b23d1e0e6c928b715062ff2c253661e3c8dffcc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "c96c3b48651192a77f86b5483f302d94e31a167a31da5bb549144c95e62be511" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "3c2915acc3f9dbcf463a775e12563da017ea0a746c5c5e8db805be08e5a36b10" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.library", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 18, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.storage", [ "north", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ] ] ], "contact": { "fill": 70, "excavation": 0, "sitework_occupied_cells": 101, "replaced_cells": 30, "new_sitework_cells": 71, "strategies": [ "piers", "stepped", "stepped", "stepped", "stepped" ], "signature": "f01b1aad61eba910b6aeee7f3a0408cc1e0640b6b5480e4431991bfee62b079d", "bearing_fill": 2 }, "blocks": 16621, "nodes": 408, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.8 ], [ 1, 1.16 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/new/lantern-house-4.litematic", "audit": { "queries": 367, "inventories": 66, "nodes": 408, "digest": "862cba1c1eaf26274e131e4bb725f641bc7df840f1482f99d25c41ae9a30f9b6" }, "seconds": 6.1591, "ridge_lights": { "lanterns": 1, "lengths": [ 9 ], "current_cells": 222, "mounts": [ { "component": "/building/roof-2/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 5, 9, 9 ], "screened_out": [ { "start": 2, "reason": "ridge end framing" }, { "start": 3, "reason": "ridge end framing" }, { "start": 10, "reason": "ridge end framing" }, { "start": 11, "reason": "ridge end framing" } ], "optional_omission": false }, { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true } ] } }
lantern-house-5建造成功5516521369
查看数据
{ "label": "lantern-house-5", "inputs": { "structure_seed": 5, "environment_seed": 5, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 2, 1 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 0 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 7, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "a942494f7895be255f2e17f3e45e8b080f23cf41ff4be366f73000ea531919ff", "principal_signature": "4dd8946f28b8c75380cdf2ad47771c77f6f80971f9de5dc16a4c24d8ccbc4d06", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 22, "entrance_x": 5, "columns": [ 0, 10, 21 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 12, 8, 0 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 16, 8, 10 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 2, 1 ] }, "e04fac9656c82790aeaa870bfbd440b3cea7328949f2e6c021b62a045530dae1" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 2, 1 ] }, "854094c27a9ec8dd46833a0d634b00fb84dbbc06d4480291409fe993605a1292" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.library", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 141, "excavation": 0, "sitework_occupied_cells": 174, "replaced_cells": 27, "new_sitework_cells": 147, "strategies": [ "stepped", "stepped", "stepped", "stepped", "stepped" ], "signature": "a0ccabe7db62ec4113eda4035b1bb73ab79d04351f941a5c03a8311e30ae881f", "bearing_fill": 1 }, "blocks": 16521, "nodes": 369, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 1, 1.31 ], [ 0, 1.59 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 3.4456, "ridge_lights": { "lanterns": 1, "lengths": [ 7 ], "current_cells": 184, "mounts": [ { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 5, 9, 7 ], "screened_out": [], "optional_omission": false } ] } }
lantern-house-6建造成功6621490435
查看数据
{ "label": "lantern-house-6", "inputs": { "structure_seed": 6, "environment_seed": 6, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "storage" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 7, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 3, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "9683e7f89e6aa3de8583be354becbb9be8e4a21208d6d527fcb7de3705a4e4b9", "principal_signature": "ffecc196693d09e48548589b350cf286445eafb9c7253bb0c1bfa27ac558662f", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 33, "entrance_x": 5, "columns": [ 0, 11, 21, 32 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 16, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 23, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 27, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "79ee98aed289bc97683b497e9b23d1e0e6c928b715062ff2c253661e3c8dffcc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "13538e194e511568f395e1ac105ac7cab8e6605925c3d5117d19a6b7e3373437" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "4f6b79a834d2733013a7dcbea8504b9801cf3d79d23ec7bbf6a48eeb8bbfd888" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6241faebbf1ebbf7d2a03c9b94287834b0216989b3125d8a79d602ea48faea8e" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west", "east" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.storage", [ "north", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 27, "excavation": 0, "sitework_occupied_cells": 57, "replaced_cells": 30, "new_sitework_cells": 27, "strategies": [ "stepped", "stepped", "stepped", "stepped", "stepped" ], "signature": "3dea2a7bea5b3f43a1a42f6bf42ad6d99fac5cd17b4cbfdf1443243ec26afb5d", "bearing_fill": 1 }, "blocks": 21490, "nodes": 435, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.39 ], [ 1, 0.79 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "left", 11, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 5.5304, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-2/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 5, 9, 15 ], "screened_out": [ { "start": 2, "reason": "ridge end framing" }, { "start": 3, "reason": "ridge end framing" }, { "start": 25, "reason": "ridge end framing" }, { "start": 26, "reason": "ridge end framing" } ], "optional_omission": false }, { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true } ] } }
lantern-house-7建造成功7716552363
查看数据
{ "label": "lantern-house-7", "inputs": { "structure_seed": 7, "environment_seed": 7, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 2, "purpose": "library" } ] }, "bay": 11, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 2, 1 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 7, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "library", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "69d8ec87b9eca929f01ace315bc1d2da61f5a23f0953bec493be1f09b835e733", "principal_signature": "3975ab16af44984ab9349aaee23be970dd3c82bf3abbb2bf273f8123fc8e36df", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 22, "entrance_x": 5, "columns": [ 0, 10, 21 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 29, "cap_overhang": 0 } ], [ "roof.dormer", [ 12, 8, 0 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 16, 8, 10 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 6, 20, 21 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.dormer", [ 6, 8, 10 ], { "tops": [ 5, 5, 5 ] }, "8cba8fa3e9a72ff63b980d2ef663695210ef851504ea42903bf9b38c149a5c2b" ], [ "roof.profile", [ 0, 19, 11 ], { "axis": "x", "span": 11, "rise": [ 2, 1 ] }, "eb779308cc84da95ec72644371fd42438bef214fa8639e5194178eb70aaf2c1e" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 2, 1 ] }, "bac13583749cabb8818903fe99c1506d275cafd1ca48de064e3e98a65a90c529" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.library", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 18, 11 ], "room.loft.library", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.library", [ "landing" ], false, "205b0ba45988345f14a17f8b262f20d186eac1a0d3d333aacd9d18c99215579e" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 16, "excavation": 0, "sitework_occupied_cells": 46, "replaced_cells": 30, "new_sitework_cells": 16, "strategies": [ "stepped", "stepped", "stepped", "stepped", "stepped" ], "signature": "b0a05cb1e0bfd9ecee2475b0dcda1ccb8e482c1c140617987a74558752e49a08", "bearing_fill": 0 }, "blocks": 16552, "nodes": 363, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.28 ], [ 1, 0.66 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/new/lantern-house-7.litematic", "audit": { "queries": 326, "inventories": 58, "nodes": 363, "digest": "69d8ec87b9eca929f01ace315bc1d2da61f5a23f0953bec493be1f09b835e733" }, "seconds": 5.8982, "ridge_lights": { "lanterns": 1, "lengths": [ 7 ], "current_cells": 184, "mounts": [ { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 5, 9, 5 ], "screened_out": [ { "start": 12, "reason": "ridge end framing" }, { "start": 13, "reason": "ridge end framing" } ], "optional_omission": false } ] } }
pair-0-1建造成功1710060696247
查看数据
{ "label": "pair-0-1", "inputs": { "environment_seed": 7100, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.025, -0.02, 4 ] }, { "op": "wave", "args": [ 0.35, 0.11, 0.08, 3.374983763363494 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 2, 6 ] }, "water": 5, "digest": "187caf4cb26ccd6fbd765fe815a5e809185f2a9a3d08db4e319cc91fab398272", "held_out_composition": false, "structure_seed": 1, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 2, "purpose": "library" } ] }, "bay": 13, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "94b631c856ea970465f331900048eb4f3c4709ef150050da9461c31a1729ca18", "principal_signature": "46cb3da868e0c443ab050335332cad5ad2654231f1e6b62850f6dbd0a1af189c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 30, "cap_overhang": 0 } ], [ "roof.dormer", [ 12, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 20, 25 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 19, 13 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "db17e9be4baa9e2c4bec8b5015d72903e3d4f6d094ae4720f0fb5c2ba3284da3" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "38314bd90ebead636459e4d0c31a241a3cada8fea5f073a8f1ec06544f6bb2d6" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 13 ], "room.library", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 18, 13 ], "room.loft.bedroom", [ "landing" ], false, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "1f772d91fe5efb4a7e000b7e2ffc7f9ee53707dca111e1b07b68bfe6f063ff12" ], [ "room", [ 0, 6, 13 ], "room.bedroom", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ] ] ], "contact": { "fill": 162, "excavation": 0, "sitework_occupied_cells": 168, "replaced_cells": 165, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "7f61efc19d9861f59fcade08133abfc3a7cff2a2d8af19249ef6e5cd3f905825", "bearing_fill": 3 }, "blocks": 60696, "nodes": 247, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 4.98 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/new/pair-0-1.litematic", "audit": { "queries": 223, "inventories": 44, "nodes": 247, "digest": "94b631c856ea970465f331900048eb4f3c4709ef150050da9461c31a1729ca18" }, "seconds": 7.1395, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 13 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 6, 10, 11 ], "screened_out": [ { "start": 18, "reason": "ridge end framing" }, { "start": 19, "reason": "ridge end framing" } ], "optional_omission": false } ] } }
pair-0-6建造成功6710060712268
查看数据
{ "label": "pair-0-6", "inputs": { "environment_seed": 7100, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.025, -0.02, 4 ] }, { "op": "wave", "args": [ 0.35, 0.11, 0.08, 3.374983763363494 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 2, 6 ] }, "water": 5, "digest": "187caf4cb26ccd6fbd765fe815a5e809185f2a9a3d08db4e319cc91fab398272", "held_out_composition": false, "structure_seed": 6, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "storage" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 7, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 3, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "8f638895344d6ae6e5ac8c1ac2eb9d3e4d541d199a64cbdd160f5e52a720e5e5", "principal_signature": "909d9b94533725f7926b6d6d986411403c41c535aaef6310d2fcc34b8bb868ad", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 33, "entrance_x": 5, "columns": [ 0, 11, 21, 32 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 16, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 23, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 27, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "79ee98aed289bc97683b497e9b23d1e0e6c928b715062ff2c253661e3c8dffcc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "db311603a9f243d8d349882c757e8237a4f27caae6df93b37a271f3f1852ce6e" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "4f6b79a834d2733013a7dcbea8504b9801cf3d79d23ec7bbf6a48eeb8bbfd888" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6241faebbf1ebbf7d2a03c9b94287834b0216989b3125d8a79d602ea48faea8e" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west", "east" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.storage", [ "north", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 201, "excavation": 0, "sitework_occupied_cells": 207, "replaced_cells": 204, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "15dde4b2fcceb237b36a3e1565039c09d1f6a80e1e0c226acbc880b23d26b8ac", "bearing_fill": 3 }, "blocks": 60712, "nodes": 268, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 6.15 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "left", 11, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 3.49, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-2/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 5, 9, 13 ], "screened_out": [ { "start": 2, "reason": "ridge end framing" }, { "start": 3, "reason": "ridge end framing" }, { "start": 25, "reason": "ridge end framing" }, { "start": 26, "reason": "ridge end framing" } ], "optional_omission": false }, { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true } ] } }
pair-1-1建造成功1710155775247
查看数据
{ "label": "pair-1-1", "inputs": { "environment_seed": 7101, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.02, 4 ] }, { "op": "wave", "args": [ 0, 0.11, 0.08, 0.4319156995808917 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 2, 6 ] }, "water": 4, "digest": "fd5037cae547ce5326f9fd4db88f501006ea36b3b7cba2cd2400461189b2fa32", "held_out_composition": false, "structure_seed": 1, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 2, "purpose": "library" } ] }, "bay": 13, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "ffdc6fabdfd05bde1cc3541cce28684df00ca884e610d1a5cf2bc687de1920f1", "principal_signature": "46cb3da868e0c443ab050335332cad5ad2654231f1e6b62850f6dbd0a1af189c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 30, "cap_overhang": 0 } ], [ "roof.dormer", [ 12, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 20, 25 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 19, 13 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "db17e9be4baa9e2c4bec8b5015d72903e3d4f6d094ae4720f0fb5c2ba3284da3" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "38314bd90ebead636459e4d0c31a241a3cada8fea5f073a8f1ec06544f6bb2d6" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 13 ], "room.library", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 18, 13 ], "room.loft.bedroom", [ "landing" ], false, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "1f772d91fe5efb4a7e000b7e2ffc7f9ee53707dca111e1b07b68bfe6f063ff12" ], [ "room", [ 0, 6, 13 ], "room.bedroom", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ] ] ], "contact": { "fill": 1, "excavation": 0, "sitework_occupied_cells": 7, "replaced_cells": 4, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "6197a281016fc6de20ba4b55e5901665e9cfec31678bd471c34fc81937ea215f", "bearing_fill": 0 }, "blocks": 55775, "nodes": 247, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 0.15 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 3.6057, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 13 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 6, 10, 11 ], "screened_out": [ { "start": 18, "reason": "ridge end framing" }, { "start": 19, "reason": "ridge end framing" } ], "optional_omission": false } ] } }
pair-1-6建造成功6710155794268
查看数据
{ "label": "pair-1-6", "inputs": { "environment_seed": 7101, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.02, 4 ] }, { "op": "wave", "args": [ 0, 0.11, 0.08, 0.4319156995808917 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 2, 6 ] }, "water": 4, "digest": "fd5037cae547ce5326f9fd4db88f501006ea36b3b7cba2cd2400461189b2fa32", "held_out_composition": false, "structure_seed": 6, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "storage" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 7, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 3, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "f1d3c25fac7b2477d367c0f8dd23cec70d3b1d90d6b9f4f5325fa14b78745b58", "principal_signature": "909d9b94533725f7926b6d6d986411403c41c535aaef6310d2fcc34b8bb868ad", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 33, "entrance_x": 5, "columns": [ 0, 11, 21, 32 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 16, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 23, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 27, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "79ee98aed289bc97683b497e9b23d1e0e6c928b715062ff2c253661e3c8dffcc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "db311603a9f243d8d349882c757e8237a4f27caae6df93b37a271f3f1852ce6e" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "4f6b79a834d2733013a7dcbea8504b9801cf3d79d23ec7bbf6a48eeb8bbfd888" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6241faebbf1ebbf7d2a03c9b94287834b0216989b3125d8a79d602ea48faea8e" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west", "east" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.storage", [ "north", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 1, "excavation": 0, "sitework_occupied_cells": 8, "replaced_cells": 2, "new_sitework_cells": 6, "strategies": [ "piers" ], "signature": "db119a0585d59cd8506bee925351bad6ec10884e5c047b0712ccd3700ebc3c67", "bearing_fill": 0 }, "blocks": 55794, "nodes": 268, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 0.12 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "left", 11, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 3.7885, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-2/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 5, 9, 13 ], "screened_out": [ { "start": 2, "reason": "ridge end framing" }, { "start": 3, "reason": "ridge end framing" }, { "start": 25, "reason": "ridge end framing" }, { "start": 26, "reason": "ridge end framing" } ], "optional_omission": false }, { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true } ] } }
pair-2-1建造成功1710260706247
查看数据
{ "label": "pair-2-1", "inputs": { "environment_seed": 7102, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.025, -0.02, 4 ] }, { "op": "wave", "args": [ 0.35, 0.11, 0.08, 0.8659609090445146 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 2, 6 ] }, "water": 5, "digest": "ccb993680acaf412967a8b377019fd28edecb60efd91ef71b0876f9748c287aa", "held_out_composition": false, "structure_seed": 1, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 2, "purpose": "library" } ] }, "bay": 13, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "d656886b0bd2d3743f78b2004001dddc367f9c21ec3c9a5f42076a91c16752e2", "principal_signature": "46cb3da868e0c443ab050335332cad5ad2654231f1e6b62850f6dbd0a1af189c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 30, "cap_overhang": 0 } ], [ "roof.dormer", [ 12, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 20, 25 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 19, 13 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "db17e9be4baa9e2c4bec8b5015d72903e3d4f6d094ae4720f0fb5c2ba3284da3" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "38314bd90ebead636459e4d0c31a241a3cada8fea5f073a8f1ec06544f6bb2d6" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 13 ], "room.library", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 18, 13 ], "room.loft.bedroom", [ "landing" ], false, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "1f772d91fe5efb4a7e000b7e2ffc7f9ee53707dca111e1b07b68bfe6f063ff12" ], [ "room", [ 0, 6, 13 ], "room.bedroom", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ] ] ], "contact": { "fill": 143, "excavation": 0, "sitework_occupied_cells": 149, "replaced_cells": 146, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "56a729846017431656dc46aadfb3b41c6821de7e1907d5c8b6fb8f322329d582", "bearing_fill": 3 }, "blocks": 60706, "nodes": 247, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 4.41 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 3.6159, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 13 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 6, 10, 11 ], "screened_out": [ { "start": 18, "reason": "ridge end framing" }, { "start": 19, "reason": "ridge end framing" } ], "optional_omission": false } ] } }
pair-2-6建造成功6710260722268
查看数据
{ "label": "pair-2-6", "inputs": { "environment_seed": 7102, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.025, -0.02, 4 ] }, { "op": "wave", "args": [ 0.35, 0.11, 0.08, 0.8659609090445146 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 2, 6 ] }, "water": 5, "digest": "ccb993680acaf412967a8b377019fd28edecb60efd91ef71b0876f9748c287aa", "held_out_composition": false, "structure_seed": 6, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "storage" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 7, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 3, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "e1243fbb86a360ae8423cff4787a9f0a39a28f0271f74d36de657a95e58df664", "principal_signature": "909d9b94533725f7926b6d6d986411403c41c535aaef6310d2fcc34b8bb868ad", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 33, "entrance_x": 5, "columns": [ 0, 11, 21, 32 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 16, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 23, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 27, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "79ee98aed289bc97683b497e9b23d1e0e6c928b715062ff2c253661e3c8dffcc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "db311603a9f243d8d349882c757e8237a4f27caae6df93b37a271f3f1852ce6e" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "4f6b79a834d2733013a7dcbea8504b9801cf3d79d23ec7bbf6a48eeb8bbfd888" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6241faebbf1ebbf7d2a03c9b94287834b0216989b3125d8a79d602ea48faea8e" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west", "east" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.storage", [ "north", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 153, "excavation": 0, "sitework_occupied_cells": 159, "replaced_cells": 156, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "9cb57819db9ccfdce6c55abf032a744a737c266f6aa0eb16663bfcb1c2687b26", "bearing_fill": 3 }, "blocks": 60722, "nodes": 268, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 4.71 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "left", 11, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 3.7678, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-2/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 5, 9, 13 ], "screened_out": [ { "start": 2, "reason": "ridge end framing" }, { "start": 3, "reason": "ridge end framing" }, { "start": 25, "reason": "ridge end framing" }, { "start": 26, "reason": "ridge end framing" } ], "optional_omission": false }, { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true } ] } }
pair-3-1建造成功1710355245247
查看数据
{ "label": "pair-3-1", "inputs": { "environment_seed": 7103, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0, 4 ] }, { "op": "wave", "args": [ 0, 0.11, 0.08, 1.8763013869044225 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 2, 6 ] }, "water": 4, "digest": "f89e2c2f1e736682229f9c43c39866b379b8f1bb236de4f62cce762ccf2f1801", "held_out_composition": false, "structure_seed": 1, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 2, "purpose": "library" } ] }, "bay": 13, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "e669fab3a5eaf3bba93ae8d04c7d2c6b07508c7cb2f7557d29acdff1b4fe916b", "principal_signature": "46cb3da868e0c443ab050335332cad5ad2654231f1e6b62850f6dbd0a1af189c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 30, "cap_overhang": 0 } ], [ "roof.dormer", [ 12, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 20, 25 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 19, 13 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "db17e9be4baa9e2c4bec8b5015d72903e3d4f6d094ae4720f0fb5c2ba3284da3" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "38314bd90ebead636459e4d0c31a241a3cada8fea5f073a8f1ec06544f6bb2d6" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 13 ], "room.library", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 18, 13 ], "room.loft.bedroom", [ "landing" ], false, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "1f772d91fe5efb4a7e000b7e2ffc7f9ee53707dca111e1b07b68bfe6f063ff12" ], [ "room", [ 0, 6, 13 ], "room.bedroom", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ] ] ], "contact": { "fill": 2, "excavation": 0, "sitework_occupied_cells": 8, "replaced_cells": 5, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "5c9cd30586378e2b37c51de01c724b05ec1cb2ba63cd49098efb838883f61aa2", "bearing_fill": 0 }, "blocks": 55245, "nodes": 247, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 0.18 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 3.656, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 13 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 6, 10, 11 ], "screened_out": [ { "start": 18, "reason": "ridge end framing" }, { "start": 19, "reason": "ridge end framing" } ], "optional_omission": false } ] } }
pair-3-6建造成功6710355230268
查看数据
{ "label": "pair-3-6", "inputs": { "environment_seed": 7103, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0, 4 ] }, { "op": "wave", "args": [ 0, 0.11, 0.08, 1.8763013869044225 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 2, 6 ] }, "water": 4, "digest": "f89e2c2f1e736682229f9c43c39866b379b8f1bb236de4f62cce762ccf2f1801", "held_out_composition": false, "structure_seed": 6, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "storage" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 7, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 3, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "6cd1e4bf50da1953a24b9ee4faeea68429f04643817f756dfaca019399270949", "principal_signature": "ffecc196693d09e48548589b350cf286445eafb9c7253bb0c1bfa27ac558662f", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 33, "entrance_x": 5, "columns": [ 0, 11, 21, 32 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 16, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 23, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 27, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "79ee98aed289bc97683b497e9b23d1e0e6c928b715062ff2c253661e3c8dffcc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "13538e194e511568f395e1ac105ac7cab8e6605925c3d5117d19a6b7e3373437" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "4f6b79a834d2733013a7dcbea8504b9801cf3d79d23ec7bbf6a48eeb8bbfd888" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6241faebbf1ebbf7d2a03c9b94287834b0216989b3125d8a79d602ea48faea8e" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west", "east" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.storage", [ "north", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 0, "excavation": 0, "sitework_occupied_cells": 6, "replaced_cells": 3, "new_sitework_cells": 3, "strategies": [ "stepped" ], "signature": "cbaf4264cbe06448b6e0247310381afa04aa3b95f8395886e89f221ca082bc6b", "bearing_fill": 0 }, "blocks": 55230, "nodes": 268, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.12 ], [ 1, 0.52 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "left", 11, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/new/pair-3-6.litematic", "audit": { "queries": 237, "inventories": 66, "nodes": 268, "digest": "6cd1e4bf50da1953a24b9ee4faeea68429f04643817f756dfaca019399270949" }, "seconds": 9.079, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-2/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 5, 9, 15 ], "screened_out": [ { "start": 2, "reason": "ridge end framing" }, { "start": 3, "reason": "ridge end framing" }, { "start": 25, "reason": "ridge end framing" }, { "start": 26, "reason": "ridge end framing" } ], "optional_omission": false }, { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true } ] } }
pair-4-1建造成功1710455376247
查看数据
{ "label": "pair-4-1", "inputs": { "environment_seed": 7104, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.025, 0.02, 4 ] }, { "op": "wave", "args": [ 0, 0.11, 0.08, 3.5345924346261524 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 2, 6 ] }, "water": 4, "digest": "ea3bc57d2b605a54b5117e48f083b52f517d7425b3ab4235b25857d0e68ea482", "held_out_composition": false, "structure_seed": 1, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 2, "purpose": "library" } ] }, "bay": 13, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "81bb83eeb9bee9a92962a05d7977d5ca2aa3173220d4d4b3775a48c62b27a87a", "principal_signature": "46cb3da868e0c443ab050335332cad5ad2654231f1e6b62850f6dbd0a1af189c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 30, "cap_overhang": 0 } ], [ "roof.dormer", [ 12, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 20, 25 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 19, 13 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "db17e9be4baa9e2c4bec8b5015d72903e3d4f6d094ae4720f0fb5c2ba3284da3" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "38314bd90ebead636459e4d0c31a241a3cada8fea5f073a8f1ec06544f6bb2d6" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 13 ], "room.library", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 18, 13 ], "room.loft.bedroom", [ "landing" ], false, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "1f772d91fe5efb4a7e000b7e2ffc7f9ee53707dca111e1b07b68bfe6f063ff12" ], [ "room", [ 0, 6, 13 ], "room.bedroom", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ] ] ], "contact": { "fill": 24, "excavation": 0, "sitework_occupied_cells": 30, "replaced_cells": 27, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "479a299a289081d62ba827a41f12eeeb6ba5dbe466b6973b9dab1c933ff9cefd", "bearing_fill": 0 }, "blocks": 55376, "nodes": 247, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 0.84 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 3.5344, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 13 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 6, 10, 11 ], "screened_out": [ { "start": 18, "reason": "ridge end framing" }, { "start": 19, "reason": "ridge end framing" } ], "optional_omission": false } ] } }
pair-4-6建造成功6710455392268
查看数据
{ "label": "pair-4-6", "inputs": { "environment_seed": 7104, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.025, 0.02, 4 ] }, { "op": "wave", "args": [ 0, 0.11, 0.08, 3.5345924346261524 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 2, 6 ] }, "water": 4, "digest": "ea3bc57d2b605a54b5117e48f083b52f517d7425b3ab4235b25857d0e68ea482", "held_out_composition": false, "structure_seed": 6, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "storage" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 7, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 3, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "cf1eef37b43fd8ab5a8b9a19929ba852d082c74042865577ffa1c4c8fe64739f", "principal_signature": "909d9b94533725f7926b6d6d986411403c41c535aaef6310d2fcc34b8bb868ad", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 33, "entrance_x": 5, "columns": [ 0, 11, 21, 32 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 16, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 23, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 27, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "79ee98aed289bc97683b497e9b23d1e0e6c928b715062ff2c253661e3c8dffcc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "db311603a9f243d8d349882c757e8237a4f27caae6df93b37a271f3f1852ce6e" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "4f6b79a834d2733013a7dcbea8504b9801cf3d79d23ec7bbf6a48eeb8bbfd888" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6241faebbf1ebbf7d2a03c9b94287834b0216989b3125d8a79d602ea48faea8e" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west", "east" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.storage", [ "north", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 37, "excavation": 0, "sitework_occupied_cells": 43, "replaced_cells": 40, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "ea0e0da17a2bde1e9879a4812918351d4dbae84482e401cb53f77e7d105c0ea8", "bearing_fill": 0 }, "blocks": 55392, "nodes": 268, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 1.23 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "left", 11, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 3.6123, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-2/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 5, 9, 13 ], "screened_out": [ { "start": 2, "reason": "ridge end framing" }, { "start": 3, "reason": "ridge end framing" }, { "start": 25, "reason": "ridge end framing" }, { "start": 26, "reason": "ridge end framing" } ], "optional_omission": false }, { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true } ] } }
pair-5-1建造成功1710555756247
查看数据
{ "label": "pair-5-1", "inputs": { "environment_seed": 7105, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.025, -0.02, 4 ] }, { "op": "wave", "args": [ 0.35, 0.11, 0.08, 3.9255305064611132 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 2, 6 ] }, "water": 4, "digest": "ab7d1eecd88df6813203f57eeed88e9746540e5faf4380d03886d00273061818", "held_out_composition": false, "structure_seed": 1, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 2, "purpose": "library" } ] }, "bay": 13, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "68e6924d8493802802d72b51f1d3e6a4c57fc41b8a4564dee68c6b5e8d18d017", "principal_signature": "46cb3da868e0c443ab050335332cad5ad2654231f1e6b62850f6dbd0a1af189c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 30, "cap_overhang": 0 } ], [ "roof.dormer", [ 12, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 20, 25 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 19, 13 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "db17e9be4baa9e2c4bec8b5015d72903e3d4f6d094ae4720f0fb5c2ba3284da3" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "38314bd90ebead636459e4d0c31a241a3cada8fea5f073a8f1ec06544f6bb2d6" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 13 ], "room.library", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 18, 13 ], "room.loft.bedroom", [ "landing" ], false, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "1f772d91fe5efb4a7e000b7e2ffc7f9ee53707dca111e1b07b68bfe6f063ff12" ], [ "room", [ 0, 6, 13 ], "room.bedroom", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ] ] ], "contact": { "fill": 33, "excavation": 0, "sitework_occupied_cells": 39, "replaced_cells": 36, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "f4c3313b0cf364858c11bc36abf0f0637eabdd3189744f30fb6402d1aa22ae31", "bearing_fill": 3 }, "blocks": 55756, "nodes": 247, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 1.11 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 3.6205, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 13 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 6, 10, 11 ], "screened_out": [ { "start": 18, "reason": "ridge end framing" }, { "start": 19, "reason": "ridge end framing" } ], "optional_omission": false } ] } }
pair-5-6建造成功6710555772268
查看数据
{ "label": "pair-5-6", "inputs": { "environment_seed": 7105, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.025, -0.02, 4 ] }, { "op": "wave", "args": [ 0.35, 0.11, 0.08, 3.9255305064611132 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 2, 6 ] }, "water": 4, "digest": "ab7d1eecd88df6813203f57eeed88e9746540e5faf4380d03886d00273061818", "held_out_composition": false, "structure_seed": 6, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "storage" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 7, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 3, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "876931edb9ba34e96670862132a2a3c813ce8c6b11d277f365b59e25f0c6f1a9", "principal_signature": "909d9b94533725f7926b6d6d986411403c41c535aaef6310d2fcc34b8bb868ad", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 33, "entrance_x": 5, "columns": [ 0, 11, 21, 32 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 16, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 23, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 27, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "79ee98aed289bc97683b497e9b23d1e0e6c928b715062ff2c253661e3c8dffcc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "db311603a9f243d8d349882c757e8237a4f27caae6df93b37a271f3f1852ce6e" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "4f6b79a834d2733013a7dcbea8504b9801cf3d79d23ec7bbf6a48eeb8bbfd888" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6241faebbf1ebbf7d2a03c9b94287834b0216989b3125d8a79d602ea48faea8e" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west", "east" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.storage", [ "north", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 28, "excavation": 0, "sitework_occupied_cells": 34, "replaced_cells": 31, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "60ab81b393f97ef6bc9c38cf00a9988027826ad861c5e5561e010f3935513dbc", "bearing_fill": 3 }, "blocks": 55772, "nodes": 268, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 0.96 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "left", 11, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 3.5836, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-2/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 5, 9, 13 ], "screened_out": [ { "start": 2, "reason": "ridge end framing" }, { "start": 3, "reason": "ridge end framing" }, { "start": 25, "reason": "ridge end framing" }, { "start": 26, "reason": "ridge end framing" } ], "optional_omission": false }, { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true } ] } }
pair-6-1建造成功1710655245247
查看数据
{ "label": "pair-6-1", "inputs": { "environment_seed": 7106, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, -0.02, 4 ] }, { "op": "wave", "args": [ 0, 0.11, 0.08, 3.4940148804219175 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 2, 6 ] }, "water": 4, "digest": "94a5b4d57c3dedd70a495e804cadd84b047fe572d46f149786901792e18d669f", "held_out_composition": false, "structure_seed": 1, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 2, "purpose": "library" } ] }, "bay": 13, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "45b2f1a4178e9b4781f243eb48fc3701b68a5ef9b6d2ab20fcea72fb1736310f", "principal_signature": "46cb3da868e0c443ab050335332cad5ad2654231f1e6b62850f6dbd0a1af189c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 30, "cap_overhang": 0 } ], [ "roof.dormer", [ 12, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 20, 25 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 19, 13 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "db17e9be4baa9e2c4bec8b5015d72903e3d4f6d094ae4720f0fb5c2ba3284da3" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "38314bd90ebead636459e4d0c31a241a3cada8fea5f073a8f1ec06544f6bb2d6" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 13 ], "room.library", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 18, 13 ], "room.loft.bedroom", [ "landing" ], false, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "1f772d91fe5efb4a7e000b7e2ffc7f9ee53707dca111e1b07b68bfe6f063ff12" ], [ "room", [ 0, 6, 13 ], "room.bedroom", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ] ] ], "contact": { "fill": 34, "excavation": 0, "sitework_occupied_cells": 40, "replaced_cells": 37, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "40a7012bd5fd4eb06c389dbf8aafb31344bfd17cf547020ea74c8c7b40e20a32", "bearing_fill": 3 }, "blocks": 55245, "nodes": 247, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 1.14 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 3.5088, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 13 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 6, 10, 11 ], "screened_out": [ { "start": 18, "reason": "ridge end framing" }, { "start": 19, "reason": "ridge end framing" } ], "optional_omission": false } ] } }
pair-6-6建造成功6710655261268
查看数据
{ "label": "pair-6-6", "inputs": { "environment_seed": 7106, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, -0.02, 4 ] }, { "op": "wave", "args": [ 0, 0.11, 0.08, 3.4940148804219175 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 2, 6 ] }, "water": 4, "digest": "94a5b4d57c3dedd70a495e804cadd84b047fe572d46f149786901792e18d669f", "held_out_composition": false, "structure_seed": 6, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "storage" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 7, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 3, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "eccc760ec3cf381ecfe0b486b780c8dc667af8b8d05b4a9ed2bc83f555c19e9f", "principal_signature": "909d9b94533725f7926b6d6d986411403c41c535aaef6310d2fcc34b8bb868ad", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 33, "entrance_x": 5, "columns": [ 0, 11, 21, 32 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 16, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 23, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 27, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "79ee98aed289bc97683b497e9b23d1e0e6c928b715062ff2c253661e3c8dffcc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "db311603a9f243d8d349882c757e8237a4f27caae6df93b37a271f3f1852ce6e" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "4f6b79a834d2733013a7dcbea8504b9801cf3d79d23ec7bbf6a48eeb8bbfd888" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6241faebbf1ebbf7d2a03c9b94287834b0216989b3125d8a79d602ea48faea8e" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west", "east" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.storage", [ "north", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 30, "excavation": 0, "sitework_occupied_cells": 36, "replaced_cells": 33, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "5d73c81139b77f37781865fede2835f3b6f2e9bb44130a1a840c87c29f44c1fd", "bearing_fill": 3 }, "blocks": 55261, "nodes": 268, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 1.02 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "left", 11, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 3.4553, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-2/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 5, 9, 13 ], "screened_out": [ { "start": 2, "reason": "ridge end framing" }, { "start": 3, "reason": "ridge end framing" }, { "start": 25, "reason": "ridge end framing" }, { "start": 26, "reason": "ridge end framing" } ], "optional_omission": false }, { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true } ] } }
pair-7-1建造成功1710755775247
查看数据
{ "label": "pair-7-1", "inputs": { "environment_seed": 7107, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.02, 4 ] }, { "op": "wave", "args": [ 0, 0.11, 0.08, 4.772226487537761 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 2, 6 ] }, "water": 4, "digest": "fd5037cae547ce5326f9fd4db88f501006ea36b3b7cba2cd2400461189b2fa32", "held_out_composition": false, "structure_seed": 1, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 2, "purpose": "library" } ] }, "bay": 13, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "ffdc6fabdfd05bde1cc3541cce28684df00ca884e610d1a5cf2bc687de1920f1", "principal_signature": "46cb3da868e0c443ab050335332cad5ad2654231f1e6b62850f6dbd0a1af189c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 30, "cap_overhang": 0 } ], [ "roof.dormer", [ 12, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 20, 25 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 19, 13 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "db17e9be4baa9e2c4bec8b5015d72903e3d4f6d094ae4720f0fb5c2ba3284da3" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "38314bd90ebead636459e4d0c31a241a3cada8fea5f073a8f1ec06544f6bb2d6" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 13 ], "room.library", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 18, 13 ], "room.loft.bedroom", [ "landing" ], false, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "1f772d91fe5efb4a7e000b7e2ffc7f9ee53707dca111e1b07b68bfe6f063ff12" ], [ "room", [ 0, 6, 13 ], "room.bedroom", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ] ] ], "contact": { "fill": 1, "excavation": 0, "sitework_occupied_cells": 7, "replaced_cells": 4, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "6197a281016fc6de20ba4b55e5901665e9cfec31678bd471c34fc81937ea215f", "bearing_fill": 0 }, "blocks": 55775, "nodes": 247, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 0.15 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 3.3737, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 13 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 6, 10, 11 ], "screened_out": [ { "start": 18, "reason": "ridge end framing" }, { "start": 19, "reason": "ridge end framing" } ], "optional_omission": false } ] } }
pair-7-6建造成功6710755794268
查看数据
{ "label": "pair-7-6", "inputs": { "environment_seed": 7107, "expression": { "op": "clamp", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.02, 4 ] }, { "op": "wave", "args": [ 0, 0.11, 0.08, 4.772226487537761 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 2, 6 ] }, "water": 4, "digest": "fd5037cae547ce5326f9fd4db88f501006ea36b3b7cba2cd2400461189b2fa32", "held_out_composition": false, "structure_seed": 6, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "storage" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 7, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 3, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "f1d3c25fac7b2477d367c0f8dd23cec70d3b1d90d6b9f4f5325fa14b78745b58", "principal_signature": "909d9b94533725f7926b6d6d986411403c41c535aaef6310d2fcc34b8bb868ad", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 33, "entrance_x": 5, "columns": [ 0, 11, 21, 32 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 16, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 23, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 27, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "79ee98aed289bc97683b497e9b23d1e0e6c928b715062ff2c253661e3c8dffcc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "db311603a9f243d8d349882c757e8237a4f27caae6df93b37a271f3f1852ce6e" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "4f6b79a834d2733013a7dcbea8504b9801cf3d79d23ec7bbf6a48eeb8bbfd888" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6241faebbf1ebbf7d2a03c9b94287834b0216989b3125d8a79d602ea48faea8e" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west", "east" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.storage", [ "north", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 1, "excavation": 0, "sitework_occupied_cells": 8, "replaced_cells": 2, "new_sitework_cells": 6, "strategies": [ "piers" ], "signature": "db119a0585d59cd8506bee925351bad6ec10884e5c047b0712ccd3700ebc3c67", "bearing_fill": 0 }, "blocks": 55794, "nodes": 268, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 0.12 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "left", 11, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 3.7223, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-2/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 5, 9, 13 ], "screened_out": [ { "start": 2, "reason": "ridge end framing" }, { "start": 3, "reason": "ridge end framing" }, { "start": 25, "reason": "ridge end framing" }, { "start": 26, "reason": "ridge end framing" } ], "optional_omission": false }, { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true } ] } }
pair-8-1建造成功1710860696247
查看数据
{ "label": "pair-8-1", "inputs": { "environment_seed": 7108, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.025, -0.02, 4 ] }, { "op": "wave", "args": [ 0.35, 0.11, 0.08, 3.6656966549787513 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 3, -2, 1.2 ] }, { "op": "multiply", "args": [ { "op": "wave", "args": [ 0.2, 0.07, 0.13, 1.9530125988701812 ] }, { "op": "radial", "args": [ 18, 10, 50, 1 ] } ] } ] }, 2, 6 ] }, "water": 5, "digest": "69e4257662a65d1442b3abedb4e0bbde0e4a6071b1a10cbbb0acd553e4e07666", "held_out_composition": true, "structure_seed": 1, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 2, "purpose": "library" } ] }, "bay": 13, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "ef5d0bb84efc82ea08c18c1921940ad91fc9fda90392e22869ec3ee4f9fcf980", "principal_signature": "46cb3da868e0c443ab050335332cad5ad2654231f1e6b62850f6dbd0a1af189c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 30, "cap_overhang": 0 } ], [ "roof.dormer", [ 12, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 20, 25 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 19, 13 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "db17e9be4baa9e2c4bec8b5015d72903e3d4f6d094ae4720f0fb5c2ba3284da3" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "38314bd90ebead636459e4d0c31a241a3cada8fea5f073a8f1ec06544f6bb2d6" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 13 ], "room.library", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 18, 13 ], "room.loft.bedroom", [ "landing" ], false, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "1f772d91fe5efb4a7e000b7e2ffc7f9ee53707dca111e1b07b68bfe6f063ff12" ], [ "room", [ 0, 6, 13 ], "room.bedroom", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ] ] ], "contact": { "fill": 160, "excavation": 0, "sitework_occupied_cells": 166, "replaced_cells": 163, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "7478301c16a93f55cf224117d12e06ea5587bdefed8daf2015222e4ce5d594b8", "bearing_fill": 3 }, "blocks": 60696, "nodes": 247, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 4.92 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 3.5826, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 13 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 6, 10, 11 ], "screened_out": [ { "start": 18, "reason": "ridge end framing" }, { "start": 19, "reason": "ridge end framing" } ], "optional_omission": false } ] } }
pair-8-6建造成功6710860712268
查看数据
{ "label": "pair-8-6", "inputs": { "environment_seed": 7108, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.025, -0.02, 4 ] }, { "op": "wave", "args": [ 0.35, 0.11, 0.08, 3.6656966549787513 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 3, -2, 1.2 ] }, { "op": "multiply", "args": [ { "op": "wave", "args": [ 0.2, 0.07, 0.13, 1.9530125988701812 ] }, { "op": "radial", "args": [ 18, 10, 50, 1 ] } ] } ] }, 2, 6 ] }, "water": 5, "digest": "69e4257662a65d1442b3abedb4e0bbde0e4a6071b1a10cbbb0acd553e4e07666", "held_out_composition": true, "structure_seed": 6, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "storage" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 7, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 3, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "e61d57f6f014cb25ef974ab7e4e380be60fd1ba9c468b79ccaaf87a719c0ee4e", "principal_signature": "909d9b94533725f7926b6d6d986411403c41c535aaef6310d2fcc34b8bb868ad", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 33, "entrance_x": 5, "columns": [ 0, 11, 21, 32 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 16, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 23, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 27, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "79ee98aed289bc97683b497e9b23d1e0e6c928b715062ff2c253661e3c8dffcc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "db311603a9f243d8d349882c757e8237a4f27caae6df93b37a271f3f1852ce6e" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "4f6b79a834d2733013a7dcbea8504b9801cf3d79d23ec7bbf6a48eeb8bbfd888" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6241faebbf1ebbf7d2a03c9b94287834b0216989b3125d8a79d602ea48faea8e" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west", "east" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.storage", [ "north", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 195, "excavation": 0, "sitework_occupied_cells": 201, "replaced_cells": 198, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "fe51ddc2825ad9b2c079472497537a948bddfb7174818dcfebdf047c2a3bce4e", "bearing_fill": 3 }, "blocks": 60712, "nodes": 268, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 5.97 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "left", 11, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 5.9132, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-2/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 5, 9, 13 ], "screened_out": [ { "start": 2, "reason": "ridge end framing" }, { "start": 3, "reason": "ridge end framing" }, { "start": 25, "reason": "ridge end framing" }, { "start": 26, "reason": "ridge end framing" } ], "optional_omission": false }, { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true } ] } }
pair-9-1建造成功1710955245247
查看数据
{ "label": "pair-9-1", "inputs": { "environment_seed": 7109, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.025, -0.02, 4 ] }, { "op": "wave", "args": [ 0, 0.11, 0.08, 4.156108579608082 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 3, -2, 1.2 ] }, { "op": "multiply", "args": [ { "op": "wave", "args": [ 0.2, 0.07, 0.13, 2.2568490534860715 ] }, { "op": "radial", "args": [ 18, 10, 50, 1 ] } ] } ] }, 2, 6 ] }, "water": 4, "digest": "38f572d60a2dff3781a064475f953ca975a9afc15d808fd35fc7ff5a97ecc098", "held_out_composition": true, "structure_seed": 1, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 2, "purpose": "library" } ] }, "bay": 13, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "ff2ea5099515a5f291a7c5d219d14d755f051b29a3ae4ef372939085a2946b40", "principal_signature": "46cb3da868e0c443ab050335332cad5ad2654231f1e6b62850f6dbd0a1af189c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 30, "cap_overhang": 0 } ], [ "roof.dormer", [ 12, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 20, 25 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 19, 13 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "db17e9be4baa9e2c4bec8b5015d72903e3d4f6d094ae4720f0fb5c2ba3284da3" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "38314bd90ebead636459e4d0c31a241a3cada8fea5f073a8f1ec06544f6bb2d6" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 13 ], "room.library", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 18, 13 ], "room.loft.bedroom", [ "landing" ], false, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "1f772d91fe5efb4a7e000b7e2ffc7f9ee53707dca111e1b07b68bfe6f063ff12" ], [ "room", [ 0, 6, 13 ], "room.bedroom", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ] ] ], "contact": { "fill": 56, "excavation": 0, "sitework_occupied_cells": 62, "replaced_cells": 59, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "9d0f105f9ea5256d326198bd77056e1b5a7197e220ea747cbd5379477d81d724", "bearing_fill": 3 }, "blocks": 55245, "nodes": 247, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 1.8 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 10.2997, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 13 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 6, 10, 11 ], "screened_out": [ { "start": 18, "reason": "ridge end framing" }, { "start": 19, "reason": "ridge end framing" } ], "optional_omission": false } ] } }
pair-9-6建造成功6710955261268
查看数据
{ "label": "pair-9-6", "inputs": { "environment_seed": 7109, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.025, -0.02, 4 ] }, { "op": "wave", "args": [ 0, 0.11, 0.08, 4.156108579608082 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 3, -2, 1.2 ] }, { "op": "multiply", "args": [ { "op": "wave", "args": [ 0.2, 0.07, 0.13, 2.2568490534860715 ] }, { "op": "radial", "args": [ 18, 10, 50, 1 ] } ] } ] }, 2, 6 ] }, "water": 4, "digest": "38f572d60a2dff3781a064475f953ca975a9afc15d808fd35fc7ff5a97ecc098", "held_out_composition": true, "structure_seed": 6, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "storage" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 7, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 3, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "5f3c9ae5a222d1467d8cedc1769cf8c850c8552951d7255e60f3f665766f336e", "principal_signature": "909d9b94533725f7926b6d6d986411403c41c535aaef6310d2fcc34b8bb868ad", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 33, "entrance_x": 5, "columns": [ 0, 11, 21, 32 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 16, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 23, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 27, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "79ee98aed289bc97683b497e9b23d1e0e6c928b715062ff2c253661e3c8dffcc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "db311603a9f243d8d349882c757e8237a4f27caae6df93b37a271f3f1852ce6e" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "4f6b79a834d2733013a7dcbea8504b9801cf3d79d23ec7bbf6a48eeb8bbfd888" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6241faebbf1ebbf7d2a03c9b94287834b0216989b3125d8a79d602ea48faea8e" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west", "east" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.storage", [ "north", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 75, "excavation": 0, "sitework_occupied_cells": 81, "replaced_cells": 78, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "f8b2d2078fc3981f0399d130e3f292fc012dc67eaca8c53e1aaab9b326b90a96", "bearing_fill": 3 }, "blocks": 55261, "nodes": 268, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 2.37 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "left", 11, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 9.9659, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-2/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 5, 9, 13 ], "screened_out": [ { "start": 2, "reason": "ridge end framing" }, { "start": 3, "reason": "ridge end framing" }, { "start": 25, "reason": "ridge end framing" }, { "start": 26, "reason": "ridge end framing" } ], "optional_omission": false }, { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true } ] } }
pair-10-1建造成功1711054301246
查看数据
{ "label": "pair-10-1", "inputs": { "environment_seed": 7110, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.02, 4 ] }, { "op": "wave", "args": [ 0, 0.11, 0.08, 3.588743492740112 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 3, -2, 1.2 ] }, { "op": "multiply", "args": [ { "op": "wave", "args": [ 0.2, 0.07, 0.13, 2.507534634300981 ] }, { "op": "radial", "args": [ 18, 10, 50, 1 ] } ] } ] }, 2, 6 ] }, "water": null, "digest": "2de71c7121f913901eab63a09d4b515345b8c2cf8c3ae287194c16b6e686fc15", "held_out_composition": true, "structure_seed": 1, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 2, "purpose": "library" } ] }, "bay": 13, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "4618d779dd664fdc0ee8a90457c23cf89d807abd41bbfb33df918c736962d583", "principal_signature": "46cb3da868e0c443ab050335332cad5ad2654231f1e6b62850f6dbd0a1af189c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 30, "cap_overhang": 0 } ], [ "roof.dormer", [ 12, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 20, 25 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 19, 13 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "db17e9be4baa9e2c4bec8b5015d72903e3d4f6d094ae4720f0fb5c2ba3284da3" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "38314bd90ebead636459e4d0c31a241a3cada8fea5f073a8f1ec06544f6bb2d6" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 13 ], "room.library", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 18, 13 ], "room.loft.bedroom", [ "landing" ], false, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "1f772d91fe5efb4a7e000b7e2ffc7f9ee53707dca111e1b07b68bfe6f063ff12" ], [ "room", [ 0, 6, 13 ], "room.bedroom", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ] ] ], "contact": { "fill": 5, "excavation": 0, "sitework_occupied_cells": 11, "replaced_cells": 3, "new_sitework_cells": 8, "strategies": [ "stepped" ], "signature": "a7c52a179db781d8a0a10df9681fc41d850fe5f000a49c4e5bca30a373584c06", "bearing_fill": 0 }, "blocks": 54301, "nodes": 246, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.17 ], [ 1, 0.56 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/new/pair-10-1.litematic", "audit": { "queries": 221, "inventories": 44, "nodes": 246, "digest": "4618d779dd664fdc0ee8a90457c23cf89d807abd41bbfb33df918c736962d583" }, "seconds": 13.6273, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 13 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 6, 10, 11 ], "screened_out": [ { "start": 18, "reason": "ridge end framing" }, { "start": 19, "reason": "ridge end framing" } ], "optional_omission": false } ] } }
pair-10-6建造成功6711054302268
查看数据
{ "label": "pair-10-6", "inputs": { "environment_seed": 7110, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.02, 4 ] }, { "op": "wave", "args": [ 0, 0.11, 0.08, 3.588743492740112 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 3, -2, 1.2 ] }, { "op": "multiply", "args": [ { "op": "wave", "args": [ 0.2, 0.07, 0.13, 2.507534634300981 ] }, { "op": "radial", "args": [ 18, 10, 50, 1 ] } ] } ] }, 2, 6 ] }, "water": null, "digest": "2de71c7121f913901eab63a09d4b515345b8c2cf8c3ae287194c16b6e686fc15", "held_out_composition": true, "structure_seed": 6, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "storage" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 7, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 3, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "57d5422f01f20270e13ac91b756fa8b934f84c8cccb83baefde0324833440e03", "principal_signature": "ffecc196693d09e48548589b350cf286445eafb9c7253bb0c1bfa27ac558662f", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 33, "entrance_x": 5, "columns": [ 0, 11, 21, 32 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 16, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 23, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 27, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "79ee98aed289bc97683b497e9b23d1e0e6c928b715062ff2c253661e3c8dffcc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "13538e194e511568f395e1ac105ac7cab8e6605925c3d5117d19a6b7e3373437" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "4f6b79a834d2733013a7dcbea8504b9801cf3d79d23ec7bbf6a48eeb8bbfd888" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6241faebbf1ebbf7d2a03c9b94287834b0216989b3125d8a79d602ea48faea8e" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west", "east" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.storage", [ "north", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 5, "excavation": 0, "sitework_occupied_cells": 11, "replaced_cells": 3, "new_sitework_cells": 8, "strategies": [ "stepped" ], "signature": "47b9eed10877399da4ceabfb19a0bab7bb3ecb6cfc6d916558e7fcf721c4f5f2", "bearing_fill": 0 }, "blocks": 54302, "nodes": 268, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.17 ], [ 1, 0.56 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "left", 11, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 8.3518, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-2/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 5, 9, 15 ], "screened_out": [ { "start": 2, "reason": "ridge end framing" }, { "start": 3, "reason": "ridge end framing" }, { "start": 25, "reason": "ridge end framing" }, { "start": 26, "reason": "ridge end framing" } ], "optional_omission": false }, { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true } ] } }
pair-11-1建造成功1711160783247
查看数据
{ "label": "pair-11-1", "inputs": { "environment_seed": 7111, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.025, 0.02, 4 ] }, { "op": "wave", "args": [ 0.35, 0.11, 0.08, 2.0905816656364395 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 3, -2, 1.2 ] }, { "op": "multiply", "args": [ { "op": "wave", "args": [ 0.2, 0.07, 0.13, 5.248446562784936 ] }, { "op": "radial", "args": [ 18, 10, 50, 1 ] } ] } ] }, 2, 6 ] }, "water": 5, "digest": "502cdeef78dc7d34b28bb1cd43eebc857a0456d0c1f7628a8b01e5b5071dd1bc", "held_out_composition": true, "structure_seed": 1, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 2, "purpose": "library" } ] }, "bay": 13, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "21cba36666353cceb3acac796209dc35004a93f7cde660e435898e7f2a856c05", "principal_signature": "46cb3da868e0c443ab050335332cad5ad2654231f1e6b62850f6dbd0a1af189c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 30, "cap_overhang": 0 } ], [ "roof.dormer", [ 12, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 20, 25 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 19, 13 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "db17e9be4baa9e2c4bec8b5015d72903e3d4f6d094ae4720f0fb5c2ba3284da3" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "38314bd90ebead636459e4d0c31a241a3cada8fea5f073a8f1ec06544f6bb2d6" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 13 ], "room.library", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 18, 13 ], "room.loft.bedroom", [ "landing" ], false, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "1f772d91fe5efb4a7e000b7e2ffc7f9ee53707dca111e1b07b68bfe6f063ff12" ], [ "room", [ 0, 6, 13 ], "room.bedroom", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ] ] ], "contact": { "fill": 143, "excavation": 0, "sitework_occupied_cells": 149, "replaced_cells": 146, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "d211054570c6ce58b1b348d0768b532fd37dbbe5e2c846ea7f0e56100aaad453", "bearing_fill": 3 }, "blocks": 60783, "nodes": 247, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 4.41 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 5.291, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 13 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 6, 10, 11 ], "screened_out": [ { "start": 18, "reason": "ridge end framing" }, { "start": 19, "reason": "ridge end framing" } ], "optional_omission": false } ] } }
pair-11-6建造成功6711160799268
查看数据
{ "label": "pair-11-6", "inputs": { "environment_seed": 7111, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.025, 0.02, 4 ] }, { "op": "wave", "args": [ 0.35, 0.11, 0.08, 2.0905816656364395 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 3, -2, 1.2 ] }, { "op": "multiply", "args": [ { "op": "wave", "args": [ 0.2, 0.07, 0.13, 5.248446562784936 ] }, { "op": "radial", "args": [ 18, 10, 50, 1 ] } ] } ] }, 2, 6 ] }, "water": 5, "digest": "502cdeef78dc7d34b28bb1cd43eebc857a0456d0c1f7628a8b01e5b5071dd1bc", "held_out_composition": true, "structure_seed": 6, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "storage" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 7, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 3, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "03acbac6895bb78380650475ee369a0e8ce9b16e83b1e15f7d2cd333d75e9af6", "principal_signature": "909d9b94533725f7926b6d6d986411403c41c535aaef6310d2fcc34b8bb868ad", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 33, "entrance_x": 5, "columns": [ 0, 11, 21, 32 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 16, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 23, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 27, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "79ee98aed289bc97683b497e9b23d1e0e6c928b715062ff2c253661e3c8dffcc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "db311603a9f243d8d349882c757e8237a4f27caae6df93b37a271f3f1852ce6e" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "4f6b79a834d2733013a7dcbea8504b9801cf3d79d23ec7bbf6a48eeb8bbfd888" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6241faebbf1ebbf7d2a03c9b94287834b0216989b3125d8a79d602ea48faea8e" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west", "east" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.storage", [ "north", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 155, "excavation": 0, "sitework_occupied_cells": 161, "replaced_cells": 158, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "17c9512efb542cbbe0452659bbd9d607e601fbe12de8214033f952e61f19ac15", "bearing_fill": 3 }, "blocks": 60799, "nodes": 268, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 4.77 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "left", 11, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 5.2137, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-2/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 5, 9, 13 ], "screened_out": [ { "start": 2, "reason": "ridge end framing" }, { "start": 3, "reason": "ridge end framing" }, { "start": 25, "reason": "ridge end framing" }, { "start": 26, "reason": "ridge end framing" } ], "optional_omission": false }, { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true } ] } }
pair-12-1建造成功1711255245247
查看数据
{ "label": "pair-12-1", "inputs": { "environment_seed": 7112, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.025, 0, 4 ] }, { "op": "wave", "args": [ 0.35, 0.11, 0.08, 0.841491599582463 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 3, -2, 1.2 ] }, { "op": "multiply", "args": [ { "op": "wave", "args": [ 0.2, 0.07, 0.13, 4.877452983109502 ] }, { "op": "radial", "args": [ 18, 10, 50, 1 ] } ] } ] }, 2, 6 ] }, "water": 4, "digest": "1405195234498f0bc42b226cde2a61c97e362aa2cef6c085aa1c1f49d27fea64", "held_out_composition": true, "structure_seed": 1, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 2, "purpose": "library" } ] }, "bay": 13, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "c4beba3346cdd70608fd9a011070d6beb0a7e1c89d16b37d4cb56cce74801ad1", "principal_signature": "46cb3da868e0c443ab050335332cad5ad2654231f1e6b62850f6dbd0a1af189c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 30, "cap_overhang": 0 } ], [ "roof.dormer", [ 12, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 20, 25 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 19, 13 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "db17e9be4baa9e2c4bec8b5015d72903e3d4f6d094ae4720f0fb5c2ba3284da3" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "38314bd90ebead636459e4d0c31a241a3cada8fea5f073a8f1ec06544f6bb2d6" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 13 ], "room.library", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 18, 13 ], "room.loft.bedroom", [ "landing" ], false, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "1f772d91fe5efb4a7e000b7e2ffc7f9ee53707dca111e1b07b68bfe6f063ff12" ], [ "room", [ 0, 6, 13 ], "room.bedroom", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ] ] ], "contact": { "fill": 49, "excavation": 0, "sitework_occupied_cells": 55, "replaced_cells": 52, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "43c9deaf15e93f2cead45c783044ba90faa8b166b547293b5fe4ca0f76fe6587", "bearing_fill": 3 }, "blocks": 55245, "nodes": 247, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 1.59 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 7.1566, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 13 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 6, 10, 11 ], "screened_out": [ { "start": 18, "reason": "ridge end framing" }, { "start": 19, "reason": "ridge end framing" } ], "optional_omission": false } ] } }
pair-12-6建造成功6711255261268
查看数据
{ "label": "pair-12-6", "inputs": { "environment_seed": 7112, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.025, 0, 4 ] }, { "op": "wave", "args": [ 0.35, 0.11, 0.08, 0.841491599582463 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 3, -2, 1.2 ] }, { "op": "multiply", "args": [ { "op": "wave", "args": [ 0.2, 0.07, 0.13, 4.877452983109502 ] }, { "op": "radial", "args": [ 18, 10, 50, 1 ] } ] } ] }, 2, 6 ] }, "water": 4, "digest": "1405195234498f0bc42b226cde2a61c97e362aa2cef6c085aa1c1f49d27fea64", "held_out_composition": true, "structure_seed": 6, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "storage" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 7, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 3, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 1, "retries": 0, "status": "validated", "digest": "78dde60dfe128f4df60bf401e8d7e2c8814c3023762bd3ecf6b06ebd2f597224", "principal_signature": "909d9b94533725f7926b6d6d986411403c41c535aaef6310d2fcc34b8bb868ad", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 33, "entrance_x": 5, "columns": [ 0, 11, 21, 32 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 16, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 23, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 27, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "79ee98aed289bc97683b497e9b23d1e0e6c928b715062ff2c253661e3c8dffcc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "db311603a9f243d8d349882c757e8237a4f27caae6df93b37a271f3f1852ce6e" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "4f6b79a834d2733013a7dcbea8504b9801cf3d79d23ec7bbf6a48eeb8bbfd888" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6241faebbf1ebbf7d2a03c9b94287834b0216989b3125d8a79d602ea48faea8e" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west", "east" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.storage", [ "north", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 56, "excavation": 0, "sitework_occupied_cells": 62, "replaced_cells": 59, "new_sitework_cells": 3, "strategies": [ "piers" ], "signature": "571180e43e1729253a130cc3a7ad2648bafcb745844c8d7e56812a4351fee2b8", "bearing_fill": 3 }, "blocks": 55261, "nodes": 268, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 1, "rejected": [ { "rule": "contact-strategy", "component": "/building", "position": [ 0, 0, 0 ], "conditions": "Requested strategy incompatible with measured water/relief" } ], "scores": [ [ 1, 1.8 ] ], "chosen": 1 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "left", 11, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 6.9969, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-2/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 5, 9, 13 ], "screened_out": [ { "start": 2, "reason": "ridge end framing" }, { "start": 3, "reason": "ridge end framing" }, { "start": 25, "reason": "ridge end framing" }, { "start": 26, "reason": "ridge end framing" } ], "optional_omission": false }, { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true } ] } }
pair-13-1建造成功1711353206246
查看数据
{ "label": "pair-13-1", "inputs": { "environment_seed": 7113, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.025, 0.02, 4 ] }, { "op": "wave", "args": [ 0.35, 0.11, 0.08, 0.7745663197020807 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 3, -2, 1.2 ] }, { "op": "multiply", "args": [ { "op": "wave", "args": [ 0.2, 0.07, 0.13, 3.66893854456745 ] }, { "op": "radial", "args": [ 18, 10, 50, 1 ] } ] } ] }, 2, 6 ] }, "water": null, "digest": "0b614405dc2db6b419c59f3142db45d8ffb1dcb0455d28b2e9b1bdab37ea8c95", "held_out_composition": true, "structure_seed": 1, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 2, "purpose": "library" } ] }, "bay": 13, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "c4e3da3b49c2b8d6d92378c771d0c0a77fc2776e30a3eb20a07837ad8aac184a", "principal_signature": "46cb3da868e0c443ab050335332cad5ad2654231f1e6b62850f6dbd0a1af189c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 30, "cap_overhang": 0 } ], [ "roof.dormer", [ 12, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 20, 25 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 19, 13 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "db17e9be4baa9e2c4bec8b5015d72903e3d4f6d094ae4720f0fb5c2ba3284da3" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "38314bd90ebead636459e4d0c31a241a3cada8fea5f073a8f1ec06544f6bb2d6" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 13 ], "room.library", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 18, 13 ], "room.loft.bedroom", [ "landing" ], false, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "1f772d91fe5efb4a7e000b7e2ffc7f9ee53707dca111e1b07b68bfe6f063ff12" ], [ "room", [ 0, 6, 13 ], "room.bedroom", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ] ] ], "contact": { "fill": 8, "excavation": 0, "sitework_occupied_cells": 14, "replaced_cells": 3, "new_sitework_cells": 11, "strategies": [ "stepped" ], "signature": "8b81550d7852a693ffaa05ce9176627d4992f06d927926c3630be3f939f2b75e", "bearing_fill": 0 }, "blocks": 53206, "nodes": 246, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.2 ], [ 1, 0.58 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 8.4757, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 13 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 6, 10, 11 ], "screened_out": [ { "start": 18, "reason": "ridge end framing" }, { "start": 19, "reason": "ridge end framing" } ], "optional_omission": false } ] } }
pair-13-6建造成功6711353224268
查看数据
{ "label": "pair-13-6", "inputs": { "environment_seed": 7113, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ -0.025, 0.02, 4 ] }, { "op": "wave", "args": [ 0.35, 0.11, 0.08, 0.7745663197020807 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 3, -2, 1.2 ] }, { "op": "multiply", "args": [ { "op": "wave", "args": [ 0.2, 0.07, 0.13, 3.66893854456745 ] }, { "op": "radial", "args": [ 18, 10, 50, 1 ] } ] } ] }, 2, 6 ] }, "water": null, "digest": "0b614405dc2db6b419c59f3142db45d8ffb1dcb0455d28b2e9b1bdab37ea8c95", "held_out_composition": true, "structure_seed": 6, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "storage" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 7, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 3, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "c13ce36df9785097bd967ff93da7dd991f9cd7c8da5541ade746fa83dd09697c", "principal_signature": "ffecc196693d09e48548589b350cf286445eafb9c7253bb0c1bfa27ac558662f", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 33, "entrance_x": 5, "columns": [ 0, 11, 21, 32 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 16, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 23, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 27, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "79ee98aed289bc97683b497e9b23d1e0e6c928b715062ff2c253661e3c8dffcc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "13538e194e511568f395e1ac105ac7cab8e6605925c3d5117d19a6b7e3373437" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "4f6b79a834d2733013a7dcbea8504b9801cf3d79d23ec7bbf6a48eeb8bbfd888" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6241faebbf1ebbf7d2a03c9b94287834b0216989b3125d8a79d602ea48faea8e" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west", "east" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.storage", [ "north", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 25, "excavation": 0, "sitework_occupied_cells": 31, "replaced_cells": 3, "new_sitework_cells": 28, "strategies": [ "stepped" ], "signature": "d70d120986ead68becab1ad793f081c38bd91c54dbcaf50f8c93b4f853a17ce8", "bearing_fill": 0 }, "blocks": 53224, "nodes": 268, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.37 ], [ 1, 0.68 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "left", 11, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 7.2185, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-2/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 5, 9, 15 ], "screened_out": [ { "start": 2, "reason": "ridge end framing" }, { "start": 3, "reason": "ridge end framing" }, { "start": 25, "reason": "ridge end framing" }, { "start": 26, "reason": "ridge end framing" } ], "optional_omission": false }, { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true } ] } }
pair-14-1建造成功1711454301246
查看数据
{ "label": "pair-14-1", "inputs": { "environment_seed": 7114, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.02, 4 ] }, { "op": "wave", "args": [ 0, 0.11, 0.08, 5.184796365187152 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 3, -2, 1.2 ] }, { "op": "multiply", "args": [ { "op": "wave", "args": [ 0.2, 0.07, 0.13, 5.249180721308962 ] }, { "op": "radial", "args": [ 18, 10, 50, 1 ] } ] } ] }, 2, 6 ] }, "water": null, "digest": "a3cca3cadab1a0589cc9d7a0141b6cbdcd35016ff4592d06b4ce8e1224772ae3", "held_out_composition": true, "structure_seed": 1, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 2, "purpose": "library" } ] }, "bay": 13, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "c2ca51768c0b58f1d7bd09238ea1e4f852663e915d221c4d10976b742c0fa091", "principal_signature": "46cb3da868e0c443ab050335332cad5ad2654231f1e6b62850f6dbd0a1af189c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 30, "cap_overhang": 0 } ], [ "roof.dormer", [ 12, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 20, 25 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 19, 13 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "db17e9be4baa9e2c4bec8b5015d72903e3d4f6d094ae4720f0fb5c2ba3284da3" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "38314bd90ebead636459e4d0c31a241a3cada8fea5f073a8f1ec06544f6bb2d6" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 13 ], "room.library", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 18, 13 ], "room.loft.bedroom", [ "landing" ], false, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "1f772d91fe5efb4a7e000b7e2ffc7f9ee53707dca111e1b07b68bfe6f063ff12" ], [ "room", [ 0, 6, 13 ], "room.bedroom", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ] ] ], "contact": { "fill": 0, "excavation": 0, "sitework_occupied_cells": 6, "replaced_cells": 3, "new_sitework_cells": 3, "strategies": [ "stepped" ], "signature": "3740c3ac680c798341006787527598ce97d47e489aa5b326b45bb5d49a045e0f", "bearing_fill": 0 }, "blocks": 54301, "nodes": 246, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.12 ], [ 1, 0.52 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 6.4199, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 13 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 6, 10, 11 ], "screened_out": [ { "start": 18, "reason": "ridge end framing" }, { "start": 19, "reason": "ridge end framing" } ], "optional_omission": false } ] } }
pair-14-6建造成功6711454302268
查看数据
{ "label": "pair-14-6", "inputs": { "environment_seed": 7114, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0, 0.02, 4 ] }, { "op": "wave", "args": [ 0, 0.11, 0.08, 5.184796365187152 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 3, -2, 1.2 ] }, { "op": "multiply", "args": [ { "op": "wave", "args": [ 0.2, 0.07, 0.13, 5.249180721308962 ] }, { "op": "radial", "args": [ 18, 10, 50, 1 ] } ] } ] }, 2, 6 ] }, "water": null, "digest": "a3cca3cadab1a0589cc9d7a0141b6cbdcd35016ff4592d06b4ce8e1224772ae3", "held_out_composition": true, "structure_seed": 6, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "storage" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 7, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 3, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "99f5e4a83378a62bb6ee3890a07e83599fa71f88e2070e75382da998d039d2aa", "principal_signature": "ffecc196693d09e48548589b350cf286445eafb9c7253bb0c1bfa27ac558662f", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 33, "entrance_x": 5, "columns": [ 0, 11, 21, 32 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 16, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 23, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 27, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "79ee98aed289bc97683b497e9b23d1e0e6c928b715062ff2c253661e3c8dffcc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "13538e194e511568f395e1ac105ac7cab8e6605925c3d5117d19a6b7e3373437" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "4f6b79a834d2733013a7dcbea8504b9801cf3d79d23ec7bbf6a48eeb8bbfd888" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6241faebbf1ebbf7d2a03c9b94287834b0216989b3125d8a79d602ea48faea8e" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west", "east" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.storage", [ "north", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 0, "excavation": 0, "sitework_occupied_cells": 6, "replaced_cells": 3, "new_sitework_cells": 3, "strategies": [ "stepped" ], "signature": "cbaf4264cbe06448b6e0247310381afa04aa3b95f8395886e89f221ca082bc6b", "bearing_fill": 0 }, "blocks": 54302, "nodes": 268, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.12 ], [ 1, 0.52 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "left", 11, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 5.4463, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-2/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 5, 9, 15 ], "screened_out": [ { "start": 2, "reason": "ridge end framing" }, { "start": 3, "reason": "ridge end framing" }, { "start": 25, "reason": "ridge end framing" }, { "start": 26, "reason": "ridge end framing" } ], "optional_omission": false }, { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true } ] } }
pair-15-1建造成功1711554672246
查看数据
{ "label": "pair-15-1", "inputs": { "environment_seed": 7115, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.025, 0, 4 ] }, { "op": "wave", "args": [ 0, 0.11, 0.08, 5.051099502659688 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 3, -2, 1.2 ] }, { "op": "multiply", "args": [ { "op": "wave", "args": [ 0.2, 0.07, 0.13, 1.4899534452078138 ] }, { "op": "radial", "args": [ 18, 10, 50, 1 ] } ] } ] }, 2, 6 ] }, "water": null, "digest": "4860951c48544170bf1b1c295cd47599af984cbe758e847eda339941dcf063a0", "held_out_composition": true, "structure_seed": 1, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 2, "purpose": "library" } ] }, "bay": 13, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 10, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 0, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 2, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "e2dec86a23a416751a58370fb1c1474218356242cff6cf76509d566fe02d3eff", "principal_signature": "46cb3da868e0c443ab050335332cad5ad2654231f1e6b62850f6dbd0a1af189c", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 26, "entrance_x": 6, "columns": [ 0, 8, 17, 25 ] } ], [ "masonry.chimney", [ 5, 0, 26 ], { "height": 30, "cap_overhang": 0 } ], [ "roof.dormer", [ 12, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 16, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 20, 25 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 8, 12 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 19, 13 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "db17e9be4baa9e2c4bec8b5015d72903e3d4f6d094ae4720f0fb5c2ba3284da3" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 13, "rise": [ 1, 2 ] }, "38314bd90ebead636459e4d0c31a241a3cada8fea5f073a8f1ec06544f6bb2d6" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 0, 13 ], "room.library", [ "north" ], true, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ], [ "room", [ 0, 12, 13 ], "room.library", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 18, 13 ], "room.loft.bedroom", [ "landing" ], false, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "1f772d91fe5efb4a7e000b7e2ffc7f9ee53707dca111e1b07b68bfe6f063ff12" ], [ "room", [ 0, 6, 13 ], "room.bedroom", [], true, "4cf252ceed5970647499c71e034c2ab432792e463e3739c5ffda3cef6e4f8b74" ], [ "room", [ 13, 0, 0 ], "room.kitchen", [ "west" ], false, "7c20fb3ec0b0e97b6766d63bba6e816ae797e2daf8b22eb6bdab41cbda0319b1" ] ] ], "contact": { "fill": 30, "excavation": 0, "sitework_occupied_cells": 36, "replaced_cells": 3, "new_sitework_cells": 33, "strategies": [ "stepped" ], "signature": "138bc5cac628e70ea36d6de96a9c9ec6b3cf0188ef5bf6ac024b3f14dfa1a71d", "bearing_fill": 0 }, "blocks": 54672, "nodes": 246, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.42 ], [ 1, 0.8 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 5.3099, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 13 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 6, 10, 11 ], "screened_out": [ { "start": 18, "reason": "ridge end framing" }, { "start": 19, "reason": "ridge end framing" } ], "optional_omission": false } ] } }
pair-15-6建造成功6711554670268
查看数据
{ "label": "pair-15-6", "inputs": { "environment_seed": 7115, "expression": { "op": "clamp", "args": [ { "op": "add", "args": [ { "op": "transform", "args": [ { "op": "blend", "args": [ { "op": "add", "args": [ { "op": "gradient", "args": [ 0.025, 0, 4 ] }, { "op": "wave", "args": [ 0, 0.11, 0.08, 5.051099502659688 ] } ] }, { "op": "add", "args": [ { "op": "gradient", "args": [ 0.01, -0.01, 4 ] }, { "op": "radial", "args": [ 20, 16, 35, 0.6 ] } ] }, { "op": "radial", "args": [ 9, 13, 42, 0.7 ] } ] }, 3, -2, 1.2 ] }, { "op": "multiply", "args": [ { "op": "wave", "args": [ 0.2, 0.07, 0.13, 1.4899534452078138 ] }, { "op": "radial", "args": [ 18, 10, 50, 1 ] } ] } ] }, 2, 6 ] }, "water": null, "digest": "4860951c48544170bf1b1c295cd47599af984cbe758e847eda339941dcf063a0", "held_out_composition": true, "structure_seed": 6, "design": { "$type": "Blueprint", "rooms": { "$tuple": [ { "$type": "RoomSpec", "x": 0, "z": 0, "level": 0, "purpose": "living" }, { "$type": "RoomSpec", "x": 1, "z": 0, "level": 0, "purpose": "kitchen" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 0, "purpose": "library" }, { "$type": "RoomSpec", "x": 2, "z": 0, "level": 0, "purpose": "workshop" }, { "$type": "RoomSpec", "x": 1, "z": 1, "level": 0, "purpose": "storage" }, { "$type": "RoomSpec", "x": 0, "z": 1, "level": 1, "purpose": "bedroom" } ] }, "bay": 11, "porch": true, "roof_axis": "x", "roof_material": "deepslate_tile", "steep": true, "window_component": null, "light_component": null, "roof_design": { "$type": "RoofDesign", "rise": { "$tuple": [ 1, 2 ] }, "dormer_spacing": 7, "dormer_sides": { "$tuple": [ "left", "right" ] }, "trim": "dark_oak", "end_hips": { "$tuple": [ 2, 2 ] }, "ridge_component": { "$type": "RidgeLantern", "length": 5, "material": "deepslate_tile", "timber": "dark_oak" }, "ridge_required": false, "ridge_min_run": 17 }, "porch_depth": 5, "balcony": false, "chimney": true, "facade_design": { "$type": "FacadeDesign", "height": 3, "sill": 1, "width": 2, "planters": true }, "rail_material": "dark_oak", "attic_purpose": "bedroom", "porch_bays": 3, "interior_design": { "$type": "InteriorDesign", "minimum_stations": 2, "maximum_stations": 5, "table_length": 4, "hearth": true } } }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "eb021fb8bc2b57e8cf65860c4e6540040411b4fe52654c6e2479509a7da7d235", "principal_signature": "ffecc196693d09e48548589b350cf286445eafb9c7253bb0c1bfa27ac558662f", "architecture": [ [ [ "attachment.porch", [ 0, 0, 0 ], { "balcony": false, "depth": 5, "width": 33, "entrance_x": 5, "columns": [ 0, 11, 21, 32 ] } ], [ "masonry.chimney", [ 4, 0, 22 ], { "height": 23, "cap_overhang": 0 } ], [ "roof.dormer", [ 16, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 20, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 23, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 27, 8, 10 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 6, 14, 21 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 0 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.profile", [ 0, 13, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "79ee98aed289bc97683b497e9b23d1e0e6c928b715062ff2c253661e3c8dffcc" ], [ "roof.profile", [ 0, 7, 0 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "13538e194e511568f395e1ac105ac7cab8e6605925c3d5117d19a6b7e3373437" ], [ "roof.profile", [ 11, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "4f6b79a834d2733013a7dcbea8504b9801cf3d79d23ec7bbf6a48eeb8bbfd888" ], [ "room", [ 0, 0, 0 ], "room.living", [ "north", "south", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 0, 11 ], "room.library", [ "north", "east" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 0, 12, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 0, 6, 0 ], "room.loft.bedroom", [ "landing" ], false, "6241faebbf1ebbf7d2a03c9b94287834b0216989b3125d8a79d602ea48faea8e" ], [ "room", [ 0, 6, 11 ], "room.bedroom", [], true, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 11, 0, 0 ], "room.kitchen", [ "south", "west", "east" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 0, 11 ], "room.storage", [ "north", "west" ], true, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ], [ "room", [ 11, 6, 11 ], "room.loft.bedroom", [ "landing" ], false, "6c349085e925e5782445cbefcbd4ceffdb02cc9345a8bfa0f7ea8236aabde86f" ], [ "room", [ 22, 0, 0 ], "room.workshop", [ "west" ], false, "d32081fa33421a8ea84c9b64181c3f6dcc8e44fc78b805693ea2aa0d1d417854" ] ] ], "contact": { "fill": 27, "excavation": 0, "sitework_occupied_cells": 33, "replaced_cells": 3, "new_sitework_cells": 30, "strategies": [ "stepped" ], "signature": "e424e9c4eaf3963e81f868cba2d93584867c40d3dce27da9928045108f6a788f", "bearing_fill": 0 }, "blocks": 54670, "nodes": 268, "candidates": [ { "kind": "candidate-selection", "component": "/building", "attempts": 2, "accepted": 2, "rejected": [], "scores": [ [ 0, 0.39 ], [ 1, 0.79 ] ], "chosen": 0 } ], "optional_omissions": [ { "component": "/building/roof-2/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-0/weather/cover", "dormers": [ [ "left", 4, "existing upper volume" ], [ "left", 11, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-lantern/release/new/pair-15-6.litematic", "audit": { "queries": 238, "inventories": 66, "nodes": 268, "digest": "eb021fb8bc2b57e8cf65860c4e6540040411b4fe52654c6e2479509a7da7d235" }, "seconds": 8.2875, "ridge_lights": { "lanterns": 1, "lengths": [ 5 ], "current_cells": 146, "mounts": [ { "component": "/building/roof-2/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true }, { "component": "/building/roof-0/weather/cover", "selected": [ 5, 9, 15 ], "screened_out": [ { "start": 2, "reason": "ridge end framing" }, { "start": 3, "reason": "ridge end framing" }, { "start": 25, "reason": "ridge end framing" }, { "start": 26, "reason": "ridge end framing" } ], "optional_omission": false }, { "component": "/building/roof-1/weather/cover", "selected": null, "screened_out": [ { "reason": "below declared minimum ridge run", "length": 11 } ], "optional_omission": true } ] } }

08 · 网页实测与上一轮失败输入的复查

模型交付时没有重跑浏览器。 原生 Python 禁用 numpy、MCIO 等导入后的生成检查,不能代替 Pyodide。因此报告另用真实浏览器执行第七轮归档库,生成、保存、读回,再渲染;并与原实验镜像内的 Python 逐项核对。

本报告最终网页检查记录包含 43 次成功的浏览器生成,另有 4 次真实生成失败(不包括故意输入错误的界面测试)。完成 95 项界面与结果检查,页面脚本异常 0 个。43 组成功结果与原 Python 环境逐一核对;失败输入也在原环境复现。实际下载包另行读取并比较完整内容。跨环境一致性与界面检查:通过。这不代表每次生成都成功,下面保留了失败原因。

浏览器检查记录 · 原环境与下载包核对

发布后另在公网执行三次生成,检查原建筑重现、采光亭与老虎窗玻璃归属、阁楼家具、采光井与室内/阁楼/楼梯切面、旧大厅和下载,均通过。公网检查记录。

网页实测入口建筑编号地形编号实际拒绝原因
房屋放到水边或坡地(原试建方式)3810屋面接合位置撞到窗口活动木板
宽门廊住宅(旧失败复查)3410屋面接合位置撞到窗口活动木板
村落(旧失败复查)3480道路必须留空的通行空间被挡住
村落(旧失败复查)3140道路必须留空的通行空间被挡住

这里的“界面与跨环境检查通过”不意味着“所有建筑输入成功”。检查器正确显示错误、关闭旧下载按钮,同时原生环境复现同样的错误,可以说明网页没有把结果搞错;用户依然没有拿到那次要求的建筑。

本轮“换一种场景”轮换 22 个公开示例入口:新增采光住宅和独立地形,保留此前所有住宅、村落、建筑群、大厅、桥廊与围墙。菜单是报告提供的探索入口,不是库必须从 22 个固定家族里选。每个程序再随编号改变实际结构;你也可以直接写新的组合。

自动探索固定随机源,依次运行建筑编号 374–395、地形编号 0,22 次中 21 次成功、1 次失败。这不是任意随机种子的成功率估计。我们另行复查上一轮三个明确失败输入:宽门廊住宅 341/地形 0、村落 348、村落 314。它们不在模型那 236 个最终单栋/地形试建输入里,因此结果单独计数。

复查入口编号本轮结果
宽门廊住宅341仍然失败:屋顶接合碰到另一段屋顶的窗板
完整错误记录
roof-abutment: /building at None: All declared alternatives violate the same condition: roof-abutment: /building/roof-0/weather/cover at (12, 19, 8): Roof may abut actual solid boundaries only; found minecraft:spruce_trapdoor[facing=west,half=bottom,open=true,powered=false,waterlogged=false] owned by /building/roof-3/weather/cover/gable-front/window
村落348仍然失败:路灯挡住道路上方的通行空间
完整错误记录
clearance: /village/connections/paths at (-5, 5, 2): Protected player headroom is obstructed clearance: /village/connections/paths at (-5, 6, 2): Protected player headroom is obstructed
村落314仍然失败:路灯挡住道路上方的通行空间
完整错误记录
clearance: /village/connections/paths at (-5, 5, 40): Protected player headroom is obstructed clearance: /village/connections/paths at (-5, 6, 40): Protected player headroom is obstructed

上一轮,宽门廊 341 是屋顶接合位置碰到另一段山墙窗口的活动木板;村落 348 和 314 则是路灯占用道路需要留空的头顶空间。属于库自带的建筑/村落组合规则缺陷,不是用户那行高层调用写错,也不是浏览器造成。报告不会为展示成功而修库或换种子。本轮原生复查 · 网页失败输入与完整错误。

这次探索还遇到了一个此前没有在网页报告中列出的失败输入:水边住宅 381/地形 0。 两个接地方案都不成立:一个与场地条件不兼容,另一个在屋顶接合处碰到窗口活动木板。后一个属于建筑组合层的问题。报告用相同高层客户端回到第六轮运行,得到完全相同的错误,因此不能称为本轮新引入的退步。它与上面的三个旧输入合计,是本次记录中的四次生成失败。第六轮对照复查。

实际浏览器生成结果保留了 34 份下载 ZIP,其中一份专门检查“切开显示之后,下载仍为完整建筑”。这些文件和 43 次成功请求都与原 Python 环境逐项核对;四个失败输入也要复现同样的错误。

查询与下载有没有保留完整关系

网页可以选中采光亭玻璃,看到“窗 → 墙板 → 采光亭 → 屋顶 → 房屋”的真实链条;也能查询旧的老虎窗、阁楼家具、花箱和天花木梁。预览的采光井切面会对齐原实验切线,切开后下载仍保留完整建筑。

模型对 47 对文件核对了 13,494 个部件节点、12,135 次非空部件方块查询、2,572 个带额外物品数据的方块,以及完整关系、依赖、操作、替换历史和反向查询记录。默认与编号 1 两份 CLI 产物另外核对 1,716 次“部件及其内部子部件包含哪些方块”的查询。

方块比较按方块名和属性含义进行,不能仅因字符串属性顺序不同就声称保存后变了。同一输入换 Python 内部哈希随机设置仍能重现。重放记录 · CLI 保存核对 · 实际采光亭玻璃查询。

外层验收还检查默认启动、显式编号、带空格的输出路径与确定性重放,并再次运行交付测试。模型自测、外层验收、报告独立重跑用的是同一套 328 项测试,不能把次数相加当作更多新测试。

统一验收结果秒
不传参数,直接生成默认村落通过20.199
编号 0,保存到含空格的相对路径通过18.976
编号 0,换内部哈希设置并使用绝对路径通过19.504
编号 1,生成另一份村落通过10.659
外层验收再次运行交付的 328 项测试通过371.586

09 · 我的判断:接口更扎实,美观还需继续

这一轮最值得保留的是可安装部件的尺寸交流与有限修改权限。采光亭是真正由窗、墙、屋顶与开口组成的嵌套部件;安装、查询、拆除和保存一起工作。这比只加一张漂亮正面图更接近最初“高层只看接口、底层自行变化”的方向。

但新接口仍然有明确边界:五格宽的主体、三种长度、一段屋顶一个附件,房间继续以 9/11/13 格、规整楼层和直角方向为主。它展示了一个可复用的安装模式,尚未证明任意屋顶部件、任意形状都能自动适配。

外观上,采光亭与较低老虎窗组合,确实让长屋顶更有层次;剖面也能看见真实开口。不过大面积重复的窗格、粗木梁和稀疏室内仍然明显,庭院多是规则地块和简单植被。与参考图相比,建筑体量、屋檐层次、台地和植被过渡还有明显差距。

本轮底层修复也说明:接口设计合理,不代表实现没有 bug。模型没有发现需要触发停工重设计的严重架构缺陷,现有替换历史足以修复拆除问题;但这不是所有未来组合都能正确恢复的证明。

接地策略与困难地形成绩没有进步,采光井也不是完整游戏光照模拟。评价应分开看:共享部件和接口能力前进了,有限样本验证更完整了,普遍合法性与审美目标仍未完成。

10 · 模型最后一条总结原文与翻译

以下来自保存会话的最后一条 final_answer,已经与任务完成事件中的文本核对一致。保留原文,没有用报告作者的总结替换。/work/... 是实验容器内路径,对应资料可通过本文链接下载。

Improved the buildings with reusable glazed ridge lanterns, real lightwells into furnished lofts, and better coexistence with neighboring dormers. Added public mounting contracts and fixed a nested-removal bug while preserving provenance and atomic rollback. Verified: - **328 tests passed**, including every previous test. - **220/220 supported inputs validated**. - Stress: **5 successes, 11 reported incompatibilities**. - **42 exterior/cutaway views inspected** and **47 schematic pairs verified**. - Default CLI, deterministic replay and semantic reload passed. Updated [schematic](/work/generator/workspace/output.litematic) and [structural companion](/work/generator/workspace/output.litematic.structure.json). See the [building preview](/work/generator/workspace/previews/building-lantern/release/lantern-house-2/front.png) and [assessment](/work/generator/workspace/reports/building-lantern/ASSESSMENT.md). No serious architectural flaw was found. Reference-level quality remains unfinished: regular room bays, heavy framing, sparse interiors and simple landscapes are still visible. Browser execution was not rerun.

中文翻译(与原文分开)

通过可复用的玻璃屋脊采光亭、真正连到带家具阁楼的采光井,以及与邻近老虎窗更合理的共存方式,改进了建筑。新增公开安装约定,并修复嵌套拆除错误,同时保留归属记录与失败时整体撤回的能力。

已验证:

已更新建筑文件和结构配套记录。可以查看建筑预览和评估报告(对应原文四个链接)。

没有发现严重架构缺陷。参考图级别的质量仍未完成:规整的房间单元、厚重框架、稀疏室内和简单地景仍然可见。本轮没有重跑浏览器执行。

最后消息原始文本 · 来源、时间与摘要记录。原文描述模型结束时的情况,本报告随后独立补做的网页测试另列在上一节。

11 · 原提示词、代码与复现证据

第七轮继续同一保存会话,使用原镜像、proc 工具集、gpt-6-astra 模型、max 推理强度和 kokemeow 账号,在原 tmux 实验窗口运行。没有重写第一次的完整任务。本轮新增消息逐字如下:

continue improve it

第一轮完整任务 · 第三轮追加的单栋建筑要求 · 本轮新增消息 · 模型原始评估 · 模型原始视觉评估。

从开始到完整收尾为 63.46 分钟。以下只统计本轮新增用量;缓存输入包含在输入总量中,推理输出包含在输出总量中,不要重复相加。

本轮新增用量数值
模型请求72
输入 Token(含缓存)9,821,240
其中缓存输入9,094,016
输出 Token(含推理)89,278
其中推理输出34,668
输入与输出合计9,910,518
命令记录114
命令非零退出码5

下载库、客户端与测试源码 · 默认五栋村落及部件记录 · 运行说明 · 架构说明 · 原参考路径与摘要。

网页执行的是未修改的第七轮归档库。报告自己的代码仅提供界面传参、公开客户端调用、保存核对、部件查询和显示,没有为了通过网页检查而修补库源码。原实验、前六份报告与参考资料保留。

Python 文件目录(107 个,共 10534 行,可排序)
源码行数
generate.py21
hearth/space.py109
hearth/blocks.py100
hearth/randomness.py21
hearth/__init__.py8
hearth/persistence.py194
hearth/composition.py61
hearth/programs.py187
hearth/assessment.py163
hearth/lodges.py56
hearth/quality_assessment.py177
hearth/validators.py80
hearth/navigation.py44
hearth/kernel/contracts.py150
hearth/kernel/errors.py32
hearth/kernel/view.py166
hearth/kernel/validation.py220
hearth/kernel/scene.py545
hearth/kernel/__init__.py5
hearth/environment/fields.py79
hearth/environment/terrain.py42
hearth/environment/__init__.py3
hearth/components/primitives.py209
hearth/components/__init__.py13
hearth/components/interior.py235
hearth/components/roofs.py182
hearth/components/building.py263
hearth/components/constraints.py19
hearth/components/landscape.py261
hearth/components/roofshape.py51
hearth/components/hospitality.py88
hearth/components/roomlayout.py115
hearth/components/roofcraft.py359
hearth/components/joinery.py39
hearth/components/furnishing.py131
hearth/components/masonry.py36
hearth/components/grounds.py108
hearth/components/rooflantern.py138
hearth/components/lofts.py311
hearth/components/circulation.py37
hearth/components/facades.py45
hearth/components/domestic.py67
hearth/components/borders.py99
hearth/components/windowbox.py46
hearth/components/ceiling.py42
hearth/adapters/site.py137
hearth/adapters/__init__.py2
hearth/adapters/bearing.py29
hearth_extensions/interiors.py116
hearth_extensions/geometry.py133
hearth_extensions/interfaces.py38
hearth_extensions/__init__.py8
hearth_extensions/circulation.py227
hearth_extensions/boundaries.py125
hearth_extensions/sites.py38
hearth_extensions/halls.py211
hearth_extensions/graphs.py99
hearth_extensions/programs.py60
hearth_extensions/assessment.py208
extension_demo/__init__.py38
examples/courtyard.py25
examples/inspection.py28
examples/prototype.py33
examples/assess.py13
examples/gallery.py25
examples/building.py13
examples/extension.py27
examples/extension_audit.py94
examples/extension_generate.py23
examples/extension_views.py63
examples/extension_assess.py14
examples/extension_inspection.py34
examples/extension_replay.py49
examples/lantern_house.py31
examples/hearth_house.py27
examples/lodge.py16
examples/building_quality.py13
examples/building_views.py60
examples/lodge_inspection.py29
examples/building_lantern.py86
examples/building_holdout.py57
examples/building_craft.py81
examples/roof_home.py28
examples/garden_house.py33
examples/building_detail.py94
examples/verify_replay.py35
examples/__init__.py1
examples/preview.py62
examples/building_space.py103
examples/ridge_inspection.py32
examples/lantern_report.py110
examples/lantern_regression.py27
examples/portable_lantern.py43
test/conftest.py13
test/test_kernel.py122
test/test_contracts_provenance.py279
test/test_geometry_environment.py243
test/test_extension_protocol.py93
test/test_extension_geometry.py128
test/test_extension_failures.py149
test/test_extension_interiors.py70
test/test_building_craft.py199
test/test_building_space.py310
test/test_building_detail.py221
test/test_building_quality.py235
test/test_roof_lantern.py180
test/test_nested_restoration.py57
逐文件查看全部 Python 源码
generate.py
# Generate, validate and export the default complete Hearth settlement. import argparse from pathlib import Path from hearth.programs import settlement_scene from hearth.persistence import export_scene, semantic_digest def main(): parser = argparse.ArgumentParser(description='Generate a contract-composed Minecraft Java 1.21.1 settlement.') parser.add_argument('--seed', type=int, default=0, help='Explicit integer seed, default 0') parser.add_argument('--output', type=Path, default=Path('output.litematic')) parser.add_argument('--count', type=int, choices=range(3, 7), help='Optional explicit building count, 3 through 6') args = parser.parse_args() scene = settlement_scene(args.seed, args.count) export_scene(scene, args.output) print(f'Validated {sum(n.type=="building.rooms" for n in scene.nodes.values())} buildings, {len(scene.blocks)} blocks, {len(scene.nodes)} components.') print(f'{args.output} | semantic SHA256 {semantic_digest(scene)}') if __name__ == '__main__': main()
hearth/space.py
# Integer geometry and explicit local-to-world transforms. from dataclasses import dataclass from itertools import product from typing import Iterable Pos = tuple[int, int, int] @dataclass(frozen=True) class Box: lo: Pos hi: Pos def __post_init__(self): object.__setattr__(self, 'lo', tuple(self.lo)) object.__setattr__(self, 'hi', tuple(self.hi)) if any(not isinstance(v, int) for v in (*self.lo, *self.hi)): raise TypeError('Box coordinates must be integers') if any(a > b for a, b in zip(self.lo, self.hi)): raise ValueError('Inverted box') def contains(self, p: Pos) -> bool: return all(a <= v <= b for a, v, b in zip(self.lo, p, self.hi)) def cells(self) -> Iterable[Pos]: return product(*(range(a, b + 1) for a, b in zip(self.lo, self.hi))) def corners(self): return product(*zip(self.lo, self.hi)) def intersection(self, other): low = tuple(max(a, b) for a, b in zip(self.lo, other.lo)) high = tuple(min(a, b) for a, b in zip(self.hi, other.hi)) return None if any(a > b for a, b in zip(low, high)) else Box(low, high) def expand(self, n: int): return Box(tuple(v - n for v in self.lo), tuple(v + n for v in self.hi)) @property def size(self): return tuple(b - a + 1 for a, b in zip(self.lo, self.hi)) @property def volume(self): x, y, z = self.size return x * y * z @classmethod def enclosing(cls, points): points = list(points) if not points: raise ValueError('No realized geometry') return cls(tuple(min(p[i] for p in points) for i in range(3)), tuple(max(p[i] for p in points) for i in range(3))) @dataclass(frozen=True) class Frame: origin: Pos = (0, 0, 0) turn: int = 0 def __post_init__(self): object.__setattr__(self, 'origin', tuple(self.origin)) if not isinstance(self.turn, int) or any(not isinstance(v, int) for v in self.origin): raise TypeError('Frames use integer coordinates and quarter turns') object.__setattr__(self, 'turn', self.turn % 4) def vector(self, p: Pos) -> Pos: x, y, z = p for _ in range(self.turn % 4): x, z = -z, x return x, y, z def point(self, p: Pos) -> Pos: return tuple(a + b for a, b in zip(self.origin, self.vector(p))) def inverse(self, p: Pos) -> Pos: return Frame(turn=-self.turn).vector(tuple(a - b for a, b in zip(p, self.origin))) def box(self, box: Box) -> Box: return Box.enclosing(self.point(p) for p in box.corners()) def compose(self, other): return Frame(self.point(other.origin), (self.turn + other.turn) % 4) def state(self, state: str) -> str: from .blocks import parse, state_of name, props = parse(state) dirs = ['north', 'east', 'south', 'west'] rotated = {} for key, value in props.items(): if key in dirs: key = dirs[(dirs.index(key) + self.turn) % 4] if key == 'facing' and value in dirs: value = dirs[(dirs.index(value) + self.turn) % 4] if key in ('shape', 'orientation') and any(v in dirs for v in value.split('_')): from .blocks import SCHEMA tokens = [dirs[(dirs.index(v) + self.turn) % 4] if v in dirs else v for v in value.split('_')] value = '_'.join(tokens) allowed = SCHEMA[name.removeprefix('minecraft:')][0][key] if value not in allowed: matches = [candidate for candidate in allowed if sorted(candidate.split('_')) == sorted(tokens)] if matches: value = sorted(matches)[0] if key == 'axis' and value in ('x', 'z') and self.turn % 2: value = 'z' if value == 'x' else 'x' if key == 'rotation': value = str((int(value) + 4 * self.turn) % 16) rotated[key] = value return state_of(name, **rotated)
hearth/blocks.py
# Canonical blockstates and a deliberately conservative physical model. import json import re from functools import lru_cache from pathlib import Path SCHEMA = json.loads((Path(__file__).parent / 'data' / 'blockstates-1.21.1.json').read_text()) AIR = 'minecraft:air' LIGHTS = {'lantern': 15, 'torch': 14, 'wall_torch': 14, 'glowstone': 15, 'sea_lantern': 15, 'shroomlight': 15, 'ochre_froglight': 15, 'pearlescent_froglight': 15, 'verdant_froglight': 15, 'campfire': 15} def emitted_light(state): """Return modeled block emission, honoring explicit on/off state.""" name, properties = parse(state) short = name.removeprefix('minecraft:') if short == 'campfire': return 15 if properties.get('lit') == 'true' else 0 return LIGHTS.get(short, 0) SOFT = {'air', 'cave_air', 'water', 'short_grass', 'fern', 'dead_bush', 'dandelion', 'poppy', 'cornflower', 'allium', 'azure_bluet', 'oxeye_daisy', 'lily_of_the_valley', 'blue_orchid', 'torch', 'wall_torch', 'vine', 'snow', 'lily_pad', 'tall_grass', 'large_fern', 'sunflower', 'rose_bush', 'peony', 'lilac', 'wheat', 'carrots', 'potatoes'} @lru_cache(maxsize=4096) def _parse_cached(state: str): match = re.fullmatch(r'(minecraft:[a-z0-9_]+)(?:\[([^\]]+)\])?', state) if not match: raise ValueError(f'Invalid blockstate syntax: {state}') props = {} if match[2]: for part in match[2].split(','): key, value = part.split('=') if key in props: raise ValueError('Duplicate block property') props[key] = value return match[1], props def parse(state: str): """Return an independent property mapping; callers cannot mutate the parse cache.""" name, properties = _parse_cached(state) return name, properties.copy() def state_of(name: str, **properties) -> str: if not name.startswith('minecraft:'): name = 'minecraft:' + name return name + ('[' + ','.join(f'{k}={str(v).lower()}' for k, v in sorted(properties.items())) + ']' if properties else '') def canonical(state: str) -> str: name, props = parse(state) return state_of(name, **props) def blockstates_equivalent(left: str, right: str) -> bool: return parse(left) == parse(right) @lru_cache(maxsize=4096) def validate_state(state: str): name, props = parse(state) short = name.removeprefix('minecraft:') if short not in SCHEMA: raise ValueError(f'Unknown Java 1.21.1 block: {name}') domain = SCHEMA[short][0] for key, value in props.items(): if key not in domain or value not in domain[key]: raise ValueError(f'Invalid property {key}={value} for {name}') @lru_cache(maxsize=4096) def name_of(state: str) -> str: return parse(state)[0].removeprefix('minecraft:') def solid(state: str) -> bool: name = name_of(state) return name not in SOFT and not any(s in name for s in ('leaves', 'fence', 'pane', 'door', 'lantern', 'chain', 'flower_pot', 'potted_', 'carpet', 'bed', 'button')) def passable(state: str) -> bool: name = name_of(state) return name in SOFT - {'water'} or name.endswith('_door') or name.endswith('_carpet') def stairs(material='stone_brick', facing='north', half='bottom'): return state_of(material + '_stairs', facing=facing, half=half, shape='straight', waterlogged='false') def slab(material='stone_brick', half='bottom'): return state_of(material + '_slab', type=half, waterlogged='false') def log(material='spruce', axis='y'): return state_of(material + '_log', axis=axis) def leaves(material='spruce'): return state_of(material + '_leaves', distance='1', persistent='true', waterlogged='false')
hearth/randomness.py
# Stateless hierarchical scopes, with explicitly local random streams. import hashlib import json import random from dataclasses import dataclass @dataclass(frozen=True) class Scope: seed: int key: tuple[str, ...] = () def child(self, key: str, override: int | None = None): return Scope(self.seed, self.key + (key,)) if override is None else Scope(override, (key,)) def stream(self, purpose: str = 'plan') -> random.Random: payload = json.dumps([self.seed, self.key, purpose], separators=(',', ':')).encode() return random.Random(int.from_bytes(hashlib.sha256(payload).digest(), 'big')) def choose(self, values, purpose='plan'): return self.stream(purpose).choice(tuple(values))
hearth/__init__.py
# Hearth public library entry points. from .kernel import Binding, Child, ContractError, Limits, Scene from .space import Box, Frame __version__ = '1.7.0' # Register standard optional geometric validators outside the general kernel. from . import validators
hearth/persistence.py
# One-region Litematica transport paired with verified structural records. import hashlib import json import sys from dataclasses import fields, is_dataclass from pathlib import Path from . import __version__ from .blocks import canonical, AIR from .space import Box, Frame from .randomness import Scope from .kernel import contracts from .kernel.scene import Scene, Node, Cell, Limits from .kernel.errors import ContractError FORMAT_VERSION = 1 TYPES = {c.__name__: c for c in (Box, Frame, Scope, Node, Cell, Limits, contracts.Contract, contracts.Rule, contracts.Port, contracts.Grant, contracts.Binding, contracts.Capability, contracts.Domain)} def encode(value): if is_dataclass(value): return {'$type': type(value).__name__, **{f.name: encode(getattr(value, f.name)) for f in fields(value)}} if isinstance(value, tuple): return {'$tuple': [encode(v) for v in value]} if isinstance(value, set): return {'$set': [encode(v) for v in sorted(value)]} if isinstance(value, dict): return {k: encode(v) for k, v in value.items()} if isinstance(value, list): return [encode(v) for v in value] return value def decode(value): if isinstance(value, list): return [decode(v) for v in value] if isinstance(value, dict): if '$tuple' in value: return tuple(decode(v) for v in value['$tuple']) if '$set' in value: return set(decode(v) for v in value['$set']) if '$type' in value: return TYPES[value['$type']](**{k: decode(v) for k, v in value.items() if k != '$type'}) return {k: decode(v) for k, v in value.items()} return value def semantic_digest(scene): digest = hashlib.sha256() for p, c in sorted(scene.blocks.items()): digest.update(json.dumps([p, canonical(c.state), c.nbt], sort_keys=True, separators=(',', ':')).encode()) return digest.hexdigest() def companion_path(path: Path): return path.with_suffix(path.suffix + '.structure.json') def _mcio(): try: import mcio except ImportError: sys.path.insert(0, '/work/generator/MCIO') from mcio.sketch import LitematicCanvas from mcio.schematic import load_schematic from mcio.nbt import tag from mcio.nbt.nbt import File return LitematicCanvas, load_schematic, tag, File def _to_nbt(value, tag, key=''): if isinstance(value, dict): return tag.Compound({k: _to_nbt(v, tag, k) for k, v in value.items()}) if isinstance(value, list): if not value: return tag.List[tag.Compound]([]) items = [_to_nbt(v, tag) for v in value] return tag.List[type(items[0])](items) if isinstance(value, str): return tag.String(value) if isinstance(value, int): return tag.Byte(value) if key == 'Slot' else tag.Int(value) raise TypeError(type(value)) def _plain(value): if isinstance(value, dict): return {str(k): _plain(v) for k, v in value.items()} if isinstance(value, (list, tuple)): return [_plain(v) for v in value] if isinstance(value, str): return str(value) return int(value) def export_scene(scene, path: Path, verify=True): path = Path(path) scene.finalize() bounds = Box.enclosing(scene.blocks) if max(bounds.size) > scene.limits.dimension: raise ContractError('export-bounds', conditions=str(bounds)) if bounds.volume > scene.limits.export_volume: raise ContractError('export-volume', conditions=f'{bounds.volume} > {scene.limits.export_volume}') canvas_type, _, tag, nbtfile = _mcio() sx, sy, sz = bounds.size canvas = canvas_type((sy, sz, sx)) offset = bounds.lo block_entities = [] for p, cell in sorted(scene.blocks.items()): x, y, z = tuple(v - o for v, o in zip(p, offset)) canvas.block((y, z, x), cell.state) if cell.nbt is not None: block_entities.append(_to_nbt({**cell.nbt, 'x': x, 'y': y, 'z': z}, tag)) schematic = canvas.to_litematica(name='Hearth', author='Hearth procedural library', description='Contract-composed settlement; structural identity in companion JSON', minecraft_data_version=3955) nbt = schematic.write_to_nbt() nbt['Regions']['Hearth']['TileEntities'] = tag.List[tag.Compound](block_entities) nbt['Regions']['Hearth']['Entities'] = tag.List[tag.Compound]([]) path.parent.mkdir(parents=True, exist_ok=True) temporary = path.with_suffix(path.suffix + '.tmp') nbtfile(nbt).save(temporary) owners = sorted(scene.nodes) operations = sorted(scene.operations) owner_id, op_id = {v: i for i, v in enumerate(owners)}, {v: i for i, v in enumerate(operations)} data = {'format': 'hearth.structure', 'version': FORMAT_VERSION, 'implementation': __version__, 'minecraft_data_version': 3955, 'digest': semantic_digest(scene), 'offset': offset, 'size': bounds.size, 'seed': scene.seed, 'style': scene.style, 'preferences': {k: v.expression() for k, v in scene.preferences.items()}, 'domain': encode(scene.domain), 'limits': encode(scene.limits), 'scene_version': scene.version, 'nodes': encode(scene.nodes), 'relations': encode(scene.relations), 'dependencies': encode(scene.dependencies), 'operations': encode(scene.operations), 'erasures': [[list(p), owner] for p, owner in sorted(scene.erasures.items())], 'displaced': {k: [[list(p), encode(c)] for p, c in sorted(v.items())] for k, v in scene.displaced.items()}, 'events': encode(scene.events), 'port_uses': [[*k, v] for k, v in sorted(scene.port_uses.items())], 'owners': owners, 'operation_ids': operations, 'cells': [[*p, owner_id[c.owner], op_id[c.operation], list(c.shared)] for p, c in sorted(scene.blocks.items())]} target = companion_path(path) temporary_meta = target.with_suffix('.json.tmp') temporary_meta.write_text(json.dumps(data, sort_keys=True, separators=(',', ':'))) temporary.replace(path) temporary_meta.replace(target) if verify: restored = load_scene(path) if semantic_digest(restored) != semantic_digest(scene): raise ContractError('roundtrip', conditions='Semantic geometry differs') return path def load_scene(path: Path): path = Path(path) meta = companion_path(path) if not meta.exists(): raise ContractError('untrusted-structure', conditions='Missing companion; geometry cannot reconstruct semantic identity') data = json.loads(meta.read_text()) if data.get('format') != 'hearth.structure' or data.get('version') != FORMAT_VERSION: raise ContractError('untrusted-structure', conditions='Unknown companion format/version') _, load, _, nbtfile = _mcio() loaded = load(path) nbt = nbtfile.load_regardless_of_gzipped(filename=path) regions = nbt['Regions'] if len(regions) != 1 or int(nbt['MinecraftDataVersion']) != 3955: raise ContractError('transport', conditions='Require one Java 1.21.1 region') region = next(iter(regions.values())) if list(loaded.size_yzx) != [data['size'][1], data['size'][2], data['size'][0]]: raise ContractError('geometry-mismatch', conditions='Export dimensions changed') if region['Entities']: raise ContractError('geometry-mismatch', conditions='Unexpected entities') inventories = {} for entry in region['TileEntities']: item = _plain(entry) p = tuple(item.pop(k) + data['offset'][i] for i, k in enumerate(('x', 'y', 'z'))) inventories[p] = item from .environment.fields import from_expression scene = Scene(data['seed'], decode(data['limits']), decode(data['domain']), data.get('style'), {k: from_expression(v) for k, v in data.get('preferences', {}).items()}) scene.nodes = decode(data['nodes']) scene.relations = decode(data['relations']) for child, kind, parent in scene.relations: if kind in ('contained_by', 'attached_to'): scene.members.setdefault(parent, set()).add(child) scene.dependencies = decode(data['dependencies']) scene.operations = decode(data['operations']) scene.erasures = {tuple(p): owner for p, owner in data.get('erasures', [])} scene.events = decode(data['events']) scene.displaced = {k: {tuple(p): decode(c) for p, c in v} for k, v in data.get('displaced', {}).items()} scene.version = data['scene_version'] scene.port_uses = {(a, b): n for a, b, n in data['port_uses']} ownership = {tuple(row[:3]): row[3:] for row in data['cells']} scene.reverse = {k: set() for k in scene.nodes} ids = loaded.read_flat(0, loaded.volume).reshape(loaded.size_yzx) import numpy as np for y, z, x in np.argwhere(ids != 0): block = canonical(loaded.palette[int(ids[y, z, x])]) if block == AIR: continue p = tuple(int(v) + o for v, o in zip((x, y, z), data['offset'])) if p not in ownership: raise ContractError('geometry-mismatch', position=p, conditions='Unrecorded block') owner, op, shared = ownership[p] owner = data['owners'][owner] scene.blocks[p] = Cell(block, owner, data['operation_ids'][op], inventories.get(p), tuple(shared)) scene.reverse[owner].add(p) for participant in shared: scene.reverse_shared.setdefault(participant, set()).add(p) if set(ownership) != set(scene.blocks) or set(inventories) - set(scene.blocks) or semantic_digest(scene) != data['digest']: raise ContractError('geometry-mismatch', conditions='Schematic and structural companion are not a matching semantic pair') scene.finalize() return scene
hearth/composition.py
# High-level selection, arrangement, repetition, scattering and encapsulation. from dataclasses import dataclass from hearth.kernel import Capability, Contract, Plan, Child, ContractError, Rule from hearth.space import Box, Frame @dataclass(frozen=True) class Network: name: str envelope: Box recipe: object tags: tuple = ('composite',) rules: tuple[Rule, ...] = () def capability(self): return Capability(self.name, self.tags) def negotiate(self, ctx, parameters): return Contract(self.envelope, rules=self.rules) def realize(self, ctx, contract): return self.recipe(ctx) def encapsulate(name, envelope, recipe, tags=('composite',), rules=()): return Network(name, envelope, recipe, tags, rules) def attach(key, component, host, port, frame, verb='install', region=None): from hearth.kernel import Binding return Child(key, component, frame=frame, bindings=(Binding(host, port, verb, region),)) def arrange(components, origins, prefix='item'): components, origins = tuple(components), tuple(origins) if len(components) != len(origins): raise ValueError('One placement per component is required') return tuple(Child(f'{prefix}-{i}', c, frame=Frame(tuple(p))) for i, (c, p) in enumerate(zip(components, origins))) def repeat(component, origins, prefix='repeat'): return arrange([component for _ in origins], origins, prefix) def scatter(ctx, candidates, predicate, minimum, maximum, purpose='scatter'): candidates = sorted(set(candidates)) ctx.rng(purpose).shuffle(candidates) accepted = [] for p in candidates: if predicate(p, accepted): accepted.append(p) if len(accepted) >= maximum: break if len(accepted) < minimum: raise ContractError('scatter-minimum', ctx.path, conditions=f'Accepted {len(accepted)}, required {minimum}; finite candidate set exhausted') return tuple(accepted) def constrain(condition, rule, context, position=None, reason=''): if not condition: raise ContractError(rule, context.path, position, reason)
hearth/programs.py
# Lightweight high-level room-graph programs and settlement intent. from hearth import Scene, Box, Frame from hearth.randomness import Scope from hearth.kernel import Capability, Contract, Plan, Child, Binding, Rule, Port from hearth.environment import Terrain, gradient, wave, radial from hearth.components.building import Blueprint, Building, RoomSpec, adapted from hearth.components.landscape import PathNetwork, Landscape, LampPost, Terrace from hearth.components.primitives import Window from hearth.components.roofcraft import RoofDesign from hearth.components.rooflantern import RidgeLantern from hearth.components.roomlayout import InteriorDesign from hearth.components.facades import FacadeDesign from hearth.composition import encapsulate def dwelling(seed): rng = Scope(seed).child('dwelling').stream('layout') rooms = [RoomSpec(0, 0, 0, 'living'), RoomSpec(0, 0, 1, 'bedroom')] if rng.choice((True, False)): rooms.append(RoomSpec(0, 1, 0, 'kitchen')) if rng.choice((True, False)): rooms.append(RoomSpec(1, 0, 0, 'library')) return Blueprint(tuple(rooms), bay=rng.choice((9, 11)), porch=True, roof_axis='auto', steep=True) def atelier(seed): rng = Scope(seed).child('atelier').stream('layout') rooms = [RoomSpec(0, 0, 0, 'workshop'), RoomSpec(1, 0, 0, 'storage')] if rng.choice((True, False)): rooms.append(RoomSpec(1, 0, 1, 'bedroom')) if rng.choice((True, False)): rooms.append(RoomSpec(0, 1, 0, 'kitchen')) return Blueprint(tuple(rooms), bay=rng.choice((9, 11)), porch=rng.choice((True, False)), roof_axis='x', roof_material='brick', steep=rng.choice((True, False)), window_component=Window(shutters=False)) def commons(seed): rng = Scope(seed).child('commons').stream('layout') rooms = [RoomSpec(0, 0, 0, 'library'), RoomSpec(0, 1, 0, 'living'), RoomSpec(1, 1, 0, 'kitchen')] for level in range(1, rng.choice((2, 3))): rooms.append(RoomSpec(0, 1, level, 'bedroom' if level == 1 else 'library')) if rng.choice((True, False)): rooms.append(RoomSpec(1, 0, 0, 'storage')) return Blueprint(tuple(rooms), bay=rng.choice((9, 11)), porch=True, roof_axis='z') PROGRAMS = {'dwelling': dwelling, 'atelier': atelier, 'commons': commons} def building_scene(design, seed=0, field=None, water=None): design.validate() b = design.bay width = (max(r.x for r in design.rooms) + 1) * b depth = (max(r.z for r in design.rooms) + 1) * b domain = Box((-8, -4, -18), (width + 8, 64, depth + 8)) scene = Scene(seed, domain=domain) expression = field if field is not None else gradient(base=4) + wave(.8, .1, .11, Scope(seed).stream('environment').random() * 6) scene.place('land', Terrain(domain, expression, water)) # Encapsulation preserves the public building instance as the selected child. choice = adapted('building', design, '/land') scene.compose_choice(choice) return scene.finalize() class Settlement: def __init__(self, designs, domain, terrain): self.designs = tuple(designs) self.domain = domain self.terrain = terrain def capability(self): return Capability('settlement.village', ('settlement', 'composite'), offers=('public-access',), guarantees=('building entrances connected',)) def negotiate(self, ctx, parameters): gateway = (0, ctx.elevation(0, -12) + 1, -12) interface = Box((-1, gateway[1] - 1, -12), (1, gateway[1] + 1, -12)) port = Port('public', 'public-access', Frame(gateway), interface, 10000, delegate=('connections', 'public')) return Contract(self.domain, ports=(port,), decisions={'buildings': len(self.designs), 'arrangement': 'opposed street with staggered frontage', 'circulation': ctx.scope.choose(('spine', 'loop'), 'circulation'), 'gateway': gateway}) def realize(self, ctx, contract): p = Plan() for i, design in enumerate(self.designs): row = i // 2 left = i % 2 == 0 z = row * 38 + ctx.scope.child(f'plot-{i}').choose((-2, 0, 2), 'frontage') origin = (-16, 0, z - design.bay // 2) if left else (16, 0, z + design.bay // 2) p.children.append(adapted(f'plot-{i}', design, self.terrain, Frame(origin, 1 if left else 3))) p.children.append(Child('square', Terrace(), frame=Frame((5, 0, 10)), bindings=(Binding(self.terrain, 'construction', 'fill'),))) p.children.append(Child('connections', SettlementConnections(len(self.designs), self.domain, self.terrain, contract.decisions['circulation'], contract.decisions['gateway']))) p.children.append(Child('landscape', Landscape(self.domain, self.terrain, 8, 12, 0.045))) return p class SettlementConnections: def __init__(self, count, domain, terrain, mode='spine', gateway=None): self.count = count self.domain = domain self.terrain = terrain self.mode = mode self.gateway = gateway def capability(self): return Capability('settlement.connections', ('connection', 'composite')) def negotiate(self, ctx, parameters): parent = ctx.path.rsplit('/', 1)[0] targets = tuple(ctx.local(ctx.view.port(f'{parent}/plot-{i}', 'street').frame.origin) for i in range(self.count)) targets = targets + (ctx.local(ctx.view.port(parent + '/square', 'entrance').frame.origin), self.gateway) interface = Box((self.gateway[0] - 1, self.gateway[1] - 1, self.gateway[2]), (self.gateway[0] + 1, self.gateway[1] + 1, self.gateway[2])) port = Port('public', 'public-access', Frame(self.gateway), interface, 10000, delegate=('paths', 'public')) return Contract(self.domain, ports=(port,), rules=(Rule('route', targets, self.domain, phase='complete'),)) def realize(self, ctx, contract): parent = ctx.path.rsplit('/', 1)[0] points = [] links = [] bindings = [Binding(self.terrain, 'construction', 'surface')] for i in range(self.count): host = f'{parent}/plot-{i}' port = ctx.view.port(host, 'street') x, y, z = ctx.local(port.frame.origin) lane = (-3 if x < 0 else 3) if self.mode == 'loop' else 0 points.extend(((x, y, z), (lane, ctx.elevation(lane, z) + 1, z))) links.append((2 * i, 2 * i + 1)) bindings.append(Binding(host, 'street', 'surface')) if i and self.mode == 'spine': links.append((2 * i - 1, 2 * i + 1)) if self.mode == 'loop': low = min(q[2] for q in points) high = max(q[2] for q in points) base = len(points) for x, z in ((-3, low), (-3, high), (3, high), (3, low)): points.append((x, ctx.elevation(x, z) + 1, z)) links.extend((base + i, base + (i + 1) % 4) for i in range(4)) square = ctx.local(ctx.view.port(parent + '/square', 'entrance').frame.origin) lane = 3 if self.mode == 'loop' else 0 points.extend((square, (lane, ctx.elevation(lane, square[2]) + 1, square[2]))) links.append((len(points) - 2, len(points) - 1)) if self.mode == 'spine': links.append((1, len(points) - 1)) points.append(self.gateway) links.append((1, len(points) - 1)) bindings.append(Binding(parent + '/square', 'entrance', 'surface')) p = Plan(children=[Child('paths', PathNetwork(tuple(points), tuple(links), gateway=self.gateway), bindings=tuple(bindings))]) for i in range(self.count): p.relations.append((ctx.path + '/paths', 'connects', f'{parent}/plot-{i}')) for i, z in enumerate(sorted({q[-1] for q in points[:self.count * 2]})): x = 5 if i % 2 else -5 y = ctx.elevation(x, z + 4) + 1 p.children.append(Child(f'lamp-{i}', LampPost(), frame=Frame((x, y, z + 4)))) return p def settlement_scene(seed=0, count=None): scope = Scope(seed) rng = scope.stream('settlement-layout') if count is None: count = rng.choice((3, 4, 5)) if count < 1: raise ValueError('A settlement needs at least one building') designs = [] for i in range(count): local = scope.child(f'building-{i}').stream('room-graph') rooms = [RoomSpec(0, 0, 0, local.choice(('living', 'workshop', 'library')))] for x, z in local.sample(((1, 0), (0, 1)), local.choice((0, 1, 2))): rooms.append(RoomSpec(x, z, 0, local.choice(('storage', 'kitchen', 'living')))) if local.choice((True, True, False)): column = local.choice(rooms) for level in range(1, local.choice((2, 2, 3))): rooms.append(RoomSpec(column.x, column.z, level, 'bedroom' if level == 1 else 'library')) bay = local.choice((9, 11)) porch = local.choice((True, True, False)) axis = local.choice(('auto', 'x', 'z')) material = local.choice(('deepslate_tile', 'brick')) steep = local.choice((True, True, False)) features = scope.child(f'building-{i}').stream('architectural-features') roof = RoofDesign(features.choice(((1, 2), (2, 1), (1, 1, 2))), features.choice((8, 10)), end_hips=scope.child(f'building-{i}').choose(((0, 0), (0, 2), (2, 2)), 'roof-ends'), ridge_component=RidgeLantern(material=material), ridge_min_run=17) if steep else None balcony = porch and any((r.x, r.z, r.level) == (0, 0, 1) for r in rooms) and features.choice((True, False)) designs.append(Blueprint(tuple(rooms), bay=bay, porch=porch, roof_axis=axis, roof_material=material, steep=steep, roof_design=roof, porch_depth=features.choice((3, 4)), balcony=balcony, chimney=features.choice((True, False)), facade_design=FacadeDesign(), rail_material='dark_oak', attic_purpose=scope.child(f'building-{i}').choose((None, 'bedroom'), 'roof-purpose') if roof else None, interior_design=InteriorDesign())) rows = (count + 1) // 2 domain = Box((-49, -4, -23), (49, 64, (rows - 1) * 38 + 28)) field = gradient(.012, -.009, 4.8) + wave(.7, .075, .09, rng.random() * 6) + radial(-36, rows * 12, 26, 1.1) scene = Scene(seed, domain=domain) scene.place('land', Terrain(domain, field, edit_limit=20000)) scene.place('village', Settlement(designs, domain, '/land')) return scene.finalize()
hearth/assessment.py
# Reproducible corpus inputs, structural measurements and retained diagnostics. import hashlib import json import time from pathlib import Path from hearth.randomness import Scope from hearth.programs import PROGRAMS, building_scene, settlement_scene from hearth import Scene, Box from hearth.environment import Terrain from hearth.components.building import adapted from hearth.environment import gradient, wave, radial, constant from hearth.kernel import ContractError, SearchExhausted from hearth.persistence import semantic_digest, export_scene from hearth.blocks import name_of def adaptation_expression(environment_seed): rng = Scope(environment_seed).stream('frozen-environment') # Degenerate coefficients deliberately include exact flat ground. sx = rng.choice((-.045, 0, .045)) sz = rng.choice((-.035, 0, .035)) amplitude = rng.choice((0, .4, .8)) expression = gradient(sx, sz, 4) + wave(amplitude, .13, .11, rng.random() * 6) if environment_seed >= 8: mask = radial(8, 9, 28, .7).transformed(dx=2, dz=-1, scale=1.2) expression = expression.blend(gradient(-sz, sx, 4) + wave(.6, .07, .19), mask) else: expression = expression + radial(7, 8, 22, rng.choice((0, .4, .7))) expression = expression.clamp(2, 7) water = rng.choice((None, 5, 6)) return expression, water def freeze_environment(seed): expression, water = adaptation_expression(seed) scene = Scene(seed, domain=Box((-8, -4, -18), (34, 64, 34))) scene.place('land', Terrain(scene.domain, expression, water)) return scene.finalize() def adapt_frozen(environment, design, building_seed): scene = environment.fork(seed=building_seed) scene.compose_choice(adapted('building', design, '/land')) return scene.finalize() def principal_signature(scene): buildings = [] for path, node in sorted(scene.nodes.items()): if node.type != 'building.rooms': continue decision = node.contract.decisions # Realized node topology plus occupied envelope per room, normalized to building. rooms = [] roofs = [] for child, part in sorted(scene.nodes.items()): if not child.startswith(path + '/'): continue if part.type.startswith('room.'): origin = node.frame.inverse(part.frame.origin) occupied = scene.cells(child, True) relative = [part.frame.inverse(p) for p in occupied] bounds = [min(p[i] for p in relative) for i in range(3)] + [max(p[i] for p in relative) for i in range(3)] rooms.append([origin[0], origin[1] - decision['floor'], origin[2], part.type, part.contract.decisions['doors'], part.contract.decisions['stair_up'], bounds]) if part.type == 'roof.gable': roofs.append([part.contract.decisions['axis'], part.contract.decisions['span'], part.contract.decisions['steep'], len(scene.cells(child, True))]) buildings.append({'rooms': rooms, 'roofs': roofs, 'porch': decision['porch'], 'bay': decision['bay']}) layout = [] for node in scene.nodes.values(): if node.type == 'landscape.paths': pts = node.contract.decisions['waypoints'] layout.append({'points': [(p[0], p[-1]) for p in pts], 'links': node.contract.decisions['links']}) data = {'buildings': buildings, 'organization': layout} return hashlib.sha256(json.dumps(data, sort_keys=True, default=list).encode()).hexdigest(), data def contact_metrics(scene): foundations = [n for n in scene.nodes.values() if n.type == 'adapter.foundation'] data = [n.contract.decisions for n in foundations] edit_paths = {key for key, n in scene.nodes.items() if n.capability and set(n.capability.tags).intersection(('siteworks', 'path'))} occupied = sum(len(scene.cells(key)) for key in edit_paths) replacements = sum(len(scene.displaced.get(key, {})) for key in edit_paths) from hearth.blocks import solid, AIR excavated = sum(solid(old.state) and not solid(scene.blocks[p].state if p in scene.blocks else AIR) for key in edit_paths for p, old in scene.displaced.get(key, {}).items()) return {'fill': sum(d['fill'] for d in data), 'excavation': excavated, 'sitework_occupied_cells': occupied, 'replaced_cells': replacements, 'new_sitework_cells': occupied - replacements, 'strategies': [d['strategy'] for d in data], 'signature': hashlib.sha256(json.dumps(data, sort_keys=True).encode()).hexdigest()} def measured(label, recipe, inputs, output=None): start = time.perf_counter() result = {'label': label, 'inputs': inputs, 'attempts': 1, 'retries': 0} try: scene = recipe() scene.finalize() signature, structure = principal_signature(scene) choices = [e for e in scene.events if e['kind'] == 'candidate-selection'] if choices: result['attempts'] = sum(e['attempts'] for e in choices) result.update(status='validated', blocks=len(scene.blocks), components=len(scene.nodes), digest=semantic_digest(scene), principal_signature=signature, structure=structure, contact=contact_metrics(scene), accepted_candidates=sum(e['accepted'] for e in choices) if choices else 1, candidates=choices) # Hash independently frozen terrain before placement using persisted field input and current unchanged bed cells. if output: export_scene(scene, output) result['artifact'] = str(output) except SearchExhausted as exc: result.update(status='budget-exhausted', diagnostic=str(exc), accepted_candidates=0, attempts=getattr(exc, 'attempts', 1), candidates=getattr(exc, 'candidates', [])) except (ContractError, ValueError) as exc: result.update(status='incompatible' if isinstance(exc, ContractError) and exc.diagnostic.rule in ('site-relief', 'support-height', 'fill-volume', 'approach-detour') else 'defect', diagnostic=str(exc), accepted_candidates=0, attempts=getattr(exc, 'attempts', 1), candidates=getattr(exc, 'candidates', [])) result['seconds'] = round(time.perf_counter() - start, 4) return result def run_corpus(output: Path, seed=0, artifacts=False): output.mkdir(parents=True, exist_ok=True) rows = [] specs = [] environments = {} for env in range(16): expression, water = adaptation_expression(env + seed * 100) frozen = freeze_environment(env + seed * 100) environments[env + seed * 100] = frozen digest = semantic_digest(frozen) for build in range(4): specs.append({'environment_seed': env + seed * 100, 'building_seed': build, 'expression': expression.expression(), 'water': water, 'frozen_environment_digest': digest, 'environment_domain': [list(frozen.domain.lo), list(frozen.domain.hi)], 'held_out': env >= 8}) (output / 'adaptation-inputs.json').write_text(json.dumps(specs, indent=2)) for i, spec in enumerate(specs): expression, water = adaptation_expression(spec['environment_seed']) bs = spec['building_seed'] recipe = lambda e=environments[spec['environment_seed']], b=bs: adapt_frozen(e, PROGRAMS['dwelling'](b), b) artifact = Path('samples') / f'adaptation-{i:02d}.litematic' if artifacts and i in (0, 8, 35, 60) else None row = measured(f'adaptation-{i:02d}', recipe, spec, artifact) if semantic_digest(environments[spec['environment_seed']]) != spec['frozen_environment_digest']: raise AssertionError('Frozen environment mutated') rows.append(row) print(row['label'], row['status'], flush=True) for name, program in PROGRAMS.items(): for bs in range(8): artifact = Path('samples') / f'{name}-{bs}.litematic' if artifacts and bs in (0, 1, 6) else None row = measured(f'{name}-{bs}', lambda p=program, b=bs: building_scene(p(b), b), {'program': name, 'seed': bs}, artifact) rows.append(row) print(row['label'], row['status'], flush=True) for bs, count in [(s, None) for s in range(8)] + [(0, 3), (0, 6)]: label = f'settlement-{bs}-{count or "seeded"}' artifact = Path('samples') / (label + '.litematic') if artifacts and ((bs == 1 and count is None) or count in (3, 6)) else None row = measured(label, lambda b=bs, c=count: settlement_scene(b, c), {'program': 'settlement', 'seed': bs, 'count': count}, artifact) rows.append(row) print(label, row['status'], flush=True) for i in range(32): es = 1000 + seed * 100 + i rng = Scope(es).stream('stress') expression = (gradient(rng.choice((0, .12, .28, .45)), rng.choice((0, -.15, .2)), 4) + wave(rng.choice((0, 2, 5)), .13, .17, rng.random() * 6)).clamp(-2, 20) water = rng.choice((None, 5, 12)) bs = i % 8 row = measured(f'stress-{i:02d}', lambda e=expression, w=water, b=bs: building_scene(PROGRAMS['dwelling'](b), b, e, w), {'environment_seed': es, 'building_seed': bs, 'expression': expression.expression(), 'water': water}) rows.append(row) print(row['label'], row['status'], flush=True) (output / 'results.json').write_text(json.dumps(rows, indent=2)) summary = {} for name, subset in [('adaptation', rows[:64]), ('buildings', rows[64:88]), ('settlements', rows[88:98]), ('stress', rows[98:])]: good = [r for r in subset if r['status'] == 'validated'] summary[name] = {'inputs': len(subset), 'validated': len(good), 'incompatible': sum(r['status'] == 'incompatible' for r in subset), 'defects': sum(r['status'] == 'defect' for r in subset), 'budget_exhausted': sum(r['status'] == 'budget-exhausted' for r in subset), 'candidate_attempts': sum(r['attempts'] for r in subset), 'accepted_candidates': sum(r['accepted_candidates'] for r in subset), 'retries': sum(r['retries'] for r in subset), 'seconds': round(sum(r['seconds'] for r in subset), 3), 'observed_principal_signatures': len({r['principal_signature'] for r in good}), 'observed_contact_signatures': len({r['contact']['signature'] for r in good}), 'fill_range': [min((r['contact']['fill'] for r in good), default=0), max((r['contact']['fill'] for r in good), default=0)]} (output / 'summary.json').write_text(json.dumps(summary, indent=2)) manifest = [{'artifact': r['artifact'], 'inputs': r['inputs'], 'digest': r['digest'], 'status': r['status']} for r in rows if 'artifact' in r] (Path('samples') / 'replay-manifest.json').write_text(json.dumps(manifest, indent=2)) return summary
hearth/lodges.py
# Small architectural intent programs; all geometry remains in shared components. from hearth import Scene, Box from hearth.randomness import Scope from hearth.environment import Terrain, gradient, wave from hearth.components.building import Blueprint, RoomSpec, adapted from hearth.components.roofcraft import RoofDesign from hearth.components.roomlayout import InteriorDesign from hearth.components.facades import FacadeDesign from hearth.components.grounds import GardenCourt from hearth.components.rooflantern import RidgeLantern def hillside_home(seed): rng = Scope(seed).stream('home-layout') rooms = [RoomSpec(0, 0, 0, 'living'), RoomSpec(0, 0, 1, 'bedroom'), RoomSpec(1, 0, 0, 'kitchen')] if rng.choice((True, False)): rooms += [RoomSpec(0, 1, 0, 'library')] return Blueprint(tuple(rooms), bay=rng.choice((11, 13)), roof_design=RoofDesign(rng.choice(((1, 2), (1, 1, 2))), end_hips=Scope(seed).choose(((0, 0), (0, 2), (2, 2)), 'roof-ends'), ridge_component=RidgeLantern(), ridge_min_run=17), porch_depth=4, balcony=True, chimney=True, facade_design=FacadeDesign(), rail_material='dark_oak', attic_purpose=Scope(seed).choose(('bedroom', 'library'), 'roof-purpose'), interior_design=InteriorDesign()) def gabled_hall(seed): rng = Scope(seed).stream('hall-layout') rooms = [RoomSpec(0, 0, 0, 'library'), RoomSpec(0, 1, 0, 'living'), RoomSpec(1, 1, 0, 'kitchen')] if rng.choice((True, False)): rooms += [RoomSpec(0, 1, 1, 'bedroom')] if rng.choice((True, False)): rooms += [RoomSpec(1, 0, 0, 'workshop')] return Blueprint(tuple(rooms), bay=rng.choice((9, 11)), roof_axis=rng.choice(('x', 'z')), roof_design=RoofDesign((1, 2), rng.choice((7, 10)), end_hips=Scope(seed).choose(((0, 0), (0, 2), (2, 2)), 'roof-ends'), ridge_component=RidgeLantern(), ridge_min_run=17), porch_depth=5, chimney=True, facade_design=FacadeDesign(), rail_material='dark_oak', attic_purpose=Scope(seed).choose(('bedroom', 'library'), 'roof-purpose'), interior_design=InteriorDesign()) def high_house(seed): rng = Scope(seed).stream('vertical-layout') rooms = [RoomSpec(0, 0, level, purpose) for level, purpose in enumerate(('living', 'library', 'bedroom'))] rooms += [RoomSpec(1, 0, 0, 'kitchen')] if rng.choice((True, False)): rooms += [RoomSpec(1, 0, 1, 'workshop')] if rng.choice((True, False)): rooms += [RoomSpec(0, 1, 0, 'storage')] return Blueprint(tuple(rooms), bay=rng.choice((9, 11)), roof_design=RoofDesign((2, 1), 8, end_hips=Scope(seed).choose(((0, 0), (1, 3), (3, 3)), 'roof-ends'), ridge_component=RidgeLantern(), ridge_min_run=17), porch_depth=4, balcony=rng.choice((True, False)), chimney=True, facade_design=FacadeDesign(), rail_material='dark_oak', attic_purpose=Scope(seed).choose(('bedroom', 'library'), 'roof-purpose'), interior_design=InteriorDesign()) def lodge_scene(design, seed=0, environment_seed=0, field=None, water=None, garden=True): """Freeze a general environment, then compose a building and its garden court.""" design.validate() w = (max(r.x for r in design.rooms) + 1) * design.bay d = (max(r.z for r in design.rooms) + 1) * design.bay domain = Box((-8, -3, -17), (w + 8, 72, d + 9)) rng = Scope(environment_seed).stream('environment') expression = field if field is not None else gradient(rng.choice((-.02, .02, .04)), .012, 2) + wave(.5, .12, .1, rng.random() * 6) scene = Scene(seed, domain=domain) scene.place('land', Terrain(domain, expression, water)) scene.finalize() scene.compose_choice(adapted('building', design, '/land')) if garden: scene.place('garden', GardenCourt('/building', '/land', domain)) return scene.finalize()
hearth/quality_assessment.py
# Finite individual-building assessment with independently frozen inputs and retained failures. from pathlib import Path import hashlib import json import time from hearth import Scene, Box, ContractError from hearth.kernel import SearchExhausted from hearth.randomness import Scope from hearth.environment import Terrain, gradient, wave from hearth.assessment import adaptation_expression, contact_metrics from hearth.components.building import adapted from hearth.lodges import hillside_home, gabled_hall, high_house, lodge_scene from hearth.persistence import export_scene, load_scene, semantic_digest, encode CLIENTS = {'home': hillside_home, 'hall': gabled_hall, 'high': high_house} DOMAIN = Box((-10, -4, -20), (40, 72, 40)) def fingerprint(value): return hashlib.sha256(json.dumps(value, sort_keys=True, default=list).encode()).hexdigest() def principal_signature(scene): """Measure current architecture independently of palette, contact and garden noise. Args: scene: A validated scene with automatic component records. Returns: A digest and its auditable normalized structural measurements. """ data = [] for path, node in sorted(scene.nodes.items()): if node.type != 'building.rooms': continue floor = node.contract.decisions['floor'] rows = [] for part in scene.nodes.values(): if not part.path.startswith(path + '/'): continue relative = node.frame.inverse(part.frame.origin) location = (relative[0], relative[1] - floor, relative[2]) if part.type.startswith('room.'): floor_cells = scene.cells(part.path + '/floor') if not floor_cells: # A mounted room can depend on another component's sealed floor. boundary = {p for rule in part.contract.rules if rule.kind == 'sealed' for p in rule.cells} floor_cells = {p for p in boundary if part.frame.inverse(p)[1] == 0 and scene.view.supports(p)} footprint = sorted((part.frame.inverse(p)[0], part.frame.inverse(p)[2]) for p in floor_cells) rows.append(('room', location, part.type, part.contract.decisions['doors'], part.contract.decisions['stair_up'], fingerprint(footprint))) elif part.type in ('roof.profile', 'roof.gable', 'roof.dormer'): structural_tags = {'roof', 'enclosure', 'wall', 'window', 'sealed-opening'} coordinates = sorted(part.frame.inverse(p) for p in scene.cells(part.path, descendants=True) if structural_tags.intersection(scene.nodes[scene.blocks[p].owner].capability.tags)) decisions = {k: v for k, v in part.contract.decisions.items() if k in ('axis', 'span', 'rise', 'steep', 'tops')} rows.append((part.type, location, decisions, fingerprint(coordinates))) elif part.type in ('attachment.porch', 'masonry.chimney'): keys = {'balcony', 'depth', 'width', 'entrance_x', 'columns', 'height', 'cap_overhang'} rows.append((part.type, location, {k: v for k, v in part.contract.decisions.items() if k in keys})) data.append(sorted(rows, key=lambda v: json.dumps(v, sort_keys=True))) return fingerprint(data), data def audit_pair(scene, path): """Verify complete structural records, actual cells, states, inventories and queries.""" restored = load_scene(path) for attr in ('nodes', 'relations', 'dependencies', 'operations', 'port_uses', 'displaced', 'reverse'): if encode(getattr(restored, attr)) != encode(getattr(scene, attr)): raise AssertionError('Roundtrip record mismatch: ' + attr) if semantic_digest(restored) != semantic_digest(scene): raise AssertionError('Geometry digest mismatch') queries = 0 for node in scene.nodes.values(): cells = scene.cells(node.path) if cells != restored.cells(node.path): raise AssertionError('Current-cell query mismatch') if cells: p = min(cells) if scene.inspect(p) != restored.inspect(p): raise AssertionError('Structural query mismatch') queries += 1 inventories = {p: c.nbt for p, c in scene.blocks.items() if c.nbt} if inventories != {p: c.nbt for p, c in restored.blocks.items() if c.nbt}: raise AssertionError('Inventory mismatch') return {'queries': queries, 'inventories': len(inventories), 'nodes': len(scene.nodes), 'digest': semantic_digest(restored)} def evaluate(label, inputs, recipe, artifact=None): start = time.perf_counter() row = {'label': label, 'inputs': inputs, 'attempts': 1, 'accepted_candidates': 0, 'retries': 0} try: scene = recipe() scene.finalize() events = [e for e in scene.events if e['kind'] == 'candidate-selection'] digest, architecture = principal_signature(scene) contact = contact_metrics(scene) contact['bearing_fill'] = sum(n.contract.decisions['fill'] for n in scene.nodes.values() if n.type == 'adapter.bearing-course') contact['fill'] += contact['bearing_fill'] row.update(status='validated', attempts=sum(e['attempts'] for e in events) or 1, accepted_candidates=sum(e['accepted'] for e in events) if events else 1, digest=semantic_digest(scene), principal_signature=digest, architecture=architecture, contact=contact, blocks=len(scene.blocks), nodes=len(scene.nodes), candidates=events, optional_omissions=[{'component': n.path, 'dormers': n.contract.decisions['omitted_optional_dormers']} for n in scene.nodes.values() if n.contract.decisions.get('omitted_optional_dormers')]) if artifact is not None: export_scene(scene, artifact) row.update(artifact=str(artifact), audit=audit_pair(scene, artifact)) except (ContractError, ValueError, AssertionError) as error: known = {'site-relief', 'support-height', 'fill-volume', 'contact-strategy', 'approach-detour', 'substrate-depth'} status = 'budget-exhausted' if isinstance(error, SearchExhausted) else 'incompatible' if isinstance(error, ContractError) and error.diagnostic.rule in known else 'defect' row.update(status=status, diagnostic=str(error), attempts=getattr(error, 'attempts', 1), candidates=getattr(error, 'candidates', [])) row['seconds'] = round(time.perf_counter() - start, 4) return row def summary(rows): valid = [r for r in rows if r['status'] == 'validated'] return {'inputs': len(rows), 'validated': len(valid), 'incompatible': sum(r['status'] == 'incompatible' for r in rows), 'defects': sum(r['status'] == 'defect' for r in rows), 'budget_exhausted': sum(r['status'] == 'budget-exhausted' for r in rows), 'candidate_attempts': sum(r['attempts'] for r in rows), 'accepted_candidates': sum(r['accepted_candidates'] for r in rows), 'seconds': round(sum(r['seconds'] for r in rows), 3), 'principal_signatures': len({r['principal_signature'] for r in valid}), 'contact_signatures': len({r['contact']['signature'] for r in valid}), 'fill_range': [min((r['contact']['fill'] for r in valid), default=0), max((r['contact']['fill'] for r in valid), default=0)]} def run(output, artifacts, seed=0): """Run the recorded finite recipe once per input without success-only resampling.""" output, artifacts = Path(output), Path(artifacts) output.mkdir(parents=True, exist_ok=True) artifacts.mkdir(parents=True, exist_ok=True) rows, frozen = [], {} specifications = [] for index in range(16): es = seed * 100 + index field, water = adaptation_expression(es) environment = Scene(es, domain=DOMAIN) environment.place('land', Terrain(DOMAIN, field, water)) environment.finalize() frozen[index] = environment specifications.append({'environment_seed': es, 'expression': field.expression(), 'water': water, 'digest': semantic_digest(environment), 'held_out_composition': index >= 8}) (output / 'frozen-inputs.json').write_text(json.dumps(specifications, indent=2)) def retain(row): rows.append(row) (output / 'results.json').write_text(json.dumps(rows, indent=2)) print(row['label'], row['status'], flush=True) for name, client in CLIENTS.items(): for bs in range(8): label = f'{name}-{bs}' artifact = artifacts / (label + '.litematic') if bs in (0, 1, 6) else None retain(evaluate(label, {'client': name, 'structure_seed': bs, 'environment_seed': bs + seed * 100}, lambda c=client, b=bs: lodge_scene(c(b), b, b + seed * 100), artifact)) structures = ((hillside_home, 0), (hillside_home, 1), (gabled_hall, 2), (high_house, 3)) for es, environment in frozen.items(): for index, (client, bs) in enumerate(structures): number = es * 4 + index label = f'adaptation-{number:02d}' inputs = {**specifications[es], 'client': client.__name__, 'structure_seed': bs} def place(e=environment, c=client, b=bs): scene = e.fork(seed=b) scene.compose_choice(adapted('building', c(b), '/land')) return scene.finalize() artifact = artifacts / (label + '.litematic') if number in (0, 8, 35, 60) else None retain(evaluate(label, inputs, place, artifact)) if semantic_digest(environment) != specifications[es]['digest']: raise AssertionError('Frozen environment changed') for index in range(16): es = 2000 + seed * 100 + index rng = Scope(es).stream('stress') field = (gradient(rng.choice((0, .12, .28, .45)), rng.choice((0, -.15, .2)), 4) + wave(rng.choice((0, 2, 5)), .13, .17, rng.random() * 6)).clamp(-2, 20) water = rng.choice((None, 5, 12)) environment = Scene(es, domain=DOMAIN) environment.place('land', Terrain(DOMAIN, field, water)) environment.finalize() bs = index % 8 def stress(e=environment, b=bs): s = e.fork(seed=b) s.compose_choice(adapted('building', high_house(b), '/land')) return s.finalize() retain(evaluate(f'stress-{index:02d}', {'environment_seed': es, 'structure_seed': bs, 'expression': field.expression(), 'water': water, 'frozen_digest': semantic_digest(environment)}, stress)) results = {'clients': summary(rows[:24]), 'adaptation': summary(rows[24:88]), 'stress': summary(rows[88:]), 'per_client': {name: summary([r for r in rows[:24] if r['inputs']['client'] == name]) for name in CLIENTS}} (output / 'summary.json').write_text(json.dumps(results, indent=2)) (artifacts / 'manifest.json').write_text(json.dumps([r for r in rows if 'artifact' in r], indent=2)) return results
hearth/validators.py
# Reusable geometric checks registered through the public validator extension point. from hearth.kernel.validation import validator, state, fail from hearth.blocks import solid, name_of from collections import deque @validator('daylight-path') def daylight_path(scene, node, rule): """Check a real transmissive path from a well to each declared glazing cell. This bounded six-neighbor model permits air, glass and thin light hangers. It does not predict Minecraft sky-light levels or replace room light checks. """ def transmits(p): name = name_of(state(scene, p)) return name in ('air', 'cave_air', 'chain', 'lantern') or name == 'glass' or name.endswith('_stained_glass') if not rule.cells or rule.box is None: yield fail('daylight-contract', node, None, 'A bounded well and glazing targets are required') return reached = {rule.cells[0]} if transmits(rule.cells[0]) else set() queue = deque(reached) while queue: x, y, z = queue.popleft() for dx, dy, dz in ((1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, -1, 0), (0, 0, 1), (0, 0, -1)): q = (x + dx, y + dy, z + dz) if rule.box.contains(q) and q not in reached and transmits(q): reached.add(q) queue.append(q) for q in rule.cells: if q not in reached: yield fail('daylight-path', node, q, 'Glazing and loft well are separated by opaque geometry') @validator('vertical-cover') def vertical_cover(scene, node, rule): """Check actual weather cover along bounded world-vertical columns. Horizontal frame rotations preserve world Y. This is a voxel coverage check, not a fluid simulator or a structural-mechanics proof. """ for x, y, z in rule.cells: if not any(solid(state(scene, (x, yy, z))) or 'glass' in name_of(state(scene, (x, yy, z))) for yy in range(y, rule.box.hi[1] + 1)): yield fail('roof-cover', node, (x, y, z), 'Weather skin has an uncovered column') @validator('enclosed-volume') def enclosed_volume(scene, node, rule): """Flood actual air to detect exterior leaks, exempting explicit floor apertures. This is a six-neighbor voxel enclosure check, not fluid or collision simulation. Apertures are node-local cells on the bounded volume's floor boundary. """ allowed = {node.frame.point(tuple(q)) for q in rule.data.get('apertures', ())} if any(p[1] != rule.box.lo[1] or not rule.box.contains(p) for p in allowed): yield fail('enclosure-aperture', node, None, 'Apertures must be bounded floor cells') return def permeable(p): name = name_of(state(scene, p)) return not solid(state(scene, p)) and 'glass' not in name and not name.endswith('_door') reached = {q for q in rule.cells if permeable(q)} if not reached: yield fail('enclosure-seed', node, rule.cells[0] if rule.cells else None, 'The room needs an actual interior air cell') return queue = deque(sorted(reached)) while queue: p = queue.popleft() if p in allowed: continue if any(p[k] in (rule.box.lo[k], rule.box.hi[k]) for k in range(3)): yield fail('enclosure-leak', node, p, 'Actual interior air reaches the exterior boundary') return for dx, dy, dz in ((1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, -1, 0), (0, 0, 1), (0, 0, -1)): q = (p[0] + dx, p[1] + dy, p[2] + dz) if q not in reached and rule.box.contains(q) and permeable(q): reached.add(q) queue.append(q)
hearth/navigation.py
# Bounded level-floor route planning through the public read-only environment interface. from collections import deque from hearth.blocks import passable def floor_path(view, frame, start, end, area, blocked=()): """Find a level two-cell-high route without inferring unknown space as empty. Args: view: Public read-only environmental access. frame: Frame mapping all other arguments from local coordinates to world. start: Local standing position. end: Local standing position on the same floor. area: Inclusive local bound for standing positions. blocked: Prospective local occupied cells not yet submitted as effects. Returns: A deterministic local path, or an empty tuple when no path exists. """ if start[1] != end[1]: raise ValueError('floor_path requires equal standing heights') blocked = set(blocked) def usable(p): head = (p[0], p[1] + 1, p[2]) return (area.contains(p) and p not in blocked and head not in blocked and view.supports(frame.point((p[0], p[1] - 1, p[2]))) and passable(view.state(frame.point(p))) and passable(view.state(frame.point(head)))) if not usable(start) or not usable(end): return () parent, queue = {start: None}, deque((start,)) while queue: p = queue.popleft() if p == end: result = [] while p is not None: result.append(p) p = parent[p] return tuple(reversed(result)) for dx, dz in ((0, -1), (-1, 0), (1, 0), (0, 1)): q = (p[0] + dx, p[1], p[2] + dz) if q not in parent and usable(q): parent[q] = p queue.append(q) return ()
hearth/kernel/contracts.py
# Serializable contracts, binding requests and pure candidate plans. from dataclasses import dataclass, field from typing import Any, Protocol from hearth.space import Box, Frame, Pos @dataclass(frozen=True) class Domain: minimum: float | None = None maximum: float | None = None choices: tuple = () def accepts(self, value): return (not self.choices or value in self.choices) and (self.minimum is None or value >= self.minimum) and (self.maximum is None or value <= self.maximum) @dataclass(frozen=True) class Capability: name: str tags: tuple[str, ...] parameters: dict[str, Domain] = field(default_factory=dict) offers: tuple[str, ...] = () assumptions: tuple[str, ...] = () adaptations: tuple[str, ...] = () guarantees: tuple[str, ...] = () version: str = '1' inputs: dict = field(default_factory=dict) locked: tuple[str, ...] = () @dataclass(frozen=True) class Rule: kind: str cells: tuple[Pos, ...] = () box: Box | None = None data: dict = field(default_factory=dict) phase: str = 'invariant' def transformed(self, frame): return Rule(self.kind, tuple(frame.point(p) for p in self.cells), frame.box(self.box) if self.box else None, self.data, self.phase) @dataclass(frozen=True) class Grant: key: str box: Box verbs: tuple[str, ...] tags: tuple[str, ...] = () limit: int = 100000 whole: bool = False @dataclass(frozen=True) class Port: key: str kind: str frame: Frame region: Box capacity: int = 1 grant: str | None = None alignment: int = 1 facts: dict = field(default_factory=dict) delegate: tuple[str, str] | None = None @dataclass(frozen=True) class Contract: envelope: Box ports: tuple[Port, ...] = () grants: tuple[Grant, ...] = () rules: tuple[Rule, ...] = () decisions: dict = field(default_factory=dict) reads: tuple[Box, ...] = () atomic_object: bool = False def transformed(self, frame): return Contract(frame.box(self.envelope), tuple(Port(p.key, p.kind, frame.compose(p.frame), frame.box(p.region), p.capacity, p.grant, p.alignment, p.facts, p.delegate) for p in self.ports), tuple(Grant(g.key, frame.box(g.box), g.verbs, g.tags, g.limit, g.whole) for g in self.grants), tuple(r.transformed(frame) for r in self.rules), self.decisions, tuple(frame.box(b) for b in self.reads), self.atomic_object) @dataclass(frozen=True) class Binding: host: str port: str verb: str = 'install' region: Box | None = None @dataclass(frozen=True) class Write: point: Pos state: str operation: str = 'realize' preserve_owner: bool = False nbt: dict | None = None @dataclass(frozen=True) class Child: key: str component: Any params: dict = field(default_factory=dict) frame: Frame = Frame() bindings: tuple[Binding, ...] = () seed: int | None = None @dataclass(frozen=True) class Choice: key: str candidates: tuple[Child, ...] score: Any tolerance: float = 0.5 @dataclass class Plan: writes: list[Write] = field(default_factory=list) children: list[Child] = field(default_factory=list) relations: list[tuple[str, str, str]] = field(default_factory=list) def block(self, point, state, operation='realize', **kwargs): self.writes.append(Write(tuple(point), state, operation, **kwargs)) def fill(self, box, state, operation='fill'): self.writes.extend(Write(p, state, operation) for p in box.cells()) class Component(Protocol): def capability(self) -> Capability: ... def negotiate(self, context, parameters: dict) -> Contract: ... def realize(self, context, contract: Contract) -> Plan: ... class Registry: def __init__(self): self.entries = {} def register(self, component): self.entries[component.capability().name] = component return component def select(self, *tags): return tuple(self.entries[k] for k in sorted(self.entries) if set(tags) <= set(self.entries[k].capability().tags))
hearth/kernel/errors.py
# Structured, stable diagnostics for failed contracts and searches. from dataclasses import dataclass @dataclass(frozen=True) class Diagnostic: rule: str component: str position: tuple | None conditions: str def __str__(self): return f'{self.rule}: {self.component} at {self.position}: {self.conditions}' class ContractError(ValueError): def __init__(self, rule, component='/', position=None, conditions=''): self.diagnostic = Diagnostic(rule, component, position, conditions) super().__init__(str(self.diagnostic)) class ValidationError(ContractError): def __init__(self, diagnostics): self.diagnostics = diagnostics self.diagnostic = diagnostics[0] ValueError.__init__(self, '\n'.join(map(str, diagnostics[:12]))) class SearchExhausted(ContractError): pass
hearth/kernel/view.py
# Read-only, domain-aware environmental observations. from dataclasses import dataclass from types import MappingProxyType import copy from hearth.blocks import AIR, solid, name_of, passable from hearth.kernel.errors import ContractError from hearth.space import Box @dataclass(frozen=True) class Observation: version: int region: Box elevation: int water: int | None material: str slope: int support_depth: int class ReadTrace: """Coalesce actual environmental reads and interface dependencies for one candidate.""" def __init__(self): self.low = None self.high = None self.sources = {} def point(self, p): if self.low is None: self.low = list(p) self.high = list(p) else: for i in range(3): self.low[i] = min(self.low[i], p[i]) self.high[i] = max(self.high[i], p[i]) def region(self, box): self.point(box.lo) self.point(box.hi) @property def bounds(self): return None if self.low is None else Box(tuple(self.low), tuple(self.high)) class View: def __init__(self, scene, trace=None): self.__scene = scene self.__trace = trace @property def version(self): return self.__scene.version @property def domain(self): return self.__scene.domain @property def style(self): return MappingProxyType(self.__scene.style) def preference(self, name, point): if self.domain and not self.domain.contains(point): raise ContractError("unknown-space", position=point) field = self.__scene.preferences.get(name) return None if field is None else field(point[0], point[2]) def state(self, p): p = tuple(p) if self.__trace: self.__trace.point(p) if self.domain and not self.domain.contains(p): raise ContractError('unknown-space', position=p, conditions='Outside explicit environment domain') record = self.__scene.blocks.get(p) return record.state if record else AIR def owner(self, p): if self.__trace: self.__trace.point(p) record = self.__scene.blocks.get(tuple(p)) return record.owner if record else None def supports(self, p): return solid(self.state(p)) def clear(self, box): return all(passable(self.state(p)) for p in box.cells()) def elevation(self, x, z, maximum=None): if self.domain is None: raise ContractError('unknown-space', position=(x, 0, z), conditions='No environmental domain') for y in range(self.domain.hi[1] if maximum is None else min(maximum, self.domain.hi[1]), self.domain.lo[1] - 1, -1): if self.supports((x, y, z)): return y raise ContractError('missing-substrate', position=(x, self.domain.lo[1], z), conditions='No actual solid substrate') def water(self, x, z): if self.domain is None: raise ContractError('unknown-space', position=(x, 0, z)) for y in range(self.domain.hi[1], self.domain.lo[1] - 1, -1): if name_of(self.state((x, y, z))) == 'water': return y return None def sample(self, x, z): y = self.elevation(x, z) heights = [self.elevation(x + dx, z + dz) for dx, dz in ((1, 0), (-1, 0), (0, 1), (0, -1)) if self.domain.contains((x + dx, y, z + dz))] depth = 0 for yy in range(y, self.domain.lo[1] - 1, -1): if not self.supports((x, yy, z)): break depth += 1 return Observation(self.version, Box((x, self.domain.lo[1], z), (x, self.domain.hi[1], z)), y, self.water(x, z), self.state((x, y, z)), max([abs(h - y) for h in heights] or [0]), depth) def port(self, host, key): node = self.__scene.nodes[host] for p in node.contract.ports: if p.key == key: if self.__trace: self.__trace.sources[host] = p.region return copy.deepcopy(p) raise ContractError('missing-port', host, conditions=key) def cost(self, path, tag=None): paths = [key for key, n in self.__scene.nodes.items() if (key == path or key.startswith(path + '/')) and (tag is None or (n.capability and tag in n.capability.tags))] occupied = sum(len(self.__scene.reverse.get(key, ())) for key in paths) replaced = sum(len(self.__scene.displaced.get(key, ())) for key in paths) return {'occupied': occupied, 'replaced': replaced, 'instances': len(paths)} def offers(self, host, kind=None): return tuple(copy.deepcopy(p) for p in self.__scene.nodes[host].contract.ports if kind is None or p.kind == kind) def capability(self, host): return copy.deepcopy(self.__scene.nodes[host].capability) def resolved_port(self, host, key): seen = set() while True: if (host, key) in seen: raise ContractError('port-cycle', host, conditions=key) seen.add((host, key)) port = self.port(host, key) if not port.delegate: return host, port child, key = port.delegate host = host + '/' + child def contract(self, path): if self.__trace: self.__trace.sources[path] = self.__scene.nodes[path].contract.envelope return copy.deepcopy(self.__scene.nodes[path].contract) def protected(self, box): if self.__trace: self.__trace.region(box) return any(r.kind in ('clear', 'protected') and any(box.contains(p) for p in r.cells) for n in self.__scene.nodes.values() for r in n.contract.rules) def obstacle_distance(self, p, radius=8): best = radius + 1 for q in Box(tuple(v - radius for v in p), tuple(v + radius for v in p)).cells(): if q in self.__scene.blocks and not passable(self.__scene.blocks[q].state): best = min(best, max(abs(a - b) for a, b in zip(p, q))) return best
hearth/kernel/validation.py
# Extensible actual-geometry validators and bounded player movement. from collections import deque from hearth.blocks import AIR, LIGHTS, emitted_light, name_of, parse, passable, solid, validate_state from hearth.kernel.errors import Diagnostic from hearth.space import Box VALIDATORS = {} def validator(name): def register(fn): VALIDATORS[name] = fn return fn return register def state(scene, p): record = scene.blocks.get(tuple(p)) return record.state if record else AIR def fail(kind, node, point, message): return Diagnostic(kind, node.path, point, message) @validator('protected') def protected(scene, node, rule): from hearth.blocks import blockstates_equivalent for p, expected in zip(rule.cells, rule.data['states']): if not blockstates_equivalent(state(scene, p), expected): yield fail('protected-region', node, p, 'Preserved geometry changed') @validator('support') def support(scene, node, rule): for p in rule.cells: if not solid(state(scene, p)): yield fail('support', node, p, 'Required actual load-bearing cell is missing') @validator('clear') def clear(scene, node, rule): for p in rule.cells: if not passable(state(scene, p)): yield fail('clearance', node, p, 'Protected player headroom is obstructed') @validator('sealed') def sealed(scene, node, rule): for p in rule.cells: if name_of(state(scene, p)) in ('air', 'water'): yield fail('enclosure', node, p, 'Enclosed boundary has a gap') @validator('expected') def expected(scene, node, rule): allowed = set(rule.data['names']) for p in rule.cells: if name_of(state(scene, p)) not in allowed: yield fail('expected-geometry', node, p, f'Expected one of {sorted(allowed)}') @validator('pool') def pool(scene, node, rule): for x, y, z in rule.cells: if name_of(state(scene, (x, y, z))) != 'water': yield fail('pool-water', node, (x, y, z), 'Pool water missing') for q in ((x, y - 1, z), (x - 1, y, z), (x + 1, y, z), (x, y, z - 1), (x, y, z + 1)): if not solid(state(scene, q)) and name_of(state(scene, q)) != 'water': yield fail('pool-containment', node, q, 'Basin leaks') def standable(scene, p): x, y, z = p return passable(state(scene, p)) and passable(state(scene, (x, y + 1, z))) and solid(state(scene, (x, y - 1, z))) def reachable(scene, start, box): if not standable(scene, start): return set() reached = {start} queue = deque([start]) while queue: x, y, z = queue.popleft() for dx, dz in ((1, 0), (-1, 0), (0, 1), (0, -1)): for dy in (0, 1, -1): q = (x + dx, y + dy, z + dz) if q not in reached and box.contains(q) and standable(scene, q): # Ascending requires clearance above the lower step as well. high = (x, y + 2, z) if dy == 1 else (q[0], q[1] + 2, q[2]) if dy and not passable(state(scene, high)): continue reached.add(q) queue.append(q) return reached @validator('route') def route(scene, node, rule): if not rule.cells or rule.box is None: yield fail('route-contract', node, None, 'Route needs start, targets and bounded search region') return reached = reachable(scene, rule.cells[0], rule.box) for p in rule.cells: if p not in reached: yield fail('reachability', node, p, 'No walkable route with two blocks of headroom from entrance') @validator('light') def light(scene, node, rule): sources = [p for p in rule.box.cells() if emitted_light(state(scene, p))] if not sources: yield fail('lighting', node, rule.box.lo, 'Completed room has no actual light source') return # Propagate actual sources through transmissive cells, with one unit attenuation. levels = {p: emitted_light(state(scene, p)) for p in sources} queue = deque(sources) domain = rule.box.expand(1) while queue: p = queue.popleft() level = levels[p] - 1 if level < rule.data.get('minimum', 1): continue for dx, dy, dz in ((1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, -1, 0), (0, 0, 1), (0, 0, -1)): q = (p[0] + dx, p[1] + dy, p[2] + dz) if not domain.contains(q) or levels.get(q, 0) >= level: continue material = state(scene, q) if passable(material) or 'glass' in name_of(material) or name_of(material) == 'chain': levels[q] = level queue.append(q) for p in rule.cells: if levels.get(p, 0) < rule.data.get('minimum', 1): yield fail('lighting', node, p, 'Actual source attenuation/occlusion leaves required location dark') @validator('furnishing') def furnishing(scene, node, rule): names = {name_of(state(scene, p)) for p in rule.box.cells()} for group in rule.data['groups']: if not names.intersection(group): yield fail('furnishing', node, rule.box.lo, f'Missing functional furnishing: {group}') def validate(scene, final=False, completed_scope=None): diagnostics = [] for p, record in scene.blocks.items(): try: validate_state(record.state) except ValueError as exc: diagnostics.append(Diagnostic('blockstate', record.owner, p, str(exc))) continue if p not in scene.reverse.get(record.owner, set()): diagnostics.append(Diagnostic('reverse-index', record.owner, p, 'Current cell absent from reverse index')) if record.owner not in scene.nodes: diagnostics.append(Diagnostic('ownership', record.owner, p, 'Owner missing')) if record.nbt is not None: if record.nbt.get('id') != 'minecraft:' + name_of(record.state): diagnostics.append(Diagnostic('block-entity', record.owner, p, 'Block entity type mismatches actual block')) slots = set() for item in record.nbt.get('Items', []): if not 0 <= item.get('Slot', -1) < 27 or item['Slot'] in slots or not 1 <= item.get('count', 0) <= 64 or not item.get('id', '').startswith('minecraft:'): diagnostics.append(Diagnostic('inventory', record.owner, p, 'Invalid or duplicate inventory slot/item count')) slots.add(item.get('Slot')) name, props = parse(record.state) if name.endswith('_door') and not name.endswith('_trapdoor'): dy = 1 if props.get('half') == 'lower' else -1 q = (p[0], p[1] + dy, p[2]) other, op = parse(state(scene, q)) if other != name or op.get('half') == props.get('half') or any(op.get(k) != props.get(k) for k in ('facing', 'hinge', 'open', 'powered')): diagnostics.append(Diagnostic('door-pair', record.owner, p, 'Door halves absent or inconsistent')) if name.endswith('_bed'): direction = {'north': (0, -1), 'south': (0, 1), 'east': (1, 0), 'west': (-1, 0)}[props['facing']] sign = 1 if props['part'] == 'foot' else -1 q = (p[0] + direction[0] * sign, p[1], p[2] + direction[1] * sign) other, op = parse(state(scene, q)) if name != other or op.get('part') == props['part'] or op.get('facing') != props['facing']: diagnostics.append(Diagnostic('bed-pair', record.owner, p, 'Bed halves inconsistent')) if name_of(record.state) in ('sunflower', 'rose_bush', 'peony', 'lilac', 'tall_grass', 'large_fern'): dy = 1 if props.get('half') == 'lower' else -1 q = (p[0], p[1] + dy, p[2]) other, op = parse(state(scene, q)) if other != name or op.get('half') == props.get('half'): diagnostics.append(Diagnostic('plant-pair', record.owner, p, 'Tall plant halves inconsistent')) for owner, points in scene.reverse.items(): for p in points: if p not in scene.blocks or scene.blocks[p].owner != owner: diagnostics.append(Diagnostic('reverse-index', owner, p, 'Obsolete current membership')) for node in scene.nodes.values(): for port in node.contract.ports: if port.delegate and (node.complete or final): try: _, actual = scene.view.resolved_port(node.path, port.key) if (port.frame, port.region, port.kind) != (actual.frame, actual.region, actual.kind): diagnostics.append(Diagnostic('forwarded-interface', node.path, port.frame.origin, 'Child interface changed without parent renegotiation')) except (KeyError, ValueError): diagnostics.append(Diagnostic('forwarded-interface', node.path, port.frame.origin, 'Delegated port missing')) for parent in (node.parent, node.primary): if parent is not None and parent not in scene.nodes: diagnostics.append(Diagnostic('structure-graph', node.path, None, 'Current structural parent missing: ' + parent)) if final and (not node.complete or node.stale): diagnostics.append(Diagnostic('unfinished', node.path, None, 'Scope unfinished or dependent inputs stale')) for rule in node.contract.rules: if rule.phase == 'complete' and not final: scope = node closed = True while scope: closed = closed and scope.complete scope = scene.nodes.get(scope.parent) if completed_scope and (node.path == completed_scope or node.path.startswith(completed_scope + '/')): closed = node.complete if not closed: continue if rule.kind not in VALIDATORS: diagnostics.append(Diagnostic('unknown-validator', node.path, None, rule.kind)) else: diagnostics.extend(VALIDATORS[rule.kind](scene, node, rule)) return diagnostics
hearth/kernel/scene.py
# Transaction kernel, automatic ownership and separate semantic/dependency graphs. import copy from dataclasses import dataclass, field, replace, is_dataclass, fields from hearth.blocks import AIR, canonical, validate_state from hearth.space import Box, Frame from hearth.randomness import Scope from .contracts import Binding, Capability, Child, Choice, Contract, Domain, Plan from .errors import ContractError, ValidationError, SearchExhausted from .view import View, ReadTrace from .validation import validate @dataclass(frozen=True) class Limits: dimension: int = 512 blocks: int = 1000000 depth: int = 40 search: int = 24 instances: int = 10000 export_volume: int = 16000000 @dataclass(frozen=True) class Cell: state: str owner: str operation: str nbt: dict | None = None shared: tuple[str, ...] = () @dataclass class Node: path: str type: str version: str parameters: dict frame: Frame scope: Scope contract: Contract parent: str | None primary: str | None = None complete: bool = True stale: bool = False bindings: tuple = () capability: Capability | None = None shared_bindings: tuple = () @dataclass(frozen=True) class Context: path: str frame: Frame scope: Scope view: View bindings: tuple[Binding, ...] limits: Limits def rng(self, purpose='plan'): return self.scope.stream(purpose) def world(self, p): return self.frame.point(p) def local(self, p): return self.frame.inverse(p) def elevation(self, x, z, maximum=None): world = self.world((x, 0, z)) cap = None if maximum is None else maximum + self.frame.origin[1] return self.view.elevation(world[0], world[2], maximum=cap) - self.frame.origin[1] def water(self, x, z): world = self.world((x, 0, z)) level = self.view.water(world[0], world[2]) return None if level is None else level - self.frame.origin[1] def state(self, point): return self.view.state(self.world(point)) class Scene: def __init__(self, seed=0, limits=None, domain=None, style=None, preferences=None): if not isinstance(seed, int): raise TypeError('Seed must be an integer') self.seed = seed self.style = dict(style or {"timber": "spruce", "infill": "minecraft:smooth_sandstone", "roof": "deepslate_tile"}) self.preferences = dict(preferences or {}) self.limits = limits or Limits() self.domain = domain self.blocks = {} self.nodes = {} self.reverse = {} self.reverse_shared = {} self.relations = set() self.members = {} self.dependencies = [] self.operations = {} self.displaced = {} self.erasures = {} self.port_uses = {} self.version = 0 self.completed = False self._recipes = {} self.events = [] @property def view(self): return View(self) def _fork(self): other = copy.copy(self) other.blocks = self.blocks.copy() other.nodes = {p: copy.copy(n) for p, n in self.nodes.items()} other.reverse = {k: set(v) for k, v in self.reverse.items()} other.reverse_shared = {k: set(v) for k, v in self.reverse_shared.items()} other.relations = set(self.relations) other.members = {k: set(v) for k, v in self.members.items()} other.dependencies = list(self.dependencies) other.operations = copy.deepcopy(self.operations) other.displaced = {k: dict(v) for k, v in self.displaced.items()} other.erasures = dict(self.erasures) other.port_uses = dict(self.port_uses) other._recipes = self._recipes.copy() other.events = list(self.events) return other def fork(self, seed=None): """Copy a frozen composition; an optional seed controls future placements only.""" result = self._fork() if seed is not None: if not isinstance(seed, int): raise TypeError('Seed must be an integer') result.seed = seed return result def _commit(self, candidate): candidate.version += 1 candidate.completed = False self.__dict__.update(candidate.__dict__) def place(self, key, component, params=None, frame=Frame(), bindings=(), seed=None, complete=True): if not isinstance(key, str) or not key or any(c in key for c in '/#'): raise ContractError('instance-key', conditions='Keys must be nonempty and exclude / and #') candidate = self._fork() path = '/' + key candidate._instantiate(path, component, params or {}, frame, tuple(bindings), None, Scope(self.seed).child(key, seed), complete) candidate._check(False) self._commit(candidate) return path def compose_choice(self, choice): trial = self._fork() trial._select_child('', choice, Frame(), Scope(self.seed)) trial._check(False) self._commit(trial) return '/' + choice.key def choose(self, key, candidates, score=lambda scene, path: 0): accepted, failed = [], [] for index, child in enumerate(candidates): if index >= self.limits.search: break trial = self._fork() try: path = trial.place(key, child.component, child.params, child.frame, child.bindings, child.seed) accepted.append((score(trial, path), index, trial, path)) except ContractError as exc: failed.append(str(exc)) if not accepted: raise SearchExhausted('search-budget', '/' + key, conditions=f'No validated candidate within budget {self.limits.search}; failures={failed}') accepted.sort(key=lambda item: (item[0], item[1])) best_score = accepted[0][0] best = [c for c in accepted if c[0] <= best_score + 0.1] chosen = Scope(self.seed).child(key).choose(best, 'alternatives') self._commit(chosen[2]) self.events.append({'kind': 'search', 'key': key, 'accepted': len(accepted), 'rejected': len(failed), 'failures': failed}) return chosen[3] def _instantiate(self, path, component, params, frame, bindings, parent, scope, complete=True): if path in self.nodes: raise ContractError('duplicate-instance', path) if len(self.nodes) >= self.limits.instances: raise ContractError('instance-budget', path) if len(path.split('/')) > self.limits.depth: raise ContractError('recursion-budget', path) cap = component.capability() for key, value in params.items(): if key not in cap.parameters or not cap.parameters[key].accepts(value): raise ContractError('parameter-domain', path, conditions=f'{key}={value!r}') for key, domain in cap.inputs.items(): if not isinstance(domain, Domain): continue value = frame if key.startswith('frame.') else component parts = key.split('.')[1:] if key.startswith('frame.') else key.split('.') for part in parts: if part.startswith('_') or not hasattr(value, part): raise ContractError('capability-input', path, conditions=key) value = getattr(value, part) if not domain.accepts(value): raise ContractError('input-domain', path, conditions=f'{key}={value!r}') trace = ReadTrace() ctx = Context(path, frame, scope, View(self, trace), bindings, self.limits) local = component.negotiate(ctx, dict(params)) contract = local.transformed(frame) if max(contract.envelope.size) > self.limits.dimension: raise ContractError('dimension-budget', path) if parent and not all(self.nodes[parent].contract.envelope.contains(p) for p in contract.envelope.corners()): raise ContractError('child-envelope', path, contract.envelope.lo, f'Exceeds accepted parent {parent}') self.nodes[path] = Node(path, cap.name, cap.version, {"construction": describe_inputs(component), "arguments": dict(params)}, frame, scope, contract, parent, complete=False, bindings=bindings, capability=cap) self.displaced[path] = {} self.reverse[path] = set() self._recipes[path] = (component, params, frame, bindings, parent, scope, complete) if parent: self.relations.add((path, 'contained_by', parent)) self.members.setdefault(parent, set()).add(path) grants = [] for binding in bindings: if binding.host not in self.nodes: raise ContractError('missing-host', path, conditions=binding.host) effective_host, port = self.view.resolved_port(binding.host, binding.port) host = self.nodes[effective_host] use_key = (binding.host, binding.port) if self.port_uses.get(use_key, 0) >= port.capacity: raise ContractError('port-capacity', path, port.frame.origin, binding.port) self.port_uses[use_key] = self.port_uses.get(use_key, 0) + 1 if binding.verb == 'install': if not port.region.contains(frame.origin): raise ContractError('port-alignment', path, frame.origin, 'Origin outside installation region') if port.frame.inverse(frame.origin)[0] % port.alignment or frame.turn % 4 != port.frame.turn % 4: raise ContractError('port-alignment', path, frame.origin, 'Outside facade bay grid') grant = next((g for g in host.contract.grants if g.key == port.grant), None) if grant and binding.verb != 'connect': if binding.verb not in grant.verbs or (grant.tags and not set(cap.tags).intersection(grant.tags)): raise ContractError('permission-kind', path, frame.origin, f'{cap.tags} cannot {binding.verb} {binding.host}') grants.append((Binding(effective_host, port.key, binding.verb, binding.region), grant)) elif binding.verb != 'connect': raise ContractError('no-write-grant', path) kind = 'attached_to' if binding.verb == 'install' else ('connected_to' if binding.verb == 'connect' else 'supported_by') self.relations.add((path, kind, binding.host)) if kind == 'attached_to': self.members.setdefault(binding.host, set()).add(path) if kind == 'attached_to' and self.nodes[path].primary is None: self.nodes[path].primary = binding.host self.dependencies.append({'consumer': path, 'source': binding.host, 'version': self.version, 'region': binding.region or port.region.intersection(contract.envelope.expand(1)) or contract.envelope, 'reason': binding.verb}) for region in contract.reads: self.dependencies.append({'consumer': path, 'source': 'environment', 'version': self.version, 'region': region, 'reason': 'spatial-query'}) plan = component.realize(ctx, local) if trace.bounds: self.dependencies.append({'consumer': path, 'source': 'environment', 'version': self.version, 'region': trace.bounds, 'reason': 'observed-spatial-input'}) for source, region in sorted(trace.sources.items()): if source != path: self.dependencies.append({'consumer': path, 'source': source, 'version': self.version, 'region': region, 'reason': 'observed-interface-input'}) if not isinstance(plan, Plan): raise TypeError('Components return Plan effect sets') existing_consumers = set(self.nodes) - {path} final_writes = {} for write in plan.writes: p = frame.point(write.point) final_writes[p] = write protected_rules = [(n.path, r.box) for n in self.nodes.values() for r in n.contract.rules if r.kind == "protected" and r.box] retired = set() counts = {} for p, write in final_writes.items(): if not contract.envelope.contains(p): raise ContractError('envelope', path, p, 'Realization exceeds negotiated bounds') for protector, region in protected_rules: if region.contains(p) and protector != path: raise ContractError('protected-region', path, p, 'Immutable region held by ' + protector) old = self.blocks.get(p) if old and old.shared and not write.preserve_owner: raise ContractError('shared-consumer', path, p, 'Shared support requires explicit consumer rebinding') if old and write.preserve_owner and old.state.split('[')[0] != write.state.split('[')[0]: raise ContractError('property-update', path, p, 'Property adjustment must retain block type') if old and old.owner != path: authorization = next(((b, g) for b, g in grants if b.host == old.owner and g.box.contains(p) and (b.region is None or b.region.contains(p))), None) if authorization is None: raise ContractError('write-authority', path, p, f'Owned by {old.owner}; no scoped grant') binding, grant = authorization count_key = (binding.host, grant.key) counts[count_key] = counts.get(count_key, 0) + 1 if counts[count_key] > grant.limit: raise ContractError('edit-limit', path, p, f'Limit {grant.limit}') if self.nodes[old.owner].contract.atomic_object and not write.preserve_owner: if not grant.whole or not self.reverse[old.owner].issubset(final_writes): raise ContractError('whole-object', path, p, f'Partial replacement of {old.owner}') retired.add(old.owner) if old and old.owner != path: self.displaced[path].setdefault(p, old) if old: self.reverse[old.owner].discard(p) try: world_state = frame.state(write.state) validate_state(world_state) except ValueError as exc: raise ContractError('blockstate', path, p, str(exc)) from exc opid = path + '#' + write.operation operation = self.operations.setdefault(opid, {'component': path, 'name': write.operation, 'writes': 0, 'replaced': set()}) operation['writes'] += 1 if old: operation['replaced'].add(old.owner) if world_state == AIR: self.blocks.pop(p, None) self.erasures[p] = path else: self.erasures.pop(p, None) owner = old.owner if old and write.preserve_owner else path self.blocks[p] = Cell(canonical(world_state), owner, opid, write.nbt, old.shared if old and write.preserve_owner else ()) self.reverse[owner].add(p) for dependency in self.dependencies: consumer = dependency["consumer"] if consumer in existing_consumers and consumer != parent and not path.startswith(consumer + "/") and any(dependency["region"].contains(p) for p in final_writes): # Binding consumers remain valid only if their actual invariants hold. self.events.append({"kind": "revalidated-input", "consumer": consumer, "cause": path, "version": self.version}) for old in retired: self._retire(old) for child in plan.children: if isinstance(child, Choice): self._select_child(path, child, frame, scope) continue if not child.key or any(c in child.key for c in '/#'): raise ContractError('instance-key', path, conditions=child.key) self._instantiate(path + '/' + child.key, child.component, child.params, frame.compose(child.frame), child.bindings, path, scope.child(child.key, child.seed)) for port in contract.ports: if port.delegate: target, actual = self.view.resolved_port(path, port.key) if actual.frame != port.frame or actual.region != port.region or actual.kind != port.kind: raise ContractError('forwarded-interface', path, port.frame.origin, 'Realized child changed the negotiated public interface') self.relations.add((path, 'exposes', target)) for source, kind, target in plan.relations: if source not in self.nodes or target not in self.nodes: raise ContractError("dangling-relation", path, conditions=f"{source} {kind} {target}") self.relations.add((source, kind, target)) self.nodes[path].complete = complete if len(self.blocks) > self.limits.blocks: raise ContractError('block-budget', path) def _select_child(self, parent, choice, frame, scope): accepted = [] rejected = [] path = parent + '/' + choice.key for i, option in enumerate(choice.candidates[:self.limits.search]): trial = self._fork() try: trial._instantiate(path, option.component, option.params, frame.compose(option.frame), option.bindings, parent or None, scope.child(choice.key, option.seed).child(f'alternative-{i}')) trial._check(False, completed_scope=path) accepted.append((choice.score(trial.view, path), i, trial)) except ContractError as exc: rejected.append(exc.diagnostic) if not accepted: rules = {d.rule for d in rejected} if len(rules) == 1 and len(choice.candidates) <= self.limits.search: error = ContractError(next(iter(rules)), path, conditions='All declared alternatives violate the same condition: ' + str(rejected[0])) else: error = SearchExhausted('search-budget', path, conditions=str(rejected)) error.attempts = len(rejected) error.candidates = [d.__dict__ for d in rejected] raise error accepted.sort(key=lambda item: (item[0], item[1])) feasible = [a for a in accepted if a[0] <= accepted[0][0] + choice.tolerance] chosen = scope.child(choice.key).choose(feasible, 'adaptation-selection') self.__dict__.update(chosen[2].__dict__) self.events.append({'kind': 'candidate-selection', 'component': path, 'attempts': len(accepted) + len(rejected), 'accepted': len(accepted), 'rejected': [d.__dict__ for d in rejected], 'scores': [(a[1], round(a[0], 4)) for a in accepted], 'chosen': chosen[1]}) def _retire(self, path): if self.reverse.get(path): raise ContractError('whole-object', path, conditions='Cannot retire occupied instance') node = self.nodes.get(path) if node: for binding in node.bindings: key = (binding.host, binding.port) self.port_uses[key] = max(0, self.port_uses.get(key, 0) - 1) if node: for shared_host, shared_port, point in node.shared_bindings: key = (shared_host, shared_port) self.port_uses[key] = max(0, self.port_uses.get(key, 0) - 1) self.members.pop(path, None) for children in self.members.values(): children.discard(path) self.nodes.pop(path, None) self.reverse.pop(path, None) self._recipes.pop(path, None) self.relations = {r for r in self.relations if r[0] != path and r[2] != path} self.dependencies = [d for d in self.dependencies if d['consumer'] != path and d['source'] != path] self.port_uses = {k: v for k, v in self.port_uses.items() if k[0] != path} def _check(self, final, completed_scope=None): errors = validate(self, final, completed_scope) if errors: raise ValidationError(errors) def finalize(self): self._check(True) self.completed = True return self def finish_scope(self, path): trial = self._fork() trial.nodes[path].complete = True trial._check(True) self._commit(trial) def descendants(self, path): result = set() pending = [path] while pending: current = pending.pop() if current in result: continue result.add(current) pending.extend(sorted(self.members.get(current, ()))) return frozenset(result) def cells(self, path, descendants=False, shared=False): paths = [path] if descendants: paths = list(self.descendants(path)) return frozenset(p for k in paths for p in (self.reverse.get(k, set()) | (self.reverse_shared.get(k, set()) if shared else set()))) def inspect(self, point): point = tuple(point) record = self.blocks.get(point) if not record: return {'position': point, 'state': AIR, 'instance': None, 'chain': [], 'related': [], 'operation': None} chain, seen = [], set() path = record.owner while path and path not in seen: seen.add(path) node = self.nodes[path] chain.append({'id': path, 'type': node.type}) path = node.primary or node.parent related = sorted(r for r in self.relations if r[0] in seen or r[2] in seen) return {'position': point, 'state': record.state, 'instance': record.owner, 'chain': chain, 'related': related, 'operation': self.operations.get(record.operation), 'shared': record.shared, 'nbt': record.nbt} def share(self, point, participant, host, port): trial = self._fork() p = tuple(point) record = trial.blocks[p] offered = trial.view.port(host, port) if record.owner != host or offered.kind != 'shared-support' or not offered.region.contains(p) or participant not in trial.nodes: raise ContractError('shared-authority', participant, p) if participant in record.shared: return use_key = (host, port) if trial.port_uses.get(use_key, 0) >= offered.capacity: raise ContractError('port-capacity', participant, p) trial.port_uses[use_key] = trial.port_uses.get(use_key, 0) + 1 trial.reverse_shared.setdefault(participant, set()).add(p) from .contracts import Rule node = trial.nodes[participant] node.shared_bindings = node.shared_bindings + ((host, port, p),) node.contract = replace(node.contract, rules=node.contract.rules + (Rule('support', (p,)),)) trial.blocks[p] = replace(record, shared=tuple(sorted(set(record.shared + (participant,))))) trial.relations.add((participant, 'shares_support', host)) trial._check(False) self._commit(trial) def remove(self, path): trial = self._fork() trial._remove_branch(path) trial._check(False) self._commit(trial) def _remove_branch(self, path): paths = {k for k in self.nodes if k == path or k.startswith(path + '/')} affected = set() for k in sorted(paths, reverse=True): current = set(self.reverse[k]) | set(self.displaced.get(k, {})) for p in current: record = self.blocks.get(p) # A descendant can refill a parent's cut. Its removal consumes # that current cell before the parent's displaced record is # visited; keep coordinates vacated by this traversal eligible. if record is None and self.erasures.get(p) not in paths and p not in affected: continue if record is not None and record.owner not in paths and self.operations[record.operation]['component'] not in paths: continue affected.add(p) if record is not None: self.reverse[record.owner].discard(p) self.erasures.pop(p, None) previous = self.displaced.get(k, {}).get(p) if previous and previous.owner in self.nodes and previous.owner not in paths: self.blocks[p] = previous self.reverse[previous.owner].add(p) else: self.blocks.pop(p, None) self.displaced.pop(k, None) for d in self.dependencies: if d['consumer'] not in paths and (d['source'] in paths or any(d['region'].contains(p) for p in affected)): self.nodes[d['consumer']].stale = True for k in sorted(paths, reverse=True): self.reverse_shared.pop(k, None) self.reverse[k].clear() self._retire(k) self.relations = {r for r in self.relations if r[0] in self.nodes and r[2] in self.nodes} for p, record in list(self.blocks.items()): if set(record.shared).intersection(paths): self.blocks[p] = replace(record, shared=tuple(s for s in record.shared if s not in paths)) def regenerate(self, path, component=None, params=None, dependents=(), seed=None, replacements=None): trial = self._fork() targets = [path] + list(dependents) updates = dict(replacements or {}) if set(updates) - set(targets) or len(set(targets)) != len(targets): raise ContractError('replay-targets', path, conditions='Replacements must name distinct explicit replay targets') if component is not None: if path in updates: raise ContractError('replay-targets', path, conditions='Supply a root replacement only once') updates[path] = component recipes = {} for p in targets: if p in trial._recipes: recipes[p] = trial._recipes[p] elif p in updates: n = trial.nodes[p] recipes[p] = (updates[p], n.parameters.get('arguments', {}), n.frame, n.bindings, n.parent, n.scope, n.complete) else: raise ContractError('replay-implementation', p, conditions='Reloaded branch needs an explicitly supplied component implementation') for p in targets: trial._remove_branch(p) for p in targets: comp, oldparams, frame, bindings, parent, scope, complete = recipes[p] if p == path and seed is not None: scope = scope.child('override', seed) trial._instantiate(p, updates.get(p, comp), params if p == path and params is not None else oldparams, frame, bindings, parent, scope, complete) trial._check(True) self._commit(trial) self.events.append({'kind': 'regenerated', 'targets': targets}) def describe_inputs(value): """Record declared public inputs without concrete-component dispatch.""" if value is None or isinstance(value, (str, int, float, bool)): return value if isinstance(value, (list, tuple)): return [describe_inputs(v) for v in value] if isinstance(value, dict): return {str(k): describe_inputs(v) for k, v in value.items()} if is_dataclass(value): return {'type': type(value).__module__ + '.' + type(value).__qualname__, 'inputs': {f.name: describe_inputs(getattr(value, f.name)) for f in fields(value)}} if callable(value): return {'program': value.__module__ + '.' + value.__qualname__} return {'type': type(value).__module__ + '.' + type(value).__qualname__, 'inputs': {k: describe_inputs(v) for k, v in vars(value).items() if not k.startswith('_')}}
hearth/kernel/__init__.py
# Public composition kernel, independent of architectural implementations. from .contracts import Binding, Capability, Child, Choice, Component, Contract, Domain, Grant, Plan, Port, Registry, Rule, Write from .errors import ContractError, Diagnostic, SearchExhausted, ValidationError from .scene import Context, Limits, Scene from .validation import validate, validator
hearth/environment/fields.py
# Serializable scalar-field expressions; recognizable terrain emerges from parameters. from dataclasses import dataclass import math @dataclass(frozen=True) class Field: op: str args: tuple def __call__(self, x, z): a = self.args if self.op == 'constant': return a[0] if self.op == 'gradient': return a[0] * x + a[1] * z + a[2] if self.op == 'wave': return a[0] * math.sin(x * a[1] + a[3]) * math.cos(z * a[2] + a[3]) if self.op == 'radial': return a[3] * max(0, 1 - math.hypot(x - a[0], z - a[1]) / a[2]) if self.op == 'add': return a[0](x, z) + a[1](x, z) if self.op == 'multiply': return a[0](x, z) * a[1](x, z) if self.op == 'blend': mask = min(1, max(0, a[2](x, z))) return (1 - mask) * a[0](x, z) + mask * a[1](x, z) if self.op == 'transform': return a[0]((x - a[1]) / a[3], (z - a[2]) / a[3]) if self.op == 'clamp': return max(a[1], min(a[2], a[0](x, z))) raise ValueError(self.op) def __add__(self, other): return Field('add', (self, as_field(other))) def __mul__(self, other): return Field('multiply', (self, as_field(other))) def blend(self, other, mask): return Field('blend', (self, as_field(other), as_field(mask))) def transformed(self, dx=0, dz=0, scale=1): if scale <= 0: raise ValueError('Scale must be positive') return Field('transform', (self, dx, dz, scale)) def clamp(self, low, high): return Field('clamp', (self, low, high)) def expression(self): return {'op': self.op, 'args': [a.expression() if isinstance(a, Field) else a for a in self.args]} def as_field(value): return value if isinstance(value, Field) else constant(value) def constant(value=0): return Field('constant', (value,)) def gradient(x=0, z=0, base=0): return Field('gradient', (x, z, base)) def wave(amplitude=1, frequency_x=0.1, frequency_z=0.1, phase=0): return Field('wave', (amplitude, frequency_x, frequency_z, phase)) def radial(x, z, radius, amplitude): if radius <= 0: raise ValueError('Radius must be positive') return Field('radial', (x, z, radius, amplitude)) def from_expression(expression): """Restore only declared field operations, never execute a serialized program.""" return Field(expression['op'], tuple(from_expression(a) if isinstance(a, dict) and 'op' in a else a for a in expression['args']))
hearth/environment/terrain.py
# Frozen field sampling, strata and water under scoped edit interfaces. import math from dataclasses import dataclass from hearth.space import Box, Frame from hearth.blocks import state_of from hearth.kernel import Capability, Contract, Grant, Port, Plan, Rule from .fields import Field @dataclass(frozen=True) class Terrain: area: Box field: Field water_level: int | None = None edit_limit: int = 2500 def capability(self): return Capability('terrain.field', ('environment', 'ground'), offers=('construction', 'planting'), guarantees=('frozen field inputs', 'actual 3D substrate')) def negotiate(self, ctx, parameters): ports = tuple(Port(k, k, Frame(self.area.lo), self.area, capacity=100000, grant=k) for k in ('construction', 'planting')) grants = (Grant('construction', self.area, ('excavate', 'fill', 'surface'), ('siteworks', 'path', 'pool'), self.edit_limit), Grant('planting', self.area, ('plant',), ('plant',), 0)) return Contract(self.area, ports, grants, decisions={'expression': self.field.expression(), 'water': self.water_level, 'edit_limit': self.edit_limit}) def realize(self, ctx, contract): plan = Plan() x0, bottom, z0 = self.area.lo x1, top, z1 = self.area.hi for x in range(x0, x1 + 1): for z in range(z0, z1 + 1): height = math.floor(self.field(x, z)) if not bottom <= height < top: raise ValueError(f'Terrain field exceeds negotiated vertical domain at {(x,z)}') for y in range(bottom, height + 1): material = 'stone' if y < height - 2 else ('dirt' if y < height else 'grass_block') if self.water_level is not None and height < self.water_level: material = 'gravel' if y == height else material plan.block((x, y, z), state_of(material), 'strata') if self.water_level is not None: for y in range(height + 1, self.water_level + 1): plan.block((x, y, z), state_of('water', level='0'), 'water-volume') return plan
hearth/environment/__init__.py
# Public environment operations. from .fields import Field, constant, gradient, radial, wave from .terrain import Terrain
hearth/components/primitives.py
# Small architectural components with executable contracts. from dataclasses import dataclass from hearth.space import Box, Frame from hearth.blocks import AIR, state_of, log, leaves, name_of from hearth.kernel import Capability, Contract, Domain, Grant, Port, Rule, Plan, Child, Binding, ContractError @dataclass(frozen=True) class Volume: box: Box material: str role: str = 'masonry' def capability(self): return Capability('volume.' + self.role, (self.role,)) def negotiate(self, ctx, parameters): return Contract(self.box) def realize(self, ctx, contract): plan = Plan() plan.fill(self.box, self.material) return plan @dataclass(frozen=True) class Grass: tall: bool = False def capability(self): return Capability('plant.grass', ('plant',), offers=('replacement',), assumptions=('substrate',)) def negotiate(self, ctx, parameters): box = Box((0, 0, 0), (0, int(self.tall), 0)) return Contract(box, (Port('replacement', 'planting', Frame(), box, grant='replace'),), (Grant('replace', box, ('plant',), ('tree',), 2, True),), (Rule('support', ((0, -1, 0),)),), atomic_object=True) def realize(self, ctx, contract): plan = Plan() if self.tall: for y, half in enumerate(('lower', 'upper')): plan.block((0, y, 0), state_of('tall_grass', half=half)) else: plan.block((0, 0, 0), state_of('short_grass')) return plan @dataclass(frozen=True) class Tree: height: int = 10 radius: int = 3 def planting_clearance(self): """Offer trunk and crown clearance separately, leaving understory space.""" return (Box((0, 0, 0), (0, self.height - 1, 0)), Box((-self.radius, 3, -self.radius), (self.radius, self.height, self.radius))) def capability(self): return Capability('plant.conifer', ('plant', 'tree'), {'height': Domain(5, 18), 'radius': Domain(1, 4)}, assumptions=('substrate',), adaptations=('prune canopy against obstacles within accepted radius',), version='2') def negotiate(self, ctx, parameters): h, r = parameters.get('height', self.height), parameters.get('radius', self.radius) if not 5 <= h <= 18 or not 1 <= r <= 4: raise ContractError('tree-domain', ctx.path) return Contract(Box((-r, 0, -r), (r, h, r)), rules=(Rule('support', ((0, -1, 0),)), Rule('expected', ((0, 0, 0),), data={'names': ['spruce_log']})), decisions={'height': h, 'radius': r}, reads=(Box((-r, -1, -r), (r, h, r)),)) def realize(self, ctx, contract): p = Plan() h = contract.decisions['height'] radius = contract.decisions['radius'] for y in range(h): p.block((0, y, 0), log()) from math import ceil # Each branch tier tapers over two layers, separated by exposed trunk. # Radius follows remaining crown height, preserving a pointed silhouette. layers = {h: 0, h - 1: 1} for base in range(3, h, 3): r = min(radius, ceil(radius * (h - base) / max(1, h - 3))) layers[base] = r if base + 1 < h: layers[base + 1] = max(0, r - 1) for y, r in sorted(layers.items()): for x in range(-r, r + 1): for z in range(-r, r + 1): if abs(x) + abs(z) > r or (x == 0 and z == 0 and y < h): continue q = ctx.world((x, y, z)) if ctx.view.domain and not ctx.view.domain.contains(q): continue if name_of(ctx.view.state(q)) == 'air': p.block((x, y, z), leaves()) return p @dataclass(frozen=True) class Wall: width: int = 9 height: int = 5 thickness: int = 1 infill: str | None = None timber: str = 'stripped_spruce' def capability(self): return Capability('wall.framed', ('wall', 'enclosure'), offers=('window', 'door'), assumptions=('floor below',), guarantees=('frame preserved', 'sealed infill'), inputs={'width': Domain(5, 64), 'height': Domain(4, 12), 'thickness': Domain(1, 3), 'frame.turn': Domain(choices=(0, 1, 2, 3))}, locked=('width', 'height', 'thickness', 'infill')) def negotiate(self, ctx, parameters): w, h, t = self.width, self.height, self.thickness if not 5 <= w <= 64 or not 4 <= h <= 12 or not 1 <= t <= 3: raise ContractError('wall-domain', ctx.path) box = Box((0, 0, 0), (w - 1, h - 1, t - 1)) install = Box((1, 0, 0), (w - 2, h - 2, t - 1)) ports = (Port('infill', 'wall-installation', Frame((1, 0, 0)), install, 20, 'install', 1, {'thickness': t, 'sill': 1, 'margin': 1}),) grants = (Grant('install', install, ('install',), ('window', 'door'), w * h * t),) boundary = tuple(box.cells()) frame = tuple((x, y, z) for x in (0, w - 1) for y in range(-1, h) for z in range(t)) return Contract(box, ports, grants, (Rule('support', frame), Rule('sealed', boundary, phase='complete')), decisions={'width': w, 'height': h, 'thickness': t}) def realize(self, ctx, contract): p = Plan() p.fill(contract.envelope, self.infill or ctx.view.style['infill']) for x in (0, self.width - 1): p.fill(Box((x, 0, 0), (x, self.height - 1, self.thickness - 1)), log(self.timber)) p.fill(Box((0, self.height - 1, 0), (self.width - 1, self.height - 1, self.thickness - 1)), log(self.timber, 'x')) return p @dataclass(frozen=True) class Window: width: int = 2 height: int = 2 shutters: bool = True glass: str = 'minecraft:glass' planter: bool = False garden_depth: int = 1 def capability(self): return Capability('window.shuttered' if self.shutters else 'window.lattice', ('window', 'sealed-opening'), offers=('daylight', 'window-garden'), adaptations=('depth reveal',), guarantees=('sealed opening', 'frame margins'), version='2') def negotiate(self, ctx, parameters): if not ctx.bindings: raise ContractError('window-host', ctx.path) port = ctx.view.port(ctx.bindings[0].host, ctx.bindings[0].port) if self.garden_depth not in (1, 2): raise ContractError('window-garden-depth', ctx.path) depth = port.facts['thickness'] box = Box((-1, -1, -self.garden_depth), (self.width, self.height - 1, depth - 1)) inner = Box((0, 0, 0), (self.width - 1, self.height - 1, depth - 1)) if not all(port.region.contains(ctx.world(q)) for q in inner.corners()): raise ContractError('window-margins', ctx.path, ctx.frame.origin, 'Opening crosses excluded framing') garden = Box((-1 if self.garden_depth == 2 else 0, -1, -self.garden_depth), (self.width if self.garden_depth == 2 else self.width - 1, 0, -1)) port = Port('garden', 'window-garden', Frame((0, -1, -1)), garden, 1, 'planting', facts={'width': self.width, 'depth': self.garden_depth}) grant = Grant('planting', garden, ('install',), ('planter',), (self.width + 2) * 4) return Contract(box, ports=(port,), grants=(grant,), rules=(Rule('sealed', tuple(inner.cells())),), decisions={'depth': depth, 'planter': self.planter}) def realize(self, ctx, contract): p = Plan() d = contract.decisions['depth'] for z in range(d): p.fill(Box((0, 0, z), (self.width - 1, self.height - 1, z)), self.glass, 'glazing') if self.shutters: from hearth.blocks import slab for x in (-1, self.width): for y in range(self.height): p.block((x, y, -1), state_of('spruce_trapdoor', facing='north', half='bottom', open='true', powered='false', waterlogged='false'), 'shutters') for x in range(self.width): p.block((x, -1, -1), slab('spruce', 'top'), 'sill') else: for x in range(self.width): p.block((x, self.height - 1, -1), state_of('spruce_trapdoor', facing='north', half='top', open='false', powered='false', waterlogged='false'), 'hood') if self.planter: from .windowbox import WindowBox p.children.append(Child('box', WindowBox(), frame=Frame((0, -1, -1)), bindings=(Binding(ctx.path, 'garden'),))) return p @dataclass(frozen=True) class Pool: width: int = 7 depth: int = 6 def capability(self): return Capability('water.basin', ('pool', 'siteworks'), adaptations=('bounded excavation',), guarantees=('contained water',)) def negotiate(self, ctx, parameters): box = Box((0, -2, 0), (self.width - 1, 0, self.depth - 1)) water = tuple(Box((1, -1, 1), (self.width - 2, 0, self.depth - 2)).cells()) return Contract(box, rules=(Rule('pool', water),), decisions={'excavation_limit': box.volume}) def realize(self, ctx, contract): p = Plan() p.fill(contract.envelope, state_of('smooth_sandstone'), 'basin') p.fill(Box((1, -1, 1), (self.width - 2, 0, self.depth - 2)), state_of('water', level='0'), 'water') return p @dataclass(frozen=True) class Assembly: name: str envelope: Box children: tuple[Child, ...] rules: tuple[Rule, ...] = () ports: tuple[Port, ...] = () def capability(self): return Capability(self.name, ('composite',)) def negotiate(self, ctx, parameters): return Contract(self.envelope, ports=self.ports, rules=self.rules) def realize(self, ctx, contract): return Plan(children=list(self.children))
hearth/components/__init__.py
# Public architectural components and their explicit intent records. from .building import Blueprint, Building, RoomSpec, adapted from .interior import Room, Light, Furniture, Door, Stair from .primitives import Wall, Window, Tree, Grass, Pool, Assembly from .facades import FacadeDesign from .domestic import DomesticSuite from .windowbox import WindowBox from .borders import GardenPlant, BoundaryPlanting from .ceiling import CeilingTimbers from .lofts import InhabitedRoof, LoftInterior, RoofPlatform from .roomlayout import InteriorDesign, FittedInterior from .hospitality import Hearth, DiningSet from .rooflantern import RidgeMount, RidgeLantern, GlazedPanel
hearth/components/interior.py
# Usable doors, lights and furnished rooms assembled as semantic children. from dataclasses import dataclass from hearth.space import Box, Frame from hearth.blocks import state_of, stairs, slab, log from hearth.kernel import Capability, Contract, Domain, Grant, Port, Rule, Plan, Child, Binding, ContractError from .primitives import Volume, Wall, Window from .roofcraft import FlushWindow from .circulation import StairLayout @dataclass(frozen=True) class Door: material: str = 'spruce' def capability(self): return Capability('opening.door', ('door', 'access'), guarantees=('paired halves', 'support', 'operable exit')) def negotiate(self, ctx, parameters): return Contract(Box((0, 0, 0), (0, 1, 0)), rules=(Rule('support', ((0, -1, 0),)),), atomic_object=True) def realize(self, ctx, contract): p = Plan() for y, half in enumerate(('lower', 'upper')): p.block((0, y, 0), state_of(self.material + '_door', facing='north', half=half, hinge='left', open='false', powered='false')) return p @dataclass(frozen=True) class Light: hanging: bool = True def capability(self): return Capability('light.lantern', ('light', 'room-light'), guarantees=('actual light source',)) def negotiate(self, ctx, parameters): return Contract(Box((0, 0, 0), (0, 1, 0)), rules=(Rule('expected', ((0, 0, 0),), data={'names': ['lantern']}),)) def realize(self, ctx, contract): p = Plan() p.block((0, 0, 0), state_of('lantern', hanging=str(self.hanging).lower(), waterlogged='false')) if self.hanging: p.block((0, 1, 0), state_of('chain', axis='y', waterlogged='false')) return p @dataclass(frozen=True) class Furniture: purpose: str = 'living' width: int = 11 depth: int = 11 def capability(self): return Capability('furniture.' + self.purpose, ('furniture', self.purpose), guarantees=('usable function',)) def negotiate(self, ctx, parameters): if self.purpose not in ('living', 'bedroom', 'workshop', 'library', 'kitchen', 'storage'): raise ContractError('room-function', ctx.path, conditions=self.purpose) return Contract(Box((1, 0, 1), (self.width - 2, 2, self.depth - 2))) def realize(self, ctx, contract): p = Plan() w, d = self.width, self.depth inventory = {'id': 'minecraft:barrel', 'Items': [{'Slot': 0, 'id': 'minecraft:bread', 'count': 6}, {'Slot': 1, 'id': 'minecraft:torch', 'count': 12}]} p.block((1, 0, d - 2), state_of('barrel', facing='north', open='false'), 'supplies', nbt=inventory) if self.purpose == 'bedroom': for z, part in ((2, 'foot'), (3, 'head')): p.block((2, 0, z), state_of('red_bed', facing='south', part=part, occupied='false'), 'bed') p.block((2, 0, d - 3), state_of('bookshelf')) elif self.purpose == 'library': for x in (2, 3, w - 3): for y in range(2): p.block((x, y, d - 2), state_of('bookshelf')) p.block((2, 0, 2), state_of('lectern', facing='south', has_book='false', powered='false')) elif self.purpose == 'workshop': p.block((2, 0, 2), state_of('crafting_table')) p.block((3, 0, 2), state_of('smithing_table')) p.block((2, 0, d - 3), state_of('anvil', facing='north')) elif self.purpose == 'kitchen': p.block((2, 0, 2), state_of('smoker', facing='south', lit='false')) p.block((3, 0, 2), state_of('furnace', facing='south', lit='false')) p.block((2, 0, d - 3), state_of('crafting_table')) else: for z in (2, 3): p.block((2, 0, z), stairs('spruce', 'east'), 'bench') p.block((w - 3, 0, d - 1 - z), stairs('spruce', 'west'), 'bench') p.block((3, 0, 2), state_of('spruce_fence', north='false', south='false', east='false', west='false', waterlogged='false')) p.block((3, 1, 2), state_of('spruce_pressure_plate', powered='false'), 'table') # Rugs avoid the central circulation cross and door landings. for x in (3, 4): for z in (d - 4, d - 3): p.block((x, 0, z), state_of('red_carpet'), 'rug') return p @dataclass(frozen=True) class Stair: rise: int = 6 width: int = 2 def capability(self): return Capability('circulation.stair', ('stairs', 'vertical-access'), guarantees=('walkable flight', 'two-block headroom')) def negotiate(self, ctx, parameters): points = tuple((x, i + 1, i) for i in range(self.rise) for x in range(self.width)) clear = tuple((x, i + k, i) for i in range(self.rise) for x in range(self.width) for k in (1, 2, 3)) support = tuple((x, i, i) for i in range(self.rise) for x in range(self.width)) box = Box((0, 0, -1), (self.width - 1, self.rise + 2, self.rise)) return Contract(box, rules=(Rule('support', support), Rule('clear', clear), Rule('route', points, box, phase='complete'))) def realize(self, ctx, contract): p = Plan() for i in range(self.rise): for x in range(self.width): for y in range(max(0, i - 1), i): p.block((x, y, i), state_of('spruce_planks'), 'stringer') p.block((x, i, i), stairs('spruce', 'south'), 'tread') return p @dataclass(frozen=True) class Room: purpose: str width: int = 11 depth: int = 11 doors: tuple[str, ...] = ('north',) windows: tuple[str, ...] = ('north', 'east', 'south', 'west') upper_open: bool = False stair_up: bool = False stair_down: bool = False window_component: object = None light_component: object = None sheltered_sides: tuple[str, ...] = () flush_sides: tuple[str, ...] = () facade_exclusions: tuple[Box, ...] = () facade_design: object = None occluded_sides: tuple[str, ...] = () stair_axis: str = 'z' interior_design: object = None def capability(self): return Capability('room.' + self.purpose, ('room', 'habitable', 'composite'), offers=('access', 'ceiling-decoration', 'upper-floor-access'), guarantees=('lit', 'furnished', 'reachable', 'enclosed'), adaptations=('facade grid', 'substitutable windows and lights'), inputs={'stair_axis': Domain(choices=('x', 'z')), 'width': Domain(choices=(9, 11, 13)), 'depth': Domain(choices=(9, 11, 13)), 'purpose': Domain(choices=('living', 'bedroom', 'library', 'workshop', 'kitchen', 'storage'))}, locked=('purpose', 'width', 'depth', 'doors', 'stair_up', 'stair_down', 'stair_axis'), version='4') def negotiate(self, ctx, parameters): w, d = self.width, self.depth stair_layout = StairLayout(w, d, self.stair_axis) aperture_cells = set(stair_layout.slot.cells()) if w not in (9, 11, 13) or d not in (9, 11, 13): raise ContractError('room-domain', ctx.path) doors = {'north': (w // 2, 1, 0), 'south': (w // 2, 1, d - 1), 'west': (0, 1, d // 2), 'east': (w - 1, 1, d // 2)} points = [doors[k] for k in self.doors] + [(w // 2, 1, d // 2)] if not self.doors: points = [(w // 2, 1, d // 2)] interior = Box((1, 1, 1), (w - 2, 5, d - 2)) boundary = [] for x in range(w): for z in range(d): # Upper landing leaves only the required stair slot open. if not (self.stair_down and (x, 0, z) in aperture_cells): boundary.append((x, 0, z)) if not (self.stair_up and (x, 0, z) in aperture_cells): boundary.append((x, 6, z)) function = {'bedroom': [['red_bed'], ['barrel']], 'workshop': [['crafting_table'], ['smithing_table']], 'library': [['bookshelf'], ['lectern']], 'kitchen': [['smoker'], ['furnace']], 'living': [['spruce_stairs'], ['barrel']], 'storage': [['barrel']]} rules = (Rule('route', tuple(points), Box((0, 1, 0), (w - 1, 8, d - 1)), phase='complete'), Rule('light', tuple(points), Box((0, 1, 0), (w - 1, 5, d - 1)), {'minimum': 1}, 'complete'), Rule('furnishing', box=interior, data={'groups': function[self.purpose]}, phase='complete'), Rule('sealed', tuple(boundary), phase='complete')) ports = tuple(Port(side, 'access', Frame(p), Box(p, (p[0], p[1] + 1, p[2])), 10) for side, p in doors.items() if side in self.doors) ceiling = Box((0, 5, 0), (w - 1, 5, d - 1)) ports += (Port('ceiling', 'ceiling-decoration', Frame((0, 5, 0)), ceiling, 4, 'ceiling-mount', facts={'width': w, 'depth': d, 'projection': 1, 'replace_limit': 0}),) if self.stair_up: slot = stair_layout.slot aperture = Box((slot.lo[0], 6, slot.lo[2]), (slot.hi[0], 8, slot.hi[2])) ports += (Port('upper-floor', 'upper-floor-access', Frame((0, 6, 0)), aperture, 1, facts={'landing': stair_layout.landing, 'floor_plane': 0, 'headroom': 3, 'coordinate_space': 'port-local', 'axis': self.stair_axis}),) grants = (Grant('ceiling-mount', ceiling, ('install',), ('ceiling-trim',), 0),) projection = 2 if self.facade_design and self.facade_design.planters else 1 return Contract(Box((-projection, 0, -projection), (w - 1 + projection, 9, d - 1 + projection)), ports=ports, grants=grants, rules=rules, decisions={'purpose': self.purpose, 'doors': self.doors, 'windows': self.windows, 'stair_up': self.stair_up, 'stair_down': self.stair_down, 'stair_axis': self.stair_axis, 'flush_sides': self.flush_sides, 'sheltered_sides': self.sheltered_sides, 'facade_exclusions': [(b.lo, b.hi) for b in self.facade_exclusions], 'facade_projection': projection, 'omitted_optional_facades': {s: 'conservative lower roof envelope' for s in self.occluded_sides}}) def realize(self, ctx, contract): w, d = self.width, self.depth stair_layout = StairLayout(w, d, self.stair_axis) aperture_cells = set(stair_layout.slot.cells()) p = Plan() floor = Plan() for x in range(w): for z in range(d): if not (self.stair_down and (x, 0, z) in aperture_cells): floor.block((x, 0, z), state_of('dark_oak_planks' if x in (1, w - 2) or z in (1, d - 2) else 'spruce_planks')) p.children.append(Child('floor', Pattern('floor', Box((0, 0, 0), (w - 1, 0, d - 1)), tuple(floor.writes)))) if not self.upper_open: p.children.append(Child('ceiling', Volume(Box((0, 6, 0), (w - 1, 6, d - 1)), state_of('spruce_planks'), 'ceiling'))) walls = {'north': (Frame((0, 1, 0)), w), 'south': (Frame((w - 1, 1, d - 1), 2), w), 'east': (Frame((w - 1, 1, 1), 1), d - 2), 'west': (Frame((0, 1, d - 2), 3), d - 2)} for side, (frame, length) in walls.items(): wallpath = ctx.path + '/wall-' + side p.children.append(Child('wall-' + side, Wall(length, 5), frame=frame)) if side in self.doors: at = frame.compose(Frame((length // 2, 0, 0))) p.children.append(Child('door-' + side, Door(), frame=at, bindings=(Binding(wallpath, 'infill'),))) if side in self.windows: from .facades import FacadeDesign layout = self.facade_design or FacadeDesign(height=2, sill=2, planters=False) for i, opening in enumerate(layout.openings(length, frame, side in self.doors, self.facade_exclusions)): at = frame.compose(Frame(opening['at'])) flush = opening['flush'] or side in self.flush_sides window = self.window_component or (FlushWindow(opening['width'], opening['height']) if flush else Window(opening['width'], opening['height'], planter=layout.planters, garden_depth=2 if layout.planters else 1)) p.children.append(Child(f'window-{side}-{i}', window, frame=at, bindings=(Binding(wallpath, 'infill'),))) from .joinery import FacadeRelief for side, (frame, length) in walls.items(): if side in self.windows and side not in self.sheltered_sides and side not in self.flush_sides: from .facades import local_exclusions p.children.append(Child('joinery-' + side, FacadeRelief(length, access=side in self.doors, exclusions=local_exclusions(self.facade_exclusions, frame)), frame=frame, bindings=(Binding(ctx.path + '/wall-' + side, 'infill', 'connect'),))) from .furnishing import FurnishingLayout furnishing = self.interior_design.component(self.purpose, stair_layout.span, stair_layout.length, self.stair_up or self.stair_down) if self.interior_design else FurnishingLayout(self.purpose, stair_layout.span, stair_layout.length, self.stair_up or self.stair_down) p.children.append(Child('furniture', furnishing, frame=stair_layout.frame.compose(Frame((0, 1, 0))))) for i, (x, z) in enumerate(((2, stair_layout.length - 3), (stair_layout.span - 3, 2))): if self.stair_up and i == 1: x = stair_layout.span // 2 p.children.append(Child(f'light-{i}', self.light_component or Light(), frame=stair_layout.frame.compose(Frame((x, 4, z))))) from .landscape import FacadeGarden p.children.append(Child('facade-garden', FacadeGarden(w, d, tuple(s for s in self.windows if s not in self.doors and s not in self.sheltered_sides and s not in self.flush_sides), self.facade_exclusions))) if self.stair_up: p.children.append(Child('stairs', Stair(), frame=stair_layout.flight)) return p @dataclass(frozen=True) class Pattern: role: str envelope: Box writes: tuple def capability(self): return Capability('surface.' + self.role, (self.role,)) def negotiate(self, ctx, parameters): return Contract(self.envelope) def realize(self, ctx, contract): return Plan(writes=list(self.writes))
hearth/components/roofs.py
# Pitched roof surfaces and open porch attachments with explicit overlap policy. from dataclasses import dataclass from hearth.space import Box, Frame from hearth.blocks import state_of, stairs, slab, log, name_of from hearth.kernel import Capability, Contract, Grant, Port, Rule, Plan, Child, Domain from .interior import Light from .primitives import Window @dataclass(frozen=True) class Roof: width: int depth: int axis: str = 'z' material: str = 'deepslate_tile' steep: bool = True def capability(self): return Capability('roof.gable', ('roof', 'enclosure'), offers=('junction',), adaptations=('abut taller wall', 'merge shared eaves'), guarantees=('pitched weather skin',)) def negotiate(self, ctx, parameters): span = self.width if self.axis == 'z' else self.depth height = (span + 2) // 2 + 2 box = Box((-1, -1, -1), (self.width, height, self.depth)) return Contract(box, (Port('junction', 'roof-seam', Frame(), box, 100, 'junction'),), (Grant('junction', box, ('join',), ('roof',), box.volume),), decisions={'axis': self.axis, 'span': span, 'steep': self.steep, 'material': self.material}) def realize(self, ctx, contract): p = Plan() w, d = self.width, self.depth span = w if self.axis == 'z' else d length = d if self.axis == 'z' else w for cross in range(-1, span + 1): step = min(cross + 1, span - cross) y = step if self.steep else (step + 1) // 2 face = ('east' if cross < span / 2 else 'west') if self.axis == 'z' else ('south' if cross < span / 2 else 'north') for along in range(-1, length + 1): x, z = (cross, along) if self.axis == 'z' else (along, cross) q = ctx.world((x, y, z)) existing = name_of(ctx.view.state(q)) if existing != 'air': # Negotiated abutment is only to actual masonry/roof boundaries. continue trim = along in (-1, length) material = 'dark_oak' if trim else self.material p.block((x, y, z), stairs(material, face), 'roof-course') for end in (0, length - 1): frame = Frame((0, 0, end)) if self.axis == 'z' else Frame((end, 0, span - 1), 3) p.children.append(Child(f'gable-{end}', Gable(span, self.steep), frame=frame)) for cross in (-1, span): for along in range(length): x, z = (cross, along) if self.axis == 'z' else (along, cross) if name_of(ctx.view.state(ctx.world((x, -1, z)))) == 'air': p.block((x, -1, z), slab('spruce', 'top'), 'eave') mid = span // 2 peak = min(mid + 1, span - mid) if self.steep else (min(mid + 1, span - mid) + 1) // 2 for along in range(-1, length + 1): x, z = (mid, along) if self.axis == 'z' else (along, mid) if name_of(ctx.view.state(ctx.world((x, peak + 1, z)))) == 'air': p.block((x, peak + 1, z), slab('dark_oak'), 'ridge') for along in (-1, length): x, z = (mid, along) if self.axis == 'z' else (along, mid) if name_of(ctx.view.state(ctx.world((x, peak + 2, z)))) == 'air': p.block((x, peak + 2, z), state_of('dark_oak_fence', north='false', south='false', east='false', west='false', waterlogged='false'), 'finial') return p @dataclass(frozen=True) class Porch: width: int depth: int = 3 balcony: bool = False rail_material: str = 'spruce' entrance_x: int | None = None maximum_post_span: int = 12 def capability(self): return Capability('attachment.porch', ('attachment', 'access', 'composite'), inputs={'width': Domain(9, None), 'maximum_post_span': Domain(6, 12)}, offers=('access',), guarantees=('sheltered access', 'bounded beam spans', 'supported canopy', 'usable upper terrace when requested')) def negotiate(self, ctx, parameters): if not 3 <= self.depth <= 5 or self.rail_material not in ('spruce', 'dark_oak'): from hearth import ContractError raise ContractError('porch-depth', ctx.path) center = self.width // 2 if self.entrance_x is None else self.entrance_x if not 2 <= center <= self.width - 3: from hearth import ContractError raise ContractError('porch-entrance-margin', ctx.path) spans = (self.width - 2) // self.maximum_post_span + 1 columns = [0, self.width - 1] for i in range(1, spans): target = round((self.width - 1) * i / spans) candidates = [x for x in range(2, self.width - 2) if abs(x - center) > 1 and all(abs(x - old) >= 3 for old in columns)] if candidates: columns.append(min(candidates, key=lambda x: (abs(x - target), x))) columns.sort() if any(b - a > self.maximum_post_span for a, b in zip(columns, columns[1:])): from hearth import ContractError raise ContractError('porch-post-spacing', ctx.path) clear = tuple((x, y, z) for x in range(center - 1, center + 2) for y in (1, 2) for z in range(-self.depth, 0)) support = tuple((x, y, -self.depth) for x in columns for y in range(6)) + tuple((x, 5, 0) for x in (0, self.width - 1)) rules = [Rule('clear', clear), Rule('support', support), Rule('route', ((center, 1, -1), (center, 1, -self.depth)), Box((0, 0, -self.depth), (self.width - 1, 3, 0)), phase='complete')] if self.balcony: guards = tuple((x, 7, -self.depth) for x in range(self.width)) + tuple((x, 7, z) for x in (0, self.width - 1) for z in range(-self.depth + 1, 0)) rules += [Rule('expected', guards, data={'names': [self.rail_material + '_fence']}), Rule('support', tuple((x, 6, z) for x in range(self.width) for z in range(-self.depth, 0)))] rules += [Rule('clear', tuple((center, y, z) for y in (7, 8) for z in range(-self.depth + 1, 1))), Rule('route', ((center, 7, 0), (center, 7, -self.depth + 1)), Box((0, 6, -self.depth), (self.width - 1, 9, 0)), phase='complete')] seats = [(x, 1, z, facing) for x, facing in ((1, 'east'), (self.width - 2, 'west')) for z in (-2,) if self.depth >= 4 and name_of(ctx.state((x, 1, z))) == 'air'] access = (center, 1, -self.depth) return Contract(Box((0, 0, -self.depth), (self.width - 1, 9, -1)), ports=(Port('front', 'access', Frame(access), Box(access, (center, 2, -self.depth)), 4),), rules=tuple(rules), decisions={'balcony': self.balcony, 'depth': self.depth, 'width': self.width, 'entrance_x': center, 'columns': columns, 'maximum_post_span': self.maximum_post_span, 'seats': seats, 'omitted_optional_seats': (2 if self.depth >= 4 else 0) - len(seats)}) def realize(self, ctx, contract): p = Plan() w, d = self.width, self.depth columns = contract.decisions['columns'] center = contract.decisions['entrance_x'] p.fill(Box((0, 0, -d), (w - 1, 0, -1)), state_of('spruce_planks'), 'deck') for x in columns: for z in (-d,): p.block((x, 1, z), state_of('stone_bricks'), 'post-shoe') p.fill(Box((x, 2, z), (x, 5, z)), log(), 'post') for x in range(w): p.block((x, 5, -d), log('spruce', 'x'), 'front-beam') if self.balcony: for z in range(-d, 0): p.block((x, 6, z), state_of('spruce_planks'), 'balcony-deck') else: for z in range(-d, 0): y = 6 + (z + d) // 3 p.block((x, y, z), stairs('deepslate_tile', 'south'), 'canopy') for column in columns: for x, facing in ((column + 1, 'east'), (column - 1, 'west')): if 0 <= x < w: p.block((x, 4, -d), stairs('spruce', facing, half='top'), 'brace') rails = [] for x in range(w): if abs(x - center) > 1: rails.append((x, 1, -d)) for x in (0, w - 1): rails.extend((x, 1, z) for z in range(-d + 1, -1)) if self.balcony: rails.extend((x, 7, -d) for x in range(w)) rails.extend((x, 7, z) for x in (0, w - 1) for z in range(-d + 1, 0)) rail_points = set(rails) neighbors = {'north': (0, 0, -1), 'south': (0, 0, 1), 'east': (1, 0, 0), 'west': (-1, 0, 0)} for x, y, z in rails: if (x in columns and y == 1 and z == -d): continue connections = {side: str((x + dx, y + dy, z + dz) in rail_points).lower() for side, (dx, dy, dz) in neighbors.items()} p.block((x, y, z), state_of(self.rail_material + '_fence', waterlogged='false', **connections), 'balustrade') for x in (1, w - 2): p.children.append(Child('lantern-' + str(x), Light(), frame=Frame((x, 3, -d + 1)))) for x, y, z, facing in contract.decisions['seats']: p.block((x, y, z), stairs('spruce', facing), 'porch-seat') return p @dataclass(frozen=True) class Gable: span: int steep: bool = True def capability(self): return Capability('wall.gable', ('wall', 'enclosure'), offers=('window',), adaptations=('abut existing upper wall',)) def negotiate(self, ctx, parameters): height = (self.span + 1) // 2 region = Box((1, 0, 0), (self.span - 2, height - 2, 0)) box = Box((0, -1, -1), (self.span - 1, height - 1, 0)) return Contract(box, (Port('infill', 'wall-installation', Frame((1, 0, 0)), region, 4, 'install', facts={'thickness': 1}),), (Grant('install', region, ('install',), ('window',), 30),)) def realize(self, ctx, contract): p = Plan() for x in range(self.span): step = min(x + 1, self.span - x) y = step if self.steep else (step + 1) // 2 for yy in range(y): if name_of(ctx.view.state(ctx.world((x, yy, 0)))) == 'air': p.block((x, yy, 0), log('spruce') if x in (0, self.span // 2, self.span - 1) else state_of('smooth_sandstone'), 'gable-infill') available = {w.point for w in p.writes} at = (self.span // 2 - 1, 0, 0) if self.steep and all((at[0] + x, y, 0) in available for x in range(2) for y in (0, 1)) and all(name_of(ctx.view.state(ctx.world((at[0] + x, 1, -1)))) == 'air' for x in range(2)): from hearth.kernel import Binding p.children.append(Child('window', Window(2, 2, False), frame=Frame(at), bindings=(Binding(ctx.path, 'infill'),))) return p
hearth/components/building.py
# Room-graph building composition and shared facade/roof planning. from dataclasses import dataclass from hearth.space import Box, Frame from hearth.kernel import Capability, Contract, Domain, Port, Plan, Child, Choice, Binding, Rule, ContractError from hearth.adapters.site import survey, Foundation, Approach, SiteLimits from .interior import Room from .roofs import Roof, Porch @dataclass(frozen=True) class RoomSpec: x: int z: int level: int purpose: str @dataclass(frozen=True) class Blueprint: rooms: tuple[RoomSpec, ...] bay: int = 11 porch: bool = True roof_axis: str = 'auto' roof_material: str = 'deepslate_tile' steep: bool = True window_component: object = None light_component: object = None roof_design: object = None porch_depth: int = 3 balcony: bool = False chimney: bool = False facade_design: object = None rail_material: str = 'spruce' attic_purpose: str | None = None porch_bays: int = 1 interior_design: object = None def normalized(self): return tuple(sorted(self.rooms, key=lambda r: (r.level, r.z, r.x, r.purpose))) @property def footprint(self): return tuple(sorted((r.x * self.bay + x, r.z * self.bay + z) for r in self.rooms if r.level == 0 for x in range(self.bay) for z in range(self.bay))) @property def chimney_anchor(self): back = max(r.z for r in self.rooms if r.level == 0) column = min(r.x for r in self.rooms if r.level == 0 and r.z == back) return (column * self.bay + self.bay // 2 - 1, (back + 1) * self.bay) @property def contact_footprint(self): cells = set(self.footprint) if self.porch: cells |= {(x, z) for x in range(self.bay * self.porch_bays) for z in range(-self.porch_depth, 0)} if self.chimney: cx, cz = self.chimney_anchor cells |= {(cx + x, cz + z) for x in range(3) for z in range(2)} return tuple(sorted(cells)) def validate(self): cells = {(r.x, r.z, r.level) for r in self.rooms} if len(cells) != len(self.rooms) or (0, 0, 0) not in cells or min(min(r.x, r.z, r.level) for r in self.rooms) < 0: raise ValueError('Unique nonnegative rooms and entrance room (0,0,0) required') if self.bay not in (9, 11, 13): raise ValueError('Supported room bays: 9, 11, 13') if not 3 <= self.porch_depth <= 5: raise ValueError('Porch depth must be 3..5') if self.porch_bays < 1 or not isinstance(self.porch_bays, int): raise ValueError('Porch bays must be a positive integer') if self.porch and any((x, 0, 0) not in cells for x in range(self.porch_bays)): raise ValueError('Porch bays require contiguous front rooms') if self.rail_material not in ('spruce', 'dark_oak'): raise ValueError('Rail material must be spruce or dark_oak') if self.attic_purpose not in (None, 'bedroom', 'library', 'storage'): raise ValueError('Attic purpose must be bedroom, library, storage or None') if self.attic_purpose is not None and self.roof_design is None: raise ValueError('Habitable attics require an explicit roof policy with roof-interior capability') if self.balcony and (not self.porch or (0, 0, 1) not in cells): raise ValueError('Balcony requires porch and front upper room') if self.balcony and any((x, 0, 1) not in cells for x in range(self.porch_bays)): raise ValueError('Balcony requires an upper room behind each porch bay') for x, z, level in cells: if level and (x, z, level - 1) not in cells: raise ValueError('Upper rooms require a supporting lower room') reached = {(0, 0, 0)} while True: more = {p for p in cells if any(sum(abs(a - b) for a, b in zip(p, q)) == 1 for q in reached)} if more <= reached: break reached |= more if reached != cells: raise ValueError('Room adjacency graph disconnected') def roof_runs(rooms, preferred_axis='auto'): """Partition exposed room tops into contiguous runs with explicit ridge axes.""" cells = {(r.x, r.z, r.level) for r in rooms} top = {q for q in cells if (q[0], q[1], q[2] + 1) not in cells} groups = [] while top: x, z, level = min(top, key=lambda v: (v[2], v[1], v[0])) axis = preferred_axis if axis == 'auto': axis = 'x' if (x + 1, z, level) in top else 'z' run = [(x, z, level)] while (run[-1][0] + (axis == 'x'), run[-1][1] + (axis == 'z'), level) in top: run.append((run[-1][0] + (axis == 'x'), run[-1][1] + (axis == 'z'), level)) top -= set(run) groups.append((x, z, level, axis, len(run))) return tuple(groups) @dataclass(frozen=True) class Building: design: Blueprint terrain: str site_limits: SiteLimits = SiteLimits() support_strategy: str | None = None def capability(self): return Capability('building.rooms', ('building', 'habitable', 'composite'), offers=('entrance', 'street', 'attachment', 'footprint-boundary'), assumptions=('known ground', 'bounded relief'), adaptations=('foundation', 'approach', 'roof junction'), guarantees=('locked room graph', 'internal reachability', 'furnishing', 'lighting'), inputs={'design.bay': Domain(choices=(9, 11, 13)), 'room_graph': 'connected integer grid with supported levels', 'relief_limit': self.site_limits.relief, 'support_height_limit': self.site_limits.support_height, 'frame.turn': Domain(choices=(0, 1, 2, 3))}, locked=('design.rooms', 'design.bay', 'design.roof_axis', 'design.porch', 'design.attic_purpose', 'design.porch_bays', 'frame.x', 'frame.z'), version='4') def negotiate(self, ctx, parameters): self.design.validate() b = self.design.bay rooms = self.design.normalized() measured = survey(ctx, self.design.contact_footprint, self.site_limits) if self.support_strategy is not None: if self.support_strategy not in measured['feasible_strategies']: raise ContractError('contact-strategy', ctx.path, ctx.frame.origin, 'Requested strategy incompatible with measured water/relief') measured['strategy'] = self.support_strategy floor = measured['floor'] height = max(r.level for r in rooms) * 6 width = (max(r.x for r in rooms) + 1) * b depth = (max(r.z for r in rooms) + 1) * b minimum = min(v[0] for v in measured['samples'].values()) front = self.site_limits.approach_length + (self.design.porch_depth if self.design.porch else 0) projection = 2 if self.design.facade_design and self.design.facade_design.planters else 1 roof_policy = self.design.roof_design roof_bound = max(roof_policy.heights(b)) + roof_policy.vertical_allowance() + 7 if roof_policy is not None and hasattr(roof_policy, 'vertical_allowance') else b + 16 box = Box((-projection, min(minimum - self.site_limits.bed_thickness + 1, 0), -front), (width - 1 + projection, floor + height + max(b + 16, roof_bound), depth + (3 if self.design.chimney else projection - 1))) points = tuple((r.x * b + b // 2, floor + r.level * 6 + 1, r.z * b + b // 2) for r in rooms) if self.design.attic_purpose is not None: points += tuple((x * b + b * (length if axis == 'x' else 1) // 2, floor + level * 6 + 7, z * b + b * (length if axis == 'z' else 1) // 2) for x, z, level, axis, length in roof_runs(rooms, self.design.roof_axis)) entrance = (b // 2, floor + 1, 0) route = Rule('route', (entrance,) + points, box, phase='complete') port = Port('entrance', 'access', Frame(entrance), Box(entrance, (entrance[0], entrance[1] + 1, entrance[2])), 10) decisions = {'floor': floor, 'relief': measured['relief'], 'wet': measured['wet'], 'foundation': measured['strategy'], 'rooms': [(r.x, r.z, r.level, r.purpose) for r in rooms], 'bay': b, 'roof_axis': self.design.roof_axis, 'porch': self.design.porch, 'roof_material': self.design.roof_material, 'steep': self.design.steep, 'balcony': self.design.balcony, 'porch_depth': self.design.porch_depth, 'chimney': self.design.chimney, 'attic_purpose': self.design.attic_purpose, 'porch_bays': self.design.porch_bays} approach = Approach(b // 2, floor, self.design.porch_depth if self.design.porch else 0, self.site_limits).negotiate(ctx, {}) access = approach.ports[0] route = Rule('route', (entrance,) + points + (access.frame.origin,), box, phase='complete') street = Port('street', access.kind, access.frame, access.region, access.capacity, facts={'external_connection_required': True}, delegate=('approach', 'street')) footprint = set(self.design.contact_footprint) edge = tuple((x, 0, z) for x, z in sorted(footprint) if any((x + dx, z + dz) not in footprint for dx, dz in ((1, 0), (-1, 0), (0, 1), (0, -1)))) boundary = Port('garden-edge', 'footprint-boundary', Frame(), Box.enclosing(edge), 100, facts={'outline': edge, 'coordinate_space': 'port-local', 'planting_authority': 'requires terrain planting binding'}) return Contract(box, ports=(port, street, boundary), rules=(route,), decisions=decisions, reads=(Box((0, minimum, 0), (width - 1, floor, depth - 1)),)) def realize(self, ctx, contract): p = Plan() b = self.design.bay floor = contract.decisions['floor'] rooms = self.design.normalized() cells = {(r.x, r.z, r.level) for r in rooms} groups = roof_runs(rooms, self.design.roof_axis) roof_axes = {(x + i * (axis == 'x'), z + i * (axis == 'z'), level): axis for x, z, level, axis, length in groups for i in range(length)} peak = max(self.design.roof_design.heights(b)) if self.design.roof_design else ((b + 1) // 2 if self.design.steep else ((b + 1) // 2 + 1) // 2) p.children.append(Child('foundation', Foundation(self.design.contact_footprint, floor, contract.decisions['foundation'], self.site_limits), bindings=(Binding(self.terrain, 'construction', 'fill', ctx.frame.box(contract.envelope)),))) # A spanning tree of vertical access: one flight per upper horizontal component. stair_columns = set() attic_columns = {(x, z, level) for x, z, level, _, _ in groups} if self.design.attic_purpose else set() for level in sorted({r.level for r in rooms if r.level}): remaining = {(x, z) for x, z, l in cells if l == level} while remaining: seed = min(remaining) connected = {seed} while True: expanded = {v for v in remaining if any(abs(v[0] - q[0]) + abs(v[1] - q[1]) == 1 for q in connected)} if expanded <= connected: break connected |= expanded root = min(connected) stair_columns.add((root[0], root[1], level - 1)) remaining -= connected stair_columns |= attic_columns stair_axes = {(x, z): axis for x, z, _, axis, _ in groups} if self.design.attic_purpose else {} for r in rooms: adjacent = {'north': (r.x, r.z - 1, r.level), 'south': (r.x, r.z + 1, r.level), 'west': (r.x - 1, r.z, r.level), 'east': (r.x + 1, r.z, r.level)} doors = tuple(side for side, q in adjacent.items() if q in cells or (side == 'north' and (r.x, r.z, r.level) in ({(0, 0, 0), (0, 0, 1)} if self.design.balcony else {(0, 0, 0)}))) # A steep roof can reach more than one storey of its neighbor. Use # every lower roof's public height profile, not a level-1 shortcut. contacts = {side: [(lower, axis) for (rx, rz, lower), axis in roof_axes.items() if (rx, rz) == (x, z) and lower < r.level and lower * 6 + 7 + peak >= r.level * 6 + 1] for side, (x, z, _) in adjacent.items()} abutments = {side for side, roofs in contacts.items() if any(axis == ('z' if side in ('north', 'south') else 'x') for _, axis in roofs)} windows = tuple(side for side, q in adjacent.items() if q not in cells and side not in abutments) exclusions = () if self.design.chimney: cx, cz = self.design.chimney_anchor exclusions = (Box((cx - r.x * b, 0, cz - r.z * b - 1), (cx - r.x * b + 2, 9, cz - r.z * b + 1)),) key = f'room-{r.x}-{r.z}-{r.level}' flush = tuple(side for side, roofs in contacts.items() if roofs) if self.design.porch and r.x < self.design.porch_bays and (r.z, r.level) == (0, 1): flush = tuple(sorted(set(flush) | {'north'})) room = Room(r.purpose, b, b, doors=doors, windows=windows, upper_open=(r.x, r.z, r.level + 1) in cells or self.design.attic_purpose is not None and (r.x, r.z, r.level) in roof_axes, stair_up=(r.x, r.z, r.level) in stair_columns, stair_down=(r.x, r.z, r.level - 1) in stair_columns, window_component=self.design.window_component, light_component=self.design.light_component, sheltered_sides=('north',) if self.design.porch and r.x < self.design.porch_bays and r.z == 0 and r.level <= 1 else (), flush_sides=flush, facade_exclusions=exclusions, facade_design=self.design.facade_design, occluded_sides=tuple(sorted(abutments)), stair_axis=stair_axes.get((r.x, r.z), 'z'), interior_design=self.design.interior_design) p.children.append(Child(key, room, frame=Frame((r.x * b, floor + r.level * 6, r.z * b)))) from .ceiling import CeilingTimbers ceiling_children = [] for r in rooms: key = f'room-{r.x}-{r.z}-{r.level}' ceiling_children.append(Child('ceiling-' + key, CeilingTimbers(), frame=Frame((r.x * b, floor + r.level * 6 + 5, r.z * b)), bindings=(Binding(ctx.path + '/' + key, 'ceiling'),))) if not self.design.attic_purpose: p.children.extend(ceiling_children) if self.design.porch: p.children.append(Child('porch', Porch(b * self.design.porch_bays, self.design.porch_depth, self.design.balcony, self.design.rail_material, b // 2), frame=Frame((0, floor, 0)), bindings=(Binding(ctx.path + '/room-0-0-0', 'north', 'connect'),))) p.children.append(Child('approach', Approach(b // 2, floor, self.design.porch_depth if self.design.porch else 0, self.site_limits), bindings=(Binding(self.terrain, 'construction', 'surface', ctx.frame.box(contract.envelope)),))) if self.design.chimney: from .masonry import Chimney from hearth.adapters.bearing import BearingCourse cx, cz = self.design.chimney_anchor level = max(r.level for r in rooms if (r.x * b + b // 2 - 1, (r.z + 1) * b) == (cx, cz)) peak = max(self.design.roof_design.heights(b)) if self.design.roof_design else (b + 1) // 2 # The cap and flues finish three cells above the measured ridge. stack_height = level * 6 + 7 + peak + 1 p.children.append(Child('chimney-bearing', BearingCourse(3, 2), frame=Frame((cx, floor - 1, cz)), bindings=(Binding(self.terrain, 'construction', 'fill'),))) p.children.append(Child('chimney', Chimney(stack_height), frame=Frame((cx, floor, cz)))) # Roof and facade planners use the same public run partition. if self.design.attic_purpose: from .lofts import RoofPlatform for i, (x, z, l, axis, length) in enumerate(groups): w = b * (length if axis == 'x' else 1) d = b * (length if axis == 'z' else 1) p.children.append(Child(f'roof-floor-{i}', RoofPlatform(w, d, axis), frame=Frame((x * b, floor + l * 6 + 6, z * b)), bindings=(Binding(ctx.path + f'/room-{x}-{z}-{l}', 'upper-floor', 'connect'),))) roof_order = list(enumerate(groups)) if self.design.attic_purpose: # Establish the taller structural gables before lower ornamental ends. # The lower covering can then negotiate against their actual solids. roof_order.sort(key=lambda item: (-item[1][2], item[0])) for i, (x, z, l, axis, length) in roof_order: w = b * (length if axis == 'x' else 1) d = b * (length if axis == 'z' else 1) if self.design.attic_purpose: from .lofts import InhabitedRoof cover = InhabitedRoof(w, d, axis, self.design.roof_material, self.design.roof_design, self.design.attic_purpose) p.children.append(Child(f'roof-{i}', cover, frame=Frame((x * b, floor + l * 6 + 6, z * b)), bindings=(Binding(ctx.path + f'/roof-floor-{i}', 'seat', 'connect'),))) else: cover = self.design.roof_design.component(w, d, axis, self.design.roof_material) if self.design.roof_design else Roof(w, d, axis, self.design.roof_material, self.design.steep) p.children.append(Child(f'roof-{i}', cover, frame=Frame((x * b, floor + l * 6 + 7, z * b)))) if self.design.attic_purpose: p.children.extend(ceiling_children) return p def contact_quality(view, path): """Score actual candidate sitework plus exposed-support proportions.""" facts = view.contract(path).decisions cost = view.cost(path, 'siteworks') exposure = 0.4 if facts['foundation'] == 'piers' and not facts['wet'] and facts['relief'] < 2 else 0 return cost['occupied'] / 100 + cost['replaced'] / 50 + exposure def adapted(key, design, terrain, frame=Frame(), limits=SiteLimits()): """Compare complete bounded support alternatives with the principal design locked.""" candidates = tuple(Child(key, Building(design, terrain, limits, strategy), frame=frame) for strategy in ('stepped', 'piers')) return Choice(key, candidates, contact_quality)
hearth/components/constraints.py
# Reusable hard preservation and clearance components. from dataclasses import dataclass from hearth.kernel import Capability, Contract, Plan, Rule from hearth.space import Box @dataclass(frozen=True) class Preserve: region: Box def capability(self): return Capability('constraint.preserve', ('constraint', 'protected-region'), guarantees=('immutable existing region',)) def negotiate(self, ctx, parameters): cells = tuple(self.region.cells()) return Contract(self.region, rules=(Rule('protected', cells, self.region, {'states': [ctx.view.state(ctx.world(p)) for p in cells]}),)) def realize(self, ctx, contract): return Plan()
hearth/components/landscape.py
# Public paths, planted borders, lamps and constrained landscape compositions. from dataclasses import dataclass from hearth.space import Box, Frame from hearth.blocks import state_of, stairs, slab, log, leaves, name_of from hearth.kernel import Capability, Contract, Port, Grant, Rule, Plan, Child, Binding, ContractError from hearth.composition import scatter from .primitives import Tree, Grass from .interior import Light @dataclass(frozen=True) class PathNetwork: waypoints: tuple[tuple[int, int], ...] links: tuple[tuple[int, int], ...] width: int = 3 gateway: tuple | None = None def capability(self): return Capability('landscape.paths', ('path', 'connection'), offers=('public-access',), adaptations=('terrain treads', 'bounded retaining edges'), guarantees=('connected public routes',)) def _points(self): points = set() for a, b in self.links: x, z = self.waypoints[a][0], self.waypoints[a][-1] xx, zz = self.waypoints[b][0], self.waypoints[b][-1] dx = 1 if xx >= x else -1 dz = 1 if zz >= z else -1 offsets = range(-(self.width // 2), self.width // 2 + 1) if x != xx: for px in range(x, xx + dx, dx): for offset in offsets: points.add((px, z + offset)) if z != zz: for pz in range(z, zz + dz, dz): for offset in offsets: points.add((xx + offset, pz)) if x == xx and z == zz: for ox in offsets: for oz in offsets: points.add((x + ox, z + oz)) return sorted(points) def negotiate(self, ctx, parameters): points = [] for x, z in self._points(): hint = min(self.waypoints, key=lambda q: abs(q[0] - x) + abs(q[-1] - z)) maximum = hint[1] + ctx.frame.origin[1] if len(hint) == 3 else None wx, _, wz = ctx.world((x, 0, z)) h = ctx.view.elevation(wx, wz, maximum=maximum) - ctx.frame.origin[1] points.append((x, h, z)) if not points: raise ContractError('empty-path', ctx.path) box = Box.enclosing(points).expand(2) targets = [] surface = {(x, z): y for x, y, z in points} for q in self.waypoints: x, z = q[0], q[-1] targets.append((x, surface[(x, z)] + 1, z)) clears = tuple((x, y + k, z) for x, y, z in points for k in (1, 2)) public = self.gateway or targets[0] interface = Box((public[0] - 1, public[1] - 1, public[2]), (public[0] + 1, public[1] + 1, public[2])) return Contract(box, ports=(Port('public', 'public-access', Frame(public), interface, 10000, 'join'),), grants=(Grant('join', interface, ('surface',), ('path',), 9),), rules=(Rule('support', tuple(points)), Rule('clear', clears), Rule('route', tuple(targets), box, phase='complete')), decisions={'surface': points, 'waypoints': self.waypoints, 'links': self.links}, reads=(box,)) def realize(self, ctx, contract): p = Plan() rng = ctx.rng('materials') heights = {(x, z): y for x, y, z in contract.decisions['surface']} for x, y, z in contract.decisions['surface']: uphill = [] for dx, dz, face in ((1, 0, 'east'), (-1, 0, 'west'), (0, 1, 'south'), (0, -1, 'north')): if heights.get((x + dx, z + dz), y) > y: uphill.append(face) material = stairs('stone_brick', uphill[0]) if uphill else state_of(rng.choice(('stone_bricks', 'stone_bricks', 'andesite', 'cobblestone', 'mossy_stone_bricks'))) p.block((x, y, z), material, 'paving') return p @dataclass(frozen=True) class Planter: width: int = 3 flowers: tuple[str, ...] = ('cornflower', 'azure_bluet', 'allium') def capability(self): return Capability('garden.planter', ('decoration', 'plant'), guarantees=('grounded bed',)) def negotiate(self, ctx, parameters): return Contract(Box((0, 0, 0), (self.width - 1, 1, 1)), rules=(Rule('support', tuple((x, -1, z) for x in range(self.width) for z in range(2))),)) def realize(self, ctx, contract): p = Plan() rng = ctx.rng('flowers') for x in range(self.width): p.block((x, 0, 0), state_of('dirt'), 'soil') p.block((x, 1, 0), state_of(rng.choice(self.flowers)), 'flower') p.block((x, 0, 1), state_of('spruce_trapdoor', facing='south', half='bottom', open='true', powered='false', waterlogged='false'), 'edging') return p @dataclass(frozen=True) class LampPost: def capability(self): return Capability('landscape.lamppost', ('light', 'outdoor-light', 'composite')) def negotiate(self, ctx, parameters): return Contract(Box((0, 0, 0), (1, 4, 0)), rules=(Rule('support', ((0, -1, 0),)),)) def realize(self, ctx, contract): p = Plan() p.block((0, 0, 0), state_of('stone_bricks')) for y in range(1, 4): p.block((0, y, 0), state_of('spruce_fence', north='false', south='false', east='false', west='false', waterlogged='false')) p.block((0, 4, 0), slab('spruce')) p.block((1, 4, 0), slab('spruce')) p.children.append(Child('lantern', Light(), frame=Frame((1, 2, 0)))) return p @dataclass(frozen=True) class Landscape: area: Box terrain: str tree_minimum: int = 6 tree_maximum: int = 14 density: float = 0.08 sample_step: int = 4 spacing: int = 10 heights: tuple[int, ...] = (9, 11, 13, 15) def capability(self): return Capability('landscape.scatter', ('landscape', 'composite'), adaptations=('clearance-aware scattering',), guarantees=('minimum tree count', 'preserved routes')) def negotiate(self, ctx, parameters): if not 1 <= self.sample_step <= 8 or self.spacing < 7 or not self.heights or any(h < 5 or h > 18 for h in self.heights): raise ContractError('landscape-domain', ctx.path) return Contract(self.area, decisions={'minimum_trees': self.tree_minimum, 'maximum_trees': self.tree_maximum, 'density': self.density}) def realize(self, ctx, contract): p = Plan() x0, _, z0 = self.area.lo x1, _, z1 = self.area.hi candidates = [(x, z) for x in range(x0 + 4, x1 - 3, self.sample_step) for z in range(z0 + 4, z1 - 3, self.sample_step)] def legal(q, accepted): x, z = q if any(abs(x - a) + abs(z - b) < self.spacing for a, b in accepted): return False h = ctx.elevation(x, z) if name_of(ctx.state((x, h, z))) != 'grass_block': return False placement = ctx.frame.compose(Frame((x, h + 1, z))) # Crown clearance does not require removing low beds or plants beneath it. regions = tuple(placement.box(region) for region in Tree(max(self.heights)).planting_clearance()) return all(ctx.view.domain.contains(c) for box in regions for c in box.corners()) and all(ctx.view.clear(box) and not ctx.view.protected(box) for box in regions) chosen = scatter(ctx, candidates, legal, self.tree_minimum, self.tree_maximum, 'trees') for i, (x, z) in enumerate(chosen): y = ctx.elevation(x, z) + 1 h = ctx.scope.child(f'tree-{i}').choose(self.heights, 'height') p.children.append(Child(f'tree-{i}', Tree(h), frame=Frame((x, y, z)), bindings=(Binding(self.terrain, 'planting', 'plant'),))) rng = ctx.rng('groundcover') for x in range(x0 + 1, x1): for z in range(z0 + 1, z1): if rng.random() > self.density or any(abs(x - a) <= 3 and abs(z - b) <= 3 for a, b in chosen): continue h = ctx.elevation(x, z) if name_of(ctx.state((x, h, z))) != 'grass_block': continue if name_of(ctx.state((x, h + 1, z))) != 'air': continue if ctx.view.protected(ctx.frame.box(Box((x, h + 1, z), (x, h + 2, z)))): continue p.children.append(Child(f'grass-{x}-{z}', Grass(), frame=Frame((x, h + 1, z)), bindings=(Binding(self.terrain, 'planting', 'plant'),))) return p @dataclass(frozen=True) class FacadeGarden: width: int depth: int sides: tuple[str, ...] exclusions: tuple[Box, ...] = () def capability(self): return Capability('facade.garden', ('decoration', 'plant'), adaptations=('avoid facade openings',), guarantees=('unobstructed doorways',)) def negotiate(self, ctx, parameters): return Contract(Box((-1, 0, -1), (self.width, 3, self.depth))) def realize(self, ctx, contract): p = Plan() w, d = self.width, self.depth frames = {'north': Frame((0, 0, -1)), 'south': Frame((w - 1, 0, d), 2), 'east': Frame((w, 0, 0), 1), 'west': Frame((-1, 0, d - 1), 3)} for side in self.sides: f = frames[side] length = w if side in ('north', 'south') else d for y in range(1, 4): q = f.point((1, y, 0)) if name_of(ctx.view.state(ctx.world(q))) == 'air' and not any(b.contains(q) for b in self.exclusions): p.block(q, leaves('oak'), 'climber') for x in (2, length - 3): q = f.point((x, 0, 0)) above = f.point((x, 1, 0)) if name_of(ctx.view.state(ctx.world(q))) == 'air' and name_of(ctx.view.state(ctx.world(above))) == 'air' and not any(b.contains(q) or b.contains(above) for b in self.exclusions): p.block(q, slab('spruce', 'top'), 'flower-shelf') p.block(above, state_of('potted_poppy' if x == 2 else 'potted_fern'), 'pot') return p @dataclass(frozen=True) class Well: def capability(self): return Capability('square.well', ('amenity', 'composite'), guarantees=('contained water', 'grounded cover')) def negotiate(self, ctx, parameters): basin = tuple((x, 1, z) for x in range(1, 3) for z in range(1, 3)) return Contract(Box((-1, 0, -1), (4, 6, 4)), rules=(Rule('support', tuple((x, -1, z) for x in range(4) for z in range(4))), Rule('pool', basin), Rule('support', tuple((x, y, z) for x, z in ((0, 0), (3, 3)) for y in range(2, 6))))) def realize(self, ctx, contract): p = Plan() p.fill(Box((0, 0, 0), (3, 1, 3)), state_of('stone_bricks'), 'basin') p.fill(Box((1, 1, 1), (2, 1, 2)), state_of('water', level='0'), 'water') for x, z in ((0, 0), (3, 3)): p.fill(Box((x, 2, z), (x, 5, z)), log(), 'post') for x in range(-1, 5): for z in range(-1, 5): p.block((x, 5 if x in (-1, 4) else 6, z), slab('dark_oak'), 'shelter') return p @dataclass(frozen=True) class Terrace: width: int = 10 depth: int = 10 def capability(self): return Capability('site.terrace', ('siteworks', 'composite'), adaptations=('small local fill', 'retaining border'), guarantees=('level civic amenity pad',)) def negotiate(self, ctx, parameters): heights = [ctx.view.elevation(ctx.world((x, 0, z))[0], ctx.world((x, 0, z))[2]) - ctx.frame.origin[1] for x in range(self.width) for z in range(self.depth)] top = max(heights) if top - min(heights) > 3: raise ContractError('terrace-relief', ctx.path, conditions='Small terrace limit is 3') region = Box((0, top, 0), (self.width - 1, top + 2, self.depth - 1)) return Contract(Box((0, min(heights), 0), (self.width - 1, top + 8, self.depth - 1)), ports=(Port('entrance', 'public-access', Frame((0, top + 1, self.depth // 2)), region, 10, 'paving'),), grants=(Grant('paving', region, ('surface',), ('path',), 32),), decisions={'height': top, 'fill': sum(top - h for h in heights), 'excavation': 0}) def realize(self, ctx, contract): p = Plan() top = contract.decisions['height'] for x in range(self.width): for z in range(self.depth): wx, _, wz = ctx.world((x, 0, z)) bed = ctx.view.elevation(wx, wz) - ctx.frame.origin[1] for y in range(bed, top + 1): material = 'cobblestone' if y < top else ('stone_bricks' if x in (0, self.width - 1) or z in (0, self.depth - 1) else 'andesite') p.block((x, y, z), state_of(material), 'terrace-paving') p.children.append(Child('well', Well(), frame=Frame((3, top + 1, 3)))) for i, x in enumerate((1, self.width - 2)): p.children.append(Child(f'planter-{i}', Planter(2), frame=Frame((x if i == 0 else x - 1, top + 1, 1)))) return p
hearth/components/roofshape.py
# Bounded roof surfaces from a cross profile intersected with optional end slopes. from dataclasses import dataclass @dataclass(frozen=True) class RoofSurface: """Evaluate a local roof height and uphill direction without writing geometry.""" levels: tuple[int, ...] length: int end_hips: tuple[int, int] = (0, 0) def __post_init__(self): if len(self.end_hips) != 2 or any(type(v) is not int or not 0 <= v <= 3 for v in self.end_hips): raise ValueError('Roof end hips require two integer depths in 0..3') if max(self.levels) - max(self.end_hips) < 4 or sum(self.end_hips) >= self.length - 1: raise ValueError('Roof hips must retain four-cell gables and a nonzero ridge') @property def span(self): return len(self.levels) - 2 @property def peak(self): return max(self.levels) @property def ridge(self): a, b = self.end_hips return (a if a else -1, self.length - 1 - b if b else self.length) def height(self, x, z): value = self.levels[x + 1] a, b = self.end_hips if a: value = min(value, self.peak - a + z) if b: value = min(value, self.peak - b + self.length - 1 - z) return value def facing(self, x, z): a, b = self.end_hips across = self.levels[x + 1] if a and self.height(x, z) < across and z < a: return 'south' if b and self.height(x, z) < across and z > self.length - 1 - b: return 'north' return 'east' if x < self.span // 2 else 'west' def previous(self, x, z): neighbors = [(a, b) for a, b in ((x - 1, z), (x + 1, z), (x, z - 1), (x, z + 1)) if -1 <= a <= self.span and -1 <= b <= self.length] return min(self.height(a, b) for a, b in neighbors)
hearth/components/hospitality.py
# Usable hearths, dining groups and measured textiles for furnished room compositions. from dataclasses import dataclass from hearth import Box, Frame from hearth.kernel import Capability, Contract, Domain, Port, Rule, Plan from hearth.blocks import state_of, stairs, slab, name_of @dataclass(frozen=True) class Hearth: """A contained campfire hearth with a clear interaction apron.""" @staticmethod def placement_geometry(): return Box((0, 0, 0), (2, 2, 1)), Box((0, 0, 2), (2, 1, 2)), (1, 0, 2) def capability(self): return Capability('furnishing.hearth', ('furniture', 'hearth', 'station'), offers=('interaction',), guarantees=('lit contained campfire', 'supported masonry', 'usable apron')) def negotiate(self, ctx, parameters): body, apron, target = self.placement_geometry() masonry = tuple(q for q in body.cells() if q != (1, 1, 1)) return Contract(Box((0, 0, 0), (2, 2, 2)), ports=(Port('use', 'interaction', Frame(target), apron, 4),), rules=(Rule('support', tuple((x, -1, z) for x in range(3) for z in range(3))), Rule('clear', tuple(apron.cells())), Rule('expected', masonry, data={'names': ['stone_bricks', 'bricks', 'stone_brick_slab']}), Rule('expected', ((1, 1, 1),), data={'names': ['campfire']}), Rule('light', (target,), Box((0, 0, 0), (2, 2, 2)), {'minimum': 1}, 'complete')), atomic_object=True) def realize(self, ctx, contract): p = Plan() p.fill(Box((0, 0, 0), (2, 0, 1)), state_of('stone_bricks'), 'hearthstone') for x in range(3): p.block((x, 1, 0), state_of('bricks'), 'fireback') p.block((x, 2, 0), slab('stone_brick', 'top'), 'mantel') p.block((x, 2, 1), slab('stone_brick', 'top'), 'mantel') for x in (0, 2): p.block((x, 1, 1), state_of('stone_bricks'), 'jamb') p.block((1, 1, 1), state_of('campfire', facing='south', lit='true', signal_fire='false', waterlogged='false'), 'contained-fire') return p @dataclass(frozen=True) class DiningSet: length: int = 3 def placement_geometry(self): return Box((0, 0, 0), (2, 1, self.length - 1)), Box((0, 0, self.length), (2, 1, self.length)), (1, 0, self.length) def capability(self): return Capability('furnishing.dining-set', ('furniture', 'seating', 'station'), inputs={'length': Domain(2, 4)}, offers=('interaction',), guarantees=('paired seating and long table', 'clear approach')) def negotiate(self, ctx, parameters): body, apron, target = self.placement_geometry() return Contract(Box((0, 0, 0), (2, 1, self.length)), ports=(Port('use', 'interaction', Frame(target), apron, 4),), rules=(Rule('support', tuple((x, -1, z) for x in range(3) for z in range(self.length + 1))), Rule('clear', tuple(apron.cells())), Rule('expected', tuple((x, 0, z) for x in (0, 2) for z in range(self.length)), data={'names': ['dark_oak_stairs']}), Rule('expected', tuple((1, 1, z) for z in range(self.length)), data={'names': ['spruce_pressure_plate']})), decisions={'length': self.length}, atomic_object=True) def realize(self, ctx, contract): p = Plan() for z in range(self.length): p.block((1, 0, z), state_of('dark_oak_fence', north=str(z > 0).lower(), south=str(z < self.length - 1).lower(), east='false', west='false', waterlogged='false'), 'table-trestle') p.block((1, 1, z), state_of('spruce_pressure_plate', powered='false'), 'tabletop') for x in (0, 2): p.block((x, 0, z), stairs('dark_oak', 'east' if x == 0 else 'west'), 'bench') return p @dataclass(frozen=True) class FloorTextiles: width: int depth: int centers: tuple excluded: tuple = () def capability(self): return Capability('furnishing.textiles', ('furniture', 'decoration'), guarantees=('supported passable rugs', 'no replacement')) def negotiate(self, ctx, parameters): excluded = set(tuple(q) for q in self.excluded) cells = set() for cx, _, cz in self.centers: for x in range(max(1, cx - 1), min(self.width - 1, cx + 2)): for z in range(max(1, cz - 1), min(self.depth - 1, cz + 2)): q = (x, 0, z) if q not in excluded and name_of(ctx.state(q)) == 'air' and ctx.view.supports(ctx.world((x, -1, z))): cells.add(q) return Contract(Box((1, 0, 1), (self.width - 2, 0, self.depth - 2)), rules=(Rule('support', tuple((x, -1, z) for x, _, z in sorted(cells))),), decisions={'cells': sorted(cells)}) def realize(self, ctx, contract): p = Plan() cells = set(tuple(q) for q in contract.decisions['cells']) for x, y, z in sorted(cells): border = any((x + dx, y, z + dz) not in cells for dx, dz in ((1, 0), (-1, 0), (0, 1), (0, -1))) p.block((x, y, z), state_of('brown_carpet' if border else 'red_carpet'), 'woven-rug') return p
hearth/components/roomlayout.py
# Public furnishing policy with bounded actual-space fitting and protected circulation. from dataclasses import dataclass from hearth import Box, Frame, ContractError from hearth.kernel import Capability, Contract, Domain, Rule, Plan, Child from hearth.navigation import floor_path from hearth.blocks import name_of from .furnishing import FurnitureGroup, GROUPS from .domestic import DomesticSuite from .hospitality import DiningSet, Hearth, FloorTextiles @dataclass(frozen=True) class InteriorDesign: minimum_stations: int = 2 maximum_stations: int = 5 table_length: int = 4 hearth: bool = True def component(self, purpose, width, depth, stair): return FittedInterior(purpose, width, depth, stair, self) @dataclass(frozen=True) class FittedInterior: purpose: str width: int depth: int stair: bool = False design: InteriorDesign = InteriorDesign() def capability(self): return Capability('furniture.fitted.' + self.purpose, ('furniture', 'composite'), inputs={'purpose': Domain(choices=tuple(GROUPS)), 'width': Domain(choices=(9, 11, 13)), 'depth': Domain(choices=(9, 11, 13)), 'design.minimum_stations': Domain(2, 5), 'design.maximum_stations': Domain(2, 6), 'design.table_length': Domain(2, 4)}, guarantees=('locked room function', 'reachable stations', 'protected circulation cross'), adaptations=('station orientation', 'compatible dining lengths', 'optional extra stations')) def units(self): primary = FurnitureGroup(self.purpose) suites = {'living': ('gathering', 'study'), 'bedroom': ('cabinet', 'study'), 'library': ('study', 'gathering'), 'kitchen': ('cooking', 'cabinet'), 'workshop': ('craft', 'cabinet'), 'storage': ('cabinet', 'craft')} choices = [primary] if self.design.hearth and self.purpose in ('living', 'library'): choices.append(Hearth()) if self.purpose in ('living', 'kitchen', 'library'): choices.extend(DiningSet(n) for n in range(self.design.table_length, 1, -1)) choices.extend(DomesticSuite(kind, 3) for kind in suites[self.purpose]) choices.extend((FurnitureGroup('storage'), DomesticSuite(suites[self.purpose][0], 2))) return choices def negotiate(self, ctx, parameters): if self.design.minimum_stations > self.design.maximum_stations: raise ContractError('furnishing-count-domain', ctx.path) w, d = self.width, self.depth area = Box((1, 0, 1), (w - 2, 0, d - 2)) center = (w // 2, 0, d // 2) stair_cells = {(x, y, z) for x in range(w - 4, w - 1) for z in range(1, d - 1) for y in range(3)} if self.stair else set() cross = {(x, y, z) for x in range(1, w - 1) for z in range(1, d - 1) if x == w // 2 or z == d // 2 for y in (0, 1)} - stair_cells clear, blocked, reserved = set(cross), set(stair_cells), set() placements, omitted = [], [] dining_placed = False units = self.units() for index, component in enumerate(units): if len(placements) >= self.design.maximum_stations: omitted.append((index, 'station budget')) continue if 'seating' in component.capability().tags and dining_placed: omitted.append((index, 'compatible dining alternative already placed')) continue occupied, apron, target = component.placement_geometry() candidates = [] rng = ctx.rng('station-' + str(index)) for x in range(1, w - 1): for z in range(1, d - 1): for turn in range(4): frame = Frame((x, 0, z), turn) body, use = frame.box(occupied), frame.box(apron) if not all(area.contains((q[0], 0, q[2])) for q in (*body.corners(), *use.corners())): continue cells, use_cells = set(body.cells()), set(use.cells()) if cells & (blocked | clear | reserved) or use_cells & blocked: continue if any(name_of(ctx.state(q)) != 'air' for q in cells | use_cells): continue if not all(ctx.view.supports(ctx.world((q[0], -1, q[2]))) for q in cells | use_cells): continue wall_distance = min(body.lo[0] - 1, w - 2 - body.hi[0], body.lo[2] - 1, d - 2 - body.hi[2]) candidates.append((wall_distance, rng.random(), frame, cells, use_cells)) selected = None for _, _, frame, cells, use_cells in sorted(candidates, key=lambda q: (q[0], q[1])): approach = frame.point(target) route = floor_path(ctx.view, ctx.frame, center, approach, area, blocked | cells) if route: selected = (frame, cells, use_cells, approach, route) break if selected is None: if index == 0: raise ContractError('principal-furnishing-fit', ctx.path, ctx.world(center)) omitted.append((index, 'no clear supported station and route')) continue frame, cells, use_cells, approach, route = selected placements.append((index, frame.origin, frame.turn, approach)) blocked |= cells reserved |= use_cells clear |= {p for x, y, z in route for p in ((x, y, z), (x, y + 1, z))} dining_placed |= 'seating' in component.capability().tags if len(placements) < self.design.minimum_stations: raise ContractError('furnishing-count', ctx.path, ctx.world(center), f'Require {self.design.minimum_stations}, fitted {len(placements)}') targets = (center, *(row[3] for row in placements)) box = Box((1, 0, 1), (w - 2, 3, d - 2)) return Contract(box, rules=(Rule('clear', tuple(sorted(clear))), Rule('route', targets, box, phase='complete'), Rule('furnishing', box=box, data={'groups': GROUPS[self.purpose]}, phase='complete')), decisions={'purpose': self.purpose, 'placements': placements, 'stations': len(placements), 'omitted_optional_stations': omitted, 'textile_exclusions': sorted(stair_cells)}) def realize(self, ctx, contract): p = Plan() units = self.units() for index, origin, turn, _ in contract.decisions['placements']: p.children.append(Child('station-' + str(index), units[index], frame=Frame(tuple(origin), turn))) centers = tuple(tuple(row[3]) for row in contract.decisions['placements']) p.children.append(Child('textiles', FloorTextiles(self.width, self.depth, centers, tuple(tuple(q) for q in contract.decisions['textile_exclusions'])))) return p
hearth/components/roofcraft.py
# Profile-driven roof assemblies with scoped, replaceable dormer openings. from dataclasses import dataclass from hearth import Box, Frame, ContractError from hearth.kernel import Capability, Contract, Domain, Port, Grant, Rule, Plan, Child, Binding from hearth.blocks import AIR, name_of, solid, state_of, stairs, slab, log from .primitives import Window from .roofshape import RoofSurface @dataclass(frozen=True) class RoofDesign: """Specify rising courses, spacing of dormers, and coherent material roles.""" rise: tuple[int, ...] = (1, 2) dormer_spacing: int = 8 dormer_sides: tuple[str, ...] = ('left', 'right') trim: str = 'dark_oak' end_hips: tuple[int, int] = (0, 0) ridge_component: object = None ridge_required: bool = False ridge_min_run: int = 0 def vertical_allowance(self): """Return the negotiated space above the profile for roof attachments.""" if self.ridge_required and self.ridge_component is None: raise ValueError('A required ridge attachment needs a component') if type(self.ridge_min_run) is not int or not 0 <= self.ridge_min_run <= 128: raise ValueError('Minimum ridge run must be an integer in 0..128') return max(4, self.ridge_component.mounting().upper if self.ridge_component else 4) def heights(self, span): if not self.rise or any(v not in (1, 2) for v in self.rise): raise ValueError('Roof rise sequence must contain only 1 or 2') if self.dormer_spacing and not 7 <= self.dormer_spacing <= 16: raise ValueError('Dormer spacing is zero or 7..16') if len(set(self.dormer_sides)) != len(self.dormer_sides) or set(self.dormer_sides) - {'left', 'right'}: raise ValueError('Dormer sides must be distinct left/right') levels = [0] for i in range((span + 1) // 2): levels.append(levels[-1] + self.rise[i % len(self.rise)]) return tuple(levels[min(x + 1, span - x)] for x in range(-1, span + 1)) def component(self, width, depth, axis, material): return ProfileRoof(width, depth, axis, material, self) def surface(self, span, length): return RoofSurface(self.heights(span), length, self.end_hips) @dataclass(frozen=True) class ProfileRoof: width: int depth: int axis: str = 'z' material: str = 'deepslate_tile' design: RoofDesign = RoofDesign() def capability(self): return Capability('roof.profile', ('roof', 'enclosure', 'composite'), offers=('roof-interior',), inputs={'width': Domain(7, 64), 'depth': Domain(7, 128), 'axis': Domain(choices=('x', 'z')), 'design.end_hips': 'two depths 0..3, four-cell residual gable and nonzero ridge'}, guarantees=('continuous weather cover', 'sealed attached dormers', 'bounded ridge attachments'), version='4') def negotiate(self, ctx, parameters): span = self.width if self.axis == 'z' else self.depth levels = self.design.heights(span) self.design.surface(span, self.depth if self.axis == 'z' else self.width) bearings = tuple((x, -1, z) for x in (0, self.width - 1) for z in range(0, self.depth, 4)) + tuple((x, -1, z) for z in (0, self.depth - 1) for x in range(0, self.width, 4)) height = max(levels) + self.design.vertical_allowance() box = Box((-1, -1, -1), (self.width, height, self.depth)) interior = Port('interior', 'roof-interior', Frame((0, -1, 0)), box, 1, 'interior-install', facts={'width': self.width, 'depth': self.depth, 'axis': self.axis, 'height': height + 1, 'coordinate_space': 'port-local', 'requires_floor_and_knee_walls': True, 'replace_limit': 0}) return Contract(box, ports=(interior,), grants=(Grant('interior-install', box, ('install',), ('roof-room',), 0),), rules=(Rule('support', bearings),), decisions={'axis': self.axis, 'span': span, 'rise': self.design.rise, 'dormer_spacing': self.design.dormer_spacing, 'dormer_sides': self.design.dormer_sides, 'end_hips': self.design.end_hips}) def realize(self, ctx, contract): span = self.width if self.axis == 'z' else self.depth length = self.depth if self.axis == 'z' else self.width frame = Frame() if self.axis == 'z' else Frame((0, 0, span - 1), 3) return Plan(children=[Child('cover', RoofCover(span, length, self.material, self.design), frame=frame)]) @dataclass(frozen=True) class RoofCover: span: int length: int material: str design: RoofDesign populate: bool = True def capability(self): return Capability('roof.weather-cover', ('roof', 'enclosure', 'composite'), offers=('roof-installation', 'ridge-installation'), adaptations=('measured solid abutments', 'scoped dormer cuts', 'fitted ridge mounts'), guarantees=('actual projected weather skin', 'bounded opening authority', 'full-height finial bases'), version='3') def negotiate(self, ctx, parameters): surface = self.design.surface(self.span, self.length) levels = surface.levels peak = max(levels) box = Box((-1, -1, -1), (self.span, peak + self.design.vertical_allowance(), self.length)) ridge, ridge_rejected = self.fit_ridge(ctx, surface) mounts, rejected = [], [] if self.design.dormer_spacing: centers = range(4, self.length - 3, self.design.dormer_spacing) for side in self.design.dormer_sides: for center in centers: frame = Frame((self.span - 1, 1, center - 2), 1) if side == 'right' else Frame((0, 1, center + 2), 3) footprint = [frame.point((x, 0, z)) for x in range(5) for z in range(3)] if any(surface.height(x, z) < levels[x + 1] for x, _, z in footprint): rejected.append((side, center, 'hip transition within mounting footprint')) continue # A bounded dormer cap follows the measured throat height, # rather than reserving air all the way above the main ridge. limit = max(4, max(surface.height(x, z) for x, _, z in footprint)) + 2 region = frame.box(Box((0, 0, 0), (4, limit, 2))) ridge_claims = tuple(ridge.frame.box(b) for b in self.design.ridge_component.mounting().occupied_envelopes) if ridge else () if any(region.intersection(claim) for claim in ridge_claims): rejected.append((side, center, 'reserved ridge attachment')) continue # Avoid prospective dormer intersection with an existing upper room/wing. if ctx.view.protected(ctx.frame.box(region)): rejected.append((side, center, 'protected circulation')) elif all(name_of(ctx.state(q)) == 'air' for q in region.cells()): mounts.append((f'{side}-{center}', frame, region)) else: rejected.append((side, center, 'existing upper volume')) ports = tuple(Port(key, 'roof-installation', frame, region, 1, key, facts={'width': 5, 'depth': 3, 'rise': self.design.rise, 'peak': peak, 'height_limit': region.hi[1] - frame.origin[1]}) for key, frame, region in mounts) grants = tuple(Grant(key, region, ('install',), ('dormer',), region.volume) for key, frame, region in mounts) if ridge: ports += (ridge,) grants += (Grant('ridge', ridge.region, ('install',), ('ridge-attachment',), ridge.facts['edit_limit']),) # Every intended roof column must retain actual solid cover after modifications. columns = tuple((x, surface.height(x, z), z) for x in range(self.span) for z in range(self.length)) rule = Rule('vertical-cover', columns, box, phase='complete') mid = self.span // 2 finials = tuple(z for z in sorted(set(surface.ridge)) if all(name_of(ctx.state((mid, peak + dy, z))) == 'air' for dy in (1, 2))) bases = Rule('expected', tuple((mid, peak + 1, z) for z in finials), data={'names': ['dark_oak_planks']}) ornaments = Rule('expected', tuple((mid, peak + 2, z) for z in finials), data={'names': ['dark_oak_fence']}) return Contract(box, ports, grants, (rule, bases, ornaments), decisions={'levels': levels, 'mounts': [(key, f.origin, f.turn) for key, f, _ in mounts], 'omitted_optional_dormers': rejected, 'peak': peak, 'end_hips': self.design.end_hips, 'finials': finials, 'ridge_mount': ridge.frame.origin if ridge else None, 'ridge_candidates': ridge_rejected, 'omitted_optional_ridge': bool(self.design.ridge_component and not ridge)}) def fit_ridge(self, ctx, surface): """Fit a public mounting description before choosing optional dormer bays.""" component = self.design.ridge_component if component is None: return None, [] if self.length < self.design.ridge_min_run: if self.design.ridge_required: raise ContractError('ridge-fit', ctx.path, conditions='Run shorter than the explicitly required ridge minimum') return None, [{'reason': 'below declared minimum ridge run', 'length': self.length}] spec = component.mounting() if 'ridge-attachment' not in component.capability().tags: raise ContractError('ridge-capability', ctx.path) mid, peak = self.span // 2, surface.peak candidates, rejected = [], [] for start in range(2, self.length - spec.length - 1): frame = Frame((mid, peak, start)) region = frame.box(spec.envelope) footprint = [(x, surface.height(mid + x, start + z) - peak, z) for x, _, z in spec.footprint.cells()] reason = None if min(y for _, y, _ in footprint) < spec.lower: reason = 'roof below accepted bearing depth' elif any(region.contains((mid, peak + 1, end)) for end in surface.ridge): reason = 'ridge end framing' elif ctx.view.protected(ctx.frame.box(region)): reason = 'protected circulation' elif any(name_of(ctx.state(q)) != 'air' for q in region.cells()): reason = 'existing structural volume' if reason: rejected.append({'start': start, 'reason': reason}) continue candidates.append((abs(start + (spec.length - 1) / 2 - (self.length - 1) / 2), start, frame, region, footprint)) if not candidates: if self.design.ridge_required: raise ContractError('ridge-fit', ctx.path, ctx.frame.origin, 'No compatible bounded ridge mount: ' + str(rejected or ['insufficient run length'])) return None, rejected or [{'reason': 'insufficient run length'}] best = min(c[0] for c in candidates) feasible = sorted((c for c in candidates if c[0] <= best + 2), key=lambda c: c[1]) _, start, frame, region, footprint = ctx.rng('ridge-layout').choice(feasible) # Four retained roof cells meet the frame along the ridge direction. # They remain clear of lower dormer throats beside the lantern body. anchors = tuple((x, surface.height(mid + x, start + z) - peak, z) for x in (-2, 2) for z in (-1, spec.length)) facts = {'length': spec.length, 'surface': footprint, 'anchors': anchors, 'coordinate_space': 'port-local', 'edit_limit': 5 * spec.length * (1 - spec.lower) + spec.length, 'feasible_starts': [c[1] for c in candidates]} return Port('ridge', 'ridge-installation', frame, region, 1, 'ridge', facts=facts), rejected def realize(self, ctx, contract): p = Plan() levels = contract.decisions['levels'] span, length = self.span, self.length surface = self.design.surface(span, length) for x in range(-1, span + 1): for z in range(-1, length + 1): y = surface.height(x, z) previous = surface.previous(x, z) material = self.design.trim if z in (-1, length) else self.material facing = surface.facing(x, z) # Two-rise courses have a full riser; stair treads alone leave a visible slit. for yy in range(previous + 1, y): if name_of(ctx.state((x, yy, z))) == 'air': p.block((x, yy, z), state_of(material + '_planks') if material in ('spruce', 'dark_oak') else state_of(material + 's'), 'riser') if name_of(ctx.state((x, y, z))) == 'air': p.block((x, y, z), stairs(material, facing), 'weather-course') elif x not in (-1, span) and z not in (-1, length) and not solid(ctx.state((x, y, z))): raise ContractError('roof-abutment', ctx.path, ctx.world((x, y, z)), 'Roof may abut actual solid boundaries only; found ' + ctx.state((x, y, z)) + ' owned by ' + str(ctx.view.owner(ctx.world((x, y, z))))) for x in (-1, span): for z in range(length): if name_of(ctx.state((x, -1, z))) == 'air': p.block((x, -1, z), slab('spruce', 'top'), 'eave-fascia') mid = span // 2 for z in range(surface.ridge[0], surface.ridge[1] + 1): if name_of(ctx.state((mid, max(levels) + 1, z))) == 'air': cap = state_of('dark_oak_planks') if z in contract.decisions['finials'] else slab(self.design.trim) p.block((mid, max(levels) + 1, z), cap, 'ridge-cap') for z in contract.decisions['finials']: p.block((mid, max(levels) + 2, z), state_of('dark_oak_fence', north='false', south='false', east='false', west='false', waterlogged='false'), 'ridge-finial') front = tuple(surface.height(x, 0) for x in range(-1, span + 1)) rear = tuple(surface.height(x, length - 1) for x in range(-1, span + 1)) p.children.append(Child('gable-front', ProfileGable(span, front, not bool(self.design.end_hips[0])))) p.children.append(Child('gable-rear', ProfileGable(span, rear, not bool(self.design.end_hips[1])), frame=Frame((span - 1, 0, length - 1), 2))) for key, origin, turn in contract.decisions['mounts'] if self.populate else (): p.children.append(Child('dormer-' + key, Dormer(self.material, self.design.trim), frame=Frame(tuple(origin), turn), bindings=(Binding(ctx.path, key),))) if self.populate and contract.decisions['ridge_mount']: p.children.append(Child('ridge-light', self.design.ridge_component, frame=Frame(tuple(contract.decisions['ridge_mount'])), bindings=(Binding(ctx.path, 'ridge'),))) return p @dataclass(frozen=True) class ProfileGable: span: int levels: tuple[int, ...] projecting_windows: bool = True def capability(self): return Capability('wall.profile-gable', ('wall', 'enclosure', 'composite'), offers=('wall-installation',), guarantees=('framed infill',)) def negotiate(self, ctx, parameters): mid = self.span // 2 height = min(self.levels[mid], self.levels[mid + 2]) region = Box((mid - 1, 0, 0), (mid + 1, height - 1, 0)) box = Box((0, -1, -1), (self.span - 1, max(self.levels), 0)) return Contract(box, (Port('infill', 'wall-installation', Frame((mid - 1, 0, 0)), region, 1, 'install', facts={'thickness': 1}),), (Grant('install', region, ('install',), ('window',), region.volume),)) def realize(self, ctx, contract): p = Plan() available = set() for x in range(self.span): for y in range(self.levels[x + 1]): if name_of(ctx.state((x, y, 0))) == 'air': material = log('spruce') if x in (0, self.span // 2, self.span - 1) or y == 0 else state_of('smooth_sandstone') p.block((x, y, 0), material, 'gable-frame') available.add((x, y, 0)) mid = self.span // 2 height = min(3, self.levels[mid] - 2) if height >= 2 and all((x, y, 0) in available for x in range(mid - 1, mid + 2) for y in range(1, height + 1)): # A canopy may occupy the sill projection while leaving the glazing bay free. # Use the ordinary flush implementation instead of blanking that whole bay. projecting = all(name_of(ctx.state((x, y, -1))) == 'air' for x in range(mid - 2, mid + 3) for y in range(height + 1)) clear_glazing = all(name_of(ctx.state((x, y, -1))) == 'air' for x in range(mid - 1, mid + 2) for y in range(1, height + 1)) if projecting or clear_glazing: # Clipped gables keep glazing within the structural face at roof junctions. window = Window(3, height) if projecting and self.projecting_windows else FlushWindow(3, height) p.children.append(Child('window', window, frame=Frame((mid - 1, 1, 0)), bindings=(Binding(ctx.path, 'infill'),))) return p @dataclass(frozen=True) class Dormer: material: str = 'deepslate_tile' trim: str = 'dark_oak' def capability(self): return Capability('roof.dormer', ('dormer', 'roof', 'composite'), offers=('daylight',), assumptions=('compatible roof-installation region',), guarantees=('sealed cheeks and glazing', 'opening to attic')) def negotiate(self, ctx, parameters): if len(ctx.bindings) != 1: raise ContractError('dormer-host', ctx.path) port = ctx.view.port(ctx.bindings[0].host, ctx.bindings[0].port) if port.kind != 'roof-installation' or port.frame != ctx.frame or port.facts.get('width') != 5 or port.facts.get('depth') != 3: raise ContractError('dormer-interface', ctx.path, ctx.frame.origin, 'Require aligned 5 by 3 roof mount') box = Box((0, 0, 0), (4, port.facts.get('height_limit', port.facts['peak'] + 2), 2)) if not all(port.region.contains(ctx.world(q)) for q in box.corners()): raise ContractError('dormer-envelope', ctx.path) # The back roof rises into the main roof; cap each column above its measured intersection. tops = [] for z in range(3): top = max([y for x in range(5) for y in range(box.hi[1] + 1) if solid(ctx.state((x, y, z)))] or [0]) tops.append(max(4, top + 1)) tops = [max(tops)] * 3 if max(tops) + 2 > box.hi[1]: raise ContractError('dormer-height', ctx.path, conditions='Insufficient height within the negotiated roof mount') boundary = tuple((x, tops[z] + min(x, 4 - x), z) for x in range(5) for z in range(3)) cheeks = tuple((x, y, z) for x in (0, 4) for z in range(3) for y in range(0, tops[z])) face = tuple((x, y, 0) for x in range(1, 4) for y in range(tops[0] + min(x, 4 - x))) return Contract(box, rules=(Rule('sealed', boundary + cheeks + face, phase='complete'),), decisions={'tops': tops}) def realize(self, ctx, contract): p = Plan() tops = contract.decisions['tops'] # Cut only the owned weather cover, leaving an open rear into the roof void. for x in range(1, 4): for z in range(1, 3): for y in range(tops[z]): if name_of(ctx.state((x, y, z))) != 'air': p.block((x, y, z), AIR, 'roof-opening') for x in (0, 4): for z in range(3): for y in range(tops[z]): p.block((x, y, z), log('spruce') if z == 0 else state_of('spruce_planks'), 'cheek') for x in range(5): for z in range(3): roof = tops[z] + min(x, 4 - x) for y in range(tops[z], roof): if z == 0 and 0 < x < 4: continue p.block((x, y, z), state_of('spruce_planks'), 'roof-riser') p.block((x, roof, z), stairs(self.trim if z == 0 else self.material, 'east' if x < 2 else 'west'), 'dormer-cap') for x in range(1, 4): for y in range(tops[0] + min(x, 4 - x)): if name_of(ctx.state((x, y, 0))) != 'air': p.block((x, y, 0), AIR, 'face-reveal') # A semantic wall owns its glass attachment. Its bottom beam preserves the roof joint. p.children.append(Child('face', DormerFace(tops[0]))) return p @dataclass(frozen=True) class DormerFace: height: int def capability(self): return Capability('wall.dormer-face', ('wall', 'enclosure', 'composite'), offers=('wall-installation',)) def negotiate(self, ctx, parameters): region = Box((1, 1, 0), (3, self.height - 1, 0)) return Contract(Box((1, 0, 0), (3, self.height + 1, 0)), ports=(Port('infill', 'wall-installation', Frame((1, 1, 0)), region, 1, 'install', facts={'thickness': 1}),), grants=(Grant('install', region, ('install',), ('window',), region.volume),)) def realize(self, ctx, contract): p = Plan() for x in range(1, 4): for y in range(self.height + min(x, 4 - x)): p.block((x, y, 0), log('spruce', 'x') if y in (0, self.height - 1) else state_of('smooth_sandstone'), 'frame') # Glazing has no exterior shutter projection outside the accepted roof mount. p.children.append(Child('window', FlushWindow(3, 2), frame=Frame((1, 1, 0)), bindings=(Binding(ctx.path, 'infill'),))) return p @dataclass(frozen=True) class FlushWindow: width: int = 3 height: int = 2 def capability(self): return Capability('window.flush', ('window', 'sealed-opening'), guarantees=('sealed glazing within host',)) def negotiate(self, ctx, parameters): if not ctx.bindings: raise ContractError('window-host', ctx.path) port = ctx.view.port(ctx.bindings[0].host, ctx.bindings[0].port) depth = port.facts['thickness'] box = Box((0, 0, 0), (self.width - 1, self.height - 1, depth - 1)) if not all(port.region.contains(ctx.world(q)) for q in box.corners()): raise ContractError('window-margins', ctx.path) return Contract(box, rules=(Rule('sealed', tuple(box.cells())),)) def realize(self, ctx, contract): p = Plan() p.fill(contract.envelope, state_of('glass'), 'glazing') return p
hearth/components/joinery.py
# Depth and joinery fitted to public wall interfaces without replacing openings. from dataclasses import dataclass from hearth import Box, ContractError from hearth.kernel import Capability, Contract, Plan, Rule from hearth.blocks import name_of, log, stairs, slab @dataclass(frozen=True) class FacadeRelief: """Fit external beams and brackets around an already installed facade.""" width: int height: int = 5 access: bool = False exclusions: tuple[Box, ...] = () def capability(self): return Capability('facade.joinery', ('decoration', 'timber-frame'), assumptions=('wall-installation host',), adaptations=('preserve shutters and other occupied facade cells',), guarantees=('one-cell projection',)) def negotiate(self, ctx, parameters): if len(ctx.bindings) != 1 or ctx.view.port(ctx.bindings[0].host, ctx.bindings[0].port).kind != 'wall-installation': raise ContractError('joinery-host', ctx.path) points = {} for x in range(self.width): points[(x, self.height - 1, -1)] = log('spruce', 'x') if not (self.access and abs(x - self.width // 2) <= 1): points[(x, -1, -1)] = slab('dark_oak', 'top') for x in (0, self.width - 1): for y in range(self.height - 1): points[(x, y, -1)] = log('stripped_spruce') for x, direction in ((1, 'east'), (self.width - 2, 'west')): points[(x, self.height - 2, -1)] = stairs('spruce', direction, 'top') available = [(q, s) for q, s in sorted(points.items()) if name_of(ctx.state(q)) == 'air' and not any(b.contains(q) for b in self.exclusions)] return Contract(Box((0, -1, -1), (self.width - 1, self.height - 1, 0)), rules=(Rule('support', ((0, self.height - 1, 0), (self.width - 1, self.height - 1, 0))),), decisions={'members': available, 'preserved_occupied_cells': len(points) - len(available)}) def realize(self, ctx, contract): p = Plan() for q, block in contract.decisions['members']: p.block(q, block, 'joinery') return p
hearth/components/furnishing.py
# Functional furniture groups and circulation-aware furnishing of rectangular rooms. from dataclasses import dataclass from hearth import Box, Frame, ContractError from hearth.kernel import Capability, Contract, Domain, Rule, Port, Plan, Child from hearth.blocks import state_of, stairs, slab GROUPS = {'living': [['spruce_stairs'], ['barrel']], 'bedroom': [['red_bed'], ['barrel']], 'library': [['bookshelf'], ['lectern']], 'kitchen': [['smoker'], ['furnace']], 'workshop': [['crafting_table'], ['smithing_table']], 'storage': [['barrel']]} def supplies(): return {'id': 'minecraft:barrel', 'Items': [{'Slot': 0, 'id': 'minecraft:bread', 'count': 6}, {'Slot': 1, 'id': 'minecraft:torch', 'count': 12}]} @dataclass(frozen=True) class FurnitureGroup: purpose: str @staticmethod def placement_geometry(): """Offer the occupied bound, required apron and approach in local coordinates.""" return Box((0, 0, 0), (1, 2, 1)), Box((0, 0, 2), (1, 1, 2)), (0, 0, 2) def capability(self): return Capability('furnishing.group.' + self.purpose, ('furniture', self.purpose), offers=('interaction',), inputs={'purpose': Domain(choices=tuple(GROUPS))}, guarantees=('complete functional group', 'supported', 'clear interaction space')) def negotiate(self, ctx, parameters): area, interaction, target = self.placement_geometry() return Contract(Box.enclosing((*area.corners(), *interaction.corners())), ports=(Port('use', 'interaction', Frame(target), interaction, 4),), rules=(Rule('support', tuple((x, -1, z) for x in range(2) for z in range(3))), Rule('clear', tuple(interaction.cells())), Rule('furnishing', box=area, data={'groups': GROUPS[self.purpose]}, phase='complete')), atomic_object=True) def realize(self, ctx, contract): p = Plan() barrel = state_of('barrel', facing='south', open='false') p.block((1, 0, 0), barrel, 'supplies', nbt=supplies()) if self.purpose == 'bedroom': for z, part in ((0, 'head'), (1, 'foot')): p.block((0, 0, z), state_of('red_bed', facing='north', part=part, occupied='false'), 'bed') p.block((1, 1, 0), state_of('potted_fern'), 'bedside') p.block((1, 0, 1), state_of('red_carpet'), 'bedside-rug') elif self.purpose == 'library': for y in range(3): p.block((0, y, 0), state_of('bookshelf'), 'bookcase') p.block((0, 0, 1), state_of('lectern', facing='south', has_book='false', powered='false'), 'lectern') p.block((1, 1, 0), state_of('bookshelf'), 'bookcase') p.block((1, 2, 0), slab('spruce'), 'shelf-cap') p.block((1, 0, 1), stairs('spruce', 'north'), 'reading-seat') elif self.purpose in ('kitchen', 'workshop'): a, b = ('smoker', 'furnace') if self.purpose == 'kitchen' else ('crafting_table', 'smithing_table') props = {'facing': 'south', 'lit': 'false'} if self.purpose == 'kitchen' else {} p.block((0, 0, 0), state_of(a, **props), 'workstation') p.block((0, 0, 1), state_of(b, **props), 'workstation') p.block((1, 0, 1), state_of('crafting_table') if self.purpose == 'kitchen' else state_of('anvil', facing='north'), 'counter') for x in range(2): p.block((x, 2, 0), slab('spruce', 'top'), 'shelf') elif self.purpose == 'living': p.block((0, 0, 0), stairs('spruce', 'south'), 'seat') p.block((1, 0, 1), stairs('spruce', 'west'), 'seat') p.block((0, 0, 1), state_of('spruce_fence', north='false', south='false', east='false', west='false', waterlogged='false'), 'table') p.block((0, 1, 1), state_of('spruce_pressure_plate', powered='false'), 'tabletop') p.block((1, 1, 0), state_of('potted_poppy'), 'flowers') else: for x, y, z in ((0, 0, 0), (0, 1, 0), (1, 1, 0), (0, 0, 1)): p.block((x, y, z), barrel, 'storage', nbt=supplies()) for x in range(2): p.block((x, 2, 0), slab('spruce'), 'shelf-cap') return p @dataclass(frozen=True) class FurnishingLayout: purpose: str width: int depth: int stair: bool = False def capability(self): return Capability('furniture.' + self.purpose, ('furniture', 'composite'), guarantees=('two or four accessible furniture groups', 'clear circulation cross'), inputs={'width': Domain(choices=(9, 11, 13)), 'depth': Domain(choices=(9, 11, 13))}) def negotiate(self, ctx, parameters): if self.purpose not in GROUPS: raise ContractError('room-function', ctx.path) w, d = self.width, self.depth frames = [Frame((1, 0, 1)), Frame((1, 0, d - 2), 3)] if not self.stair: frames += [Frame((w - 2, 0, 1), 1), Frame((w - 2, 0, d - 2), 2)] table_frames = [Frame((3, 0, 2)), Frame((3, 0, d - 5))] if w >= 11 and d >= 11 else [] # Tables occupy the wider western bays while preserving the central aisles. targets = ((w // 2, 0, d // 2), *(f.point((0, 0, 2)) for f in frames), *(f.point((0, 0, 2)) for f in table_frames)) cross = tuple((x, y, z) for x in range(1, w - 1) for z in range(1, d - 1) if (x == w // 2 or z == d // 2) and not (self.stair and x >= w - 4 and 2 <= z <= 7) for y in (0, 1)) box = Box((1, 0, 1), (w - 2, 3, d - 2)) suites = {'living': ('gathering', 'study'), 'bedroom': ('study', 'cabinet'), 'library': ('study', 'gathering'), 'kitchen': ('cooking', 'gathering'), 'workshop': ('craft', 'cabinet'), 'storage': ('cabinet', 'craft')} station_order = list(suites[self.purpose]) if ctx.rng('station-arrangement').choice((False, True)): station_order.reverse() return Contract(box, rules=(Rule('clear', cross), Rule('route', targets, box, phase='complete')), decisions={'frames': [(f.origin, f.turn) for f in frames], 'groups': len(frames), 'purpose': self.purpose, 'tables': [(f.origin, f.turn) for f in table_frames], 'stations': station_order if table_frames else []}) def realize(self, ctx, contract): p = Plan() functions = {'living': ('living', 'library', 'living', 'storage'), 'bedroom': ('bedroom', 'storage', 'bedroom', 'library'), 'kitchen': ('kitchen', 'storage', 'kitchen', 'living'), 'library': ('library', 'living', 'library', 'storage'), 'workshop': ('workshop', 'storage', 'workshop', 'library'), 'storage': ('storage',) * 4} for i, (origin, turn) in enumerate(contract.decisions['frames']): p.children.append(Child('group-' + str(i), FurnitureGroup(functions[self.purpose][i]), frame=Frame(tuple(origin), turn))) for i, (origin, turn) in enumerate(contract.decisions['tables']): from .domestic import DomesticSuite p.children.append(Child('station-' + str(i), DomesticSuite(contract.decisions['stations'][i], min(3, self.width // 2 - 3)), frame=Frame(tuple(origin), turn))) # One continuous runner occupies only the circulation cross, never the stair slot. for z in range(2, self.depth - 2): p.block((self.width // 2, 0, z), state_of('red_carpet'), 'runner') return p @dataclass(frozen=True) class TableSetting: width: int = 3 def capability(self): return Capability('furnishing.table-setting', ('furniture', 'seating'), inputs={'width': Domain(choices=(2, 3))}, offers=('interaction',), guarantees=('accessible seats and table',)) def negotiate(self, ctx, parameters): area = Box((0, 0, 0), (self.width - 1, 1, 2)) clear = tuple((x, y, 2) for x in range(self.width) for y in (0, 1)) return Contract(area, rules=(Rule('clear', clear), Rule('support', tuple((x, -1, z) for x in range(self.width) for z in range(3))), Rule('furnishing', box=area, data={'groups': [['spruce_stairs'], ['spruce_pressure_plate']]}, phase='complete')), ports=(Port('use', 'interaction', Frame((0, 0, 2)), Box((0, 0, 2), (self.width - 1, 1, 2)), 4),)) def realize(self, ctx, contract): p = Plan() table_x = 1 if self.width == 3 else 0 for z in range(2): p.block((table_x, 0, z), state_of('spruce_fence', north=str(z > 0).lower(), south=str(z == 0).lower(), east='false', west='false', waterlogged='false'), 'table') p.block((table_x, 1, z), state_of('spruce_pressure_plate', powered='false'), 'tabletop') for x in range(self.width): if x != table_x: p.block((x, 0, z), stairs('spruce', 'east' if x < table_x else 'west'), 'chair') return p
hearth/components/masonry.py
# Grounded masonry stacks composed with measured foundations and roof abutments. from dataclasses import dataclass from hearth import Box from hearth.kernel import Capability, Contract, Domain, Rule, Plan from hearth.blocks import state_of, slab @dataclass(frozen=True) class Chimney: height: int cap_overhang: int = 0 def capability(self): return Capability('masonry.chimney', ('chimney', 'support'), inputs={'height': Domain(10, 48), 'cap_overhang': Domain(choices=(0, 1))}, assumptions=('supported three by two base',), guarantees=('continuous masonry shaft', 'capped flue')) def negotiate(self, ctx, parameters): load = tuple((x, y, z) for x in (0, 2) for z in range(2) for y in range(-1, self.height)) e = self.cap_overhang cap = tuple((x, self.height, z) for x in range(-e, 3 + e) for z in range(-e, 2 + e)) flue = tuple((1, self.height + 1, z) for z in range(2)) return Contract(Box((-e, 0, -e), (2 + e, self.height + 2, 1 + e)), rules=(Rule('support', load), Rule('expected', cap, data={'names': ['stone_brick_slab']}), Rule('expected', flue, data={'names': ['cobblestone_wall']})), decisions={'height': self.height, 'cap_overhang': e, 'function': 'exterior flue; no simulated indoor heating'}) def realize(self, ctx, contract): p = Plan() rng = ctx.rng('masonry') for x in range(3): for z in range(2): for y in range(self.height): material = 'stone_bricks' if y in (0, 1, self.height - 3, self.height - 1) else rng.choice(('stone_bricks', 'stone_bricks', 'andesite', 'cobblestone')) p.block((x, y, z), state_of(material), 'shaft') for x in range(-self.cap_overhang, 3 + self.cap_overhang): for z in range(-self.cap_overhang, 2 + self.cap_overhang): p.block((x, self.height, z), slab('stone_brick', 'top'), 'cap') for z in range(2): p.block((1, self.height + 1, z), state_of('cobblestone_wall', north='low' if z else 'none', south='none' if z else 'low', east='none', west='none', up='true', waterlogged='false'), 'flue') return p
hearth/components/grounds.py
# Domestic garden courts using public access ports and bounded garden foundations. from dataclasses import dataclass from hearth import Box, Frame, ContractError from hearth.kernel import Capability, Contract, Plan, Child, Binding from hearth.adapters.site import Foundation, SiteLimits from hearth.blocks import state_of, stairs from .landscape import PathNetwork, Planter, Landscape, LampPost @dataclass(frozen=True) class RaisedBed: terrain: str width: int = 3 def capability(self): return Capability('garden.raised-bed', ('garden', 'composite'), adaptations=('bounded stepped footing',)) def negotiate(self, ctx, parameters): heights = [ctx.elevation(x, z) for x in range(self.width + 2) for z in range(4)] if max(heights) - min(heights) > 2: raise ContractError('garden-relief', ctx.path) floor = max(heights) + 1 return Contract(Box((0, min(heights) - 1, 0), (self.width + 1, floor + 1, 3)), decisions={'floor': floor}) def realize(self, ctx, contract): floor = contract.decisions['floor'] return Plan(children=[Child('footing', Foundation.rectangular(self.width + 2, 4, floor, limits=SiteLimits(support_height=3, fill_volume=60)), bindings=(Binding(self.terrain, 'construction', 'fill'),)), Child('soil', GardenSoil(self.width, floor - 1), bindings=(Binding(self.terrain, 'construction', 'fill'),)), Child('bed', Planter(self.width), frame=Frame((1, floor, 1))), Child('edging', BedBorder(self.width + 2, 4), frame=Frame((0, floor, 0)))]) @dataclass(frozen=True) class GardenSoil: width: int top: int def capability(self): return Capability('garden.soil-lift', ('siteworks', 'support'), guarantees=('continuous substrate below planting bed', 'at most two cells of fill')) def negotiate(self, ctx, parameters): from hearth.kernel import Rule columns = [(x, ctx.elevation(x, z), z) for x in range(1, self.width + 1) for z in (1, 2)] if any(self.top - y > 2 or y > self.top for x, y, z in columns): raise ContractError('garden-soil-depth', ctx.path) support = tuple((x, self.top, z) for x, _, z in columns) return Contract(Box((1, min(y for _, y, _ in columns), 1), (self.width, self.top, 2)), rules=(Rule('support', support),), decisions={'columns': columns}) def realize(self, ctx, contract): p = Plan() for x, bottom, z in contract.decisions['columns']: for y in range(bottom + 1, self.top + 1): p.block((x, y, z), state_of('dirt'), 'soil-fill') return p @dataclass(frozen=True) class BedBorder: width: int depth: int def capability(self): return Capability('garden.stone-edging', ('garden', 'masonry'), guarantees=('supported planting boundary',)) def negotiate(self, ctx, parameters): from hearth.kernel import Rule edge = tuple((x, 0, z) for x in range(self.width) for z in range(self.depth) if x in (0, self.width - 1) or z in (0, self.depth - 1)) return Contract(Box((0, 0, 0), (self.width - 1, 0, self.depth - 1)), rules=(Rule('support', tuple((x, -1, z) for x, _, z in edge)),), decisions={'edge': edge}) def realize(self, ctx, contract): p = Plan() for x, y, z in contract.decisions['edge']: face = 'south' if z == 0 else 'north' if z == self.depth - 1 else 'east' if x == 0 else 'west' p.block((x, y, z), stairs('stone_brick', face), 'edging') return p @dataclass(frozen=True) class GardenCourt: building: str terrain: str area: Box beds: int = 4 trees: int = 3 def capability(self): return Capability('garden.domestic-court', ('garden', 'composite'), assumptions=('access street port',), guarantees=('clear path to public entrance', 'bounded garden beds', 'retained building circulation')) def negotiate(self, ctx, parameters): port = ctx.view.port(self.building, 'street') if port.kind != 'access': raise ContractError('garden-access', ctx.path) access = ctx.local(port.frame.origin) gateway = (access[0], ctx.elevation(access[0], self.area.lo[2] + 2) + 1, self.area.lo[2] + 2) return Contract(self.area, decisions={'access': access, 'gateway': gateway, 'beds': self.beds, 'trees': self.trees}) def realize(self, ctx, contract): access, gateway = contract.decisions['access'], contract.decisions['gateway'] p = Plan(children=[Child('walk', PathNetwork((access, gateway), ((0, 1),)), bindings=(Binding(self.terrain, 'construction', 'surface'), Binding(self.building, 'street', 'surface')))]) for i in range(self.beds): side = -1 if i % 2 == 0 else 1 x = access[0] + (side * 5) - (2 if side < 0 else 0) z = gateway[2] + 2 + (i // 2) * 4 p.children.append(Child(f'bed-{i}', RaisedBed(self.terrain), frame=Frame((x, 0, z)))) for i, x in enumerate((access[0] - 3, access[0] + 3)): y = ctx.elevation(x, gateway[2] + 1) + 1 p.children.append(Child(f'light-{i}', LampPost(), frame=Frame((x, y, gateway[2] + 1)))) p.children.append(Child('planting', Landscape(self.area, self.terrain, self.trees, self.trees + 1, .035, sample_step=2, heights=(9, 11, 13)))) from .borders import BoundaryPlanting p.children.append(Child('borders', BoundaryPlanting(self.building, self.terrain))) return p
hearth/components/rooflantern.py
# Public ridge mounts and fitted glazed lightwells composed from real wall windows. from dataclasses import dataclass from hearth import Box, Frame, ContractError from hearth.kernel import Capability, Contract, Domain, Port, Grant, Rule, Plan, Child, Binding from hearth.blocks import AIR, name_of, solid, state_of, log, stairs @dataclass(frozen=True) class RidgeMount: """Describe a mount relative to the ridge center at the first footprint row. X crosses the ridge, Z follows it and Y is relative to the roof peak. The five-cell bearing footprint excludes the one-cell cap overhang. Hosts can fit this description without inspecting a particular attachment's geometry. """ length: int = 5 lower: int = -4 upper: int = 6 def __post_init__(self): if any(type(v) is not int for v in (self.length, self.lower, self.upper)) or self.length not in (5, 7, 9) or not -8 <= self.lower <= 0 or not 2 <= self.upper <= 12: raise ValueError('Ridge mount length is 5/7/9; lower -8..0; upper 2..12') @property def envelope(self): return Box((-3, self.lower, -1), (3, self.upper, self.length)) @property def footprint(self): return Box((-2, 0, 0), (2, 0, self.length - 1)) @property def occupied_envelopes(self): """Conservative body/cut and high-cap regions for neighboring fittings.""" return (Box((-2, self.lower, 0), (2, self.upper, self.length - 1)), Box((-3, 2, -1), (3, self.upper, self.length))) @dataclass(frozen=True) class RidgeLantern: """Fit a timber-and-glass lightwell through an aligned ridge installation.""" length: int = 5 material: str = 'deepslate_tile' timber: str = 'dark_oak' def mounting(self): return RidgeMount(self.length) def capability(self): return Capability('roof.ridge-lantern', ('roof', 'enclosure', 'ridge-attachment', 'composite'), inputs={'length': Domain(choices=(5, 7, 9)), 'timber': Domain(choices=('spruce', 'dark_oak'))}, offers=('daylight',), assumptions=('aligned ridge-installation with measured roof bearings',), adaptations=('fit ring beams to actual roof profile',), guarantees=('open daylight well', 'sealed glazing and hipped cap', 'bounded roof replacement')) def negotiate(self, ctx, parameters): if len(ctx.bindings) != 1: raise ContractError('ridge-host', ctx.path) port = ctx.view.port(ctx.bindings[0].host, ctx.bindings[0].port) if port.kind != 'ridge-installation' or port.frame != ctx.frame or port.facts.get('length') != self.length: raise ContractError('ridge-interface', ctx.path, ctx.frame.origin, 'Require aligned ridge mount of the requested length') box = self.mounting().envelope if not all(port.region.contains(ctx.world(q)) for q in box.corners()): raise ContractError('ridge-envelope', ctx.path) surface = tuple(tuple(q) for q in port.facts['surface']) anchors = tuple(tuple(q) for q in port.facts['anchors']) expected = {(x, z) for x in range(-2, 3) for z in range(self.length)} if {(x, z) for x, _, z in surface} != expected or any(y < box.lo[1] or y > 0 for _, y, _ in surface): raise ContractError('ridge-surface', ctx.path, conditions='Complete bounded local roof surface required') if len(anchors) != 4 or {(x, z) for x, _, z in anchors} != {(x, z) for x in (-2, 2) for z in (-1, self.length)} or not all(box.contains(q) for q in anchors): raise ContractError('ridge-anchors', ctx.path, conditions='Four bounded end bearings are required') for q in (*surface, *anchors): if not solid(ctx.state(q)): raise ContractError('ridge-bearing', ctx.path, ctx.world(q), 'Measured roof contact is not an actual solid cell') heights = {(x, z): y for x, y, z in surface} ring = tuple((x, y, z) for x in range(-2, 3) for z in range(self.length) if x in (-2, 2) or z in (0, self.length - 1) for y in range(min(heights[x, z], -3), -2)) posts = tuple((x, y, z) for x in (-2, 2) for z in (0, self.length - 1) for y in range(heights[x, z], 3)) cap = tuple((x, 2 + min(x + 3, 3 - x, z + 1, self.length - z, 3), z) for x in range(-3, 4) for z in range(-1, self.length + 1)) targets = ((0, -3, self.length // 2), (0, 0, 0), (0, 0, self.length - 1), (-2, 0, 1), (2, 0, 1)) rules = (Rule('support', anchors), Rule('expected', ring + posts, data={'names': [self.timber + '_log']}), Rule('sealed', cap), Rule('daylight-path', targets, Box((-2, -4, 0), (2, 2, self.length - 1)), phase='complete'), Rule('expected', ((0, 5, self.length // 2),), data={'names': [self.material + 's']}), Rule('expected', ((0, 6, self.length // 2),), data={'names': [self.timber + '_fence']})) well = Box((-1, -4, 1), (1, 1, self.length - 2)) port = Port('well', 'daylight', Frame((0, -3, self.length // 2)), well, 32, facts={'coordinate_space': 'component-local', 'player_access': False, 'transmission': 'connected air and glass; thin light hangers allowed'}) return Contract(box, ports=(port,), rules=rules, decisions={'length': self.length, 'surface': surface, 'anchors': anchors, 'ring': ring, 'posts': posts, 'cap': cap, 'well': (well.lo, well.hi)}) def realize(self, ctx, contract): from .roofcraft import FlushWindow p = Plan() # Only this bound component cuts the host. Descendant walls write into # the vacated faces and grant their own small glazing replacements. opening = Box(*contract.decisions['well']) faces = [Frame((-1, -2, 0)), Frame((1, -2, self.length - 1), 2), Frame((-2, -2, self.length - 2), 3), Frame((2, -2, 1), 1)] widths = (3, 3, self.length - 2, self.length - 2) cut = set(opening.cells()) for frame, width in zip(faces, widths): cut.update(frame.box(Box((0, 0, 0), (width - 1, 4, 0))).cells()) for q in sorted(cut): if name_of(ctx.state(q)) != 'air': p.block(q, AIR, 'lightwell-cut') for q in sorted(set(contract.decisions['ring']) | set(contract.decisions['posts'])): p.block(q, log(self.timber), 'bearing-frame') for x, y, z in contract.decisions['cap']: across, along = min(x + 3, 3 - x), min(z + 1, self.length - z) if across == along == 3 or (x == 0 and along >= 3): block = state_of(self.material + 's') else: facing = ('east' if x < 0 else 'west') if across <= along else ('south' if z < self.length // 2 else 'north') block = stairs(self.material, facing) p.block((x, y, z), block, 'hipped-cap') p.block((0, 6, self.length // 2), state_of(self.timber + '_fence', north='false', south='false', east='false', west='false', waterlogged='false'), 'finial') for key, frame, width in zip(('front', 'rear', 'left', 'right'), faces, widths): p.children.append(Child(key, GlazedPanel(width, self.timber, FlushWindow), frame=frame)) return p @dataclass(frozen=True) class GlazedPanel: """A thin supported timber panel with a scoped, replaceable glazing bay.""" width: int = 3 timber: str = 'dark_oak' window: object = None height: int = 3 def capability(self): return Capability('wall.glazed-panel', ('wall', 'enclosure', 'composite'), offers=('wall-installation',), inputs={'width': Domain(1, 9), 'height': Domain(2, 4)}, guarantees=('sealed framed glazing', 'actual sill bearing')) def negotiate(self, ctx, parameters): box = Box((0, 0, 0), (self.width - 1, self.height + 1, 0)) bays = ((0, self.width - 1),) if self.width < 5 else ((0, self.width // 2 - 1), (self.width // 2 + 1, self.width - 1)) ports, grants = [], [] for index, (first, last) in enumerate(bays): bay = Box((first, 1, 0), (last, self.height, 0)) key = 'glazing-' + str(index) ports.append(Port(key, 'wall-installation', Frame((first, 1, 0)), bay, 1, key, facts={'thickness': 1})) grants.append(Grant(key, bay, ('install',), ('window',), bay.volume)) return Contract(box, ports=tuple(ports), grants=tuple(grants), rules=(Rule('support', tuple((x, -1, 0) for x in range(self.width))), Rule('sealed', tuple(box.cells()), phase='complete')), decisions={'bays': bays}) def realize(self, ctx, contract): from .roofcraft import FlushWindow p = Plan() p.fill(contract.envelope, log(self.timber, 'x'), 'panel-frame') for index, (first, last) in enumerate(contract.decisions['bays']): p.children.append(Child('window-' + str(index), (self.window or FlushWindow)(last - first + 1, self.height), frame=Frame((first, 1, 0)), bindings=(Binding(ctx.path, 'glazing-' + str(index)),))) return p
hearth/components/lofts.py
# Habitable roof volumes assembled through public stair and roof interior contracts. from dataclasses import dataclass from hearth import Box, Frame, ContractError from hearth.kernel import Capability, Contract, Domain, Rule, Port, Plan, Child, Binding from hearth.blocks import name_of, state_of, log from hearth.navigation import floor_path from .furnishing import FurnitureGroup, GROUPS from .roofcraft import RoofDesign LOFT_PURPOSES = ('bedroom', 'library', 'storage') @dataclass(frozen=True) class RoofCollars: """Span measured roof faces above player headroom with timber collar ties.""" width: int depth: int axis: str level: int = 4 spacing: int = 6 def capability(self): return Capability('timber.roof-collars', ('timber-frame', 'decoration'), inputs={'level': Domain(4, 8), 'spacing': Domain(5, 12)}, guarantees=('actual end bearings', 'preserved circulation')) def negotiate(self, ctx, parameters): span, length = (self.width, self.depth) if self.axis == 'z' else (self.depth, self.width) def point(cross, along): return (cross, self.level, along) if self.axis == 'z' else (along, self.level, cross) members, anchors, omitted = [], [], [] for along in range(3, length - 2, self.spacing): row = [point(cross, along) for cross in range(span)] solid = [i for i, q in enumerate(row) if ctx.view.supports(ctx.world(q))] if len(solid) < 2: omitted.append(along) continue a, b = min(solid), max(solid) points = row[a + 1:b] if not points or any(name_of(ctx.state(q)) != 'air' or ctx.view.protected(ctx.frame.box(Box(q, q))) for q in points): omitted.append(along) continue members.extend(points) anchors.extend((row[a], row[b])) return Contract(Box((0, self.level, 0), (self.width - 1, self.level, self.depth - 1)), rules=(Rule('support', tuple(anchors)), Rule('expected', tuple(members), data={'names': ['spruce_log']})), decisions={'members': members, 'omitted_optional_ties': omitted}) def realize(self, ctx, contract): p = Plan() for q in contract.decisions['members']: p.block(q, log('spruce', 'x' if self.axis == 'z' else 'z'), 'collar-tie') return p @dataclass(frozen=True) class ApertureGuard: width: int depth: int aperture: tuple def capability(self): return Capability('circulation.aperture-guard', ('railing',), guarantees=('supported guard beside stair opening', 'preserved landing and routes')) def negotiate(self, ctx, parameters): holes = set(tuple(q) for q in self.aperture) candidates = {(x + dx, 0, z + dz) for x, _, z in holes for dx, dz in ((1, 0), (-1, 0), (0, 1), (0, -1))} - holes rails = [] for x, _, z in sorted(candidates): q = (x, 1, z) if 0 < x < self.width - 1 and 0 < z < self.depth - 1 and ctx.view.supports(ctx.world((x, 0, z))) and name_of(ctx.state(q)) == 'air' and not ctx.view.protected(ctx.frame.box(Box(q, (x, 2, z)))): rails.append(q) return Contract(Box((0, 1, 0), (self.width - 1, 1, self.depth - 1)), rules=(Rule('support', tuple((x, 0, z) for x, _, z in rails)), Rule('expected', tuple(rails), data={'names': ['dark_oak_fence']})), decisions={'rails': rails}) def realize(self, ctx, contract): p = Plan() rails = set(tuple(q) for q in contract.decisions['rails']) neighbors = {'north': (0, -1), 'south': (0, 1), 'east': (1, 0), 'west': (-1, 0)} for x, y, z in sorted(rails): links = {side: str((x + dx, y, z + dz) in rails or ctx.view.supports(ctx.world((x + dx, y, z + dz)))).lower() for side, (dx, dz) in neighbors.items()} p.block((x, y, z), state_of('dark_oak_fence', waterlogged='false', **links), 'guard') return p @dataclass(frozen=True) class LoftDeck: width: int depth: int aperture: tuple def capability(self): return Capability('surface.loft-deck', ('floor', 'support'), guarantees=('bounded stair aperture', 'perimeter bearing')) def negotiate(self, ctx, parameters): holes = set(self.aperture) floor = tuple((x, 0, z) for x in range(self.width) for z in range(self.depth) if (x, 0, z) not in holes) bearings = tuple((x, -1, z) for x in (0, self.width - 1) for z in (0, self.depth - 1)) return Contract(Box((0, 0, 0), (self.width - 1, 0, self.depth - 1)), rules=(Rule('support', bearings), Rule('sealed', floor)), decisions={'floor': floor, 'aperture': self.aperture}) def realize(self, ctx, contract): p = Plan() for x, y, z in contract.decisions['floor']: p.block((x, y, z), state_of('dark_oak_planks' if x in (1, self.width - 2) or z in (1, self.depth - 2) else 'spruce_planks'), 'deck') return p @dataclass(frozen=True) class KneeWalls: width: int depth: int axis: str def capability(self): return Capability('wall.roof-knees', ('wall', 'enclosure'), guarantees=('supported closed eaves',)) def negotiate(self, ctx, parameters): cells = tuple((x, 1, z) for x in range(self.width) for z in range(self.depth) if (self.axis == 'z' and x in (0, self.width - 1) and 0 < z < self.depth - 1) or (self.axis == 'x' and z in (0, self.depth - 1) and 0 < x < self.width - 1)) return Contract(Box((0, 1, 0), (self.width - 1, 1, self.depth - 1)), rules=(Rule('support', tuple((x, 0, z) for x, _, z in cells)), Rule('sealed', cells)), decisions={'members': cells}) def realize(self, ctx, contract): p = Plan() for q in contract.decisions['members']: p.block(q, log('spruce', self.axis), 'knee-beam') return p @dataclass(frozen=True) class LoftInterior: purpose: str aperture: tuple landing: tuple def capability(self): return Capability('room.loft.' + self.purpose, ('room', 'habitable', 'roof-room', 'composite'), inputs={'purpose': Domain(choices=LOFT_PURPOSES)}, offers=('access',), guarantees=('reachable furnished loft', 'actual lighting', 'closed weather envelope'), assumptions=('roof-interior mount with floor and bounded stair aperture',)) def negotiate(self, ctx, parameters): if len(ctx.bindings) != 1: raise ContractError('loft-host', ctx.path) port = ctx.view.port(ctx.bindings[0].host, ctx.bindings[0].port) if port.kind != 'roof-interior' or port.frame != ctx.frame: raise ContractError('loft-interface', ctx.path, ctx.frame.origin) w, d, height = (port.facts[k] for k in ('width', 'depth', 'height')) box = Box((-1, 0, -1), (w, height, d)) if not all(port.region.contains(ctx.world(q)) for q in box.corners()): raise ContractError('loft-envelope', ctx.path) center = (w // 2, 1, d // 2) floor = Box((1, 1, 1), (w - 2, 1, d - 2)) main = floor_path(ctx.view, ctx.frame, self.landing, center, floor) if not main: raise ContractError('loft-landing', ctx.path, ctx.world(self.landing), 'No level route from the promised stair landing') clear = {p for x, y, z in main for p in ((x, y, z), (x, y + 1, z))} occupied, apron, target = FurnitureGroup.placement_geometry() candidates = [] for x in range(1, w - 1): for z in range(1, d - 1): for turn in range(4): frame = Frame((x, 1, z), turn) body, use = frame.box(occupied), frame.box(apron) if not all(floor.contains((q[0], 1, q[2])) for q in (*body.corners(), *use.corners())): continue if any(q in clear for q in body.cells()) or ctx.view.protected(ctx.frame.box(body)): continue if any(name_of(ctx.state(q)) != 'air' for q in (*body.cells(), *use.cells())): continue if not all(ctx.view.supports(ctx.world((q[0], 0, q[2]))) for q in (*body.cells(), *use.cells())): continue candidates.append((frame, body, use)) # Spread useful groups toward both ends, with stable seeded tie breaks. jitter = ctx.rng('furniture-layout') scored = [(min(f.origin[0], w - 1 - f.origin[0], f.origin[2], d - 1 - f.origin[2]), jitter.random(), f, body, use) for f, body, use in candidates] selected, blocked, reserved = [], set(), set() desired = max(2, min(8, (w * d) // 38)) for _, _, frame, body, use in sorted(scored, key=lambda r: (r[0], r[1])): cells = set(body.cells()) if cells & (clear | reserved | blocked) or set(use.cells()) & blocked: continue approach = frame.point(target) path = floor_path(ctx.view, ctx.frame, center, approach, floor, blocked | cells) if not path: continue selected.append((frame.origin, frame.turn, approach)) blocked |= cells reserved |= set(use.cells()) clear |= {p for x, y, z in path for p in ((x, y, z), (x, y + 1, z))} if len(selected) == desired: break if len(selected) < 2: raise ContractError('loft-furnishing-space', ctx.path, ctx.world(center), 'Need two accessible complete furniture groups') # Sources sit above the route, keeping its full two-cell headroom. light_sites = [] for x, _, z in sorted(clear): q = (x, 3, z) if q in light_sites or q in blocked or name_of(ctx.state(q)) != 'air' or ctx.view.protected(ctx.frame.box(Box(q, q))): continue if all(abs(x - a) + abs(z - c) >= 5 for a, _, c in light_sites): light_sites.append(q) if not light_sites: raise ContractError('loft-light-space', ctx.path, ctx.world(center)) targets = (self.landing, center, *(r[2] for r in selected)) floor_cells = tuple((x, 0, z) for x in range(w) for z in range(d) if (x, 0, z) not in self.aperture) rules = (Rule('sealed', floor_cells), Rule('clear', tuple(sorted(clear))), Rule('route', targets, box, phase='complete'), Rule('light', targets, box, {'minimum': 1}, 'complete'), Rule('furnishing', box=box, data={'groups': GROUPS[self.purpose]}, phase='complete'), Rule('enclosed-volume', (center,), box, {'apertures': self.aperture}, 'complete')) return Contract(box, ports=(Port('landing', 'access', Frame(self.landing), Box(self.landing, (self.landing[0], self.landing[1] + 1, self.landing[2])), 4),), rules=rules, decisions={'purpose': self.purpose, 'center': center, 'doors': ('landing',), 'stair_up': False, 'stair_down': True, 'furniture': selected, 'lights': light_sites, 'aperture': self.aperture, 'axis': port.facts['axis'], 'width': w, 'depth': d, 'omitted_optional_stations': desired - len(selected)}) def realize(self, ctx, contract): p = Plan() w, d = contract.decisions['width'], contract.decisions['depth'] p.children.append(Child('collars', RoofCollars(w, d, contract.decisions['axis']))) for i, (origin, turn, _) in enumerate(contract.decisions['furniture']): purpose = self.purpose if i % 2 == 0 else ('library' if self.purpose == 'bedroom' else 'storage') p.children.append(Child('station-' + str(i), FurnitureGroup(purpose), frame=Frame(tuple(origin), turn))) p.children.append(Child('guard', ApertureGuard(w, d, self.aperture))) for i, q in enumerate(contract.decisions['lights']): p.children.append(Child('light-' + str(i), LoftLight(), frame=Frame(tuple(q)))) return p @dataclass(frozen=True) class LoftLight: maximum_hanger: int = 16 def capability(self): return Capability('light.roof-hanger', ('light',), inputs={'maximum_hanger': Domain(1, 64)}, guarantees=('actual light hung from measured roof support',)) def negotiate(self, ctx, parameters): top = next((y for y in range(1, self.maximum_hanger + 2) if ctx.view.supports(ctx.world((0, y, 0)))), None) if top is None: raise ContractError('loft-light-support', ctx.path, ctx.frame.origin) if any(name_of(ctx.state((0, y, 0))) != 'air' for y in range(top)): raise ContractError('loft-light-clearance', ctx.path, ctx.frame.origin) return Contract(Box((0, 0, 0), (0, top - 1, 0)), rules=(Rule('support', ((0, top, 0),)), Rule('expected', ((0, 0, 0),), data={'names': ['lantern']}), Rule('expected', tuple((0, y, 0) for y in range(1, top)), data={'names': ['chain']})), decisions={'top': top}) def realize(self, ctx, contract): p = Plan() # The lantern is visibly hung, with a continuous chain to an actual roof cell. p.block((0, 0, 0), state_of('lantern', hanging='true', waterlogged='false'), 'lantern') for y in range(1, contract.decisions['top']): p.block((0, y, 0), state_of('chain', axis='y', waterlogged='false'), 'hanger') return p @dataclass(frozen=True) class RoofPlatform: """Prepare a bounded floor before neighboring weather skins are installed.""" width: int depth: int axis: str def capability(self): return Capability('support.roof-platform', ('floor', 'support', 'composite'), inputs={'width': Domain(9, 64), 'depth': Domain(9, 128), 'axis': Domain(choices=('x', 'z'))}, offers=('roof-seat',), assumptions=('aligned upper-floor-access',), guarantees=('bounded open stair aperture', 'closed supported loft floor')) def negotiate(self, ctx, parameters): if len(ctx.bindings) != 1: raise ContractError('roof-platform-host', ctx.path) port = ctx.view.port(ctx.bindings[0].host, ctx.bindings[0].port) if port.kind != 'upper-floor-access' or port.frame != ctx.frame: raise ContractError('roof-platform-interface', ctx.path, ctx.frame.origin) region = Box.enclosing(ctx.local(q) for q in port.region.corners()) box = Box((0, 0, 0), (self.width - 1, 2, self.depth - 1)) if region.lo[1] != 0 or not all(box.contains(q) for q in region.corners()): raise ContractError('loft-stair-aperture', ctx.path) aperture = tuple((x, 0, z) for x in range(region.lo[0], region.hi[0] + 1) for z in range(region.lo[2], region.hi[2] + 1)) landing = ctx.local(port.frame.point(tuple(port.facts['landing']))) facts = {'width': self.width, 'depth': self.depth, 'axis': self.axis, 'aperture': aperture, 'landing': landing, 'source': ctx.bindings[0].host, 'coordinate_space': 'port-local'} return Contract(box, ports=(Port('seat', 'roof-seat', Frame(), box, 1, facts=facts),), decisions=facts) def realize(self, ctx, contract): return Plan(children=[Child('floor', LoftDeck(self.width, self.depth, contract.decisions['aperture'])), Child('knees', KneeWalls(self.width, self.depth, self.axis))]) @dataclass(frozen=True) class InhabitedRoof: width: int depth: int axis: str material: str design: object = RoofDesign() purpose: str = 'bedroom' def capability(self): return Capability('roof.inhabited', ('roof', 'habitable', 'composite'), inputs={'purpose': Domain(choices=LOFT_PURPOSES), 'width': Domain(9, 64), 'depth': Domain(9, 128), 'axis': Domain(choices=('x', 'z'))}, offers=('access',), assumptions=('aligned upper-floor-access or prepared roof-seat with clear stair aperture', 'roof policy with roof-interior offer'), guarantees=('furnished accessible roof room', 'locked purpose', 'closed weather boundary')) def negotiate(self, ctx, parameters): if len(ctx.bindings) != 1: raise ContractError('inhabited-roof-host', ctx.path) port = ctx.view.port(ctx.bindings[0].host, ctx.bindings[0].port) if port.kind not in ('upper-floor-access', 'roof-seat') or port.frame != ctx.frame: raise ContractError('inhabited-roof-interface', ctx.path, ctx.frame.origin) span = self.width if self.axis == 'z' else self.depth peak = max(self.design.heights(span)) allowance = self.design.vertical_allowance() if hasattr(self.design, 'vertical_allowance') else 4 box = Box((-1, 0, -1), (self.width, peak + allowance + 1, self.depth)) region = Box.enclosing(ctx.local(q) for q in port.region.corners()) if region.lo[1] != 0 or not all(box.contains(q) for q in region.corners()): raise ContractError('loft-stair-aperture', ctx.path) aperture = tuple((x, 0, z) for x in range(region.lo[0], region.hi[0] + 1) for z in range(region.lo[2], region.hi[2] + 1)) if port.kind == 'upper-floor-access' else tuple(tuple(q) for q in port.facts['aperture']) if port.kind == 'roof-seat' and any(port.facts[key] != getattr(self, key) for key in ('width', 'depth', 'axis')): raise ContractError('roof-seat-dimensions', ctx.path) landing = ctx.local(port.frame.point(tuple(port.facts['landing']))) access = Port('landing', 'access', Frame(landing), Box(landing, (landing[0], landing[1] + 1, landing[2])), 4, delegate=('room', 'landing')) return Contract(box, ports=(access,), decisions={'purpose': self.purpose, 'aperture': aperture, 'landing': landing, 'axis': self.axis, 'prepared_floor': port.kind == 'roof-seat', 'source': port.facts.get('source', ctx.bindings[0].host)}) def realize(self, ctx, contract): roof = self.design.component(self.width, self.depth, self.axis, self.material) if 'roof-interior' not in roof.capability().offers: raise ContractError('roof-interior-offer', ctx.path, conditions='Requested habitable roof requires a public roof-interior offer') aperture, landing = contract.decisions['aperture'], contract.decisions['landing'] p = Plan() if not contract.decisions['prepared_floor']: p.children.extend([Child('floor', LoftDeck(self.width, self.depth, aperture)), Child('knees', KneeWalls(self.width, self.depth, self.axis))]) p.children.extend([Child('weather', roof, frame=Frame((0, 1, 0))), Child('room', LoftInterior(self.purpose, aperture, landing), bindings=(Binding(ctx.path + '/weather', 'interior'),))]) floor_host = ctx.bindings[0].host if contract.decisions['prepared_floor'] else ctx.path + '/floor' p.relations.extend(((ctx.path + '/room', 'supported_by', floor_host), (ctx.path + '/room', 'connected_to', contract.decisions['source']))) return p
hearth/components/circulation.py
# Shared stair orientation and aperture geometry for room and roof planners. from dataclasses import dataclass from hearth import Box, Frame @dataclass(frozen=True) class StairLayout: """Describe a six-rise flight and landing in the enclosing room's local frame.""" width: int depth: int axis: str = 'z' @property def frame(self): if self.axis not in ('x', 'z'): raise ValueError('Stair axis must be x or z') return Frame() if self.axis == 'z' else Frame((0, 0, self.depth - 1), 3) @property def span(self): return self.width if self.axis == 'z' else self.depth @property def length(self): return self.depth if self.axis == 'z' else self.width @property def flight(self): return self.frame.compose(Frame((self.span - 4, 1, 2))) @property def slot(self): return self.frame.box(Box((self.span - 4, 0, 2), (self.span - 3, 0, 7))) @property def landing(self): return self.frame.point((self.span - 5, 1, 7))
hearth/components/facades.py
# Shared facade planning against explicit local service and framing exclusions. from dataclasses import dataclass from hearth import Box, Frame @dataclass(frozen=True) class FacadeDesign: """Arrange aligned openings while preserving local reserved volumes. Exclusions use room coordinates. They reserve design space for later children; they never grant write permission. The enclosing composition still validates all actual writes and affected contracts transactionally. """ height: int = 3 sill: int = 1 width: int = 2 planters: bool = True def openings(self, length, frame=Frame(), access=False, exclusions=()): if self.height not in (2, 3) or self.width not in (1, 2) or self.sill < 1 or self.sill + self.height > 4: raise ValueError('Facade openings require width 1..2, height 2..3, sill >=1 and top <=3') door = Box((length // 2 - 1, 0, -1), (length // 2 + 1, 1, 0)) if access else None candidates = [] for x in range(1, length - self.width): inner = Box((x, self.sill, 0), (x + self.width - 1, self.sill + self.height - 1, 0)) exterior = Box((x - 1, self.sill - 1, -2 if self.planters else -1), (x + self.width, self.sill + self.height - 1, 0)) if any(frame.box(inner).intersection(b) for b in exclusions) or (door and inner.intersection(door)): continue flush = any(frame.box(exterior).intersection(b) for b in exclusions) or bool(door and exterior.intersection(door)) candidates.append({'at': (x, self.sill, 0), 'width': self.width, 'height': self.height, 'flush': flush}) desired = 2 if length >= 9 else 1 targets = (2 if length >= 11 else 1, length - self.width - (2 if length >= 11 else 1)) if desired == 2 else ((length - self.width) // 2,) chosen = [] for target in targets: feasible = [c for c in candidates if all(abs(c['at'][0] - q['at'][0]) >= self.width + 1 for q in chosen)] if not feasible: continue c = min(feasible, key=lambda q: (abs(q['at'][0] - target), q['flush'], q['at'][0])) chosen.append(c) return tuple(sorted(chosen, key=lambda q: q['at'][0])) def local_exclusions(exclusions, frame): """Convert enclosing design reservations into a child's local coordinates.""" return tuple(Box.enclosing(frame.inverse(p) for p in b.corners()) for b in exclusions)
hearth/components/domestic.py
# Purpose-specific interior stations with explicit, protected interaction aprons. from dataclasses import dataclass from hearth import Box, Frame, ContractError from hearth.kernel import Capability, Contract, Domain, Port, Rule, Plan from hearth.blocks import state_of, slab, stairs from .furnishing import supplies @dataclass(frozen=True) class DomesticSuite: """A compact room station substitutable through its interaction interface.""" purpose: str width: int = 3 def placement_geometry(self): return Box((0, 0, 0), (self.width - 1, 2, 1)), Box((0, 0, 2), (self.width - 1, 1, 2)), (0, 0, 2) def capability(self): return Capability('furnishing.suite.' + self.purpose, ('furniture', 'station'), inputs={'width': Domain(choices=(2, 3)), 'purpose': Domain(choices=('gathering', 'study', 'cooking', 'craft', 'cabinet'))}, offers=('interaction',), guarantees=('supported station', 'two-block interaction apron', 'actual function')) def negotiate(self, ctx, parameters): if self.width not in (2, 3) or self.purpose not in ('gathering', 'study', 'cooking', 'craft', 'cabinet'): raise ContractError('domestic-suite-domain', ctx.path) _, apron, target = self.placement_geometry() area = Box((0, 0, 0), (self.width - 1, 2, 2)) function = {'gathering': [['dark_oak_stairs'], ['birch_pressure_plate']], 'study': [['bookshelf'], ['lectern']], 'cooking': [['smoker'], ['water_cauldron']], 'craft': [['crafting_table'], ['anvil']], 'cabinet': [['barrel']]} return Contract(area, ports=(Port('use', 'interaction', Frame(target), apron, 4),), rules=(Rule('support', tuple((x, -1, z) for x in range(self.width) for z in range(3))), Rule('clear', tuple(apron.cells())), Rule('furnishing', box=area, data={'groups': function[self.purpose]}, phase='complete')), decisions={'purpose': self.purpose, 'width': self.width}, atomic_object=True) def realize(self, ctx, contract): p, w = Plan(), self.width barrel = state_of('barrel', facing='south', open='false') if self.purpose == 'gathering': for x in range(w): p.block((x, 0, 0), stairs('dark_oak', 'north'), 'settee') if x != w // 2: p.block((x, 0, 1), state_of('yellow_carpet'), 'hearth-rug') p.block((w // 2, 0, 1), state_of('dark_oak_fence', north='false', south='false', east='false', west='false', waterlogged='false'), 'table-base') p.block((w // 2, 1, 1), state_of('birch_pressure_plate', powered='false'), 'tabletop') elif self.purpose == 'study': for x in range(w): p.block((x, 0, 0), state_of('bookshelf'), 'bookcase') if x in (0, w - 1): p.block((x, 1, 0), state_of('bookshelf'), 'bookcase') p.block((x, 2, 0), slab('dark_oak'), 'bookcase-cornice') p.block((0, 0, 1), state_of('lectern', facing='south', has_book='false', powered='false'), 'reading-desk') p.block((w - 1, 0, 1), stairs('dark_oak', 'north'), 'reading-seat') elif self.purpose == 'cooking': for x in range(w): material = state_of('smoker', facing='south', lit='false') if x == 0 else state_of('water_cauldron', level='3') if x == w - 1 else barrel p.block((x, 0, 0), material, 'cooking-counter', nbt=supplies() if x not in (0, w - 1) else None) p.block((x, 2, 0), slab('dark_oak', 'top'), 'pot-shelf') p.block((0, 1, 0), state_of('iron_trapdoor', facing='north', half='top', open='false', powered='false', waterlogged='false'), 'stove-hood') p.block((0, 0, 1), state_of('crafting_table'), 'preparation') p.block((w - 1, 0, 1), state_of('brown_carpet'), 'work-mat') elif self.purpose == 'craft': for x in range(w): p.block((x, 0, 0), state_of('crafting_table' if x == 0 else 'smithing_table'), 'workbench') p.block((x, 2, 0), slab('dark_oak', 'top'), 'tool-shelf') p.block((0, 0, 1), state_of('anvil', facing='north'), 'anvil') p.block((w - 1, 0, 1), barrel, 'supplies', nbt=supplies()) else: for x in range(w): for y in range(2): p.block((x, y, 0), barrel, 'cabinet', nbt=supplies()) p.block((x, 2, 0), slab('dark_oak'), 'cabinet-cornice') p.block((x, 0, 1), state_of('brown_carpet'), 'storage-runner') return p
hearth/components/borders.py
# Ground-supported planting from public boundary geometry and measured free space. from dataclasses import dataclass from hearth import Box, Frame, ContractError from hearth.kernel import Capability, Contract, Domain, Rule, Port, Plan, Child, Binding from hearth.blocks import name_of, state_of @dataclass(frozen=True) class GardenPlant: species: str = 'fern' def capability(self): return Capability('plant.garden.' + self.species, ('plant', 'garden'), inputs={'species': Domain(choices=('fern', 'azalea', 'flowering_azalea', 'poppy', 'allium', 'rose_bush'))}, assumptions=('actual soil support',), guarantees=('whole plant', 'supported')) def negotiate(self, ctx, parameters): if self.species not in ('fern', 'azalea', 'flowering_azalea', 'poppy', 'allium', 'rose_bush'): raise ContractError('garden-plant-domain', ctx.path) if name_of(ctx.state((0, -1, 0))) not in ('grass_block', 'dirt', 'coarse_dirt', 'podzol', 'rooted_dirt', 'moss_block'): raise ContractError('planting-substrate', ctx.path, ctx.world((0, -1, 0))) height = 2 if self.species == 'rose_bush' else 1 return Contract(Box((0, 0, 0), (0, height - 1, 0)), rules=(Rule('support', ((0, -1, 0),)), Rule('expected', tuple((0, y, 0) for y in range(height)), data={'names': [self.species]})), atomic_object=True) def realize(self, ctx, contract): p = Plan() if self.species == 'rose_bush': for y, half in enumerate(('lower', 'upper')): p.block((0, y, 0), state_of(self.species, half=half), 'plant') else: p.block((0, 0, 0), state_of(self.species), 'plant') return p @dataclass(frozen=True) class BoundaryPlanting: """Plant a soft border near a discovered footprint; never excavate or fill.""" host: str terrain: str density: float = .55 minimum_distance: int = 2 maximum_distance: int = 4 def capability(self): return Capability('garden.boundary-border', ('garden', 'composite'), assumptions=('footprint-boundary interface',), adaptations=('actual soil and clearance', 'cluster density'), inputs={'density': Domain(0, 1), 'minimum_distance': Domain(1, 6), 'maximum_distance': Domain(1, 6)}, guarantees=('no terrain edits', 'retained paths and existing consumers')) def negotiate(self, ctx, parameters): if not 0 <= self.density <= 1 or not 1 <= self.minimum_distance <= self.maximum_distance <= 6: raise ContractError('border-domain', ctx.path) ports = ctx.view.offers(self.host, 'footprint-boundary') if not ports: raise ContractError('planting-boundary-interface', ctx.path, conditions='Host must expose a footprint-boundary port') port = ports[0] points = tuple(ctx.local(port.frame.point(tuple(q))) for q in port.facts['outline']) radius = self.maximum_distance box = Box.enclosing(points).expand(radius) # Surface observations determine height, not the boundary's nominal Y. candidates, rejected = [], {'unknown': 0, 'substrate': 0, 'occupied_or_protected': 0} edge = {(x, z) for x, _, z in points} for x in range(box.lo[0], box.hi[0] + 1): for z in range(box.lo[2], box.hi[2] + 1): distance = min(abs(x - a) + abs(z - b) for a, b in edge) if not self.minimum_distance <= distance <= radius: continue # A stable field creates patches instead of a uniform perimeter hedge. patch = ctx.scope.child(f'patch-{x // 3}-{z // 3}').stream('density').uniform(.2, 1) rng = ctx.scope.child(f'cell-{x}-{z}').stream('planting') if rng.random() > self.density * patch: continue wp = ctx.world((x, 0, z)) if ctx.view.domain and not (ctx.view.domain.lo[0] <= wp[0] <= ctx.view.domain.hi[0] and ctx.view.domain.lo[2] <= wp[2] <= ctx.view.domain.hi[2]): rejected['unknown'] += 1 continue y = ctx.elevation(x, z) + 1 if name_of(ctx.state((x, y - 1, z))) not in ('grass_block', 'podzol', 'dirt'): rejected['substrate'] += 1 continue area = Box((x, y, z), (x, y + 1, z)) if not all(ctx.view.domain.contains(ctx.world(q)) for q in area.corners()): rejected['unknown'] += 1 continue if any(name_of(ctx.state(q)) != 'air' for q in area.cells()) or ctx.view.protected(ctx.frame.box(area)): rejected['occupied_or_protected'] += 1 continue species = rng.choice(('fern', 'fern', 'azalea', 'flowering_azalea', 'poppy', 'allium', 'rose_bush')) candidates.append(((x, y, z), species)) bounds = Box.enclosing([*points, *(p for p, _ in candidates), *((p[0], p[1] + 1, p[2]) for p, _ in candidates)]) return Contract(bounds, decisions={'plants': candidates, 'rejected': rejected, 'optional_minimum': 0, 'outline': points}) def realize(self, ctx, contract): p = Plan() for q, species in contract.decisions['plants']: p.children.append(Child(f'plant-{q[0]}-{q[2]}', GardenPlant(species), frame=Frame(tuple(q)), bindings=(Binding(self.terrain, 'planting', 'plant'),))) p.relations.append((ctx.path, 'landscapes', self.host)) return p
hearth/components/windowbox.py
# Window-mounted planting with scoped sill replacement and actual masonry anchors. from dataclasses import dataclass from hearth import Box, ContractError from hearth.kernel import Capability, Contract, Plan, Rule from hearth.blocks import state_of @dataclass(frozen=True) class WindowBox: flowers: tuple[str, ...] = ('poppy', 'cornflower', 'oxeye_daisy') def capability(self): return Capability('garden.window-box', ('planter', 'plant', 'attachment'), assumptions=('window garden mounting interface',), guarantees=('soil supports flowers', 'wall anchors', 'within negotiated facade projection')) def negotiate(self, ctx, parameters): if len(ctx.bindings) != 1: raise ContractError('window-box-host', ctx.path) port = ctx.view.port(ctx.bindings[0].host, ctx.bindings[0].port) if port.kind != 'window-garden' or port.frame != ctx.frame: raise ContractError('window-box-interface', ctx.path, ctx.frame.origin) if not self.flowers or any(f not in ('poppy', 'cornflower', 'oxeye_daisy', 'allium', 'azure_bluet') for f in self.flowers): raise ContractError('window-box-flower-domain', ctx.path) width = port.facts['width'] framed = port.facts.get('depth', 1) == 2 box = Box((-1 if framed else 0, 0, -1 if framed else 0), (width if framed else width - 1, 1, 0)) if not all(port.region.contains(ctx.world(p)) for p in box.corners()): raise ContractError('window-box-region', ctx.path) boards = tuple((x, 0, -1) for x in range(width)) + ((-1, 0, 0), (width, 0, 0)) if framed else () return Contract(box, rules=(Rule('support', tuple((x, 0, 1) for x in range(width)) + tuple((x, 0, 0) for x in range(width))), Rule('expected', tuple((x, 1, 0) for x in range(width)), data={'names': list(self.flowers)}), Rule('expected', boards, data={'names': ['spruce_trapdoor']})), decisions={'width': width, 'framed': framed}, atomic_object=True) def realize(self, ctx, contract): p = Plan() rng = ctx.rng('flowers') for x in range(contract.decisions['width']): p.block((x, 0, 0), state_of('rooted_dirt'), 'planting-soil') p.block((x, 1, 0), state_of(rng.choice(self.flowers)), 'flower') if contract.decisions['framed']: p.block((x, 0, -1), state_of('spruce_trapdoor', facing='north', half='bottom', open='true', powered='false', waterlogged='false'), 'front-board') if contract.decisions['framed']: for x, side in ((-1, 'west'), (contract.decisions['width'], 'east')): p.block((x, 0, 0), state_of('spruce_trapdoor', facing=side, half='bottom', open='true', powered='false', waterlogged='false'), 'end-board') return p
hearth/components/ceiling.py
# Shallow ceiling timbers fitted to public room interfaces and actual clearances. from dataclasses import dataclass from hearth import Box, ContractError from hearth.kernel import Capability, Contract, Rule, Plan from hearth.blocks import name_of, log @dataclass(frozen=True) class CeilingTimbers: def capability(self): return Capability('interior.ceiling-timbers', ('decoration', 'timber-frame', 'ceiling-trim'), assumptions=('ceiling-decoration interface with actual overhead support',), adaptations=('omit cells at stair voids, lights and protected headroom',), guarantees=('one-cell projection', 'retained headroom', 'overhead bearing')) def negotiate(self, ctx, parameters): if len(ctx.bindings) != 1: raise ContractError('ceiling-host', ctx.path) port = ctx.view.port(ctx.bindings[0].host, ctx.bindings[0].port) if port.kind != 'ceiling-decoration' or port.frame != ctx.frame: raise ContractError('ceiling-interface', ctx.path, ctx.frame.origin) w, d = port.facts['width'], port.facts['depth'] points = {(x, 0, z): 'x' for z in (2, d - 3) for x in range(1, w - 1)} points.update({(w // 2, 0, z): 'z' for z in range(1, d - 1)}) members = [] for q, axis in sorted(points.items()): area = ctx.frame.box(Box(q, q)) above = (q[0], q[1] + 1, q[2]) if name_of(ctx.state(q)) == 'air' and ctx.view.supports(ctx.world(above)) and not ctx.view.protected(area): members.append((q, axis)) anchors = tuple((q[0], 1, q[2]) for q, _ in members) box = Box((1, 0, 1), (w - 2, 0, d - 2)) if not all(port.region.contains(ctx.world(q)) for q in box.corners()): raise ContractError('ceiling-region', ctx.path) return Contract(box, rules=(Rule('support', anchors), Rule('expected', tuple(q for q, _ in members), data={'names': ['stripped_dark_oak_log']})), decisions={'members': members, 'omitted_for_structure_or_clearance': len(points) - len(members)}) def realize(self, ctx, contract): p = Plan() for q, axis in contract.decisions['members']: p.block(q, log('stripped_dark_oak', axis), 'ceiling-member') return p
hearth/adapters/site.py
# Measured, bounded support and access strategies independent of terrain recipes. from dataclasses import dataclass from hearth.space import Box, Frame from hearth.blocks import state_of, log, stairs, name_of, solid from hearth.kernel import Capability, Contract, Port, Grant, Rule, Plan, ContractError @dataclass(frozen=True) class SiteLimits: relief: int = 5 support_height: int = 8 approach_length: int = 12 fill_volume: int = 1600 excavation_volume: int = 300 bed_thickness: int = 2 def survey(ctx, footprint, limits=SiteLimits()): samples = {} for x, z in sorted(footprint): wx, _, wz = ctx.world((x, 0, z)) obs = ctx.view.sample(wx, wz) if obs.support_depth < limits.bed_thickness: raise ContractError('substrate-depth', ctx.path, (wx, obs.elevation, wz), f'Require {limits.bed_thickness} contiguous solid bed cells, found {obs.support_depth}') samples[(x, z)] = (obs.elevation - ctx.frame.origin[1], None if obs.water is None else obs.water - ctx.frame.origin[1], obs.support_depth) heights = [v[0] for v in samples.values()] relief = max(heights) - min(heights) if relief > limits.relief: raise ContractError('site-relief', ctx.path, ctx.frame.origin, f'Measured {relief}, permitted {limits.relief}') surface = max(max(v[0], v[1] if v[1] is not None else v[0]) for v in samples.values()) floor = surface + 1 if floor - min(heights) > limits.support_height: raise ContractError('support-height', ctx.path, ctx.frame.origin, 'Bounded support depth exceeded') wet = any(v[1] is not None and v[1] >= v[0] for v in samples.values()) strategies = ['piers'] if wet or relief >= 3 else ['stepped', 'piers'] strategy = ctx.scope.choose(strategies, 'adaptation') return {'floor': floor, 'relief': relief, 'wet': wet, 'strategy': strategy, 'samples': samples, 'feasible_strategies': strategies} @dataclass(frozen=True) class Foundation: footprint: tuple[tuple[int, int], ...] floor: int strategy: str limits: SiteLimits = SiteLimits() @classmethod def rectangular(cls, width, depth, floor, strategy='stepped', limits=SiteLimits()): """Create a rectangular contact component without client voxel operations.""" if width < 1 or depth < 1: raise ValueError('Positive footprint dimensions required') return cls(tuple((x, z) for x in range(width) for z in range(depth)), floor, strategy, limits) def capability(self): return Capability('adapter.foundation', ('siteworks', 'support'), offers=('support',), assumptions=('actual bed within bounded depth',), adaptations=('stepped perimeter', 'piers to bed'), guarantees=('grounded support grid',)) def negotiate(self, ctx, parameters): positions = set(self.footprint) supports = [] columns = [] for x, z in sorted(positions): boundary = any((x + dx, z + dz) not in positions for dx, dz in ((1, 0), (-1, 0), (0, 1), (0, -1))) grid = (x % 4 == 0 and z % 4 == 0) # Piers include perimeter every third cell and all corners. edge_pier = boundary and (x % 3 == 0 or z % 3 == 0 or sum((x + dx, z + dz) not in positions for dx, dz in ((1, 0), (-1, 0), (0, 1), (0, -1))) >= 2) if not (grid or (boundary if self.strategy == 'stepped' else edge_pier)): continue wx, _, wz = ctx.world((x, 0, z)) bed = ctx.view.elevation(wx, wz) - ctx.frame.origin[1] if self.floor - bed > self.limits.support_height: raise ContractError('support-height', ctx.path, ctx.world((x, bed, z))) supports.extend((x, bed - k, z) for k in range(self.limits.bed_thickness)) columns.append((x, bed, z, self.floor - 1)) count = sum(max(0, top - bed) for x, bed, z, top in columns) if count > self.limits.fill_volume: raise ContractError('fill-volume', ctx.path, conditions=f'{count} > {self.limits.fill_volume}') for x, bed, z, top in columns: supports.extend((x, y, z) for y in range(bed + 1, top + 1)) box = Box.enclosing([(x, bed - self.limits.bed_thickness + 1, z) for x, bed, z, top in columns] + [(x, self.floor - 1, z) for x, bed, z, top in columns]) return Contract(box, rules=(Rule('support', tuple(supports)),), decisions={'columns': columns, 'strategy': self.strategy, 'fill': count, 'excavation': 0}, reads=(box,)) def realize(self, ctx, contract): p = Plan() for x, bed, z, top in contract.decisions['columns']: for y in range(bed + 1, top + 1): material = log('spruce') if self.strategy == 'piers' and y > bed + 1 else state_of('stone_bricks') p.block((x, y, z), material, 'contact') return p @dataclass(frozen=True) class Approach: center: int floor: int porch: int = 0 limits: SiteLimits = SiteLimits() def capability(self): return Capability('adapter.approach', ('siteworks', 'access'), offers=('street', 'surface'), adaptations=('stairs', 'landing', 'bounded fill'), guarantees=('two-block headroom', 'entrance connection')) def negotiate(self, ctx, parameters): rows = [] for step in range(1, self.limits.approach_length + 1): z = -self.porch - step wx, _, wz = ctx.world((self.center, 0, z)) ground = max(max(ctx.view.elevation(ctx.world((x, 0, z))[0], ctx.world((x, 0, z))[2], maximum=self.floor + ctx.frame.origin[1] + 2), (ctx.view.water(ctx.world((x, 0, z))[0], ctx.world((x, 0, z))[2]) or -10000) + 1) - ctx.frame.origin[1] for x in range(self.center - 1, self.center + 2)) y = max(ground, self.floor - step + 1) rows.append((z, y)) if y == ground: break else: raise ContractError('approach-detour', ctx.path, ctx.frame.origin, 'Cannot meet terrain within length bound') cells = [] support = [] for z, y in rows: cells.extend((x, y + k, z) for x in range(self.center - 1, self.center + 2) for k in (1, 2)) support.extend((x, y, z) for x in range(self.center - 1, self.center + 2)) low = min(ctx.view.elevation(*((lambda p: (p[0], p[2]))(ctx.world((x, 0, z)))), maximum=self.floor + ctx.frame.origin[1] + 2) - ctx.frame.origin[1] for z, y in rows for x in range(self.center - 1, self.center + 2)) box = Box((self.center - 1, low, rows[-1][0]), (self.center + 1, max(y for z, y in rows) + 3, -self.porch - 1)) end = (self.center, rows[-1][1] + 1, rows[-1][0]) region = Box((self.center - 1, rows[-1][1], rows[-1][0]), (self.center + 1, max(self.floor, max(h for _, h in rows)) + 2, min(-self.porch - 1, rows[-1][0] + 1))) port = Port('street', 'access', Frame(end), region, 10, 'surface') grant = Grant('surface', region, ('surface',), ('path',), 18) route = tuple((self.center, y + 1, z) for z, y in rows) return Contract(box, (port,), (grant,), (Rule('clear', tuple(cells)), Rule('support', tuple(support)), Rule('route', route, box.expand(1), phase='complete')), decisions={'rows': rows, 'end': end}, reads=(box,)) def realize(self, ctx, contract): p = Plan() rows = contract.decisions['rows'] for index, (z, y) in enumerate(rows): for x in range(self.center - 1, self.center + 2): wx, _, wz = ctx.world((x, 0, z)) bed = ctx.view.elevation(wx, wz, maximum=self.floor + ctx.frame.origin[1] + 2) - ctx.frame.origin[1] for yy in range(bed + 1, y): p.block((x, yy, z), state_of('cobblestone'), 'step-footing') p.block((x, y, z), stairs('stone_brick', 'south') if index and rows[index - 1][1] > y else state_of('stone_bricks'), 'treads') return p
hearth/adapters/__init__.py
# Reusable environmental contact and circulation adapters. from .site import Foundation, Approach, SiteLimits, survey
hearth/adapters/bearing.py
# Small continuous bearing courses spanning explicitly measured support columns. from dataclasses import dataclass from hearth import Box, ContractError from hearth.kernel import Capability, Contract, Domain, Rule, Plan from hearth.blocks import state_of, solid @dataclass(frozen=True) class BearingCourse: width: int depth: int span: int = 2 def capability(self): return Capability('adapter.bearing-course', ('siteworks', 'support'), inputs={'width': Domain(1, 7), 'depth': Domain(1, 7), 'span': Domain(0, 3)}, assumptions=('actual support beneath a bounded plate',), guarantees=('continuous bearing surface', 'bounded taxicab span to actual supports')) def negotiate(self, ctx, parameters): cells = tuple((x, 0, z) for x in range(self.width) for z in range(self.depth)) anchors = tuple((x, -1, z) for x, _, z in cells if solid(ctx.state((x, -1, z)))) if not anchors or any(min(abs(x - a) + abs(z - b) for a, _, b in anchors) > self.span for x, _, z in cells): raise ContractError('bearing-span', ctx.path, ctx.frame.origin, f'Need support within {self.span} cells of every bearing cell') missing = tuple(p for p in cells if not solid(ctx.state(p))) return Contract(Box((0, -1, 0), (self.width - 1, 0, self.depth - 1)), rules=(Rule('support', cells + anchors),), decisions={'anchors': anchors, 'fill_cells': missing, 'fill': len(missing), 'span': self.span}) def realize(self, ctx, contract): p = Plan() for q in contract.decisions['fill_cells']: p.block(q, state_of('stone_bricks'), 'bearing-course') return p
hearth_extensions/interiors.py
# Functional furnishing stations arranged around protected circulation in polygon interiors. from dataclasses import dataclass from hearth import Box, Frame, ContractError from hearth.kernel import Capability, Contract, Domain, Port, Rule, Plan, Child from hearth.blocks import state_of, stairs, passable from .geometry import Polygon, perimeter, bounds2 FUNCTION_GROUPS = {'library': [['bookshelf'], ['lectern']], 'workshop': [['crafting_table'], ['smithing_table']], 'kitchen': [['smoker'], ['furnace']], 'bedroom': [['red_bed']], 'living': [['spruce_stairs']], 'storage': [['barrel']]} @dataclass(frozen=True) class WorkBay: purpose: str def capability(self): return Capability('extension.work-bay', ('furniture', self.purpose), offers=('interaction',), inputs={'purpose': Domain(choices=tuple(FUNCTION_GROUPS))}, guarantees=('functionally furnished', 'supported', 'clear interaction space')) def negotiate(self, ctx, parameters): interaction = ((0, 0, 2), (1, 0, 2)) support = tuple((x, -1, z) for x in range(2) for z in range(3)) clear = tuple((x, y, 2) for x in range(2) for y in range(2)) area = Box((0, 0, 0), (1, 1, 1)) return Contract(Box((0, -1, 0), (1, 1, 2)), ports=(Port('use', 'interaction', Frame(interaction[0]), Box(interaction[0], (1, 1, 2)), 4),), rules=(Rule('support', support), Rule('clear', clear), Rule('furnishing', box=area, data={'groups': FUNCTION_GROUPS[self.purpose]}, phase='complete')), atomic_object=True) def realize(self, ctx, contract): plan = Plan() barrel = state_of('barrel', facing='south', open='false') inventory = {'id': 'minecraft:barrel', 'Items': [{'Slot': 0, 'id': 'minecraft:bread', 'count': 6}, {'Slot': 1, 'id': 'minecraft:torch', 'count': 12}]} plan.block((1, 0, 0), barrel, 'supplies', nbt=inventory) if self.purpose == 'library': for y in range(2): plan.block((0, y, 0), state_of('bookshelf'), 'shelving') plan.block((0, 0, 1), state_of('lectern', facing='south', has_book='false', powered='false'), 'reading') plan.block((1, 0, 1), stairs('spruce', 'north'), 'seat') elif self.purpose in ('workshop', 'kitchen'): a, b = ('crafting_table', 'smithing_table') if self.purpose == 'workshop' else ('smoker', 'furnace') properties = {'facing': 'south', 'lit': 'false'} if self.purpose == 'kitchen' else {} plan.block((0, 0, 0), state_of(a, **properties), 'workstation') plan.block((0, 0, 1), state_of(b, **properties), 'workstation') plan.block((1, 0, 1), stairs('spruce', 'north'), 'seat') elif self.purpose == 'bedroom': for z, part in ((0, 'head'), (1, 'foot')): plan.block((0, 0, z), state_of('red_bed', facing='north', part=part, occupied='false'), 'bed') plan.block((1, 0, 1), state_of('red_carpet'), 'bedside') elif self.purpose == 'living': plan.block((0, 0, 0), stairs('spruce', 'south'), 'seat') plan.block((1, 0, 1), stairs('spruce', 'north'), 'seat') plan.block((0, 0, 1), state_of('spruce_fence', north='false', south='false', east='false', west='false', waterlogged='false'), 'table') plan.block((0, 1, 1), state_of('spruce_pressure_plate', powered='false'), 'table') else: for x, y, z in ((0, 0, 0), (0, 1, 0), (0, 0, 1)): plan.block((x, y, z), barrel, 'storage', nbt=inventory) return plan @dataclass(frozen=True) class HallInterior: footprint: Polygon purpose: str minimum: int = 2 maximum: int = 8 area_per_bay: int = 42 def capability(self): return Capability('extension.hall-interior', ('interior', 'furniture', 'composite'), inputs={'purpose': Domain(choices=tuple(FUNCTION_GROUPS)), 'minimum': Domain(1, 8), 'maximum': Domain(1, 12), 'area_per_bay': Domain(16, 100)}, adaptations=('fit functional bays around a circulation cross',), guarantees=('accessible furnishing stations', 'protected three-cell central aisles')) def negotiate(self, ctx, parameters): footprint = set(self.footprint.cells()) inside = footprint - set(perimeter(footprint, diagonal=True)) width = max(x for x, z in footprint) + 1 depth = max(z for x, z in footprint) + 1 cx, cz = width // 2, depth // 2 if self.minimum > self.maximum: raise ContractError('interior-domain', ctx.path, conditions='Minimum exceeds maximum') aisle = {(x, z) for x, z in inside if abs(x - cx) <= 1 or abs(z - cz) <= 1} candidates = [] rng = ctx.rng('planning') for x, z in sorted(inside): for turn in range(4): frame = Frame((x, 0, z), turn) cells = {(frame.point((u, 0, v))[0], frame.point((u, 0, v))[2]) for u in range(2) for v in range(3)} body = {(frame.point((u, 0, v))[0], frame.point((u, 0, v))[2]) for u in range(2) for v in range(2)} if not cells <= inside or body & aisle: continue front = frame.point((0, 0, 2)) if (front[0] - x) * (cx - x) + (front[2] - z) * (cz - z) <= 0: continue if not all(passable(ctx.state((u, y, v))) for u, v in cells for y in range(2)): continue quadrant = (x < cx, z < cz) candidates.append((frame, cells, body, quadrant, rng.random())) wanted = min(self.maximum, max(self.minimum, len(inside) // self.area_per_bay)) selected = [] used = set() while candidates and len(selected) < wanted: def score(item): frame, cells, body, quadrant, tie = item x, _, z = frame.origin separation = min((abs(x - v[0].origin[0]) + abs(z - v[0].origin[2]) for v in selected), default=width + depth) balance = sum(v[3] == quadrant for v in selected) return (balance, -separation, min(x, z, width - 1 - x, depth - 1 - z), tie, frame.origin, frame.turn) choice = min(candidates, key=score) selected.append(choice) used |= choice[1] candidates = [v for v in candidates if not v[1] & used and all(abs(v[0].origin[0] - old[0].origin[0]) + abs(v[0].origin[2] - old[0].origin[2]) >= 4 for old in selected)] if len(selected) < self.minimum: raise ContractError('interior-capacity', ctx.path, conditions=f'{len(selected)} bays fit; {self.minimum} required') targets = ((cx, 0, cz), *(v[0].point((0, 0, 2)) for v in selected)) clear = tuple((x, y, z) for x, z in sorted(aisle) for y in (0, 1)) envelope = bounds2(footprint, -1, 2) return Contract(envelope, rules=(Rule('clear', clear), Rule('route', targets, envelope, phase='complete')), decisions={'frames': [(v[0].origin, v[0].turn) for v in selected], 'requested_bays': wanted, 'placed_bays': len(selected), 'minimum_bays': self.minimum, 'omitted_optional': wanted - len(selected), 'purpose': self.purpose}) def realize(self, ctx, contract): return Plan(children=[Child(f'bay-{i}', WorkBay(self.purpose), frame=Frame(tuple(origin), turn)) for i, (origin, turn) in enumerate(contract.decisions['frames'])])
hearth_extensions/geometry.py
# Portable design geometry and deterministic voxelization shared by extension components. from dataclasses import dataclass import math from hearth.space import Box CARDINAL = ((1, 0), (-1, 0), (0, 1), (0, -1)) def lattice(value): """Round consistently across native Python and browser Python.""" return math.floor(value + 0.5) @dataclass(frozen=True) class Polyline: points: tuple[tuple[float, float], ...] def __post_init__(self): object.__setattr__(self, 'points', tuple(tuple(p) for p in self.points)) if len(self.points) < 2 or any(len(p) != 2 or not all(math.isfinite(v) for v in p) for p in self.points): raise ValueError('A finite polyline needs at least two two-dimensional points') if any(a == b for a, b in zip(self.points, self.points[1:])): raise ValueError('Repeated consecutive control points') @classmethod def bezier(cls, controls, segments=32): if len(controls) != 4 or not 4 <= segments <= 256: raise ValueError('Cubic curves require four controls and 4..256 samples') points = [] for i in range(segments + 1): t = i / segments weights = ((1 - t)**3, 3 * t * (1 - t)**2, 3 * t * t * (1 - t), t**3) points.append(tuple(sum(w * p[k] for w, p in zip(weights, controls)) for k in (0, 1))) return cls(tuple(points)) @property def length(self): return sum(math.dist(a, b) for a, b in zip(self.points, self.points[1:])) def nearest(self, point): """Return distance, arc length, tangent and projection with stable tie breaks.""" best, walked = None, 0.0 for index, (a, b) in enumerate(zip(self.points, self.points[1:])): dx, dz = b[0] - a[0], b[1] - a[1] length = math.hypot(dx, dz) t = max(0, min(1, ((point[0] - a[0]) * dx + (point[1] - a[1]) * dz) / length**2)) q = (a[0] + t * dx, a[1] + t * dz) item = (math.dist(point, q), walked + t * length, index, (dx / length, dz / length), q) if best is None or item[:3] < best[:3]: best = item walked += length return best[0], best[1], best[3], best[4] def cells(self): """Rasterize a connected cardinal chain, retaining explicit diagonal turns.""" result = [] for a, b in zip(self.points, self.points[1:]): count = max(1, math.ceil(math.dist(a, b) * 4)) for i in range(count + 1): target = tuple(lattice(a[k] + (b[k] - a[k]) * i / count) for k in (0, 1)) if not result: result.append(target) while result[-1] != target: x, z = result[-1] tx, tz = target candidates = [] if x != tx: candidates.append((x + (1 if tx > x else -1), z)) if z != tz: candidates.append((x, z + (1 if tz > z else -1))) result.append(min(candidates, key=lambda p: (self.nearest(p)[0], p))) return tuple(result) def ribbon(self, radius, caps=False): xmin = math.floor(min(p[0] for p in self.points) - radius) xmax = math.ceil(max(p[0] for p in self.points) + radius) zmin = math.floor(min(p[1] for p in self.points) - radius) zmax = math.ceil(max(p[1] for p in self.points) + radius) a, b = self.points[0], self.points[-1] start = (self.points[1][0] - a[0], self.points[1][1] - a[1]) end = (b[0] - self.points[-2][0], b[1] - self.points[-2][1]) result = [] for x in range(xmin, xmax + 1): for z in range(zmin, zmax + 1): distance, station, _, _ = self.nearest((x, z)) if not caps and ((station <= 1e-9 and (x - a[0]) * start[0] + (z - a[1]) * start[1] < 0) or (station >= self.length - 1e-9 and (x - b[0]) * end[0] + (z - b[1]) * end[1] > 0)): continue if distance <= radius + 0.05: result.append((x, z)) return tuple(result) @dataclass(frozen=True) class Polygon: vertices: tuple[tuple[int, int], ...] def __post_init__(self): object.__setattr__(self, 'vertices', tuple(tuple(p) for p in self.vertices)) if len(self.vertices) < 3: raise ValueError('At least three polygon vertices required') @classmethod def chamfered(cls, width, depth, corner=0): if not 9 <= width <= 27 or not 9 <= depth <= 27 or not 0 <= corner <= min(width, depth) // 3: raise ValueError('Footprint domain: dimensions 9..27, corner 0..one third') x, z, c = width - 1, depth - 1, corner return cls(((0, 0), (x, 0), (x, z), (0, z)) if not c else ((c, 0), (x - c, 0), (x, c), (x, z - c), (x - c, z), (c, z), (0, z - c), (0, c))) def cells(self): result = [] for x in range(min(p[0] for p in self.vertices), max(p[0] for p in self.vertices) + 1): for z in range(min(p[1] for p in self.vertices), max(p[1] for p in self.vertices) + 1): inside = False edge = False for a, b in zip(self.vertices, self.vertices[1:] + self.vertices[:1]): cross = (x - a[0]) * (b[1] - a[1]) - (z - a[1]) * (b[0] - a[0]) if cross == 0 and min(a[0], b[0]) <= x <= max(a[0], b[0]) and min(a[1], b[1]) <= z <= max(a[1], b[1]): edge = True if (a[1] > z) != (b[1] > z) and x < (b[0] - a[0]) * (z - a[1]) / (b[1] - a[1]) + a[0]: inside = not inside if edge or inside: result.append((x, z)) return tuple(result) def perimeter(cells, diagonal=False): points = set(cells) steps = tuple((x, z) for x in (-1, 0, 1) for z in (-1, 0, 1) if x or z) if diagonal else CARDINAL return tuple(sorted(p for p in points if any((p[0] + dx, p[1] + dz) not in points for dx, dz in steps))) def bounds2(points, low, high): return Box((min(p[0] for p in points), low, min(p[1] for p in points)), (max(p[0] for p in points), high, max(p[1] for p in points)))
hearth_extensions/interfaces.py
# Public endpoint discovery and orientation checks shared by circulation components. from dataclasses import dataclass from hearth import Frame, Binding, ContractError from hearth.kernel import Capability, Contract, Plan, Rule @dataclass(frozen=True) class Endpoint: host: str port: str def binding(self): return Binding(self.host, self.port, 'connect') def resolve(self, ctx): port = ctx.view.port(self.host, self.port) if port.kind not in ('access', 'public-access'): raise ContractError('endpoint-kind', ctx.path, port.frame.origin, 'Require an access or public-access port') at = ctx.local(port.frame.origin) turn = (port.frame.turn - ctx.frame.turn) % 4 outward = Frame(turn=turn).vector((0, 0, -1)) return port, at, (outward[0], outward[2]) @dataclass(frozen=True) class EndpointContact: endpoint: Endpoint def capability(self): return Capability('extension.endpoint-contact', ('connection',), guarantees=('unchanged supported endpoint',)) def negotiate(self, ctx, parameters): port, at, direction = self.endpoint.resolve(ctx) from hearth.space import Box return Contract(Box(at, at).expand(1), rules=(Rule('support', ((at[0], at[1] - 1, at[2]),)), Rule('clear', (at, (at[0], at[1] + 1, at[2]))))) def realize(self, ctx, contract): return Plan()
hearth_extensions/__init__.py
# Components developed against Hearth's public protocol in the second development phase. from .geometry import Polyline, Polygon from .interfaces import Endpoint, EndpointContact from .circulation import Link, connection from .boundaries import Boundary, BoundaryLantern, IlluminateBoundary from .sites import Platform from .halls import Pavilion, PolygonShell, HipRoof, Facade from .interiors import HallInterior, WorkBay
hearth_extensions/circulation.py
# Measured ribbon circulation, support grids and guard geometry through public contracts. from dataclasses import dataclass import math from hearth import Box, Frame, Binding, ContractError from hearth.blocks import state_of, stairs, slab, log, solid, passable, name_of from hearth.kernel import Capability, Domain, Contract, Port, Grant, Plan, Rule, Child, validator, Diagnostic from .geometry import Polyline, CARDINAL, bounds2, perimeter, lattice from .interfaces import Endpoint @validator('extension.guard') def guard_rule(scene, node, rule): for p in rule.cells: if name_of(scene.view.state(p)) not in ('spruce_fence', 'spruce_log', 'stone_brick_wall'): yield Diagnostic('bridge-guard', node.path, p, 'A required outer guard cell is absent') @validator('extension.span') def span_rule(scene, node, rule): supports = [node.frame.point(tuple(p)) for p in rule.data['anchors']] for p in rule.cells: if not supports or min(abs(p[0] - q[0]) + abs(p[2] - q[2]) for q in supports) > rule.data['maximum']: yield Diagnostic('unsupported-span', node.path, p, 'Deck exceeds declared supported horizontal span') @dataclass(frozen=True) class Surface: points: tuple role: str = 'deck' material: str = 'spruce_planks' def capability(self): tags = ('surface', self.role) + (('path', 'siteworks') if self.role in ('deck', 'platform') else ()) return Capability('extension.' + self.role, tags) def negotiate(self, ctx, parameters): box = Box.enclosing(self.points) return Contract(box, rules=(Rule('support', self.points),)) def realize(self, ctx, contract): p = Plan() heights = {(x, z): y for x, y, z in self.points} for x, y, z in self.points: uphill = next((face for dx, dz, face in ((1, 0, 'east'), (-1, 0, 'west'), (0, 1, 'south'), (0, -1, 'north')) if heights.get((x + dx, z + dz), y) == y + 1), None) p.block((x, y, z), stairs('spruce', uphill) if uphill else state_of(self.material), 'walk-surface') return p @dataclass(frozen=True) class Trestles: columns: tuple maximum: int = 8 def capability(self): return Capability('extension.trestles', ('siteworks', 'support'), adaptations=('posts to actual bed', 'stone shoes'), inputs={'maximum': Domain(2, 8)}) def negotiate(self, ctx, parameters): cells = tuple((x, y, z) for x, bed, z, top, wet in self.columns for y in range(bed - 1, top + 1)) if any(top - bed > self.maximum for x, bed, z, top, wet in self.columns): raise ContractError('connection-support-height', ctx.path, conditions=f'Post exceeds {self.maximum}') return Contract(Box.enclosing(cells), rules=(Rule('support', cells),), decisions={'columns': self.columns}) def realize(self, ctx, contract): p = Plan() for x, bed, z, top, wet in self.columns: for y in range(bed + 1, top + 1): p.block((x, y, z), state_of('stone_bricks') if y == bed + 1 or not wet else log(), 'pier') return p @dataclass(frozen=True) class Guards: points: tuple covered: bool = False roof: tuple = () def capability(self): return Capability('extension.guards', ('railing', 'roof' if self.covered else 'guard'), guarantees=('continuous outer guard',)) def negotiate(self, ctx, parameters): return Contract(Box.enclosing((*self.points, *self.roof)).expand(1), rules=(Rule('extension.guard', self.points),)) def realize(self, ctx, contract): p = Plan() occupied = {(x, z) for x, y, z in self.points} for i, (x, y, z) in enumerate(self.points): connections = {face: str((x + dx, z + dz) in occupied).lower() for dx, dz, face in ((1, 0, 'east'), (-1, 0, 'west'), (0, 1, 'south'), (0, -1, 'north'))} p.block((x, y, z), state_of('spruce_fence', waterlogged='false', **connections), 'guard') if self.covered: for yy in (y + 1, y + 2): p.block((x, yy, z), log() if i % 5 == 0 else state_of('spruce_fence', waterlogged='false', **connections), 'gallery-frame') for x, y, z in self.roof: p.block((x, y, z), slab('dark_oak', 'top'), 'gallery-canopy') return p @dataclass(frozen=True) class Link: start: Endpoint end: Endpoint terrain: str via: tuple = () curve: Polyline | None = None width: int = 3 rise: int = 0 covered: bool = False max_post: int = 8 max_span: int = 6 max_length: int = 120 fill_limit: int = 800 def capability(self): return Capability('extension.gallery' if self.covered else 'extension.bridge', ('connection', 'path', 'composite'), offers=('access',), adaptations=('bounded height profile', 'actual-bed trestles', 'supported deck reuse at endpoints'), guarantees=('both public endpoints reachable', 'two-cell headroom', 'outer guard'), inputs={'width': Domain(choices=(3, 5)), 'rise': Domain(0, 3), 'max_post': Domain(2, 8), 'max_span': Domain(3, 6)}, locked=('start', 'end', 'via', 'curve', 'width', 'covered')) def negotiate(self, ctx, parameters): pa, a, da = self.start.resolve(ctx) pb, b, db = self.end.resolve(ctx) required = {(self.start.host, self.start.port), (self.end.host, self.end.port)} if not required.issubset({(v.host, v.port) for v in ctx.bindings if v.verb == 'connect'}): raise ContractError('endpoint-binding', ctx.path, conditions='Both endpoints need explicit read-only connection bindings') points = ((a[0], a[2]), (a[0] + 3 * da[0], a[2] + 3 * da[1]), *self.via, (b[0] + 3 * db[0], b[2] + 3 * db[1]), (b[0], b[2])) curve = self.curve or Polyline(tuple(points)) if curve.points[0] != (a[0], a[2]) or curve.points[-1] != (b[0], b[2]): raise ContractError('endpoint-disconnected', ctx.path, ctx.world(a), 'Curve ends must match the negotiated public ports') for point, next_point, direction in ((curve.points[0], curve.points[1], da), (curve.points[-1], curve.points[-2], db)): delta = (next_point[0] - point[0], next_point[1] - point[1]) if delta[0] * direction[1] - delta[1] * direction[0] != 0 or delta[0] * direction[0] + delta[1] * direction[1] <= 0: raise ContractError('endpoint-frame', ctx.path, ctx.world((int(point[0]), a[1], int(point[1]))), 'First and last tangents must point out of the host') if curve.length > self.max_length or curve.length < 7: raise ContractError('connection-domain', ctx.path, conditions='Route length exceeds the negotiated preparation budget') center = curve.cells() if len(set(center)) != len(center): raise ContractError('connection-domain', ctx.path, conditions='Need a simple route of length 7..maximum') radius = self.width // 2 + 1 deck = curve.ribbon(radius + .2) station = {p: min(range(len(center)), key=lambda i: (math.dist(p, center[i]), i)) for p in deck} count = len(center) # Preserve the host's offered mouth width, then flare to the body width. mouth_widths = [] for port in (pa, pb): horizontal = [port.frame.inverse(q)[0] for q in port.region.corners()] mouth_widths.append(max(horizontal) - min(horizontal) + 1) if min(mouth_widths) < 3: raise ContractError('endpoint-width', ctx.path, ctx.world(a), 'Connection needs an offered mouth at least three cells wide') deck = tuple(p for p in deck if (station[p] >= 3 or abs(pa.frame.inverse(ctx.world((p[0], a[1], p[1])))[0]) <= mouth_widths[0] // 2) and (station[p] < count - 3 or abs(pb.frame.inverse(ctx.world((p[0], b[1], p[1])))[0]) <= mouth_widths[1] // 2)) heights = [lattice((a[1] - 1) * (1 - i / (count - 1)) + (b[1] - 1) * i / (count - 1) + self.rise * math.sin(math.pi * i / (count - 1))) for i in range(count)] beds = {} waters = {} endpoint_regions = (pa.region, pb.region) for x, z in deck: cap = max(a[1], b[1]) + self.rise + 2 bed = ctx.elevation(x, z, maximum=cap) water = ctx.water(x, z) beds[(x, z)] = bed waters[(x, z)] = water i = station[(x, z)] heights[i] = max(heights[i], bed, water + 1 if water is not None else bed) # Minimal upward propagation, preserving fixed endpoint elevations. for i in range(1, count): heights[i] = max(heights[i], heights[i - 1] - 1) for i in range(count - 2, -1, -1): heights[i] = max(heights[i], heights[i + 1] - 1) if heights[0] != a[1] - 1 or heights[-1] != b[1] - 1: raise ContractError('endpoint-grade', ctx.path, ctx.world(a), 'Measured ground/water cannot meet the locked endpoint heights') outer = set(perimeter(deck)) guards = [] clear = [] all_deck = [] writes = [] for x, z in deck: i = station[(x, z)] y = heights[i] q = ctx.world((x, y, z)) host_region = any(region.contains(q) for region in endpoint_regions) is_guard = (x, z) in outer and 2 < i < count - 3 and not host_region all_deck.append((x, y, z)) if is_guard: guards.append((x, y + 1, z)) else: clear.extend(((x, y + 1, z), (x, y + 2, z))) existing = ctx.view.state(q) if solid(existing) and host_region: continue writes.append((x, y, z)) anchors = [] for x, z in sorted(deck, key=lambda p: (station[p], p)): if any(abs(x - u) + abs(z - v) <= self.max_span for u, v in anchors): continue # Prefer the central route where possible, then cover wide diagonal corners. near = center[station[(x, z)]] anchor = near if near in beds else (x, z) if anchor in anchors: anchor = (x, z) anchors.append(anchor) columns = [] for x, z in anchors: top = heights[station[(x, z)]] - 1 bed = min(beds[(x, z)], top) while not ctx.view.supports(ctx.world((x, bed, z))): bed -= 1 if top - bed > self.max_post: raise ContractError('connection-support-height', ctx.path, ctx.world((x, top, z))) if not ctx.view.supports(ctx.world((x, bed - 1, z))): raise ContractError('connection-bed', ctx.path, ctx.world((x, bed - 1, z)), 'Need two actual supporting bed cells') columns.append((x, bed, z, top, waters[(x, z)] is not None)) fill = sum(max(0, top - bed) for x, bed, z, top, wet in columns) if fill > self.fill_limit: raise ContractError('connection-fill-limit', ctx.path, conditions=f'{fill}>{self.fill_limit}') roof = tuple((x, y + 5, z) for x, y, z in all_deck if self.covered and 3 < station[(x, z)] < count - 4) guard_points = tuple(guards) low = min(min(beds.values()) - 1, min(heights)) envelope = bounds2(deck, low, max(heights) + 7).expand(1) center_route = tuple((x, heights[i] + 1, z) for i, (x, z) in enumerate(center)) rules = (Rule('route', (a, *center_route, b), envelope, phase='complete'), Rule('support', tuple(all_deck)), Rule('clear', tuple(clear)), Rule('extension.span', tuple(all_deck), data={'anchors': [(x, 0, z) for x, z in anchors], 'maximum': self.max_span})) return Contract(envelope, ports=(Port('start', 'access', Frame(a), Box(a, a), 8), Port('end', 'access', Frame(b), Box(b, b), 8)), rules=rules, decisions={'curve': curve.points, 'center': center, 'profile': heights, 'deck': all_deck, 'writes': writes, 'guards': guard_points, 'columns': columns, 'roof': roof, 'fill': fill, 'width': self.width, 'covered': self.covered, 'rise': self.rise, 'endpoint_regions': [[r.lo, r.hi] for r in endpoint_regions]}, reads=(envelope,)) def realize(self, ctx, contract): d = contract.decisions terrain = (Binding(self.terrain, 'construction', 'fill', ctx.frame.box(contract.envelope)),) p = Plan(children=[Child('supports', Trestles(tuple(d['columns']), self.max_post), bindings=terrain), Child('deck', Surface(tuple(d['writes'])), bindings=terrain), Child('guards', Guards(tuple(d['guards']), self.covered, tuple(d['roof'])))]) p.relations.extend(((ctx.path, 'connects', self.start.host), (ctx.path, 'connects', self.end.host))) return p def connection(key, start, end, terrain, **parameters): """Create a fully bound link through public endpoint references.""" return Child(key, Link(start, end, terrain, **parameters), bindings=(start.binding(), end.binding()))
hearth_extensions/boundaries.py
# Curve-following masonry with sampled installation sockets and grounded adaptation. from dataclasses import dataclass from hearth import Box, Frame, Binding, ContractError from hearth.kernel import Capability, Contract, Domain, Port, Grant, Plan, Rule, Child from hearth.blocks import state_of, slab from .geometry import Polyline, bounds2 @dataclass(frozen=True) class Boundary: curve: Polyline height: int = 2 spacing: int = 7 max_step: int = 1 def capability(self): return Capability('extension.curved-boundary', ('boundary', 'siteworks', 'composite'), offers=('mount',), inputs={'height': Domain(1, 5), 'spacing': Domain(4, 12), 'max_step': Domain(0, 1)}, adaptations=('terrain-following base', 'stepped coping'), guarantees=('continuous cardinal contour', 'grounded boundary', 'mount sockets')) def negotiate(self, ctx, parameters): center = self.curve.cells() if len(center) > 220 or len(set(center)) != len(center): raise ContractError('boundary-domain', ctx.path, conditions='Simple open contour, at most 220 raster cells') levels = [ctx.elevation(x, z) for x, z in center] if any(abs(a - b) > self.max_step for a, b in zip(levels, levels[1:])): raise ContractError('boundary-grade', ctx.path, conditions='Adjacent wall foundations exceed step bound') ports = [] grants = [] for i in range(2, len(center) - 2, self.spacing): x, z = center[i] y = levels[i] + self.height + 2 x0, z0 = center[max(0, i - 1)] x1, z1 = center[min(len(center) - 1, i + 1)] turn = 0 if abs(x1 - x0) >= abs(z1 - z0) else 1 at = (x, y, z) key = f'mount-{i}' box = Box(at, at) ports.append(Port(key, 'mount', Frame(at, turn), box, 1, key, facts={'support': (x, y - 1, z), 'load': 'small-fixture'})) grants.append(Grant(key, box, ('install',), ('fixture',), 0)) supports = tuple((x, levels[i], z) for i, (x, z) in enumerate(center)) shell = tuple((x, y, z) for i, (x, z) in enumerate(center) for y in range(levels[i] + 1, levels[i] + self.height + 2)) box = Box.enclosing((*supports, *shell)).expand(2) return Contract(box, tuple(ports), tuple(grants), (Rule('support', supports), Rule('sealed', shell)), decisions={'center': center, 'levels': levels, 'height': self.height}, reads=(box,)) def realize(self, ctx, contract): p = Plan() d = contract.decisions rng = ctx.rng('masonry') for i, (x, z) in enumerate(d['center']): for y in range(d['levels'][i] + 1, d['levels'][i] + self.height + 1): p.block((x, y, z), state_of(rng.choice(('stone_bricks', 'stone_bricks', 'mossy_stone_bricks'))), 'contour-masonry') p.block((x, d['levels'][i] + self.height + 1, z), slab('stone_brick', 'top'), 'coping') return p @dataclass(frozen=True) class BoundaryLantern: def capability(self): return Capability('extension.boundary-lantern', ('fixture', 'light'), guarantees=('mounted actual light',)) def negotiate(self, ctx, parameters): return Contract(Box((0, 0, 0), (0, 1, 0)), rules=(Rule('support', ((0, -1, 0),)), Rule('expected', ((0, 0, 0),), data={'names': ['lantern']})), atomic_object=True) def realize(self, ctx, contract): p = Plan() p.block((0, 0, 0), state_of('lantern', hanging='false', waterlogged='false'), 'lamp') return p @dataclass(frozen=True) class IlluminateBoundary: host: str every: int = 1 def capability(self): return Capability('extension.boundary-lighting', ('composite',)) def negotiate(self, ctx, parameters): ports = ctx.view.offers(self.host, 'mount')[::self.every] if not ports: raise ContractError('missing-mounts', ctx.path) return Contract(Box.enclosing(ctx.local(p.frame.origin) for p in ports).expand(1)) def realize(self, ctx, contract): p = Plan() for port in ctx.view.offers(self.host, 'mount')[::self.every]: frame = Frame(ctx.local(port.frame.origin), (port.frame.turn - ctx.frame.turn) % 4) p.children.append(Child(port.key, BoundaryLantern(), frame=frame, bindings=(Binding(self.host, port.key),))) return p @dataclass(frozen=True) class BoundaryChain: curve: Polyline height: int = 2 spacing: int = 7 chunk: int = 96 def capability(self): return Capability('extension.boundary-chain', ('boundary', 'composite'), offers=('mount',), inputs={'chunk': Domain(4, 220), 'height': Domain(1, 5), 'spacing': Domain(4, 12)}, guarantees=('continuous contour across component joins',)) def parts(self): cells = self.curve.cells() if len(set(cells)) != len(cells): raise ContractError('boundary-self-intersection', conditions='A simple open contour is required') count = max(1, (len(cells) + self.chunk - 1) // self.chunk) size = (len(cells) + count - 1) // count return tuple(Boundary(Polyline(cells[i:i + size]), self.height, self.spacing) for i in range(0, len(cells), size)) def negotiate(self, ctx, parameters): boxes = [] ports = [] last_height = None for i, part in enumerate(self.parts()): local = part.negotiate(ctx, {}) if last_height is not None and abs(local.decisions['levels'][0] - last_height) > part.max_step: raise ContractError('boundary-grade', ctx.path, conditions='Grade bound also applies at component joins') last_height = local.decisions['levels'][-1] boxes.append(local.envelope) for p in local.ports: ports.append(Port(f'segment-{i}-{p.key}', p.kind, p.frame, p.region, p.capacity, facts=p.facts, delegate=(f'segment-{i}', p.key))) return Contract(Box.enclosing(p for box in boxes for p in box.corners()), ports=tuple(ports), decisions={'segments': len(boxes), 'curve': self.curve.points}) def realize(self, ctx, contract): return Plan(children=[Child(f'segment-{i}', part) for i, part in enumerate(self.parts())])
hearth_extensions/sites.py
# Accessible platforms with measured supports and oriented edge ports. from dataclasses import dataclass from hearth import Box, Frame, Binding, ContractError from hearth.kernel import Capability, Contract, Plan, Child, Port, Rule, Domain from hearth.blocks import state_of from hearth.adapters.site import Foundation, SiteLimits, survey from .geometry import Polygon, bounds2 from .circulation import Surface DIRECTIONS = {'north': (0, -1, 0), 'east': (1, 0, 1), 'south': (0, 1, 2), 'west': (-1, 0, 3)} def edge_frames(width, depth, height): return {'north': Frame((width // 2, height, 0), 0), 'east': Frame((width - 1, height, depth // 2), 1), 'south': Frame((width // 2, height, depth - 1), 2), 'west': Frame((0, height, depth // 2), 3)} @dataclass(frozen=True) class Platform: terrain: str width: int = 9 depth: int = 9 freeboard: int = 1 def capability(self): return Capability('extension.platform', ('platform', 'composite', 'access'), offers=('access',), inputs={'width': Domain(5, 27), 'depth': Domain(5, 27), 'freeboard': Domain(1, 3)}) def negotiate(self, ctx, parameters): footprint = tuple((x, z) for x in range(self.width) for z in range(self.depth)) samples = survey(ctx, footprint) y = samples['floor'] + self.freeboard - 1 region = bounds2(footprint, min(v[0] for v in samples['samples'].values()) - 1, y + 3) ports = tuple(Port(k, 'access', f, f.box(Box((-2, -1, 0), (2, 1, 0))), 8) for k, f in edge_frames(self.width, self.depth, y + 1).items()) return Contract(region, ports=ports, decisions={'floor': y, 'footprint': footprint, 'strategy': samples['strategy']}, rules=(Rule('route', tuple(f.frame.origin for f in ports), region, phase='complete'),)) def realize(self, ctx, contract): d = contract.decisions p = Plan(children=[Child('foundation', Foundation(tuple(d['footprint']), d['floor'], d['strategy']), bindings=(Binding(self.terrain, 'construction', 'fill'),)), Child('deck', Surface(tuple((x, d['floor'], z) for x, z in d['footprint']), role='platform'))]) return p
hearth_extensions/halls.py
# Polygon halls, public facade installation and concentric hipped roof components. from dataclasses import dataclass from hearth import Box, Frame, Binding, ContractError from hearth.kernel import Capability, Contract, Port, Grant, Rule, Plan, Child, Domain, Context from hearth.blocks import state_of, log, slab, stairs from hearth.adapters.site import survey, Foundation, Approach, SiteLimits from hearth.components.interior import Door, Light from hearth.components.primitives import Window from .geometry import Polygon, CARDINAL, bounds2, perimeter from .sites import edge_frames from .circulation import Surface from .interiors import HallInterior, FUNCTION_GROUPS @dataclass(frozen=True) class PolygonShell: footprint: Polygon height: int = 5 entrances: tuple = ('north', 'south') def capability(self): return Capability('extension.polygon-shell', ('wall', 'enclosure'), offers=('wall-installation',), guarantees=('continuous enclosure', 'protected floor support'), inputs={'height': Domain(5, 7)}) def negotiate(self, ctx, parameters): footprint = self.footprint.cells() shell = perimeter(footprint, diagonal=True) xs = [x for x, z in footprint] zs = [z for x, z in footprint] width, depth = max(xs) + 1, max(zs) + 1 if min(xs) != 0 or min(zs) != 0: raise ContractError('polygon-origin', ctx.path, conditions='Normalize footprint minimum to (0,0)') frames = edge_frames(width, depth, 0) ports = [] grants = [] for side, f in frames.items(): for role, offset, size, base in [('entry', 0, 1, 0)] if side in self.entrances else []: at = f.compose(Frame((offset, base, 0))) region = at.box(Box((0, 0, 0), (size - 1, 2, 0))) if not all((p[0], p[2]) in shell for p in region.cells()): raise ContractError('polygon-entry', ctx.path, at.origin, 'Requested cardinal entry is not on the footprint boundary') key = 'entry-' + side ports.append(Port(key, 'wall-installation', at, region, 1, key, facts={'thickness': 1, 'role': role, 'side': side})) grants.append(Grant(key, region, ('install',), ('door',), 3)) for i, offset in enumerate((-4, 3)): at = f.compose(Frame((offset, 1, 0))) region = at.box(Box((0, 0, 0), (1, 1, 0))) if all((p[0], p[2]) in shell for p in region.cells()): key = f'window-{side}-{i}' ports.append(Port(key, 'wall-installation', at, region, 1, key, facts={'thickness': 1, 'role': 'window', 'side': side})) grants.append(Grant(key, region, ('install',), ('window',), 4)) blocks = tuple((x, y, z) for x, z in shell for y in range(self.height)) return Contract(bounds2(footprint, 0, self.height - 1), tuple(ports), tuple(grants), rules=(Rule('sealed', blocks), Rule('support', tuple((x, -1, z) for x, z in shell))), decisions={'shell': shell, 'height': self.height}) def realize(self, ctx, contract): p = Plan() vertices = set(self.footprint.vertices) for x, z in contract.decisions['shell']: for y in range(self.height): frame = (x, z) in vertices or y == self.height - 1 p.block((x, y, z), log() if frame else state_of('smooth_sandstone'), 'frame' if frame else 'infill') return p @dataclass(frozen=True) class Facade: host: str shutters: bool = True def capability(self): return Capability('extension.facade-installations', ('composite',)) def negotiate(self, ctx, parameters): box = ctx.view.contract(self.host).envelope return Contract(Box.enclosing(ctx.local(p) for p in box.corners()).expand(2)) def realize(self, ctx, contract): p = Plan() for port in ctx.view.offers(self.host, 'wall-installation'): component = Door() if port.facts['role'] == 'entry' else Window(shutters=self.shutters) frame = Frame(ctx.local(port.frame.origin), (port.frame.turn - ctx.frame.turn) % 4) p.children.append(Child(port.key, component, frame=frame, bindings=(Binding(self.host, port.key),))) return p @dataclass(frozen=True) class HipRoof: footprint: Polygon run: int = 2 lantern: bool = False material: str = 'deepslate_tile' def capability(self): return Capability('extension.hip-roof', ('roof', 'composite'), adaptations=('polygon inset courses',), inputs={'run': Domain(choices=(1, 2, 3))}, guarantees=('continuous concentric weather surface',)) def negotiate(self, ctx, parameters): points = set(self.footprint.cells()) points |= {(x + dx, z + dz) for x, z in tuple(points) for dx, dz in CARDINAL} remaining = set(points) depths = {} depth = 0 while remaining: ring = perimeter(remaining) for p in ring: depths[p] = depth remaining -= set(ring) depth += 1 courses = tuple((x, depths[(x, z)] // self.run, z) for x, z in sorted(points)) peak = max(y for x, y, z in courses) cx = (min(x for x, z in points) + max(x for x, z in points)) // 2 cz = (min(z for x, z in points) + max(z for x, z in points)) // 2 return Contract(bounds2(points, -1, peak + (15 if self.lantern else 7)), rules=(Rule('sealed', courses),), decisions={'courses': courses, 'peak': peak, 'center': (cx, cz), 'run': self.run, 'lantern': self.lantern}) def realize(self, ctx, contract): p = Plan() d = contract.decisions heights = {(x, z): y for x, y, z in d['courses']} for x, y, z in d['courses']: face = next((f for dx, dz, f in ((1, 0, 'east'), (-1, 0, 'west'), (0, 1, 'south'), (0, -1, 'north')) if heights.get((x + dx, z + dz), y) > y), None) material = 'dark_oak' if y == 0 else self.material p.block((x, y, z), stairs(material, face) if face else slab(material, 'top'), 'hip-course') if self.lantern: cx, cz = d['center'] p.children.append(Child('lantern', RoofLantern(), frame=Frame((cx - 2, d['peak'] + 1, cz - 2)))) return p @dataclass(frozen=True) class RoofLantern: def capability(self): return Capability('extension.roof-lantern', ('roof', 'daylight', 'composite')) def negotiate(self, ctx, parameters): return Contract(Box((-1, -3, -1), (5, 13, 5))) def realize(self, ctx, contract): p = Plan() for x in range(5): for z in range(5): bed = ctx.elevation(x, z, maximum=0) if bed < -4: raise ContractError('lantern-support', ctx.path, ctx.world((x, bed, z))) for y in range(bed + 1, 1): p.block((x, y, z), state_of('spruce_planks'), 'ring-beam') if x in (0, 4) or z in (0, 4): for y in (1, 2): p.block((x, y, z), log() if x in (0, 4) and z in (0, 4) else state_of('glass'), 'clerestory') p.children.append(Child('cap', HipRoof(Polygon(((0, 0), (4, 0), (4, 4), (0, 4))), run=2), frame=Frame((0, 3, 0)))) return p @dataclass(frozen=True) class Pavilion: footprint: Polygon terrain: str purpose: str = 'library' entrances: tuple = ('north', 'south') height: int = 5 roof_run: int = 2 lantern: bool = False limits: SiteLimits = SiteLimits() def capability(self): return Capability('extension.pavilion', ('building', 'habitable', 'composite'), offers=('access',), adaptations=('polygon support grid', 'independently measured approaches'), guarantees=('connected entrances', 'furnished lit enclosed hall'), inputs={'height': Domain(5, 7), 'purpose': Domain(choices=('living', 'library', 'workshop', 'kitchen', 'bedroom', 'storage'))}, locked=('footprint', 'purpose', 'entrances', 'height', 'roof_run', 'lantern')) def negotiate(self, ctx, parameters): points = self.footprint.cells() width = max(x for x, z in points) + 1 depth = max(z for x, z in points) + 1 if not 13 <= width <= 25 or not 13 <= depth <= 25 or not self.entrances: raise ContractError('hall-domain', ctx.path, conditions='Footprints 13..25, at least one declared entrance') measured = survey(ctx, points, self.limits) floor = measured['floor'] ports = [] approaches = [] frames = edge_frames(width, depth, 0) low = min(v[0] for v in measured['samples'].values()) - 1 roof = HipRoof(self.footprint, self.roof_run, self.lantern).negotiate(ctx, {}) boxes = [bounds2(points, low, floor + self.height + 3).expand(3), Frame((0, floor + self.height + 2, 0)).box(roof.envelope)] targets = [(width // 2, floor + 1, depth // 2)] for side in self.entrances: if side not in frames: raise ContractError('hall-entrance', ctx.path, conditions=side) f = frames[side] comp = Approach(0, floor, limits=self.limits) ac = comp.negotiate(Context(ctx.path, ctx.frame.compose(f), ctx.scope.child('approach-' + side), ctx.view, (), ctx.limits), {}) local = ac.transformed(f) port = local.ports[0] ports.append(Port(side, 'access', Frame(port.frame.origin, f.turn), port.region, 8, delegate=('approach-' + side, 'street'))) approaches.append((side, f, comp)) boxes.append(local.envelope) targets.extend(((f.origin[0], floor + 1, f.origin[2]), port.frame.origin)) envelope = Box.enclosing(p for box in boxes for p in box.corners()) interior = Box((1, floor + 1, 1), (width - 2, floor + self.height - 1, depth - 2)) return Contract(envelope, tuple(ports), rules=(Rule('route', tuple(targets), envelope, phase='complete'), Rule('light', tuple(targets[:1]), interior, {'minimum': 1}, 'complete'), Rule('furnishing', box=interior, data={'groups': FUNCTION_GROUPS[self.purpose]}, phase='complete')), decisions={'floor': floor, 'width': width, 'depth': depth, 'footprint': points, 'vertices': self.footprint.vertices, 'strategy': measured['strategy'], 'entrances': self.entrances, 'height': self.height, 'purpose': self.purpose, 'roof_run': self.roof_run, 'lantern': self.lantern}) def realize(self, ctx, contract): d = contract.decisions floor = d['floor'] w = d['width'] depth = d['depth'] p = Plan(children=[Child('foundation', Foundation(tuple(d['footprint']), floor, d['strategy'], self.limits), bindings=(Binding(self.terrain, 'construction', 'fill'),)), Child('floor', Surface(tuple((x, floor, z) for x, z in d['footprint']), role='hall-floor')), Child('ceiling', Surface(tuple((x, floor + self.height + 1, z) for x, z in d['footprint']), role='hall-ceiling')), Child('shell', PolygonShell(self.footprint, self.height, self.entrances), frame=Frame((0, floor + 1, 0))), Child('facade', Facade(ctx.path + '/shell'))]) for side in self.entrances: f = edge_frames(w, depth, 0)[side] p.children.append(Child('approach-' + side, Approach(0, floor, limits=self.limits), frame=f, bindings=(Binding(self.terrain, 'construction', 'surface'),))) p.children.append(Child('furnishings', HallInterior(self.footprint, self.purpose), frame=Frame((0, floor + 1, 0)))) for x in range(4, w - 3, 5): for z in range(4, depth - 3, 5): p.children.append(Child(f'light-{x}-{z}', Light(), frame=Frame((x, floor + self.height - 1, z)))) p.children.append(Child('roof', HipRoof(self.footprint, self.roof_run, self.lantern), frame=Frame((0, floor + self.height + 2, 0)))) return p
hearth_extensions/graphs.py
# Reusable campus graph composes arbitrary public building and circulation components. from dataclasses import dataclass from hearth import Box, Frame, ContractError from hearth.kernel import Capability, Contract, Port, Rule, Plan, Child, Context from .interfaces import Endpoint from .circulation import connection from .boundaries import BoundaryChain, IlluminateBoundary from hearth.components.landscape import Landscape @dataclass(frozen=True) class Vertex: key: str component: object frame: Frame @dataclass(frozen=True) class Edge: a: str a_port: str b: str b_port: str covered: bool = False via: tuple = () rise: int = 0 width: int = 3 @dataclass(frozen=True) class Campus: vertices: tuple[Vertex, ...] edges: tuple[Edge, ...] terrain: str envelope: Box boundary: object = None landscape: bool = True def capability(self): return Capability('extension.campus', ('settlement', 'composite'), offers=('public-access',), guarantees=('declared graph connected', 'usable realized building connections'), locked=('vertices', 'edges')) def negotiate(self, ctx, parameters): keys = {v.key for v in self.vertices} if len(keys) != len(self.vertices) or not keys: raise ContractError('graph-vertices', ctx.path) connected = {self.vertices[0].key} for edge in self.edges: if edge.a not in keys or edge.b not in keys or edge.a == edge.b: raise ContractError('graph-edge', ctx.path, conditions=str(edge)) while True: more = {v for e in self.edges if e.a in connected or e.b in connected for v in (e.a, e.b)} if more <= connected: break connected |= more if connected != keys: raise ContractError('graph-disconnected', ctx.path, conditions=str(sorted(keys - connected))) first = self.vertices[0] context = Context(ctx.path + '/' + first.key, ctx.frame.compose(first.frame), ctx.scope.child(first.key), ctx.view, (), ctx.limits) offered = first.component.negotiate(context, {}).transformed(first.frame).ports port = next((p for p in offered if p.kind in ('access', 'public-access')), None) if port is None: raise ContractError('graph-access', ctx.path, conditions='First vertex must expose usable access') gateway = Port('public', 'access', port.frame, port.region, port.capacity, delegate=(first.key, port.key)) return Contract(self.envelope, ports=(gateway,), decisions={'vertices': [v.key for v in self.vertices], 'edges': [(e.a, e.a_port, e.b, e.b_port, e.covered, e.width) for e in self.edges]}) def realize(self, ctx, contract): p = Plan(children=[Child(v.key, v.component, frame=v.frame) for v in self.vertices]) p.children.append(Child('circulation', Connections(ctx.path, self.edges, self.terrain, self.envelope))) if self.boundary is not None: p.children.extend((Child('boundary', BoundaryChain(self.boundary)), Child('boundary-lights', IlluminateBoundary(ctx.path + '/boundary', 2)))) if self.landscape: p.children.append(Child('landscape', Landscape(self.envelope, self.terrain, 8, 12, 0.025))) return p @dataclass(frozen=True) class Connections: parent: str edges: tuple[Edge, ...] terrain: str envelope: Box def capability(self): return Capability('extension.connection-graph', ('connection', 'composite')) def negotiate(self, ctx, parameters): targets = [] for edge in self.edges: for key, port in ((edge.a, edge.a_port), (edge.b, edge.b_port)): targets.append(ctx.local(ctx.view.port(self.parent + '/' + key, port).frame.origin)) return Contract(self.envelope, rules=(Rule('route', tuple(targets), self.envelope, phase='complete'),)) def realize(self, ctx, contract): p = Plan() for i, edge in enumerate(self.edges): a = Endpoint(self.parent + '/' + edge.a, edge.a_port) b = Endpoint(self.parent + '/' + edge.b, edge.b_port) p.children.append(connection(f'link-{i}', a, b, self.terrain, via=edge.via, covered=edge.covered, rise=edge.rise, width=edge.width)) return p
hearth_extensions/programs.py
# Lightweight graph clients using frozen generic fields and interchangeable public buildings. from hearth import Scene, Box, Frame from hearth.randomness import Scope from hearth.environment import Terrain, gradient, wave, radial from hearth.components.building import Blueprint, RoomSpec, Building from hearth.persistence import semantic_digest from .geometry import Polygon, Polyline from .halls import Pavilion from .graphs import Campus, Vertex, Edge DOMAIN = Box((-18, -4, -18), (95, 70, 95)) def frozen_site(environment_seed=0, domain=DOMAIN): rng = Scope(environment_seed).stream('environment') field = gradient(rng.choice((-.012, 0, .012)), rng.choice((-.009, .009)), 5) + wave(.5, .07, .09, rng.random() * 6) + radial(30, 31, 24, -3.8) scene = Scene(environment_seed, domain=domain) scene.place('land', Terrain(domain, field, water_level=3, edit_limit=2500)) return scene.finalize() def branching_campus(seed=0): rng = Scope(seed).stream('branching-graph') hub = Pavilion(Polygon.chamfered(17, 17, 4), '/land', 'library', ('north', 'east', 'south', 'west'), height=6, lantern=True) west = Pavilion(Polygon.chamfered(13, rng.choice((13, 17)), 2), '/land', 'workshop', ('north', 'south'), height=5) east = Pavilion(Polygon.chamfered(rng.choice((13, 17)), 13, 2), '/land', 'kitchen', ('west', 'south'), height=rng.choice((5, 6))) rooms = [RoomSpec(0, 0, 0, 'living'), RoomSpec(0, 0, 1, 'bedroom')] if rng.choice((False, True)): rooms.append(RoomSpec(0, 1, 0, 'storage')) lodge = Building(Blueprint(tuple(rooms), bay=9, porch=True), '/land') vertices = [Vertex('hall', hub, Frame((23, 0, 23))), Vertex('workshop', west, Frame((0, 0, 0))), Vertex('kitchen', east, Frame((51, 0, 0))), Vertex('lodge', lodge, Frame((48, 0, 51)))] edges = [Edge('hall', 'north', 'workshop', 'south', covered=True), Edge('hall', 'east', 'kitchen', 'west', rise=rng.choice((0, 1))), Edge('hall', 'south', 'lodge', 'street', covered=True)] if rng.choice((False, True)): vertices.append(Vertex('archive', Pavilion(Polygon.chamfered(13, 13, 2), '/land', 'library', ('east',)), Frame((0, 0, 51)))) edges.append(Edge('hall', 'west', 'archive', 'east', rise=1)) boundary = Polyline.bezier(((-12, 0), (-30, 120), (115, 120), (84, 0))) return Campus(tuple(vertices), tuple(edges), '/land', DOMAIN, boundary) def perimeter_cluster(seed=0): rng = Scope(seed).stream('perimeter-graph') widths = (rng.choice((17, 21, 25)), rng.choice((13, 17)), rng.choice((13, 17))) market = Pavilion(Polygon.chamfered(widths[0], 13, 2), '/land', 'workshop', ('north', 'east', 'south'), height=5, roof_run=3) reading = Pavilion(Polygon.chamfered(widths[1], 17, 3), '/land', 'library', ('north', 'south'), height=6, lantern=rng.choice((True, False))) dining = Pavilion(Polygon.chamfered(widths[2], 13, 2), '/land', 'living', ('east', 'west'), height=5) vertices = (Vertex('market', market, Frame((0, 0, 0))), Vertex('reading', reading, Frame((50, 0, 10))), Vertex('dining', dining, Frame((20, 0, 57)))) edges = (Edge('market', 'east', 'reading', 'north', via=((40, -5),), covered=False, rise=1), Edge('reading', 'south', 'dining', 'east', covered=True), Edge('dining', 'west', 'market', 'south', via=((9, 42),), rise=rng.choice((0, 1)))) boundary = Polyline.bezier(((-12, 0), (-30, 120), (115, 120), (84, 0))) return Campus(vertices, edges, '/land', DOMAIN, boundary) def extension_scene(program=branching_campus, seed=0, environment_seed=0): environment = frozen_site(environment_seed) original = semantic_digest(environment) scene = environment.fork(seed=seed) scene.place('campus', program(seed)) scene.finalize() if semantic_digest(environment) != original: raise AssertionError('Frozen input mutated') return scene
hearth_extensions/assessment.py
# Frozen extension inputs, actual principal/contact signatures and retained outcomes. import hashlib import json import time from pathlib import Path from dataclasses import replace from collections import Counter from hearth import Scene, Box, Frame, Binding from hearth.kernel import ContractError, SearchExhausted, validate from hearth.environment import Terrain, gradient, wave, radial from hearth.randomness import Scope from hearth.persistence import semantic_digest, export_scene from hearth.blocks import solid from .geometry import Polyline, Polygon from .sites import Platform from .interfaces import Endpoint from .circulation import Link from .boundaries import BoundaryChain, IlluminateBoundary from .halls import Pavilion from .programs import frozen_site, branching_campus, perimeter_cluster PROBE_DOMAIN = Box((-8, -4, -8), (45, 52, 45)) def probe_expression(environment_seed): rng = Scope(environment_seed).stream('probe-field') return (gradient(rng.choice((-.025, 0, .035)), rng.choice((0, .015)), 2) + wave(rng.choice((0, .35, .7)), .11, .09, rng.random() * 6) + radial(16, 18, 14, -rng.choice((0, 1, 2)))).clamp(-1, 5), rng.choice((None, 3)) def freeze_probe(environment_seed): field, water = probe_expression(environment_seed) s = Scene(environment_seed, domain=PROBE_DOMAIN) s.place('land', Terrain(s.domain, field, water)) return s.finalize() def connector_scene(environment, structure_seed): s = environment.fork(seed=structure_seed) rng = Scope(structure_seed).stream('connection-intent') s.place('a', Platform('/land')) s.place('b', Platform('/land'), frame=Frame((18, 0, 27))) a, b = Endpoint('/a', 'south'), Endpoint('/b', 'north') link = Link(a, b, '/land', via=((rng.choice((9, 12, 15)), rng.choice((16, 18, 20))),), width=rng.choice((3, 5)), rise=rng.choice((0, 1, 2)), covered=rng.choice((True, False))) s.place('link', link, bindings=(a.binding(), b.binding())) return s.finalize() def boundary_scene(environment, structure_seed): rng = Scope(structure_seed).stream('boundary-intent') controls = ((0, 0), (8, rng.choice((0, 10, 23))), (28, rng.choice((0, 5, 18))), (37, 18)) curve = Polyline(((0, 0), (37, 18))) if structure_seed == 0 else Polyline.bezier(controls) s = environment.fork(seed=structure_seed) s.place('boundary', BoundaryChain(curve, height=rng.choice((1, 2, 3)), spacing=rng.choice((4, 7, 10)))) s.place('lights', IlluminateBoundary('/boundary')) return s.finalize() def hall_scene(seed, environment_seed=None): rng = Scope(seed).stream('hall-intent') domain = Box((-12, -4, -12), (42, 65, 42)) es = seed if environment_seed is None else environment_seed field = gradient(.012, -.008, 4) + wave(.5, .1, .12, Scope(es).stream('hall-field').random() * 6) env = Scene(es, domain=domain) env.place('land', Terrain(domain, field)) env.finalize() s = env.fork(seed=seed) shape = Polygon.chamfered(rng.choice((13, 17, 21, 25)), rng.choice((13, 17, 21)), rng.choice((0, 2, 4))) s.place('hall', Pavilion(shape, '/land', rng.choice(('library', 'workshop', 'living')), ('north', 'south', 'east') if rng.choice((True, False)) else ('north', 'west'), height=rng.choice((5, 6, 7)), roof_run=rng.choice((2, 3)), lantern=rng.choice((True, False)))) return s.finalize() def signatures(scene): """Measure current semantic geometry, omitting cosmetic material and contact height.""" halls = [] links = [] boundaries = [] organization = [] for path, node in sorted(scene.nodes.items()): d = node.contract.decisions if node.type == 'extension.pavilion': footprint = sorted((node.frame.inverse(p)[0], node.frame.inverse(p)[2]) for p in scene.cells(path + '/floor')) halls.append({'footprint': footprint, 'height': d['height'], 'function': d['purpose'], 'entrances': d['entrances'], 'roof_run': d['roof_run'], 'lantern': d['lantern']}) if node.type in ('extension.bridge', 'extension.gallery'): pts = [node.frame.inverse(p) for p in scene.cells(path + '/deck')] x0, z0 = d['center'][0] links.append({'body': sorted((p[0] - x0, p[2] - z0) for p in pts), 'width': d['width'], 'covered': d['covered'], 'rise': d['rise']}) if node.type == 'extension.boundary-chain': pts = [node.frame.inverse(p) for p in scene.cells(path, True) if 'boundary-lantern' not in scene.nodes[scene.inspect(p)['instance']].type] x0 = min(p[0] for p in pts) z0 = min(p[2] for p in pts) columns = {} for x, y, z in pts: columns.setdefault((x, z), []).append(y) boundaries.append({'plan': sorted(set((p[0] - x0, p[2] - z0) for p in pts)), 'section_heights': sorted({max(ys) - min(ys) + 1 for ys in columns.values()})}) if node.type == 'extension.campus': vertex_keys = d['vertices'] vertices = [] for key in vertex_keys: v = scene.nodes[path + '/' + key] at = node.frame.inverse(v.frame.origin) vertices.append((at[0], at[2], v.capability.tags)) topology = sorted((vertex_keys.index(a), pa, vertex_keys.index(b), pb, covered, width) for a, pa, b, pb, covered, width in d['edges']) organization.append({'positions': vertices, 'topology': topology}) from hearth.assessment import principal_signature legacy = principal_signature(scene)[1]['buildings'] principal = {'halls': halls, 'links': links, 'boundaries': boundaries, 'organization': organization, 'legacy': legacy} contact = [] fill = 0 replaced = 0 excavated = 0 edit_occupied = 0 for path, node in sorted(scene.nodes.items()): if node.type in ('extension.trestles', 'adapter.foundation', 'adapter.approach'): contact.append((node.type, node.contract.decisions)) fill += len(scene.cells(path)) if node.type == 'extension.curved-boundary': contact.append((node.type, [node.frame.inverse(p) for r in node.contract.rules if r.kind == 'support' for p in r.cells])) if node.capability and set(node.capability.tags).intersection(('siteworks', 'path')): edit_occupied += len(scene.cells(path)) replaced += len(scene.displaced.get(path, {})) excavated += sum(solid(old.state) and (p not in scene.blocks or not solid(scene.blocks[p].state)) for p, old in scene.displaced.get(path, {}).items()) digest = lambda x: hashlib.sha256(json.dumps(x, sort_keys=True, default=list).encode()).hexdigest() interiors = [n for n in scene.nodes.values() if n.type == 'extension.hall-interior'] return {'principal_signature': digest(principal), 'structure': principal, 'contact_signature': digest(contact), 'contact_cells': fill, 'contact_replacements': replaced, 'sitework_occupied_cells': edit_occupied, 'excavated_solid_cells': excavated, 'furnishing_bays': sum(n.contract.decisions['placed_bays'] for n in interiors), 'omitted_optional_furnishing_bays': sum(n.contract.decisions['omitted_optional'] for n in interiors)} def measured(label, recipe, inputs, artifact=None): start = time.perf_counter() row = {'label': label, 'inputs': inputs, 'candidate_attempts': 1, 'accepted_candidates': 0, 'retries': 0} try: scene = recipe() scene.finalize() row.update(status='validated', accepted_candidates=1, blocks=len(scene.blocks), instances=len(scene.nodes), digest=semantic_digest(scene), **signatures(scene)) if artifact: export_scene(scene, artifact) row['artifact'] = str(artifact) except ContractError as exc: limits = ('site-relief', 'support-height', 'connection-support-height', 'connection-fill-limit', 'boundary-grade', 'endpoint-grade', 'approach-detour', 'connection-domain') row.update(status='budget-exhausted' if isinstance(exc, SearchExhausted) else ('incompatible' if exc.diagnostic.rule in limits else 'defect'), diagnostic=exc.diagnostic.__dict__, all_diagnostics=[d.__dict__ for d in getattr(exc, 'diagnostics', [exc.diagnostic])]) except Exception as exc: row.update(status='defect', diagnostic={'exception': type(exc).__name__, 'message': str(exc)}) row['seconds'] = round(time.perf_counter() - start, 4) return row def run(output, root_seed=0, artifacts=False, sample_output=Path('samples/extensions')): output = Path(output) output.mkdir(parents=True, exist_ok=True) rows = [] frozen = {} inputs = [] for es in range(root_seed * 100, root_seed * 100 + 8): frozen[es] = freeze_probe(es) field, water = probe_expression(es) inputs.append({'environment_seed': es, 'expression': field.expression(), 'water': water, 'digest': semantic_digest(frozen[es])}) (output / 'frozen-inputs.json').write_text(json.dumps(inputs, indent=2)) def record(label, fn, parameters, keep=False): path = Path(sample_output) / (label + '.litematic') if keep and artifacts else None row = measured(label, fn, parameters, path) rows.append(row) print(label, row['status'], flush=True) for i, es in enumerate(frozen): for bs in range(6): record(f'connector-{i}-{bs}', lambda e=frozen[es], b=bs: connector_scene(e, b), {'environment': inputs[i], 'structure_seed': bs}, (i, bs) in ((0, 0), (1, 2), (4, 3), (7, 5))) assert semantic_digest(frozen[es]) == inputs[i]['digest'] for es in range(4): # Independent dry substrates use the same field expression with water omitted. field, _ = probe_expression(es + root_seed * 100) env = Scene(es + root_seed * 100, domain=PROBE_DOMAIN) env.place('land', Terrain(env.domain, field)) env.finalize() for bs in range(4): record(f'boundary-{es}-{bs}', lambda e=env, b=bs: boundary_scene(e, b), {'environment_seed': es + root_seed * 100, 'expression': field.expression(), 'structure_seed': bs}, (es, bs) in ((0, 1), (3, 3))) for seed in range(12): record(f'hall-{seed}', lambda b=seed: hall_scene(b, root_seed * 100 + b), {'structure_seed': seed, 'environment_seed': root_seed * 100 + seed}, seed in (0, 4, 7)) for name, program in (('campus', branching_campus), ('perimeter', perimeter_cluster)): for seed in range(6): environment = frozen_site(root_seed * 100 + seed) identity = semantic_digest(environment) def recipe(e=environment, b=seed, p=program): s = e.fork(seed=b) s.place('campus', p(b)) return s.finalize() record(f'{name}-{seed}', recipe, {'program': name, 'structure_seed': seed, 'environment_seed': root_seed * 100 + seed, 'frozen_digest': identity}, seed in (0, 3)) assert semantic_digest(environment) == identity for i in range(24): es = 2000 + root_seed * 100 + i rng = Scope(es).stream('stress') field = (gradient(rng.choice((0, .12, .28)), rng.choice((0, -.12, .15)), 2) + wave(rng.choice((0, 2, 4)), .13, .1, rng.random() * 6)).clamp(-2, 18) water = rng.choice((None, 3, 9, 12)) env = Scene(es, domain=PROBE_DOMAIN) env.place('land', Terrain(env.domain, field, water)) env.finalize() record(f'stress-{i:02}', lambda e=env, b=i % 6: connector_scene(e, b), {'environment_seed': es, 'structure_seed': i % 6, 'expression': field.expression(), 'water': water}) (output / 'results.json').write_text(json.dumps(rows, indent=2)) summary = {} for name in ('connector', 'boundary', 'hall', 'campus', 'perimeter', 'stress'): part = [r for r in rows if r['label'].startswith(name + '-')] good = [r for r in part if r['status'] == 'validated'] summary[name] = {'inputs': len(part), 'outcomes': dict(Counter(r['status'] for r in part)), 'candidate_attempts': sum(r['candidate_attempts'] for r in part), 'accepted_candidates': sum(r['accepted_candidates'] for r in part), 'retries': sum(r['retries'] for r in part), 'principal_signatures': len({r['principal_signature'] for r in good}), 'contact_signatures': len({r['contact_signature'] for r in good}), 'contact_cells_range': [min((r['contact_cells'] for r in good), default=0), max((r['contact_cells'] for r in good), default=0)], 'contact_replacement_range': [min((r['contact_replacements'] for r in good), default=0), max((r['contact_replacements'] for r in good), default=0)], 'seconds': round(sum(r['seconds'] for r in part), 3)} (output / 'summary.json').write_text(json.dumps(summary, indent=2)) if artifacts: (Path(sample_output) / 'replay-manifest.json').write_text(json.dumps([{k: r[k] for k in ('label', 'inputs', 'artifact', 'digest', 'status')} for r in rows if 'artifact' in r], indent=2)) return summary
extension_demo/__init__.py
# Independent component package; imports only Hearth's public protocols and components. from dataclasses import dataclass from hearth.kernel import Capability, Contract, Plan, Child, Rule, Port from hearth.space import Box, Frame from hearth.blocks import state_of, slab from hearth.components.interior import Room @dataclass(frozen=True) class Pendant: def capability(self): return Capability('extension.pendant', ('light', 'room-light'), guarantees=('actual light source',)) def negotiate(self, context, parameters): return Contract(Box((0, 0, 0), (0, 1, 0)), rules=(Rule('expected', ((0, 0, 0),), data={'names': ['ochre_froglight']}),)) def realize(self, context, contract): plan = Plan() plan.block((0, 0, 0), state_of('ochre_froglight', axis='y')) plan.block((0, 1, 0), slab('dark_oak')) return plan @dataclass(frozen=True) class ReadingSuite: width: int = 11 def capability(self): return Capability('extension.reading-suite', ('room', 'habitable', 'composite'), offers=('access',), guarantees=('lit', 'furnished', 'enclosed', 'reachable')) def negotiate(self, context, parameters): entry = (self.width // 2, 1, 0) port = Port('north', 'access', Frame(entry), Box(entry, (entry[0], 2, 0)), 10, delegate=('reading-room', 'north')) return Contract(Box((-1, 0, -1), (self.width, 9, self.width)), ports=(port,)) def realize(self, context, contract): return Plan(children=[Child('reading-room', Room('library', self.width, self.width, light_component=Pendant()))])
examples/courtyard.py
# New composition written after the core abstractions; no library changes needed. import argparse from pathlib import Path from hearth.components.building import Blueprint, RoomSpec from hearth.programs import building_scene from hearth.randomness import Scope from hearth.persistence import export_scene def build(seed): rng = Scope(seed).stream('courtyard') ring = ((0, 0), (1, 0), (2, 0), (2, 1), (2, 2), (1, 2), (0, 2), (0, 1)) functions = ('living', 'library', 'workshop', 'storage', 'kitchen', 'bedroom', 'bedroom', 'storage') rooms = [RoomSpec(x, z, 0, purpose) for (x, z), purpose in zip(ring, functions)] for x, z in rng.sample(((0, 0), (2, 0), (0, 2), (2, 2)), rng.choice((1, 2))): rooms.append(RoomSpec(x, z, 1, 'bedroom')) return building_scene(Blueprint(tuple(rooms), bay=9, porch=True, roof_axis='auto'), seed) if __name__ == '__main__': p = argparse.ArgumentParser() p.add_argument('--seed', type=int, default=0) p.add_argument('--output', type=Path, default=Path('samples/courtyard.litematic')) a = p.parse_args() export_scene(build(a.seed), a.output)
examples/inspection.py
# Generate a real glass query, highlight membership, export and repeat after reload. import argparse import json from pathlib import Path from hearth.programs import dwelling, building_scene from hearth.persistence import export_scene, load_scene from hearth.blocks import name_of def demonstrate(seed, output): scene = building_scene(dwelling(seed), seed) point = next(p for p, c in sorted(scene.blocks.items()) if name_of(c.state) == 'glass' and 'room-' in c.owner) query = scene.inspect(point) print(json.dumps(query, default=lambda v: sorted(v), indent=2)) print('Exact current component cells:', sorted(scene.cells(query['instance']))) export_scene(scene, output) restored = load_scene(output) assert restored.inspect(point) == query print('Reloaded query identical; world coordinate:', point) return query if __name__ == '__main__': p = argparse.ArgumentParser() p.add_argument('--seed', type=int, default=0) p.add_argument('--output', type=Path, default=Path('samples/inspection.litematic')) a = p.parse_args() demonstrate(a.seed, a.output)
examples/prototype.py
# Run the small terrain, planting and attached-window composition before full buildings. import argparse from pathlib import Path from hearth import Scene, Box, Frame, Binding from hearth.environment import Terrain, gradient, wave from hearth.components.primitives import Wall, Window, Grass, Tree from hearth.adapters.site import Foundation from hearth.composition import encapsulate from hearth.kernel import Plan, Child from hearth.persistence import export_scene def build(seed=0): scene = Scene(seed, domain=Box((-8, -3, -8), (20, 24, 20))) scene.place('land', Terrain(scene.domain, gradient(base=2) + wave(0.6, 0.2, 0.2))) def facade(ctx): return Plan(children=[Child('wall', Wall(thickness=2)), Child('window', Window(), frame=Frame((3, 1, 0)), bindings=(Binding(ctx.path + '/wall', 'infill'),))]) scene.place('footing', Foundation.rectangular(9, 2, 4), bindings=(Binding('/land', 'construction', 'fill'),)) scene.place('facade', encapsulate('facade', Box((-1, 0, -2), (10, 6, 3)), facade), frame=Frame((0, 4, 0))) y = scene.view.elevation(13, 9) + 1 scene.place('grass', Grass(True), frame=Frame((13, y, 9)), bindings=(Binding('/land', 'planting', 'plant'),)) scene.place('tree', Tree(), frame=Frame((13, y, 9)), bindings=(Binding('/land', 'planting', 'plant'), Binding('/grass', 'replacement', 'plant'))) return scene.finalize() if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--seed', type=int, default=0) parser.add_argument('--output', type=Path, default=Path('samples/prototype.litematic')) args = parser.parse_args() export_scene(build(args.seed), args.output)
examples/assess.py
# Explicit finite batch output, never an unnoticed unit-test side effect. import argparse import json from pathlib import Path from hearth.assessment import run_corpus if __name__ == '__main__': p = argparse.ArgumentParser() p.add_argument('--seed', type=int, default=0) p.add_argument('--output', type=Path, default=Path('reports/corpus')) p.add_argument('--artifacts', action='store_true') a = p.parse_args() print(json.dumps(run_corpus(a.output, a.seed, a.artifacts), indent=2))
examples/gallery.py
# A later client composes a public gallery with connected reading and work rooms. import argparse from pathlib import Path from hearth.components.building import Blueprint, RoomSpec from hearth.programs import building_scene from hearth.randomness import Scope from hearth.persistence import export_scene from extension_demo import Pendant def build(seed): rng = Scope(seed).stream('gallery-layout') length = rng.choice((2, 3)) rooms = [RoomSpec(0, z, 0, 'library' if z % 2 else 'living') for z in range(length)] rooms.append(RoomSpec(1, length - 1, 0, 'workshop')) rooms.append(RoomSpec(0, length - 1, 1, 'bedroom')) return building_scene(Blueprint(tuple(rooms), bay=9, roof_axis='z', light_component=Pendant()), seed) if __name__ == '__main__': p = argparse.ArgumentParser() p.add_argument('--seed', type=int, default=0) p.add_argument('--output', type=Path, default=Path('samples/gallery.litematic')) a = p.parse_args() export_scene(build(a.seed), a.output)
examples/building.py
# Run any of the three short room-composition programs with an explicit seed. import argparse from pathlib import Path from hearth.programs import PROGRAMS, building_scene from hearth.persistence import export_scene if __name__ == '__main__': p = argparse.ArgumentParser() p.add_argument('program', choices=PROGRAMS) p.add_argument('--seed', type=int, default=0) p.add_argument('--output', type=Path, default=Path('samples/building.litematic')) a = p.parse_args() export_scene(building_scene(PROGRAMS[a.program](a.seed), a.seed), a.output)
examples/extension.py
# Substitute independent lighting and encapsulate an independently packaged room. import argparse from pathlib import Path from hearth import Scene, Box, Frame from hearth.kernel import Registry from hearth.components.interior import Light from hearth.components.building import Blueprint, RoomSpec from hearth.programs import building_scene from hearth.persistence import export_scene from extension_demo import Pendant, ReadingSuite def build(seed): registry = Registry() registry.register(Light()) registry.register(Pendant()) lights = registry.select('room-light') design = Blueprint((RoomSpec(0, 0, 0, 'library'), RoomSpec(0, 0, 1, 'bedroom')), light_component=lights[seed % len(lights)]) return building_scene(design, seed) if __name__ == '__main__': p = argparse.ArgumentParser() p.add_argument('--seed', type=int, default=0) p.add_argument('--output', type=Path, default=Path('samples/extension.litematic')) a = p.parse_args() export_scene(build(a.seed), a.output)
examples/extension_audit.py
# Replay the frozen extension manifest and compare complete structural records and actual NBT. import argparse import json from pathlib import Path import subprocess import sys import tempfile from hearth import Scene from hearth.environment import Terrain from hearth.environment.fields import from_expression from hearth.persistence import load_scene, semantic_digest, encode from hearth_extensions.assessment import PROBE_DOMAIN, freeze_probe, connector_scene, boundary_scene, hall_scene from hearth_extensions.programs import extension_scene, branching_campus, perimeter_cluster def replay(row): """Reconstruct one explicit assessment recipe from its recorded inputs. Args: row (dict): A selected row in the extension replay manifest. Returns: Scene: A validated, freshly generated scene without filesystem output. """ inputs = row['inputs'] seed = inputs['structure_seed'] group = row['label'].split('-')[0] if group == 'connector': environment = freeze_probe(inputs['environment']['environment_seed']) if semantic_digest(environment) != inputs['environment']['digest']: raise AssertionError('Frozen terrain changed') return connector_scene(environment, seed) if group == 'boundary': environment = Scene(inputs['environment_seed'], domain=PROBE_DOMAIN) environment.place('land', Terrain(PROBE_DOMAIN, from_expression(inputs['expression']))) environment.finalize() return boundary_scene(environment, seed) if group == 'hall': return hall_scene(seed, inputs['environment_seed']) programs = {'campus': branching_campus, 'perimeter': perimeter_cluster} return extension_scene(programs[inputs['program']], seed, inputs['environment_seed']) def audit(seed: int, manifest: Path, output: Path, cli: bool = False): """Check replay identity, structural graphs, queries, inventories and optional original CLI. Args: seed (int): Root assessment seed, used to verify the selected manifest. manifest (Path): Explicit batch artifact manifest. output (Path): Audit report destination. cli (bool): Also exercise the unchanged no-argument and seed-1 CLI in a temporary directory. Returns: dict: Completed audit with every selected input and result. """ entries = json.loads(manifest.read_text()) if entries[0]['inputs']['environment']['environment_seed'] != seed * 100: raise ValueError('Root seed does not match the selected assessment manifest') rows = [] for row in entries: native = replay(row) restored = load_scene(Path(row['artifact'])) assert semantic_digest(native) == row['digest'] == semantic_digest(restored), row['label'] for field in ('nodes', 'relations', 'dependencies', 'operations', 'port_uses', 'displaced'): assert encode(getattr(native, field)) == encode(getattr(restored, field)), (row['label'], field) assert native.reverse == restored.reverse, row['label'] assert {p: c.nbt for p, c in native.blocks.items()} == {p: c.nbt for p, c in restored.blocks.items()} points = [min(native.cells(n)) for n in sorted(native.nodes) if native.cells(n)] for point in points: assert native.inspect(point) == restored.inspect(point), (row['label'], point) rows.append({'label': row['label'], 'digest': row['digest'], 'nodes': len(native.nodes), 'blocks': len(native.blocks), 'component_queries': len(points), 'inventories': sum(c.nbt is not None for c in native.blocks.values()), 'verified': True}) cli_rows = [] if cli: root = Path(__file__).resolve().parents[1] with tempfile.TemporaryDirectory(dir=root / 'test', prefix='tmp-extension-cli-') as directory: temporary = Path(directory) for name, arguments, filename in (('default', [], 'output.litematic'), ('seed-1', ['--seed', '1', '--output', str(temporary / 'explicit path with spaces.litematic')], 'explicit path with spaces.litematic')): subprocess.run([sys.executable, str(root / 'generate.py'), *arguments], cwd=temporary, check=True) scene = load_scene(temporary / filename) cli_rows.append({'command': name, 'seed': scene.seed, 'blocks': len(scene.blocks), 'nodes': len(scene.nodes), 'digest': semantic_digest(scene), 'verified': True}) result = {'root_seed': seed, 'manifest': str(manifest), 'verified': True, 'artifacts': rows, 'original_cli': cli_rows} output.parent.mkdir(parents=True, exist_ok=True) output.write_text(json.dumps(result, indent=2)) return result if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--seed', type=int, default=0) parser.add_argument('--manifest', type=Path, default=Path('samples/extensions/replay-manifest.json')) parser.add_argument('--output', type=Path, default=Path('reports/extension-corpus/artifact-audit.json')) parser.add_argument('--cli', action='store_true') args = parser.parse_args() audit(args.seed, args.manifest, args.output, args.cli)
examples/extension_generate.py
# Explicit client selection for new graph compositions, preserving the original default CLI. import argparse from pathlib import Path from hearth.persistence import export_scene, semantic_digest from hearth_extensions.programs import extension_scene, branching_campus, perimeter_cluster PROGRAMS = {'campus': branching_campus, 'perimeter': perimeter_cluster} def main(): parser = argparse.ArgumentParser() parser.add_argument('program', choices=PROGRAMS) parser.add_argument('--seed', type=int, default=0) parser.add_argument('--environment-seed', type=int, default=0) parser.add_argument('--output', type=Path, default=Path('samples/extensions/composition.litematic')) args = parser.parse_args() scene = extension_scene(PROGRAMS[args.program], args.seed, args.environment_seed) export_scene(scene, args.output) print(args.output, semantic_digest(scene), len(scene.blocks), 'blocks', len(scene.nodes), 'instances') if __name__ == '__main__': main()
examples/extension_views.py
# Render extension artifact pairs and explicitly labeled geometry-only inspection sections. import argparse import json from pathlib import Path import subprocess import sys import hearth_extensions from hearth.persistence import load_scene, companion_path from examples.preview import render, CUTAWAY def views(seed, source, output, size=1100, sections=False, focus=None): scene = load_scene(source) if scene.seed != seed: raise ValueError('Explicit seed must match artifact') output.mkdir(parents=True, exist_ok=True) records = [] offset = list(json.loads(companion_path(source).read_text())['offset']) render_source = source if focus: box = scene.view.contract(focus).envelope for index, axis in enumerate('xyz'): for keep_above, limit in ((False, box.hi[index]), (True, box.lo[index] - 1)): target = output / f'focus-{axis}-{int(keep_above)}.litematic' command = [sys.executable, str(CUTAWAY), '--input', str(render_source), '--output', str(target), '--axis', axis, '--max', str(limit - offset[index]), '--name', 'focus-preview'] if keep_above: command.append('--keep-above') subprocess.run(command, check=True) if keep_above: offset[index] = limit + 1 render_source = target for label, azimuth, elevation in (('front', 215, 36), ('rear', 35, 32), ('side', 120, 27)): target = output / (label + '.png') render(render_source, target, azimuth, elevation, size, 3.6) records.append({'source': str(source), 'seed': seed, 'label': label, 'azimuth': azimuth, 'elevation': elevation, 'image': str(target), 'focus': focus, 'geometry_preview_only': focus is not None}) if sections: halls = [n for n in scene.nodes.values() if n.type == 'extension.pavilion'] links = [n for n in scene.nodes.values() if n.type in ('extension.bridge', 'extension.gallery')] height = max(n.frame.origin[1] + n.contract.decisions['floor'] + 3 for n in halls) if halls else max(p[1] for n in links for p in scene.cells(n.path + '/deck')) + 1 cuts = [('floor-cut', 'y', height, 215, 65)] if links: points = scene.cells(links[0].path + '/deck') cuts.append(('connection-section', 'x', (min(p[0] for p in points) + max(p[0] for p in points)) // 2, 110, 20)) for label, axis, world, azimuth, elevation in cuts: target = output / (label + '.litematic') limit = world - offset['xyz'.index(axis)] subprocess.run([sys.executable, str(CUTAWAY), '--input', str(render_source), '--output', str(target), '--axis', axis, '--max', str(limit), '--name', label], check=True) image = output / (label + '.png') render(target, image, azimuth, elevation, size, 3.6) records.append({'source': str(source), 'seed': seed, 'label': label, 'axis': axis, 'world_cut': world, 'export_local_cut': limit, 'geometry_preview_only': True, 'image': str(image), 'focus': focus}) (output / 'views.json').write_text(json.dumps(records, indent=2)) if __name__ == '__main__': p = argparse.ArgumentParser() p.add_argument('--seed', type=int, default=0) p.add_argument('--input', type=Path, required=True) p.add_argument('--output', type=Path, required=True) p.add_argument('--size', type=int, default=1100) p.add_argument('--sections', action='store_true') p.add_argument('--focus', help='Optional public component path for a geometry-only detail crop') a = p.parse_args() views(a.seed, a.input, a.output, a.size, a.sections, a.focus)
examples/extension_assess.py
# Rerun the retained extension sampling policy without altering first-phase evidence. import argparse import json from pathlib import Path from hearth_extensions.assessment import run if __name__ == '__main__': p = argparse.ArgumentParser() p.add_argument('--seed', type=int, default=0) p.add_argument('--output', type=Path, default=Path('reports/extension-corpus/final')) p.add_argument('--artifacts', action='store_true') p.add_argument('--samples', type=Path, default=Path('samples/extensions')) a = p.parse_args() print(json.dumps(run(a.output, a.seed, a.artifacts, a.samples), indent=2))
examples/extension_inspection.py
# Inspect real extension structures and verify the same public queries after reload. import argparse import json from pathlib import Path import hearth_extensions from hearth.persistence import load_scene, export_scene def inspect(source, seed, output): scene = load_scene(source) if scene.seed != seed: raise ValueError('Explicit seed must match input artifact') queries = [] for tag in ('deck', 'window', 'fixture'): candidate = next((n for n in scene.nodes.values() if n.capability and tag in n.capability.tags and scene.cells(n.path)), None) if candidate is None: continue point = min(scene.cells(candidate.path)) queries.append({'tag': tag, 'query': scene.inspect(point), 'exact_cell_count': len(scene.cells(candidate.path)), 'descendant_cell_count': len(scene.cells(candidate.path, True))}) export_scene(scene, output) restored = load_scene(output) for entry in queries: assert restored.inspect(entry['query']['position']) == entry['query'] assert len(restored.cells(entry['query']['instance'])) == entry['exact_cell_count'] print(json.dumps({'source': str(source), 'seed': seed, 'verified_after_reload': True, 'queries': queries}, default=lambda v: sorted(v), indent=2)) if __name__ == '__main__': p = argparse.ArgumentParser() p.add_argument('--seed', type=int, default=0) p.add_argument('--input', type=Path, required=True) p.add_argument('--output', type=Path, default=Path('samples/extensions/inspection.litematic')) a = p.parse_args() inspect(a.input, a.seed, a.output)
examples/extension_replay.py
# Cross-process extension replay with full semantic graph and query comparisons. import argparse import json import os from pathlib import Path import subprocess import sys import tempfile CHILD = ''' import sys,json,hashlib from pathlib import Path from hearth_extensions.programs import extension_scene,perimeter_cluster from hearth_extensions.assessment import signatures from hearth.persistence import export_scene,load_scene,semantic_digest,encode scene=extension_scene(perimeter_cluster,int(sys.argv[1]),int(sys.argv[2])) p=next(p for p,c in sorted(scene.blocks.items()) if c.state=='minecraft:glass' and 'facade' in c.owner) query=scene.inspect(p) nodes=json.dumps(encode(scene.nodes),sort_keys=True,separators=(',',':')) output=Path(sys.argv[3]);export_scene(scene,output) restored=load_scene(output) assert restored.inspect(p)==query assert encode(restored.nodes)==encode(scene.nodes) print(json.dumps({'digest':semantic_digest(scene),'principal':signatures(scene)['principal_signature'],'nodes_digest':hashlib.sha256(nodes.encode()).hexdigest(),'nodes':len(scene.nodes),'glass_query':query},default=lambda v:sorted(v),sort_keys=True)) ''' def replay(seed, environment_seed, output): root = Path(__file__).resolve().parents[1] rows = [] with tempfile.TemporaryDirectory(dir=root / 'test', prefix='tmp-extension-replay-') as temporary: for hash_seed in ('5', '918273'): artifact = Path(temporary) / f'seed {seed} hash {hash_seed}.litematic' result = subprocess.run([sys.executable, '-c', CHILD, str(seed), str(environment_seed), str(artifact)], cwd=root, env=dict(os.environ, PYTHONHASHSEED=hash_seed), capture_output=True, text=True, check=True) rows.append({'PYTHONHASHSEED': hash_seed, 'result': json.loads(result.stdout)}) if rows[0]['result'] != rows[1]['result']: raise AssertionError('Extension replay mismatch') output.parent.mkdir(parents=True, exist_ok=True) output.write_text(json.dumps({'verified': True, 'seed': seed, 'environment_seed': environment_seed, 'runs': rows}, indent=2)) print('Verified extension content, nodes, signatures, glass query and paired reload across two Python hash seeds.') if __name__ == '__main__': p = argparse.ArgumentParser() p.add_argument('--seed', type=int, default=3) p.add_argument('--environment-seed', type=int, default=7) p.add_argument('--output', type=Path, default=Path('reports/extension-corpus/replay.json')) a = p.parse_args() replay(a.seed, a.environment_seed, a.output)
examples/lantern_house.py
# A short composition of long shared roofs, a rear upper wing and glazed lightwells. import argparse from pathlib import Path from hearth.randomness import Scope from hearth.components import Blueprint, RoomSpec, FacadeDesign, InteriorDesign, RidgeLantern from hearth.components.roofcraft import RoofDesign from hearth.lodges import lodge_scene from hearth.persistence import export_scene def lantern_house(seed): rng = Scope(seed).stream('lantern-house-layout') rooms = [RoomSpec(0, 0, 0, 'living'), RoomSpec(1, 0, 0, 'kitchen'), RoomSpec(0, 1, 0, 'library')] frontage = rng.choice((2, 3)) if frontage == 3: rooms.append(RoomSpec(2, 0, 0, 'workshop')) if rng.choice((False, True)): rooms.append(RoomSpec(1, 1, 0, 'storage')) for level in range(1, rng.choice((2, 3))): rooms.append(RoomSpec(0, 1, level, 'bedroom' if level == 1 else 'library')) roof = RoofDesign(rng.choice(((1, 2), (2, 1))), rng.choice((7, 10)), end_hips=rng.choice(((0, 0), (0, 2), (2, 2))), ridge_component=RidgeLantern(rng.choice((5, 7, 9))), ridge_min_run=17) return Blueprint(tuple(rooms), bay=rng.choice((11, 13)), roof_axis='x', roof_design=roof, attic_purpose=rng.choice(('bedroom', 'library')), porch_bays=frontage, porch_depth=5, chimney=True, facade_design=FacadeDesign(), rail_material='dark_oak', interior_design=InteriorDesign()) if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--seed', type=int, default=0) parser.add_argument('--environment-seed', type=int, default=0) parser.add_argument('--output', type=Path, default=Path('lantern-house.litematic')) args = parser.parse_args() export_scene(lodge_scene(lantern_house(args.seed), args.seed, args.environment_seed), args.output)
examples/hearth_house.py
# Short room-graph program with clipped roof ends and fitted domestic interiors. import argparse from pathlib import Path from hearth.randomness import Scope from hearth.components import Blueprint, RoomSpec, FacadeDesign, InteriorDesign from hearth.components.roofcraft import RoofDesign from hearth.lodges import lodge_scene from hearth.persistence import export_scene def hearth_house(seed): rng = Scope(seed).stream('hearth-house-layout') rooms = [RoomSpec(0, 0, 0, 'living'), RoomSpec(1, 0, 0, 'kitchen'), RoomSpec(0, 1, 0, 'library')] if rng.choice((False, True)): rooms.append(RoomSpec(1, 1, 0, 'workshop')) upper = rng.choice((((0, 0),), ((1, 0),), ((0, 0), (1, 0)))) rooms.extend(RoomSpec(x, z, 1, 'bedroom') for x, z in upper) return Blueprint(tuple(rooms), bay=rng.choice((11, 13)), roof_axis=rng.choice(('auto', 'x', 'z')), roof_design=RoofDesign(rng.choice(((1, 2), (2, 1))), rng.choice((7, 10)), end_hips=rng.choice(((0, 2), (2, 2), (3, 1)))), attic_purpose=rng.choice(('bedroom', 'library')), porch_bays=2, porch_depth=5, balcony=len(upper) == 2 and rng.choice((False, True)), chimney=True, facade_design=FacadeDesign(), rail_material='dark_oak', interior_design=InteriorDesign(table_length=rng.choice((3, 4)))) if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--seed', type=int, default=0) parser.add_argument('--environment-seed', type=int, default=0) parser.add_argument('--output', type=Path, default=Path('hearth-house.litematic')) args = parser.parse_args() export_scene(lodge_scene(hearth_house(args.seed), args.seed, args.environment_seed), args.output)
examples/lodge.py
# Generate an individual building composition and composed garden with explicit seeds. import argparse from pathlib import Path from hearth.lodges import hillside_home, gabled_hall, high_house, lodge_scene from hearth.persistence import export_scene PROGRAMS = {'home': hillside_home, 'hall': gabled_hall, 'high': high_house} if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('program', choices=PROGRAMS) parser.add_argument('--seed', type=int, default=0) parser.add_argument('--environment-seed', type=int, default=0) parser.add_argument('--output', type=Path, default=Path('samples/building-quality/lodge.litematic')) args = parser.parse_args() export_scene(lodge_scene(PROGRAMS[args.program](args.seed), args.seed, args.environment_seed), args.output)
examples/building_quality.py
# Rerun the recorded individual-building corpus, keeping every result and paired artifact. import argparse import json from pathlib import Path from hearth.quality_assessment import run if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--seed', type=int, default=0) parser.add_argument('--output', type=Path, default=Path('reports/building-quality/final')) parser.add_argument('--artifacts', type=Path, default=Path('samples/building-quality/final')) args = parser.parse_args() print(json.dumps(run(args.output, args.artifacts, args.seed), indent=2))
examples/building_views.py
# Three exterior angles and circulation/interior slices for a verified individual-building pair. import argparse import json import subprocess import sys from pathlib import Path from hearth.persistence import load_scene, companion_path from examples.preview import render, CUTAWAY def preview(source, output, seed, size=1200): scene = load_scene(source) if scene.seed != seed: raise ValueError('Explicit seed does not match artifact') output.mkdir(parents=True, exist_ok=True) records = [] for label, azimuth, elevation in (('front', 215, 28), ('rear', 35, 28), ('side', 120, 26)): target = output / (label + '.png') render(source, target, azimuth, elevation, size, 3.4) records.append({'label': label, 'image': str(target), 'azimuth': azimuth, 'elevation': elevation, 'complete': True}) building = next(n for n in scene.nodes.values() if n.type == 'building.rooms') floor = building.frame.origin[1] + building.contract.decisions['floor'] offset = json.loads(companion_path(source).read_text())['offset'] cuts = [('interior', 'y', floor + 2 - offset[1], 215, 66)] stairs = [n for n in scene.nodes.values() if n.type == 'circulation.stair'] lofts = [n for n in scene.nodes.values() if 'roof-room' in n.capability.tags] if lofts: loft = max(lofts, key=lambda n: (n.frame.origin[1], n.path)) cuts.append(('loft', 'y', loft.frame.origin[1] + 2 - offset[1], 215, 70)) stairs.sort(key=lambda n: (-n.frame.origin[1], n.path)) if stairs: cells = scene.cells(stairs[0].path) axis = min((0, 2), key=lambda k: max(p[k] for p in cells) - min(p[k] for p in cells)) cut = max(p[axis] for p in cells) + 1 - offset[axis] cuts.append(('circulation', 'xz'[axis // 2], cut, 110 if axis == 0 else 20, 26)) ridge_lights = [n for n in scene.nodes.values() if n.type == 'roof.ridge-lantern'] if ridge_lights: mounted = max(ridge_lights, key=lambda n: (n.contract.decisions['length'], n.path)) axis = 0 if mounted.frame.vector((1, 0, 0))[0] else 2 cut = mounted.frame.origin[axis] - offset[axis] cuts.append(('lightwell', 'xz'[axis // 2], cut, 110 if axis == 0 else 20, 28)) for label, axis, limit, azimuth, elevation in cuts: cut = output / (label + '.litematic') subprocess.run([sys.executable, str(CUTAWAY), '--input', str(source), '--output', str(cut), '--axis', axis, '--max', str(limit), '--name', label], check=True) target = output / (label + '.png') render(cut, target, azimuth, elevation, size, 3.2) records.append({'label': label, 'image': str(target), 'axis': axis, 'limit_export_local': limit, 'azimuth': azimuth, 'elevation': elevation, 'geometry_only_cutaway': True}) manifest = {'source': str(source), 'seed': seed, 'views': records} (output / 'views.json').write_text(json.dumps(manifest, indent=2)) return manifest if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--seed', type=int, default=0) parser.add_argument('--input', type=Path, required=True) parser.add_argument('--output', type=Path, required=True) parser.add_argument('--size', type=int, default=1200) args = parser.parse_args() preview(args.input, args.output, args.seed, args.size)
examples/lodge_inspection.py
# Query real glass ownership and related structures before and after paired persistence. import argparse import json from pathlib import Path from hearth.lodges import hillside_home, lodge_scene from hearth.persistence import export_scene, load_scene, semantic_digest from hearth.blocks import name_of def inspect(seed, environment_seed, output): scene = lodge_scene(hillside_home(seed), seed, environment_seed) windows = [n for n in scene.nodes.values() if 'sealed-opening' in scene.view.capability(n.path).tags] coordinates = sorted(p for node in windows for p in scene.cells(node.path) if name_of(scene.blocks[p].state) == 'glass') point = next(p for p in coordinates if any('roof' in scene.view.capability(n['id']).tags for n in scene.inspect(p)['chain'])) query = scene.inspect(point) cells = scene.cells(query['instance']) export_scene(scene, output) restored = load_scene(output) assert restored.inspect(point) == query and restored.cells(query['instance']) == cells return {'seed': seed, 'environment_seed': environment_seed, 'world_coordinate': point, 'query': query, 'exact_current_cells': sorted(cells), 'reloaded_query_matches': True, 'digest': semantic_digest(restored)} if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--seed', type=int, default=0) parser.add_argument('--environment-seed', type=int, default=0) parser.add_argument('--output', type=Path, default=Path('samples/building-quality/inspection.litematic')) args = parser.parse_args() print(json.dumps(inspect(args.seed, args.environment_seed, args.output), default=lambda value: sorted(value), indent=2))
examples/building_lantern.py
# Frozen ridge-lightwell corpus with measured actual composition and retained outcomes. import argparse import json from pathlib import Path from hearth import Scene, Box from hearth.environment import Terrain, gradient, wave, radial from hearth.components import adapted from hearth.randomness import Scope from hearth.persistence import encode, semantic_digest from hearth.quality_assessment import evaluate, summary from hearth.lodges import lodge_scene from examples.lantern_house import lantern_house def measurements(scene): lanterns = [n for n in scene.nodes.values() if n.type == 'roof.ridge-lantern'] roofs = [n for n in scene.nodes.values() if n.type == 'roof.weather-cover'] return {'lanterns': len(lanterns), 'lengths': [n.contract.decisions['length'] for n in lanterns], 'current_cells': sum(len(scene.cells(n.path, True)) for n in lanterns), 'mounts': [{'component': n.path, 'selected': n.contract.decisions['ridge_mount'], 'screened_out': n.contract.decisions['ridge_candidates'], 'optional_omission': n.contract.decisions['omitted_optional_ridge']} for n in roofs]} def run(seed, output, artifacts): output.mkdir(parents=True, exist_ok=True) artifacts.mkdir(parents=True, exist_ok=True) domain = Box((-10, -4, -20), (58, 80, 58)) environments, inputs, rows = [], [], [] for index in range(16): es = 7100 + seed * 100 + index rng = Scope(es).stream('lantern-environment') field = gradient(rng.choice((-.025, 0, .025)), rng.choice((-.02, 0, .02)), 4) + wave(rng.choice((0, .35)), .11, .08, rng.random() * 6) field = field.blend(gradient(.01, -.01, 4) + radial(20, 16, 35, .6), radial(9, 13, 42, .7)) if index >= 8: field = field.transformed(dx=3, dz=-2, scale=1.2) + wave(.2, .07, .13, rng.random() * 6) * radial(18, 10, 50, 1) field = field.clamp(2, 6) water = rng.choice((None, 4, 5)) scene = Scene(es, domain=domain) scene.place('land', Terrain(domain, field, water)) scene.finalize() environments.append(scene) inputs.append({'environment_seed': es, 'expression': field.expression(), 'water': water, 'digest': semantic_digest(scene), 'held_out_composition': index >= 8}) (output / 'frozen-inputs.json').write_text(json.dumps(inputs, indent=2)) def retain(label, specification, recipe, artifact): observed = {} def measure(): scene = recipe() observed.update(measurements(scene)) if not observed['lanterns']: raise AssertionError('This supported client must realize at least one glazed lightwell') return scene row = evaluate(label, specification, measure, artifact) row['ridge_lights'] = observed rows.append(row) (output / 'results.json').write_text(json.dumps(rows, indent=2)) print(label, row['status'], flush=True) for bs in range(8): artifact = artifacts / f'lantern-house-{bs}.litematic' if bs in (0, 1, 4, 7) else None retain(f'lantern-house-{bs}', {'structure_seed': bs, 'environment_seed': seed * 100 + bs, 'design': encode(lantern_house(bs))}, lambda b=bs: lodge_scene(lantern_house(b), b, seed * 100 + b), artifact) for index, environment in enumerate(environments): for bs in (1, 6): def place(e=environment, b=bs): scene = e.fork(seed=b) scene.compose_choice(adapted('building', lantern_house(b), '/land')) return scene.finalize() label = f'pair-{index}-{bs}' artifact = artifacts / (label + '.litematic') if (index, bs) in ((0, 1), (3, 6), (10, 1), (15, 6)) else None retain(label, {**inputs[index], 'structure_seed': bs, 'design': encode(lantern_house(bs))}, place, artifact) if semantic_digest(environment) != inputs[index]['digest']: raise AssertionError('Frozen environment changed') result = {'client': summary(rows[:8]), 'independent_pairs': summary(rows[8:])} (output / 'summary.json').write_text(json.dumps(result, indent=2)) (artifacts / 'manifest.json').write_text(json.dumps([r for r in rows if 'artifact' in r], indent=2)) return result if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--seed', type=int, default=0) parser.add_argument('--output', type=Path, default=Path('reports/building-lantern/new')) parser.add_argument('--artifacts', type=Path, default=Path('samples/building-lantern/new')) args = parser.parse_args() print(json.dumps(run(args.seed, args.output, args.artifacts), indent=2))
examples/building_holdout.py
# New post-fix operation compositions, predeclared separately from the regression corpus. import argparse import json from pathlib import Path from hearth import Scene from hearth.environment import Terrain, gradient, wave, radial from hearth.randomness import Scope from hearth.components.building import adapted from hearth.lodges import high_house, gabled_hall from hearth.quality_assessment import DOMAIN, evaluate, summary from hearth.persistence import semantic_digest def run(seed, output, artifacts): output.mkdir(parents=True, exist_ok=True) artifacts.mkdir(parents=True, exist_ok=True) environments, inputs, rows = [], [], [] for index in range(8): es = 3000 + seed * 100 + index rng = Scope(es).stream('new-expression') field = (gradient(rng.choice((-.04, 0, .04)), rng.choice((-.03, 0, .03)), 4) + wave(.35, .17, .05, rng.random() * 6)) field = field.blend(gradient(-.02, .03, 4) + radial(13, 10, 25, .7), radial(5, 8, 32, .8)).transformed(dx=2, dz=-3, scale=1.1).clamp(2, 7) water = rng.choice((None, 5, 6)) env = Scene(es, domain=DOMAIN) env.place('land', Terrain(DOMAIN, field, water)) env.finalize() environments.append(env) inputs.append({'environment_seed': es, 'expression': field.expression(), 'water': water, 'digest': semantic_digest(env)}) (output / 'frozen-inputs.json').write_text(json.dumps(inputs, indent=2)) for index, env in enumerate(environments): for client, bs in ((high_house, 5), (gabled_hall, 7)): def recipe(e=env, c=client, b=bs): s = e.fork(seed=b) s.compose_choice(adapted('building', c(b), '/land')) return s.finalize() label = f'{index}-{client.__name__}-{bs}' artifact = artifacts / (label + '.litematic') if index == 0 else None rows.append(evaluate(label, {**inputs[index], 'client': client.__name__, 'structure_seed': bs}, recipe, artifact)) if semantic_digest(env) != inputs[index]['digest']: raise AssertionError('Frozen input mutated') (output / 'results.json').write_text(json.dumps(rows, indent=2)) print(label, rows[-1]['status'], flush=True) report = summary(rows) (output / 'summary.json').write_text(json.dumps(report, indent=2)) (artifacts / 'manifest.json').write_text(json.dumps([r for r in rows if 'artifact' in r], indent=2)) return report if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--seed', type=int, default=0) parser.add_argument('--output', type=Path, default=Path('reports/building-quality/holdout')) parser.add_argument('--artifacts', type=Path, default=Path('samples/building-quality/holdout')) args = parser.parse_args() print(json.dumps(run(args.seed, args.output, args.artifacts), indent=2))
examples/building_craft.py
# Frozen finite assessment of new roof/interior compositions, with every outcome retained. import argparse import json from pathlib import Path from hearth import Scene, Box from hearth.environment import Terrain, gradient, wave, radial from hearth.components import adapted from hearth.randomness import Scope from hearth.persistence import encode, semantic_digest from hearth.quality_assessment import evaluate, summary, fingerprint from hearth.lodges import lodge_scene from examples.hearth_house import hearth_house def furniture_measurements(scene): nodes = [n for n in scene.nodes.values() if 'furniture' in n.capability.tags] units = [n for n in nodes if 'interaction' in n.capability.offers] data = [(n.type, n.frame.turn, sorted(n.frame.inverse(p) for p in scene.cells(n.path))) for n in units] return {'stations': len(units), 'hearths': sum(n.type == 'furnishing.hearth' for n in nodes), 'dining_lengths': [n.contract.decisions['length'] for n in nodes if n.type == 'furnishing.dining-set'], 'interior_signature': fingerprint(data), 'optional_omissions': [{'component': n.path, 'omissions': n.contract.decisions['omitted_optional_stations']} for n in nodes if n.contract.decisions.get('omitted_optional_stations')]} def run(seed, output, artifacts): output.mkdir(parents=True, exist_ok=True) artifacts.mkdir(parents=True, exist_ok=True) domain = Box((-10, -4, -20), (58, 72, 58)) environments, inputs, rows = [], [], [] for index in range(8): es = 6100 + seed * 100 + index rng = Scope(es).stream('craft-environment') field = (gradient(rng.choice((-.025, 0, .025)), rng.choice((-.02, .02)), 4) + wave(.35, .11, .08, rng.random() * 6)).blend(gradient(.02, -.01, 4) + radial(20, 18, 35, .6), radial(11, 12, 42, .7)).clamp(2, 6) water = rng.choice((None, 4, 5)) s = Scene(es, domain=domain) s.place('land', Terrain(domain, field, water)) s.finalize() environments.append(s) inputs.append({'environment_seed': es, 'expression': field.expression(), 'water': water, 'digest': semantic_digest(s)}) (output / 'frozen-inputs.json').write_text(json.dumps(inputs, indent=2)) def retain(label, inputs, recipe, artifact): measurements = {} def measured(): scene = recipe() measurements.update(furniture_measurements(scene)) return scene row = evaluate(label, inputs, measured, artifact) row['furnishings'] = measurements rows.append(row) (output / 'results.json').write_text(json.dumps(rows, indent=2)) print(label, row['status'], flush=True) for bs in range(8): artifact = artifacts / f'hearth-home-{bs}.litematic' if bs in (0, 2, 5, 7) else None retain(f'hearth-home-{bs}', {'structure_seed': bs, 'environment_seed': seed * 100 + bs, 'design': encode(hearth_house(bs))}, lambda b=bs: lodge_scene(hearth_house(b), b, seed * 100 + b), artifact) for index, environment in enumerate(environments): for bs in (1, 6): def place(e=environment, b=bs): s = e.fork(seed=b) s.compose_choice(adapted('building', hearth_house(b), '/land')) return s.finalize() label = f'pair-{index}-{bs}' artifact = artifacts / (label + '.litematic') if (index, bs) in ((0, 1), (3, 6), (7, 1)) else None retain(label, {**inputs[index], 'structure_seed': bs, 'design': encode(hearth_house(bs))}, place, artifact) if semantic_digest(environment) != inputs[index]['digest']: raise AssertionError('Frozen environment changed') result = {'client': summary(rows[:8]), 'independent_pairs': summary(rows[8:])} (output / 'summary.json').write_text(json.dumps(result, indent=2)) (artifacts / 'manifest.json').write_text(json.dumps([r for r in rows if 'artifact' in r], indent=2)) return result if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--seed', type=int, default=0) parser.add_argument('--output', type=Path, default=Path('reports/building-craft/new')) parser.add_argument('--artifacts', type=Path, default=Path('samples/building-craft/new')) args = parser.parse_args() print(json.dumps(run(args.seed, args.output, args.artifacts), indent=2))
examples/roof_home.py
# A lightweight composition with inhabited roofs and a shared front veranda. import argparse from pathlib import Path from hearth.randomness import Scope from hearth.components import Blueprint, RoomSpec, FacadeDesign from hearth.components.roofcraft import RoofDesign from hearth.components.roomlayout import InteriorDesign from hearth.lodges import lodge_scene from hearth.persistence import export_scene def roof_home(seed): rng = Scope(seed).stream('roof-home-layout') rooms = [RoomSpec(0, 0, 0, 'living'), RoomSpec(1, 0, 0, 'kitchen')] if rng.choice((False, True)): rooms.append(RoomSpec(1, 1, 0, rng.choice(('library', 'workshop')))) if rng.choice((False, True)): rooms.append(RoomSpec(0, 0, 1, 'library')) return Blueprint(tuple(rooms), bay=rng.choice((9, 11, 13)), roof_axis=rng.choice(('auto', 'z', 'x')), roof_design=RoofDesign(rng.choice(((1, 2), (1, 1, 2))), rng.choice((8, 11)), end_hips=Scope(seed).choose(((0, 0), (0, 2), (2, 2)), 'roof-ends')), attic_purpose=rng.choice(('bedroom', 'library')), porch_bays=2, porch_depth=4, chimney=True, facade_design=FacadeDesign(), rail_material='dark_oak', interior_design=InteriorDesign()) if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--seed', type=int, default=0) parser.add_argument('--environment-seed', type=int, default=0) parser.add_argument('--output', type=Path, default=Path('roof-home.litematic')) args = parser.parse_args() export_scene(lodge_scene(roof_home(args.seed), args.seed, args.environment_seed), args.output)
examples/garden_house.py
# A new lightweight room-graph composition: inhabited wings around an open garden. import argparse from pathlib import Path from hearth.randomness import Scope from hearth.components import Blueprint, RoomSpec, FacadeDesign from hearth.components.roofcraft import RoofDesign from hearth.lodges import lodge_scene from hearth.persistence import export_scene def garden_house(seed): rng = Scope(seed).stream('garden-house-plan') rooms = [RoomSpec(0, 0, 0, 'living'), RoomSpec(1, 0, 0, 'library'), RoomSpec(2, 0, 0, 'workshop'), RoomSpec(0, 1, 0, 'kitchen'), RoomSpec(2, 1, 0, 'storage')] for x in rng.sample((0, 2), rng.choice((1, 2))): rooms.append(RoomSpec(x, 0, 1, 'bedroom')) if rng.choice((False, True)): rooms.append(RoomSpec(2, 2, 0, 'library')) balcony = any((r.x, r.z, r.level) == (0, 0, 1) for r in rooms) return Blueprint(tuple(rooms), bay=rng.choice((11, 13)), roof_axis=rng.choice(('auto', 'z')), roof_design=RoofDesign(rng.choice(((1, 2), (1, 1, 2))), 9), porch_depth=4, balcony=balcony, chimney=True, facade_design=FacadeDesign(), rail_material='dark_oak') if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--seed', type=int, default=0) parser.add_argument('--environment-seed', type=int, default=0) parser.add_argument('--output', type=Path, default=Path('garden-house.litematic')) args = parser.parse_args() export_scene(lodge_scene(garden_house(args.seed), args.seed, args.environment_seed), args.output)
examples/building_detail.py
# Retained assessment of the new garden-house client and independently frozen environments. import argparse import json from pathlib import Path from hearth import Scene, Box from hearth.environment import Terrain, gradient, wave, radial from hearth.randomness import Scope from hearth.components import adapted from hearth.lodges import lodge_scene from hearth.persistence import semantic_digest from hearth.quality_assessment import evaluate, summary, fingerprint from examples.garden_house import garden_house def detail_signature(scene): """Measure functional stations and actual facade openings separately from massing.""" stations, openings = [], [] building = scene.nodes['/building'] floor = building.contract.decisions['floor'] for n in scene.nodes.values(): if n.type.startswith('furnishing.suite.') or n.type.startswith('window.'): local = building.frame.inverse(n.frame.origin) place = (local[0], local[1] - floor, local[2]) shape = sorted(n.frame.inverse(p) for p in scene.cells(n.path)) record = (n.type, place, shape) (stations if n.type.startswith('furnishing.suite.') else openings).append(record) return {'stations': fingerprint(sorted(stations)), 'facade_openings': fingerprint(sorted(openings)), 'station_count': len(stations), 'window_count': len(openings), 'window_boxes': sum(n.type == 'garden.window-box' for n in scene.nodes.values())} def run(seed, output, artifacts): output.mkdir(parents=True, exist_ok=True) artifacts.mkdir(parents=True, exist_ok=True) domain = Box((-10, -4, -20), (52, 72, 52)) environments, inputs, rows, details = [], [], [], {} # Freeze all six environments before any of their structure seeds are used. for index in range(6): es = 4100 + seed * 100 + index rng = Scope(es).stream('detail-environment') field = (gradient(rng.choice((-.025, 0, .025)), rng.choice((-.02, 0, .02)), 4) + wave(.3, .13, .09, rng.random() * 6)).blend( gradient(-.02, .02, 4) + radial(18, 18, 36, .5), radial(8, 10, 44, .6)).clamp(2, 6) water = rng.choice((None, 4, 5)) scene = Scene(es, domain=domain) scene.place('land', Terrain(domain, field, water)) scene.finalize() environments.append(scene) inputs.append({'environment_seed': es, 'expression': field.expression(), 'water': water, 'digest': semantic_digest(scene)}) (output / 'frozen-inputs.json').write_text(json.dumps(inputs, indent=2)) def retain(label, specification, recipe, artifact=None): def measured(): scene = recipe() details[label] = detail_signature(scene) return scene row = evaluate(label, specification, measured, artifact) if label in details: row['details'] = details[label] rows.append(row) (output / 'results.json').write_text(json.dumps(rows, indent=2)) print(label, row['status'], flush=True) for bs in range(8): label = f'court-{bs}' artifact = artifacts / (label + '.litematic') if bs in (0, 2, 7) else None retain(label, {'structure_seed': bs, 'environment_seed': 4100 + seed * 100, 'garden': True}, lambda b=bs: lodge_scene(garden_house(b), b, 4100 + seed * 100), artifact) for index, environment in enumerate(environments): for bs in (2, 7): def place(e=environment, b=bs): scene = e.fork(seed=b) scene.compose_choice(adapted('building', garden_house(b), '/land')) return scene.finalize() label = f'new-pair-{index}-{bs}' artifact = artifacts / (label + '.litematic') if index in (0, 1) else None retain(label, {**inputs[index], 'structure_seed': bs, 'garden': False}, place, artifact) if semantic_digest(environment) != inputs[index]['digest']: raise AssertionError('Frozen environmental input changed') result = {'client': summary(rows[:8]), 'independent_pairs': summary(rows[8:]), 'interior_signatures': len({d['stations'] for d in details.values()}), 'opening_signatures': len({d['facade_openings'] for d in details.values()})} (output / 'summary.json').write_text(json.dumps(result, indent=2)) (artifacts / 'manifest.json').write_text(json.dumps([r for r in rows if 'artifact' in r], indent=2)) return result if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--seed', type=int, default=0) parser.add_argument('--output', type=Path, default=Path('reports/building-detail/new-composition')) parser.add_argument('--artifacts', type=Path, default=Path('samples/building-detail/new-composition')) args = parser.parse_args() print(json.dumps(run(args.seed, args.output, args.artifacts), indent=2))
examples/verify_replay.py
# Explicit cross-process hash-seed replay and paired metadata verification. import argparse import json import os from pathlib import Path import subprocess import sys import tempfile from hearth.persistence import load_scene, semantic_digest from hearth.space import Box def verify(seed, output): root = Path(__file__).resolve().parents[1] rows = [] with tempfile.TemporaryDirectory(dir=root / 'test', prefix='tmp-replay-') as temporary: for hash_seed in ('3', '8675309'): path = Path(temporary) / f'seed {seed} hash {hash_seed}.litematic' env = dict(os.environ, PYTHONHASHSEED=hash_seed) subprocess.run([sys.executable, str(root / 'generate.py'), '--seed', str(seed), '--output', str(path)], check=True, cwd=root, env=env) scene = load_scene(path) rows.append({'seed': seed, 'PYTHONHASHSEED': hash_seed, 'digest': semantic_digest(scene), 'bounds': [Box.enclosing(scene.blocks).lo, Box.enclosing(scene.blocks).hi], 'blocks': len(scene.blocks), 'buildings': sum(n.type == 'building.rooms' for n in scene.nodes.values())}) if rows[0]['digest'] != rows[1]['digest'] or rows[0]['bounds'] != rows[1]['bounds']: raise AssertionError('Cross-process replay mismatch') output.parent.mkdir(parents=True, exist_ok=True) output.write_text(json.dumps({'verified': True, 'runs': rows}, indent=2)) return rows if __name__ == '__main__': p = argparse.ArgumentParser() p.add_argument('--seed', type=int, default=0) p.add_argument('--output', type=Path, default=Path('reports/replay.json')) a = p.parse_args() verify(a.seed, a.output)
examples/__init__.py
# Runnable public-API examples and explicit assessment tools.
examples/preview.py
# Render labeled exterior views and geometry-only slices with the optional proc tools. import argparse import json from pathlib import Path import subprocess import sys from hearth.persistence import export_scene, load_scene, companion_path from hearth.programs import settlement_scene RENDER = Path('/opt/tools/render_schematic.mjs') CUTAWAY = Path('/opt/tools/cutaway.py') VITE = Path('/work/generator/MCRender/node_modules/.bin/vite-node') def render(source, target, azimuth, elevation, size, radius): subprocess.run(['xvfb-run', '-a', str(VITE), '--script', str(RENDER), '--', '--input', str(source), '--output', str(target), '--size', str(size), '--azimuth', str(azimuth), '--elevation', str(elevation), '--radius', str(radius), '--fov', '30', '--ambient', '0.8'], check=True) def preview(seed, source, output, size=1200, cutaways=False): output.mkdir(parents=True, exist_ok=True) if source is None: source = output / 'source.litematic' export_scene(settlement_scene(seed), source) scene = load_scene(source) if scene.seed != seed: raise ValueError(f'--seed {seed} does not match the input artifact seed {scene.seed}') views = [('front', 210, 28, 3.5), ('rear', 30, 26, 3.5)] records = [] for label, azimuth, elevation, radius in views: target = output / (label + '.png') render(source, target, azimuth, elevation, size, radius) records.append({'source': str(source), 'seed': seed, 'label': label, 'image': str(target), 'azimuth': azimuth, 'elevation': elevation}) if cutaways: building = next(n for n in scene.nodes.values() if n.type == 'building.rooms') floor = building.contract.decisions['floor'] + building.frame.origin[1] offset = json.loads(companion_path(source).read_text())['offset'] cuts = [('floor-cut', 'y', floor + 4 - offset[1], 210, 64)] stair = next((n for n in scene.nodes.values() if n.type == 'circulation.stair'), None) if stair is not None: occupied = scene.cells(stair.path) # Cut beside the actual flight, including flights in a remote wing. axis = min((0, 2), key=lambda i: max(p[i] for p in occupied) - min(p[i] for p in occupied)) limit = max(p[axis] for p in occupied) + 1 - offset[axis] cuts.append(('stair-cut', 'xz'[axis // 2], limit, 110 if axis == 0 else 20, 26)) for label, axis, limit, azimuth, elevation in cuts: cut = output / (label + '.litematic') subprocess.run([sys.executable, str(CUTAWAY), '--input', str(source), '--output', str(cut), '--axis', axis, '--max', str(limit), '--name', label], check=True) target = output / (label + '.png') render(cut, target, azimuth, elevation, size, 3.2) records.append({'source': str(source), 'seed': seed, 'label': label, 'axis': axis, 'export_local_cut': limit, 'image': str(target), 'geometry_preview_only': True}) (output / 'views.json').write_text(json.dumps(records, indent=2)) if __name__ == '__main__': p = argparse.ArgumentParser() p.add_argument('--seed', type=int, default=0) p.add_argument('--input', type=Path) p.add_argument('--output', type=Path, default=Path('previews/default')) p.add_argument('--size', type=int, default=1200) p.add_argument('--cutaways', action='store_true') a = p.parse_args() preview(a.seed, a.input, a.output, a.size, a.cutaways)
examples/building_space.py
# Retained roof-room and veranda assessment with independent frozen environments. import argparse import json from pathlib import Path from hearth import Scene, Box from hearth.environment import Terrain, gradient, wave, radial from hearth.randomness import Scope from hearth.components import Blueprint, RoomSpec, FacadeDesign, adapted from hearth.components.roofcraft import RoofDesign from hearth.lodges import lodge_scene from hearth.persistence import semantic_digest, encode from hearth.quality_assessment import evaluate, summary, fingerprint from examples.roof_home import roof_home def held_out_design(seed): """Compose a three-bay front and a rear wing using the same public intent API.""" rng = Scope(seed).stream('held-out-room-graph') rooms = [RoomSpec(0, 0, 0, 'living'), RoomSpec(1, 0, 0, 'library'), RoomSpec(2, 0, 0, 'workshop'), RoomSpec(0, 1, 0, 'kitchen')] rooms.append(RoomSpec(rng.choice((0, 1, 2)), 0, 1, 'bedroom')) return Blueprint(tuple(rooms), bay=rng.choice((9, 11, 13)), roof_axis=rng.choice(('x', 'z', 'auto')), roof_design=RoofDesign(rng.choice(((1, 2), (1, 1, 2))), rng.choice((7, 12))), attic_purpose=rng.choice(('bedroom', 'library', 'storage')), porch_bays=3, porch_depth=5, chimney=True, facade_design=FacadeDesign(), rail_material='dark_oak') def interior_measurements(scene): """Retain actual functional measurements independently of principal shape.""" rooms = [n for n in scene.nodes.values() if n.type.startswith('room.loft.')] return {'lofts': len(rooms), 'purposes': [n.contract.decisions['purpose'] for n in rooms], 'stations': sum(len(n.contract.decisions['furniture']) for n in rooms), 'hung_lights': sum(n.type == 'light.roof-hanger' for n in scene.nodes.values()), 'collar_cells': sum(len(scene.cells(n.path)) for n in scene.nodes.values() if n.type == 'timber.roof-collars'), 'guard_cells': sum(len(scene.cells(n.path)) for n in scene.nodes.values() if n.type == 'circulation.aperture-guard'), 'optional_station_omissions': sum(n.contract.decisions['omitted_optional_stations'] for n in rooms), 'furniture_signature': fingerprint([(n.type, sorted(n.frame.inverse(p) for p in scene.cells(n.path))) for n in scene.nodes.values() if n.type.startswith('furnishing.')])} def run(seed, output, artifacts): output.mkdir(parents=True, exist_ok=True) artifacts.mkdir(parents=True, exist_ok=True) domain = Box((-10, -4, -20), (52, 72, 52)) environments, inputs, rows = [], [], [] for index in range(8): es = 5100 + seed * 100 + index rng = Scope(es).stream('roof-space-environment') field = (gradient(rng.choice((-.025, 0, .025)), rng.choice((-.02, 0, .02)), 4) + wave(.3, .13, .09, rng.random() * 6)).blend(gradient(-.02, .02, 4) + radial(18, 18, 36, .5), radial(8, 10, 44, .6)).clamp(2, 6) water = rng.choice((None, 4, 5)) environment = Scene(es, domain=domain) environment.place('land', Terrain(domain, field, water)) environment.finalize() environments.append(environment) inputs.append({'environment_seed': es, 'expression': field.expression(), 'water': water, 'digest': semantic_digest(environment)}) (output / 'frozen-inputs.json').write_text(json.dumps(inputs, indent=2)) def retain(label, inputs, recipe, artifact=None): measurements = {} def measured(): scene = recipe() measurements.update(interior_measurements(scene)) return scene row = evaluate(label, inputs, measured, artifact) row['interior'] = measurements rows.append(row) (output / 'results.json').write_text(json.dumps(rows, indent=2)) print(label, row['status'], flush=True) for bs in range(8): artifact = artifacts / f'roof-home-{bs}.litematic' if bs in (0, 2, 4, 7) else None retain(f'roof-home-{bs}', {'structure_seed': bs, 'environment_seed': seed * 100 + bs, 'design': encode(roof_home(bs))}, lambda b=bs: lodge_scene(roof_home(b), b, seed * 100 + b), artifact) for index, environment in enumerate(environments): for bs in (2, 7): def place(e=environment, b=bs): scene = e.fork(seed=b) scene.compose_choice(adapted('building', roof_home(b), '/land')) return scene.finalize() label = f'pair-{index}-{bs}' artifact = artifacts / (label + '.litematic') if (index, bs) in ((0, 2), (3, 7), (7, 2)) else None retain(label, {**inputs[index], 'structure_seed': bs, 'design': encode(roof_home(bs))}, place, artifact) if semantic_digest(environment) != inputs[index]['digest']: raise AssertionError('Frozen environment changed') for index, environment in enumerate(environments): bs = seed * 100 + index design = held_out_design(bs) def place(e=environment, b=bs, d=design): scene = e.fork(seed=b) scene.compose_choice(adapted('building', d, '/land')) return scene.finalize() label = f'held-out-{index}' artifact = artifacts / (label + '.litematic') if index in (0, 7) else None retain(label, {**inputs[index], 'structure_seed': bs, 'design': encode(design)}, place, artifact) if semantic_digest(environment) != inputs[index]['digest']: raise AssertionError('Frozen environment changed') report = {'client': summary(rows[:8]), 'independent_pairs': summary(rows[8:24]), 'held_out': summary(rows[24:])} (output / 'summary.json').write_text(json.dumps(report, indent=2)) (artifacts / 'manifest.json').write_text(json.dumps([r for r in rows if 'artifact' in r], indent=2)) return report if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--seed', type=int, default=0) parser.add_argument('--output', type=Path, default=Path('reports/building-space/new-compositions')) parser.add_argument('--artifacts', type=Path, default=Path('samples/building-space/new-compositions')) args = parser.parse_args() print(json.dumps(run(args.seed, args.output, args.artifacts), indent=2))
examples/ridge_inspection.py
# Inspect a public daylight mount and preserve its real window chain across export. import argparse import json from pathlib import Path from hearth.blocks import name_of from hearth.lodges import lodge_scene from hearth.persistence import encode, export_scene, load_scene from examples.lantern_house import lantern_house def inspect_ridge(scene): mounted = next(n for n in scene.nodes.values() if scene.view.offers(n.path, 'daylight')) cells = scene.cells(mounted.path, descendants=True) glass = min(p for p in cells if name_of(scene.view.state(p)) == 'glass') query = scene.inspect(glass) return {'coordinate': glass, 'query': query, 'window_cells': sorted(scene.cells(query['instance'])), 'mount': mounted.path, 'mount_cells': len(cells), 'ports': scene.view.offers(mounted.path, 'daylight')} if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--seed', type=int, default=0) parser.add_argument('--environment-seed', type=int, default=0) parser.add_argument('--output', type=Path, default=Path('ridge-inspection.litematic')) args = parser.parse_args() scene = lodge_scene(lantern_house(args.seed), args.seed, args.environment_seed) before = inspect_ridge(scene) export_scene(scene, args.output) restored = load_scene(args.output) after = inspect_ridge(restored) assert encode(before) == encode(after) assert scene.cells(before['mount'], True) == restored.cells(before['mount'], True) print(json.dumps(encode({'seed': args.seed, 'environment_seed': args.environment_seed, 'matches_reload': True, **before}), indent=2))
examples/lantern_report.py
# Aggregate retained lantern assessment records without generating or resampling inputs. import argparse from collections import Counter import hashlib import json from pathlib import Path from hearth.quality_assessment import summary def read(path: Path): """Read one explicitly named JSON assessment record.""" return json.loads(path.read_text()) def write(path: Path, value): """Write a replayable derived report, retaining the original input records.""" path.parent.mkdir(parents=True, exist_ok=True) path.write_text(json.dumps(value, indent=2) + '\n') def measured(rows): """Separate finite input success, candidate acceptance and actual sitework costs.""" result = summary(rows) valid = [row for row in rows if row['status'] == 'validated'] result['rejected_candidates'] = result['candidate_attempts'] - result['accepted_candidates'] result['input_success_rate'] = result['validated'] / len(rows) if rows else 0 result['candidate_acceptance_rate'] = result['accepted_candidates'] / result['candidate_attempts'] if result['candidate_attempts'] else 0 result['explicit_retries'] = sum(row['retries'] for row in rows) result['inputs_with_rejected_candidates'] = sum(row['attempts'] > row['accepted_candidates'] for row in rows) result['per_input_seconds_range'] = [min(row['seconds'] for row in rows), max(row['seconds'] for row in rows)] if rows else [] for key in ('excavation', 'replaced_cells', 'new_sitework_cells', 'bearing_fill'): values = [row['contact'][key] for row in valid] result[key + '_range'] = [min(values), max(values)] if values else [] result['contact_strategy_instances'] = dict(sorted(Counter(strategy for row in valid for strategy in row['contact']['strategies']).items())) return result def run(seed: int, reports: Path, samples: Path, previews: Path): """Derive summaries and manifests from the complete predeclared release batches. Args: seed: Root seed used by the recorded batch commands. reports: Directory containing release batch records and auxiliary audits. samples: Directory in which to write the complete-pair replay manifest. previews: Directory containing the selected final view manifests. Returns: An aggregate containing separate supported, stress and visual evidence. """ names = ('core', 'space', 'detail', 'holdout', 'craft', 'new') batches = {name: read(reports / 'release' / name / 'results.json') for name in names} supported = batches['core'][:88] + sum((batches[name] for name in names[1:]), []) stress = batches['core'][88:] clients = batches['core'][:24] + sum((batches[name][:8] for name in ('space', 'detail', 'craft', 'new')), []) groups = {name: batches['core'][i * 8:(i + 1) * 8] for i, name in enumerate(('home', 'hall', 'high'))} groups.update({name: batches[batch][:8] for name, batch in (('roof-home', 'space'), ('garden-house', 'detail'), ('hearth-house', 'craft'), ('lantern-house', 'new'))}) result = {'version': '1.7.0', 'root_seed': seed, 'supported': measured(supported), 'stress': measured(stress), 'named_clients': measured(clients), 'per_client': {name: measured(rows) for name, rows in groups.items()}, 'batches': {name: measured(rows) for name, rows in batches.items()}} result['stress_failures'] = [{key: row[key] for key in ('label', 'inputs', 'status', 'diagnostic', 'attempts', 'candidates')} for row in stress if row['status'] != 'validated'] observations = [row['ridge_lights'] for row in batches['new'] if row['status'] == 'validated'] mounts = [mount for row in observations for mount in row['mounts']] result['new_ridge_observations'] = {'inputs': len(observations), 'actual_attachments': sum(row['lanterns'] for row in observations), 'observed_lengths': sorted({length for row in observations for length in row['lengths']}), 'current_cell_range': [min(row['current_cells'] for row in observations), max(row['current_cells'] for row in observations)], 'mounts': len(mounts), 'optional_omissions': sum(mount['optional_omission'] for mount in mounts), 'screening_reasons': dict(sorted(Counter(candidate['reason'] for mount in mounts for candidate in mount['screened_out']).items()))} selected = [{**row, 'batch': name} for name in names for row in batches[name] if 'artifact' in row] additional_path = reports / 'additional-preview.json' if additional_path.exists(): additional = read(additional_path) original = next(row for row in batches['new'] if row['label'] == additional['label']) if additional['digest'] != original['digest']: raise ValueError('Additional visual sample differs from its assessed input') selected.append({**additional, 'batch': 'additional', 'duplicates_assessed_input': True}) result['selected_pair_audits'] = {'pairs': len(selected), **{key: sum(row['audit'][key] for row in selected) for key in ('queries', 'inventories', 'nodes')}} write(samples / 'manifest.json', {'root_seed': seed, 'note': 'Additional visual sample repeats an already assessed input and is not added to input denominators.', 'pairs': selected}) views = [read(path) for path in sorted(previews.glob('*/views.json'))] for entry in views: for view in entry['views']: if not Path(view['image']).is_file(): raise ValueError('Missing rendered image: ' + view['image']) result['renders'] = {'buildings': len(views), 'images': sum(len(entry['views']) for entry in views), 'complete_exteriors': sum(bool(view.get('complete')) for entry in views for view in entry['views']), 'geometry_only_cutaways': sum(bool(view.get('geometry_only_cutaway')) for entry in views for view in entry['views'])} write(reports / 'render-manifest.json', views) for name in ('cli-audit', 'replay', 'portability'): result[name] = read(reports / (name + '.json')) baseline = read(reports / 'baseline-hashes.json') paths = set(baseline) for directory in ('hearth', 'hearth_extensions', 'extension_demo', 'examples', 'test'): paths.update(str(path) for path in Path(directory).rglob('*.py')) hashes = {path: hashlib.sha256(Path(path).read_bytes()).hexdigest() for path in sorted(paths) if Path(path).is_file()} removed = sorted(set(baseline) - set(hashes)) changed = [path for path in baseline if path in hashes and baseline[path] != hashes[path]] old_tests = [path for path in baseline if path.startswith('test/')] delta = {'changed': sorted(changed), 'added': sorted(set(hashes) - set(baseline)), 'removed': removed, 'unchanged_existing_test_files': len([path for path in old_tests if hashes.get(path) == baseline[path]]), 'changed_existing_test_files': [path for path in old_tests if hashes.get(path) != baseline[path]], 'kernel_changed': sorted(path for path in changed if path.startswith('hearth/kernel/'))} write(reports / 'final-module-hashes.json', hashes) write(reports / 'module-delta.json', delta) result['source_delta'] = delta first = reports / 'first-assessment' if all((first / name / 'results.json').exists() for name in names): initial = {name: read(first / name / 'results.json') for name in names} result['retained_development_assessment'] = {'note': 'Prior to final mounting refinement. Excluded from release denominators.', 'supported': measured(initial['core'][:88] + sum((initial[name] for name in names[1:]), [])), 'stress': measured(initial['core'][88:])} write(reports / 'summary.json', result) return result if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--seed', type=int, default=0) parser.add_argument('--reports', type=Path, default=Path('reports/building-lantern')) parser.add_argument('--samples', type=Path, default=Path('samples/building-lantern/release')) parser.add_argument('--previews', type=Path, default=Path('previews/building-lantern/release')) args = parser.parse_args() observed = run(args.seed, args.reports, args.samples, args.previews) print(json.dumps({key: observed[key] for key in ('supported', 'stress', 'named_clients', 'selected_pair_audits', 'renders', 'new_ridge_observations', 'source_delta')}, indent=2))
examples/lantern_regression.py
# Rerun earlier building corpora in a new directory without changing old evidence. import argparse import json from pathlib import Path from hearth.quality_assessment import run as core from examples.building_space import run as space from examples.building_detail import run as detail from examples.building_holdout import run as holdout from examples.building_craft import run as craft def run(seed, output, artifacts): output.mkdir(parents=True, exist_ok=True) result = {'core': core(output / 'core', artifacts / 'core', seed)} for name, batch in (('space', space), ('detail', detail), ('holdout', holdout), ('craft', craft)): result[name] = batch(seed, output / name, artifacts / name) (output / 'regression-summary.json').write_text(json.dumps(result, indent=2)) return result if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--seed', type=int, default=0) parser.add_argument('--output', type=Path, default=Path('reports/building-lantern/release')) parser.add_argument('--artifacts', type=Path, default=Path('samples/building-lantern/release')) args = parser.parse_args() print(json.dumps(run(args.seed, args.output, args.artifacts), indent=2))
examples/portable_lantern.py
# Check generation and public inspection without importing native or transport packages. import argparse import importlib.abc import json from pathlib import Path import sys def run(seed, environment_seed, output): denied = ('numpy', 'mcio', 'PIL', 'scipy', 'litemapy') class Guard(importlib.abc.MetaPathFinder): def find_spec(self, fullname, path=None, target=None): if fullname.split('.')[0] in denied: raise RuntimeError('Unexpected native or transport dependency: ' + fullname) guard = Guard() if set(denied).intersection(sys.modules): raise RuntimeError('Run this guard in a fresh Python process') sys.meta_path.insert(0, guard) try: from hearth.lodges import lodge_scene from hearth.persistence import encode, semantic_digest from hearth.quality_assessment import principal_signature from examples.lantern_house import lantern_house from examples.ridge_inspection import inspect_ridge scene = lodge_scene(lantern_house(seed), seed, environment_seed) report = {'seed': seed, 'environment_seed': environment_seed, 'native_import_guard': True, 'browser_executed': False, 'denied_imports': denied, 'blocks': len(scene.blocks), 'nodes': len(scene.nodes), 'digest': semantic_digest(scene), 'principal_signature': principal_signature(scene)[0], 'inspection': inspect_ridge(scene)} output.parent.mkdir(parents=True, exist_ok=True) output.write_text(json.dumps(encode(report), indent=2)) return {k: report[k] for k in ('seed', 'native_import_guard', 'browser_executed', 'blocks', 'nodes', 'digest')} finally: sys.meta_path.remove(guard) if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--seed', type=int, default=0) parser.add_argument('--environment-seed', type=int, default=7107) parser.add_argument('--output', type=Path, default=Path('reports/building-lantern/portability.json')) args = parser.parse_args() print(json.dumps(run(args.seed, args.environment_seed, args.output), indent=2))
test/conftest.py
# Tests keep transient artifacts under test/ and remove them after each test. import sys import tempfile from pathlib import Path import pytest sys.path.insert(0, str(Path(__file__).parents[1])) @pytest.fixture def work(): with tempfile.TemporaryDirectory(dir=Path(__file__).parent, prefix='tmp-') as name: yield Path(name)
test/test_kernel.py
# Foundation tests run before extending architectural content. from dataclasses import dataclass import pytest from hearth import Scene, Box, Frame, Binding, ContractError from hearth.kernel import Capability, Contract, Plan, Child, Rule from hearth.components.primitives import Assembly, Volume, Wall, Window, Grass, Tree, Pool from hearth.environment import Terrain, constant from hearth.blocks import state_of, blockstates_equivalent from hearth.persistence import export_scene, load_scene, semantic_digest def land(): s = Scene(12, domain=Box((-10, -3, -10), (20, 25, 20))) s.place('terrain', Terrain(s.domain, constant(0))) return s def test_composite_attachment_automatic_chain(): s = Scene(4) children = (Child('base', Volume(Box((0, 0, 0), (8, 0, 0)), state_of('stone'))), Child('wall', Wall(), frame=Frame((0, 1, 0))), Child('window', Window(), frame=Frame((2, 2, 0)), bindings=(Binding('/house/wall', 'infill'),))) s.place('house', Assembly('house', Box((-1, 0, -2), (10, 8, 3)), children)) q = s.inspect((2, 2, 0)) assert [n['type'] for n in q['chain']] == ['window.shuttered', 'wall.framed', 'house'] assert len(s.cells('/house/window')) == 10 assert s.cells('/house/window') <= s.cells('/house', True) def test_substitution_same_parent(): def parent(window): return Assembly('room', Box((-1, -1, -2), (10, 8, 3)), (Child('base', Volume(Box((0, -1, 0), (8, -1, 0)), state_of('stone'))), Child('wall', Wall()), Child('window', window, frame=Frame((2, 1, 0)), bindings=(Binding('/room/wall', 'infill'),)))) a, b = Scene(), Scene() a.place('room', parent(Window())) b.place('room', parent(Window(shutters=False))) assert semantic_digest(a) != semantic_digest(b) assert a.nodes['/room/window'].contract.envelope == b.nodes['/room/window'].contract.envelope def test_tree_grass_and_pool_preserve_support(): s = land() s.place('grass', Grass(), frame=Frame((0, 1, 0)), bindings=(Binding('/terrain', 'planting', 'plant'),)) s.place('tree', Tree(), frame=Frame((0, 1, 0)), bindings=(Binding('/terrain', 'planting', 'plant'), Binding('/grass', 'replacement', 'plant'))) assert '/grass' not in s.nodes assert s.inspect((0, 1, 0))['instance'] == '/tree' before = semantic_digest(s) nodes = set(s.nodes) ops = set(s.operations) with pytest.raises(ContractError): s.place('pool', Pool(), frame=Frame((-2, 0, -2)), bindings=(Binding('/terrain', 'construction', 'excavate'),)) assert semantic_digest(s) == before and set(s.nodes) == nodes and set(s.operations) == ops with pytest.raises(ContractError): s.place('grass2', Grass(), frame=Frame((0, 1, 0))) s.place('pool-ok', Pool(), frame=Frame((6, 0, 6)), bindings=(Binding('/terrain', 'construction', 'excavate'),)) s.finalize() def test_tall_grass_whole_object_and_no_tree_excavation(): s = land() s.place('grass', Grass(True), frame=Frame((0, 1, 0))) with pytest.raises(ContractError): s.place('ordinary-tree', Tree(), frame=Frame((0, 0, 0)), bindings=(Binding('/terrain', 'construction', 'excavate'),)) s.place('tree', Tree(), frame=Frame((0, 1, 0)), bindings=(Binding('/grass', 'replacement', 'plant'),)) assert '/grass' not in s.nodes def test_transforms_and_persistence(work): frame = Frame((14, 3, -7), 1) s = Scene(-42) s.place('beam', Volume(Box((0, 0, 0), (2, 0, 0)), state_of('oak_log', axis='x')), frame=frame) assert s.inspect((14, 3, -5))['state'] == state_of('oak_log', axis='z') path = work / 'space name.litematic' export_scene(s, path) restored = load_scene(path) assert restored.inspect((14, 3, -5)) == s.inspect((14, 3, -5)) assert blockstates_equivalent('minecraft:oak_stairs[facing=north,half=bottom]', 'minecraft:oak_stairs[half=bottom,facing=north]') assert not blockstates_equivalent('minecraft:oak_log', 'minecraft:oak_log[axis=y]') import json meta = path.with_suffix('.litematic.structure.json') data = json.loads(meta.read_text()) data['digest'] = 'bad' meta.write_text(json.dumps(data)) with pytest.raises(ContractError, match='geometry-mismatch'): load_scene(path) def test_clearance_rollback_and_bounds(): s = Scene() s.place('stairs', Assembly('circulation', Box((0, 0, 0), (3, 5, 3)), (), (Rule('clear', ((1, 2, 1), (1, 3, 1))),))) with pytest.raises(ContractError, match='clearance'): s.place('decoration', Volume(Box((1, 3, 1), (1, 3, 1)), state_of('stone'))) assert set(s.nodes) == {'/stairs'} and not s.blocks @dataclass class Escaper: def capability(self): return Capability('bad', ()) def negotiate(self, c, p): return Contract(Box((0, 0, 0), (0, 0, 0))) def realize(self, c, b): p = Plan() p.block((1, 0, 0), state_of('stone')) return p with pytest.raises(ContractError, match='envelope'): s.place('bad', Escaper()) def test_seed_stability_and_regeneration(): from hearth.randomness import Scope a = Scope(123).child('house') before = a.stream('layout').getrandbits(64) Scope(123).child('failed').stream().random() assert before == a.stream('layout').getrandbits(64) s = Scene() s.place('beam', Volume(Box((0, 0, 0), (2, 0, 0)), state_of('stone'))) s.regenerate('/beam', Volume(Box((0, 0, 0), (1, 0, 0)), state_of('oak_planks'))) assert s.inspect((2, 0, 0))['instance'] is None assert len(s.cells('/beam')) == 2
test/test_contracts_provenance.py
# Mutation, sharing, phases, rotations, extension and synchronized provenance tests. from dataclasses import dataclass, replace import json import pytest from hearth import Scene, Box, Frame, Binding, ContractError from hearth.kernel import Capability, Contract, Grant, Port, Rule, Plan, Child, Limits, SearchExhausted from hearth.blocks import state_of from hearth.components.primitives import Volume, Assembly, Window, Wall, Grass, Tree, Pool from hearth.kernel.scene import Cell from hearth.persistence import export_scene, load_scene, semantic_digest from hearth.randomness import Scope from hearth.composition import encapsulate, repeat, arrange, scatter from extension_demo import Pendant, ReadingSuite @dataclass(frozen=True) class Editable: def capability(self): return Capability('editable', ('support',)) def negotiate(self, c, p): b = Box((0, 0, 0), (0, 0, 0)) return Contract(b, (Port('edit', 'adjust', Frame(), b, 10, 'edit'), Port('shared', 'shared-support', Frame(), b, 4)), (Grant('edit', b, ('adjust', 'excavate'), ('editor',), 1),)) def realize(self, c, b): p = Plan() p.block((0, 0, 0), state_of('oak_log', axis='y')) return p @dataclass(frozen=True) class Editor: material: str preserve: bool = True def capability(self): return Capability('editor', ('editor',)) def negotiate(self, c, p): return Contract(Box((0, 0, 0), (0, 0, 0))) def realize(self, c, b): p = Plan() p.block((0, 0, 0), self.material, preserve_owner=self.preserve) return p def test_adjustment_membership_history_deletion_and_reload(work): s = Scene() s.place('owner', Editable()) s.place('adjust', Editor(state_of('oak_log', axis='x')), bindings=(Binding('/owner', 'edit', 'adjust'),)) q = s.inspect((0, 0, 0)) assert q['instance'] == '/owner' and q['operation']['component'] == '/adjust' assert s.cells('/adjust') == frozenset() export_scene(s, work / 'adjust.litematic') r = load_scene(work / 'adjust.litematic') assert r.inspect((0, 0, 0)) == q s.remove('/adjust') assert s.inspect((0, 0, 0))['state'] == state_of('oak_log', axis='y') s.place('erase', Editor(state_of('air'), False), bindings=(Binding('/owner', 'edit', 'excavate'),)) assert s.inspect((0, 0, 0))['instance'] is None and not s.cells('/owner') s.remove('/erase') assert s.cells('/owner') == {(0, 0, 0)} def test_identical_blocks_do_not_grant_sharing_and_explicit_shared_support(): s = Scene() s.place('support', Editable()) s.place('bridge', Assembly('bridge', Box((0, 0, 0), (2, 2, 2)), ())) with pytest.raises(ContractError, match='write-authority'): s.place('intruder', Volume(Box((0, 0, 0), (0, 0, 0)), state_of('oak_log', axis='y'))) s.share((0, 0, 0), '/bridge', '/support', 'shared') assert s.cells('/bridge', shared=True) == {(0, 0, 0)} assert ('/bridge', 'shares_support', '/support') in s.inspect((0, 0, 0))['related'] with pytest.raises(ContractError, match='support'): s.remove('/support') s.remove('/bridge') assert not s.inspect((0, 0, 0))['shared'] def test_partial_tall_plant_replacement_atomicity(): from hearth.environment import Terrain, constant s = Scene(domain=Box((-2, -2, -2), (4, 15, 4))) s.place('terrain', Terrain(s.domain, constant(0))) s.place('grass', Grass(True), frame=Frame((0, 1, 0))) @dataclass class Pruner: def capability(self): return Capability('pruner', ('tree',)) def negotiate(self, c, p): return Contract(Box((0, 0, 0), (0, 0, 0))) def realize(self, c, b): p = Plan() p.block((0, 0, 0), state_of('oak_log', axis='y')) return p snapshot = (semantic_digest(s), set(s.nodes), set(s.relations), dict(s.port_uses), list(s.dependencies)) with pytest.raises(ContractError, match='whole-object'): s.place('prune', Pruner(), frame=Frame((0, 1, 0)), bindings=(Binding('/grass', 'replacement', 'plant'),)) assert snapshot == (semantic_digest(s), set(s.nodes), set(s.relations), dict(s.port_uses), list(s.dependencies)) @pytest.mark.parametrize('turn', range(4)) def test_rotated_attachment_ports_claims_membership(turn, work): frame = Frame((-13, 5, 17), turn) def compose(c): return Plan(children=[Child('base', Volume(Box((0, -1, 0), (8, -1, 2)), state_of('stone'))), Child('wall', Wall(thickness=3)), Child('a', Window(), frame=Frame((2, 1, 0)), bindings=(Binding(c.path + '/wall', 'infill'),)), Child('b', Window(shutters=False), frame=Frame((6, 1, 0)), bindings=(Binding(c.path + '/wall', 'infill'),))]) s = Scene(31) s.place('house', encapsulate('house', Box((-1, -1, -2), (10, 8, 4)), compose), frame=frame) a, b = frame.point((2, 1, 0)), frame.point((6, 1, 0)) assert s.inspect(a)['instance'] != s.inspect(b)['instance'] assert [n['type'] for n in s.inspect(a)['chain']] == ['window.shuttered', 'wall.framed', 'house'] assert s.nodes['/house/wall'].contract.ports[0].frame.turn == turn assert all(s.nodes['/house/a'].contract.envelope.contains(p) for p in s.cells('/house/a')) export_scene(s, work / 'rotated.litematic') assert load_scene(work / 'rotated.litematic').inspect(a) == s.inspect(a) def test_completion_obligation_and_late_decoration(): s = Scene() b = Box((0, 0, 0), (3, 4, 3)) s.place('unfinished', Assembly('room', b, (), (Rule('light', ((1, 1, 1),), b, phase='complete'),)), complete=False) with pytest.raises(ContractError): s.finalize() s.place('lamp', Pendant(), frame=Frame((1, 2, 1))) s.finish_scope('/unfinished') s.finalize() with pytest.raises(ContractError, match='lighting'): s.remove('/lamp') def test_extension_low_level_composite_and_nested_protocol(): s = Scene(4) room = ReadingSuite() wrapper = encapsulate('independent-suite', Box((-2, 0, -2), (14, 11, 14)), lambda c: Plan(children=[Child('suite', room)])) s.place('hall', wrapper) s.finalize() assert any(n.type == 'extension.pendant' for n in s.nodes.values()) assert any(n.type == 'extension.reading-suite' for n in s.nodes.values()) def test_independent_order_and_failed_alternative_streams(): @dataclass class Seeded: def capability(self): return Capability('seeded', ()) def negotiate(self, c, p): return Contract(Box((0, 0, 0), (2, 0, 0))) def realize(self, c, b): p = Plan() p.block((c.rng('geometry').randrange(3), 0, 0), state_of('stone')) return p a, b = Scene(81), Scene(81) for scene, order in ((a, ('one', 'two')), (b, ('two', 'one'))): for key in order: scene.place(key, Seeded(), frame=Frame((10 if key == 'two' else 0, 0, 0))) assert semantic_digest(a) == semantic_digest(b) before = a.cells('/one') with pytest.raises(SearchExhausted): a.choose('failed', [Child('x', Volume(Box((0, 0, 0), (2, 0, 0)), state_of('dirt')))]) a.place('planter', Seeded(), frame=Frame((20, 0, 0))) assert a.cells('/one') == before c = Scene(81) c.place('one', Seeded(), seed=123) assert c.nodes['/one'].scope.seed == 123 def test_regeneration_restores_displaced_terrain_and_no_stale_cells(): from hearth.environment import Terrain, constant s = Scene(domain=Box((-2, -3, -2), (12, 20, 12))) s.place('land', Terrain(s.domain, constant(0))) before = semantic_digest(s) s.place('pool', Pool(), frame=Frame((1, 0, 1)), bindings=(Binding('/land', 'construction', 'excavate'),)) s.remove('/pool') assert semantic_digest(s) == before assert not any('/pool' in (a, c) for a, b, c in s.relations) def test_edit_limits_unknown_space_and_budget(): from hearth.environment import Terrain, constant s = Scene(domain=Box((-3, -3, -3), (12, 20, 12))) s.place('land', Terrain(s.domain, constant(0), edit_limit=1)) with pytest.raises(ContractError, match='edit-limit'): s.place('pool', Pool(), bindings=(Binding('/land', 'construction', 'excavate'),)) with pytest.raises(ContractError, match='unknown-space'): s.view.state((100, 1, 1)) s = Scene(limits=Limits(blocks=1)) with pytest.raises(ContractError, match='block-budget'): s.place('large', Volume(Box((0, 0, 0), (3, 0, 0)), state_of('stone'))) assert not s.nodes and not s.blocks def test_attachment_membership_across_encapsulation_boundaries(): s = Scene() s.place('house', Assembly('house', Box((-2, -1, -2), (12, 8, 5)), (Child('base', Volume(Box((0, -1, 0), (8, -1, 0)), state_of('stone'))), Child('wall', Wall())))) s.place('facade-window', Window(), frame=Frame((3, 1, 0)), bindings=(Binding('/house/wall', 'infill'),)) assert s.cells('/facade-window') <= s.cells('/house/wall', descendants=True) assert s.cells('/facade-window') <= s.cells('/house', descendants=True) assert s.inspect((3, 1, 0))['chain'][-1]['id'] == '/house' with pytest.raises(ContractError): s.remove('/house') s.regenerate('/house', dependents=('/facade-window',)) assert s.inspect((3, 1, 0))['instance'] == '/facade-window' def test_public_readonly_contracts_and_protected_preference(): from hearth.components.constraints import Preserve from hearth.environment import Terrain, constant s = Scene(domain=Box((-3, -3, -3), (12, 20, 12)), preferences={'planting': constant(100)}) s.place('land', Terrain(s.domain, constant(0))) s.place('reserve', Preserve(Box((1, -2, 1), (3, 1, 3)))) assert s.view.preference('planting', (2, 0, 2)) == 100 with pytest.raises(ContractError, match='protected-region'): s.place('pool', Pool(), bindings=(Binding('/land', 'construction', 'excavate'),)) original = s.nodes['/land'].contract.decisions['water'] public = s.view.contract('/land') public.decisions['water'] = 99 assert s.nodes['/land'].contract.decisions['water'] == original def test_explicit_candidate_budget_exhaustion(): from hearth.kernel import Choice s = Scene(limits=Limits(search=1)) s.place('occupied', Volume(Box((0, 0, 0), (0, 0, 0)), state_of('stone'))) choice = Choice('choice', (Child('bad', Volume(Box((0, 0, 0), (0, 0, 0)), state_of('dirt'))), Child('valid', Volume(Box((3, 0, 0), (3, 0, 0)), state_of('stone')))), lambda view, path: 0) with pytest.raises(SearchExhausted, match='search-budget'): s.compose_choice(choice) assert '/choice' not in s.nodes s.limits = replace(s.limits, search=2) s.compose_choice(choice) assert s.cells('/choice') == {(3, 0, 0)} def test_validator_extension_and_negotiated_domain(): from hearth.kernel import validator, Diagnostic @validator('test.actual-stone') def actual_stone(scene, node, rule): for p in rule.cells: if scene.inspect(p)['state'] != 'minecraft:stone': yield Diagnostic('test.actual-stone', node.path, p, 'Need actual stone') s = Scene() s.place('rule', Assembly('rule', Box((0, 0, 0), (0, 0, 0)), (Child('stone', Volume(Box((0, 0, 0), (0, 0, 0)), state_of('stone'))),), (Rule('test.actual-stone', ((0, 0, 0),)),))) with pytest.raises(ContractError, match='test.actual-stone'): s.remove('/rule/stone') with pytest.raises(ContractError, match='input-domain'): s.place('bad-wall', Wall(width=100)) def test_forwarded_interfaces_discharge_after_scope_construction(): from hearth.kernel import Choice later = Assembly('later', Box((0, 0, 0), (0, 0, 0)), (Child('solid', Volume(Box((0, 0, 0), (0, 0, 0)), state_of('stone'))),), ports=(Port('access', 'access', Frame(), Box((0, 0, 0), (0, 0, 0))),)) choice = Choice('first', (Child('one', Volume(Box((0, 0, 0), (0, 0, 0)), state_of('stone'))), Child('two', Volume(Box((1, 0, 0), (1, 0, 0)), state_of('stone')))), lambda v, p: 0) wrapper = Assembly('wrapper', Box((0, 0, 0), (3, 1, 1)), (choice, Child('later', later, frame=Frame((3, 0, 0)))), ports=(Port('access', 'access', Frame((3, 0, 0)), Box((3, 0, 0), (3, 0, 0)), delegate=('later', 'access')),)) s = Scene() s.place('root', wrapper) s.finalize() assert s.view.port('/root', 'access').frame.origin == (3, 0, 0) def test_dense_export_budget_is_explicit(work): s = Scene(limits=Limits(export_volume=10)) s.place('line', Volume(Box((0, 0, 0), (10, 0, 0)), state_of('stone'))) with pytest.raises(ContractError, match='export-volume'): export_scene(s, work / 'too large.litematic') assert not (work / 'too large.litematic').exists()
test/test_geometry_environment.py
# Actual-geometry damage tests, independent environment sampling and regeneration. from dataclasses import replace, dataclass from pathlib import Path import pytest from hearth import Scene, Box, Frame, Binding, ContractError from hearth.kernel import validate, Capability, Contract, Plan, Port, Grant, Child, Rule from hearth.kernel.scene import Cell from hearth.blocks import state_of, name_of, blockstates_equivalent, validate_state from hearth.environment import Terrain, constant, gradient, wave, radial from hearth.components.building import Building, Blueprint, RoomSpec from hearth.components.primitives import Pool, Volume from hearth.programs import PROGRAMS, building_scene, settlement_scene from hearth.assessment import adaptation_expression, principal_signature from hearth.persistence import export_scene, load_scene, semantic_digest, companion_path, _mcio def damage(scene, p, material=None): scene = scene._fork() old = scene.blocks.get(p) if old: scene.reverse[old.owner].discard(p) scene.blocks.pop(p) if material: owner = old.owner if old else next(n.path for n in scene.nodes.values() if n.type.startswith('room.')) operation = old.operation if old else next(iter(scene.operations)) scene.blocks[p] = Cell(material, owner, operation) scene.reverse[owner].add(p) return scene @pytest.fixture def house(): return building_scene(Blueprint((RoomSpec(0, 0, 0, 'living'), RoomSpec(0, 0, 1, 'bedroom'))), 7, gradient(.04, 0, 4), 6) def test_removed_support_blocked_stair_exit_and_paired_door(house): foundation = next(n for n in house.nodes.values() if n.type == 'adapter.foundation') p = foundation.contract.rules[0].cells[0] assert 'support' in {d.rule for d in validate(damage(house, p), True)} stair = next(n for n in house.nodes.values() if n.type == 'circulation.stair') p = next(r for r in stair.contract.rules if r.kind == 'clear').cells[4] assert 'clearance' in {d.rule for d in validate(damage(house, p, state_of('stone')), True)} door = next(p for p, c in house.blocks.items() if 'spruce_door' in c.state and 'half=lower' in c.state) issues = validate(damage(house, door, state_of('stone')), True) assert {'door-pair', 'reachability'} <= {d.rule for d in issues} assert all(d.component.startswith('/') and d.conditions for d in issues) def test_lights_furniture_seal_and_inventory_are_actual(house): room = '/building/room-0-0-0' s = house for p in house.cells(room, True): if name_of(house.blocks[p].state) == 'lantern': s = damage(s, p) assert 'lighting' in {d.rule for d in validate(s, True)} glass = next(p for p in house.cells(room, True) if name_of(house.blocks[p].state) == 'glass') assert 'enclosure' in {d.rule for d in validate(damage(house, glass), True)} bed = next(p for p, c in house.blocks.items() if name_of(c.state) == 'red_bed') assert 'bed-pair' in {d.rule for d in validate(damage(house, bed), True)} barrel = next(p for p, c in house.blocks.items() if c.nbt) s = house._fork() nbt = dict(s.blocks[barrel].nbt) nbt['Items'] = [{'Slot': 0, 'id': 'minecraft:bread', 'count': 100}] s.blocks[barrel] = replace(s.blocks[barrel], nbt=nbt) assert 'inventory' in {d.rule for d in validate(s, True)} def test_pool_boundary_damage_and_unsupported_substrate(): s = Scene(domain=Box((-3, -3, -3), (14, 20, 14))) s.place('land', Terrain(s.domain, constant(0))) s.place('pool', Pool(), bindings=(Binding('/land', 'construction', 'excavate'),)) assert 'pool-containment' in {d.rule for d in validate(damage(s, (0, 0, 2)), True)} def test_nbt_roundtrip_and_real_schematic_mismatch(house, work): path = work / 'inventory and spaces.litematic' export_scene(house, path) restored = load_scene(path) assert semantic_digest(restored) == semantic_digest(house) assert {p: c.nbt for p, c in restored.blocks.items() if c.nbt} == {p: c.nbt for p, c in house.blocks.items() if c.nbt} _, _, tag, nbtfile = _mcio() nbt = nbtfile.load_regardless_of_gzipped(filename=path) region = next(iter(nbt['Regions'].values())) region['TileEntities'][0]['Items'][0]['count'] = tag.Int(7) nbtfile(nbt).save(path) with pytest.raises(ContractError, match='geometry-mismatch'): load_scene(path) companion_path(path).unlink() with pytest.raises(ContractError, match='untrusted-structure'): load_scene(path) @pytest.mark.parametrize('environment_seed', range(16)) @pytest.mark.parametrize('building_seed', range(4)) def test_64_frozen_independent_pairings(environment_seed, building_seed): field, water = adaptation_expression(environment_seed) domain = Box((-8, -4, -18), (34, 64, 34)) s = Scene(building_seed, domain=domain) s.place('ground', Terrain(domain, field, water)) before = {p: c.state for p, c in s.blocks.items()} # An existing protected environmental observation outside all building edits. protected = (32, s.view.elevation(32, 32), 32) from hearth.components.primitives import Assembly s.place('preserved', Assembly('protected-soil', Box(protected, protected), (), (Rule('expected', (protected,), data={'names': [name_of(s.blocks[protected].state)]}),))) design = PROGRAMS['dwelling'](building_seed) s.place('house', Building(design, '/ground')) s.finalize() assert s.nodes['/house'].contract.decisions['rooms'] == [(r.x, r.z, r.level, r.purpose) for r in design.normalized()] allowed = set() for path, old in s.displaced.items(): if path.startswith('/house/'): allowed.update(old) assert all(s.nodes[path].contract.envelope.contains(p) for p in old) assert all(p in allowed or (p in s.blocks and s.blocks[p].state == material) for p, material in before.items()) assert s.blocks[protected].state == before[protected] assert s.nodes['/house/approach'].contract.decisions['rows'] assert all(s.view.supports(p) for p in s.nodes['/house/foundation'].contract.rules[0].cells) def test_environment_implementation_substitution_and_public_forwarding(): @dataclass(frozen=True) class IndependentField: def __call__(self, x, z): return 4 + 0.01 * x - 0.01 * z def expression(self): return {'polynomial': [4, .01, -.01]} @dataclass(frozen=True) class WrappedEnvironment: domain: Box def capability(self): return Capability('extension.environment', ('environment', 'composite')) def negotiate(self, c, p): ports = tuple(Port(key, key, Frame(self.domain.lo), self.domain, 100000, delegate=('strata', key)) for key in ('construction', 'planting')) return Contract(self.domain, ports=ports) def realize(self, c, b): return Plan(children=[Child('strata', Terrain(self.domain, IndependentField()))]) domain = Box((-8, -4, -18), (30, 50, 30)) s = Scene(2, domain=domain) s.place('world', WrappedEnvironment(domain)) s.place('house', Building(Blueprint((RoomSpec(0, 0, 0, 'living'),)), '/world')) s.finalize() assert s.view.port('/house', 'street').delegate == ('approach', 'street') assert any(d['source'] == '/world' for d in s.dependencies) def test_environment_dependency_regeneration_is_explicit_and_atomic(): domain = Box((-8, -4, -18), (28, 55, 28)) s = Scene(3, domain=domain) s.place('land', Terrain(domain, constant(3))) design = Blueprint((RoomSpec(0, 0, 0, 'living'), RoomSpec(0, 0, 1, 'bedroom'))) s.place('house', Building(design, '/land')) before = semantic_digest(s) with pytest.raises(ContractError): s.regenerate('/land', Terrain(domain, constant(4))) assert semantic_digest(s) == before old_floor = s.nodes['/house'].contract.decisions['floor'] s.regenerate('/land', Terrain(domain, constant(4)), dependents=('/house',)) assert s.nodes['/house'].contract.decisions['floor'] == old_floor + 1 assert not any(n.stale for n in s.nodes.values()) assert all(p in s.blocks for cells in s.reverse.values() for p in cells) @pytest.mark.parametrize('program', tuple(PROGRAMS)) @pytest.mark.parametrize('seed', range(8)) def test_three_composition_programs(program, seed): s = building_scene(PROGRAMS[program](seed), seed) assert s.completed and any(n.type.startswith('room.') for n in s.nodes.values()) @pytest.mark.parametrize('seed,count', [(i, None) for i in range(8)] + [(0, 3), (0, 6)]) def test_settlement_corpus_and_boundaries(seed, count): s = settlement_scene(seed, count) assert s.completed buildings = [n for n in s.nodes.values() if n.type == 'building.rooms'] assert len(buildings) == count if count else 3 <= len(buildings) <= 6 route = next(n for n in s.nodes.values() if n.type == 'settlement.connections') assert len(route.contract.rules[0].cells) == len(buildings) + 2 def test_blockstate_explicit_semantics_and_rotation(): assert blockstates_equivalent('minecraft:oak_log[axis=x]', 'minecraft:oak_log[axis=x]') assert not blockstates_equivalent('minecraft:oak_log', 'minecraft:oak_log[axis=y]') assert not blockstates_equivalent('minecraft:oak_log[axis=x]', 'minecraft:oak_log[axis=z]') assert not blockstates_equivalent('minecraft:oak_log[axis=x]', 'minecraft:spruce_log[axis=x]') with pytest.raises(ValueError): validate_state('minecraft:stone[facing=north]') for turn in range(4): validate_state(Frame(turn=turn).state('minecraft:rail[shape=north_east,waterlogged=false]')) def test_complete_settlement_transforms_and_public_gateway(): from hearth.programs import Settlement, dwelling, atelier local = Box((-49, -4, -23), (49, 64, 66)) frame = Frame((150, 2, 80), 1) s = Scene(0, domain=frame.box(local)) s.place('land', Terrain(s.domain, constant(4))) s.place('district', Settlement((dwelling(1), atelier(1), dwelling(4)), local, '/land'), frame=frame) s.finalize() ports = s.view.offers('/district', 'public-access') assert len(ports) == 1 and ports[0].frame.turn == 1 assert ports[0].frame.origin == frame.point((0, 3, -12)) assert s.view.capability('/district/plot-0').inputs['design.bay'].accepts(9) assert any(d['reason'] == 'observed-spatial-input' for d in s.dependencies) def test_actual_subsurface_support_not_just_height(): domain = Box((-8, -4, -18), (28, 55, 28)) s = Scene(0, domain=domain) s.place('ground', Terrain(domain, constant(4))) s.place('local-cavity', Volume(Box((2, 3, 2), (2, 3, 2)), state_of('air'), 'siteworks'), bindings=(Binding('/ground', 'construction', 'excavate'),)) assert s.view.elevation(2, 2) == 4 and s.view.sample(2, 2).support_depth == 1 before = semantic_digest(s) with pytest.raises(ContractError, match='substrate-depth'): s.place('house', Building(Blueprint((RoomSpec(0, 0, 0, 'living'),)), '/ground')) assert semantic_digest(s) == before def test_path_endpoint_respects_host_authority(): from hearth.components.landscape import PathNetwork from hearth.components.primitives import Assembly domain = Box((-4, -3, -4), (12, 20, 12)) s = Scene(0, domain=domain) s.place('ground', Terrain(domain, constant(0))) # An unrelated solid host behind the offered endpoint must survive path widening. s.place('behind', Volume(Box((-1, 1, -1), (-1, 1, 1)), state_of('stone'))) s.place('route', PathNetwork(((0, 1, 0), (8, 1, 0)), ((0, 1),)), bindings=(Binding('/ground', 'construction', 'surface'),)) assert s.cells('/behind') == {(-1, 1, -1), (-1, 1, 0), (-1, 1, 1)} s.finalize() def test_upper_room_bay_boundary_with_vertical_circulation(): design = Blueprint((RoomSpec(0, 0, 0, 'living'), RoomSpec(0, 0, 1, 'bedroom')), bay=13) s = building_scene(design, 5, gradient(base=4), 6) assert s.completed and s.nodes['/building'].contract.decisions['bay'] == 13 assert s.nodes['/building/room-0-0-0/stairs'].contract.rules
test/test_extension_protocol.py
# A read-only endpoint consumer must not need the host's mutation authority. import pytest from hearth import Scene, Box from hearth.kernel import Capability, Contract, Port, Grant, Plan from hearth.space import Frame from hearth.blocks import state_of from hearth_extensions import Endpoint, EndpointContact class Landing: def capability(self): return Capability('test.landing', ('landing',)) def negotiate(self, ctx, parameters): return Contract(Box((-1, 0, -1), (1, 0, 1)), ports=(Port('access', 'access', Frame((0, 1, 0)), Box((-1, 0, -1), (1, 2, 1)), 4, 'resurface'),), grants=(Grant('resurface', Box((-1, 0, -1), (1, 0, 1)), ('surface',), ('path',), 9),)) def realize(self, ctx, contract): p = Plan() p.fill(contract.envelope, state_of('stone_bricks')) return p def test_read_only_connection_to_mutable_port(): s = Scene() s.place('landing', Landing()) endpoint = Endpoint('/landing', 'access') before = dict(s.blocks) s.place('consumer', EndpointContact(endpoint), bindings=(endpoint.binding(),)) assert s.blocks == before assert ('/consumer', 'connected_to', '/landing') in s.relations s.finalize() def test_connection_does_not_acquire_write_authority(): from hearth.kernel import ContractError class Bad(EndpointContact): def realize(self, ctx, contract): p = Plan() p.block((0, 0, 0), state_of('gold_block')) return p s = Scene() s.place('landing', Landing()) endpoint = Endpoint('/landing', 'access') before = dict(s.blocks) with pytest.raises(ContractError, match='write-authority'): s.place('bad', Bad(endpoint), bindings=(endpoint.binding(),)) assert s.blocks == before and '/bad' not in s.nodes def test_atomic_multi_branch_replay_accepts_explicit_replacements(): from hearth.components.primitives import Volume s = Scene() s.place('a', Volume(Box((0, 0, 0), (0, 0, 0)), state_of('stone'))) s.place('b', Volume(Box((3, 0, 0), (3, 0, 0)), state_of('stone'))) s.regenerate('/a', dependents=('/b',), replacements={'/b': Volume(Box((3, 0, 0), (4, 0, 0)), state_of('oak_planks'))}) assert len(s.cells('/b')) == 2 assert s.inspect((0, 0, 0))['state'] == state_of('stone') def test_multi_branch_replay_rejects_undeclared_target_and_rolls_back(): from hearth.components.primitives import Volume from hearth.kernel import ContractError from hearth.persistence import semantic_digest s = Scene() s.place('a', Volume(Box((0, 0, 0), (0, 0, 0)), state_of('stone'))) before = semantic_digest(s) with pytest.raises(ContractError, match='replay-targets'): s.regenerate('/a', replacements={'/unknown': Landing()}) assert semantic_digest(s) == before and set(s.nodes) == {'/a'} def test_importable_generation_has_no_new_native_dependency(): import subprocess, sys from pathlib import Path code = ''' import sys,importlib.abc class NoNative(importlib.abc.MetaPathFinder): def find_spec(self, fullname, path=None, target=None): if fullname.split('.')[0] in ('numpy','mcio','scipy','shapely','ctypes'): raise RuntimeError('Unexpected native/transport dependency: '+fullname) sys.meta_path.insert(0,NoNative()) from hearth_extensions.assessment import hall_scene from hearth.persistence import semantic_digest scene=hall_scene(4,1) print(semantic_digest(scene)) ''' result = subprocess.run([sys.executable, '-c', code], cwd=Path(__file__).parents[1], capture_output=True, text=True) assert result.returncode == 0, result.stderr assert len(result.stdout.strip()) == 64
test/test_extension_geometry.py
# Extension-only probes for non-cardinal circulation and curve interfaces. from dataclasses import replace import pytest from hearth import Scene, Box, Frame, Binding, ContractError from hearth.kernel import validate, Child, Plan from hearth.components.primitives import Volume from hearth.environment import Terrain, gradient, wave from hearth.blocks import state_of from hearth.persistence import export_scene, load_scene, semantic_digest from hearth_extensions import Polyline, Endpoint, Link, Boundary, IlluminateBoundary, Platform def bridge_scene(seed=0, water=3, frame=Frame()): domain = Box((-8, -4, -8), (45, 42, 45)) s = Scene(seed, domain=frame.box(domain)) s.place('land', Terrain(domain, gradient(.02, .01, 1) + wave(.2, .1, .15, seed), water), frame=frame) s.place('a', Platform('/land'), frame=frame) s.place('b', Platform('/land'), frame=frame.compose(Frame((18, 0, 27)))) a, b = Endpoint('/a', 'south'), Endpoint('/b', 'north') s.place('link', Link(a, b, '/land', rise=1), frame=frame, bindings=(a.binding(), b.binding())) return s.finalize() def test_diagonal_bridge_actual_route_support_railings_and_reload(work): s = bridge_scene() assert any(n.type == 'extension.trestles' for n in s.nodes.values()) assert len(set(x for x, z in s.nodes['/link'].contract.decisions['center'])) > 5 assert not validate(s, True) p = next(iter(s.cells('/link/deck'))) q = s.inspect(p) assert any('connect' in str(r) for r in s.inspect(p)['related']) or ('/link', 'connects', '/a') in s.relations export_scene(s, work / 'diagonal bridge.litematic') t = load_scene(work / 'diagonal bridge.litematic') assert t.inspect(p) == q and semantic_digest(t) == semantic_digest(s) def test_curve_boundary_interfaces_and_external_attachment(): s = Scene(3, domain=Box((-5, -4, -5), (45, 35, 35))) s.place('land', Terrain(s.domain, gradient(.015, .01, 3))) curve = Polyline.bezier(((0, 0), (7, 25), (28, -3), (37, 20))) s.place('boundary', Boundary(curve)) s.place('lamps', IlluminateBoundary('/boundary')) s.finalize() ports = s.view.offers('/boundary', 'mount') assert len(ports) > 3 p = ports[0].frame.origin q = s.inspect(p) assert q['chain'][1]['id'] == '/boundary' assert p in s.cells('/boundary', descendants=True) @pytest.mark.parametrize('width,depth,corner,lantern', [(13, 17, 0, False), (17, 21, 3, True), (25, 13, 4, False)]) def test_polygon_hall_multiple_usable_ports(width, depth, corner, lantern, work): from hearth_extensions import Pavilion, Polygon s = Scene(2, domain=Box((-15, -4, -15), (42, 60, 42))) s.place('land', Terrain(s.domain, gradient(.025, -.018, 4))) s.place('hall', Pavilion(Polygon.chamfered(width, depth, corner), '/land', entrances=('north', 'east', 'south', 'west'), lantern=lantern)) s.finalize() assert len(s.view.offers('/hall', 'access')) == 4 glass = next(p for p, c in s.blocks.items() if c.state == 'minecraft:glass' and '/facade/' in c.owner) assert [n['type'] for n in s.inspect(glass)['chain']][:3] == ['window.shuttered', 'extension.polygon-shell', 'extension.pavilion'] export_scene(s, work / 'hall.litematic') assert load_scene(work / 'hall.litematic').inspect(glass) == s.inspect(glass) @pytest.mark.parametrize('turn', [0, 1, 2, 3]) def test_extension_transforms_geometry_interfaces_claims_and_queries(turn, work): from hearth.blocks import blockstates_equivalent frame = Frame((7, 3, -5), turn) base = bridge_scene() moved = bridge_scene(frame=frame) assert len(base.blocks) == len(moved.blocks) for point, cell in base.blocks.items(): q = frame.point(point) assert blockstates_equivalent(frame.state(cell.state), moved.inspect(q)['state']) assert moved.inspect(q)['instance'] == cell.owner assert moved.view.port('/a', 'south').frame == frame.compose(base.view.port('/a', 'south').frame) assert moved.nodes['/link'].contract.rules[0].cells == tuple(frame.point(p) for p in base.nodes['/link'].contract.rules[0].cells) export_scene(moved, work / 'rotated bridge.litematic') restored = load_scene(work / 'rotated bridge.litematic') q = next(iter(moved.cells('/link/deck'))) assert restored.inspect(q) == moved.inspect(q) def test_untried_kinked_ribbon_and_asymmetric_polygon(): from hearth_extensions import Polygon, Pavilion # Endpoints share Z; a global endpoint clipping plane would sever this route. curve = Polyline(((4, 8), (4, 12), (13, 16), (22, 12), (22, 8))) s = Scene(19, domain=Box((-8, -4, -8), (50, 60, 50))) s.place('land', Terrain(s.domain, gradient(base=2), water_level=3)) s.place('a', Platform('/land')) s.place('b', Platform('/land'), frame=Frame((18, 0, 0))) a, b = Endpoint('/a', 'south'), Endpoint('/b', 'south') s.place('link', Link(a, b, '/land', curve=curve, covered=True), bindings=(a.binding(), b.binding())) s.finalize() # A six-sided asymmetric footprint absent from the shipped clients. polygon = Polygon(((2, 0), (18, 0), (22, 4), (22, 16), (0, 16), (0, 3))) other = Scene(19, domain=Box((-10, -4, -10), (40, 60, 40))) other.place('land', Terrain(other.domain, gradient(.01, .02, 3))) other.place('hall', Pavilion(polygon, '/land', entrances=('north', 'south'), height=7, roof_run=3)) other.finalize() def test_graph_parent_substitutes_public_access_components(): from hearth_extensions.graphs import Campus, Vertex, Edge from hearth_extensions import Pavilion, Polygon domain = Box((-12, -4, -12), (55, 65, 60)) variants = [] for component in (Platform('/land', 13, 13), Pavilion(Polygon.chamfered(13, 13, 2), '/land', entrances=('north', 'south'))): s = Scene(6, domain=domain) s.place('land', Terrain(domain, gradient(base=3), water_level=3)) campus = Campus((Vertex('a', component, Frame()), Vertex('b', Platform('/land'), Frame((25, 0, 29)))), (Edge('a', 'south', 'b', 'north'),), '/land', domain, landscape=False) s.place('group', campus) s.finalize() assert len(s.view.offers('/group', 'access')) == 1 assert ('/group/circulation/link-0', 'connects', '/group/a') in s.relations variants.append(semantic_digest(s)) assert variants[0] != variants[1] @pytest.mark.parametrize('environment_seed,structure_seed', [(0, 0), (1, 5), (2, 3), (3, 2), (4, 1), (5, 4), (6, 0), (7, 5)]) def test_independent_extension_environment_structure_pairs(environment_seed, structure_seed): from hearth_extensions.assessment import freeze_probe, connector_scene frozen = freeze_probe(environment_seed) digest = semantic_digest(frozen) scene = connector_scene(frozen, structure_seed) assert semantic_digest(frozen) == digest assert not validate(scene, True)
test/test_extension_failures.py
# Deliberate input and geometry damage for extension contracts and atomicity. from dataclasses import replace import copy import pytest from hearth import Scene, Box, Frame, Binding, ContractError from hearth.kernel import validate, Child, Plan, Choice, Limits from hearth.blocks import state_of from hearth.components.primitives import Volume from hearth.environment import Terrain, gradient, wave from hearth.persistence import semantic_digest, export_scene, load_scene, encode from hearth_extensions import Polyline, Endpoint, Link, Boundary, IlluminateBoundary, Platform from hearth_extensions.boundaries import BoundaryChain from hearth_extensions.circulation import Trestles from test_extension_geometry import bridge_scene def snapshot(s): return (semantic_digest(s), copy.deepcopy(encode(s.nodes)), copy.deepcopy(encode(s.relations)), copy.deepcopy(encode(s.dependencies)), copy.deepcopy(encode(s.operations)), copy.deepcopy(s.reverse), copy.deepcopy(s.port_uses), copy.deepcopy(s.events)) def damage(s, p): record = s.blocks.pop(p) s.reverse[record.owner].remove(p) @pytest.mark.parametrize('kind', ['support', 'guard', 'endpoint', 'headroom']) def test_broken_bridge_geometry_is_diagnosed(kind): s = bridge_scene() if kind == 'support': p = s.nodes['/link/supports'].contract.rules[0].cells[0] damage(s, p) expected = 'support' elif kind == 'guard': p = next(iter(s.cells('/link/guards'))) damage(s, p) expected = 'bridge-guard' elif kind == 'endpoint': a = s.view.port('/a', 'south').frame.origin p = (a[0], a[1] - 1, a[2]) damage(s, p) expected = 'reachability' else: p = next(r for r in s.nodes['/link'].contract.rules if r.kind == 'clear').cells[len(s.nodes['/link'].contract.decisions['deck']) // 2] before = snapshot(s) with pytest.raises(ContractError, match='clearance'): s.place('blocked', Volume(Box(p, p), state_of('stone'))) assert snapshot(s) == before return errors = validate(s, True) assert any(d.rule == expected and d.position is not None for d in errors) @pytest.mark.parametrize('fault', ['endpoint', 'frame', 'kind']) def test_invalid_connections_rollback_every_index(fault): s = bridge_scene() s.remove('/link') a, b = Endpoint('/a', 'south'), Endpoint('/b', 'north') pa = s.view.port('/a', 'south').frame.origin pb = s.view.port('/b', 'north').frame.origin curve = Polyline(((pa[0], pa[2]), (pa[0] + 3, pa[2]), (pb[0], pb[2]))) expected = 'endpoint-frame' if fault == 'endpoint': curve = Polyline(((pa[0] + 1, pa[2]), (pb[0], pb[2]))) expected = 'endpoint-disconnected' if fault == 'kind': a = Endpoint('/land', 'construction') expected = 'endpoint-kind' before = snapshot(s) with pytest.raises(ContractError, match=expected): s.place('bad', Link(a, b, '/land', curve=curve), bindings=(a.binding(), b.binding())) assert snapshot(s) == before def test_connection_permission_overflow_is_atomic(): s = Scene(0, domain=Box((-3, -4, -3), (12, 20, 12))) s.place('land', Terrain(s.domain, gradient(base=0), water_level=5, edit_limit=1)) before = snapshot(s) columns = ((2, 0, 2, 4, True), (3, 0, 2, 4, True)) with pytest.raises(ContractError, match='edit-limit'): s.place('piers', Trestles(columns), bindings=(Binding('/land', 'construction', 'fill'),)) assert snapshot(s) == before def test_connection_remove_and_regenerate_restore_water_and_membership(): s = bridge_scene() s.remove('/link') before = snapshot(s) a, b = Endpoint('/a', 'south'), Endpoint('/b', 'north') comp = Link(a, b, '/land', rise=1) s.place('link', comp, bindings=(a.binding(), b.binding())) old = s.cells('/link', True) s.regenerate('/a', dependents=('/b', '/link'), replacements={'/link': replace(comp, covered=True, rise=0)}) new = s.cells('/link', True) assert old != new assert all(s.inspect(p)['instance'] in s.nodes for p in new) assert all(not s.inspect(p)['instance'] or not s.inspect(p)['instance'].startswith('/link') for p in old - new) s.remove('/link') assert semantic_digest(s) == before[0] assert not any('/link' in a or '/link' in c for a, b, c in s.relations) assert not any(k.startswith('/link') for k in s.nodes) def test_boundary_missing_coping_support_and_whole_removal(work): s = Scene(0, domain=Box((-5, -4, -5), (45, 24, 25))) s.place('land', Terrain(s.domain, gradient(base=3))) curve = Polyline.bezier(((0, 0), (9, 20), (26, 0), (37, 17))) s.place('boundary', BoundaryChain(curve)) s.place('lamps', IlluminateBoundary('/boundary')) before = snapshot(s) with pytest.raises(ContractError): s.remove('/boundary') assert snapshot(s) == before changed = Polyline.bezier(((0, 1), (9, 19), (26, 1), (37, 18))) s.regenerate('/boundary', BoundaryChain(changed), dependents=('/lamps',)) s.finalize() p = s.view.offers('/boundary', 'mount')[0].frame.origin assert p in s.cells('/boundary', True) export_scene(s, work / 'curve.litematic') t = load_scene(work / 'curve.litematic') assert t.inspect(p) == s.inspect(p) base = (p[0], p[1] - 1, p[2]) damage(t, base) assert any(d.rule in ('support', 'enclosure') and d.position == base for d in validate(t, True)) def test_curve_boundary_rejects_incompatible_installation_frame(): from hearth_extensions import BoundaryLantern s = Scene(0, domain=Box((-3, -4, -3), (25, 25, 25))) s.place('land', Terrain(s.domain, gradient(base=3))) s.place('wall', Boundary(Polyline(((0, 0), (20, 8))))) port = s.view.offers('/wall', 'mount')[0] before = snapshot(s) with pytest.raises(ContractError, match='port-alignment'): s.place('bad-lamp', BoundaryLantern(), frame=Frame(port.frame.origin, port.frame.turn + 1), bindings=(Binding('/wall', port.key),)) assert snapshot(s) == before def test_failed_choice_does_not_perturb_sibling_randomness(): s = bridge_scene() s.remove('/link') a, b = Endpoint('/a', 'south'), Endpoint('/b', 'north') before = snapshot(s) bad = Link(a, b, '/land', fill_limit=0) with pytest.raises(ContractError): s.compose_choice(Choice('link', (Child('attempt', bad, bindings=(a.binding(), b.binding())),), lambda v, p: 0)) assert snapshot(s) == before good = Link(a, b, '/land', rise=1) s.place('link', good, bindings=(a.binding(), b.binding())) assert semantic_digest(s) == semantic_digest(bridge_scene())
test/test_extension_interiors.py
# Functional bays must preserve their own access, room circulation, support and inventories. import pytest from hearth import Scene, Box, ContractError from hearth.environment import Terrain, gradient from hearth.kernel import validate from hearth.blocks import state_of, name_of from hearth.components.primitives import Volume from hearth.persistence import export_scene, load_scene, semantic_digest, encode from hearth_extensions import Pavilion, Polygon from hearth_extensions.interiors import FUNCTION_GROUPS from test_extension_failures import damage, snapshot def furnished_scene(purpose='library', width=13): scene = Scene(23, domain=Box((-12, -4, -12), (40, 60, 40))) scene.place('land', Terrain(scene.domain, gradient(base=3))) scene.place('hall', Pavilion(Polygon.chamfered(width, 17, 4), '/land', purpose, ('north', 'south', 'east', 'west'))) return scene.finalize() @pytest.mark.parametrize('purpose', tuple(FUNCTION_GROUPS)) def test_functional_bays_are_reachable_and_preserve_inventory(purpose, work): scene = furnished_scene(purpose) bays = [n for n in scene.nodes.values() if n.type == 'extension.work-bay'] assert len(bays) >= 2 assert not validate(scene, True) for bay in bays: port = scene.view.port(bay.path, 'use') assert scene.view.clear(port.region) assert any(scene.blocks[p].nbt for p in scene.cells(bay.path)) path = work / (purpose + '.litematic') export_scene(scene, path) restored = load_scene(path) assert encode(restored.nodes) == encode(scene.nodes) assert semantic_digest(restored) == semantic_digest(scene) def test_larger_hall_allocates_more_bays_and_protects_central_aisle(): small = furnished_scene(width=13) large = furnished_scene(width=25) small_decisions = small.nodes['/hall/furnishings'].contract.decisions large_decisions = large.nodes['/hall/furnishings'].contract.decisions assert large_decisions['placed_bays'] > small_decisions['placed_bays'] assert large_decisions['omitted_optional'] == 0 point = large.nodes['/hall/furnishings'].contract.rules[0].cells[20] before = snapshot(large) with pytest.raises(ContractError, match='clearance'): large.place('crate', Volume(Box(point, point), state_of('stone'))) assert snapshot(large) == before def test_damaged_station_furnishing_and_support_are_detected(): scene = furnished_scene('library') bay = next(n for n in scene.nodes.values() if n.type == 'extension.work-bay') lectern = next(p for p in scene.cells(bay.path) if name_of(scene.blocks[p].state) == 'lectern') damage(scene, lectern) assert any(d.rule == 'furnishing' and d.component == bay.path for d in validate(scene, True)) bed = bay.contract.rules[0].cells[0] damage(scene, bed) assert any(d.rule == 'support' and d.position == bed for d in validate(scene, True)) def test_interaction_clearance_remains_protected_after_completion(): scene = furnished_scene('bedroom') bay = next(n for n in scene.nodes.values() if n.type == 'extension.work-bay') at = scene.view.port(bay.path, 'use').frame.origin before = snapshot(scene) with pytest.raises(ContractError, match='clearance'): scene.place('block-user', Volume(Box(at, at), state_of('stone'))) assert snapshot(scene) == before
test/test_building_craft.py
# Roof-form and fitted-room contracts, stateful sources, preserved consumers and replay. from dataclasses import dataclass, replace import pytest from hearth import Scene, Box, Frame, ContractError from hearth.environment import Terrain, constant from hearth.components import Blueprint, RoomSpec, Building, InteriorDesign, Hearth, DiningSet from hearth.components.roofcraft import RoofDesign from hearth.components.furnishing import FurnishingLayout from hearth.components.primitives import Volume from hearth.components.roomlayout import FittedInterior from hearth.lodges import lodge_scene from hearth.persistence import export_scene, load_scene, semantic_digest from hearth.kernel import validate from hearth.blocks import state_of, name_of, parse, emitted_light, slab from test.test_building_quality import damaged, snapshot def craft_design(bay=11, axis='z', hips=(2, 2)): return Blueprint((RoomSpec(0, 0, 0, 'living'), RoomSpec(1, 0, 0, 'kitchen')), bay=bay, roof_axis=axis, roof_design=RoofDesign((1, 2), 8, end_hips=hips), attic_purpose='bedroom', porch_bays=2, interior_design=InteriorDesign()) @pytest.mark.parametrize('bay', (9, 11, 13)) @pytest.mark.parametrize('axis', ('x', 'z')) @pytest.mark.parametrize('hips', ((0, 2), (2, 2))) def test_half_hips_keep_enclosure_actual_roof_cover_and_loft_access(bay, axis, hips): scene = lodge_scene(craft_design(bay, axis, hips), 3, 0, garden=False) assert not validate(scene, True) for node in scene.nodes.values(): if node.type == 'roof.weather-cover': assert tuple(node.contract.decisions['end_hips']) == hips local_box = Box.enclosing(node.frame.inverse(q) for q in node.contract.envelope.corners()) surface = RoofDesign((1, 2), end_hips=hips).surface(bay, local_box.size[2] - 2) p = node.frame.point((bay // 2, surface.height(bay // 2, 0), 0)) assert scene.view.supports(p) assert any(n.type == 'room.loft.bedroom' for n in scene.nodes.values()) @pytest.mark.parametrize('turn', range(4)) def test_craft_rotation_complete_queries_and_nbt_reload(turn, work): frame = Frame((30, 0, -25), turn) domain = frame.box(Box((-8, -3, -18), (34, 64, 30))) s = Scene(5, domain=domain) s.place('land', Terrain(domain, constant(2))) s.place('building', Building(craft_design(13), '/land'), frame=frame) s.finalize() hearth = next(n for n in s.nodes.values() if n.type == 'furnishing.hearth') q = hearth.frame.point((1, 1, 1)) assert emitted_light(s.view.state(q)) == 15 assert s.inspect(q)['chain'][0]['id'] == hearth.path assert s.inspect(q)['chain'][-1]['id'] == '/building' path = work / 'hipped furnished house.litematic' export_scene(s, path) from hearth.quality_assessment import audit_pair assert audit_pair(s, path)['nodes'] == len(s.nodes) restored = load_scene(path) assert restored.inspect(q) == s.inspect(q) assert restored.cells('/building', True) == s.cells('/building', True) @pytest.mark.parametrize('purpose', ('living', 'bedroom', 'library', 'kitchen', 'workshop', 'storage')) def test_fitted_room_purpose_interaction_routes_and_minimum(purpose): d = replace(craft_design(13), rooms=(RoomSpec(0, 0, 0, purpose),), porch_bays=1) s = lodge_scene(d, 2, 0, garden=False) room = s.nodes['/building/room-0-0-0/furniture'] assert 2 <= room.contract.decisions['stations'] <= 5 assert any(n.type == 'furnishing.group.' + purpose for n in s.nodes.values()) assert not validate(s, True) portal = next(port for n in s.nodes.values() if n.path.startswith(room.path) for port in s.view.offers(n.path, 'interaction')) before = snapshot(s) with pytest.raises(ContractError, match='clearance|reachability'): head = Box((portal.region.lo[0], portal.region.hi[1], portal.region.lo[2]), portal.region.hi) s.place('block-apron', Volume(head, state_of('stone'))) assert before == snapshot(s) def station_scene(component): s = Scene(1, domain=Box((-4, -2, -4), (12, 14, 12))) s.place('land', Terrain(s.domain, constant(0))) s.place('station', component, frame=Frame((1, 1, 1))) return s.finalize() def test_hearth_off_state_missing_mantle_and_substrate_are_detected(): s = station_scene(Hearth()) fire = (2, 2, 2) name, properties = parse(s.view.state(fire)) properties['lit'] = 'false' off = state_of(name, **properties) assert emitted_light(off) == 0 assert emitted_light(s.view.state(fire)) == 15 assert 'lighting' in {d.rule for d in validate(damaged(s, fire, off), True)} assert 'expected-geometry' in {d.rule for d in validate(damaged(s, (1, 3, 1)), True)} assert 'support' in {d.rule for d in validate(damaged(s, (1, 0, 1)), True)} def test_dining_whole_object_removal_and_clearance_rollback(): s = station_scene(DiningSet(4)) before = snapshot(s) with pytest.raises(ContractError): s.place('collision', Volume(Box((1, 1, 1), (1, 1, 1)), s.view.state((1, 1, 1)))) assert snapshot(s) == before assert 'expected-geometry' in {d.rule for d in validate(damaged(s, (1, 1, 1)), True)} old = s.cells('/station') s.remove('/station') assert '/station' not in s.nodes and not s.cells('/station') assert all(s.inspect(p)['instance'] is None for p in old) def test_hip_skin_damage_and_principal_form_change(): a = lodge_scene(craft_design(11, hips=(0, 0)), 3, 0, garden=False) b = lodge_scene(craft_design(11), 3, 0, garden=False) from hearth.quality_assessment import principal_signature assert principal_signature(a)[0] != principal_signature(b)[0] cover = next(n for n in b.nodes.values() if n.type == 'roof.weather-cover') rule = next(r for r in cover.contract.rules if r.kind == 'vertical-cover') x, y, z = rule.cells[len(rule.cells) // 2] broken = b for yy in range(y, rule.box.hi[1] + 1): broken = damaged(broken, (x, yy, z)) assert 'roof-cover' in {d.rule for d in validate(broken, True)} @pytest.mark.parametrize('hips', ((4, 0), (-1, 0), (1,), (True, 1), (3, 3))) def test_explicit_incompatible_hip_depths_are_not_clamped(hips): with pytest.raises(ValueError): RoofDesign((1,), end_hips=hips).surface(9, 9) @dataclass(frozen=True) class IndependentInteriorPolicy: def component(self, purpose, width, depth, stair): return FurnishingLayout(purpose, width, depth, stair) def test_parent_substitutes_interior_policy_and_regenerates_without_stale_owners(): d = craft_design(11) s = lodge_scene(d, 4, 0, garden=False) old = {n.path for n in s.nodes.values() if n.type in ('furnishing.hearth', 'furnishing.textiles')} assert old replacement = replace(d, interior_design=IndependentInteriorPolicy()) s.regenerate('/building', Building(replacement, '/land')) retired = old - set(s.nodes) assert retired and all(not s.cells(p, True) for p in retired) assert not any(c.owner in retired for c in s.blocks.values()) assert not any(n.type in ('furnishing.hearth', 'furnishing.textiles') for n in s.nodes.values()) assert semantic_digest(s) == semantic_digest(lodge_scene(replacement, 4, 0, garden=False)) assert not validate(s, True) assert any(n.type.startswith('furnishing.group.') for n in s.nodes.values()) def test_explicit_station_count_failure_rolls_back_composition(): s = Scene(2, domain=Box((-2, -2, -2), (14, 20, 14))) s.place('land', Terrain(s.domain, constant(0))) before = snapshot(s) with pytest.raises(ContractError, match='furnishing-count'): s.place('impossible', FittedInterior('living', 9, 9, True, InteriorDesign(5, 5)), frame=Frame((0, 1, 0))) assert snapshot(s) == before @pytest.mark.parametrize('bay', (9, 11, 13)) def test_compact_garden_respects_understory_without_dropping_tree_minimum(bay): d = replace(craft_design(bay), rooms=(RoomSpec(0, 0, 0, 'living'),), porch_bays=1) s = lodge_scene(d, 2, 0) assert sum(n.type == 'plant.conifer' for n in s.nodes.values()) >= 3 assert sum(n.type == 'garden.raised-bed' for n in s.nodes.values()) == 4 assert not validate(s, True) @pytest.mark.parametrize('seed', range(8)) def test_new_hearth_client_joins_preserve_locked_graph(seed): from examples.hearth_house import hearth_house design = hearth_house(seed) scene = lodge_scene(design, seed, seed, garden=False) assert scene.nodes['/building'].contract.decisions['rooms'] == [(r.x, r.z, r.level, r.purpose) for r in design.normalized()] assert any(n.type == 'furnishing.hearth' for n in scene.nodes.values()) assert all(n.contract.decisions['stations'] >= 2 for n in scene.nodes.values() if n.type.startswith('furniture.fitted.')) assert not validate(scene, True) def test_interior_substitution_preserves_principal_architecture(): from hearth.quality_assessment import principal_signature design = craft_design(11) fitted = lodge_scene(design, 3, 0, garden=False) classic = lodge_scene(replace(design, interior_design=IndependentInteriorPolicy()), 3, 0, garden=False) assert principal_signature(fitted) == principal_signature(classic) assert semantic_digest(fitted) != semantic_digest(classic) @pytest.mark.parametrize('hips', ((0, 0), (2, 2))) def test_ridge_finials_have_full_height_bases_and_reject_half_slab_gaps(hips): scene = lodge_scene(craft_design(11, hips=hips), 3, 0, garden=False) finials = [p for n in scene.nodes.values() if n.type == 'roof.weather-cover' for p in scene.cells(n.path) if name_of(scene.view.state(p)) == 'dark_oak_fence'] assert finials for x, y, z in finials: base = (x, y - 1, z) assert name_of(scene.view.state(base)) == 'dark_oak_planks' broken = damaged(scene, base, slab('dark_oak', 'bottom')) assert 'expected-geometry' in {d.rule for d in validate(broken, True)}
test/test_building_space.py
# Public habitable roof-space interfaces and actual circulation/enclosure validation. import pytest from hearth import Scene, Box, Frame from hearth.environment import Terrain, constant from hearth.components.interior import Room from hearth.components.roofcraft import ProfileRoof from hearth.components import Blueprint, RoomSpec from hearth.components.roofcraft import RoofDesign from hearth.lodges import lodge_scene from hearth.kernel import validate @pytest.mark.parametrize('bay', (9, 11, 13)) @pytest.mark.parametrize('axis', ('x', 'z')) def test_habitable_roof_keeps_stair_access_and_actual_room_guarantees(bay, axis): design = Blueprint((RoomSpec(0, 0, 0, 'living'),), bay=bay, roof_axis=axis, roof_design=RoofDesign((1, 2)), attic_purpose='bedroom') scene = lodge_scene(design, 4, garden=False) assert not validate(scene, True) room = scene.nodes['/building/roof-0/room'] assert room.type == 'room.loft.bedroom' assert len(room.contract.decisions['furniture']) >= 2 assert room.contract.decisions['lights'] assert any(r.kind == 'enclosed-volume' for r in room.contract.rules) def test_public_roof_and_upper_floor_interfaces(): scene = Scene(51, domain=Box((-4, -2, -4), (18, 35, 18))) scene.place('land', Terrain(scene.domain, constant(0))) scene.place('room', Room('living', stair_up=True, upper_open=True), frame=Frame((0, 1, 0)), complete=False) access = scene.view.offers('/room', 'upper-floor-access') assert access, 'An enclosing composition must discover the actual stair aperture' roof = ProfileRoof(11, 11) assert 'roof-interior' in roof.capability().offers from dataclasses import dataclass, replace from hearth import Binding, ContractError from hearth.kernel import Capability, Contract, Plan from hearth.blocks import name_of, state_of, parse from hearth.components import Building from hearth.components.lofts import InhabitedRoof, RoofPlatform, LoftLight from hearth.components.primitives import Volume from hearth.persistence import export_scene, load_scene, encode, semantic_digest from hearth.quality_assessment import audit_pair, principal_signature from test.test_building_quality import damaged, snapshot from examples.roof_home import roof_home def loft_scene(turn=0, purpose='bedroom'): frame = Frame((24, 0, -16), turn) domain = frame.box(Box((-8, -3, -18), (36, 55, 30))) scene = Scene(84, domain=domain) scene.place('land', Terrain(domain, constant(2))) design = Blueprint((RoomSpec(0, 0, 0, 'living'), RoomSpec(1, 0, 0, 'kitchen')), bay=11, roof_axis='x', roof_design=RoofDesign((1, 2)), attic_purpose=purpose, porch_bays=2, porch_depth=4) scene.place('house', Building(design, '/land'), frame=frame) return scene.finalize(), design @pytest.mark.parametrize('turn', range(4)) def test_loft_transform_provenance_and_complete_pair(turn, work): scene, design = loft_scene(turn) loft = next(n for n in scene.nodes.values() if n.type == 'room.loft.bedroom') station = next(n for n in scene.nodes.values() if n.path.startswith(loft.path) and n.type == 'furnishing.group.bedroom') point = next(p for p in scene.cells(station.path) if name_of(scene.view.state(p)) == 'red_bed') chain = scene.inspect(point)['chain'] assert [n['type'] for n in chain][:3] == ['furnishing.group.bedroom', 'room.loft.bedroom', 'roof.profile'] assert chain[-1]['id'] == '/house' assert any(a == loft.path and kind == 'supported_by' for a, kind, b in scene.inspect(point)['related']) assert any(a == loft.path and kind == 'connected_to' for a, kind, b in scene.relations) roof = next(n for n in scene.nodes.values() if n.type == 'roof.profile') offer = scene.view.offers(roof.path, 'roof-interior')[0] assert offer.frame == loft.frame lantern = next(n for n in scene.nodes.values() if n.type == 'light.roof-hanger') top = lantern.contract.decisions['top'] assert scene.view.supports(lantern.frame.point((0, top, 0))) assert all(name_of(scene.view.state(lantern.frame.point((0, y, 0)))) == 'chain' for y in range(1, top)) stair = scene.nodes['/house/room-0-0-0/stairs'] tread = stair.frame.point((0, 0, 0)) facing = parse(scene.view.state(tread))[1]['facing'] assert facing == ('south', 'west', 'north', 'east')[stair.frame.turn % 4] path = work / 'usable roof.litematic' export_scene(scene, path) audit = audit_pair(scene, path) assert audit['nodes'] == len(scene.nodes) and audit['inventories'] > 0 restored = load_scene(path) assert restored.inspect(point) == scene.inspect(point) assert restored.cells(loft.path, True) == scene.cells(loft.path, True) assert not validate(restored, True) @pytest.mark.parametrize('seed', range(8)) def test_new_lightweight_roof_program_includes_required_lofts(seed): scene = lodge_scene(roof_home(seed), seed, seed, garden=False) lofts = [n for n in scene.nodes.values() if n.type.startswith('room.loft.')] covers = [n for n in scene.nodes.values() if n.type == 'roof.inhabited'] assert lofts and len(lofts) == len(covers) assert all(n.contract.decisions['purpose'] == roof_home(seed).attic_purpose for n in lofts) assert not validate(scene, True) @pytest.mark.parametrize('damage,expected', [('wall', 'enclosure-leak'), ('support', 'support'), ('tread', 'support'), ('bed', 'bed-pair'), ('collar', 'expected-geometry'), ('guard', 'expected-geometry')]) def test_actual_loft_damage_detected(damage, expected): scene, _ = loft_scene() if damage == 'wall': part = scene.nodes['/house/roof-floor-0/knees'] q = part.frame.point((5, 1, 0)) # Remove the complete two-cell eave wall thickness, not only its inner beam. scene = damaged(scene, part.frame.point((5, 1, -1))) elif damage == 'support': part = scene.nodes['/house/roof-floor-0/floor'] q = next(r.cells[0] for r in part.contract.rules if r.kind == 'support') elif damage == 'tread': part = scene.nodes['/house/room-0-0-0/stairs'] q = next(p for p in scene.cells(part.path) if name_of(scene.view.state(p)) == 'spruce_stairs') elif damage == 'bed': q = next(p for p in scene.cells('/house/roof-0/room', True) if name_of(scene.view.state(p)) == 'red_bed') else: kind = 'timber.roof-collars' if damage == 'collar' else 'circulation.aperture-guard' part = next(n for n in scene.nodes.values() if n.type == kind) assert scene.cells(part.path) q = min(scene.cells(part.path)) diagnostics = validate(damaged(scene, q), True) assert expected in {d.rule for d in diagnostics} assert all(d.component and d.position is not None for d in diagnostics if d.rule == expected) def test_loft_light_sources_function_and_nbt_checked_from_blocks(): scene, _ = loft_scene() loft = scene.nodes['/house/roof-0/room'] unlit = scene for n in scene.nodes.values(): if n.type == 'light.roof-hanger': unlit = damaged(unlit, n.frame.origin) assert any(d.rule == 'lighting' and d.component == loft.path for d in validate(unlit, True)) unfurnished = scene for p in scene.cells(loft.path, True): if name_of(scene.view.state(p)) == 'red_bed': unfurnished = damaged(unfurnished, p) assert any(d.rule == 'furnishing' and d.component == loft.path for d in validate(unfurnished, True)) # Deliberately corrupt NBT in a fork, without weakening the public write path. corrupt = scene.fork() from copy import deepcopy q = next(p for p in scene.cells(loft.path, True) if scene.blocks[p].nbt) data = deepcopy(scene.blocks[q].nbt) data['Items'][0]['count'] = 80 corrupt.blocks[q] = replace(corrupt.blocks[q], nbt=data) assert any(d.rule == 'inventory' and d.position == q for d in validate(corrupt, True)) def test_stair_and_room_routes_reject_late_decoration_atomically(): scene, _ = loft_scene() stair = scene.nodes['/house/room-0-0-0/stairs'] point = next(p for r in stair.contract.rules if r.kind == 'clear' for p in r.cells if name_of(scene.view.state(p)) == 'air') before = snapshot(scene) with pytest.raises(ContractError, match='clearance'): scene.place('late-decoration', Volume(Box(point, point), state_of('stone'))) assert snapshot(scene) == before loft = scene.nodes['/house/roof-0/room'] landing = scene.view.port(loft.path, 'landing').frame.origin with pytest.raises(ContractError, match='clearance'): scene.place('blocked-landing', Volume(Box(landing, landing), state_of('stone'))) assert snapshot(scene) == before @dataclass(frozen=True) class RoofIntrusion: """A deliberately invalid consumer that attempts an unauthorized roof edit.""" def capability(self): return Capability('test.roof-intrusion', ('roof-room',)) def negotiate(self, ctx, parameters): port = ctx.view.port(ctx.bindings[0].host, ctx.bindings[0].port) return Contract(Box.enclosing(ctx.local(q) for q in port.region.corners())) def realize(self, ctx, contract): p = Plan() p.fill(contract.envelope, state_of('stone'), 'illegal-interior') return p def test_roof_interior_has_no_replacement_authority_and_bad_frames_roll_back(): scene = Scene(13, domain=Box((-5, -3, -5), (20, 40, 20))) scene.place('land', Terrain(scene.domain, constant(0))) scene.place('room', Room('living', upper_open=False), frame=Frame((0, 1, 0))) scene.place('roof', ProfileRoof(11, 11), frame=Frame((0, 8, 0))) offer = scene.view.offers('/roof', 'roof-interior')[0] before = snapshot(scene) with pytest.raises(ContractError, match='write-authority|permission-volume|clearance'): scene.place('intrusion', RoofIntrusion(), frame=offer.frame, bindings=(Binding('/roof', offer.key),)) assert snapshot(scene) == before with pytest.raises(ContractError, match='inhabited-roof-interface'): scene.place('wrong-port', InhabitedRoof(11, 11, 'z', 'deepslate_tile'), frame=Frame((0, 7, 0), 1), bindings=(Binding('/roof', offer.key, 'connect'),)) assert snapshot(scene) == before def test_branch_regeneration_retires_lofts_and_restores_consistent_indexes(work): scene, design = loft_scene() old_nodes = {p for p in scene.nodes if '/roof-' in p} old_cells = scene.cells('/house/roof-0/room', True) replacement = Building(replace(design, attic_purpose=None), '/land') scene.regenerate('/house', replacement) assert old_cells and not scene.cells('/house/roof-0/room', True) assert not any(n.type.startswith('room.loft.') for n in scene.nodes.values()) retired = old_nodes - set(scene.nodes) assert retired and not any(c.owner in retired for c in scene.blocks.values()) assert not any(a in retired or b in retired for a, kind, b in scene.relations) assert not validate(scene, True) scene.regenerate('/house', Building(design, '/land')) fresh, _ = loft_scene() assert semantic_digest(scene) == semantic_digest(fresh) assert encode(scene.nodes) == encode(fresh.nodes) export_scene(scene, work / 'regenerated.litematic') audit_pair(scene, work / 'regenerated.litematic') @pytest.mark.parametrize('bays', (2, 3)) def test_veranda_has_intermediate_bearings_and_actual_entrance(bays): design = Blueprint(tuple(RoomSpec(x, 0, 0, 'living') for x in range(bays)), bay=11, porch_bays=bays, porch_depth=5) scene = lodge_scene(design, 20, garden=False) porch = scene.nodes['/building/porch'] columns = porch.contract.decisions['columns'] assert len(columns) >= 3 and max(b - a for a, b in zip(columns, columns[1:])) <= 12 assert scene.view.port(porch.path, 'front').frame.origin[0] == 5 q = porch.frame.point((columns[1], 2, -5)) assert 'support' in {d.rule for d in validate(damaged(scene, q), True)} before = snapshot(scene) with pytest.raises(ValueError, match='contiguous front rooms'): scene.regenerate('/building', Building(replace(design, porch_bays=bays + 1), '/land')) assert snapshot(scene) == before def test_habitable_roof_domains_are_explicit(): with pytest.raises(ValueError, match='explicit roof policy'): Blueprint((RoomSpec(0, 0, 0, 'living'),), attic_purpose='bedroom').validate() with pytest.raises(ValueError, match='Attic purpose'): Blueprint((RoomSpec(0, 0, 0, 'living'),), attic_purpose='greenhouse').validate() scene = Scene(1, domain=Box((-2, -1, -2), (5, 20, 5))) scene.place('land', Terrain(scene.domain, constant(0))) before = snapshot(scene) with pytest.raises(ContractError, match='loft-light-support'): scene.place('unsupported-lantern', LoftLight(maximum_hanger=4), frame=Frame((1, 2, 1))) assert snapshot(scene) == before def test_direct_recursive_inhabited_roof_and_policy_substitution(): @dataclass(frozen=True) class TallerRoofPolicy: def heights(self, span): return RoofDesign((2,)).heights(span) def component(self, width, depth, axis, material): return ProfileRoof(width, depth, axis, material, RoofDesign((2,))) scene = Scene(33, domain=Box((-5, -3, -6), (18, 50, 18))) scene.place('land', Terrain(scene.domain, constant(0))) scene.place('room', Room('living', stair_up=True, upper_open=True), frame=Frame((0, 1, 0)), complete=False) port = scene.view.offers('/room', 'upper-floor-access')[0] before = snapshot(scene) with pytest.raises(ContractError, match='inhabited-roof-interface'): scene.place('roof', InhabitedRoof(11, 11, 'z', 'deepslate_tile'), frame=Frame(port.frame.origin, 1), bindings=(Binding('/room', port.key, 'connect'),)) assert snapshot(scene) == before scene.place('roof', InhabitedRoof(11, 11, 'z', 'deepslate_tile'), frame=port.frame, bindings=(Binding('/room', port.key, 'connect'),)) scene.finish_scope('/room') scene.finalize() first_height = max(p[1] for p in scene.cells('/roof', True)) first_landing = scene.view.port('/roof', 'landing') scene.regenerate('/roof', InhabitedRoof(11, 11, 'z', 'deepslate_tile', TallerRoofPolicy())) assert max(p[1] for p in scene.cells('/roof', True)) > first_height assert scene.view.port('/roof', 'landing').frame == first_landing.frame assert not validate(scene, True) def test_roof_aperture_metadata_cannot_hide_an_exterior_leak(): scene, _ = loft_scene() node = scene.nodes['/house/roof-0/room'] # Corrupt companion-style contract data in a fork; the validator checks the bound. broken = scene.fork() rules = tuple(replace(r, data={'apertures': ((-1, 3, -1),)}) if r.kind == 'enclosed-volume' else r for r in node.contract.rules) broken.nodes[node.path] = replace(node, contract=replace(node.contract, rules=rules)) assert any(d.rule == 'enclosure-aperture' and d.component == node.path for d in validate(broken, True)) def test_sibling_roof_randomness_and_palette_free_principal_signature(): from hearth.components import BoundaryPlanting scene = lodge_scene(roof_home(2), 2, garden=False) other = scene.fork() other.place('border', BoundaryPlanting('/building', '/land', density=.2)) other.finalize() assert principal_signature(other) == principal_signature(scene) assert {p: c for p, c in other.blocks.items() if c.owner.startswith('/building')} == {p: c for p, c in scene.blocks.items() if c.owner.startswith('/building')} recolored = scene.fork() # Only color changes in a cloned actual scene; membership, geometry and role stay fixed. for p in scene.cells('/building', True): if name_of(scene.view.state(p)) == 'smooth_sandstone': recolored.blocks[p] = replace(scene.blocks[p], state=state_of('calcite')) assert principal_signature(recolored) == principal_signature(scene) def test_canopy_contact_uses_flush_gable_glazing_instead_of_blank_infill(): design = Blueprint((RoomSpec(0, 0, 0, 'living'),), bay=13, porch_depth=4, roof_axis='z', roof_design=RoofDesign((1, 1, 2)), attic_purpose='bedroom') scene = lodge_scene(design, 22, garden=False) window = scene.nodes['/building/roof-0/weather/cover/gable-front/window'] assert window.type == 'window.flush' glass = scene.cells(window.path) assert len(glass) == 9 and all(name_of(scene.view.state(p)) == 'glass' for p in glass) assert scene.inspect(min(glass))['chain'][1]['type'] == 'wall.profile-gable' assert not validate(scene, True)
test/test_building_detail.py
# Domestic components, facade exclusions and planted boundaries through public contracts. from dataclasses import dataclass, replace import pytest from hearth import Scene, Box, Frame, Binding, ContractError from hearth.kernel import Capability, Contract, Plan, validate from hearth.environment import Terrain, constant, gradient, wave from hearth.components import Wall, Window, WindowBox, DomesticSuite, GardenPlant, BoundaryPlanting, Blueprint, RoomSpec, Building, FacadeDesign from hearth.components.primitives import Volume from hearth.lodges import lodge_scene, hillside_home from hearth.blocks import name_of, state_of, parse from hearth.persistence import export_scene, load_scene, encode from test.test_building_quality import snapshot, damaged @pytest.mark.parametrize('bay', (9, 11, 13)) def test_service_exclusion_retains_rear_daylight_and_locked_rooms(bay): design = Blueprint((RoomSpec(0, 0, 0, 'living'), RoomSpec(0, 0, 1, 'bedroom')), bay=bay, chimney=True, balcony=True, facade_design=FacadeDesign(), rail_material='dark_oak') scene = lodge_scene(design, 71, garden=False) for level in (0, 1): room = f'/building/room-0-0-{level}' windows = [n for n in scene.nodes.values() if n.path.startswith(room + '/window-south') and n.type.startswith('window.')] assert len(windows) == 2 glass = {p for n in windows for p in scene.cells(n.path) if name_of(scene.view.state(p)) == 'glass'} assert len(glass) == 12 stack = scene.cells('/building/chimney') assert not glass.intersection(stack) assert scene.nodes['/building'].contract.decisions['rooms'] == [(r.x, r.z, r.level, r.purpose) for r in design.normalized()] assert not validate(scene, True) @pytest.mark.parametrize('turn', range(4)) def test_external_window_box_attachment_roundtrip_and_regeneration(turn, work): frame = Frame((15, 0, -12), turn) scene = Scene(52, domain=frame.box(Box((-4, -2, -5), (16, 20, 8)))) scene.place('land', Terrain(scene.domain, constant(0))) scene.place('wall', Wall(11), frame=frame.compose(Frame((0, 1, 0)))) scene.place('window', Window(2, 3), frame=frame.compose(Frame((2, 2, 0))), bindings=(Binding('/wall', 'infill'),)) mount = scene.view.offers('/window', 'window-garden')[0] scene.place('flowers', WindowBox(), frame=mount.frame, bindings=(Binding('/window', mount.key),)) scene.finalize() point = next(p for p in scene.cells('/flowers') if name_of(scene.view.state(p)) == 'rooted_dirt') assert [n['id'] for n in scene.inspect(point)['chain']][:3] == ['/flowers', '/window', '/wall'] assert scene.inspect(point)['instance'] == '/flowers' assert scene.cells('/flowers').isdisjoint(scene.cells('/window')) path = work / 'window garden.litematic' export_scene(scene, path) restored = load_scene(path) assert restored.inspect(point) == scene.inspect(point) assert encode(restored.nodes) == encode(scene.nodes) original = scene.cells('/flowers') scene.remove('/flowers') assert '/flowers' not in scene.nodes and '/flowers' not in scene.reverse assert all(scene.inspect(q).get('instance') != '/flowers' for q in original) scene.place('flowers', WindowBox(('allium',)), frame=mount.frame, bindings=(Binding('/window', mount.key),)) assert scene.cells('/flowers') == original assert not validate(scene.finalize(), True) def test_window_box_missing_anchor_bad_frame_and_overflow_are_rejected(): scene = Scene(2, domain=Box((-4, -2, -5), (15, 20, 8))) scene.place('land', Terrain(scene.domain, constant(0))) scene.place('wall', Wall(11), frame=Frame((0, 1, 0))) scene.place('window', Window(2, 3), frame=Frame((2, 2, 0)), bindings=(Binding('/wall', 'infill'),)) port = scene.view.port('/window', 'garden') before = snapshot(scene) with pytest.raises(ContractError, match='window-box-interface'): scene.place('misaligned', WindowBox(), frame=Frame(port.frame.origin, 1), bindings=(Binding('/window', 'garden'),)) assert snapshot(scene) == before @dataclass(frozen=True) class Overflow: def capability(self): return Capability('test.planter-overflow', ('planter',)) def negotiate(self, ctx, parameters): return Contract(Box((0, 0, 0), (2, 1, 1))) def realize(self, ctx, contract): p = Plan() p.fill(contract.envelope, state_of('dirt')) return p with pytest.raises(ContractError, match='write-authority|permission'): scene.place('overflow', Overflow(), frame=port.frame, bindings=(Binding('/window', 'garden'),)) assert snapshot(scene) == before scene.place('flowers', WindowBox(), frame=port.frame, bindings=(Binding('/window', 'garden'),)) scene.finalize() soil = next(p for p in scene.cells('/flowers') if name_of(scene.view.state(p)) == 'rooted_dirt') assert any(d.rule == 'support' and d.component == '/flowers' for d in validate(damaged(scene, soil), True)) @pytest.mark.parametrize('purpose', ('gathering', 'study', 'cooking', 'craft', 'cabinet')) @pytest.mark.parametrize('width', (2, 3)) def test_domestic_station_function_apron_support_and_nbt(purpose, width, work): scene = Scene(6, domain=Box((-2, -2, -2), (8, 12, 8))) scene.place('land', Terrain(scene.domain, constant(0))) scene.place('station', DomesticSuite(purpose, width), frame=Frame((1, 1, 1))) scene.finalize() port = scene.view.offers('/station', 'interaction')[0] before = snapshot(scene) with pytest.raises(ContractError, match='clearance'): scene.place('obstruction', Volume(port.region, state_of('stone'))) assert snapshot(scene) == before support = (1, 0, 1) assert 'support' in {d.rule for d in validate(damaged(scene, support), True)} required = next(r for r in scene.nodes['/station'].contract.rules if r.kind == 'furnishing').data['groups'][0] broken = scene for p in scene.cells('/station'): if name_of(scene.view.state(p)) in required: broken = damaged(broken, p) assert 'furnishing' in {d.rule for d in validate(broken, True)} path = work / 'station.litematic' export_scene(scene, path) restored = load_scene(path) assert {p: c.nbt for p, c in restored.blocks.items() if c.nbt} == {p: c.nbt for p, c in scene.blocks.items() if c.nbt} def test_whole_tall_garden_plant_and_missing_substrate(): scene = Scene(5, domain=Box((-2, -2, -2), (8, 12, 8))) scene.place('land', Terrain(scene.domain, constant(0))) scene.place('rose', GardenPlant('rose_bush'), frame=Frame((2, 1, 2)), bindings=(Binding('/land', 'planting', 'plant'),)) scene.finalize() assert len(scene.cells('/rose')) == 2 assert 'plant-pair' in {d.rule for d in validate(damaged(scene, (2, 2, 2)), True)} assert 'support' in {d.rule for d in validate(damaged(scene, (2, 0, 2)), True)} before = snapshot(scene) with pytest.raises(ContractError): scene.place('unsupported', GardenPlant(), frame=Frame((4, 3, 4)), bindings=(Binding('/land', 'planting', 'plant'),)) assert snapshot(scene) == before def test_border_uses_public_transformed_boundary_and_preserves_scene(): design = replace(hillside_home(0), bay=11) scene = lodge_scene(design, 19, field=gradient(.06, -.02, 2) + wave(.35, .2, .1, 1), garden=False) before = dict(scene.blocks) scene.place('border', BoundaryPlanting('/building', '/land', density=1)) scene.finalize() assert scene.cells('/border', True) assert all(scene.blocks[p] == cell for p, cell in before.items()) assert scene.view.offers('/building', 'footprint-boundary') assert ('/border', 'landscapes', '/building') in scene.relations assert all(name_of(scene.view.state((p[0], p[1] - 1, p[2]))) != 'water' for n in scene.nodes.values() if n.type.startswith('plant.garden') for p in (n.frame.origin,)) def test_contrasting_balcony_guards_are_actual_and_damage_checked(): scene = lodge_scene(hillside_home(0), 0, garden=False) guards = [r for r in scene.nodes['/building/porch'].contract.rules if r.kind == 'expected'][0] assert len(guards.cells) > 10 assert all(name_of(scene.view.state(p)) == 'dark_oak_fence' for p in guards.cells) assert 'expected-geometry' in {d.rule for d in validate(damaged(scene, guards.cells[0]), True)} @pytest.mark.parametrize('turn', range(4)) def test_ceiling_members_preserve_actual_stair_headroom_and_rotate(turn): from hearth.components import CeilingTimbers frame = Frame((20, 0, -15), turn) domain = frame.box(Box((-8, -3, -18), (35, 64, 35))) scene = Scene(13, domain=domain) scene.place('land', Terrain(domain, constant(2))) design = Blueprint((RoomSpec(0, 0, 0, 'living'), RoomSpec(0, 0, 1, 'bedroom')), chimney=True, facade_design=FacadeDesign()) scene.place('house', Building(design, '/land'), frame=frame) scene.finalize() beams = [n for n in scene.nodes.values() if n.type == 'interior.ceiling-timbers'] assert len(beams) == 2 and all(scene.cells(n.path) for n in beams) stairs = scene.nodes['/house/room-0-0-0/stairs'] clear = {p for r in stairs.contract.rules if r.kind == 'clear' for p in r.cells} assert not clear.intersection(set().union(*(scene.cells(n.path) for n in beams))) point = min(scene.cells(beams[0].path)) assert [n['id'] for n in scene.inspect(point)['chain']][1] == '/house/room-0-0-0' assert 'expected-geometry' in {d.rule for d in validate(damaged(scene, point), True)} anchor = next(r.cells[0] for r in beams[0].contract.rules if r.kind == 'support') assert 'support' in {d.rule for d in validate(damaged(scene, anchor), True)} before = snapshot(scene) mount = scene.view.port('/house/room-0-0-0', 'ceiling') with pytest.raises(ContractError, match='ceiling-interface'): scene.place('bad-mount', CeilingTimbers(), frame=Frame(mount.frame.origin, (turn + 1) % 4), bindings=(Binding('/house/room-0-0-0', 'ceiling', 'connect'),)) assert snapshot(scene) == before def test_optional_planting_does_not_change_unrelated_building_branch(): a = lodge_scene(hillside_home(0), 8, garden=False) b = a.fork() # The border has no ground-edit authority. GardenCourt as a whole intentionally # replaces the building's street endpoint when it joins its path to the approach. b.place('border', BoundaryPlanting('/building', '/land')) b.finalize() cells = a.cells('/building', True) assert cells == b.cells('/building', True) keys = ('state', 'instance', 'chain', 'operation', 'nbt', 'shared') assert {p: {k: a.inspect(p)[k] for k in keys} for p in cells} == {p: {k: b.inspect(p)[k] for k in keys} for p in cells} # A new typed "landscapes" association is expected; principal structure is stable. assert encode({k: n for k, n in a.nodes.items() if k.startswith('/building')}) == encode({k: n for k, n in b.nodes.items() if k.startswith('/building')}) def test_boundary_and_facade_degenerate_domains_are_explicit(): with pytest.raises(ValueError, match='Facade'): FacadeDesign(height=3, sill=2).openings(11) assert not FacadeDesign().openings(11, exclusions=(Box((0, 0, -1), (10, 4, 0)),)) scene = lodge_scene(hillside_home(0), 12, garden=False) old = dict(scene.blocks) scene.place('empty-border', BoundaryPlanting('/building', '/land', density=0)) assert scene.blocks == old and not scene.cells('/empty-border', True) before = snapshot(scene) with pytest.raises(ContractError, match='input-domain'): scene.place('invalid-density', BoundaryPlanting('/building', '/land', density=1.1)) assert snapshot(scene) == before @pytest.mark.parametrize('width,height,sill', ((1, 2, 1), (1, 3, 1), (2, 2, 2))) def test_public_facade_dimensions_and_framed_boxes(width, height, sill): design = Blueprint((RoomSpec(0, 0, 0, 'library'),), bay=13, porch=False, facade_design=FacadeDesign(height=height, sill=sill, width=width)) scene = lodge_scene(design, 31, garden=False) boxes = [n for n in scene.nodes.values() if n.type == 'garden.window-box'] assert boxes and all(n.contract.decisions['framed'] for n in boxes) assert scene.nodes['/building/room-0-0-0'].contract.decisions['facade_projection'] == 2 front = next(p for p in scene.cells(boxes[0].path) if name_of(scene.view.state(p)) == 'spruce_trapdoor') assert 'expected-geometry' in {d.rule for d in validate(damaged(scene, front), True)} for n in scene.nodes.values(): if n.type == 'window.shuttered': assert sum(name_of(scene.view.state(p)) == 'glass' for p in scene.cells(n.path)) == width * height
test/test_building_quality.py
# Building-craft contracts, actual damage, transforms, rollback and structural reload evidence. from dataclasses import dataclass, replace import copy import json import pytest from hearth import Scene, Box, Frame, Binding, ContractError from hearth.kernel import Capability, Contract, Plan, validate from hearth.kernel.scene import Cell from hearth.environment import Terrain, constant from hearth.components.building import Building, Blueprint, RoomSpec from hearth.components.roofcraft import RoofDesign, Dormer, ProfileRoof from hearth.components.primitives import Volume from hearth.lodges import hillside_home, gabled_hall, high_house, lodge_scene from hearth.persistence import export_scene, load_scene, semantic_digest, encode from hearth.quality_assessment import principal_signature from hearth.blocks import state_of, name_of, parse def make_house(bay=11, rise=(1, 2), turn=0, porch_depth=4): frame = Frame((30, 0, -20), turn) domain = frame.box(Box((-8, -4, -18), (30, 64, 28))) s = Scene(17, domain=domain) s.place('land', Terrain(domain, constant(3))) design = Blueprint((RoomSpec(0, 0, 0, 'living'), RoomSpec(0, 0, 1, 'bedroom')), bay=bay, balcony=True, porch_depth=porch_depth, roof_design=RoofDesign(rise), chimney=True) s.place('house', Building(design, '/land'), frame=frame) return s.finalize(), design def damaged(scene, p, material=None): candidate = scene.fork() old = candidate.blocks.get(p) if old: candidate.reverse[old.owner].remove(p) del candidate.blocks[p] if material: candidate.blocks[p] = Cell(material, old.owner, old.operation, old.nbt) candidate.reverse[old.owner].add(p) return candidate def snapshot(scene): return semantic_digest(scene), copy.deepcopy(encode(scene.nodes)), copy.deepcopy(encode(scene.dependencies)), copy.deepcopy(encode(scene.relations)), copy.deepcopy(scene.reverse), copy.deepcopy(scene.port_uses), copy.deepcopy(encode(scene.operations)) @pytest.mark.parametrize('bay,rise,depth', [(9, (1,), 3), (11, (1, 2), 4), (13, (2,), 5)]) def test_profile_porch_and_bay_boundaries(bay, rise, depth): s, design = make_house(bay, rise, porch_depth=depth) assert not validate(s, True) assert s.view.contract('/house').decisions['rooms'] == [(r.x, r.z, r.level, r.purpose) for r in design.normalized()] assert any(n.type == 'roof.dormer' for n in s.nodes.values()) assert s.view.contract('/house/porch').decisions['balcony'] assert s.cells('/house/porch') @pytest.mark.parametrize('turn', range(4)) def test_rotated_dormer_ownership_and_complete_pair(turn, work): s, _ = make_house(turn=turn) for point in s.cells('/house/porch'): if name_of(s.blocks[point].state) != 'spruce_fence': continue _, properties = parse(s.blocks[point].state) for side, delta in {'north': (0, 0, -1), 'south': (0, 0, 1), 'east': (1, 0, 0), 'west': (-1, 0, 0)}.items(): neighbor = tuple(point[i] + delta[i] for i in range(3)) if properties[side] == 'true': assert s.view.state(neighbor) != 'minecraft:air' if name_of(s.view.state(neighbor)) == 'spruce_fence': assert properties[side] == 'true' windows = [n for n in s.nodes.values() if n.type == 'window.flush' and '/dormer-' in n.path] assert len(windows) >= 2 a, b = [min(s.cells(n.path)) for n in windows[:2]] assert s.inspect(a)['state'] == s.inspect(b)['state'] assert s.inspect(a)['instance'] != s.inspect(b)['instance'] query = s.inspect(a) assert [n['type'] for n in query['chain']][:4] == ['window.flush', 'wall.dormer-face', 'roof.dormer', 'roof.weather-cover'] assert query['chain'][-1]['id'] == '/house' assert any(kind == 'attached_to' for _, kind, _ in query['related']) path = work / 'crafted roof and balcony.litematic' export_scene(s, path) restored = load_scene(path) assert restored.inspect(a) == query assert encode(restored.nodes) == encode(s.nodes) assert restored.cells('/house', True) == s.cells('/house', True) assert {p: c.nbt for p, c in restored.blocks.items() if c.nbt} == {p: c.nbt for p, c in s.blocks.items() if c.nbt} def test_actual_roof_glass_guard_support_and_lighting_damage(): s, _ = make_house() roof = next(n for n in s.nodes.values() if n.type == 'roof.weather-cover') # A plain interior course outside the dormers, above every other solid cell. p = roof.frame.point((5, roof.contract.decisions['levels'][6], 1)) # The ridge above this column is also removed: no projected cap may remain. t = s for y in range(p[1], roof.contract.envelope.hi[1] + 1): t = damaged(t, (p[0], y, p[2])) assert 'roof-cover' in {d.rule for d in validate(t, True)} glass = next(min(s.cells(n.path)) for n in s.nodes.values() if n.type == 'window.flush') assert 'enclosure' in {d.rule for d in validate(damaged(s, glass), True)} porch = s.nodes['/house/porch'] railing = next(r.cells[0] for r in porch.contract.rules if r.kind == 'expected') assert 'expected-geometry' in {d.rule for d in validate(damaged(s, railing), True)} chimney = s.nodes['/house/chimney'] p = chimney.frame.point((0, 2, 0)) assert 'support' in {d.rule for d in validate(damaged(s, p), True)} room = '/house/room-0-0-0' t = s for p in s.cells(room, True): if name_of(s.blocks[p].state) == 'lantern': t = damaged(t, p) assert 'lighting' in {d.rule for d in validate(t, True)} def test_balcony_door_and_furniture_access_remain_usable(): s, _ = make_house() door = '/house/room-0-0-1/door-north' p = min(s.cells(door)) broken = damaged(s, p, state_of('stone')) assert {'door-pair', 'reachability'} <= {d.rule for d in validate(broken, True)} node = next(n for n in s.nodes.values() if n.type.startswith('furnishing.group.')) port = s.view.port(node.path, 'use') with pytest.raises(ContractError, match='clearance|reachability'): s.place('blocked-use', Volume(port.region, state_of('stone'))) assert '/blocked-use' not in s.nodes def test_misaligned_dormer_and_permission_overflow_rollback(): from hearth.components.roofcraft import RoofCover s = Scene(3, domain=Box((-3, -3, -3), (16, 30, 16))) s.place('land', Terrain(s.domain, constant(3))) s.place('cover', RoofCover(11, 11, 'deepslate_tile', RoofDesign(), populate=False), frame=Frame((0, 4, 0))) roof = s.nodes['/cover'] port = s.view.offers('/cover', 'roof-installation')[0] before = snapshot(s) with pytest.raises(ContractError, match='dormer-interface'): s.place('bad-frame', Dormer(), frame=Frame(port.frame.origin, (port.frame.turn + 1) % 4), bindings=(Binding(roof.path, port.key),)) assert snapshot(s) == before @dataclass class Spill: def capability(self): return Capability('probe.spill', ('dormer',)) def negotiate(self, c, params): return Contract(Box.enclosing(port.frame.inverse(q) for q in roof.contract.envelope.corners())) def realize(self, c, contract): plan = Plan() plan.block(port.frame.inverse(roof.frame.point((5, roof.contract.decisions['levels'][6], 1))), state_of('air')) return plan with pytest.raises(ContractError, match='write-authority'): s.place('overflow', Spill(), frame=port.frame, bindings=(Binding(roof.path, port.key),)) assert snapshot(s) == before # A separate facade program can discover a mount and install without private geometry. s.place('external-dormer', Dormer(), frame=port.frame, bindings=(Binding('/cover', port.key),)) s.finalize() window = '/external-dormer/face/window' point = min(s.cells(window)) chain = [n['id'] for n in s.inspect(point)['chain']] assert chain == [window, '/external-dormer/face', '/external-dormer', '/cover'] assert s.cells(window) <= s.cells('/cover', descendants=True) def test_regeneration_removes_old_dormer_cells_and_structure(): s, design = make_house() old = {p for p in s.nodes if '/dormer-' in p} assert old replacement = replace(design, roof_design=RoofDesign((1, 2), 0)) s.regenerate('/house', Building(replacement, '/land')) s.finalize() assert not old.intersection(s.nodes) assert all(c.owner not in old for c in s.blocks.values()) assert all(not {a, c}.intersection(old) for a, _, c in s.relations) assert all(p in s.blocks and s.blocks[p].owner == owner for owner, cells in s.reverse.items() for p in cells) def test_roof_policy_substitution_without_parent_change(): s, design = make_house() from hearth.components.roofs import Roof @dataclass(frozen=True) class IndependentPolicy: def heights(self, span): return (0, (span + 1) // 2) def component(self, width, depth, axis, material): return Roof(width, depth, axis, material) s.regenerate('/house', Building(replace(design, roof_design=IndependentPolicy()), '/land')) s.finalize() assert any(n.type == 'roof.gable' for n in s.nodes.values()) assert not any(n.type == 'roof.profile' for n in s.nodes.values()) assert s.nodes['/house'].contract.decisions['rooms'] == [(r.x, r.z, r.level, r.purpose) for r in design.normalized()] @pytest.mark.parametrize('client', (hillside_home, gabled_hall, high_house)) @pytest.mark.parametrize('seed', (0, 6)) def test_complete_new_compositions(client, seed): s = lodge_scene(client(seed), seed, seed) assert s.completed and not validate(s, True) assert len([n for n in s.nodes.values() if n.type == 'roof.dormer']) >= 1 assert len([n for n in s.nodes.values() if n.type == 'plant.conifer']) >= 3 def test_deterministic_architecture_and_unrelated_branch(): a, _ = make_house() b, _ = make_house() assert semantic_digest(a) == semantic_digest(b) signature = principal_signature(a) # A read-only addition outside the building changes neither blocks nor architectural decisions. a.place('marker', Volume(Box((50, 20, 4), (50, 20, 4)), state_of('stone'))) assert principal_signature(a) == signature assert a.cells('/house', True) == b.cells('/house', True) def test_heavy_shaft_on_piers_has_continuous_bounded_bearing(): from hearth.assessment import adaptation_expression field, water = adaptation_expression(0) s = lodge_scene(hillside_home(0), 0, 0, field, water, garden=False) course = s.nodes['/building/chimney-bearing'] assert course.contract.decisions['fill'] > 0 assert course.contract.decisions['span'] == 2 assert all(s.view.supports(p) for p in course.contract.rules[0].cells) p = course.contract.rules[0].cells[-1] assert 'support' in {d.rule for d in validate(damaged(s, p), True)} def test_bearing_rejects_missing_support_and_rolls_back(): from hearth.adapters.bearing import BearingCourse s = Scene() before = snapshot(s) with pytest.raises(ContractError, match='bearing-span'): s.place('floating', BearingCourse(3, 2)) assert snapshot(s) == before
test/test_roof_lantern.py
# Actual ridge-lightwell geometry, authority, deterministic fitting and identity tests. from dataclasses import replace import pytest from hearth import Scene, Box, Frame, Binding, ContractError from hearth.kernel import Capability, Contract, Plan, validate from hearth.blocks import AIR, name_of, state_of from hearth.components import Blueprint, RoomSpec, Building, RidgeLantern from hearth.components.roofcraft import RoofDesign, RoofCover from hearth.components.primitives import Volume from hearth.environment import Terrain, constant from hearth.lodges import lodge_scene from hearth.persistence import semantic_digest, export_scene, load_scene from hearth.quality_assessment import audit_pair, principal_signature from test.test_building_quality import damaged, snapshot def design(length=7, bay=11, axis='x', hips=(0, 0)): return Blueprint((RoomSpec(0, 0, 0, 'living'), RoomSpec(1, 0, 0, 'kitchen')), bay=bay, roof_axis=axis, attic_purpose='library', porch_bays=2, roof_design=RoofDesign(end_hips=hips, ridge_component=RidgeLantern(length), ridge_required=True)) def bare_host(seed=0, length=23): scene = Scene(seed, domain=Box((-5, -3, -5), (35, 50, 35))) scene.place('land', Terrain(scene.domain, constant(0))) policy = RoofDesign(ridge_component=RidgeLantern(7), ridge_required=True) scene.place('host', RoofCover(11, length, 'deepslate_tile', policy, populate=False), frame=Frame((0, 3, 0))) port = scene.view.port('/host', 'ridge') return scene, port @pytest.mark.parametrize('bay,length,axis,hips', ((9, 5, 'x', (0, 0)), (11, 7, 'x', (2, 2)), (13, 9, 'x', (3, 1)), (13, 5, 'z', (0, 2)))) def test_ridge_lightwell_keeps_actual_weather_enclosure_and_access(bay, length, axis, hips): scene = lodge_scene(design(length, bay, axis, hips), 4, 0, garden=False) assert not validate(scene, True) lanterns = [n for n in scene.nodes.values() if n.type == 'roof.ridge-lantern'] assert lanterns for node in lanterns: opening = Box(*node.contract.decisions['well']) offer = scene.view.offers(node.path, 'daylight')[0] assert offer.region == node.frame.box(opening) assert not offer.facts['player_access'] assert all(not scene.view.supports(node.frame.point(q)) for q in opening.cells()) assert len([p for p in scene.cells(node.path, True) if name_of(scene.view.state(p)) == 'glass']) == 6 * length + (6 if length == 5 else 0) assert all(node.contract.envelope.contains(p) for p in scene.cells(node.path, True)) assert any(n.type == 'room.loft.library' for n in scene.nodes.values()) @pytest.mark.parametrize('turn', range(4)) def test_lantern_rotation_windows_and_exact_reloaded_membership(turn, work): frame = Frame((35, 0, -20), turn) domain = frame.box(Box((-8, -3, -18), (38, 60, 28))) scene = Scene(7, domain=domain) scene.place('land', Terrain(domain, constant(2))) scene.place('building', Building(design(), '/land'), frame=frame) scene.finalize() lantern = next(n for n in scene.nodes.values() if n.type == 'roof.ridge-lantern') windows = [n for n in scene.nodes.values() if n.type == 'window.flush' and n.path.startswith(lantern.path)] assert len(windows) == 6 and len({n.path for n in windows}) == 6 for window in windows: glass = min(scene.cells(window.path)) chain = [n['id'] for n in scene.inspect(glass)['chain']] assert chain[:3] == [window.path, window.parent, lantern.path] assert chain[-1] == '/building' target = work / 'ridge windows.litematic' export_scene(scene, target) assert audit_pair(scene, target)['nodes'] == len(scene.nodes) restored = load_scene(target) assert restored.cells(lantern.path, True) == scene.cells(lantern.path, True) assert not validate(restored, True) def test_missing_bearing_open_cap_broken_glazing_and_blocked_well_are_detected(): scene = lodge_scene(design(), 1, 0, garden=False) node = next(n for n in scene.nodes.values() if n.type == 'roof.ridge-lantern') anchor = node.frame.point(node.contract.decisions['anchors'][0]) assert 'support' in {d.rule for d in validate(damaged(scene, anchor), True)} cap = node.frame.point(node.contract.decisions['cap'][len(node.contract.decisions['cap']) // 2]) assert 'enclosure' in {d.rule for d in validate(damaged(scene, cap), True)} glass = min(p for p in scene.cells(node.path, True) if name_of(scene.view.state(p)) == 'glass') assert 'enclosure' in {d.rule for d in validate(damaged(scene, glass), True)} # Corruption is deliberately outside the public generation API, as in the # existing negative tests. Block a real transmissive target with opaque rock. target = next(r.cells[1] for r in node.contract.rules if r.kind == 'daylight-path') assert 'daylight-path' in {d.rule for d in validate(damaged(scene, target, state_of('stone')), True)} def test_misaligned_or_incompatible_ridge_bindings_roll_back_all_indexes(): scene, port = bare_host() before = snapshot(scene) for frame, component in ((Frame(port.frame.origin, 1), RidgeLantern(7)), (port.frame, RidgeLantern(5))): with pytest.raises(ContractError, match='ridge-interface'): scene.place('bad', component, frame=frame, bindings=(Binding('/host', 'ridge'),)) assert snapshot(scene) == before def test_required_attachment_failure_optional_omission_and_permission_overflow(): scene = Scene(3, domain=Box((-5, -3, -5), (30, 50, 30))) scene.place('land', Terrain(scene.domain, constant(0))) policy = RoofDesign(end_hips=(3, 3), ridge_component=RidgeLantern(9), ridge_required=True) before = snapshot(scene) with pytest.raises(ContractError, match='ridge-fit'): scene.place('roof', RoofCover(9, 9, 'deepslate_tile', policy), frame=Frame((0, 3, 0))) assert snapshot(scene) == before scene.place('roof', RoofCover(9, 9, 'deepslate_tile', replace(policy, ridge_required=False)), frame=Frame((0, 3, 0))) assert scene.view.contract('/roof').decisions['omitted_optional_ridge'] scene, port = bare_host() before = snapshot(scene) outside = next(p for p in scene.cells('/host') if not port.region.contains(p)) class Overflow: def capability(self): return Capability('test.ridge-overflow', ('ridge-attachment',)) def negotiate(self, ctx, parameters): return Contract(Box((-5, -12, -10), (5, 8, 12))) def realize(self, ctx, contract): plan = Plan() plan.block(ctx.local(outside), AIR) return plan with pytest.raises(ContractError, match='write-authority|envelope'): scene.place('overflow', Overflow(), frame=port.frame, bindings=(Binding('/host', 'ridge'),)) assert snapshot(scene) == before def test_replace_remove_and_regenerate_restore_skin_without_stale_window_owners(): scene, port = bare_host() before = semantic_digest(scene) scene.place('lightwell', RidgeLantern(7), frame=port.frame, bindings=(Binding('/host', 'ridge'),)) current = scene.cells('/lightwell', True) windows = {n.path for n in scene.nodes.values() if n.path.startswith('/lightwell/')} replaced = set(scene.displaced['/lightwell']) assert replaced and not replaced.intersection(scene.cells('/host')) assert all(scene.view.owner(p) != '/host' for p in replaced) scene.remove('/lightwell') assert semantic_digest(scene) == before assert not windows.intersection(scene.nodes) assert not scene.cells('/lightwell', True) scene.place('lightwell', RidgeLantern(7), frame=port.frame, bindings=(Binding('/host', 'ridge'),)) # The host observed the mounting volume before installation, so removal # invalidates that conservative spatial input. Replay both affected nodes. assert scene.nodes['/host'].stale scene.regenerate('/host', dependents=('/lightwell',), replacements={'/lightwell': RidgeLantern(7, timber='spruce')}) assert current == scene.cells('/lightwell', True) assert all(p in scene.cells(scene.view.owner(p)) for p in current) assert not validate(scene, True) def test_scoped_fit_replay_independent_branch_and_failed_candidate_do_not_change_mount(): scene, port = bare_host(17) before = snapshot(scene) with pytest.raises(ContractError): scene.place('bad', RidgeLantern(5), frame=port.frame, bindings=(Binding('/host', 'ridge'),)) assert snapshot(scene) == before scene.place('extra', Volume(Box((28, 1, 28), (28, 1, 28)), state_of('stone'))) scene.place('lantern', RidgeLantern(7), frame=port.frame, bindings=(Binding('/host', 'ridge'),)) other, expected = bare_host(17) other.place('lantern', RidgeLantern(7), frame=expected.frame, bindings=(Binding('/host', 'ridge'),)) assert port == expected assert scene.cells('/lantern', True) == other.cells('/lantern', True) assert all(scene.inspect(p) == other.inspect(p) for p in scene.cells('/lantern', True)) def test_lightwell_changes_principal_roof_form_separately_from_contact(): policy = design() first = lodge_scene(policy, 4, 0, garden=False) second = lodge_scene(replace(policy, roof_design=replace(policy.roof_design, ridge_component=None, ridge_required=False)), 4, 0, garden=False) assert principal_signature(first)[0] != principal_signature(second)[0] assert first.view.contract('/building').decisions['rooms'] == second.view.contract('/building').decisions['rooms'] def test_compatible_lower_dormers_fit_beside_high_lantern_overhang(): scene, _ = bare_host(0) policy = RoofDesign(ridge_component=RidgeLantern(7), ridge_required=True) scene.regenerate('/host', RoofCover(11, 23, 'deepslate_tile', policy)) assert sum(n.type == 'roof.dormer' for n in scene.nodes.values()) == 4 assert sum(n.type == 'roof.ridge-lantern' for n in scene.nodes.values()) == 1 assert not validate(scene, True)
test/test_nested_restoration.py
# A parent cut refilled by descendants must undo back to the original host cell. from dataclasses import dataclass from hearth import Scene, Box, Frame, Binding from hearth.kernel import Capability, Contract, Port, Grant, Plan, Child from hearth.blocks import AIR, state_of from hearth.components.primitives import Volume from hearth.persistence import semantic_digest, export_scene, load_scene CELL = Box((0, 0, 0), (0, 0, 0)) @dataclass(frozen=True) class Host: def capability(self): return Capability('test.host', ('host',)) def negotiate(self, ctx, parameters): return Contract(CELL, (Port('socket', 'socket', Frame(), CELL, 1, 'edit'),), (Grant('edit', CELL, ('install',), ('cut',), 1),)) def realize(self, ctx, contract): plan = Plan() plan.fill(CELL, state_of('stone')) return plan @dataclass(frozen=True) class CutAndRefill: def capability(self): return Capability('test.cut-and-refill', ('cut', 'composite')) def negotiate(self, ctx, parameters): return Contract(CELL) def realize(self, ctx, contract): plan = Plan(children=[Child('refill', Volume(CELL, state_of('glass')))]) plan.block((0, 0, 0), AIR, 'cut') return plan def test_nested_cut_refill_undo_is_synchronized_before_and_after_reload(work): scene = Scene(0, domain=CELL.expand(3)) scene.place('host', Host()) before = semantic_digest(scene) scene.place('replacement', CutAndRefill(), bindings=(Binding('/host', 'socket'),)) assert scene.view.owner((0, 0, 0)) == '/replacement/refill' path = work / 'nested.litematic' export_scene(scene.finalize(), path) restored = load_scene(path) for candidate in (scene, restored): candidate.remove('/replacement') assert semantic_digest(candidate) == before assert candidate.cells('/host') == {(0, 0, 0)} assert candidate.inspect((0, 0, 0))['instance'] == '/host' assert not any(p.startswith('/replacement') for p in candidate.nodes) assert not candidate.cells('/replacement', True)