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))