2016-11-02 1 views
0

Autodesk鍛造でRevitモデルを読み込みました。ビューがロードされたときにモデルの特定のオブジェクトをズームする方法を知りたいと思います。 APIを使用することは可能ですか?Autodesk鍛冶の特定のRevitモデルオブジェクトにズームする

私は、関数selectItemByIdをsuccesでテストしました。関数viewer.bubble.search(av.BubbleNode.MODEL_NODE);を使用してメインオブジェクトのIDを取得します。モデルの各要素のIDを取得してズームインする方法はわかりません。

ここで私はモデルをロードするために使用しているコードです:

var viewer; 
var options = { 
    env: 'AutodeskProduction', 

    accessToken: 'aaaaaaaaaaaaaaaaaaa' 
}; 

var documentId = 'urn:bbbbbbbbbbbbbbbbbbbbbbbbbb'; 
Autodesk.Viewing.Initializer(options, function onInitialized(){ 
    Autodesk.Viewing.Document.load(documentId, onDocumentLoadSuccess, onDocumentLoadFailure); 
}); 

/** 
* Autodesk.Viewing.Document.load() success callback. 
* Proceeds with model initialization. 
*/ 
function onDocumentLoadSuccess(doc) { 

    // A document contains references to 3D and 2D viewables. 
    var viewables = Autodesk.Viewing.Document.getSubItemsWithProperties(doc.getRootItem(), {'type':'geometry'}, true); 
    if (viewables.length === 0) { 
     console.error('Document contains no viewables.'); 
     return; 
    } 

    // Choose any of the avialble viewables 
    var initialViewable = viewables[0]; 
    var svfUrl = doc.getViewablePath(initialViewable); 
    var modelOptions = { 
     sharedPropertyDbPath: doc.getPropertyDbPath() 
    }; 

    viewer = new Autodesk.Viewing.ViewingApplication('MyViewerDiv'); 
    viewer.registerViewer(viewer.k3D, Autodesk.Viewing.Private.GuiViewer3D); 
    viewer.loadDocument(documentId, onDocumentLoaded); 


    var style3D = "height: 60%; width: 65%; overflow: hidden;"; 
    $('.adsk-viewing-viewer').attr('style', style3D); 

} 

/** 
* Autodesk.Viewing.Document.load() failuire callback. 
*/ 
function onDocumentLoadFailure(viewerErrorCode) { 
    console.error('onDocumentLoadFailure() - errorCode:' + viewerErrorCode); 
} 



function onDocumentLoaded(lmvDoc) { 
    var modelNodes = viewer.bubble.search(av.BubbleNode.MODEL_NODE); // 3D designs 
    var sheetNodes = viewer.bubble.search(av.BubbleNode.SHEET_NODE); // 2D designs 
    var allNodes = modelNodes.concat(sheetNodes); 

} 

答えて

3

私は、これは次のスクリプト使用してオブジェクトのDBIDを取得解く:一度

var _viewer = viewer.getCurrentViewer(); 

$(_viewer.container).bind("click", onMouseClick); 

function onMouseClick(e) { 
    var screenPoint = { 
     x: event.clientX, 
     y: event.clientY 
    }; 

    var n = normalize(screenPoint); 
    var dbId = getHitDbId(n.x, n.y); 

    if (dbId == null) return; 

}; 

function getHitDbId(x, y) { 
    y = 1.0 - y; 
    x = x * 2.0 - 1.0; 
    y = y * 2.0 - 1.0; 

    var vpVec = new THREE.Vector3(x, y, 1); 

    var result = _viewer.impl.hitTestViewport(vpVec, false); 
    return result ? result.dbId : null; 
}; 

function normalize(screenPoint) { 
    var viewport = _viewer.navigation.getScreenViewport(); 
    var n = { 
     x: (screenPoint.x - viewport.left)/viewport.width, 
     y: (screenPoint.y - viewport.top)/viewport.height 
    }; 
    return n; 
} 

を私はdbidを持っています。オブジェクトをズームして隔離するには、次のスクリプトを使用します。

_viewer.impl.selector.setSelection([dbId], _viewer.model); 
_viewer.fitToView(dbId); 
_viewer.isolateById(dbId); 
関連する問題