news 2026/7/1 10:51:38

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/7/1 16:21:29

新思考电机冲刺港股:前9个月营收14.6亿利润9706万 估值24亿

雷递网 雷建平 1月16日新思考电机日前递交招股书,准备在港交所上市。新思考电机最近一次融资是2023年,当时募资1亿,投后估值24亿。前9个月营收14.57亿 期内利润9706万新思考电机成立于2014年,是一家微型精密马达制造商&#xff0c…

作者头像 李华
网站建设 2026/6/24 23:15:01

AI如何赋能SIOT开发:从代码生成到智能优化

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个基于AI的SIOT设备管理系统原型,要求包含以下功能:1. 通过自然语言描述自动生成设备连接代码(MQTT/CoAP协议)2. 智能诊断设备…

作者头像 李华
网站建设 2026/6/29 3:55:08

交通运输十五五规划专题汇总(2026-01-05更新)

交通运输 “十五五” 规划(2026-2030 年)是我国构建现代化综合交通运输体系的中长期战略部署,聚焦 “安全、便捷、高效、绿色、经济” 目标,涵盖以下核心专题:一是基础设施网络优化,包括高铁主通道贯通、国…

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

Charles抓包零基础入门:从安装到第一个抓包

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个面向初学者的Charles入门交互教程,包含:1. 分步安装指南(Windows/Mac) 2. 基础界面导览 3. 第一个HTTP抓包演示 4. 常见术语解释 5. 简单问题排查。…

作者头像 李华
网站建设 2026/6/24 4:57:34

在AI技术能快速实现想法的时代,挖掘潜在需求成为关键——某知名深度学习论文实现库的需求分析

a. 内容描述 核心功能定位:该项目是一个简单、清晰且带有详细解释的PyTorch神经网络及相关算法的实现集合。其核心定位在于通过代码实现与并排展示的解释说明,帮助学习者更好地理解和掌握各类深度学习算法。关键应用场景:主要服务于希望深入理…

作者头像 李华
网站建设 2026/7/1 12:32:36

零信任时代下MCP架构重构指南:90天完成安全转型路径

第一章:MCP架构与零信任融合的核心理念在现代企业安全体系中,MCP(Multi-Cloud Platform)架构与零信任安全模型的深度融合已成为应对复杂网络威胁的关键路径。传统边界防御机制在多云环境中逐渐失效,资源动态分布、身份…

作者头像 李华