原文鏈接:
如果您熟悉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();
}