news 2026/5/8 21:26:46

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/5/3 11:29:25

Hunyuan-MT-7B在国际志愿者培训资料翻译中的应用

Hunyuan-MT-7B在国际志愿者培训资料翻译中的应用 在全球化日益深入的今天,语言不再仅仅是交流工具,更成为连接文化、推动协作的关键桥梁。特别是在国际志愿者项目中,来自不同国家和民族背景的参与者需要共享统一的培训内容——从安全守则到活…

作者头像 李华
网站建设 2026/5/5 21:55:18

【AI时代职场通行证】:MCP AI Copilot考试内容深度拆解与实战技巧

第一章:MCP AI Copilot考试概述与认证价值MCP AI Copilot认证是面向现代软件开发人员和云解决方案架构师的重要技术资质,旨在验证考生在使用AI驱动的开发工具、自动化编程辅助以及智能云服务集成方面的专业能力。该认证由微软推出,聚焦于开发…

作者头像 李华
网站建设 2026/5/1 4:54:40

为什么你的MCP云原生项目总延期?揭晓8大常见瓶颈及破局策略

第一章:MCP云原生应用开发的本质与挑战在当前快速演进的云计算环境中,MCP(Multi-Cloud Platform)云原生应用开发已成为企业构建弹性、可扩展和高可用系统的核心路径。其本质在于利用容器化、微服务架构、持续交付和动态编排等技术…

作者头像 李华
网站建设 2026/5/1 5:38:12

AI如何帮你轻松实现红黑树?快马平台一键生成代码

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 请生成一个完整的红黑树实现代码,包含以下功能:1. 节点插入与删除操作;2. 自动平衡功能(左旋、右旋、颜色调整)&#xf…

作者头像 李华
网站建设 2026/5/6 19:51:03

Azure容器部署性能优化,90%工程师忽略的4个关键配置

第一章:Azure容器部署性能优化概述在现代云原生架构中,Azure 容器实例(ACI)与 Azure Kubernetes 服务(AKS)已成为部署容器化应用的核心平台。为确保应用具备高响应性、低延迟和资源高效利用,性能…

作者头像 李华
网站建设 2026/5/1 6:21:26

Hunyuan-MT-7B支持批量文档翻译吗?解决方案来了

Hunyuan-MT-7B支持批量文档翻译吗?解决方案来了 在企业全球化内容生产、科研文献处理和多语言客户服务的日常工作中,一个反复出现的痛点是:如何高效地将几十页的PDF报告或Word文档从中文精准翻译成英文,同时保留原有段落结构与术语…

作者头像 李华