ΠΡΠΈΠ²Π΅Ρ, Π½Π΅Π΄Π°Π²Π½ΠΎ Ρ ΠΎΠ±Π½ΠΎΠ²ΠΈΠ» Mayavi Ρ 4.4.4 Π΄ΠΎ 4.5.0. ΠΠΎΡΠ»Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Ρ Π½Π°Π±Π»ΡΠ΄Π°Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ mlab
function 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 ΠΈ anaconda Ρ Π²ΠΈΠΆΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ :
ΠΡΠΏΠ»ΡΠ²Π°ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ (ΠΎΠΊΠ½ΠΎ):
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'
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ
Π‘ΡΠ΅Π΄Π°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π²ΡΡΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠ‘: Windows 10
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Python: Python 2.7 ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Anaconda
ΠΠ°ΠΊΠ΅Ρ Mayavi: mayavi 4.5.0 py27_0 menpo
ΠΠ°ΠΊΠ΅Ρ VTK: vtk 7.0.0 py27_0 menpo
ΠΠ°ΠΊΠ΅Ρ PyQt: pyqt 5.6.0 py27_1
Π‘ΡΠ΅Π΄Π°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΊΠΎΠ΄ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ
ΠΠ‘: Windows 7
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Python: Python 2.7 ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Anaconda
ΠΠ°ΠΊΠ΅Ρ Mayavi: mayavi 4.4.4 py27_0 menpo
ΠΠ°ΠΊΠ΅Ρ VTK: vtk 7.0.0 py27_0 menpo
ΠΠ°ΠΊΠ΅Ρ PyQt: pyqt 4.11.4 py27_5
ΠΠ°ΠΊ Π±Ρ ΡΠΎ Π½ΠΈ Π±ΡΠ»ΠΎ, Ρ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΎΠ΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π» ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ ΠΏΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΡΠ»ΠΎΠ²ΠΈΡΡ :
ΠΠ‘: Windows 10
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Python: Python 2.7 ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Anaconda
ΠΠ°ΠΊΠ΅Ρ 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
ΠΠ’Π -> 5.10.1
* ΠΠ΅ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ - ΡΡΠΎ ΠΏΠΎΠ½ΠΈΠΆΠ°Π΅Ρ numpy Ρ 1.10 Π΄ΠΎ 1.9.3, ΡΡΠΎ Π»ΠΎΠΌΠ°Π΅Ρ Spyder, ΠΏΠΎΡΡΠΎΠΌΡ Π²Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π²ΡΡΡΠ½ΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Π΅Π³ΠΎ
Π£ ΠΌΠ΅Π½Ρ Π·Π΄Π΅ΡΡ ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°. ΠΠΈΠΊΡΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π½ΠΈ ΠΌΠ°Π»Π΅ΠΉΡΠ΅Π³ΠΎ ΠΏΠΎΠ½ΡΡΠΈΡ?
ΠΡΠ»ΠΈ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠΉ Jeitan, Ρ ΠΌΠ΅Π½Ρ Π±ΡΠ»Π° ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΎΡΠΈΠ±ΠΊΠ°, ΠΈ Ρ ΡΡΠΏΠΎΠΊΠΎΠΈΠ» Π΅Π΅, ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π² mayavi \ modules \ axes.py Π² update_pipeline, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ²:
self.configure_input_data (self.axes, src.outputs [0])
ΠΊ:
self.configure_input_data (self.axes, src.outputs [0] .output)
(ΠΡΠ²ΡΠΈΠΉ - ΡΡΠΎ ΡΠΈΠΏ PolyDataNormals, ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ - ΡΡΠΎ PolyData, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΉ ΠΎΡ DataSet.)
Π― ΡΠΎΠΆΠ΅ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ.
@jdonegan ΠΠ°ΡΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ
Π£ ΠΌΠ΅Π½Ρ ΡΠΎΠΆΠ΅ Π±ΡΠ»Π° ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΈ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡ @jdonegan ΡΡΠ°Π±ΠΎΡΠ°Π»ΠΎ. Π‘ΠΎΠ±ΠΈΡΠ°Π»ΡΡ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ PR, Π½ΠΎ ΠΏΠΎΡ
ΠΎΠΆΠ΅, ΡΡΠΎ @prabhuramachandran ΡΠΆΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ»ΠΊΠ½ΡΠ» ΡΠΈΠΊΡΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠΎ, Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΠ² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΡΡΡΠΎΠΊΡ Π½Π°:
self.configure_input (self.axes, src.outputs [0])
ΠΠΎΠΆΠ΅Ρ, ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ ΡΡΠΎΠΈΡ Π·Π°ΠΊΡΡΡΡ, ΡΡΠΎΠ±Ρ Π½Π΅ Π±ΡΠ»ΠΎ ΠΏΡΡΠ°Π½ΠΈΡΡ?
Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅ ΡΠ° ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠ΅ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΊ ΡΡΡΠΎΠΊΠ΅ 373 Π² Π΄Π΅ΠΊΠΎΡΠ°ΡΠΈΡΡ
.py:
axes.axes.ranges = \
axes.module_manager.source.outputs [0] .output.bounds
ΡΠ΅ΡΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΡ
Β«AttributeError: ΠΎΠ±ΡΠ΅ΠΊΡ 'PolyDataNormals' Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² 'bounds'Β»
ΠΠΎΡΡΠΎΠΌΡ Ρ ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΡΠΈΠΊΡΠ°ΡΠΈΡ 996fb25 ΡΡΡΡΠ°Π½ΠΈΠ»Π° ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
ΠΠ°ΠΊ ΠΎΡΠΌΠ΅ΡΠΈΠ» @TinghuiWang , ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΌΠ΅ΡΡΠ°Ρ . ΠΠ΄Π½Π°ΠΊΠΎ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²Π°ΡΠ΅Π³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠΆΠ΅ΡΠ° (Π΄Π»Ρ ΠΌΠ΅Π½Ρ ΡΡΠΎ Π±ΡΠ» plot3d vs 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 Ρ ΡΠΌΠΎΠ³
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, Ρ ΠΌΠ΅Π½Ρ Π±ΡΠ»Π° ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΎΡΠΈΠ±ΠΊΠ°, ΠΈ Ρ ΡΡΠΏΠΎΠΊΠΎΠΈΠ» Π΅Π΅, ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π² mayavi \ modules \ axes.py Π² update_pipeline, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ²:
self.configure_input_data (self.axes, src.outputs [0])
ΠΊ:
self.configure_input_data (self.axes, src.outputs [0] .output)
(ΠΡΠ²ΡΠΈΠΉ - ΡΡΠΎ ΡΠΈΠΏ PolyDataNormals, ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ - ΡΡΠΎ PolyData, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΉ ΠΎΡ DataSet.)