news 2026/4/18 10:37:05

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/18 8:47:42

Hunyuan-MT-7B能否用于军事战术指令的跨语言传达

Hunyuan-MT-7B能否用于军事战术指令的跨语言传达 在一场跨国联合反恐演习中,中方指挥官用中文下达指令:“向3号高地发起佯攻,掩护主力迂回。” 几秒钟后,盟军作战终端上便出现了准确的英文翻译——“Launch a feint attack on Hi…

作者头像 李华
网站建设 2026/4/18 8:01:10

传统下载工具VS AI生成:效率对比实测

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 请开发一个性能测试对比程序:1.分别实现传统手动编写的下载管理器和使用AI生成的版本 2.对比两者的开发时间 3.测试两者的下载速度 4.比较内存占用 5.分析代码质量 6.提…

作者头像 李华
网站建设 2026/4/18 8:37:37

MCP中MLOps工具怎么用?90%工程师忽略的三大关键配置

第一章:MCP中MLOps工具的核心价值与应用场景在现代机器学习项目管理平台(MCP)中,MLOps工具已成为保障模型高效迭代、稳定部署和持续监控的关键支撑。它们通过自动化流程、标准化实践和跨团队协作机制,显著提升了从实验…

作者头像 李华
网站建设 2026/4/18 10:04:47

STRNCPY vs 现代C++:性能对比与替代方案

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 请生成一个性能测试程序,对比:1. strncpy 2. std::string 3. std::copy 4. memcpy在不同数据量下的性能表现。要求包含:- 测试框架 - 计时逻辑 …

作者头像 李华
网站建设 2026/4/18 10:40:11

1小时搭建XX00日志监控原型系统

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个简易的XX00系统日志监控原型,要求:1)模拟生成XX00系统日志数据流,2)实现实时日志显示面板,3)基础的关键词过滤功能&#xf…

作者头像 李华
网站建设 2026/4/18 8:55:43

为什么说Hunyuan-MT-7B是当前最实用的开源翻译模型之一

为什么说Hunyuan-MT-7B是当前最实用的开源翻译模型之一 在全球化内容爆炸式增长的今天,跨语言沟通早已不再是“锦上添花”,而是企业出海、科研协作、文化传播乃至政府治理中的刚性需求。从社交媒体上的多语种评论,到跨国企业的内部文档流转&a…

作者头像 李华