Source code for tecplot.annotation.image
import pathlib
from ..tecutil import _tecutil
from ..exception import *
from .. import constant, tecutil
from .annotation import MovableAnnotation
[docs]
class Image(MovableAnnotation):
"""Image annotation.
This example shows creating an image from a 2D plot and overlaying it on
the 3D plot of the same data.
.. code-block:: python
:emphasize-lines: 22
import os
import tecplot as tp
from tecplot.constant import PlotType
examples_dir = tp.session.tecplot_examples_directory()
datafile = os.path.join(examples_dir, 'SimpleData', 'F18.plt')
dataset = tp.data.load_tecplot(datafile)
frame = tp.active_frame()
plot2d = frame.plot(PlotType.Cartesian2D)
plot2d.activate()
plot2d.show_contour = True
plot2d.contour(0).colormap_name = 'Sequential - Blue'
plot2d.contour(0).variable = dataset.variable('S')
tp.export.save_png('embedded_image.png')
plot3d = frame.plot(PlotType.Cartesian3D)
plot3d.activate()
plot3d.show_contour = True
frame.add_image('embedded_image.png', (5, 55), 40)
tp.export.save_png('image.png')
.. figure:: /_static/images/image.png
:width: 300px
:figwidth: 300px
"""
@property
def filename(self):
"""`pathlib.Path`: Source file (read-only).
Example usage::
>>> image = frame.add_imge('my_image.png', (20, 20), 40)
>>> print(image.filename)
my_image.png
"""
with self.frame.activated():
f = _tecutil.GeomImageGetFileName(self.uid)
if f:
return pathlib.Path(f)
@property
def height(self):
"""`float`: Displayed image height in the coordinate system specified.
The units for height are determined by the `position_coordinate_system`
of the image. This example sets the height to 40% of the `Frame <layout.Frame>`::
>>> from tecplot.constant import CoordSys
>>> image.position_coordinate_system = CoordSys.Frame
>>> image.height = 40
"""
return self.size[1]
@height.setter
@tecutil.lock()
def height(self, value):
value = float(value)
if value <= 0.0:
msg = 'Annotation image height must be greater than 0'
raise TecplotValueError(msg)
with self.frame.activated():
_tecutil.GeomImageSetHeight(self.uid, value)
@property
def maintain_aspect_ratio(self):
"""`bool`: Keep aspect ratio on width or height change.
Example usage::
>>> image.maintain_aspect_ratio = True
"""
with self.frame.activated():
return _tecutil.GeomImageGetUseRatio(self.uid)
@maintain_aspect_ratio.setter
@tecutil.lock()
def maintain_aspect_ratio(self, value):
with self.frame.activated():
_tecutil.GeomImageSetUseRatio(self.uid, bool(value))
@property
def raw_size(self):
""":math:`(width, height)`: Original image size in pixels (read-only).
Example usage::
>>> print(image.raw_size)
(600, 400)
"""
return _tecutil.GeomImageGetRawSize(self.uid)
[docs]
@tecutil.lock()
def reset_aspect_ratio(self):
"""Restore the aspect ratio to that of the original image.
Example usage::
>>> image.reset_aspect_ratio()
"""
_tecutil.GeomImageResetAspectRatio(self.uid)
@property
def resize_filter(self):
"""`ImageResizeFilter`: Smoothing filter.
Possible values are `ImageResizeFilter.Texture`,
`ImageResizeFilter.Box`, `ImageResizeFilter.Lanczos2`,
`ImageResizeFilter.Lanczos3`, `ImageResizeFilter.Triangle`,
`ImageResizeFilter.Bell`, `ImageResizeFilter.BSpline`,
`ImageResizeFilter.Cubic`, `ImageResizeFilter.Mitchell`,
`ImageResizeFilter.Gaussian`. Example usage::
>>> from tecplot.constant import ImageResizeFilter
>>> image.resize_filter = ImageResizeFilter.BSpline
"""
imgrf = _tecutil.GeomImageGetResizeFilter(self.uid)
with self.frame.activated():
return constant.ImageResizeFilter(imgrf)
@resize_filter.setter
@tecutil.lock()
def resize_filter(self, value):
imgrf = constant.ImageResizeFilter(value)
with self.frame.activated():
_tecutil.GeomImageSetResizeFilter(self.uid, imgrf.value)
@property
def size(self):
""":math:`(width, height)`: Displayed image size.
This will be in the coordinates specified by
`Image.position_coordinate_system`. Example usage::
>>> image.size = (40, 20)
"""
with self.frame.activated():
return _tecutil.GeomImageGetSize(self.uid)
@size.setter
def size(self, values):
width, height = (float(v) for v in values)
_maintain_aspect = self.maintain_aspect_ratio
if _maintain_aspect:
self.maintain_aspect_ratio = False
self.width = width
self.height = height
if _maintain_aspect:
self.maintain_aspect_ratio = _maintain_aspect
@property
def width(self):
"""`float`: Displayed image width in the coordinate system specified.
The units for width are determined by the `position_coordinate_system`
of the image. This example sets the width to 40% of the `Frame <layout.Frame>`::
>>> from tecplot.constant import CoordSys
>>> image.position_coordinate_system = CoordSys.Frame
>>> image.width = 0.4
"""
return self.size[0]
@width.setter
@tecutil.lock()
def width(self, value):
with self.frame.activated():
_tecutil.GeomImageSetWidth(self.uid, float(value))