Fusion 360 獲取裝配部件的三角面片頂點在裝配座標系中的數值

原文鏈接:

https://forums.autodesk.com/t5/api-and-scripts/getting-triangulated-mesh-data-in-world-object-space/m-p/5613860#M354


如果您熟悉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(); 
}


發佈了164 篇原創文章 · 獲贊 33 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章