aardio 文档

aardio 范例: 快照对比

import autos.skills.blender;
import JSON;

// 只读示例:先将 mode 设为 capture 记录基线,手动编辑后改为 diff。
// 需要已经通过 process.blender / 本技能打开的会话;本例不自动启动或修改模型。
var mode = "capture";
var session = "autos";
var options = {collection="Chair";meshHash=true;nodeHash=true};
var baselinePath = "/snapshot-before.json";

var b = autos.skills.blender;
if(mode !== "capture" && mode !== "diff") return;
if(mode === "capture" && io.exist(baselinePath)){
    print("基线已存在。请更换 baselinePath,避免覆盖旧观察记录。");
    return;
}
var before;
if(mode === "diff"){
    var err;
    before,err = JSON.load(baselinePath);
    if(!before){ print(err); return; }
}
var c,err,detail = b.connect(session);
if(!c){ print(err); return; }
var current,err,detail = b.snapshot(c,options);
c.close();
if(!current){ print(err); return; }

if(mode === "capture"){
    if(!current.coverage.complete){
        print("观察不完整,请先缩小范围或检查 coverage。",JSON.stringify(current.coverage));
        return;
    }
    var ok,err = JSON.save(baselinePath,current,true);
    if(!ok){ print(err); return; }
    print("已保存只读状态基线:",io.fullpath(baselinePath));
    print("不是 .blend 备份。手动修改后,将 mode 改为 diff 再运行。");
}
else {
    // 独立进程的磁盘回读才显式增加 {match="name"};正常局部编辑保持默认identity。
    var d,err = b.diff(before,current);
    if(!d){ print(err); return; }
    JSON.save("/snapshot-after.json",current,true);
    JSON.save("/snapshot-diff.json",d,true);
    print("状态:",d.status,"新增/移出/改变/未变:",#d.added,#d.removed,#d.changed,#d.unchanged);
    print("已覆盖字段一致:",d.equalWithinCoverage);
    if(!d.coverageComplete) print("证据不完整或不可比,不能用 changed 为空证明未误改。");
    if(d.fieldsTruncated) print("字段明细已截断;不要将省略的字段当成允许修改。");
    print("详细结果:",io.fullpath("/snapshot-diff.json"));
}

Markdown 格式