class neoscore.core.spanner.Spanner[source]

Bases: object

Mixin for a PositionedObject with starting and ending anchors.

If the spanner is in a Flowable, the endpoint must be in the same one. Likewise, if the spanner is not in one, the endpoint must not be in one either.

This mixin only provides a common interface for ending anchors. The starting position of this spanner should be the main object’s PositionedObject.pos, and the starting anchor should be its PositionedObject.parent. It is up to the implementing class to decide how to use this information.

Simple Spanners are horizontal relative to their starting anchor. Arbitrary end-y positions can be set with Spanner2D.

__init__(end_x: Unit, end_parent: PositionedObject)[source]
  • end_x – The X position of the endpoint.

  • end_parent – The parent of the endpoint. end_x will be relative to this object. This can be the spanner itself to make it relative to the starting point.

property end_x: Unit

The x position of the endpoint


The y position of the endpoint.

This value is automatically computed such that the spanner is horizontal.

property end_pos: Point

The position of the endpoint

property end_parent: PositionedObject

The parent of the endpoint. This may be self.


The x-axis length of the spanner.

property breakable_length: Unit

Spanners are breakable over their spanner_x_length.

point_along_spanner(ratio: float) Point[source]

Find the point on the spanner at a given 0-1 ratio along it.

For example, a ratio of 0.5 will give the point half-way along the spanner.

The returned point will be relative to the starting point.


ratio – A value representing progress along the spanner, where 0 is at the start and 1 is at the end. Values outside these bounds will give a point as if the spanner extended to infinity.