You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vispy中set_face_colors修改网格面颜色无效的问题解决

Vispy中调用set_face_colors修改立方体面颜色无效的解决方案

你的代码存在两个关键问题导致颜色修改不生效:

  1. 错误覆盖Mesh对象:你在按键响应中将cube1.mesh_data.set_face_colors()的返回值赋值给了cube1,但set_face_colors方法无有效返回值(实际返回None),这会导致原有的Mesh视觉对象被覆盖,自然无法更新显示。
  2. 未触发视觉对象更新:修改MeshData的数据后,需要主动调用Mesh对象的update()方法,通知Vispy重绘该视觉元素。

以下是修正后的完整代码:

from vispy import app, scene, geometry
import numpy as np

class MonCanvas(scene.SceneCanvas):
    def on_key_press(self,event):
        global cube1, c1data
        print("You pressed '{}'".format(event.text))
        if event.text == 'a':
            # 直接修改已有的MeshData,无需重新赋值cube1
            c1data.set_face_colors([[0,0,1,1],[0,0,1,1],[0,1,0,1],[0,1,0,1],[1,1,1,1],[1,1,1,1],[1,1,0,1],[1,1,0,1],[1,0,0,1],[1,0,0,1],[1,0.5,0,1],[1,0.5,0,1]])
            # 触发Mesh对象重绘
            cube1.update()

fenetre = MonCanvas(title="Fenêtre principale", size=(2000,1000), keys="interactive")

view = fenetre.central_widget.add_view()
view.camera = 'turntable'
view.camera.distance = 10

c1data = geometry.MeshData(vertices = np.array([[0.5,0.5,-0.5],[0.5,-0.5,-0.5],[-0.5,0.5,-0.5],[-0.5,-0.5,-0.5],[0.5,0.5,0.5],[0.5,-0.5,0.5],[-0.5,0.5,0.5],[-0.5,-0.5,0.5]]), edges = np.array([[0,1],[0,2],[0,4],[3,1],[3,2],[3,7],[5,1],[5,4],[5,7],[6,2],[6,4],[6,7]]), faces = np.array([[1,2,3],[0,1,2],[5,6,7],[4,5,6],[0,1,5],[0,5,4],[2,3,7],[2,7,6],[1,3,7],[1,7,5],[0,2,6],[0,6,4]]))
c1data.set_face_colors([[0,0,1,1],[0,0,1,1],[0,0,1,1],[0,0,1,1],[0,0,1,1],[0,0,1,1],[0,0,1,1],[0,0,1,1],[0,0,1,1],[0,0,1,1],[0,0,1,1],[0,0,1,1]])
cube1 = scene.visuals.Mesh(meshdata = c1data)
view.add(cube1)

c2data = geometry.MeshData(vertices = np.array([[0.5,0.5,0.5],[0.5,-0.5,0.5],[-0.5,0.5,0.5],[-0.5,-0.5,0.5],[0.5,0.5,1.5],[0.5,-0.5,1.5],[-0.5,0.5,1.5],[-0.5,-0.5,1.5]]), edges = np.array([[0,1],[0,2],[0,4],[3,1],[3,2],[3,7],[5,1],[5,4],[5,7],[6,2],[6,4],[6,7]]), faces = np.array([[1,2,3],[0,1,2],[5,6,7],[4,5,6],[0,1,5],[0,5,4],[2,3,7],[2,7,6],[1,3,7],[1,7,5],[0,2,6],[0,6,4]]))
c2data.set_face_colors([[0,0,1,1],[0,0,1,1],[0,1,0,1],[0,1,0,1],[1,1,1,1],[1,1,1,1],[1,1,0,1],[1,1,0,1],[1,0,0,1],[1,0,0,1],[1,0.5,0,1],[1,0.5,0,1]])
cube2 = scene.visuals.Mesh(meshdata = c2data)
view.add(cube2)

fenetre.show()
app.run()

关键修改说明:

  • 删除错误的cube1 = cube1.mesh_data.set_face_colors(...)语句,改为直接调用c1data.set_face_colors()修改颜色数据
  • 添加cube1.update()触发视觉对象重绘,确保颜色修改实时显示
  • 简化按键判断逻辑(直接用event.text == 'a'即可,无需额外格式化)

内容的提问来源于stack exchange,提问作者Emilie Lemaire

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 02:32:01