news 2026/4/15 15:53:10

AssignCellColorsFromLUT为每个单元格手动分配颜色的两种方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AssignCellColorsFromLUT为每个单元格手动分配颜色的两种方法

一:主要的知识点

1、说明

本文只是教程内容的一小段,因博客字数限制,故进行拆分。主教程链接:vtk教程——逐行解析官网所有Python示例-CSDN博客

2、知识点纪要

本段代码主要涉及的有①两种方法实现对网格面分配不同颜色


二:代码及注释

import vtkmodules.vtkInteractionStyle import vtkmodules.vtkRenderingOpenGL2 from vtkmodules.vtkCommonColor import vtkNamedColors from vtkmodules.vtkFiltersSources import vtkPlaneSource from vtkmodules.vtkCommonCore import vtkLookupTable, vtkUnsignedCharArray from vtkmodules.vtkRenderingCore import ( vtkActor, vtkColorTransferFunction, vtkPolyDataMapper, vtkRenderWindow, vtkRenderWindowInteractor, vtkRenderer ) from vtkmodules.vtkIOXML import ( vtkXMLPolyDataReader, vtkXMLPolyDataWriter ) def MakeLUT(tableSize): nc = vtkNamedColors() lut = vtkLookupTable() lut.SetNumberOfColors(tableSize) lut.Build() lut.SetTableValue(0, nc.GetColor4d("Black")) lut.SetTableValue(1, nc.GetColor4d("Banana")) lut.SetTableValue(2, nc.GetColor4d("Tomato")) lut.SetTableValue(3, nc.GetColor4d("Wheat")) lut.SetTableValue(4, nc.GetColor4d("Lavender")) lut.SetTableValue(5, nc.GetColor4d("Flesh")) lut.SetTableValue(6, nc.GetColor4d("Raspberry")) lut.SetTableValue(7, nc.GetColor4d("Salmon")) lut.SetTableValue(8, nc.GetColor4d("Mint")) lut.SetTableValue(9, nc.GetColor4d("Peacock")) return lut def MakeLUTFromCTF(tableSize): ctf = vtkColorTransferFunction() """ vtkColorTransferFunction 支持多种颜色插值空间, 可以理解为不同的颜色混合方式 | 函数 | 含义 | 说明 | | ---------------------------- | --------------- | ------------------------------ | | `SetColorSpaceToRGB()` | 在 RGB 空间插值 | 默认,直线混色(但有时色彩中间值偏灰) | | `SetColorSpaceToHSV()` | 在 HSV 空间插值 | 以色相方式混色,颜色过渡更平滑 | | `SetColorSpaceToDiverging()` | 在双向发散空间插值 | 用于“从中间值向两侧分化”的数据,比如温度偏差、差异、误差等 | | `SetColorSpaceToLab()` | 在感知均匀的 Lab 空间插值 | 颜色过渡更符合人眼感受 | """ ctf.SetColorSpaceToDiverging() ctf.AddRGBPoint(0.0, 0.085, 0.532, 0.201) ctf.AddRGBPoint(0.5, 0.865, 0.865, 0.865) ctf.AddRGBPoint(1.0, 0.677, 0.492, 0.093) # 建立ctf到lut的颜色映射 lut = vtkLookupTable() lut.SetNumberOfTableValues(tableSize) lut.Build() for i in range(0, tableSize): rgb = list(ctf.GetColor(float(i) / tableSize)) + [1] lut.SetTableValue(i, rgb) return lut def MakeCellData(tableSize, lut, colors): for i in range(tableSize): rgb = [0] * 3 lut.GetColor(float(i) / (tableSize - 1), rgb) ucrgb = list(map(int, [x * 255 for x in rgb])) colors.InsertNextTuple3(*ucrgb) def main(): nc = vtkNamedColors() resolution = 3 plane11 = vtkPlaneSource() plane11.SetXResolution(resolution) plane11.SetYResolution(resolution) plane11.Update() plane12 = vtkPlaneSource() plane12.SetXResolution(resolution) plane12.SetYResolution(resolution) plane12.Update() tableSize = max(resolution * resolution + 1, 10) # 通过LUT的颜色映射 lut1 = MakeLUT(tableSize) lut2 = MakeLUTFromCTF(tableSize) colorData1 = vtkUnsignedCharArray() colorData1.SetName("colors") colorData1.SetNumberOfComponents(3) MakeCellData(tableSize, lut1, colorData1) plane11.GetOutput().GetCellData().SetScalars(colorData1) colorData2 = vtkUnsignedCharArray() colorData2.SetName('colors') # Any name will work here. colorData2.SetNumberOfComponents(3) MakeCellData(tableSize, lut2, colorData2) plane12.GetOutput().GetCellData().SetScalars(colorData2) mapper11 = vtkPolyDataMapper() mapper11.SetInputConnection(plane11.GetOutputPort()) mapper11.SetScalarModeToUseCellData() mapper11.Update() mapper12 = vtkPolyDataMapper() mapper12.SetInputConnection(plane12.GetOutputPort()) mapper12.SetScalarModeToUseCellData() mapper12.Update() writer = vtkXMLPolyDataWriter() writer.SetFileName('pdlut.vtp') writer.SetInputData(mapper11.GetInput()) # This is set so we can see the data in a text editor. writer.SetDataModeToAscii() writer.Write() writer.SetFileName('pdctf.vtp') writer.SetInputData(mapper12.GetInput()) writer.Write() actor11 = vtkActor() actor11.SetMapper(mapper11) actor12 = vtkActor() actor12.SetMapper(mapper12) # Let's read in the data we wrote out. reader1 = vtkXMLPolyDataReader() reader1.SetFileName("pdlut.vtp") reader2 = vtkXMLPolyDataReader() reader2.SetFileName("pdctf.vtp") mapper21 = vtkPolyDataMapper() mapper21.SetInputConnection(reader1.GetOutputPort()) mapper21.SetScalarModeToUseCellData() mapper21.Update() actor21 = vtkActor() actor21.SetMapper(mapper11) mapper22 = vtkPolyDataMapper() mapper22.SetInputConnection(reader2.GetOutputPort()) mapper22.SetScalarModeToUseCellData() mapper22.Update() actor22 = vtkActor() actor22.SetMapper(mapper22) # Define viewport ranges. # (xmin, ymin, xmax, ymax) viewport11 = [0.0, 0.0, 0.5, 0.5] viewport12 = [0.0, 0.5, 0.5, 1.0] viewport21 = [0.5, 0.0, 1.0, 0.5] viewport22 = [0.5, 0.5, 1.0, 1.0] # Set up the renderers. ren11 = vtkRenderer() ren12 = vtkRenderer() ren21 = vtkRenderer() ren22 = vtkRenderer() # Setup the render windows renWin = vtkRenderWindow() renWin.SetSize(600, 600) renWin.SetWindowName('AssignCellColorsFromLUT'); renWin.AddRenderer(ren11) renWin.AddRenderer(ren12) renWin.AddRenderer(ren21) renWin.AddRenderer(ren22) ren11.SetViewport(viewport11) ren12.SetViewport(viewport12) ren21.SetViewport(viewport21) ren22.SetViewport(viewport22) ren11.SetBackground(nc.GetColor3d('MidnightBlue')) ren12.SetBackground(nc.GetColor3d('MidnightBlue')) ren21.SetBackground(nc.GetColor3d('MidnightBlue')) ren22.SetBackground(nc.GetColor3d('MidnightBlue')) ren11.AddActor(actor11) ren12.AddActor(actor12) ren21.AddActor(actor21) ren22.AddActor(actor22) iren = vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) renWin.Render() iren.Start() if __name__ == '__main__': main()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 10:24:24

AI一键搞定Docker安装GitLab,告别繁琐配置

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 请生成一个完整的Docker安装GitLab的解决方案。要求包含:1. 基于最新版GitLab CE的docker-compose.yml配置文件 2. 必要的环境变量配置 3. 持久化存储设置 4. 端口映射…

作者头像 李华
网站建设 2026/4/8 9:04:42

Hunyuan-MT-7B-WEBUI推理界面曝光:简洁易用,支持批量翻译

Hunyuan-MT-7B-WEBUI推理界面曝光:简洁易用,支持批量翻译 在多语言内容爆炸式增长的今天,企业、教育机构乃至个人创作者都面临着一个共同难题:如何快速、准确地完成跨语言沟通?尽管大模型时代的机器翻译早已不是新鲜事…

作者头像 李华
网站建设 2026/4/15 15:51:09

Packet Tracer下载后的基础设置:小白指南

从零开始玩转网络模拟:Packet Tracer安装后必做的几件事你是不是刚搜完“packet tracer下载”,兴冲冲地装好软件,点开却发现满屏英文、图标一堆、不知道从哪下手?别慌——这几乎是每个网络新手的“入门第一课”。今天我们就抛开那…

作者头像 李华
网站建设 2026/4/15 15:52:06

预告:2026光谷AI产业发展峰会1月25日召开 助力武汉抢抓AI浪潮

雷递网 乐天 1月6日由武汉东湖新技术开发区投资促进局指导,雷递网主办的《2026光谷AI产业发展峰会》将于2026年1月25日下午2点在武汉光谷皇冠假日酒店。本次《2026光谷AI产业发展峰会》的活动主旨是诚邀对武汉感兴趣的企业家、创业者、投资人到武汉交流与发展&#…

作者头像 李华
网站建设 2026/4/3 23:47:01

MCP数据加密实施路径(从入门到高阶的完整加密体系构建)

第一章:MCP数据加密概述在现代信息安全体系中,MCP(Multi-Channel Protocol)数据加密技术作为保障多通道通信安全的核心机制,广泛应用于金融、物联网和企业级网络通信场景。该技术通过集成对称与非对称加密算法&#xf…

作者头像 李华