原文链接:
如果您熟悉Inventor API,对部件与装配的关系不会陌生。在Fusion 360 也是类似的,即,部件是原始零件/子装 在装配中的引用,其形体即所谓代理实体,加入到装配后,部件的位置是基于装配基点做的偏移,自然其面片的数据也是偏移后的。所以,要是想拿到装配坐标系的的数值,需要再拿到原始零件的数值,再加上位置变换量。API提供了方便的方法,当拿到零件的body后 (目前还只是 BrepBody),可用以下方法得到装配环境中的代理body,进而通过这个代理body得到的三角面片信息就是装配坐标系的数值了。
BRepBody.createForAssemblyContext (部件引用)
function run(context) {
"use strict";
if (adsk.debug === true) {
/*jslint debug: true*/
debugger;
/*jslint debug: false*/
}
var ui;
try {
var app = adsk.core.Application.get();
ui = app.userInterface;
var meshStr = '';
var allOccs = app.activeProduct.rootComponent.allOccurrences;
for(var i = 0; i < allOccs.count; i++){
var occ = allOccs.item(i);
var comp = occ.component;
var bodies = comp.bRepBodies;
for(var j = 0; j < bodies.count; j++){
var body = bodies.item(j);
body = body.createForAssemblyContext(occ);
var meshMgr = body.meshManager;
var meshList = meshMgr.displayMeshes;
for(var k = 0; k < meshList.count; k++){
var triMesh = meshList.item(k);
var data = triMesh.nodeCoordinatesAsDouble;
var dataStr = data.join(",");
meshStr += dataStr;
meshStr += '\n';
}
}
}
//ui.messageBox(meshStr);
}
catch (e) {
if (ui) {
ui.messageBox('Failed : ' + (e.description ? e.description : e));
}
}
adsk.terminate();
}