梁晓冬

梁晓冬 查看完整档案

北京编辑  |  填写毕业院校Autodesk  |  技术顾问 编辑 twitter.com/coldwood 编辑
编辑

现就职于Autodesk软件中国有限公司,主要负责Autodesk产品API和Forge云服务的推广和传播工作。微信号:thiscoldwood。
欢迎联系咨询Forge相关事宜

个人动态

梁晓冬 发布了文章 · 2020-02-16

Visual Studio Code 的超便利Forge测试工具:Autodesk Forge Tool

Autodesk Forge 学习简谈 - 1 我们提及了几个学习Forge的材料和工具,Learn Forge tutorial - 向导式Forge进阶教程介绍了官方的入门样例。 有时,各位朋友也喜欢用 Autodesk Forge 学习简谈 - 4中谈到的extract io来下载转换后的SVF数据包。当然,还有Postman,大家经常拿来进行端口测试。这些为大家进行Forge应用的开发提供了不同角度的帮助。

Forge的网络应用开发,不仅需要频繁的代码测试,还要测试模型,分析数据等,尤其很多朋友的开发环境是现在流行的Visual Studio Code。今天我们特别介绍一款超便利的Forge测试工具:Autodesk Forge Tool。由我们部门的同事Petr Broz撰写。

这款工具是一个VSCode的扩展库。先通过VSCode市场搜寻Autodesk Forge Tool,然后安装。
Screen Shot 2020-02-16 at 9.14.56 PM.png

安装成功后,左边侧的菜单栏会出现一个Forge的菜单:先不要点击。而是先打开一个目录作为【工作空间】。

Screen Shot 2020-02-16 at 10.39.16 PM.png

这时点击Forge的菜单,将出现Forge Tool的测试面板,而VSCode环境右下角出现一个提示,让输入您的Forge ID等信息,点击确认开始。也可以通过快捷键( macOS的 Cmd+, Windows的 Ctrl+) 来弹出输入框。

Screen Shot 2020-02-16 at 9.19.35 PM.png

按顺序输入Client ID, Client Secret和测试用数据放在US还是EMEA(目前两个数据中心)
Screen Shot 2020-02-16 at 9.28.47 PM.png

Screen Shot 2020-02-16 at 9.28.58 PM.png

Screen Shot 2020-02-16 at 9.29.06 PM.png

最后是给这些变量的环境一个名字。
Screen Shot 2020-02-16 at 9.29.26 PM.png

Forge Tool当前版本提供三组测试,而且内容相当丰富

Screen Shot 2020-02-16 at 10.30.55 PM.png

  1. Data & Derivatives: 进行数据管理,模型转换,甚至包括SVF数据包下载。缺省会列出所有该Client ID (app)所拥有的bucket。
  2. Webhook: 包括各种支持的Webhook类型设置和调用。缺省会列出Client ID (app)所拥有的Webhook
  3. Design Automation:进行云端设计自动化的测试。缺省会列出Client ID (app)的云端自动化有关的资源:appbunddle, activity等。

本文讲解#1的使用方法和测试场景。

  • 当前面的环境变量设置好以后,可测试现有bucket内容,也可从创建bucket开始,点击Data & Derivatives 右侧的 + 号,弹出输入框,输入bucket的名字和生存周期。

Screen Shot 2020-02-16 at 10.41.31 PM.png

Screen Shot 2020-02-16 at 10.42.27 PM.png

等待片刻,一个新的bucket创建好,并在列表中出现。右键这个bucket节点,几个菜单供选择,包括查看bucket基本信息 【View Bucket Details】,该命令将调用Forge端口,把返回值显示到右侧的临时文件中。及其方便!
Screen Shot 2020-02-16 at 10.43.29 PM.png

  • 点击【Upload Object】,提示选择一个测试模型文件,确定文件名,接着提示选择文件的类型。如果不清楚什么类型,选择application/octet-stream.

Screen Shot 2020-02-16 at 10.47.11 PM.png

文件开始上传

Screen Shot 2020-02-16 at 10.50.01 PM.png

文件上传成功后,显示在bucket节点的展开节点中。此时尚未有转换数据,

Screen Shot 2020-02-16 at 10.51.35 PM.png

  • 右键此文件节点,出现多个可选菜单。点击【Translate Object】

Screen Shot 2020-02-16 at 10.52.46 PM.png

转换过程开启,状态显示在文件节点下方:

Screen Shot 2020-02-16 at 10.54.31 PM.png

  • 转换成功后,出现所有的3D数据和2D数据列表

Screen Shot 2020-02-16 at 10.55.36 PM.png

  • 右键某个数据节点,选择【Preview Derivatives】,一个加载数据到Forge Viewer的过程启动!

Screen Shot 2020-02-16 at 10.56.58 PM.png

稍等片刻,右侧的文件窗口中模型加载完毕!很酷! VSCode中直接看模型😎想看看2D也可同时进行查看:

Screen Shot 2020-02-16 at 11.23.23 PM.png

  • 如果想查看模型的层次结构,点击【View Derivatives Tree Json】. 等待片刻,一个json数据文件产生。

Screen Shot 2020-02-16 at 11.01.24 PM.png

同理,点击【view Derivatives Properties Json】将获取构件属性json数据

Screen Shot 2020-02-16 at 11.09.29 PM.png

  • 最激动的一个功能,直接下载SVF数据包!选择文件节点的【Download Object Derivatives as SVF/F2D】.选择一个文件夹,所有的SVF数据资源将依次下载。

Screen Shot 2020-02-16 at 11.15.33 PM.png

还有好些其它功能菜单,常见的测试场景全覆盖。相信给各位朋友的开发带来更多帮助。如果您觉得还不够,可以自行拓展源码!Petr分享在他的个人Github中:
https://github.com/petrbroz/v...

查看原文

赞 1 收藏 0 评论 2

梁晓冬 发布了文章 · 2020-02-03

共克时艰!开工大吉!Forge团队给大家拜年 !

WechatIMG498.jpeg

在这个特殊的时期,Forge团队向大家致以新春诚挚的问候,特别向战斗在疫情一线的各行各业的工作者和Autodesk的客户朋友们致以崇高敬意!!

今年的开工,有着特殊的使命感。跟随逆行者,开拓业务和应用创新不会因病毒而却步,Forge团队和大家共克时艰!我们正在计划系列在线分享会,和大家介绍Forge的应用动态,开发技术,一些常见的应用场景等。可能有些朋友还暂时无法返回到工作现场,或已经开始远程办公,希望这些内容的分享能为大家解决方案的开发帮助,我们也热切期待和朋友们的线上交流。敬请关注微信公众号的通知和动态。

过去的1年,Forge动态丰富,不仅新的功能,还有开发技巧,应用样例和客户新故事,全球博客和Forge代码样例库有密集的更新。借此开工之际,小编拣选了几个内容,供给大家参考。

Viewer 7.11版本发布

Viewer7.0以来,迭代的步伐更加快速。今天7.11正式上线,和以往一样,添加了一些新API,例如:

  • 增加GuiViewer3D.registerCustomizeToolbarCB可设置画布缩放的自定义触发回调,返回viewer句柄和当前高宽
  • viewer.addEventListener的option增加priority选项,以标记是否该回调函数优先触发
  • 支持显示PDF中的填充样式
  • 2D图纸的邮件菜单增加选项,定位到对应3D对象
  • 2D PDF增加可控”线条动画”的设置LOADING_ANIMATION。

也修复了一些问题,例如viewer.finish()中进行内存释放等。具体请查阅Viewer 7.11发布通知
部分方法小编还未用过,各位朋友若有问题,请联系forge.help@autodesk.com
如果您还在用较早版本的Viewer,请及时升级到新版,并综合查看是不是有一些API在某个版本已发生调整,或也有哪些新API可以用的上。Viewer的变更记录有详细说明

Forge系列介绍 视频(英文)

大家的老朋友,Forge合作伙伴咨询部高级总监Jim Quanci几年前曾做过43分钟的Forge概览,帮助客户理解Forge的特点和可以带来的价值。这几年Forge的平台技术能力有了迅猛的发展,应用案例场景创新多样性。仅一个43分钟视频无法涵盖这些精彩的内容。因此Jim特别计划录制新的视频,以系列专题来介绍Forge技术和应用案例,供给大家参考,并启发更多创新可能。计划如下:

主题1: Forge概览 (已放到优酷)
主题2: 数据可视化和分析
主题3: 数字孪生
主题4: AR/VR/MR/XR
主题 5: 集成SaaS平台的应用
主题6: 产品目录
主题 7: 自动化设计

Screen Shot 2020-02-03 at 12.19.42 PM.png

Ionic/Capacitor跨平台集成Viewer

跨平台集成Forge Viewer技术是应用热点。这篇博客是跨平台系列内容的其中一个专题,黄欣老师深入浅出介绍了如何在Angular & TypeScript 项目结合Ionic 和 Capacitor来实现跨平台的集成。Ionic 是跨平台的开发框架,而Capacitor为Ionic提供的优化组件,实现高效的原生app集成 。源代码工程在:
https://github.com/dukedhx/viewer-ioniccapacitor-angular

C926AE82-D294-4F67-93DA-4BA95A07853E.jpeg

BIM 360 Model Coordination (模型协调) API 测试版发布
去年11月美国AU大会上,BIM 360 Model Coordination API 测试版发布,这个API是对应BIM 360的模型协调模块。模型协调的核心功能是对阶段聚合模型进行碰撞检测,根据检测结果提供给协调方决策,设计方做出相应设计变更,解决碰撞问题。API提供了丰富的功能,包括发起碰撞检测,获取碰撞的原始结果(距离,模型ID,构件ID等),构件属性的S3查询,碰撞视图等。

在其他微信文章中,我们将进一步介绍此API。您也可通过model coordination或clash关键字在Forge博客或代码库中查询到相关信息 。

main.png

BIM 360 Cost API发布

今年1月,BIM 360 Cost (成本管控) API 测试版发布!Cost API全覆盖BIM 360的产品功能,包括成本,预算变更,跟踪,协调,变更单等。让您的应用能无缝集成到其它成本管理平台,数据库,分包商管理流程等,及时掌握整个项目的财务状况,对方案执行和调整,物资采购,施工进展提供重要的自动化,智能化手段。

在其它微信文章中,我们将进一步介绍此API。您也可通过cost关键字在Forge博客或代码库中查询到相关信息

screen_shot_2020-01-07_at_11.43.03_pm.png

客户动态:
本期我们来看一个客户故事:挪威的NoConsult,是北欧的一家欧特克最大的合作伙伴。 他们承接的咨询项目:链接阿尔卑斯山 20公里的高速路,包含复杂的项目模型体系,路,桥,隧道,地形,以及相关的建筑,村落等。基于Forge的数据互联能力,创建数字孪生方案,实现桥隧体系的智能设计和运维。借助最新的Forge能力,该项目亮点:

  • 可以加载和管理及其超大的模型数据,高效的定位检索BIM构件信息
  • 目前超过2000用户,办公室和实地多领域无延迟协作
  • 目前以超过10万文档量
  • 能耗减少20%

ISYProsjekt1.png

Screen Shot 2020-02-03 at 12.40.12 PM.png

更多Forge客户故事,请查阅[【Forge成功故事】], 或Forge博客中的案例介绍

timg (1).jpeg
(图片来源:http://www.sohu.com/)

查看原文

赞 2 收藏 1 评论 1

梁晓冬 回答了问题 · 2019-08-20

Autodesk forge 材质丢失问题

源文件什么格式的?如果FBX,目前Forge没有转换材质。而Obj之类的,可以通过复合文转换(附上材质定义和图片)方式进行。

关注 2 回答 1

梁晓冬 回答了问题 · 2019-08-20

forge 里怎么让背景变透明

如果是想把viewer叠加到一些底图(例如GIS地图)之上,在地图上对模型做位置调整,布局等,据我所了解和实验的,目前无解..Viewer 目前的渲染方案是采用RGB的RenderContext,但去掉了alpha,因此你操作alpha的确不会有什么效果。
即便可能把viewer本身的元素(包括背景)透明化,但并不是最顶层的div透明。我曾尝试把最顶层的div设置opacity,但它会影响所有内容,包括模型,模型也会开始透明。对于2维图纸,尚可,但3维模型就不合适了。
有一个需求已经录入,希望Viewer能支持透明背景,你可以记录一下需求号 LMV-3742。但这个需求不是那么很快就能实现的。

另鉴于基于网页性能以及其它因素制约,或许可以考虑ARKit的方案更为合适:https://github.com/TimvanSche...

关注 2 回答 1

梁晓冬 回答了问题 · 2019-07-11

解决2D图纸如何做移动?

目前没有发布方法,我根据现有API提供的思路,对顶点buffer进行了操作,实现一定程度的移动,可参考看看。注意:这不是官方的正式方案,也没有实现所有场景,也没有做详细测试。无法对【使用造成的新情况和后果】做支持。

https://forge.autodesk.com/bl...

关注 2 回答 1

梁晓冬 赞了回答 · 2019-07-10

解决Autodesk Forge如何关闭模型树已展开的节点?

冬哥说的是选中的情况,不过当我们选中构件又点击空白后这样的话模型树还是打开的,但是没有选中的构件。所以针对这种情况结合冬哥的代码做了一些改进。

第一步:获取所有除去第一级的父节点(因为1是第一级根节点,因为7.0之前使用包含1的数组操作会空白模型树~)

第二步:获取到的数组我们理解成ms.selectedNodes就行了。。剩下的就是循环了

关注 3 回答 2

梁晓冬 关注了问题 · 2019-07-08

解决Autodesk Forge如何关闭模型树已展开的节点?

Autodesk Forge如何关闭模型树已展开的节点?

关注 3 回答 2

梁晓冬 赞了回答 · 2019-07-05

autodesk forge多模型聚合之后如何获取所有模型的dbid?

祝顺利~~~

/**
 * 初始化viewer
 * @function L_GetAllDbIds
 * @param {object} model forgeviewer的模型句柄
 */
function L_GetAllDbIds(model) {

    let instanceTree = model.getData().instanceTree;

    let allDbIds = Object.keys(instanceTree.nodeAccess.dbIdToIndex);

    return allDbIds;
}

// 拿到模型队列
let _modelList=viewer.impl.modelQueue().getModels();

// 拿到你想要的东西
_modelList.map(model=>{
    let list=L_GetAllDbIds(model);
    console.log(" >LJason< 日志:dbId",list);
});

关注 2 回答 1

梁晓冬 回答了问题 · 2019-07-04

解决Autodesk Forge如何关闭模型树已展开的节点?

如果节点已经选中,可以如下实现关闭展开:

let ms = viewer.modelstructure 
        for(let i in ms.selectedNodes)
        {
            console.log(ms.selectedNodes[i]);
            ms.selectedNodes[i].forEach(
                k=>ms.tree.setCollapsed(ms.tree.delegates[0],k,true)
                )
        }

关注 3 回答 2

梁晓冬 评论了文章 · 2019-05-16

Autodesk Forge Viewer 信息本地化技术分析

注:本文是个人调试分析所得,非官方文档,请酌情选用参考。文中分析的数据由https://extract.autodesk.io转换下载而来。

谈到信息本地化,个人觉得包含三个方面的内容:

1) Forge Viewer的操作菜单名,提示字串,错误提示字串等

图片描述

2) 原始模型结构节点名或构件额外属性的名和值,例如在Navisworks中额外的附加属性

图片描述

图片描述

3) 常规属性的名和值, 即任何模型可能会出现的缺省属性名和值,例如截图中的,Item,Color, Material等

图片描述

Forge在转换原始模型的时候,对于#2中的内容存储到objects_attrs.json.gz之中,所以#2中提到的本地化内容是直接可以显示的。应该无需额外的工作。

而谈到#1 和 #3,首先Forge转换服务会配置不同语言包,在Forge Viewer数据包层次结构中位于:res\locales. 每种语言包中有个allstrings.json,其中包括了#1的所有字串对应的翻译配对,#3中部分字串的翻译配对。Forge Viewer的JavaScript库封装了名为i18n的语言翻译类,用于调用对应语言包资源的和翻译字串的查询。

图片描述

默认情况下,是英文环境,调取的是res\locales\en 的资源(其实无需翻译)。当切换语言时,i18n会根据设置的语言,刷新i18n,调取对应的语言包到浏览器内存。而Forge Viewer怎么又去把界面上显示出来的英文字串替换成英文呢?经过调试分析,发现在大多数的界面字串的DOM元素创建过程中,Viewer的JavaSript库都赋予了一个名为 data-i18n 的属性,而i18n有个方法叫做localize,用于遍历所有含有 data-i18n 的属性DOM元素,根据语言包得到本地化字串,再替换div显示的字串。

图片描述

所以,如果想切换到某个语言版本,调用i18n的setLng和localize方法即可。zh-HANS是简体中文版。

Autodesk.Viewing.i18n.setLng('zh-HANS')
Autodesk.Viewing.i18n.localize()

但是,如前面提到的,语言包只是包含了部分常规字串的翻译,如果遇到没有包含的常规字串怎么办呢? 例如,本例中的语言包并没有对Item,Color, Material进行翻译,所以即使切换了语言,它们仍旧是英文。

首先能想到的折中办法是:先在对应语言包提供好翻译,例如allstrings.json添加Item,Color, Material的本地化语言字串,不过实际测试发现,不管用 :( 经过调试发现,在Viewer的JavaScript库新建每一条属性或属性类别时,并没有设置赋予了名为 data-i18n 的属性,虽然代码里是有这个分支,但无法通过简单的方式干预,设置该选项。也不建议去直接改造Viewer的JavaScript代码 (官方对改造后的JavaScript产生的问题不保证给予支持)

图片描述

最后,想出一个办法:在切换语言的时候,搜索出所有属性或属性类别的DOM元素,如果没有data-i18n 的属性,则加上,最后再调用一次i18n.localize。此方法只需额外写一个函数调用即可,不用改动Viewer的JavaScript代码。只是需要在适当的时机触发一下。

function swtichLanguage(lng)
        {
            //加载语言资源
            Autodesk.Viewing.i18n.setLng('zh-HANS',{localizeCategory:true},function(cb){
            
                //寻找所有属性和属性类别的DOM元素  
                
                Array.prototype.forEach.call (document.querySelectorAll ('div.propertyName,div.categoryName'), function (eachDOM){
                 
                    //赋予'data-i18n'属性
                    var if_i18n = eachDOM.getAttribute('data-i18n');
                    if(if_i18n === null){
                        var text =  eachDOM.innerHTML;
                        eachDOM.setAttribute('data-i18n', text); 
                    }                
                });

                //翻译替换
                Autodesk.Viewing.i18n.localize(); 

            }); 

        };

图片描述

注意:

1.由于allstrings.json只在离线模式下能够修改,所以本法不适用于在线访问模式。已就此向开发部提交了需求

2.也和开发部提交了另外一个需求,希望在JavaScript库中能把属性和属性类别也加上data-i18n属性,而不用额外的操作

3.为了提高性能,语言包的加载对每个应用只加载一次,假设加载后又去修改是用不了的。因此需要将此缓存的资源剔除掉,再加载。这个技术相信各位都有办法。

查看原文

认证与成就

  • 获得 80 次点赞
  • 获得 35 枚徽章 获得 1 枚金徽章, 获得 7 枚银徽章, 获得 27 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2017-02-08
个人主页被 4.6k 人浏览