์๋
ํ์ธ์, ์ต๊ทผ์ Mayavi๋ฅผ 4.4.4์์ 4.5.0์ผ๋ก ์
๋ฐ์ดํธํ์ต๋๋ค. ์
๋ฐ์ดํธ ํ mlab
ํจ์ axes()
์ฌ์ฉํ ๋ ์์ธ๋ฅผ ๊ด์ฐฐํ๊ณ ์์ต๋๋ค. ๋ค์์ ํ
์คํธ ์ฝ๋์
๋๋ค(์ค๋ฅ๋ฅผ ์ผ์ผํค๋ ์ค์ ์ฃผ์์ผ๋ก ํ์๋จ).
from mayavi import mlab
from numpy import pi, sin, cos, mgrid
dphi, dtheta = pi/250.0, pi/250.0
[phi,theta] = mgrid[0:pi+dphi*1.5:dphi,0:2*pi+dtheta*1.5:dtheta]
m0 = 4; m1 = 3; m2 = 2; m3 = 3; m4 = 6; m5 = 2; m6 = 6; m7 = 4;
r = sin(m0*phi)**m1 + cos(m2*phi)**m3 + sin(m4*theta)**m5 + cos(m6*theta)**m7
x = r*sin(phi)*cos(theta)
y = r*cos(phi)
z = r*sin(phi)*sin(theta)
s = mlab.mesh(x, y, z)
mlab.axes(color=(0.9,0.9,0.9)) # LINE CAUSING ERROR
mlab.show()
Windows ๋ฐ aconda ํ๊ฒฝ์์ ์์ ์ฝ๋๋ฅผ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค.
ํ์ ๋ฉ์์ง(์์):
Exception
In c:\anaconda\lib\site-packages\mayavi-4.5.0-py2.7-win-amd64.egg\tvtk\tvtk_base.py:569
TypeError: SetInputData argument 1:method requires a vtkDataSet, a vtkPolyDataNormals was provided. (in _wrap_call)
์ฝ์ ์ฐฝ์ ๋ฉ์์ง:
No handlers could be found for logger "mayavi.core.common"
Exception occurred in traits notification handler.
Please check the log file for details.
Exception occurred in traits notification handler for object: <mayavi.tools.decorations.Axes object at 0x0000000011AC00A0>, trait: extent, old value: [0 0 0 0 0 0], new value: [-1.53801118 1.53801118 -2. 2.27326963 -1.53801118 1.53801118]
Traceback (most recent call last):
File "C:\Anaconda\lib\site-packages\traits\trait_notifiers.py", line 340, in __call__
self.handler( *args )
File "C:\Anaconda\lib\site-packages\mayavi-4.5.0-py2.7-win-amd64.egg\mayavi\tools\decorations.py", line 373, in _extent_changed
axes.module_manager.source.outputs[0].bounds
AttributeError: 'PolyDataNormals' object has no attribute 'bounds'
์ถ๊ฐ ์ ๋ณด
์์ ์์ธ๊ฐ ๋ฐ์ํ๋ ํ๊ฒฝ
์ด์ ์ฒด์ : ์๋์ฐ 10
Python ์ค์น: Anaconda๋ฅผ ์ฌ์ฉํ์ฌ Python 2.7 ์ค์น
Mayavi ํจํค์ง: mayavi 4.5.0 py27_0 menpo
VTK ํจํค์ง: vtk 7.0.0 py27_0 menpo
PyQt ํจํค์ง: pyqt 5.6.0 py27_1
์ ์ฝ๋๊ฐ ์ ์์ ์ผ๋ก ์คํ๋๋ ํ๊ฒฝ
์ด์ ์ฒด์ : ์๋์ฐ 7
Python ์ค์น: Anaconda๋ฅผ ์ฌ์ฉํ์ฌ Python 2.7 ์ค์น
Mayavi ํจํค์ง: mayavi 4.4.4 py27_0 menpo
VTK ํจํค์ง: vtk 7.0.0 py27_0 menpo
PyQt ํจํค์ง: pyqt 4.11.4 py27_5
๊ฐ์น๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ค์ ์กฐ๊ฑด์์ ์ด ์ค๋ฅ๋ฅผ ๋ณต์ ํ์ต๋๋ค.
์ด์ ์ฒด์ : ์๋์ฐ 10
Python ์ค์น: Anaconda๋ฅผ ์ฌ์ฉํ์ฌ Python 2.7 ์ค์น
Mayavi ํจํค์ง: Mayavi 4.5.0 py27_0
VTK ํจํค์ง: vtk 6.3.0 py27_1
PyQt ํจํค์ง: pyqt 4.11.4 py27_4
conda install mayavi=4.4
์ฌ์ฉํ์ฌ ๋ค์ด๊ทธ๋ ์ด๋ํ๋ฉด * ์ฝ๋๊ฐ ์๋ํฉ๋๋ค.
๋ง์ผ๋น -> 4.4.0
VTK -> 5.10.1
*๊ด๋ จ ์๋ ์ฐธ๊ณ ์ฌํญ - ์ด๊ฒ์ numpy๋ฅผ 1.10์์ 1.9.3์ผ๋ก ๋ค์ด๊ทธ๋ ์ด๋ํ์ฌ Spyder๋ฅผ ์์์ํค๋ฏ๋ก ์๋์ผ๋ก ๋ค์ ์ ๊ทธ๋ ์ด๋ํด์ผ ํฉ๋๋ค.
๋๋ ์ฌ๊ธฐ์ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์๋ฌด๋ ๋จ์๊ฐ ์์ด?
์ฌ์ ํ ๊ด์ฌ์ด ์๋ค๋ฉด Jeitan๊ณผ ์ ์ฌํ ๊ตฌ์ฑ์ ์ฌ์ฉํ์ฌ ๋์ผํ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ผ๋ฉฐ update_pipeline์์ mayavi\modules\axes.py๋ฅผ ํธ์งํ์ฌ ๋ค์์ ๋ณ๊ฒฝํ์ต๋๋ค.
self.configure_input_data(self.axes, src.outputs[0])
์๊ฒ:
self.configure_input_data(self.axes, src.outputs[0].output)
(์ ์๋ PolyDataNormals ์ ํ์ด๊ณ ํ์๋ DataSet์์ ํ์๋ PolyData์ ๋๋ค.)
๋๋ ๋ํ ๋ฌธ์ ์ ์ง๋ฉดํ๋ค.
@jdonegan ๊ทํ์ ์ ์์ผ๋ก ๋ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค:+1: . ์๋์ผ๋ก ์ํํ ํ์๊ฐ ์๋๋ก ์์ ์ฌํญ์ ๊ฒ์ํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋๋ ๋ํ์ด ๋ฌธ์ ๊ฐ ์์๊ณ @jdonegan ์ ์์ ์ฌํญ์ด ์ ์๋ํ์ต๋๋ค. PR์ ์ ์ถํ๋ ค๊ณ ํ์ง๋ง @prabhuramachandran ์ด ์ด๋ฏธ ๋ฌธ์ ์ ์ค์ ๋ค์์ผ๋ก ๊ต์ฒดํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ์์ ํ๋ ์ปค๋ฐ์ ํธ์ํ ๊ฒ ๊ฐ์ต๋๋ค.
self.configure_input(self.axes, src.outputs[0])
ํผ๋์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ด ๋ฌธ์ ๋ฅผ ๋ซ์์ผ ํฉ๋๊น?
๋ง์ฐฌ๊ฐ์ง๋ก, decorations.py์ 373ํ์๋ ๋์ผํ ๋ฌธ์ ์ ์ ์ฌํ ์์ ์ฌํญ์ ์ ์ฉํด์ผ ํฉ๋๋ค.
์ถ.์ถ.๋ฒ์ = \
axis.module_manager.source.outputs[0].output.bounds
์ค๋ฅ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด
"AttributeError: 'PolyDataNormals' ๊ฐ์ฒด์ 'bounds' ์์ฑ์ด ์์ต๋๋ค."
๋ฐ๋ผ์ ์ปค๋ฐ 996fb25๊ฐ ๋ฌธ์ ์ ์ผ๋ถ๋ง ์์ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
@TinghuiWang์ด ์ธ๊ธํ๋ฏ์ด ์ด๊ฒ์ ์ฌ๋ฌ ๊ณณ์์ ์์ ๋์ด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ํ๋กฏ ํธ์ถ์ ๋ฐ๋ผ(์ ๋ plot3d ๋ points3d์์ต๋๋ค) ๋ค์ ๋ณ๊ฒฝํด์ผ ํ ์๋ ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ด ๊ณ ์ณค๋ค.
mayavi\modules\axes.py
๋ผ์ธ 173์์ ๋๋ ๋ณ๊ฒฝํ๋ค.
self.configure_input_data(self.axes, src.outputs[0])
์๊ฒ
data = src.outputs[0] if not hasattr(src.outputs[0], 'output') else src.outputs[0].output
self.configure_input_data(self.axes, data)
๋ง์ฐฌ๊ฐ์ง๋ก \mayavi\tools\decorations.py
ํ 372์์ ๋๋ canged
axes.axes.ranges = axes.module_manager.source.outputs[0].bounds
์๊ฒ
src = axes.module_manager.source
data = src.outputs[0] if not hasattr(src.outputs[0], 'output') else src.outputs[0].output
axes.axes.ranges = data.bounds
๊ณ ์ณ์ฃผ์ธ์ ์ฌ๋ฌ๋ถ. ์ถ์ ์ ๋ง ํ์ํฉ๋๋ค.
์์ ๋ฐฉ๋ฒ์ ๋ฐ๋ฅด๋ฉด ๋ฌธ์ ์ ์ผ๋ถ๋ง ํด๊ฒฐํ์ง๋ง ์ฌ์ ํ ์์ธ๊ฐ ์์ต๋๋ค.
Exception occurred in traits notification handler for object: <mayavi.tools.decorations.Axes object at 0x11a41ce60>, trait: extent, old value: [0 0 0 0 0 0], new value: [ -2. 17. -2. 17. -4.85316642
6.54683358]
NoneType: None
์ด๋ฏธ์ง์ ์ถ ๋ ์ด๋ธ์ด ์์ต๋๋ค.
๋๊ตฌ๋ ์ง ๋์ธ ์ ์์ต๋๊น? ๊ฐ์ฌ ํด์!
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ฌ์ ํ ๊ด์ฌ์ด ์๋ค๋ฉด Jeitan๊ณผ ์ ์ฌํ ๊ตฌ์ฑ์ ์ฌ์ฉํ์ฌ ๋์ผํ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ผ๋ฉฐ update_pipeline์์ mayavi\modules\axes.py๋ฅผ ํธ์งํ์ฌ ๋ค์์ ๋ณ๊ฒฝํ์ต๋๋ค.
self.configure_input_data(self.axes, src.outputs[0])
์๊ฒ:
self.configure_input_data(self.axes, src.outputs[0].output)
(์ ์๋ PolyDataNormals ์ ํ์ด๊ณ ํ์๋ DataSet์์ ํ์๋ PolyData์ ๋๋ค.)