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