屋顶换了形,房间添了壁炉与餐桌:第六轮自动建房


继续发送 continue improve it。模型增加削斜屋顶、壁炉和餐桌,用公开规则安排室内。这里比较第五轮与第六轮,解释测试和未解决的问题,也能真正运行 Python 生成新旧建筑。

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

312 / 312最终自动测试通过
185 / 196实际试建成功,另 11 次拒绝
47 / 4848 个指定房屋输入中的主结构数
30最终外观与内部渲染图

01 · 屋顶有了新形状,房间也更像能住的地方

这是一套用 Python 自动搭 Minecraft 建筑的工具,叫 Hearth。目标是让用户用短代码安排房间和部件,由共用的库负责摆方块、检查支撑和通路,并记住“这块玻璃属于哪扇窗、哪栋房子”。它应当是一套可以继续扩充的建筑积木,而不只是几种固定房型的选择菜单。

第六轮继续使用原来的会话,新增消息只有 continue improve it。 这次模型主要改了单栋建筑:屋顶两端可以削成斜面,房间可以按可用空间摆壁炉、长餐桌和地毯,树木的摆放也更合理。第五轮已经做出的阁楼、楼梯和宽门廊继续保留。

最有价值的改进是:高层代码能说“用这种屋顶、用这套室内布置规则”,而不必自己算每一张桌子和每一块屋顶的位置。两种规则都能通过公开接口换掉,部件归属仍由底层自动记录。

它还没有达到八张 lodge 参考图的精致程度。 房间仍沿规整网格排列,木梁带偏重,大块屋面偏空,景观也比较简单。这一轮确实补了可组合的功能,但审美目标仍未完成。

要分清的事情 最终记录 这说明什么
自动测试 312 项全部通过 包括正常建造与故意破坏后的检查;报告另外独立重跑
正常范围内的试建 180/180 建成 指定输入都通过,不代表任意参数、任意随机编号都能通过
困难地形试建 5/16 建成,11 次拒绝 那 11 次地面高差为 6–19 格,超过现有 5 格上限
上面两类试建合计 196 次,185 次建成 与 312 项自动测试是不同统计
报告额外发现/复查问题 村落和宽门廊住宅仍有失败 分别是道路通行空间被挡、屋顶与窗板冲突;不在上述最终输入集合内

02 · 第五轮到第六轮,具体改了什么

上一轮重点是“让阁楼能住、楼梯能上去”。这一轮重点是“让屋顶轮廓和房间布置更丰富”。下表把功能、数量和没解决的问题分开列出。

方面 第五轮 第六轮 对使用者的意义
库版本 1.5.0 1.6.0 同一会话继续开发
屋顶两端 主要是完整三角山墙 两端可分别削斜 0–3 格,保留足够高度与屋脊 同一房间布局也能换轮廓;非法值直接报错,不偷偷改小
屋面几何 以横向坡面为主 新增统一屋面描述,提供高度、上坡方向与屋脊区间 屋面、山墙、老虎窗依同一几何规则配合
室内布置 基础家具组与可用阁楼 新增可替换的室内布置规则,测量支撑、通道和可摆位置 用户能换一整套布置方式,无需操作底层方块表
生活部件 原有床、工作区、书房等 新增带实际点燃篝火的壁炉、长餐桌和座椅、地毯 家具有支撑和操作空间要求,不只是装饰标签
家具数量 原来的固定布置规则 最少数量可设 2–5,最多可设 2–6;餐桌长 2–4 格 强制用途与数量不能丢;可选摆设放不下会留下记录
树与低矮花坛 树的空位检查过于宽泛 树干与树冠分别声明所需空间 树冠下可保留不冲突的低矮花坛,不靠减少树数过关
窗与相邻屋顶 新屋顶形状尚未加入 削斜山墙使用不凸出的玻璃,老虎窗按实际占地检查 避免窗板撞邻屋顶,也避免无谓取消能放下的老虎窗
屋脊装饰 某些栅栏装饰与半砖底座之间有半格空隙 改为完整木块底座,并检查实际方块 修的是共享屋顶部件,不是给某张图手工补块
照明与属性读取 篝火状态未正确建模;属性字典可能污染缓存 只把明确点燃的篝火算作光源;返回独立属性字典 熄火后不能继续冒充照明,外部修改字典不会改变原状态含义
自动测试 266 项 312 项:旧 266 项原文不变,新增 46 项 不是删旧测试换取全绿
正常试建 / 困难试建 156/156;5/16 180/180;5/16 增加 24 个新住宅输入,困难地形能力没提高
指定房屋程序的主要结构 40 个输入中 36 种 48 个输入中 47 种 本轮统计方法没变,但输入集合扩大,不能当作同样本增长率
相同的 40 个房屋输入 36 种主要结构 39 种 输入编号与统计方法相同,更适合直接比较
相同的 156 个正常输入 44 种主要结构 47 种 新增的 24 个输入不计入这行
全部正常输入的主要结构 / 接地记录 44 / 128 55 / 152 排除颜色和小摆设扰动;仍然只是有限采样
保存后完整核对的文件对 31 对 38 对 每对含建筑文件与部件关系记录
最终渲染图 30 张 30 张,新一轮重新渲染 5 个建筑各有正面、背面、侧面、室内、阁楼和楼梯切面
本轮会话与收尾时间 70.50 分钟 54.00 分钟 工作内容不同,不等于生成器提速
模型请求 / 输出 Token 85 / 107,176 82 / 79,474 输出包含推理;更少输出不自动代表更好质量
默认五栋村落 127,985 方块 / 1,031 部件 128,174 / 1,034 同为编号 0,新共享部件也进入旧客户端
编号 1 的三栋村落 91,199 方块 / 680 部件 91,330 / 679 更多方块不一定意味着更多部件
村落编号 314 路灯占用道路通行空间 仍未修复 检查器能抓到问题,但用户仍拿不到建筑

同一个“三层高屋”编号 1、地形编号 1,前后两轮的外观与阁楼如下。镜头仍取原实验图,不用新的漂亮样本替换旧编号。

统计第五轮第六轮
Python 文件数9298
Python 行数(含空行注释)91099717
原文件变化基线13 修改 / 0 删除
新增 Python 文件—6

“架构没重写”不等于“所有底层文件都没动”。 部件权限、事务、归属、绑定和重新生成机制没有改变;hearth/kernel/validation.py 的照明部分改为调用新的光源状态查询。hearth/blocks.py 修了属性缓存;这些是真实的底层服务变化。保存格式、随机数服务、地形模块和第二轮扩展代码保持不变。结构多样性的统计方法本轮也没改。

逐文件变化
变化文件
新增examples/building_craft.py
新增examples/hearth_house.py
新增hearth/components/hospitality.py
新增hearth/components/roofshape.py
新增hearth/components/roomlayout.py
新增test/test_building_craft.py
修改examples/roof_home.py
修改hearth/__init__.py
修改hearth/blocks.py
修改hearth/components/__init__.py
修改hearth/components/building.py
修改hearth/components/domestic.py
修改hearth/components/interior.py
修改hearth/components/landscape.py
修改hearth/components/primitives.py
修改hearth/components/roofcraft.py
修改hearth/kernel/validation.py
修改hearth/lodges.py
修改hearth/programs.py

接口变化原记录 · 照明与缓存修复解释 · 源码逐文件摘要对比。

03 · 自己动手生成建筑

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

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

下载本轮默认五栋房屋

已知问题:村落编号 314 会因路灯挡路而拒绝;宽门廊住宅编号 341、地形 0 会有屋顶与窗板冲突。两者在上一轮和本轮都能复现。页面保留报错,不自动换编号。详情见网页实测记录。

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

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

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

轮换程序的完整 Python 代码
# Report sampler of public examples; library users can compose other programs. 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') 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() print('Explored program: ' + program)

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

本轮阁楼住宅预览

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

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

这块方块属于哪里?

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

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

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

05 · 这些改动处于哪一层

可以把程序想成四层:最上面说“要什么房子”,往下依次是“怎么拼房子”“零件怎样适应空间”,最底层负责实际写入、权限、归属与检查。本轮主要补中间两层,并修了少量共享服务。

层级 用大白话说 本轮例子
高层用户代码 选房间用途、相邻关系、屋顶和家具规则 examples/hearth_house.py 用随机数选择上层偏在哪边、屋顶轴向、两端削斜、阁楼用途和餐桌长度
建筑/房间组合 把房间、楼梯、屋顶与内饰组装起来 Blueprint.interior_design 把室内规则传给房间;房间调用公开 component(...) 接口
具体部件与几何 测量空间,产生具体形状,声明自己的要求 壁炉、餐桌、地毯、屋面形状、树干/树冠空位、山墙玻璃
共用底层 决定能不能写、失败时撤回、记住所有关系 原有事务和归属机制继续工作;照明检查读取点燃状态,属性解析返回独立字典

这次“可以替换家具规则”不是一句口号:新测试提供了另一份独立规则,让它返回旧家具组合,再重新生成房子,检查旧部件的归属是否清理、是否仍合法、是否与直接生成相同。另一个测试确认换家具不改变主要建筑结构的统计结果。

但它还不是任意零件自由组合的全能系统。 室内规则仍要遵守局部坐标、操作空间和楼梯约定。想增加完全不同的家具词汇,当前通常要提供另一套公开规则,而不是向一个现成注册表插入任意家具。屋顶交接也仍用较保守的处理,并没有通用的任意曲面求交系统。

下面是网页“自己调整房间、屋顶和阳台”的实际高层代码。控件只给这些变量赋值,库承担具体建造和验收。

from hearth.components import InteriorDesign from hearth.components.building import Blueprint, RoomSpec from hearth.components.facades import FacadeDesign from hearth.components.roofcraft import RoofDesign from hearth.lodges import lodge_scene rooms = [RoomSpec(0, 0, level, purpose) for level, purpose in enumerate(('living', 'library', 'bedroom')[:FLOORS])] if WING: rooms.append(RoomSpec(1, 0, 0, 'kitchen')) plan = Blueprint(tuple(rooms), bay=BAY, porch=True, roof_design=RoofDesign(tuple(int(v) for v in RISE.split(',')), DORMER_SPACING, end_hips=(HIP_FRONT, HIP_REAR)), porch_depth=PORCH_DEPTH, balcony=BALCONY, chimney=CHIMNEY, attic_purpose=ATTIC_PURPOSE or None, interior_design=InteriorDesign(table_length=TABLE_LENGTH) if FITTED else None, facade_design=FacadeDesign(width=WINDOW_WIDTH, height=WINDOW_HEIGHT, planters=WINDOW_BOXES), rail_material='dark_oak' if CONTRAST_RAILS else 'spruce') scene = lodge_scene(plan, seed=SEED, environment_seed=int(ENV_SEED), garden=GARDEN)

06 · 312 项测试到底测什么,错误出在哪一层

最终测试是 312 项通过,没有失败。 其中 266 项是以前的测试,源码没有被修改;新增文件有 13 个测试函数,展开不同尺寸、方向等参数后是 46 项。这里的“项”不是 46 栋房子。

很多测试会故意拆屋顶、熄火、堵通道或输入不合法数量。程序正确拒绝这些故意破坏的情况,测试才算通过。 这与模型真的造出坏房子、或困难地形建不起来,是三种不同的事。

新增检查 项数 实际在测什么 所在层级
削斜屋顶的尺寸与方向 12 3 种房间宽度 × 2 个屋顶方向 × 2 种两端组合;有实际屋面遮盖、围合与可达阁楼 屋顶部件与建筑组合
整栋旋转、查询与保存 4 四个旋转方向下,壁炉真实发光,选中火源能追到整栋;保存后关系和物品数据一致 组合与底层保存的集成
六种房间用途 6 客厅、卧室、书房、厨房、工坊、储物间都有对应家具;堵操作空间必须拒绝并撤回 房间布置与通路检查
壁炉被破坏 1 熄火后不能当光源;拆壁炉砌体或地面支撑应被检查出来;修改返回的属性字典不能污染缓存 具体部件、方块服务与照明检查
餐桌碰撞和整体移除 1 放入冲突方块必须撤回;删除桌椅组件后不能残留它的方块归属 家具部件与事务/归属
拆屋面与结构统计 1 改屋顶端部确实改变主要结构;拆掉遮盖必须报错 屋面验证与统计
不合法屋顶参数 5 负数、过大值、错误长度、布尔值及高度不足必须拒绝,不能偷偷截断 部件接口
替换室内规则并重建 1 换成独立规则后旧家具和归属被清理,与直接生成一致 公开接口与重新生成
塞不下强制数量 1 明确要求太多家具时拒绝,现场与失败前一致 室内部件与事务
紧凑花园 3 三种房间尺寸下仍有至少 3 棵树、4 个花坛,且全部合法 绿化组合与树的空间接口
新高层住宅程序 8 编号 0–7 的房间布局必须保持原计划,含壁炉,满足家具数量和验收 高层客户端的集成测试
换家具不换建筑结构 1 家具换了,方块不同,但主要建筑结构统计相同 策略替换与统计
屋脊装饰的实心底座 2 两种屋顶都要有完整底座;替换成底半砖必须报错 具体屋顶部件
合计 46 加上 266 项原测试 = 312 并非全是底层库的单元测试

因此,多数新增检查围绕库的接口约定与部件行为,但不是完全没有测试用户代码:其中 8 项直接调用新高层住宅程序;后面的 196 次完整试建还覆盖多个客户端与地形。它们仍不可能覆盖以后所有人写的代码。

新增测试原文 · 模型自己的完整测试日志 · 报告独立重跑日志。

展开报告独立重跑输出
........................................................................ [ 23%] ........................................................................ [ 46%] ........................................................................ [ 69%] ........................................................................ [ 92%] ........................ [100%] 312 passed in 366.67s (0:06:06)

开发中那些“没通过”到底是什么

现象 原因与层级 最终怎么处理
新住宅首次 24 次只成功 13 次:6 个几何缺陷、5 个候选用尽 削斜山墙上凸出的窗板撞到后来放的邻屋顶;候选用尽包含接地和几何原因。属于部件/组合问题 改成与墙齐平的玻璃;原 24 个输入最终 24/24 通过,没有换随机编号
能放的老虎窗也被取消 排除了太大一片屋顶区域,属于屋顶部件的适配规则 按老虎窗实际投影占地检查
小花园凑不够树 把树干和树冠所需空间混在一起,属于绿化接口与组合 分开描述树干和树冠的空位,不取消原树数要求
新壁炉有火却不算光源 共用光源模型没有正确识别篝火 按实际点燃状态计算;熄火的负例必须被拒绝
改一个属性字典影响原方块判断 解析服务把内部缓存字典直接给了调用方,是底层服务 bug 返回独立字典,保留缓存但不共享可修改对象
屋脊装饰看起来悬空 栅栏底下是底半砖,存在半格空隙,属于具体屋顶部件 实心木底座与实际方块检查,最后重跑完整试建和渲染
个别新测试自身报错 标识符拼错、重复路径断言过严,属于测试代码 修新测试,没有改旧的 266 项
困难地形最后仍拒绝 11 次 输入高差超出当前策略上限,属于公开支持范围 保留失败,不冒充普遍不可建,也不自动换输入
村落 314 最后仍失败 道路与路灯的高层组合规则有遗漏 未修复,报告单独披露;不是用户那行调用写错,也不是浏览器的问题

07 · 一共试建了哪些建筑,数字怎么数

最终统计只采用 building-craft/release 的五组记录,不把开发阶段或修屋脊前的数据重复累加。输入先固定地形,再放建筑;失败记录也保留。

试建内容 建成 / 输入 可用接地候选 / 尝试 说明
原房屋与原独立地形 88/88 132/176 24 个房屋编号 + 64 个独立配对
保留的阁楼和宽门廊 32/32 45/64 8 个住宅、16 个地形配对、8 个宽门廊组合
保留的庭院住宅 20/20 35/40 8 个住宅 + 12 个地形配对
以前额外的组合地形 16/16 16/32 现在是已知回归输入,不能再叫新盲测
新壁炉住宅 24/24 38/48 8 个住宅 + 8 地形 × 2 个建筑编号
正常范围内合计 180/180 266/360 94 个候选被拒绝,不等于 94 个输入失败
困难场地 5/16 6/32 11 个输入高差超限
全部最终输入 185/196 272/392 没有额外重抽输入

“两个候选”是同一输入下比较的两种有限接地方案。只要其中一个符合要求,那次输入就能建成;两种都拒绝时保留原因。这不是不断换种子直到拿到好看的房子。

按输入数统计建成或拒绝,不把接地候选次数混进来。
六个指定房屋程序各运行编号 0–7,共观察到 47 种主要结构。不是整个库的种类总数。

主要结构统计使用实际房间、楼层、屋顶几何和连接,排除名称、整体平移旋转、家具、配色、植物和接地变化。六组分别观察到 7、8、8、8、8、8 种结构。第五轮是 40 个输入中的 36 种,本轮是 48 个中的 47 种;方法相同,但多了一组新客户端,不能直接拿比例宣称任意分布都变好了。报告另外对齐上一轮 172 个输入的建筑与地形编号,确认相同 40 个指定房屋输入是 36 → 39 种,相同 156 个正常输入是 44 → 47 种。相同输入逐项对比。

新住宅的 8 个编号有 8 种家具布置记录,每栋共有 29–46 个可使用家具单元,各有 2 个壁炉;餐桌长度 2、3、4 都出现过。“29–46”数的是整栋普通房间和阁楼的总和,不是一个房间塞那么多张桌子。

180 个正常输入的填土量为每次 0–257 格,实际挖土量都是 0。244 次阶梯接地、128 次柱脚接地是组件使用次数,不是 372 个输入。正常试建耗时合计 592.807 秒,困难输入 10.276 秒;计时包含选定样本的导出核对,不含预先生成地形、渲染和 pytest,也不能与上一轮直接当作无干扰性能基准。

采样规则 · 完整汇总。

196 次最终试建逐条记录
试建编号建造结果建筑编号地形编号方块数部件数原始记录
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-craft/release/core/home-0.litematic", "audit": { "queries": 281, "inventories": 54, "nodes": 310, "digest": "3f3c12036c060cab739a7d19d3a0a04ce42a15abadbe6d6ae673ab04585d3ad3" }, "seconds": 4.3293 }
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-craft/release/core/home-1.litematic", "audit": { "queries": 253, "inventories": 54, "nodes": 286, "digest": "2b9d024497f0da7feec8aa6f74fab89d15ff6a02e0fbc1245b4929b62cebbcc7" }, "seconds": 4.0994 }
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": 2.8649 }
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.2797 }
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": 2.9041 }
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": 2.8288 }
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-craft/release/core/home-6.litematic", "audit": { "queries": 209, "inventories": 28, "nodes": 242, "digest": "38482559560cc1101fe27a4126c2ecc73c55860babcd35d4b0f500287d949885" }, "seconds": 2.8501 }
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.0259 }
hall-0建造成功0014400318
查看数据
{ "label": "hall-0", "inputs": { "client": "hall", "structure_seed": 0, "environment_seed": 0 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "525b82949f8e4a4609028783983d62b0670befef8a56adbae8ac8b68eacfc2f8", "principal_signature": "1320ddc63dd9dc2c67f9337b4ff81b83c78ec595bc30072483a3279ceeaa38e9", "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 ] }, "79aec7d2ec02f9789cf07e765aba914d6595466b9172cebb21e598a625bcc898" ], [ "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": 14400, "nodes": 318, "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-craft/release/core/hall-0.litematic", "audit": { "queries": 290, "inventories": 45, "nodes": 318, "digest": "525b82949f8e4a4609028783983d62b0670befef8a56adbae8ac8b68eacfc2f8" }, "seconds": 4.0546 }
hall-1建造成功1112319270
查看数据
{ "label": "hall-1", "inputs": { "client": "hall", "structure_seed": 1, "environment_seed": 1 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "22787964397a13e7c2e2054caafa8293475cbf72ce02b8adc9a7d1609c8186f8", "principal_signature": "b3abcbb82e5bed930237756b0823e636cd64238e02da79aac834e8bcecae1686", "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", [ 13, 8, 17 ], { "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, 9 ], { "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 ] }, "cb633d89faf9adeae9b0a97f3d508442b324391a27d43b10ab716181846db4ae" ], [ "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": 12319, "nodes": 270, "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": [ [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-craft/release/core/hall-1.litematic", "audit": { "queries": 240, "inventories": 28, "nodes": 270, "digest": "22787964397a13e7c2e2054caafa8293475cbf72ce02b8adc9a7d1609c8186f8" }, "seconds": 3.0114 }
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": 3.2682 }
hall-3建造成功3315801301
查看数据
{ "label": "hall-3", "inputs": { "client": "hall", "structure_seed": 3, "environment_seed": 3 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "60789d3d3a07a119dfe18dca12bc97e62b2494062143877dba156959914696d2", "principal_signature": "30122b0bd78717f5a9041519ccee916d366193d2b05bfbe721a4705b8342b6fe", "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 ] }, "79f4a3ff70b1d43485df24f7be70ad59b88769ecf41a0b2ec26e5e3bb4ca1a52" ], [ "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": 15801, "nodes": 301, "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.9033 }
hall-4建造成功4412305286
查看数据
{ "label": "hall-4", "inputs": { "client": "hall", "structure_seed": 4, "environment_seed": 4 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "8d5ffe65bd3bd475cbff04298f0b6af11fac046272c69f564a9a5d2aca0257f9", "principal_signature": "e180ba72e53a1e5f5cd60df2548386d987ff0a1dbf620af664a3ec0fe1433520", "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, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 9 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 8, 8, 9 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 13 ], { "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 ] }, "7e8c114315cb4dd9e7349108d0e8fc1718c5e980621211b1a914c8d537046565" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 1, 2 ] }, "45fb0eda308fd130530f9009513c3c60b151827b6d3280af5d01dd11a0cb78ee" ], [ "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": 12305, "nodes": 286, "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": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.8441 }
hall-5建造成功5513080300
查看数据
{ "label": "hall-5", "inputs": { "client": "hall", "structure_seed": 5, "environment_seed": 5 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "27a97174efb51cda74d2d70db818b9eb6b40d69d10e4b413813f8e617ebd344f", "principal_signature": "60bf6bad2f45898a1d196c57d4e9822cd83b23825bd9f67e8d555d5ed66c6831", "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, 13 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 0, 8, 6 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 17, 8, 9 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 8, 8, 9 ], { "tops": [ 4, 4, 4 ] }, "dd9c85cd0d20647f0444db8c76bad9c20e46e7a2f6ca3657bab7a188021b66fc" ], [ "roof.dormer", [ 9, 8, 13 ], { "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 ] }, "e5598ce6263f4f9bd742bdb83bda2f984992d2b481ddc0fd494bd2098c90e30c" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 1, 2 ] }, "b8f54df4e6dc092b6532cfce65083e2b1be88d9c151a3b57f8cda924d89afbcd" ], [ "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": 13080, "nodes": 300, "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": [ [ "right", 4, "protected circulation" ] ] }, { "component": "/building/roof-1/weather/cover", "dormers": [ [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.4282 }
hall-6建造成功6613388316
查看数据
{ "label": "hall-6", "inputs": { "client": "hall", "structure_seed": 6, "environment_seed": 6 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "84c1878d6006ee8e45f7335858ca7920a3418917b69fd3d6db12336a641856f0", "principal_signature": "8e267ea8272c6f5b0aba822d0d9b04265c9ff4113ece28905793075677614f99", "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", [ 17, 8, 12 ], { "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 ] }, "13913a34cf27563a0e719f3d0caecd0e06c0c0b9c177a0e6e41bd277d9b7e83b" ], [ "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": 13388, "nodes": 316, "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, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-craft/release/core/hall-6.litematic", "audit": { "queries": 278, "inventories": 43, "nodes": 316, "digest": "84c1878d6006ee8e45f7335858ca7920a3418917b69fd3d6db12336a641856f0" }, "seconds": 3.7994 }
hall-7建造成功7716133342
查看数据
{ "label": "hall-7", "inputs": { "client": "hall", "structure_seed": 7, "environment_seed": 7 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "aba78a26ae0fd826ebde7f336e5b806ad63ae5d34f4a8b422bd5d1957046dc7d", "principal_signature": "456f563f82543eb6658cf311625a5f203f0730eabc9660db63d11cfdff97b980", "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 ] }, "fcd541bb27d60643b2cf4cd173cc3f1b29872d65ca797892f55106bac3310e21" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "69d509c46320c52bd730a6d3011823a3a3f1df4422ffc0db57839472a5de1c2e" ], [ "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": 16133, "nodes": 342, "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.0181 }
high-0建造成功0010029266
查看数据
{ "label": "high-0", "inputs": { "client": "high", "structure_seed": 0, "environment_seed": 0 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "76c8cfb33863fe2ffa736f9ad0704ac7e15478f485219b270c53769053b859d9", "principal_signature": "dda656b6e0437511abf79c2344e10db97c8e3b97e0ec8d80c4294a1d2cb347db", "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 ] }, "0130080411befef5eaf5704d0e73486322f060592fd96e18298374ce3309e720" ], [ "roof.profile", [ 9, 7, 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.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": 10029, "nodes": 266, "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": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-craft/release/core/high-0.litematic", "audit": { "queries": 238, "inventories": 22, "nodes": 266, "digest": "76c8cfb33863fe2ffa736f9ad0704ac7e15478f485219b270c53769053b859d9" }, "seconds": 3.0141 }
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-craft/release/core/high-1.litematic", "audit": { "queries": 283, "inventories": 49, "nodes": 319, "digest": "b2e4f20409a685fe022ecc634b8e6000599032ff732b94685316c52aa9af6e75" }, "seconds": 4.3577 }
high-2建造成功2212647300
查看数据
{ "label": "high-2", "inputs": { "client": "high", "structure_seed": 2, "environment_seed": 2 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "6fd668711d8227bd3c96c24edc264c3aeed8f5e1443e3ec44413deba88189c2b", "principal_signature": "b833feb7ea84bedfc90e6642727437688d75cc7e402db18353acd9a71b1b2dfe", "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.profile", [ 0, 19, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "775aa83e148e9a222b3ed5e6a3741b605f17eb61a514ef6cf3d1dced041d6c17" ], [ "roof.profile", [ 11, 7, 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.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": 12647, "nodes": 300, "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": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.6103 }
high-3建造成功3310809251
查看数据
{ "label": "high-3", "inputs": { "client": "high", "structure_seed": 3, "environment_seed": 3 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "ee871d7dbddbc1d077c1efca20463a394b4e0b4a121390d6918ffbafd1276cb2", "principal_signature": "f16c246d44d20cfa8bf089142abe4e041e14679920cf452967e09f6a21dc771d", "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 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "3d571d6e7cb3174a4bd63e6e596a9a19fff47a9a82afcea92f8fe7eda30261dd" ], [ "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": 10809, "nodes": 251, "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": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.7137 }
high-4建造成功449996255
查看数据
{ "label": "high-4", "inputs": { "client": "high", "structure_seed": 4, "environment_seed": 4 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "1ced93afc25a2646debb60f520f4315018b398909cae8189f2a9eaf78bd10204", "principal_signature": "faefeee9d255fd5bfb4209742e297845f0f73a099c1e32c2fb4c924f41adfda7", "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 ] }, "519f95ca2326c9e31b6651e43b0c0d0eea548b27d5d764128a60209a9837a740" ], [ "roof.profile", [ 9, 7, 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.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": 9996, "nodes": 255, "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": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.9594 }
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.7443 }
high-6建造成功6612753275
查看数据
{ "label": "high-6", "inputs": { "client": "high", "structure_seed": 6, "environment_seed": 6 }, "attempts": 2, "accepted_candidates": 2, "retries": 0, "status": "validated", "digest": "6e99a3d8e844436d93eab339aa0c9cf287b53a4430d6eab205fd0f8ae2d4b68b", "principal_signature": "93221a536f1bdc7abc04de870c405e2cca657b925776177d81cbaa900eaca0d3", "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 ] }, "14d6ff0b37f6e45a10ac4485b4fc85dba306fe38d1b93092e5d61eec78c8b2ee" ], [ "roof.profile", [ 11, 7, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "05b229b99ddaf2ee979454422a781325920eaaaf5ebc5740a500b49f6cbf02bc" ], [ "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": 12753, "nodes": 275, "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-craft/release/core/high-6.litematic", "audit": { "queries": 240, "inventories": 38, "nodes": 275, "digest": "6e99a3d8e844436d93eab339aa0c9cf287b53a4430d6eab205fd0f8ae2d4b68b" }, "seconds": 4.5291 }
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.2177 }
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-craft/release/core/adaptation-00.litematic", "audit": { "queries": 133, "inventories": 54, "nodes": 151, "digest": "029434456923b7c4eb5ca8255ef6a6027d6046ba050b33d9ca77e18791e3da86" }, "seconds": 4.1074 }
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.9918 }
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": 2.0174 }
adaptation-03建造成功3033830151
查看数据
{ "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": "322663a10c8888195b48ee5623b5b1aa1cdbad6f0f3667198a0aedc0d6b6bdc0", "principal_signature": "f16c246d44d20cfa8bf089142abe4e041e14679920cf452967e09f6a21dc771d", "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 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "3d571d6e7cb3174a4bd63e6e596a9a19fff47a9a82afcea92f8fe7eda30261dd" ], [ "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": 33830, "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, 2.25 ] ], "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.1029 }
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.819 }
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": 3.0199 }
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": 2.9659 }
adaptation-07建造成功3129567151
查看数据
{ "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": "9356985ecb928686ead20b93b8f5ecdcd6c70d872425f77a22278172fd4026b6", "principal_signature": "f16c246d44d20cfa8bf089142abe4e041e14679920cf452967e09f6a21dc771d", "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 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "3d571d6e7cb3174a4bd63e6e596a9a19fff47a9a82afcea92f8fe7eda30261dd" ], [ "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": 29567, "nodes": 151, "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": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.96 }
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-craft/release/core/adaptation-08.litematic", "audit": { "queries": 133, "inventories": 54, "nodes": 151, "digest": "6a5e82a8b693342eb7a7a1868d1ee0feeb3b3568eddb0f629be5435e66fbc47f" }, "seconds": 6.2916 }
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": 2.8313 }
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": 2.8951 }
adaptation-11建造成功3236979151
查看数据
{ "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": "412ce62710a18a51fdfa55a538d35628d53764f292eda8f8c88b7ba07323097c", "principal_signature": "f16c246d44d20cfa8bf089142abe4e041e14679920cf452967e09f6a21dc771d", "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 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "3d571d6e7cb3174a4bd63e6e596a9a19fff47a9a82afcea92f8fe7eda30261dd" ], [ "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": 36979, "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, 2.79 ] ], "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.6052 }
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": 4.281 }
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": 3.5919 }
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": 3.297 }
adaptation-15建造成功3330712151
查看数据
{ "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": "73028736bbd985636b1a67f6321ef65c55243b90fa1e833adbe93e13f4061349", "principal_signature": "f16c246d44d20cfa8bf089142abe4e041e14679920cf452967e09f6a21dc771d", "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 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "3d571d6e7cb3174a4bd63e6e596a9a19fff47a9a82afcea92f8fe7eda30261dd" ], [ "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": 30712, "nodes": 151, "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.078 }
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": 2.2891 }
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": 2.3174 }
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": 2.1676 }
adaptation-19建造成功3433830151
查看数据
{ "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": "f1c79c739f3b500534ed9687979f8957ce569513cf3c63e05acad694a92df8ff", "principal_signature": "f16c246d44d20cfa8bf089142abe4e041e14679920cf452967e09f6a21dc771d", "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 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "3d571d6e7cb3174a4bd63e6e596a9a19fff47a9a82afcea92f8fe7eda30261dd" ], [ "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": 33830, "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, 2.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.2429 }
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": 2.1678 }
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": 2.1486 }
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.1643 }
adaptation-23建造成功3536941151
查看数据
{ "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": "9595d61b3c698340d2201212174b9722d42c44356f4e94be46a591f8f1526a34", "principal_signature": "f16c246d44d20cfa8bf089142abe4e041e14679920cf452967e09f6a21dc771d", "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 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "3d571d6e7cb3174a4bd63e6e596a9a19fff47a9a82afcea92f8fe7eda30261dd" ], [ "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": 36941, "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.14 ] ], "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.2186 }
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": 2.1972 }
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": 2.0833 }
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": 2.218 }
adaptation-27建造成功3633830151
查看数据
{ "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": "65fc3950b499343659884229bb657c1e2306bb7d90cfeb5b26502a4f2097e2dd", "principal_signature": "f16c246d44d20cfa8bf089142abe4e041e14679920cf452967e09f6a21dc771d", "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 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "3d571d6e7cb3174a4bd63e6e596a9a19fff47a9a82afcea92f8fe7eda30261dd" ], [ "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": 33830, "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, 2.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" ] ] } ], "seconds": 1.2741 }
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": 2.1167 }
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.7529 }
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.7817 }
adaptation-31建造成功3736941151
查看数据
{ "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": "02397304baa9708c156ff646f62533a728a78d97d1d01918047b470d860d7166", "principal_signature": "f16c246d44d20cfa8bf089142abe4e041e14679920cf452967e09f6a21dc771d", "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 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "3d571d6e7cb3174a4bd63e6e596a9a19fff47a9a82afcea92f8fe7eda30261dd" ], [ "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": 36941, "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, 3.45 ] ], "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.5249 }
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": 3.9321 }
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.083 }
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.5032 }
adaptation-35建造成功3829303151
查看数据
{ "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": "827391d0d1010cd9fbf8a9af0ccf6848d15f164f26aef6881b2e2eb78995d607", "principal_signature": "f16c246d44d20cfa8bf089142abe4e041e14679920cf452967e09f6a21dc771d", "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 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "3d571d6e7cb3174a4bd63e6e596a9a19fff47a9a82afcea92f8fe7eda30261dd" ], [ "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": 29303, "nodes": 151, "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": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "artifact": "samples/building-craft/release/core/adaptation-35.litematic", "audit": { "queries": 134, "inventories": 22, "nodes": 151, "digest": "827391d0d1010cd9fbf8a9af0ccf6848d15f164f26aef6881b2e2eb78995d607" }, "seconds": 4.9287 }
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.8486 }
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.7093 }
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": 2.0733 }
adaptation-39建造成功3936941151
查看数据
{ "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": "d975a35e650b4328a66c18f27660de1228ee89289dca621cc8d5fbbc75cbb95d", "principal_signature": "f16c246d44d20cfa8bf089142abe4e041e14679920cf452967e09f6a21dc771d", "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 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "3d571d6e7cb3174a4bd63e6e596a9a19fff47a9a82afcea92f8fe7eda30261dd" ], [ "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": 36941, "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, 3.48 ] ], "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.0992 }
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": 2.8208 }
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": 2.9624 }
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": 3.1163 }
adaptation-43建造成功31029650151
查看数据
{ "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": "0aa4841360e88480f1a0782e7482e43a14f0d19e034a888d28f2dfdf3234eae9", "principal_signature": "f16c246d44d20cfa8bf089142abe4e041e14679920cf452967e09f6a21dc771d", "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 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "3d571d6e7cb3174a4bd63e6e596a9a19fff47a9a82afcea92f8fe7eda30261dd" ], [ "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": 29650, "nodes": 151, "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": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.6478 }
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": 1.8269 }
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": 1.8179 }
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": 1.8714 }
adaptation-47建造成功31133830151
查看数据
{ "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": "cdfb5c4a9ff48d63f3c9dd746e0c962bfe5c274ef61ce35e4d246dcbb1269f47", "principal_signature": "f16c246d44d20cfa8bf089142abe4e041e14679920cf452967e09f6a21dc771d", "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 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "3d571d6e7cb3174a4bd63e6e596a9a19fff47a9a82afcea92f8fe7eda30261dd" ], [ "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": 33830, "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, 2.31 ] ], "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 }
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": 1.8539 }
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.7761 }
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.8538 }
adaptation-51建造成功31233830151
查看数据
{ "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": "b98affcf999e0842d2f39063dcc084fc7cbbd9d1123f6736113d35b5ee7301a7", "principal_signature": "f16c246d44d20cfa8bf089142abe4e041e14679920cf452967e09f6a21dc771d", "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 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "3d571d6e7cb3174a4bd63e6e596a9a19fff47a9a82afcea92f8fe7eda30261dd" ], [ "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": 33830, "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, 2.16 ] ], "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.0036 }
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.7489 }
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.6471 }
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.7272 }
adaptation-55建造成功31331175151
查看数据
{ "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": "3aca3fe03a50c8ad27ae77d497936e8629e83719759de886c7b1036424ba066e", "principal_signature": "f16c246d44d20cfa8bf089142abe4e041e14679920cf452967e09f6a21dc771d", "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 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "3d571d6e7cb3174a4bd63e6e596a9a19fff47a9a82afcea92f8fe7eda30261dd" ], [ "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": 31175, "nodes": 151, "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": 1.5769 }
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.899 }
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.7366 }
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.8448 }
adaptation-59建造成功31433830151
查看数据
{ "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": "13e52882bb9034b462b491044708645c28b1a24f69cb3b22951a14cca7db5ef9", "principal_signature": "f16c246d44d20cfa8bf089142abe4e041e14679920cf452967e09f6a21dc771d", "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 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "3d571d6e7cb3174a4bd63e6e596a9a19fff47a9a82afcea92f8fe7eda30261dd" ], [ "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": 33830, "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, 2.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.064 }
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-craft/release/core/adaptation-60.litematic", "audit": { "queries": 133, "inventories": 54, "nodes": 151, "digest": "128ab6f71f147c2c3f89116ec31a0d08dd8a07acb55ec74cfc71ff40715dc535" }, "seconds": 3.9666 }
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.732 }
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.8519 }
adaptation-63建造成功31536941151
查看数据
{ "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": "5384a29336e4de3f949f1fe27af29b2c5a1cb738940625ce9d4728be987fd96c", "principal_signature": "f16c246d44d20cfa8bf089142abe4e041e14679920cf452967e09f6a21dc771d", "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 ] }, "8a48e97f449953b3b064ae81bb517dd5983262d4d149b55f2ce845495101a9d3" ], [ "roof.profile", [ 9, 7, 0 ], { "axis": "z", "span": 9, "rise": [ 2, 1 ] }, "3d571d6e7cb3174a4bd63e6e596a9a19fff47a9a82afcea92f8fe7eda30261dd" ], [ "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": 36941, "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, 3.21 ] ], "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.0388 }
stress-00建造成功0200036410151
查看数据
{ "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": "5fc386124d81d7971874e53de6b7a3568fe96923ff9c897d79bc962573f8e3b4", "principal_signature": "dda656b6e0437511abf79c2344e10db97c8e3b97e0ec8d80c4294a1d2cb347db", "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 ] }, "0130080411befef5eaf5704d0e73486322f060592fd96e18298374ce3309e720" ], [ "roof.profile", [ 9, 7, 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.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": 36410, "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, 2.5 ] ], "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.0283 }
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.7748 }
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.3352 }
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.2421 }
stress-04建造成功4200436655150
查看数据
{ "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": "317aa843f01a41ac47325a8cbd0fdb44bc9e464fb00e635af087c0ed4c164e59", "principal_signature": "faefeee9d255fd5bfb4209742e297845f0f73a099c1e32c2fb4c924f41adfda7", "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 ] }, "519f95ca2326c9e31b6651e43b0c0d0eea548b27d5d764128a60209a9837a740" ], [ "roof.profile", [ 9, 7, 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.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": 36655, "nodes": 150, "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.0202 }
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.2367 }
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.337 }
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.2329 }
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.2422 }
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.347 }
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.3291 }
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.2342 }
stress-12建造成功4201236458150
查看数据
{ "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": "fdce9decab958fcb59da2c63f2dd057d1ac10cb960bbf140ade86f4dff7aa749", "principal_signature": "faefeee9d255fd5bfb4209742e297845f0f73a099c1e32c2fb4c924f41adfda7", "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 ] }, "519f95ca2326c9e31b6651e43b0c0d0eea548b27d5d764128a60209a9837a740" ], [ "roof.profile", [ 9, 7, 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.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": 36458, "nodes": 150, "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": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 1.0349 }
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.2407 }
stress-14建造成功6201435748167
查看数据
{ "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": "31989c0c5ec1534b6cf5934524c8a193cc2837b37a8d262d8cebdc594fb81fbb", "principal_signature": "93221a536f1bdc7abc04de870c405e2cca657b925776177d81cbaa900eaca0d3", "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 ] }, "14d6ff0b37f6e45a10ac4485b4fc85dba306fe38d1b93092e5d61eec78c8b2ee" ], [ "roof.profile", [ 11, 7, 0 ], { "axis": "z", "span": 11, "rise": [ 2, 1 ] }, "05b229b99ddaf2ee979454422a781325920eaaaf5ebc5740a500b49f6cbf02bc" ], [ "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": 35748, "nodes": 167, "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": [ [ "left", 4, "existing upper volume" ], [ "right", 4, "protected circulation" ] ] } ], "seconds": 2.4034 }
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.2375 }
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 ] } }, "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-craft/release/space-regression/roof-home-0.litematic", "audit": { "queries": 211, "inventories": 37, "nodes": 232, "digest": "2381185dbd3cbfd12d2125c7f67894175429e7fb3cd3b14f35af48b82d435701" }, "seconds": 4.0386, "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 ] } }, "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.8338, "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 ] } }, "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-craft/release/space-regression/roof-home-2.litematic", "audit": { "queries": 321, "inventories": 28, "nodes": 355, "digest": "57771e66fc0d605e129b304694bfec3886529cfbba914e143efe1afcec75cc35" }, "seconds": 8.8835, "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 ] } }, "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": 2.2439, "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 ] } }, "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-craft/release/space-regression/roof-home-4.litematic", "audit": { "queries": 216, "inventories": 22, "nodes": 246, "digest": "ea77f47b630ab0d6c28bb5b456a5c2393fd422dae25008abf295b0aae358e522" }, "seconds": 4.8466, "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 ] } }, "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": 6.3719, "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 ] } }, "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": 4.3692, "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 ] } }, "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-craft/release/space-regression/roof-home-7.litematic", "audit": { "queries": 255, "inventories": 45, "nodes": 288, "digest": "79589bd20d41a278787998e22df80d32165d2976f069103c90667a6ebe85d8eb" }, "seconds": 4.1324, "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 ] } }, "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-craft/release/space-regression/pair-0-2.litematic", "audit": { "queries": 170, "inventories": 28, "nodes": 193, "digest": "14ad3d7aeff9c3b397d830c62999a02eb723d773c3af9f5213564e3245a047f3" }, "seconds": 7.529, "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 ] } }, "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.7049, "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 ] } }, "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.8604, "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 ] } }, "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.8173, "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 ] } }, "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.9545, "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 ] } }, "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.7659, "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 ] } }, "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.6709, "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 ] } }, "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-craft/release/space-regression/pair-3-7.litematic", "audit": { "queries": 130, "inventories": 45, "nodes": 148, "digest": "6a1f5af2d83df3ac94fcde5f34026e8e2d1cd712b456482e6eca25cf277af8b8" }, "seconds": 4.1162, "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 ] } }, "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.6825, "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 ] } }, "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.724, "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 ] } }, "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.1866, "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 ] } }, "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.6034, "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 ] } }, "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.7858, "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 ] } }, "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.7072, "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 ] } }, "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-craft/release/space-regression/pair-7-2.litematic", "audit": { "queries": 172, "inventories": 28, "nodes": 193, "digest": "bdb0085f6b1a2aaeeffbe5bdca39d0a6c55d8164a5aeb516fb21219f769a1e04" }, "seconds": 5.5252, "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 ] } }, "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.6854, "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 ] } }, "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-craft/release/space-regression/held-out-0.litematic", "audit": { "queries": 211, "inventories": 69, "nodes": 233, "digest": "b61e21a4d316cd1000161b1a0a4eeb30f841a4a20683d062fbb3412f2740e19c" }, "seconds": 4.7444, "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 ] } }, "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.168, "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 ] } }, "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.1364, "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 ] } }, "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.4481, "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 ] } }, "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.1755, "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 ] } }, "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.7259, "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 ] } }, "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.8011, "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 ] } }, "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-craft/release/space-regression/held-out-7.litematic", "audit": { "queries": 203, "inventories": 65, "nodes": 225, "digest": "8db2a800660e5a87eceef12c814d330a37a3b00915f9f968773435b0a2e096f9" }, "seconds": 4.9566, "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-craft/release/garden-regression/court-0.litematic", "audit": { "queries": 454, "inventories": 77, "nodes": 486, "digest": "a649d4946ec8dfc0901345b712fc7c1fdd67e28ea894dfd8ff84e43b8d022e10" }, "seconds": 5.8601, "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.4319, "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-craft/release/garden-regression/court-2.litematic", "audit": { "queries": 377, "inventories": 66, "nodes": 408, "digest": "ce0716689f3a86345c2d0ac72ce6136248fe521f45e0701bc38330a9126076cb" }, "seconds": 4.1706, "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.1479, "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.3779, "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.0582, "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.3228, "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-craft/release/garden-regression/court-7.litematic", "audit": { "queries": 449, "inventories": 83, "nodes": 484, "digest": "2c4d10384bafd846d04d126881700b64fc8b13812f0f7b79db1d3e1262757d72" }, "seconds": 5.8605, "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-craft/release/garden-regression/new-pair-0-2.litematic", "audit": { "queries": 215, "inventories": 66, "nodes": 231, "digest": "2ca9a6b45d547dafbdb9122bb71cfb3e38055f0099645ea497e8702db0a8371a" }, "seconds": 4.8942, "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-craft/release/garden-regression/new-pair-0-7.litematic", "audit": { "queries": 252, "inventories": 83, "nodes": 272, "digest": "55b5ccfc98d6c995e694837d89b2ac45efbe96c37a1ce399094368af29fbb2c5" }, "seconds": 6.0596, "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-craft/release/garden-regression/new-pair-1-2.litematic", "audit": { "queries": 215, "inventories": 66, "nodes": 231, "digest": "a17384b12691b3d62010c11e4aafe71caa1c111e35d96e62701953a17d500622" }, "seconds": 4.2823, "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-craft/release/garden-regression/new-pair-1-7.litematic", "audit": { "queries": 252, "inventories": 83, "nodes": 272, "digest": "86cff0c1a9eab88ef9e837dbe706db1f57eb53f545bb10152cca0a7b3e58efe8" }, "seconds": 5.3912, "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.7171, "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.4559, "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.4364, "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.5203, "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.4241, "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.5376, "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.4262, "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.4718, "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-craft/release/prior-holdout/0-high_house-5.litematic", "audit": { "queries": 161, "inventories": 23, "nodes": 180, "digest": "b9604b708dbb039d7d123411bbeb33d4834978c7053b0075ad5fa98ea17f4bd0" }, "seconds": 3.5182 }
0-gabled_hall-7建造成功7300035585199
查看数据
{ "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": "21d84625d3f017d539bd8ebb58d1585247566e62106131a4dadaf6774a2c5f2c", "principal_signature": "456f563f82543eb6658cf311625a5f203f0730eabc9660db63d11cfdff97b980", "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 ] }, "fcd541bb27d60643b2cf4cd173cc3f1b29872d65ca797892f55106bac3310e21" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "69d509c46320c52bd730a6d3011823a3a3f1df4422ffc0db57839472a5de1c2e" ], [ "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": 35585, "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.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-craft/release/prior-holdout/0-gabled_hall-7.litematic", "audit": { "queries": 179, "inventories": 75, "nodes": 199, "digest": "21d84625d3f017d539bd8ebb58d1585247566e62106131a4dadaf6774a2c5f2c" }, "seconds": 4.2317 }
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.15 }
1-gabled_hall-7建造成功7300138696199
查看数据
{ "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": "971563ac1d785c5314881875808ac1e60862cc2a398c8491fcdd074dd5ce1c4a", "principal_signature": "456f563f82543eb6658cf311625a5f203f0730eabc9660db63d11cfdff97b980", "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 ] }, "fcd541bb27d60643b2cf4cd173cc3f1b29872d65ca797892f55106bac3310e21" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "69d509c46320c52bd730a6d3011823a3a3f1df4422ffc0db57839472a5de1c2e" ], [ "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": 38696, "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, 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.1956 }
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.0927 }
2-gabled_hall-7建造成功7300235756199
查看数据
{ "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": "b177678661226a0c072df8f090ec8796a22418366bf3079ccbde16951e495075", "principal_signature": "456f563f82543eb6658cf311625a5f203f0730eabc9660db63d11cfdff97b980", "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 ] }, "fcd541bb27d60643b2cf4cd173cc3f1b29872d65ca797892f55106bac3310e21" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "69d509c46320c52bd730a6d3011823a3a3f1df4422ffc0db57839472a5de1c2e" ], [ "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": 35756, "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.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.4023 }
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.2302 }
3-gabled_hall-7建造成功7300335585199
查看数据
{ "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": "7ceaaed4e476ed4a40925b2cbca8978c4c0de6c8250990cb9537fc8d569e1d9d", "principal_signature": "456f563f82543eb6658cf311625a5f203f0730eabc9660db63d11cfdff97b980", "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 ] }, "fcd541bb27d60643b2cf4cd173cc3f1b29872d65ca797892f55106bac3310e21" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "69d509c46320c52bd730a6d3011823a3a3f1df4422ffc0db57839472a5de1c2e" ], [ "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": 35585, "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.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.5222 }
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.108 }
4-gabled_hall-7建造成功7300435585199
查看数据
{ "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": "76990293b42a1e1ddd1575f8a8c2722f8fd9ebb778cdee6af7074f2f8029c77f", "principal_signature": "456f563f82543eb6658cf311625a5f203f0730eabc9660db63d11cfdff97b980", "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 ] }, "fcd541bb27d60643b2cf4cd173cc3f1b29872d65ca797892f55106bac3310e21" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "69d509c46320c52bd730a6d3011823a3a3f1df4422ffc0db57839472a5de1c2e" ], [ "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": 35585, "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, 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.1273 }
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.1059 }
5-gabled_hall-7建造成功7300535585199
查看数据
{ "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": "4a7b8e3e792c367692c9c515ca8942a4f1c4045fe24a147d17e1ee45f0c5c6a5", "principal_signature": "456f563f82543eb6658cf311625a5f203f0730eabc9660db63d11cfdff97b980", "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 ] }, "fcd541bb27d60643b2cf4cd173cc3f1b29872d65ca797892f55106bac3310e21" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "69d509c46320c52bd730a6d3011823a3a3f1df4422ffc0db57839472a5de1c2e" ], [ "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": 35585, "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, 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.195 }
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.1923 }
6-gabled_hall-7建造成功7300635585199
查看数据
{ "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": "de9c160e0f8edf024682b6dfd0090485fc8245d300a19dd7b19e098e0b96234f", "principal_signature": "456f563f82543eb6658cf311625a5f203f0730eabc9660db63d11cfdff97b980", "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 ] }, "fcd541bb27d60643b2cf4cd173cc3f1b29872d65ca797892f55106bac3310e21" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "69d509c46320c52bd730a6d3011823a3a3f1df4422ffc0db57839472a5de1c2e" ], [ "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": 35585, "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.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.2911 }
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.2013 }
7-gabled_hall-7建造成功7300735585199
查看数据
{ "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": "b5042ddc5d34c15ebc493d281c1010b219fb3fc12edc65931e3b7797f78d7a15", "principal_signature": "456f563f82543eb6658cf311625a5f203f0730eabc9660db63d11cfdff97b980", "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 ] }, "fcd541bb27d60643b2cf4cd173cc3f1b29872d65ca797892f55106bac3310e21" ], [ "roof.profile", [ 0, 7, 11 ], { "axis": "x", "span": 11, "rise": [ 1, 2 ] }, "69d509c46320c52bd730a6d3011823a3a3f1df4422ffc0db57839472a5de1c2e" ], [ "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": 35585, "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, 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.2627 }
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 ] } }, "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-craft/release/new/hearth-home-0.litematic", "audit": { "queries": 345, "inventories": 44, "nodes": 383, "digest": "68e3fa01aad6e20e2ce3463fceb07fcf78f504cd565a645f541263e9bc1464c6" }, "seconds": 5.6223, "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 ] } }, "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.3651, "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 ] } }, "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-craft/release/new/hearth-home-2.litematic", "audit": { "queries": 349, "inventories": 59, "nodes": 386, "digest": "ae79b252a38a57b24fe823715660eafefe65f1174ef29c29a1cf96f8fbdc6da8" }, "seconds": 7.1208, "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 ] } }, "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.9471, "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 ] } }, "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.5955, "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 ] } }, "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-craft/release/new/hearth-home-5.litematic", "audit": { "queries": 363, "inventories": 83, "nodes": 402, "digest": "933fcf06f8e0a32fd95cd036b3edc377681b5f7312a34cf720dc95606b141b57" }, "seconds": 7.6186, "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 ] } }, "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": 7.4343, "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 ] } }, "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-craft/release/new/hearth-home-7.litematic", "audit": { "queries": 325, "inventories": 67, "nodes": 364, "digest": "cac0950efe0ab35dcfcf5099f9e80cb0f666eaf119c8930322306d1ca7a5ff32" }, "seconds": 6.4385, "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 ] } }, "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-craft/release/new/pair-0-1.litematic", "audit": { "queries": 217, "inventories": 80, "nodes": 252, "digest": "3f316a40443c951beed81c268ae9f35e65e010cce701996bfd64e26cf3295592" }, "seconds": 6.727, "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 ] } }, "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": 4.1525, "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 ] } }, "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.883, "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 ] } }, "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": 5.269, "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 ] } }, "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": 3.225, "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 ] } }, "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": 4.4232, "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 ] } }, "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": 3.0661, "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 ] } }, "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-craft/release/new/pair-3-6.litematic", "audit": { "queries": 237, "inventories": 77, "nodes": 272, "digest": "327b9828b59ba6c2c1cd35c3f990affd0356733737259dd0d07d7ff763c99405" }, "seconds": 7.7168, "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 ] } }, "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.6775, "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 ] } }, "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": 9.6275, "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 ] } }, "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": 7.0462, "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 ] } }, "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": 8.7032, "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 ] } }, "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": 5.4775, "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 ] } }, "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": 7.9657, "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 ] } }, "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-craft/release/new/pair-7-1.litematic", "audit": { "queries": 218, "inventories": 80, "nodes": 252, "digest": "f7b1c720eb3379c2e0eae894d8c3a1cefa27b1bc0b68febbd65f2887b7346ccc" }, "seconds": 7.2398, "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 ] } }, "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": 4.7808, "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" ] ] } ] } }

08 · 网页真的跑了 Python 吗,还有哪些失败

模型自己没有重新运行浏览器测试。 它只检查了原生 Python 在禁用 numpy、MCIO、PIL 等导入后仍能生成。这不能代替网页测试。因此本报告另用真实浏览器执行同一份归档代码,并与原实验镜像内的 Python 逐项对照。

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

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

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

网页实测入口建筑编号地形编号实际拒绝原因
三间宽门廊住宅(第五轮保留)3410屋面接合位置撞到窗口活动木板
沿街排列的多栋房屋3480道路必须留空的通行空间被挡住
村落:复查旧失败输入3140道路必须留空的通行空间被挡住

网页通过 Pyodide 在工作线程里执行编辑框中的 Python。生成、保存、读回检查都实际发生,再把方块交给渲染器。报告没有修改原库来让网页通过。核对内容包括建筑方块摘要、主要结构摘要、方块归属,以及真正下载的文件内完整部件、关系、依赖、操作、物品与替换记录。

“换随机编号”保留当前 Python。“换一种场景”轮换 20 个公开示例入口,包含新壁炉住宅、阁楼和庭院住宅、村落、建筑群、大厅、桥廊、围墙;每个程序再按编号选择结构,不是只换颜色。这个菜单是报告提供的浏览入口,不是库被限制为 20 个家族,更不是整个分布已经穷尽。你仍可以编辑代码自由组合。

本次轮换使用编号 340–359、地形 0,20 个入口中 18 个成功,2 个拒绝(宽门廊住宅 341、村落 348)。这些确定编号便于对照;另单独复查上一轮失败的村落 314,以及默认村落 0 和 1。新增参数检查包含屋顶前后削斜、餐桌长度和原来的楼层、侧翼、窗户、阁楼等。故意报错、停止死循环、再重新运行也有检查。这些是有限覆盖,不能解释为任意编号的成功率。

未解决:村落 314 和 348 仍然有路灯挡路

settlement_scene(seed=314, count=None) 仍报两处通路被挡:(-5, 5, 40) 和 (-5, 6, 40)。原道路要求这两格保持可通行,但第 3 根路灯的石砖底座和栅栏占了位置。此次探索的村落 348 也有同类问题:第 1 根路灯占据 (-5, 5, 2) 与 (-5, 6, 2)。报告记录了冲突发生时方块的实际归属,两组输入在第五轮也有同样的错误。报告在原生 Python 复现了与第四、第五轮相同的错误,也在网页保留这个输入的实际结果。

这属于库自带的村落道路/路灯组合规则,不是用户写那行调用的错误。验证器正确拦住了坏结果,但不能因此把此次生成算作成功。默认村落 0、1 能建成,也不能覆盖 314 的失败;这个输入不在模型的 196 次最终单栋/地形试建集合里。

第六轮原生复现 · 冲突方块与所属路灯 · 浏览器实际失败输入。所有网页探索中的其他拒绝也写在该记录中,不会悄悄重抽。

这次探索又发现:宽门廊住宅 341 的屋顶碰到窗板

另一个保留例子 held_out_design(341),在地形编号 0 下,于 (12, 19, 8) 发生屋顶接合冲突。报错明确指出该处是另一段屋顶山墙窗口的云杉活动木板,不是允许屋面接合的实心边界。两个接地候选都遇到同一问题,最终拒绝建造。

报告用第五轮原代码运行了完全相同的浏览器请求,也得到相同的错误。因此这是本次扩展探索才暴露出来的旧组合缺陷,不能归咎于浏览器或第六轮新屋顶。本轮对削斜山墙的修复,并没有解决所有屋顶与窗的相遇方式。用户只是调用公开的高层例子,并没有自己乱摆方块。

第五轮对同一输入的复查。它与高差超限不是一回事,也不在模型本轮那 196 个最终输入里;报告保留原错误,没有换一个成功编号。

保存后“方块属于哪里”还在不在

模型对 38 对完整文件核对了 10,393 个部件节点、9,342 次非空部件查询和 2,024 个带额外物品数据的方块。CLI 默认和编号 1 的两份产物还核对了全部 1,713 次“部件及其内部子部件包含哪些方块”的查询。相同输入在不同 Python 哈希随机设置下重新生成,默认产物摘要相同。

方块状态按方块名和属性含义核对,属性字符串换顺序不应误报“保存后变了”。网页另外核对真实玻璃、阁楼家具的归属,切开后下载仍然是完整建筑。

确定性重放 · CLI 文件核对 · 原实验玻璃查询。

此外,实验的外层验收脚本还单独检查了命令行接口:不传参数能否运行、能否接收编号、能否写到带空格的相对或绝对路径,以及换 Python 内部哈希设置后能否重现同一内容。它也重新调用了交付的测试。模型自测、外层验收和报告重跑用的是同一套 312 项测试,不能相加成 936 项新测试。

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

09 · 我的判断:更像可扩充的积木库,但仍有明显边界

这轮最值得保留的是公开的屋面与室内布置接口。房间只需要调用规则,具体家具可以测量空间、选择摆法并自带验证;替换规则后,归属和重新生成仍由底层负责。这比给每个参考房型再堆一份专用程序更接近最初的目标。

效果上,削斜端部、长桌、壁炉和地毯增加了变化与生活感,背面和剖面也有完整内容。与参考图相比,建筑仍有明显重复的窗格与木梁带,屋面和室内留白较大,花园更像规则摆放的绿化,缺少经过设计的坡地过渡和丰富层次。自动测试无法替我们判定“足够美观”。

可靠范围仍是 9/11/13 格房间、6 格层高、水平直角方向、有限家具词汇与两种接地策略。端部削斜不能超过约定深度,仍要留至少四格山墙与非零屋脊;显式不兼容参数会拒绝。水边住宅不自动长出完整岸边社区,任意屋顶交错也没有通用解法。

壁炉只是经过检查的点燃篝火、砌体与操作空间,没有模拟排烟、通风、热量和燃烧。光照、支撑、碰撞和通路是有限的方块模型,不是完整 Minecraft 物理。村落 314 和宽门廊住宅 341 的问题则说明,已有高层组合仍有未覆盖的缺陷。

模型说没有发现必须停工重设计的严重架构问题。本轮证据与这一判断相容,但不能据此保证未来任意复杂部件都能顺利拼接。

10 · 模型结束前最后说了什么

下面是本次保存会话中最后一条 final_answer 原文,已经与任务完成事件里的最终文本核对一致。不是报告作者重新写的一份总结。原文中的 /work/... 是实验容器路径,对应材料可以从本文下载。

Improved buildings with clipped roof ends, fitted hearths and dining areas, better garden placement, and supported ridge ornaments. Added public roof and furnishing policies while preserving transactions and provenance. Verified: - **312 tests passed**, retaining every earlier test. - **180/180 supported inputs validated**. - Stress: **5/16 succeeded**; all 11 relief-limit failures retained. - **30 exterior/interior views inspected**. - CLI replay, structural queries, inventories, and export/reload passed. Updated [schematic](/work/generator/workspace/output.litematic), [companion data](/work/generator/workspace/output.litematic.structure.json), and [evidence report](/work/generator/workspace/reports/building-craft/ASSESSMENT.md). No serious architectural flaw was found. Buildings still have more regular massing and simpler landscaping than the lodge references. Contact strategies remain limited, and browser execution was not rerun.

中文翻译(与原文分开)

通过削斜屋顶端部、按空间布置的壁炉与用餐区、更合理的花园摆放,以及有支撑的屋脊装饰,改进了建筑。新增公开的屋顶和家具布置规则,同时保留事务与归属记录机制。

已验证:

已更新建筑文件、配套部件数据,以及证据报告(对应原文的三个链接)。

没有发现严重架构缺陷。与 lodge 参考相比,建筑的体量安排仍更规整,景观更简单。接地策略仍有限,而且没有重新运行浏览器测试。

最终消息原始文本 · 来源、时间与原始记录摘要。原文“没有重跑浏览器”描述的是模型交付时的情况;本报告之后独立执行的网页检查另行列出。

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

本轮使用同一保存会话、同一镜像、proc 工具集,模型是 gpt-6-astra,推理设置为 max,账号为 kokemeow。仍从原来的 tmux 实验窗口继续。本轮新增消息逐字如下:

continue improve it

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

本轮从开始到完整结束为 54.00 分钟,包含实验收尾,不等于单次 Python 生成时间。下面只统计本轮新增用量;缓存已包含在输入中,推理已包含在输出中,不要重复相加。

本轮新增用量数值
模型请求82
输入 Token(含缓存)12,912,232
其中缓存输入12,274,176
输出 Token(含推理)79,474
其中推理输出31,808
输入与输出合计12,991,706
命令记录111
命令非零退出码8

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

原始参考代码和图片用于建筑外观目标。本报告运行的是第六轮归档代码;网页自己的适配层仅负责传参、执行、检查、导出和显示。归档源码未被修改,前五份报告也保留。

Python 文件目录(98 个,共 9717 行,可排序)
源码行数
generate.py21
hearth/space.py109
hearth/blocks.py100
hearth/randomness.py21
hearth/__init__.py8
hearth/persistence.py194
hearth/composition.py61
hearth/programs.py186
hearth/assessment.py163
hearth/lodges.py55
hearth/quality_assessment.py177
hearth/validators.py51
hearth/navigation.py44
hearth/kernel/contracts.py150
hearth/kernel/errors.py32
hearth/kernel/view.py166
hearth/kernel/validation.py220
hearth/kernel/scene.py542
hearth/kernel/__init__.py5
hearth/environment/fields.py79
hearth/environment/terrain.py42
hearth/environment/__init__.py3
hearth/components/primitives.py209
hearth/components/__init__.py12
hearth/components/interior.py235
hearth/components/roofs.py182
hearth/components/building.py261
hearth/components/constraints.py19
hearth/components/landscape.py261
hearth/components/roofshape.py51
hearth/components/hospitality.py88
hearth/components/roomlayout.py115
hearth/components/roofcraft.py290
hearth/components/joinery.py39
hearth/components/furnishing.py131
hearth/components/masonry.py36
hearth/components/grounds.py108
hearth/components/lofts.py310
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/hearth_house.py27
examples/lodge.py16
examples/building_quality.py13
examples/building_views.py54
examples/lodge_inspection.py29
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
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
逐文件查看全部 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.6.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.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')) 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 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')), 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')), 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')), 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('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) if record is None and self.erasures.get(p) not in paths: 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
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 box = Box((-projection, min(minimum - self.site_limits.bed_thickness + 1, 0), -front), (width - 1 + projection, floor + height + b + 16, 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) 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'), version='3') 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)) box = Box((-1, -1, -1), (self.width, max(levels) + 4, 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': max(levels) + 5, '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',), adaptations=('measured solid abutments', 'scoped dormer cuts'), guarantees=('actual projected weather skin', 'bounded opening authority', 'full-height finial bases'), version='2') 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 + 4, self.length)) 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 region = frame.box(Box((0, 0, 0), (4, peak + 2, 2))) # 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}) for key, frame, region in mounts) grants = tuple(Grant(key, region, ('install',), ('dormer',), region.volume) for key, frame, region in mounts) # 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}) 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),))) 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['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/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)) box = Box((-1, 0, -1), (self.width, peak + 5, 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/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)) 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_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))
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