Coverage for python/lsst/afw/display/virtualDevice.py: 87%
57 statements
« prev ^ index » next coverage.py v6.4.2, created at 2022-07-15 02:45 -0700
« prev ^ index » next coverage.py v6.4.2, created at 2022-07-15 02:45 -0700
1# This file is part of afw.
2#
3# Developed for the LSST Data Management System.
4# This product includes software developed by the LSST Project
5# (https://www.lsst.org).
6# See the COPYRIGHT file at the top-level directory of this distribution
7# for details of code ownership.
8#
9# This program is free software: you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation, either version 3 of the License, or
12# (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU General Public License for more details.
18#
19# You should have received a copy of the GNU General Public License
20# along with this program. If not, see <https://www.gnu.org/licenses/>.
23class DisplayImpl:
24 """Back-end for display objects.
26 Parameters
27 ----------
28 display
29 The display object that we're providing the implementation for
30 verbose : `bool`
31 be chatty?
32 """
33 def __init__(self, display, verbose=False):
34 self.display = display
35 self.verbose = verbose
37 def __del__(self):
38 self._close()
40 def _close(self):
41 """Close the display, cleaning up any allocated resources
42 """
43 if hasattr(self, "verbose") and self.verbose and hasattr(self, "display"):
44 print("virtual[%s]._close()" % (self.frame))
46 def _buffer(self, enable=True):
47 """Enable or disable buffering of writes to the display
49 Parameters
50 ----------
51 enable : `bool`
52 `True` or `False`, as appropriate
53 """
54 if self.verbose: 54 ↛ exitline 54 didn't return from function '_buffer', because the condition on line 54 was never false
55 print("virtual[%s]._buffer(%s)" % (self.frame, enable))
57 def _dot(self, symb, c, r, size, ctype, *args, **kwargs):
58 """Draw a symbol at (c, r)
60 Parameters
61 ----------
62 symb
63 The desired symbol. See `dot` for details
64 c : `float`
65 (x) column position
66 r : `float`
67 (y) row position
68 size : `int`
69 Size of symbol, in pixels
70 ctype : `str`
71 The desired color, either e.g. `lsst.afw.display.RED` or a color name known to X11
72 *args
73 Extra arguments to backend
74 **kwargs
75 Extra keyword arguments to backend
76 """
77 if self.verbose:
78 print("virtual[%s]._dot('%s', %.2f, %.2f, size=%g, ctype=%s, %s, %s)" %
79 (self.frame, symb, c, r, size, ctype, args, kwargs))
81 def _drawLines(self, points, ctype):
82 """Draw line defined by the list points
84 Parameters
85 ----------
86 points : `list` of `tuple` of `float`
87 A list of 0-indexed positions [(x, y), (x, y), ...]
88 ctype : `str`
89 The desired color, either e.g. `lsst.afw.display.RED` or a color name known to X11
90 """
91 if self.verbose: 91 ↛ exitline 91 didn't return from function '_drawLines', because the condition on line 91 was never false
92 print("virtual[%s]._drawLines(%s, ctype=%s)" %
93 (self.frame, points, ctype))
95 def _erase(self):
96 """Erase all glyphs drawn on display
97 """
98 if self.verbose:
99 print("virtual[%s]._erase()" % (self.frame))
101 def _flush(self):
102 """Flush any I/O buffers
103 """
104 if self.verbose: 104 ↛ exitline 104 didn't return from function '_flush', because the condition on line 104 was never false
105 print("virtual[%s]._flush()" % self.frame)
107 def _setCallback(self, what, func):
108 if self.verbose > 1: 108 ↛ 109line 108 didn't jump to line 109, because the condition on line 108 was never true
109 print("setCallback %s -> %s" % (what, func))
111 def _getEvent(self):
112 """Return an event generated by a keypress or mouse click
113 """
114 from .interface import Event
115 ev = Event("q")
117 if self.verbose: 117 ↛ 120line 117 didn't jump to line 120, because the condition on line 117 was never false
118 print("virtual[%s]._getEvent() -> %s" % (self.frame, ev))
120 return ev
122 def _getMaskTransparency(self):
123 """Return the mask transparency for a display
124 """
125 if self.verbose:
126 print("virtual[%s]._getMaskTransparency()" % self.frame)
128 def _mtv(self, image, wcs=None, mask=None, title=""):
129 """Display an image and maybe a mask overlay on a display
131 Parameters
132 ----------
133 image : `lsst.afw.image.Image`
134 `~lsst.afw.image.Image` to display
135 mask : `lsst.afw.image.Mask`
136 `~lsst.afw.image.Mask` to display
137 wcs : `lsst.afw.geom.SkyWcs`
138 A Wcs to associate with data
139 title : `str`
140 Name to display with the data
141 """
142 if self.verbose:
143 print("virtual[%s]._mtv(image=%s, mask=%s, wcs=%s, title=\"%s\")" %
144 (self.frame, "Image" if image else None,
145 "Mask" if mask else None, "Wcs" if wcs else None, title))
147 def _setImageColormap(self, cmap):
148 """Set the desired colormap
150 Parameters
151 ----------
152 cmap : `str`
153 the name of a colormap (e.g. "gray") or a backend-specific object
154 """
155 if self.verbose:
156 print("virtual[%s]._setImageColormap(cmap=\"%s\")" % (self.frame, cmap))
158 def _setMaskTransparency(self, transparency, maskplane):
159 """Set the transparency of a maskplane
161 Parameters
162 ----------
163 transparency : `float`
164 The desired transparency, in the range [0, 100]
165 maskplane
166 The maskplane to set (None: all)
167 """
168 if self.verbose:
169 print("virtual[%s]._setMaskTransparency(%g, maskplane=\"%s\")" %
170 (self.frame, transparency, maskplane))
172 def _scale(self, algorithm, min, max, *args, unit=None, **kwargs):
173 """Set the scaling from DN to displayed pixels
175 Parameters
176 ----------
177 algorithm
178 Scaling algorithm (e.g. linear)
179 min
180 The minimum value of the stretch (or "zscale" or "minmax")
181 max
182 The maximum value of the stretch
183 unit
184 Units for min and max (e.g. Percent, Absolute, Sigma)
185 *args
186 Optional arguments to the backend
187 **kwargs
188 Optional keyword arguments to the backend
189 """
190 if self.verbose: 190 ↛ exitline 190 didn't return from function '_scale', because the condition on line 190 was never false
191 print("virtual[%s]._scale(%s, %s, %s, %s, %s, %s)" % (self.frame, algorithm,
192 min, max, unit, args, kwargs))
194 def _show(self):
195 """Show the requested display
196 """
197 if self.verbose: 197 ↛ exitline 197 didn't return from function '_show', because the condition on line 197 was never false
198 print("virtual[%s]._show()" % self.frame)
200 def _pan(self, r, c):
201 """Pan to a row and column
203 Parameters
204 ----------
205 c : `float`
206 Desired column (x) position
207 r : `float`
208 Desired row (y) position
209 """
210 if self.verbose:
211 print("virtual[%s]._pan(%.2f, %.2f)" % (self.frame, r, c))
213 def _zoom(self, zoomfac):
214 """Set the zoom
216 Parameters
217 ----------
218 zoomfac : `float`
219 Zoom factor to use
220 """
221 if self.verbose:
222 print("virtual[%s]._zoom(%g)" % (self.frame, zoomfac))