Source code for acia.segm.omero.shapeUtils

"""Utilities for working with OMERO shape objects"""

import omero
from omero.rtypes import rdouble, rint, rstring

# from omero.model.enums import UnitsLength


# Another helper for generating the color integers for shapes
[docs] def rgba_to_int(red, green, blue, alpha=255): """Return the color as an Integer in RGBA encoding""" r = red << 24 g = green << 16 b = blue << 8 a = alpha rgba_int = r + g + b + a if rgba_int > (2**31 - 1): # convert to signed 32-bit int rgba_int = rgba_int - 2**32 return rgba_int
[docs] def create_rectangle(x: float, y: float, width: float, height: float, z: int, t: int): # create a rectangle shape (added to ROI below) print( f"Adding a rectangle at theZ: {z}, theT: {t}, X: {x}, Y: {y}, width: {width}, height: {height}" ) rect = omero.model.RectangleI() rect.x = rdouble(x) rect.y = rdouble(y) rect.width = rdouble(width) rect.height = rdouble(height) rect.theZ = rint(z) rect.theT = rint(t) rect.textValue = rstring("test-Rectangle") rect.fillColor = rint(rgba_to_int(255, 255, 255, 255)) rect.strokeColor = rint(rgba_to_int(255, 255, 0, 255)) return rect
[docs] def create_ellipse(x: float, y: float, width: float, height: float, z: int, t: int): # create an Ellipse shape (added to ROI below) ellipse = omero.model.EllipseI() ellipse.x = rdouble(x) ellipse.y = rdouble(y) ellipse.radiusX = rdouble(width) ellipse.radiusY = rdouble(height) ellipse.theZ = rint(z) ellipse.theT = rint(t) ellipse.textValue = rstring("test-Ellipse") return ellipse
[docs] def make_polystr(points): return rstring(" ".join(f"{str(x)},{str(y)}" for x, y in points))
[docs] def make_coordinates(polystr: str) -> list[tuple[float]]: return [tuple(map(float, textCoord.split(","))) for textCoord in polystr.split(" ")] # type: ignore[misc]
[docs] def create_polygon( points: list, z: int, t: int, fillColor=(255, 0, 255, 50), strokeColor=(255, 255, 0), description="", ): # create an ROI with a single polygon, setting colors and lineWidth polygon = omero.model.PolygonI() polygon.theZ = rint(z) polygon.theT = rint(t) polygon.fillColor = rint(rgba_to_int(*fillColor)) polygon.strokeColor = rint(rgba_to_int(*strokeColor)) # polygon.strokeWidth = omero.model.LengthI(10, UnitsLength.PIXEL) polygon.points = make_polystr(points) polygon.textValue = rstring(description) return polygon