Polygon

The Polygon class is a concrete Shape implementation that represents arbitrary multi-vertex graphical shapes defined by an ordered list of points. Polygon shapes can be used to depict irregular compartment boundaries, custom species glyphs, reaction arcs, or any additional user-defined shapes in an SBMLNetwork diagram.

A Polygon records its points, given as a sequence of (x, y) tuples that define the vertices in relative diagram coordinates. It inherits all standard styling attributes—border color, fill color, border thickness, dash style, etc.—from ShapeBase.

After loading a model and retreiving a model element, you can

  • Retrieve the first associated Shape with get_shape().

  • Retrieve all the Shape objects associated with the network element get_shapes_list() helper.

Example:

import sbmlnetwork as sn

net = sn.load("my_model.xml")

# Get the first species in the network
species = net.get_species_list()[0]

# Set the shape to a type of polygon
species.set_shape("triangle")

# Get the shape of the species
shape = species.get_shape()

# Check if it's a triangle
if shape.get_type() == "triangle":
    print("The species shape is a triangle.")
    print("Vertices:", shape.get_points())

Core Methods

Identificaiton

get_type()

Return the specific polygon “sub-type” as stored in the model. This indicates which line-ending or marker shape the Polygon represents.

Return type:

str

Possible return values include:

  • "triangle" – a standard triangular

  • "diamond" – a diamond-shaped marker

  • "pentagon" – a pentagon-shaped marker

  • "octagon" – an octagon-shaped marker

Styling

get_border_color()

Current border colour of the Shape as a CSS hex string ("#rrggbb") or a colour name supported by the renderer.

Return type:

str

set_border_color(border_color)

Set the border colour. Accepts a CSS hex string or a RGB tuple / list with values in the range 0–255, e.g. (255, 0, 0) for red.

Parameters:

border_color (str | tuple[int, int, int] | list[int]) – New colour.

get_border_thickness()

Border line width in pixels.

Return type:

float

set_border_thickness(thickness)

Set the border line width.

Parameters:

thickness (float) – New width in pixels.

get_fill_color()

Current interior (fill) colour.

Return type:

str

set_fill_color(fill_color)

Set the interior colour. Accepts the same value formats as set_border_color().

Parameters:

fill_color (str | tuple[int, int, int] | list[int]) – New fill colour.

get_points()

Get the polygon’s vertices as a list of (x, y) tuples, in diagram coordinate units.

Return type:

list[tuple[float, float]]

set_points(points)

Set the polygon’s vertices.

Parameters:

points (list[tuple[float, float]]) – New vertex coordinates as a list of (x, y) tuples.

Information

property info

Human-readable summary of glyph state for debugging.

Return type:

str

get_info()

Generate the info string.

Example workflow

This snippet walks through inspecting and updating both appearance and layout for a Polygon shape:

import sbmlnetwork as sn

# Load your SBML model
net = sn.load("my_model.xml")

# Access the first species in the network
species = net.get_species_list()[0]

# Set the shape to Polygon
species.set_shape("hexagon")

# Grab the first Polygon for a given element
poly = species.get_shape()

# Inspect current style & geometry
print("Points           :", poly.get_points())         # [(x1, y1), (x2, y2), …]
print("Border color     :", poly.get_border_color())
print("Border thickness :", poly.get_border_thickness())
print("Fill color       :", poly.get_fill_color())

# Update styling
poly.set_fill_color("#cc6633")
poly.set_border_color((0, 51, 204))    # RGB tuple for a deep blue
poly.set_border_thickness(5.0)

# Update geometry (e.g., shift each vertex by (+10, +5))
original = poly.get_points()
shifted = [(x + 10.0, y + 5.0) for x, y in original]
poly.set_points(shifted)

# Re-render and log
net.draw("polygon_styling_demo.png")
print(poly.get_info())