首页 > 其他分享 >从头开始一个vtk.js项目

从头开始一个vtk.js项目

时间:2023-11-16 15:44:48浏览次数:24  
标签:从头开始 const vtk kitware js webpack import

从头开始一个vtk.js项目

初始化项目

 mkdir my-vtkjs-app
 cd my-vtkjs-app
 npm init

安装 @kitware/vtk.js 依赖

npm install @kitware/vtk.js

对于这个例子,我们将使用webpack来构建我们的应用程序。

npm install -D webpack-cli webpack webpack-dev-server

项目脚手架

我们需要先处理一些工程脚手架。让我们首先创建一些目录。

mkdir dist src

在dist/中,我们将创建一个index.html

<!doctype html>
<html>
  <head>
    <meta charset="utf-8" />
  </head>
  <body>
    <script src="./main.js"></script>
  </body>
</html>

此外,我们将添加一些脚本,使运行构建命令更容易。

   "scripts": {
+    "build": "webpack --progress --mode=development",
+    "start": "webpack serve --progress --mode=development --static=dist",
     "test": "echo \"Error: no test specified\" && exit 1"
   }

在你的应用中使用vtk.js

将以下代码添加到src/index.js中

import '@kitware/vtk.js/Rendering/Profiles/Geometry';

import vtkFullScreenRenderWindow from '@kitware/vtk.js/Rendering/Misc/FullScreenRenderWindow';

import vtkActor           from '@kitware/vtk.js/Rendering/Core/Actor';
import vtkMapper          from '@kitware/vtk.js/Rendering/Core/Mapper';
import vtkCalculator      from '@kitware/vtk.js/Filters/General/Calculator';
import vtkConeSource      from '@kitware/vtk.js/Filters/Sources/ConeSource';
import { AttributeTypes } from '@kitware/vtk.js/Common/DataModel/DataSetAttributes/Constants';
import { FieldDataTypes } from '@kitware/vtk.js/Common/DataModel/DataSet/Constants';

const controlPanel = `
<table>
  <tr>
    <td>
      <select class="representations" style="width: 100%">
        <option value="0">Points</option>
        <option value="1">Wireframe</option>
        <option value="2" selected>Surface</option>
      </select>
    </td>
  </tr>
  <tr>
    <td>
      <input class="resolution" type="range" min="4" max="80" value="6" />
    </td>
  </tr>
</table>
`;

// ----------------------------------------------------------------------------
// Standard rendering code setup
// ----------------------------------------------------------------------------

const fullScreenRenderer = vtkFullScreenRenderWindow.newInstance();
const renderer = fullScreenRenderer.getRenderer();
const renderWindow = fullScreenRenderer.getRenderWindow();

// ----------------------------------------------------------------------------
// Example code
// ----------------------------------------------------------------------------

const coneSource = vtkConeSource.newInstance({ height: 1.0 });
const filter = vtkCalculator.newInstance();

filter.setInputConnection(coneSource.getOutputPort());
filter.setFormula({
  getArrays: inputDataSets => ({
    input: [],
    output: [
      { location: FieldDataTypes.CELL, name: 'Random', dataType: 'Float32Array', attribute: AttributeTypes.SCALARS },
    ],
  }),
  evaluate: (arraysIn, arraysOut) => {
    const [scalars] = arraysOut.map(d => d.getData());
    for (let i = 0; i < scalars.length; i++) {
      scalars[i] = Math.random();
    }
  },
});

const mapper = vtkMapper.newInstance();
mapper.setInputConnection(filter.getOutputPort());

const actor = vtkActor.newInstance();
actor.setMapper(mapper);

renderer.addActor(actor);
renderer.resetCamera();
renderWindow.render();

// -----------------------------------------------------------
// UI control handling
// -----------------------------------------------------------

fullScreenRenderer.addController(controlPanel);
const representationSelector = document.querySelector('.representations');
const resolutionChange = document.querySelector('.resolution');

representationSelector.addEventListener('change', (e) => {
  const newRepValue = Number(e.target.value);
  actor.getProperty().setRepresentation(newRepValue);
  renderWindow.render();
});

resolutionChange.addEventListener('input', (e) => {
  const resolution = Number(e.target.value);
  coneSource.setResolution(resolution);
  renderWindow.render();
});

运行应用程序

添加源文件后,使用webpack开发服务器运行应用程序

npm run start

导航到http://localhost:8080,您应该有一个锥体的交互式3D可视化,类似于SimpleCone示例。

标签:从头开始,const,vtk,kitware,js,webpack,import
From: https://www.cnblogs.com/ccxiaosong/p/17836432.html

相关文章

  • 使用js写一个音乐音谱图
    我们经常看到在听乐音的时候,会有音谱图随着音乐的节奏不断变化给人视觉上的享受,那么我们通过js来实现以下这个效果,下面是简单的效果图 首先我们需要有一个绘制音频的函数functiondraw(){//请求下一帧动画animationId=requestAnimationFrame(draw);//获取......
  • Vue3实战 - 第一章 node.js/npm安装、配置
    一、node.js 安装(windows)1、下载并安装nodehttps://nodejs.org/en安装到 D:\Java\nodes 路径2、配置环境变量检查是否安装成功3、配置全局包存放目录和缓存目录npmconfigsetprefix"D:\nodejs\node_global"npmconfigsetcache"D:\nodejs\node_cache"4、安......
  • js获取抖音弹幕
    functiondom(){   //创建一个MutationObserver实例   letmutationObserver=newMutationObserver(function(mutationsList,observer){     for(varmutationofmutationsList){       console.log("用户:",mutation.target.las......
  • python3 json.dumps(OrderDict类型) 报错:TypeError: Object of type datetime is not
    chatgpt给出的解决方案,在json.dumps()函数调用中传入default参数来指定如何处理datetime对象importjsonfromdatetimeimportdatetimedefdatetime_handler(obj):ifisinstance(obj,datetime):returnobj.__str__()#另一种处理,转换为自定义格式化字符串......
  • 网页调试(css,html,js)获取资源链接等
    进入调试模式F12或者右键检查在元素栏点击相应的组件可以查看html源码,图片视频音频链接等,或者点击组件右键检查还可以查看组件css布局变化html元素源码可以看到class类名,触发事件以及style样式在css上的改变是实时的,刷新页面会失效html的改变需要双击,同样刷新页面......
  • js中判断obj中是否含有某个属性的方法
    一般而言,比较常用的有in,hasOwnProperty,比较undefined。首先我们先定义一个对象letobj={a:1,b:2,d:undefined}hasOwnProperty()表明它查看对象自身的属性console.log(obj.hasOwnProperty('a'))//......
  • nodejs "Client does not support authentication protocol requested by server; con
    登录mysql输入以下命令:--选择mysql数据库:usemysql--laremehpe是登录用户名ALTERUSER'laremehpe'@'localhost'IDENTIFIEDBY'password'PASSWORDEXPIRENEVER;--laremehpe->用户名,123456->密码ALTERUSER'laremehpe'@'localhos......
  • 【随手记】解析 JSON 中的 Null 值遇到的问题
    在Java中解析JSON字符串时,不同的库会对JSON中的null值有不同的处理方式。本文探讨阿里巴巴的JSONObject和net.sf.json.JSONObject在处理null值时的差异。阿里巴巴的JSONObject阿里巴巴的JSONObject.parseObject方法,在解析JSON字符串时,会将JSON中的null......
  • 一些Js常用小方法总结
    1.js找出字符串中,出现最多次数的字母<scripttype="text/javascript">functiontest(){varstr="adadfdfseffserfefsefseeffffftsdg";varmaxLength=0;//命名一个变量放置字母出现的最高次数并初始化为0varresult='';//命名一个变量放置结果输入while(str!=''){/......
  • Node JS 多进程
    在Node.js中,可以使用多个进程来处理文件,并发执行任务以提高性能和效率。多进程可以提高应用程序的性能和可靠性,但同时也会带来一些额外的开销和复杂性问题优点可以高效利用多核CPU,将许多并发请求分配到不同的进程中处理,来提高应用程序性能。提高可靠性,多进程互相隔离,当一个......