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 格式