add view function

This commit is contained in:
wyq 2023-06-16 11:44:08 +08:00
parent 2dab028a0b
commit fac368dc7c
9 changed files with 80 additions and 14 deletions

View File

@ -1,21 +1,21 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<MeteoInfo File="milconfig.xml" Type="configurefile"> <MeteoInfo File="milconfig.xml" Type="configurefile">
<Path OpenPath="D:\Working\MIScript\Jython\mis\map\projection"> <Path OpenPath="D:\Working\MIScript\Jython\mis\plot_types\funny">
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\array"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\meteo"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\meteo\calc"/> <RecentFolder Folder="D:\Working\MIScript\Jython\mis\meteo\calc"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io"/> <RecentFolder Folder="D:\Working\MIScript\Jython\mis\io"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io\savefig"/> <RecentFolder Folder="D:\Working\MIScript\Jython\mis\io\savefig"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\dataframe"/> <RecentFolder Folder="D:\Working\MIScript\Jython\mis\dataframe"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\contour"/> <RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\contour"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\contour"/> <RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\contour"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\streamplot"/> <RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\streamplot"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\wind"/> <RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\wind"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis"/> <RecentFolder Folder="D:\Working\MIScript\Jython\mis"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\map"/> <RecentFolder Folder="D:\Working\MIScript\Jython\mis\map"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\map\projection"/> <RecentFolder Folder="D:\Working\MIScript\Jython\mis\map\projection"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\surf"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\funny"/>
</Path> </Path>
<File> <File>
<OpenedFiles> <OpenedFiles>
@ -24,6 +24,8 @@
<OpenedFile File="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\contour\contour3_1.py"/> <OpenedFile File="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\contour\contour3_1.py"/>
<OpenedFile File="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\streamplot\streamplot_3.py"/> <OpenedFile File="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\streamplot\streamplot_3.py"/>
<OpenedFile File="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\streamplot\streamplot_2d_2.py"/> <OpenedFile File="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\streamplot\streamplot_2d_2.py"/>
<OpenedFile File="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\surf\surf_peaks.py"/>
<OpenedFile File="D:\Working\MIScript\Jython\mis\plot_types\funny\butterfly.py"/>
</OpenedFiles> </OpenedFiles>
<RecentFiles> <RecentFiles>
<RecentFile File="D:\MyProgram\java\MeteoInfoDev\toolbox\meteoview3d\_reload.py"/> <RecentFile File="D:\MyProgram\java\MeteoInfoDev\toolbox\meteoview3d\_reload.py"/>
@ -31,6 +33,8 @@
<RecentFile File="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\contour\contour3_1.py"/> <RecentFile File="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\contour\contour3_1.py"/>
<RecentFile File="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\streamplot\streamplot_3.py"/> <RecentFile File="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\streamplot\streamplot_3.py"/>
<RecentFile File="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\streamplot\streamplot_2d_2.py"/> <RecentFile File="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\streamplot\streamplot_2d_2.py"/>
<RecentFile File="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\surf\surf_peaks.py"/>
<RecentFile File="D:\Working\MIScript\Jython\mis\plot_types\funny\butterfly.py"/>
</RecentFiles> </RecentFiles>
</File> </File>
<Font> <Font>

View File

@ -3073,7 +3073,10 @@ def peaks(*args, **kwargs):
:return: (*array*) Peaks function result array. :return: (*array*) Peaks function result array.
""" """
n = len(args) n = len(args)
if n == 1: if n == 0:
x = linspace(-3, 3, 49)
x, y = meshgrid(x, x)
elif n == 1:
x = args[0] x = args[0]
if isinstance(x, int): if isinstance(x, int):
x = linspace(-3, 3, x) x = linspace(-3, 3, x)

View File

@ -1413,7 +1413,7 @@ class Axes3D(Axes):
:param x: (*array_like*) Optional. X coordinate array. :param x: (*array_like*) Optional. X coordinate array.
:param y: (*array_like*) Optional. Y coordinate array. :param y: (*array_like*) Optional. Y coordinate array.
:param z: (*array_like*) 2-D or 3-D (RGB) z value array. :param z: (*array_like*) 2-D or 3-D (RGB) z value array.
:param levs: (*array_like*) Optional. A list of floating point numbers indicating the level curves :param levels: (*array_like*) Optional. A list of floating point numbers indicating the level curves
to draw, in increasing order. to draw, in increasing order.
:param cmap: (*string*) Color map string. :param cmap: (*string*) Color map string.
:param colors: (*list*) If None (default), the colormap specified by cmap will be used. If a :param colors: (*list*) If None (default), the colormap specified by cmap will be used. If a

View File

@ -165,6 +165,40 @@ class Axes3DGL(Axes3D):
""" """
self._axes.setAngleX(elevation) self._axes.setAngleX(elevation)
def view(self, *args):
"""
Set camera line of sight.
view(az, el)
view(dim)
:param az: (*float*) Azimuth angle.
:param el: (*float*) Elevation angle.
:param dim: (*int*) Uses the default line of sight for 2-D or 3-D plots. Specify dim as 2
for the default 2-D view or 3 for the default 3-D view.
:return: Current azimuth and elevation angle.
"""
if len(args) == 1:
dim = args[0]
if dim == 2:
self.set_rotation(0)
self.set_elevation(0)
elif dim == 3:
self.set_rotation(45)
self.set_elevation(-45)
elif len(args) == 2:
az = args[0]
el = args[1]
self.set_rotation(-az)
self.set_elevation(el - 90)
az = -self.get_rotation()
el = self.get_elevation() + 90
return az, el
def get_head(self): def get_head(self):
""" """
Get head angle. Get head angle.
@ -527,10 +561,13 @@ class Axes3DGL(Axes3D):
if len(args) < 4: if len(args) < 4:
u = args[0] u = args[0]
v = args[1] v = args[1]
u = np.asarray(u) if isinstance(u, DimArray):
nz, ny, nx = u.shape y = u.dimvalue(0)
x = np.arange(nx) x = u.dimvalue(1)
y = np.arange(ny) else:
ny, nx = u.shape
x = np.arange(nx)
y = np.arange(ny)
args = args[2:] args = args[2:]
else: else:
x = args[0] x = args[0]
@ -542,6 +579,12 @@ class Axes3DGL(Axes3D):
cdata = args[0] cdata = args[0]
iscolor = True iscolor = True
args = args[1:] args = args[1:]
if x.ndim == 2:
x = x[0]
if y.ndim == 2:
y = y[:,0]
x = plotutil.getplotdata(x) x = plotutil.getplotdata(x)
y = plotutil.getplotdata(y) y = plotutil.getplotdata(y)
u = plotutil.getplotdata(u) u = plotutil.getplotdata(u)
@ -765,9 +808,11 @@ class Axes3DGL(Axes3D):
if iscolor: if iscolor:
if len(args) > 0: if len(args) > 0:
cn = args[0] cn = args[0]
if isinstance(cn, NDArray):
cn = cn.aslist()
ls = LegendManage.createLegendScheme(cdata.min(), cdata.max(), cn, cmap) ls = LegendManage.createLegendScheme(cdata.min(), cdata.max(), cn, cmap)
else: else:
levs = kwargs.pop('levs', None) levs = kwargs.pop('levels', None)
if levs is None: if levs is None:
ls = LegendManage.createLegendScheme(cdata.min(), cdata.max(), cmap) ls = LegendManage.createLegendScheme(cdata.min(), cdata.max(), cmap)
else: else:
@ -1822,7 +1867,7 @@ class Axes3DGL(Axes3D):
self.add_graphic(graphics) self.add_graphic(graphics)
return graphics return graphics
def view(self): def view_form(self):
""" """
Open GLForm Open GLForm
""" """

View File

@ -52,7 +52,7 @@ __all__ = [
'right_title', 'refresh', 'savefig', 'savefig_jpeg', 'scatter', 'scatter3', 'scatterm', 'semilogx', 'right_title', 'refresh', 'savefig', 'savefig_jpeg', 'scatter', 'scatter3', 'scatterm', 'semilogx',
'semilogy', 'show', 'slice3', 'stationmodel', 'stem', 'stem3', 'step', 'streamplot', 'streamplot3', 'semilogy', 'show', 'slice3', 'stationmodel', 'stem', 'stem3', 'step', 'streamplot', 'streamplot3',
'streamplotm', 'streamslice', 'subplot', 'subplots', 'suptitle', 'supxlabel', 'supylabel', 'surf', 'streamplotm', 'streamslice', 'subplot', 'subplots', 'suptitle', 'supxlabel', 'supylabel', 'surf',
'surfc', 'taylor_diagram', 'text', 'text3', 'title', 'trisurf', 'twinx', 'twiny', 'violinplot', 'surfc', 'taylor_diagram', 'text', 'text3', 'title', 'trisurf', 'twinx', 'twiny', 'view', 'violinplot',
'volumeplot', 'weatherspec', 'xaxis', 'xlabel', 'xlim', 'xreverse', 'xticks', 'yaxis', 'ylabel', 'volumeplot', 'weatherspec', 'xaxis', 'xlabel', 'xlim', 'xreverse', 'xticks', 'yaxis', 'ylabel',
'ylim', 'yreverse', 'yticks', 'zaxis', 'zlabel', 'zlim', 'zticks', 'isinteractive' 'ylim', 'yreverse', 'yticks', 'zaxis', 'zlabel', 'zlim', 'zticks', 'isinteractive'
] ]
@ -1981,6 +1981,20 @@ def material(mvalues):
draw_if_interactive() draw_if_interactive()
@_copy_docstring_and_deprecators(Axes3DGL.view)
def view(*args):
global g_axes
if g_axes is None:
g_axes = axes3d()
else:
if not isinstance(g_axes, Axes3DGL):
g_axes = axes3dgl()
r = g_axes.view(*args)
draw_if_interactive()
return r
@_copy_docstring_and_deprecators(Axes3D.mesh) @_copy_docstring_and_deprecators(Axes3D.mesh)
def mesh(*args, **kwargs): def mesh(*args, **kwargs):
global g_axes global g_axes