-
Notifications
You must be signed in to change notification settings - Fork 44
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Create an independent renderer for draw_marker_at_points
- Loading branch information
Showing
27 changed files
with
11,860 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
# (C) Copyright 2005-2021 Enthought, Inc., Austin, TX | ||
# All rights reserved. | ||
# | ||
# This software is provided without warranty under the terms of the BSD | ||
# license included in LICENSE.txt and may be redistributed only under | ||
# the conditions described in the aforementioned license. The license | ||
# is also available online at http://www.enthought.com/licenses/BSD.txt | ||
# | ||
# Thanks for using Enthought open source! | ||
from libcpp cimport bool | ||
|
||
cdef extern from "marker_renderer.h" namespace "agg24markers": | ||
cdef cppclass pixfmt_abgr32: | ||
pass | ||
cdef cppclass pixfmt_argb32: | ||
pass | ||
cdef cppclass pixfmt_bgra32: | ||
pass | ||
cdef cppclass pixfmt_rgba32: | ||
pass | ||
cdef cppclass pixfmt_bgr24: | ||
pass | ||
cdef cppclass pixfmt_rgb24: | ||
pass | ||
|
||
|
||
cdef extern from "marker_renderer.h" namespace "kiva_markers": | ||
# This is just here for the type signature/ | ||
cdef enum marker_type: | ||
pass | ||
|
||
# Abstract base class | ||
cdef cppclass marker_renderer_base: | ||
void draw_marker_at_points(double* pts, unsigned Npts, | ||
unsigned size, marker_type marker, | ||
double* fill, double* stroke) | ||
void transform(double sx, double shy, | ||
double shx, double sy, | ||
double tx, double ty) | ||
|
||
# Template class | ||
cdef cppclass marker_renderer[pixfmt_T]: | ||
marker_renderer(unsigned char* buf, unsigned width, unsigned height, | ||
int stride, bool bottom_up) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,126 @@ | ||
# (C) Copyright 2005-2021 Enthought, Inc., Austin, TX | ||
# All rights reserved. | ||
# | ||
# This software is provided without warranty under the terms of the BSD | ||
# license included in LICENSE.txt and may be redistributed only under | ||
# the conditions described in the aforementioned license. The license | ||
# is also available online at http://www.enthought.com/licenses/BSD.txt | ||
# | ||
# Thanks for using Enthought open source! | ||
import cython | ||
import numpy as np | ||
from numpy cimport uint8_t | ||
|
||
cimport _marker_renderer | ||
|
||
ctypedef _marker_renderer.marker_renderer_base renderer_base_t | ||
# Template specializations | ||
ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_abgr32] renderer_abgr32_t | ||
ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_argb32] renderer_argb32_t | ||
ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_bgra32] renderer_bgra32_t | ||
ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_rgba32] renderer_rgba32_t | ||
ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_bgr24] renderer_bgr24_t | ||
ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_rgb24] renderer_rgb24_t | ||
|
||
@cython.internal | ||
cdef class MarkerRendererBase: | ||
cdef renderer_base_t* _this | ||
cdef object py_array | ||
|
||
def __dealloc__(self): | ||
del self._this | ||
|
||
cdef int base_init(self, image) except -1: | ||
if image is None: | ||
raise ValueError('image argument must not be None.') | ||
|
||
# Retain a reference to the memory view supplied to the constructor | ||
# so that it lives as long as this object | ||
self.py_array = image | ||
|
||
def draw_marker_at_points(self, points, size, marker, fill, stroke): | ||
"""draw_marker_at_points(points, size, marker, fill, stroke) | ||
Draw markers at a collection of points. | ||
""" | ||
cdef: | ||
double[:,::1] _points = np.asarray(points, dtype=np.float64, order='c') | ||
double[::1] _fill = np.asarray(fill, dtype=np.float64, order='c') | ||
double[::1] _stroke = np.asarray(stroke, dtype=np.float64, order='c') | ||
unsigned _size = <unsigned>size | ||
_marker_renderer.marker_type _marker = <_marker_renderer.marker_type>marker | ||
|
||
if _points.shape[1] != 2: | ||
msg = "points argument must be an iterable of (x, y) pairs." | ||
raise ValueError(msg) | ||
|
||
self._this.draw_marker_at_points( | ||
&_points[0][0], | ||
_points.shape[0], | ||
_size, _marker, | ||
&_fill[0], | ||
&_stroke[0] | ||
) | ||
|
||
def transform(self, sx, shy, shx, sy, tx, ty): | ||
"""transform(sx, shy, shx, sy, tx, ty) | ||
Set the transform to be applied to the markers. | ||
:param sx: Scale in X | ||
:param shy: Shear in X | ||
:param shx: Shear in Y | ||
:param sy: Scale in Y | ||
:param tx: Translation in X | ||
:param ty: Translation in Y | ||
""" | ||
cdef: | ||
double _sx = <double>sx | ||
double _shy = <double>shy | ||
double _shx = <double>shx | ||
double _sy = <double>sy | ||
double _tx = <double>tx | ||
double _ty = <double>ty | ||
|
||
self._this.transform(_sx, _shy, _shx, _sy, _tx, _ty) | ||
|
||
|
||
cdef class MarkerRendererABGR32(MarkerRendererBase): | ||
def __cinit__(self, uint8_t[:,:,::1] image, bottom_up=True): | ||
self.base_init(image) | ||
self._this = <renderer_base_t*> new renderer_abgr32_t( | ||
&image[0][0][0], image.shape[1], image.shape[0], image.strides[0], bottom_up | ||
) | ||
|
||
cdef class MarkerRendererARGB32(MarkerRendererBase): | ||
def __cinit__(self, uint8_t[:,:,::1] image, bottom_up=True): | ||
self.base_init(image) | ||
self._this = <renderer_base_t*> new renderer_argb32_t( | ||
&image[0][0][0], image.shape[1], image.shape[0], image.strides[0], bottom_up | ||
) | ||
|
||
cdef class MarkerRendererBGRA32(MarkerRendererBase): | ||
def __cinit__(self, uint8_t[:,:,::1] image, bottom_up=True): | ||
self.base_init(image) | ||
self._this = <renderer_base_t*> new renderer_bgra32_t( | ||
&image[0][0][0], image.shape[1], image.shape[0], image.strides[0], bottom_up | ||
) | ||
|
||
cdef class MarkerRendererRGBA32(MarkerRendererBase): | ||
def __cinit__(self, uint8_t[:,:,::1] image, bottom_up=True): | ||
self.base_init(image) | ||
self._this = <renderer_base_t*> new renderer_rgba32_t( | ||
&image[0][0][0], image.shape[1], image.shape[0], image.strides[0], bottom_up | ||
) | ||
|
||
cdef class MarkerRendererBGR24(MarkerRendererBase): | ||
def __cinit__(self, uint8_t[:,:,::1] image, bottom_up=True): | ||
self.base_init(image) | ||
self._this = <renderer_base_t*> new renderer_bgr24_t( | ||
&image[0][0][0], image.shape[1], image.shape[0], image.strides[0], bottom_up | ||
) | ||
|
||
cdef class MarkerRendererRGB24(MarkerRendererBase): | ||
def __cinit__(self, uint8_t[:,:,::1] image, bottom_up=True): | ||
self.base_init(image) | ||
self._this = <renderer_base_t*> new renderer_rgb24_t( | ||
&image[0][0][0], image.shape[1], image.shape[0], image.strides[0], bottom_up | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
# (C) Copyright 2005-2021 Enthought, Inc., Austin, TX | ||
# All rights reserved. | ||
# | ||
# This software is provided without warranty under the terms of the BSD | ||
# license included in LICENSE.txt and may be redistributed only under | ||
# the conditions described in the aforementioned license. The license | ||
# is also available online at http://www.enthought.com/licenses/BSD.txt | ||
# | ||
# Thanks for using Enthought open source! | ||
from kiva._marker_renderer import ( | ||
MarkerRendererABGR32, MarkerRendererARGB32, MarkerRendererBGR24, | ||
MarkerRendererBGRA32, MarkerRendererRGB24, MarkerRendererRGBA32, | ||
) | ||
|
||
__all__ = [ | ||
"MarkerRendererABGR32", "MarkerRendererARGB32", "MarkerRendererBGR24", | ||
"MarkerRendererBGRA32", "MarkerRendererRGB24", "MarkerRendererRGBA32", | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
The Anti-Grain Geometry Project | ||
A high quality rendering engine for C++ | ||
http://antigrain.com | ||
|
||
Anti-Grain Geometry has dual licensing model. The Modified BSD | ||
License was first added in version v2.4 just for convenience. | ||
It is a simple, permissive non-copyleft free software license, | ||
compatible with the GNU GPL. It's well proven and recognizable. | ||
See http://www.fsf.org/licensing/licenses/index_html#ModifiedBSD | ||
for details. | ||
|
||
Note that the Modified BSD license DOES NOT restrict your rights | ||
if you choose the Anti-Grain Geometry Public License. | ||
|
||
|
||
|
||
|
||
Anti-Grain Geometry Public License | ||
==================================================== | ||
|
||
Anti-Grain Geometry - Version 2.4 | ||
Copyright (C) 2002-2005 Maxim Shemanarev (McSeem) | ||
|
||
Permission to copy, use, modify, sell and distribute this software | ||
is granted provided this copyright notice appears in all copies. | ||
This software is provided "as is" without express or implied | ||
warranty, and with no claim as to its suitability for any purpose. | ||
|
||
|
||
|
||
|
||
|
||
Modified BSD License | ||
==================================================== | ||
Anti-Grain Geometry - Version 2.4 | ||
Copyright (C) 2002-2005 Maxim Shemanarev (McSeem) | ||
|
||
Redistribution and use in source and binary forms, with or without | ||
modification, are permitted provided that the following conditions | ||
are met: | ||
|
||
1. Redistributions of source code must retain the above copyright | ||
notice, this list of conditions and the following disclaimer. | ||
|
||
2. Redistributions in binary form must reproduce the above copyright | ||
notice, this list of conditions and the following disclaimer in | ||
the documentation and/or other materials provided with the | ||
distribution. | ||
|
||
3. The name of the author may not be used to endorse or promote | ||
products derived from this software without specific prior | ||
written permission. | ||
|
||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR | ||
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, | ||
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | ||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | ||
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
POSSIBILITY OF SUCH DAMAGE. | ||
|
Oops, something went wrong.