当前位置: 首页 > news >正文

Learning vtkjs之ImageStreamline

过滤器 流线

介绍

vtkImageStreamline - 在 vtkImageData 中积分流线

vtkImageStreamline 是一个过滤器,它从定义了向量场的 vtkImageData 输入中生成流线。此过滤器将在输入中查找向量(即 getVectors())。然后,它将使用龙格-库塔 2 法从第二个输入的点定义的起始种子集开始积分这些向量,直到达到指定的最大步数或流线离开域。

输出将是一个包含每条流线的折线的 vtkPolyData。目前,此过滤器不将任何输入场插值到流线的点。

效果

在这里插入图片描述

核心代码

数据生成

const vecSource = macro.newInstance((publicAPI, model) => {macro.obj(publicAPI, model); // make it an objectmacro.algo(publicAPI, model, 0, 1); // mixin algorithm code 1 in, 1 outpublicAPI.requestData = (inData, outData) => {// implement requestDataif (!outData[0]) {const id = vtkImageData.newInstance();id.setSpacing(0.1, 0.1, 0.1);const count = 10;id.setExtent(0, count - 1, 0, count - 1, 0, count - 1);const dims = [count, count, count];const newArray = new Float32Array(3 * dims[0] * dims[1] * dims[2]);let i = 0;for (let z = 0; z < count; z++) {for (let y = 0; y < count; y++) {for (let x = 0; x < count; x++) {newArray[i++] = Math.random() * x;const v = 0.1 * y;newArray[i++] = Math.random() * v;newArray[i++] = 0;}}}const da = vtkDataArray.newInstance({numberOfComponents: 3,values: newArray,});da.setName("vectors");const cpd = id.getPointData();cpd.setVectors(da);// Update outputoutData[0] = id;}};
})();

流线提取

 const fullScreenRenderer = vtkFullScreenRenderWindow.newInstance({background: [0, 0, 0],rootContainer: vtkContainerRef.current,});const renderer = fullScreenRenderer.getRenderer();const renderWindow = fullScreenRenderer.getRenderWindow();const planeSource = vtkPlaneSource.newInstance();// planeSource.setOrigin(0.05, 0.05, 0.05);// planeSource.setPoint1(0.05, 0.85, 0.05);// planeSource.setPoint2(0.05, 0.05, 0.85);planeSource.setOrigin(0.01, 0.0, 0.0);planeSource.setPoint1(0.01, 0.9, 0.0);planeSource.setPoint2(0.01, 0.0, 0.9);const sline = vtkImageStreamline.newInstance();sline.setIntegrationStep(0.01);sline.setInputConnection(vecSource.getOutputPort());sline.setInputConnection(planeSource.getOutputPort(), 1);const outlineFilter = vtkOutlineFilter.newInstance();outlineFilter.setInputConnection(vecSource.getOutputPort());context.current = {planeSource,renderer,renderWindow,};addRepresentation(sline, {diffuseColor: [0, 1, 1],lineWidth: 3,});addRepresentation(outlineFilter, {diffuseColor: [1, 0, 0],lineWidth: 1.5,});addRepresentation(planeSource, {representation: Representation.POINTS,pointSize: 10,});renderer.resetCamera();renderWindow.render();

全部代码都放到github上了
新坑_Learning vtkjs_git地址
关注我,我持续更新vtkjs的example学习案例

也欢迎各位给我提意见,技术交流~

大鸿

WeChat : HugeYen
WeChat Public Account : BIM树洞

做一个静谧的树洞君

用建筑的语言描述IT事物;

用IT的思维解决建筑问题;

共建BIM桥梁,聚合团队。

本学习分享资料不得用于商业用途,仅做学习交流!!如有侵权立即删除!!

相关文章:

  • URP - 公告牌的效果实现
  • 运维仙途 第2章 日志深渊识异常
  • 《多端统一的终极答案:X5内核增强版的渲染优化全解析》
  • AI赋能烟草工艺革命:虫情监测步入智能化时代
  • 栈与队列 Part 6
  • AI HR新范式:易路iBuilder如何通过“技术隐身,价值凸显”,成为HR身份转型的好帮手
  • 消防岗位技能竞赛流程方案策划
  • 【CUDA pytorch】
  • 基于连接感知的实时困倦分类图神经网络
  • kibana重建es索引
  • ShardingSphere5详细笔记
  • OpenCV-Python (官方)中文教程(部分一)_Day20
  • 软件架构选型之“如何选”
  • 生物化学笔记:神经生物学概论05 感受野 视觉中枢 高级视皮层中的信息走向
  • 【python实用小脚本-43】用Python自动发送生日祝福,让情感更高效
  • 希尔伯特第十问题:是一个伪命题
  • 时态--00--总述
  • 代码随想录打卡|Day31动态规划(最后一块石头的重量2、目标和、一和零)
  • 如何在 Linux 环境下使用 Certbot 自动生成 SSL 证书并部署到 Nginx 服务中
  • POSIX介绍
  • 净海护渔,中国海警局直属第一局开展伏季休渔普法宣传活动
  • 永辉超市回应顾客结算时被“反向抹零”:整改并补偿
  • “80后”蒋美华任辽宁阜新市副市长
  • 辽宁辽阳市白塔区一饭店发生火灾,当地已启动应急响应机制
  • 笔墨如何“构城”?上海美院城市山水晋京展出
  • 打造沪派水乡的“湿意”,上海正在保护营造一批湿地空间