【VTK+有限元后处理】实时剖切视图

news2025/7/9 16:58:59

目的

实现后处理结果云图的平面剖切视图。

方法

通过使用vtkPlaneWidget控件交互,得到剖切平面,通过vtkClipDataSet完成对vtkUnstructuredGrid有限元结果数据的剖切操作。渲染管线如下图所示 [ 1 ] ^{[1]} [1]

image-20221119155430445

代码实现

首先,我们先写一个创建vtkPlaneWidget控件的方法。

def clipFEModel_planeWidget(self, ugrid):
    # 三维切割平面控件构建
    self.planeWidget = vtk.vtkPlaneWidget()
    self.planeWidget.SetInteractor(self.interactor)  # 与交互器关联
    self.planeWidget.SetInputData(ugrid)  # 设置数据集,用于初始化平面,可以不设置
    self.planeWidget.SetResolution(1)  # 即:设置网格数
    self.planeWidget.GetPlaneProperty().SetColor(.2, .8, 0.1)  # 设置颜色
    self.planeWidget.GetPlaneProperty().SetOpacity(1)  # 设置透明度
    self.planeWidget.GetPlaneProperty().SetLineWidth(4)
    self.planeWidget.GetHandleProperty().SetColor(0, .4, .7)  # 设置平面顶点颜色
    self.planeWidget.GetHandleProperty().SetPointSize(1)
    self.planeWidget.GetHandleProperty().SetLineWidth(1)  # 设置平面线宽
    self.planeWidget.NormalToZAxisOn()  # 初始法线方向平行于Z轴
    self.planeWidget.SetRepresentationToWireframe()  # 平面显示为网格属性 SetRepresentationToSurface()
    self.planeWidget.SetCenter(ugrid.GetCenter())  # 设置平面坐标
    self.planeWidget.SetPlaceFactor(1.0)
    self.planeWidget.PlaceWidget()  # 放置平面
    self.planeWidget.On()  # 显示平面

    #  设置vtkPlaneCallback
    self.planeWidget.AddObserver(vtk.vtkCommand.InteractionEvent, vtkPlaneCall(self, ugrid))

上面代码中,通过self.planeWidget.AddObserver(vtk.vtkCommand.InteractionEvent, vtkPlaneCall(self, ugrid)),设置了平面控件的回调函数,传入ugrid参数,即我们的vtkUnstructuredGrid有限元剖切对象。回调类vtkPlaneCall定义如下:

class vtkPlaneCall:
    def __init__(self, sceneManager, ugrid):
        self.sceneManager = sceneManager
        self.ugrid = ugrid
        self.clippingPlane = vtk.vtkPlane()  # 剖切平面

    def __call__(self, caller, ev):
        caller.GetPlane(self.clippingPlane)  # 得到当前planeWidget的平面,作为剖切平面

        clipper = vtk.vtkClipDataSet()
        clipper.SetClipFunction(self.clippingPlane)  # 设置剖切方法为平面剖切
        clipper.SetInputData(self.ugrid)  # 设置剖切对象
        # clipper.SetValue(0.0)
        clipper.GenerateClippedOutputOn()
        clipper.Update()

        insideMapper = vtk.vtkDataSetMapper()
        insideMapper.SetInputData(clipper.GetOutput())
        insideMapper.ScalarVisibilityOn()

        self.sceneManager.drawOutline(self.ugrid)

        # clippedMapper = vtk.vtkDataSetMapper()
        # clippedMapper.SetInputData(clipper.GetClippedOutput())
        # clippedMapper.ScalarVisibilityOn()

        scalarRange = clipper.GetOutput().GetPointData().GetScalars().GetRange()
        title = clipper.GetOutput().GetPointData().GetScalars().GetName()
        self.sceneManager.drawScalarField(insideMapper, scalarRange, title)
        self.sceneManager.display()

这里的sceneManager参数为显示管理类,主要用于可视化渲染。drawScalarField函数为云图绘制函数,具体实现细节参加:【VTK+有限元后处理】可视化结果云图。

结果

在这里插入图片描述

参考

[1] 陈航. 基于Qt和VTK的铸造有限元后处理可视化系统研发[D]. 湖北:华中科技大学,2018. DOI:10.7666/d.D01542051.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/18176.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【软考软件评测师】第二十八章 计算机网络(网络设备网络地址)

【软考软件评测师】第二十八章 计算机网络(网络设备网络地址) 第二十八章 计算机网络(网络设备网络地址)【软考软件评测师】第二十八章 计算机网络(网络设备网络地址)第一部分 知识点集锦1.IPv4地址1&#…

Maya 贴图链接检测重链打包插件tjh_lost_textures_finder 1.3.2 更新发布

经常遇到maya工程文件贴图丢失或是路径链接更改的问题,对于贴图师和渲染师来说,海量的贴图重连 贴图和查找丢失贴图都是繁重耗时的工作。自从tjh_lost_textures_finder插件诞生以来,就一直再做此项工作的优化工作。 V1.3.2最新版更新内容&am…

Python爬虫:scrapy从项目创建到部署可视化定时任务运行

目录前言第一节 基本功能1、使用 pyenv创建虚拟环境2、创建 scrapy项目3、创建爬虫第二节 部署爬虫4、启动 scrapyd5、使用 scrapyd-client 部署爬虫项目6、使用 spider-admin-pro管理爬虫第三节 部署优化7、使用 Gunicorn管理应用8、使用 supervisor管理进程9、使用 Nginx转发…

简单shell批量文件转换gbk转为utf8编码

前言 matlab打包成exe时发现中文乱码,查找发现是gbk编码问题,找半天没找到合适的批量转换编码工具,就搞了个简单的shell来实现 准备工作 windows上有安装git bash命令行的话可以直接跑sh脚本,没有的话下一个很快。linux可以直接运行 代码 #!/bin/sh…

Answering the SDIs Step by Step

title: Notes of System Design No.01 —Answering the SDIs Step by Step description: Answering the SDIs Step by Step ’ date: 2022-05-04 14:52:06 tags: 系统设计 categories: 系统设计 In this Article , I will give a introduction to the guildline of answerin…

实验33:RFID门禁卡实验

OK,本实验分为两个部分 一、读卡 二、显示不同的卡的信息,同时继电器动作 01 硬件电路设计 读卡ID,两张卡,白卡和蓝卡,用txt文件名称体现 lib里面是库文件 把它放在自己的Arduino相应的文件家里,最好是…

MySQL数据库 -- 内置函数

今天来一起学习MySQL数据库的内置函数。 目录 日期函数 current_date current_time current_timestamp date_add date_sub datediff 实例演示 创建一张表,记录生日 创建一个留言表 字符串函数 charset concat length replace substring ucase…

第02章 变量

变量介绍 定义 定义:变量是程序的基本组成单位,变(变化)量(值) 变量有三个基本要素:数据类型 变量名称 值 变量相当于内存中的一个数据存储空间的表示,可以把变量看作是一个房间…

Pthread 并发编程(三)——深入理解线程取消机制

基本介绍 线程取消机制是 pthread 给我们提供的一种用于取消线程执行的一种机制&#xff0c;这种机制是在线程内部实现的&#xff0c;仅仅能够在共享内存的多线程程序当中使用。 基本使用 #include <stdio.h>#include <pthread.h>#include <assert.h>#incl…

数字化助力生产制造管理:专项生产管理系统

对于现今的生产企业而言&#xff0c;大家都是希望可以让整个制造生产过程更加的规范。同时越来越多的企业也已经分析到&#xff0c;在现有的社会生产方式中&#xff0c;如果不能够使加工业和制造业有先进的更为现代化的管理模式&#xff0c;是难以取得更好的竞争优势的。因此在…

Hadoop搭建

一、安装虚拟机 root 123456789 1、安装完系统后配置虚拟机ip vim /etc/sysconfig/network-scripts/ifcfg-ens33 DEFROUTE"yes" IPV4_FAILURE_FATAL"no" IPV6INIT"yes" IPV6_AUTOCONF"yes" IPV6_DEFROUTE"yes" IPV6_FAIL…

Git学习1

Git学习历程——努力入世的后浪~。 目录 一、Git安装 二、Git的初级使用 1.Git配置文件 2.Git基本命令 2.1 git init 2.2 ls -al 2.3 touch 2.4 git add 2.5 git commit -m 2.6 git status 2.7 git rm 2.8 git log 2.9 git reset --hard 2.10 git reflog 三、Git…

Linux操作系统面试题

Linux 概述 什么是Linux Linux是一套开源的类似Unix操作系统&#xff0c;是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络 为核心的设计思想&#xff0…

pytorch深度学习实战lesson22

第二十二课 LeNet LeNet神经网络由深度学习三巨头之一的Yan LeCun提出&#xff0c;他同时也是卷积神经网络 (CNN&#xff0c;Convolutional Neural Networks)之父。 LeNet主要用来进行手写字符的识别与分类&#xff0c;并在美国的银行中投入了使用。LeNet的实现确立了CNN的结构…

KKFileView在线预览禁用复制右键图片保存等操作

KKFileView在线预览禁用复制右键图片保存等操作一、需求背景二、修改kkFileview1.docx、doc文档不可复制、F12、右键、打印限制问题2.图片限制拖拽处理3.限制Excel转换后复制等操作4.PDF模式禁用右上角菜单栏一、需求背景 公司的运营平台&#xff0c;管理了一些如合同等内容&a…

【记录】软件自动修复工具Jaid配置、调试、运行及相关问题的解决方案

文章目录1. 前言2. Jaid原论文3. 环境4. 配置5. 调试6. 碰到的问题7. 一些发现8. 小结9. 参考文献1. 前言 创作开始时间&#xff1a;2022年11月18日20:50:38 如题&#xff0c;本文记录一下软件自动修复工具Jaid配置、调试、运行及相关问题的解决方案。 2. Jaid原论文 【ASE…

Jenkins+Docker+SVN实现SpringBoot项目半自动化部署

起因&#xff1a;入职后公司需要的技能&#xff0c;全部项目都使用的JenkinsDocker部署 Jenkins详细教程&#xff1a;知乎大佬写的文章 Docker详细教程&#xff1a;一个大佬的博客 SVN使用教程&#xff1a;一个大佬的博客 深入了解Jenkins、Docker、SVN&#xff0c;去上面三个大…

图书管理系统【java】

目录 &#x1f947;1.设计背景 &#x1f50e;2.设计思路 &#x1f511;3.book包 &#x1f4d7;3.1 Book类的实现 &#x1f4d5;3.2 BookList类的实现(书架) &#x1f511;4.user包 &#x1f4d9;4.1 User类的实现 &#x1f4d2;4.2 AdminUser&#xff08;管理员&#x…

MySQL导出csv数据文件

之前使用MySQL导出过一次线上数据&#xff0c;当时解决了乱码和数据没有正常分隔的问题。 参见这篇文章: 记一次“曲折“的MySQL数据导出 前几个月换了工作电脑&#xff0c;这几天又需要导出几十万的线上数据&#xff0c;在导出过程中还是出现了一些问题&#xff0c;再记录一…

OpenWrt 固件编译教程

一、编译环境准备 编译平台 阿里云 Ubuntu 20.04.5 LTS 安装编译环境依赖 sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3 python2.7 unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion f…