Mayavi: triangular_mesh λ©΄ 색상 μ• λ‹ˆλ©”μ΄μ…˜

에 λ§Œλ“  2017λ…„ 01μ›” 26일  Β·  2μ½”λ©˜νŠΈ  Β·  좜처: enthought/mayavi

μ•ˆλ…•ν•˜μ„Έμš”, μ €λŠ” μ–Όκ΅΄ 색상에 ν•΄λ‹Ήν•˜λŠ” 데이터가 μžˆλŠ” μ‚Όκ°ν˜• 메쉬가 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ #253의 μ†”λ£¨μ…˜μ„ μ‚¬μš©ν•˜μ—¬ ν”Œλ‘―ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

mesh = mlab.triangular_mesh(self.vertices[:,0], self.vertices[:,1], self.vertices[:,2], self.triangles,representation='wireframe',opacity=0)
mesh.mlab_source.dataset.cell_data.scalars = color
mesh.mlab_source.dataset.cell_data.scalars.name = 'Cell data' 
mesh.mlab_source.update() 
mesh2 = mlab.pipeline.set_active_attribute(mesh,cell_scalars='Cell data') 
surf = mlab.pipeline.surface(mesh2)  

κ·ΈλŸ¬λ‚˜ μƒ‰μƒμ˜ λ³€κ²½ 사항을 μ• λ‹ˆλ©”μ΄μ…˜μœΌλ‘œ λ§Œλ“œλŠ” 방법을 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄,

@mlab.animate(delay=100)
def anim():
    f = mlab.gcf()
    for i in range(0,data.shape[0]):
        mesh.mlab_source.dataset.cell_data.scalars = data[i,:]
        mesh.mlab_source.dataset.cell_data.scalars.name = 'Cell data' 
        mesh.mlab_source.update()
        mesh2 = mlab.pipeline.set_active_attribute(mesh,cell_scalars='Cell data') 
        mlab.pipeline.surface(mesh2) 
        yield
anim()
mlab.show()

μ›ν•˜λŠ” λŒ€λ‘œ λ˜μ§€λ§Œ μ• λ‹ˆλ©”μ΄μ…˜μ΄ 진행됨에 따라 속도가 κΈ‰κ²©νžˆ 느렀져 κ²°κ΅­ μ‚¬μš©ν•  수 μ—†κ²Œ λ©λ‹ˆλ‹€. λ‚΄κ°€ μ‹œλ„ν•˜λŠ” λŒ€λΆ€λΆ„μ˜ λ³€κ²½(예: νŒŒμ΄ν”„λΌμΈ λͺ…λ Ή 제거)으둜 인해 이미지가 μ „ν˜€ μ—…λ°μ΄νŠΈλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ–Όκ΅΄ 색상을 μ—…λ°μ΄νŠΈν•˜λŠ” λ‹€λ₯Έ μ˜΅μ…˜μ΄ μžˆμŠ΅λ‹ˆκΉŒ?

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

@RomeshA

이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ ν•˜λ£¨λ‚˜ 이틀을 보내고 같은 예λ₯Ό λ”°λ₯΄κ³  μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ‹Ήμ‹ μ—κ²Œ 큰 감사!

λͺ¨λ“  2 λŒ“κΈ€

tvtk.PolyData μˆ˜λ™μœΌλ‘œ μƒμ„±ν•˜μ—¬ μ½”λ“œλ₯Ό 많이 μ •λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ‹€λ₯Έ 큰 λ³€ν™”λŠ” λ¬Έμ„œμ— PolyData.modified() λ©”μ„œλ“œκ°€ 그림을 μ—…λ°μ΄νŠΈν•˜λŠ” 데 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€κ³  μ œμ•ˆν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 이것은 λ‚˜λ₯Ό μœ„ν•΄ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λŒ€μ‹  VTKDataSource κ°€ PolyData λž˜ν•‘ν•˜λ―€λ‘œ VTKDataSource.update() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. ν‘œλ©΄ λΆ€λͺ¨

κ·Έλž˜μ„œ μ΅œμ’… μž‘μ—… μ½”λ“œλŠ”

from mayavi import mlab 
from tvtk.api import tvtk

polydata = tvtk.PolyData(points=self.vertices, polys=self.triangles)
polydata.cell_data.scalars = np.ravel(data[:,0].copy())
polydata.cell_data.scalars.name = 'celldata'
mesh = mlab.pipeline.surface(polydata)

@mlab.animate(delay=10)
def anim():
    for i in range(0,data.shape[0]):
        polydata.cell_data.scalars = np.ravel(data[:,i].copy())
        polydata.cell_data.scalars.name = "celldata" 
        # polydata.modified()  # does not work
        mesh.parent.parent.update() # works
        yield

anim()
mlab.show()

@RomeshA

이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ ν•˜λ£¨λ‚˜ 이틀을 보내고 같은 예λ₯Ό λ”°λ₯΄κ³  μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ‹Ήμ‹ μ—κ²Œ 큰 감사!

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰