1. 程式人生 > >關於xtk.js的使用(醫療影像處理外掛)

關於xtk.js的使用(醫療影像處理外掛)

由於公司專案需要,我學習了xtk.js,用於顯示obj、vtk、mtl等檔案中的內容。效果如圖:


xtk.js能夠實現obj檔案的顯示、3D影像的視口改變、影像移動、放大縮小,並能夠適配平板端。

我主要是使用外掛中的介面。

xtk.js是讀取直接讀取檔案的,因此不能讀取檔案內容,需要封裝一個FIle物件或者Blob物件來使用。

以上是我在專案中需要用到的外掛。

minicolor.js是一個很好用的顏色選擇器外掛,會用到jquery.ui中的東西。

使用如下:用於改變mesh的顏色。

sidebar是可以自己寫的一個樣式檔案(不重要),會用到jquery.ui中的東西。

下面著重說一下xtk.js的使用過程。

這次專案中我主要用到了mesh(網格)物件->這個物件需要自定義,是xtk中很小的一部分。


這是我需要用到的,而xtk中提供的如下:


而這些資料是用於一個叫X的物件的;


這就是X物件中的mesh需要用到我們剛才建立的data。

實際上有:

volume = new X.volume();
mesh = new X.mesh();
fibers = new X.fibers();
等X物件的屬性。

結束了上面的一些準備工作,以及DOM操作後進行檔案讀取:

下面這個函式是讀取檔案的入口


//解析檔案內容並建立3d物件(Parse file data and setup X.objects
function parse(data) { var fname = data['mesh']['file'][0].name.split(".")[0].toString().replace(" ", ''); // 初始化檔案讀取 initializeRenderers(); //設定影像的mesh(影象顏色和透明度) if (data['mesh']['file'].length > 0) { mesh[fname] = new X.mesh();// we have a mesh mesh[fname].file = data['mesh']['file'].map(function
(v) { return v.name; }); mesh[fname].filedata = data['mesh']['filedata']; ren3d.add(mesh[fname]);// add the mesh } ren3d.camera.position = [0, 500, 0]; ren3d.render(); }
//建立3d影像的物件
function initializeRenderers() {

    if (ren3d) {
        return;
}
    _webgl_supported = true;
try {
        ren3d = new X.renderer3D();// 建立 XTK renderers
ren3d.container = 'imageBox';
ren3d.init();
ren3d.interactor.onMouseWheel = function (e) {};
} catch (Error) {
        window.console.log('WebGL *not* supported.');
_webgl_supported = false;
$('#imageBox').empty();// 出現異常或瀏覽器不支援則刪除3d物件
}
    ren3d.onShowtime = function () {
        for (var i = 0; i < files.length; i++) {
            var curfname = files[i].name.split(".")[0].toString().replace(" ", '')
            mesh[curfname].opacity = meshObj[curfname].opacity; //---------------------------初始化影像透明度---------------------------
mesh[curfname].color = meshObj[curfname].color;//---------------------------初始化設定影像顏色---------------------------
}
    };
}

通過以上操作,就可以實現我的專案功能了。

然而,在遠端檔案讀取的過程中會遇到很多問題:

1、大型檔案的非同步請求問題:用到了閉包來保證檔案順序即使用立即執行函式(function(){}());

2、大型檔案傳輸速度慢:壓縮後再傳輸進行解壓縮(zip.js);

3、xtk.js工作時遇到很多的大型檔案同時載入會出現問題:緩衝區分配失敗——需要對影像進行降維處理,問題還在解決中,或許還可以從three.js的學習中找到解決方案。

相關推薦

關於xtk.js的使用醫療影像處理外掛

由於公司專案需要,我學習了xtk.js,用於顯示obj、vtk、mtl等檔案中的內容。效果如圖: xtk.js能夠實現obj檔案的顯示、3D影像的視口改變、影像移動、放大縮小,並能夠適配平板端。 我主要是使用外掛中的介面。 xtk.js是讀取直接讀取檔案的,因此不能讀取

dropload.js上拉載入外掛使用過程中遇到的坑

之前因為專案需要一個上拉載入的效果,然後無意中看到了此外掛,用了之後感覺挺好用的,就是坑太多,下面列出一些我在實際使用中遇到的問題。   注:如果在使用該外掛的時候遇到問題,確實無法解決,也沒有人能幫你解決,建議換外掛或者加群,群號也在上面的連結裡面。   問

jquery.form.jsajax表單提交

jquer 我們 使用 執行 sub 某個字段 httpd 區別 load Form插件地址: 官方網站:http://malsup.com/jQuery/form/ 翻譯地址:http://www.aqee.net/docs/jquery.form.plugin/jque

Codeforces 147B Smile HouseDP預處理 + 倍增

rep 驗證 bool 求一個 png != () long long mile 題目鏈接 Smile House 題意 給定一個$n$個點的有向圖,求一個點數最少的環,使得邊權之和$>0$,這裏的環可以重復經過點和邊。    滿足 $n <= 30

禁止頁面後退js兼容各瀏覽器

轉載 .cn sta chan div doc pushstate scrip https 轉載:https://www.cnblogs.com/ityouknow/p/5328996.html <script src="${ctxPath}/media/lib/j

1054 求平均值 sscanf(), sprintf()處理字串

本題的基本要求非常簡單:給定 N 個實數,計算它們的平均值。但複雜的是有些輸入資料可能是非法的。一個“合法”的輸入是 [−1000,1000] 區間內的實數,並且最多精確到小數點後 2 位。當你計算平均值的時候,不能把那些非法的資料算在內。 輸入格式: 輸入第一行給出

數學符合和公式數字影象處理相關

目錄 1. 數學符號 2. 函式空間 3. 集合的運算和公式 1. 數學符號    集,集合 x是集合X的一個元素 x不是集

webstorm的CSS外掛Emmet使用手冊

介紹 Emmet (前身為 Zen Coding) 是一個能大幅度提高前端開發效率的一個工具: 基本上,大多數的文字編輯器都會允許你儲存和重用一些程式碼塊,我們稱之為“片段”。雖然片段能很好地推動你得生產力,但大多數的實現都有這樣一個缺點:你必須先定

python初學一set的處理方式

一、集合的基本知識:            1、概念:                         理解:沒

python初學一dict的處理方式

一、字典的基本知識:              1、無序、可變,可以通過key索引,不可切片。              2、字典的key是不可變資料型

python初學一tuple的處理方式

一、tuple的基本特性:                                      

python初學一list的處理方式

一、列表的基本知識:     1、列表的建立:        ①、直接建立:                    &nbs

tomcat新增jvm引數eclipse的tomcat外掛

  tomcat新增jvm引數: 修改bin/catalina.sh,新增以下內容(定義了兩個變數logpath和datapath) JAVA_OPTS="-Dlogpath =/opt/logs  -Ddatapath=/opt/data"

python進階一檔案的處理方式

一、檔案操作方法:                           檔案操作的結果都是str,需要將 str轉化為 python 的物件才能後續進行操作。 1

react下批量匯入資料無法覆蓋原資料中的input值的問題利用antd design外掛

最近在寫一個需求,要求批量匯入資料後要把原來的列表資料全部覆蓋,包括匯入的資料與原來的列表資料重複的值。 如果匯入的資料中與原來列表的資料沒有重複的值,那就重新setState一下就好;那如果列表中有資料A,並且A的一個屬性通過input編輯過,此時再批量匯入資料包含資料A的話,那就不能覆蓋已經

Python:父子程序執行的先後順序多工處理2

#!/usr/bin/env python # coding:UTF-8 """ @version: python3.x @author:曹新健 @contact: [email protected] @software: PyCharm @file: 3.父子

前端系列教程之JS自認為有用程式碼

以下程式碼並不唯一,僅供參考 1.保證自己的頁面不被嵌入其他框架 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>保證自己的頁面不被嵌入其他框

(三) arcgis runtime for android 100.3開發學習載入影像切片服務

今天我們來學關於arcgis影像切片服務,注意這個例子的demo比較簡單。我們主要看一下ArcGISMapImageLayer類的UML圖。程式碼是非常簡單的。 來看一下原始碼,非常簡單。 package com.esri.arcgisruntime.sample

html移動端頁面適配js採用rem+百分比形式

(function(win, lib) { var doc = win.document; var docEl = doc.documentElement; var metaEl = doc.querySelector('meta[name="vie

如何安裝crx格式檔案如何安裝 Chrome外掛

2018.06.17更新:高能警告:Chrome 67 版本(大概2018.06.06的更新包)開始,外掛已經無法離線安裝啦,也就是自己無法使用crx檔案安裝外掛,而只能從chrome.google.com/webstore上安裝。檢視chrome版本號方法:位址列輸入 ch