亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > HTML5 > 正文

基于 HTML5 WebGL 實現的醫療物流系統

2024-09-05 07:23:04
字體:
來源:轉載
供稿:網友

前言

物聯網( IoT ),簡單的理解就是物體之間通過互聯網進行鏈接。世界上的萬事萬物,都可以通過數據的改變進行智能化管理。IoT 的興起在醫療行業中具有拯救生命的潛在作用。
不斷的收集用戶信息并且實時的進行診斷,所以未來  IoT 肯定在醫療行業的應用會呈覆蓋性。下面是我最近做的一個醫療物流系統,用來觀察醫療物流過程。

ht官網鏈接:http://www.hightopo.com/cn-index.html

demo鏈接: https://www.hightopo.com/demo/pivas/
 

實現過程

增加光源

 整個原場景其實是非常暗的,所以需要使用燈光的效果照亮整個場景,使其接近真實世界的場景。

 我們看下對比。

light 的一些屬性:

type 代表燈光的類型

color 代表燈光的顏色

intensity 代表燈光的強度(1是最大值)

range 代表范圍

addLight() {        const skyBox = this.dm.getDataByTag('skyBox')        // 限制視野在天空球之內        this.gv.setSkyBox(skyBox)        const light = new ht.Light()        const lightSource = this.dm.getDataByTag('sunlight').p3()        const config = {            'light.type': 'point',            'light.color': 'white',            'light.intensity': 0.3,            'light.range': 10000        }        light.s(config)        light.p3(lightSource)this.dm.add(light) }

 

看向物體

 看到左下角的一個小窗口,其實是另一個3d場景,把它定位到左下角的,兩個場景都使用了反序列化( deserialize )。

 因為要定位醫療箱移動,所以這里使用到了 flyTo 方法 。

var renderCanvas = function (medical, duration) {    ht.Default.startAnim({       duration,       easing(v, t) {         return t       },       action(v, t) {         outScreenG3d.flyTo(medical, { direction: [-5, 3, 5], distance: 300 })       }    }) }

 

封裝動畫

如果要實現這么多的動畫,首先想到的是一個個物體進行移動的過程。醫療箱的行走、電梯的升降、傳送帶運送醫療箱等我們都可以對它們的動作進行封裝。

如圖可以看到醫療箱總是在動,所以定義了一個行走的動畫,每次醫療箱行走的距離、行走方向、動畫的配置都進行傳參。

這里要說明的參數:

1.node(對應的元素)

2.fn(動畫執行完進行回調的函數)

3.config(動畫配置)

4.coord(方向軸)

// 行走動畫walkAnim(node, fn, config, coord) {  const { duration, space } = config  const positionArray = node.p3()  let isShadow = false   let ShadowNode = null    // 如果移動的元素是icu車或者供應車的話 獲取它的陰影跟隨元素移動   if (node.getTag() === 'supply' || node.getTag() === 'icuCar') {     isShadow = true     ShadowNode = this.dm.getDataByTag(`${node.getTag()}Shadow`)   }   ht.Default.startAnim({     duration,     easing: function (t) {        return t      },      action(v, t) {        if (coord === 'x') {            node.p3(positionArray[0] + t * space, positionArray[1], positionArray[2])            isShadow && ShadowNode.p3(positionArray[0] + t * space, positionArray[1], positionArray[2])        } else if (coord === 'y') {            node.p3(positionArray[0], positionArray[1] + t * space, positionArray[2])            isShadow && ShadowNode.p3(positionArray[0], positionArray[1] + t * space, positionArray[2])         } else {           node.p3(positionArray[0], positionArray[1], positionArray[2] + t * space)           isShadow && ShadowNode.p3(positionArray[0], positionArray[1], positionArray[2] + t * space)         }      },      finishFunc() {         typeof fn === 'function' && fn(node)      }   })}

物體之間的影響

電梯的升降會影響很多東西,比如頻臺的移動會帶著傳送帶和醫療箱,這里我用到了 sethost 吸附方法(吸附:節點指定宿主,宿主進行改變會影響節點)。

很多場景下非常合適,我需要電梯升降的過程中帶用醫療箱和頻臺一起上升,還有醫療箱放到傳送帶的時候,醫療箱要動起來,感覺是這真的傳送帶在帶動醫療箱進行運動。

這里要說明的參數:

1.node(操作的電梯元素)

2.medicalKit(醫療箱)

3.fn(動畫執行完進行回調的函數)

4.status (電梯上升和下降的狀態)

5.config(動畫配置)

 

// 電梯升降動畫    elevatorAnim(node, medicalKit, fn, status, config) {        const self = this        // 獲取電梯的index 讓對應的頻臺也跟著動        const elevatorIndex = node.getTag().replace(/[^0-9]/ig, '') - 0        // 獲取醫療箱的index 控制電梯升降的距離        const medicalKitIndex = medicalKit.getTag().replace(/[^0-9]/ig, '') - 0        const positionArray = node.p3()        const station = self.dm.getDataByTag(`station${elevatorIndex}`)        //吸附宿主        station.setHost(node)        medicalKit.setHost(node)        // 設置升降狀態        if (elevatorIndex === 3) self.elevatorRunning = true        // 升降距離 status 為 0 的時候是下降 最低部位的距離是固定的 所以只需要控制上升的距離        const medicalKitLevel = self.returnMedicalKitLevel(medicalKitIndex)        // 電梯的屬性        // 最低點的位置 Lowest        // 如果有軌道的話 就去軌道的位置  否則就按照層數 orbitalP        // 第一層的位置  distance        let space        const addSpace = medicalKitIndex === 7 ? 100 : 0        if (status == 1) {            space = config.orbitalP ? config.orbitalP : config.distance + addSpace + (400 * medicalKitLevel)        } else {            space = config.Lowest        }        // 下降狀態時 醫療箱不會做動作        if (status === 0) {            medicalKit.setHost()        }        return ht.Default.startAnim({            duration: config.orbitalP ? 2000 : (medicalKitLevel === 0 && elevatorIndex == 3 ? 700 : 2500 + (medicalKitLevel * 1000)),            action(v, t) {                node.p3(                    positionArray[0],                    positionArray[1] + ((space - positionArray[1]) * t),                    positionArray[2]                )            },            finishFunc() {                station.setHost()                typeof fn === 'function' && fn(node)            }        })    }

 

動畫方法

 動畫的過程中有個問題需要處理就是等待電梯的動畫,醫療箱在動畫過程中,需要判斷電梯是否在上升,如果不在地面的話,需要等待。

 我的思路是,當醫療箱走到離電梯一點距離的時候,需要判斷電梯是否在上升狀態,如果是的話,需要調用動畫暫停的方法。

 當 elevatorRunning 為 false 的時候代表電梯沒有運動,否則在運動中。

 電梯動畫開始的時候設置為 true,結束后設置變量為 false,  就可以監控它的狀態了。

 ht.Default.startAnim 方法返回一個實例,利用 action 方法, 實現輪詢監聽動畫狀態,然后進行操作。

 當 elevatorRunning 為 true 的話, 使用 anim.pause() 暫停當前動畫。

 當 elevatorRunning 為 false 的話, 使用 anim.resume() 繼續當前動畫。

const anim = ht.Default.startAnim({  duration,  action(v, t) {    node.p3(       positionArray[0],       positionArray[1],       positionArray[2] - (tpMax - positionArray[2]) * t     );     if (index > 1 && self.elevatorRunning === true) {         if (node.p3()[2] <= stopMax) {           anim.pause();           const t = setInterval(() => {             if (self.elevatorRunning === false) {                anim.resume();                clearInterval(t);               }           }, 100);       }    }   },   finishFunc() {     typeof fn === "function" && fn();   }});

 

事件監聽(發布、訂閱)

 因為需要監聽某個當前動畫的結束,然后進行相機位移。

 如圖,我需要監聽第一個 3d 場景中顯示提示文字動畫結束,然后執行第二個 3d 場景的顯示。因為2個是不同的場景,是不能用回調的方法監聽到的,所以這里就用到了 eventBus 事件總線。

 下面是 eventBus 的使用,第一個參數代表要監聽的注冊函數名,第二個是回調函數。

// 事件總線 監聽事件eventbus.on('animation1', _ => {  const medical = dm.getDataByTag('medicalKit1')  renderView(medical, dm, gv)})

 

下面是 eventBus 發射的使用,第一個參數代表要觸發的函數名,第二個是發射給函數的參數。

// 觸發事件eventbus.emit("animation1", null); 

總結

 做完這個 demo 之后,除了對 HT for Web 更加熟練之外,對物聯網也有了更深刻的概念。

 我身為一名前端工作者,在這個時代感覺非常的自豪,因為我能通過自己的技能創造出許多能造福和改善人們生活的東西。

 希望大家看到我的 demo 能夠得到一些啟發,同時也要相信自己能夠創造不可能,為社會做出貢獻。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲aa在线观看| 欧美在线视频免费播放| 欧美大尺度激情区在线播放| 国产精品久久久久久久久久久不卡| 久久久久久亚洲精品不卡| 亚洲欧美国产视频| 精品国产乱码久久久久酒店| 亚洲精品一区久久久久久| 亚洲女人初尝黑人巨大| 久久伊人精品天天| 久久韩剧网电视剧| 2018中文字幕一区二区三区| 精品无人区乱码1区2区3区在线| 亚洲aⅴ男人的天堂在线观看| 精品久久久久久亚洲精品| 草民午夜欧美限制a级福利片| 成人免费观看a| 亚洲欧美中文日韩在线| 欧美午夜xxx| 日韩69视频在线观看| 亚洲石原莉奈一区二区在线观看| 日韩专区在线观看| 久久精品精品电影网| 国产精品专区第二| 一区二区三区天堂av| 欧美成人精品三级在线观看| 欧美国产第二页| 在线观看中文字幕亚洲| 久久精品视频网站| 久久夜精品香蕉| 91黑丝在线观看| 久久久久久尹人网香蕉| 韩国v欧美v日本v亚洲| 日韩国产精品亚洲а∨天堂免| 国产精品亚洲片夜色在线| 激情亚洲一区二区三区四区| 久久激情视频久久| 中文字幕av日韩| 欧美性猛交xxxx富婆弯腰| 国产成人av网址| 欧美日韩国产专区| 国产乱肥老妇国产一区二| 在线看福利67194| 亚洲天堂久久av| 亚洲精品一区二区网址| 午夜精品久久久99热福利| 黄色成人av网| 国产91色在线免费| 国产精品一区二区3区| 久久久久久18| 久久久免费高清电视剧观看| 亚洲18私人小影院| 视频在线观看一区二区| 在线亚洲欧美视频| 亚洲人成在线免费观看| 97视频人免费观看| 久久夜色精品国产亚洲aⅴ| 日韩欧美精品网址| 精品成人国产在线观看男人呻吟| 一区二区三区国产视频| 久久精品色欧美aⅴ一区二区| 丝袜一区二区三区| www.久久撸.com| 国产精品福利久久久| 欧美一区二区三区图| 国产99久久久欧美黑人| 韩国精品美女www爽爽爽视频| 久久精品成人一区二区三区| 亚洲色图第一页| 国产91久久婷婷一区二区| 国产精品18久久久久久麻辣| 久久久久久亚洲精品中文字幕| 成人免费视频97| 欧美俄罗斯乱妇| 色综合伊人色综合网| 国产精品成人v| 韩国v欧美v日本v亚洲| 日韩av电影手机在线| 成人春色激情网| 国产成人精品在线| 国产成人精品在线视频| 国产精品揄拍500视频| 亚洲综合一区二区不卡| 久久精品精品电影网| 久久影视三级福利片| 亚洲欧美中文日韩v在线观看| 日本欧美一二三区| 欧美日韩xxxxx| 国精产品一区一区三区有限在线| 亚洲欧美国产精品久久久久久久| 成人在线视频网站| 另类色图亚洲色图| 国产精品久久久久久久久久久久久久| 成人免费大片黄在线播放| 国产美女精品视频免费观看| 欧美大片va欧美在线播放| 亚洲桃花岛网站| 欧美日韩成人在线观看| 奇米一区二区三区四区久久| 97香蕉久久夜色精品国产| 久久久久久久久电影| 日韩亚洲综合在线| 国产精品成熟老女人| 91精品久久久久久久| 国产精品电影在线观看| 国产精品入口福利| 亚洲性69xxxbbb| 亚洲欧美日韩另类| 国产在线999| 色婷婷av一区二区三区久久| 久久国产精品视频| 欧美人与物videos| 亚洲性av在线| 国产www精品| 久久久久久久一区二区| 国产精品久久久久久久久久久新郎| 91久久久久久久久久久| 日韩精品在线观看视频| 日韩在线观看免费全| 精品国产31久久久久久| 91沈先生在线观看| 在线视频国产日韩| 日本欧美一二三区| 日韩中文字幕欧美| 日韩av片电影专区| 欧美电影免费播放| 欧美日韩激情美女| 91精品国产自产在线老师啪| 欧美精品成人在线| 国内精品模特av私拍在线观看| 亚洲第一天堂无码专区| 91色中文字幕| 亚洲国产精品电影| 欧美激情亚洲国产| 欧美日韩一区二区免费视频| 91精品国产综合久久香蕉的用户体验| 国产成人jvid在线播放| 狠狠爱在线视频一区| 日韩网站在线观看| 青青a在线精品免费观看| 狠狠爱在线视频一区| 91亚洲国产成人精品性色| 在线看福利67194| 2021久久精品国产99国产精品| 国产成人97精品免费看片| 欧美成人午夜视频| 亚洲激情在线观看视频免费| 中文字幕欧美日韩va免费视频| 91精品久久久久久久久不口人| 国产精品日日摸夜夜添夜夜av| 精品久久香蕉国产线看观看亚洲| 国产精品一区二区三| 日韩av电影手机在线| 亚洲国产91精品在线观看| 97久久久免费福利网址| 国产精品午夜视频| 久久久久久久久久久免费| 97国产在线观看| 日韩av电影手机在线观看| 日韩在线欧美在线| 久久精品夜夜夜夜夜久久| 亚洲国产精品热久久| 日韩在线观看免费高清完整版| 91社影院在线观看|