如何使用纯 Javascript Autodesk 在查看器中离线显示 2d (.dwg) 文件

Posted

技术标签:

【中文标题】如何使用纯 Javascript Autodesk 在查看器中离线显示 2d (.dwg) 文件【英文标题】:How to display 2d (.dwg) files offline in viewer using pure Javascript Autodesk 【发布时间】:2018-11-21 18:25:12 【问题描述】:

我正在尝试使用纯 javascript 在离线模式下在查看器中显示 2d 文件。我已经使用 https://extract.autodesk.io/ 上传并提取了 dwg。 提取的文件包含许多 json.gz 文件和一个文件夹。在这个文件夹中,它有清单、元数据(json.gz 文件)和一个 .f2d 文件

我已将此文件位置提供给查看器选项

var docs = [ "path": "./foldername/primaryGraphics.f2d", "name": "2D view" ];
var options =  'docid': docs[0].path, env: 'Local' ;

我的查看器初始化是

viewer = new Autodesk.Viewing.Private.GuiViewer3D(document.getElementById('MyViewerDiv'), ); 
Autodesk.Viewing.Initializer(options, function () 
        viewer.initialize();
        viewer.loadModel(options.docid);
);

它在查看器中给我错误消息说“我们无法显示您正在寻找的项目。它可能尚未被处理......”并给我错误代码为 5(指定类型无效)。

请帮忙。

【问题讨论】:

我尝试在选项中提供文件“路径”:“developer-autodesk.github.io/translated-models/shaver/0.svf”,它显示在查看器中。但这是一个 3d 文件,我的是 2d。提取为 f2d 文件,不支持此文件格式。请需要帮助 【参考方案1】:

请确保您已完全下载所有提取的 DWG 可视气泡,并且您要加载的模型的路径正确,因为错误代码 5 代表 NETWORK_FILE_NOT_FOUND

我刚刚用下面的代码 sn-p 从AutoCAD Sample Files 测试了这个blocks_and_tables_-_metric.dwg,它工作正常。

var options = 
    env: 'Local',
;

var doc =  'rootFolder': 'Model', 'path': '29c9e407-f76f-a1c0-0972-dcb5b496fff9_f2d/primaryGraphics.f2d', 'name': '2D view' ;

var viewerDiv = document.getElementById( 'MyViewerDiv' );
var viewer = new Autodesk.Viewing.Private.GuiViewer3D( viewerDiv );


Autodesk.Viewing.Initializer(options, function() 
    if( viewer.initialize() != 0 ) return console.error( 'Failed to initialize viewer' );

    var basePath = getCurrentBaseURL();
    var modelFolderPath = basePath + doc.rootFolder + '/';
    var modelFilePath = modelFolderPath + doc.path;
    var modelOptions = 
        sharedPropertyDbPath: modelFolderPath
    ;

    viewer.loadModel( modelFilePath, modelOptions, onLoadModelSuccess, onLoadModelError );
);

function getCurrentBaseURL() 
    var basePath = '';
    var lastSlash = document.location.href.lastIndexOf( '/' );

    if( lastSlash != -1 )
        basePath = document.location.href.substr( 0, lastSlash + 1 );

    return basePath;


/**
 * viewer.loadModel() success callback.
 * Invoked after the model's SVF has been initially loaded.
 * It may trigger before any geometry has been downloaded and displayed on-screen.
 */
function onLoadModelSuccess( model ) 
    console.log( 'onLoadModelSuccess()!' );
    console.log( 'Validate model loaded: ' + ( viewer.model === model ) );
    console.log( model );


/**
 * viewer.loadModel() failure callback.
 * Invoked when there's an error fetching the SVF file.
 */
function onLoadModelError( viewerErrorCode ) 
    console.error( 'onLoadModelError() - errorCode:' + viewerErrorCode );

blocks_and_tables_-_metric.dwg提取模型的文件结构如下图所示:

我使用的2D模型的文件结构是:

【讨论】:

非常感谢@Eason,我错过了复制项目文件夹中的 manifest.json.gz 和 metadata.json.gz 文件。是否有任何 api 可以从中获取这些 .json.gz 文件?我已经使用developer.api.autodesk.com/modelderivative/v2/designdata/:urn/… api 来获取清单,这仅显示了一些 img 文件和 f2d 文件。 是的,Manifest API 响应中隐藏了这些文件,但请查看此博客,了解如何通过 Node.js 中的简单进度下载可见气泡:forge.autodesk.com/blog/…

以上是关于如何使用纯 Javascript Autodesk 在查看器中离线显示 2d (.dwg) 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Autodesk Forge 查看器扩展添加到 React?

如何使用 Autodesk Forge 查看器离线查看模型?

如何在 Autodesk Viewer 中设置性能和外观设置?

防止安装 Autodesk 桌面应用程序

如何使用纯 JavaScript 读取图像文件?

如何使用纯 Javascript 使 HTML 元素可调整大小?