婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 基于 HTML5 WebGL 實現(xiàn)的醫(yī)療物流系統(tǒng)

基于 HTML5 WebGL 實現(xiàn)的醫(yī)療物流系統(tǒng)

熱門標(biāo)簽:如何查看地圖標(biāo)注 惡搞電話機(jī)器人 黃石ai電銷機(jī)器人呼叫中心 電話機(jī)器人技術(shù) 智能電銷機(jī)器人被禁用了么 欣鼎電銷機(jī)器人 效果 ok電銷機(jī)器人 高德地圖標(biāo)注商戶怎么標(biāo) 地圖標(biāo)注軟件打印出來

前言

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

ht官網(wǎng)鏈接:http://www.hightopo.com/cn-index.html

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

實現(xiàn)過程

增加光源

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

 我們看下對比。

light 的一些屬性:

type 代表燈光的類型

color 代表燈光的顏色

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

range 代表范圍

addLight() {
        const skyBox = this.dm.getDataByTag('skyBox')

        // 限制視野在天空球之內(nèi)
        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 )。

 因為要定位醫(yī)療箱移動,所以這里使用到了 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 })
       }
    })
 }

 

封裝動畫

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

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

這里要說明的參數(shù):

1.node(對應(yīng)的元素)

2.fn(動畫執(zhí)行完進(jìn)行回調(diào)的函數(shù))

3.config(動畫配置)

4.coord(方向軸)

// 行走動畫
walkAnim(node, fn, config, coord) {
  const { duration, space } = config
  const positionArray = node.p3()
  let isShadow = false
   let ShadowNode = null
    // 如果移動的元素是icu車或者供應(yīng)車的話 獲取它的陰影跟隨元素移動
   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)
      }
   })
}

物體之間的影響

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

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

這里要說明的參數(shù):

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

2.medicalKit(醫(yī)療箱)

3.fn(動畫執(zhí)行完進(jìn)行回調(diào)的函數(shù))

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

5.config(動畫配置)

 

// 電梯升降動畫
    elevatorAnim(node, medicalKit, fn, status, config) {
        const self = this
        // 獲取電梯的index 讓對應(yīng)的頻臺也跟著動
        const elevatorIndex = node.getTag().replace(/[^0-9]/ig, '') - 0
        // 獲取醫(yī)療箱的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)
        // 設(shè)置升降狀態(tài)
        if (elevatorIndex === 3) self.elevatorRunning = true
        // 升降距離 status 為 0 的時候是下降 最低部位的距離是固定的 所以只需要控制上升的距離
        const medicalKitLevel = self.returnMedicalKitLevel(medicalKitIndex)
        // 電梯的屬性
        // 最低點的位置 Lowest
        // 如果有軌道的話 就去軌道的位置  否則就按照層數(shù) 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
        }
        // 下降狀態(tài)時 醫(yī)療箱不會做動作
        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)
            }
        })
    }

 

動畫方法

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

 我的思路是,當(dāng)醫(yī)療箱走到離電梯一點距離的時候,需要判斷電梯是否在上升狀態(tài),如果是的話,需要調(diào)用動畫暫停的方法。

 當(dāng) elevatorRunning 為 false 的時候代表電梯沒有運(yùn)動,否則在運(yùn)動中。

 電梯動畫開始的時候設(shè)置為 true,結(jié)束后設(shè)置變量為 false,  就可以監(jiān)控它的狀態(tài)了。

 ht.Default.startAnim 方法返回一個實例,利用 action 方法, 實現(xiàn)輪詢監(jiān)聽動畫狀態(tài),然后進(jìn)行操作。

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

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

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();
   }
});

 

事件監(jiān)聽(發(fā)布、訂閱)

 因為需要監(jiān)聽某個當(dāng)前動畫的結(jié)束,然后進(jìn)行相機(jī)位移。

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

 下面是 eventBus 的使用,第一個參數(shù)代表要監(jiān)聽的注冊函數(shù)名,第二個是回調(diào)函數(shù)。

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

 

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

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

總結(jié)

 做完這個 demo 之后,除了對 HT for Web 更加熟練之外,對物聯(lián)網(wǎng)也有了更深刻的概念。

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

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

標(biāo)簽:綏化 萍鄉(xiāng) 阿壩 中山 赤峰 金昌 盤錦 聊城

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《基于 HTML5 WebGL 實現(xiàn)的醫(yī)療物流系統(tǒng)》,本文關(guān)鍵詞  基于,HTML5,WebGL,實現(xiàn),的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《基于 HTML5 WebGL 實現(xiàn)的醫(yī)療物流系統(tǒng)》相關(guān)的同類信息!
  • 本頁收集關(guān)于基于 HTML5 WebGL 實現(xiàn)的醫(yī)療物流系統(tǒng)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美中文字幕一二三区视频| 国产激情精品久久久第一区二区| 久久99精品一区二区三区三区| 日韩欧美一卡二卡| 亚洲午夜精品一区二区三区他趣| 亚洲一级在线观看| 日韩一区二区三区在线视频| 久久久亚洲国产美女国产盗摄 | 亚洲精品国产视频| 亚洲国产中文字幕| 日本不卡不码高清免费观看| 韩国欧美一区二区| av在线不卡网| 欧美四级电影网| 欧美精品国产精品| 日本一区二区三级电影在线观看| 亚洲视频一区在线| 日韩国产高清在线| 成人黄动漫网站免费app| 欧美在线观看视频在线| 日韩一本二本av| 一区二区三区在线观看视频| 久久99久久99精品免视看婷婷| 亚洲大片在线观看| 99久久精品国产一区二区三区 | 午夜精品在线看| 国产麻豆日韩欧美久久| 欧美一区中文字幕| 视频一区中文字幕国产| 国产成人免费视频精品含羞草妖精 | 一区二区三区高清不卡| 美女视频黄久久| 成人禁用看黄a在线| 欧美综合一区二区| 亚洲欧洲精品一区二区三区 | 中文字幕一区免费在线观看| 亚洲成人动漫精品| www.日韩在线| 精品黑人一区二区三区久久| 一区二区三区四区在线免费观看| 国产成人午夜99999| 欧美美女一区二区在线观看| 国产精品久久久一本精品| 国产精品一区一区| 精品国产麻豆免费人成网站| 亚洲成人av一区| 欧美一区二区三区系列电影| 亚洲一区二区三区四区在线免费观看| 国产成人鲁色资源国产91色综 | 欧美精品xxxxbbbb| 亚洲bt欧美bt精品| 国产成人免费视频网站 | 久久国产剧场电影| 69av一区二区三区| 青娱乐精品在线视频| 久久综合色之久久综合| 精品日韩欧美在线| 色激情天天射综合网| 精品中文av资源站在线观看| 亚洲人成电影网站色mp4| 久久欧美中文字幕| 欧美男男青年gay1069videost| 国产综合久久久久久鬼色| 日本人妖一区二区| 一区二区在线免费观看| 国产九色精品成人porny| 日韩欧美国产电影| 久久国产精品色| 日韩欧美国产综合在线一区二区三区| 亚洲日本va午夜在线电影| 欧美人狂配大交3d怪物一区| 国产精品一区2区| 精品一区二区三区av| 亚洲黄色在线视频| 亚洲高清视频的网址| 亚洲aaa精品| 国产精品对白交换视频| 国产精品激情偷乱一区二区∴| 5月丁香婷婷综合| 日韩免费看的电影| 日韩精品一区二区三区在线播放| 欧美亚洲国产一区在线观看网站| av不卡在线播放| 欧美一区二区日韩一区二区| 色综合天天综合给合国产| 亚洲mv在线观看| 在线一区二区视频| 欧美日韩免费在线视频| 国产精品久久久久国产精品日日| 欧美日韩一区高清| 久久久国产一区二区三区四区小说| 日韩国产高清在线| 国产精品网站在线观看| 91啪在线观看| 日韩二区三区四区| 国产精品婷婷午夜在线观看| 一区二区三区在线看| 欧美久久久久久久久中文字幕| 国产精品99久久久久久有的能看| 欧美一区二区三区在线观看视频| 99在线精品视频| 91精品国产综合久久久久久久| 久久久久久久久一| 婷婷丁香激情综合| 日韩av一区二区在线影视| 国产999精品久久久久久绿帽| 欧美视频完全免费看| 韩日精品视频一区| 国产蜜臀97一区二区三区| 在线亚洲精品福利网址导航| 首页国产欧美久久| 精品国产伦理网| 欧美色图激情小说| 国产高清无密码一区二区三区| 国产精品欧美一区二区三区| 制服丝袜亚洲色图| 盗摄精品av一区二区三区| 亚洲午夜电影在线| 国产精品免费看片| 欧美一区二区三区四区在线观看| 国产一区二区三区av电影 | 久久久天堂av| 欧美一级专区免费大片| 国产精品美女久久久久久久| 国产大陆亚洲精品国产| 夜夜嗨av一区二区三区| 一道本成人在线| 久久综合久色欧美综合狠狠| 日本最新不卡在线| 日韩亚洲欧美在线| 国产成人在线观看| 国产女主播视频一区二区| 国产成人精品免费一区二区| 亚洲欧洲三级电影| 婷婷久久综合九色国产成人| 日韩精品在线看片z| 白白色亚洲国产精品| 国产精品123| 国产一区二三区| 美女视频第一区二区三区免费观看网站 | 欧美国产禁国产网站cc| 秋霞影院一区二区| 久久综合色播五月| 久久午夜羞羞影院免费观看| 国产suv精品一区二区883| 国产精品福利一区二区三区| 欧美日韩一区中文字幕| 加勒比av一区二区| 一区二区三区蜜桃网| 欧美mv和日韩mv的网站| 国产激情一区二区三区| 亚洲女女做受ⅹxx高潮| 久久嫩草精品久久久精品一| 国产成人精品免费视频网站| 国产一区二区免费在线| 久久久久久97三级| 色婷婷综合激情| 亚洲乱码国产乱码精品精可以看| 激情另类小说区图片区视频区| 国产精品欧美一级免费| 日韩欧美国产午夜精品| 亚洲蜜臀av乱码久久精品 | 国产主播一区二区三区| 无吗不卡中文字幕| 久久激五月天综合精品| 久久精品国产亚洲一区二区三区 | 亚洲六月丁香色婷婷综合久久| 亚洲视频每日更新| 三级影片在线观看欧美日韩一区二区| 在线观看精品一区| 国产原创一区二区| 高清av一区二区| 不卡一卡二卡三乱码免费网站| 国产精品香蕉一区二区三区| 免费成人你懂的| 精品一区二区三区在线观看国产 | 国产欧美日韩卡一| 国产色婷婷亚洲99精品小说| 亚洲一区视频在线观看视频| 丝袜美腿亚洲一区二区图片| 美女网站一区二区| 91亚洲精品久久久蜜桃| 日韩三级伦理片妻子的秘密按摩| 国产日产欧美精品一区二区三区| 日韩一卡二卡三卡国产欧美| 中文字幕一区二区日韩精品绯色| 秋霞成人午夜伦在线观看| 国产不卡高清在线观看视频| 韩国女主播一区| 亚洲一区二区三区三| 亚洲精品高清视频在线观看| 3d动漫精品啪啪1区2区免费| 日韩精品一区二区三区视频| 成人永久免费视频| 亚洲h精品动漫在线观看| 欧美成人三级电影在线| 色综合久久中文综合久久97| 91传媒视频在线播放| www.久久久久久久久| 欧日韩精品视频|