рдирдорд╕реНрддреЗ, рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореИрдВрдиреЗ рдорд╛рдпрд╛рд╡реА рдХреЛ 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()
рдЬрдм рд╡рд┐рдВрдбреЛрдЬ рдФрд░ рдПрдирд╛рдХреЛрдВрдбрд╛ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ:
рдкреЙрдк-рдЕрдк рд╕рдВрджреЗрд╢ (рдмреЙрдХреНрд╕):
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
рдкрд╛рдпрдерди рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди: рдПрдирд╛рдХреЛрдВрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рдпрдерди 2.7 рд╕реНрдерд╛рдкрд┐рдд
рдорд╛рдпрд╛рд╡реА рдкреИрдХреЗрдЬ: рдорд╛рдпрд╛рд╡реА 4.5.0 py27_0 рдореЗрдирдкреЛ
рд╡реАрдЯреАрдХреЗ рдкреИрдХреЗрдЬ: рд╡реАрдЯреАрдХреЗ 7.0.0 py27_0 рдореЗрдирдкреЛ
рдкреАрдИрдХреНрдпреВрдЯреА рдкреИрдХреЗрдЬ: pyqt 5.6.0 py27_1
рд╡рд╛рддрд╛рд╡рд░рдг рдЬрд┐рд╕рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдЪрд▓рддрд╛ рд╣реИ OK
рдУрдПрд╕: рд╡рд┐рдВрдбреЛрдЬ 7
рдкрд╛рдпрдерди рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди: рдПрдирд╛рдХреЛрдВрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рдпрдерди 2.7 рд╕реНрдерд╛рдкрд┐рдд
рдорд╛рдпрд╛рд╡реА рдкреИрдХреЗрдЬ: рдорд╛рдпрд╛рд╡реА 4.4.4 py27_0 рдореЗрдирдкреЛ
рд╡реАрдЯреАрдХреЗ рдкреИрдХреЗрдЬ: рд╡реАрдЯреАрдХреЗ 7.0.0 py27_0 рдореЗрдирдкреЛ
рдкреАрдИрдХреНрдпреВрдЯреА рдкреИрдХреЗрдЬ: рдкреАрдИрдХреНрдпреВрдЯреА 4.11.4 py27_5
рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдХреНрдпрд╛ рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢рд░реНрддреЛрдВ рдХреЗ рддрд╣рдд рджреЛрд╣рд░рд╛рдпрд╛ рд╣реИ:
рдУрдПрд╕: рд╡рд┐рдВрдбреЛрдЬ 10
рдкрд╛рдпрдерди рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди: рдПрдирд╛рдХреЛрдВрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рдпрдерди 2.7 рд╕реНрдерд╛рдкрд┐рдд
рдорд╛рдпрд╛рд╡реА рдкреИрдХреЗрдЬ: рдорд╛рдпрд╛рд╡реА 4.5.0 py27_0
рд╡реАрдЯреАрдХреЗ рдкреИрдХреЗрдЬ: рд╡реАрдЯреАрдХреЗ 6.3.0 py27_1
рдкреАрдИрдХреНрдпреВрдЯреА рдкреИрдХреЗрдЬ: рдкреАрдИрдХреНрдпреВрдЯреА 4.11.4 py27_4
рдЕрдЧрд░ рдореИрдВ conda install mayavi=4.4
* рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдХреЛрдб рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рдорд╛рдпрд╛рд╡реА -> 4.4.0
рд╡реАрдЯреАрдХреЗ -> 5.10.1
*рдЕрд╕рдВрдмрдВрдзрд┐рдд рдиреЛрдЯ - рдпрд╣ 1.10 рд╕реЗ 1.9.3 рддрдХ рд╕реБрдиреНрди рдХреЛ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕реНрдкрд╛рдЗрдбрд░ рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдлрд┐рд░ рд╕реЗ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛
рдореБрдЭреЗ рдпрд╣рд╛рдВ рд╡реИрд╕реА рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╕реБрд░рд╛рдЧ рдирд╣реАрдВ рд╣реИ?
рдпрджрд┐ рдЕрднреА рднреА рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддреЛ рдЬреАрддрди рдХреЗ рд╕рдорд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рдмрд╕ рдПрдХ рд╣реА рддреНрд░реБрдЯрд┐ рдереА рдФрд░ рдЗрд╕реЗ рдорд╛рдпрд╛рд╡реА \ рдореЙрдбреНрдпреВрд▓ \ 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 рд╣реИ, рдЬреЛ рдбреЗрдЯрд╛рд╕реЗрдЯ рд╕реЗ рдирд┐рдХрд▓рд╛ рд╣реИред)
рдореБрдЭреЗ рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред
@jdonegan рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡реЛрдВ рдиреЗ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛: +1:ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдПрдХ рдлрд┐рдХреНрд╕ рдкреЛрд╕реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛ
рдореБрдЭреЗ рднреА рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рдереА рдФрд░ @jdonegan рдХреЗ рдлрд┐рдХреНрд╕ рдиреЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ред рдПрдХ рдкреАрдЖрд░ рдЬрдорд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @prabhuramaрдЪрдВрджреНрд░рди рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдПрдХ
self.configure_input(self.axes, src.outputs[0])
рд╢рд╛рдпрдж рднреНрд░рдо рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?
рдЗрд╕реА рддрд░рд╣, рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рдФрд░ рд╕рдорд╛рди рд╕реБрдзрд╛рд░ рдХреЛ рдбреЗрдХреЛрд░реЗрд╢рди.py рдореЗрдВ рд▓рд╛рдЗрди 373 рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
axes.axes.ranges = \
axes.module_manager.source.outputs[0].output.bounds
рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП
"рд╡рд┐рд╢реЗрд╖рддрд╛ рддреНрд░реБрдЯрд┐: 'PolyDataNormals' рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИ 'рд╕реАрдорд╛'"
рдЗрд╕рд▓рд┐рдП рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдХрдорд┐рдЯрдореЗрдВрдЯ 996fb25 рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ @TinghuiWang рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕реЗ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдкрдХреЗ рдкреНрд▓реЙрдЯ рдХреЙрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ (рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдкреНрд▓реЙрдЯ 3 рдбреА рдмрдирд╛рдо рдкреЙрдЗрдВрдЯ 3 рдбреА рдерд╛), рдЖрдкрдХреЛ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рддрдп рдХрд┐рдпрд╛:
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
рдФрд░ рдЫрд╡рд┐ рдкрд░ рдХреЛрдИ рдЕрдХреНрд╖ рд▓реЗрдмрд▓ рдирд╣реАрдВ рд╣реИред
рдХреЛрдИ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдзрдиреНрдпрд╡рд╛рдж!
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдпрджрд┐ рдЕрднреА рднреА рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддреЛ рдЬреАрддрди рдХреЗ рд╕рдорд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рдмрд╕ рдПрдХ рд╣реА рддреНрд░реБрдЯрд┐ рдереА рдФрд░ рдЗрд╕реЗ рдорд╛рдпрд╛рд╡реА \ рдореЙрдбреНрдпреВрд▓ \ 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 рд╣реИ, рдЬреЛ рдбреЗрдЯрд╛рд╕реЗрдЯ рд╕реЗ рдирд┐рдХрд▓рд╛ рд╣реИред)