neoscore.core.path
- class neoscore.core.path.Path[source]
Bases:
PaintedObject
A vector path whose elements can be anchored to other objects.
If a
Path
is in aFlowable
, any element parents in the path should be in the same flowable. Likewise, if a path is not in a flowable, all element parts should not be in one either.- __init__(pos: PointDef, parent: Optional[PositionedObject], brush: Optional[BrushDef] = None, pen: Optional[PenDef] = None, rotation: float = 0, background_brush: Optional[BrushDef] = None, transform_origin: PointDef = ORIGIN)[source]
- Parameters
pos – The position of the path root.
parent – The parent object or None
brush – The brush to fill shapes with.
pen – The pen to draw outlines with.
rotation – Angle in degrees. Rotated paths with flowable breaks or path elements parented to other objects are not currently supported.
background_brush – Optional brush used to paint the path’s bounding rect behind it.
transform_origin – The origin point for rotation and scaling transforms
- classmethod straight_line(start: PointDef, parent: Optional[PositionedObject], end: PointDef, end_parent: Optional[PositionedObject] = None, brush: Optional[BrushDef] = None, pen: Optional[PenDef] = None) Path [source]
Convenience for drawing a single straight line.
- Parameters
start – The position of the center of the line’s start
parent – A parent object
end – The position of the end of the line, relative to
end_parent
if provided or otherwisestart
end_parent – An optional parent for the end point.
brush – The brush to fill shapes with.
pen – The pen to draw outlines with. Defaults to no pen.
- classmethod rect(pos: PointDef, parent: Optional[PositionedObject], width: Unit, height: Unit, brush: Optional[BrushDef] = None, pen: Optional[PenDef] = None)[source]
Convenience for drawing a rectangle.
- classmethod ellipse(pos: PointDef, parent: Optional[PositionedObject], width: Unit, height: Unit, brush: Optional[BrushDef] = None, pen: Optional[PenDef] = None)[source]
Convenience for drawing an ellipse.
pos
indicates the top left corner of the ellipse’s bounding rect. To create a path from a center point, usePath.ellipse_from_center
.This can also be used for drawing circles by giving the same width and height.
- classmethod ellipse_from_center(center_pos: PointDef, parent: Optional[PositionedObject], width: Unit, height: Unit, brush: Optional[BrushDef] = None, pen: Optional[PenDef] = None)[source]
Convenience for drawing an ellipse from its center point.
The constructed path will have its
pos
at the ellipse bounding rect’s top left corner.See also
Path.ellipse
- classmethod arc(pos: PointDef, parent: Optional[PositionedObject], width: Unit, height: Unit, start_angle: float, stop_angle: float, brush: Optional[BrushDef] = None, pen: Optional[PenDef] = None)[source]
Convenience for drawing an elliptical arc.
- Parameters
pos – The position of the upper left corner of the traced ellipse. parent: The parent object or None width: The traced ellipse’s width height: The traced ellipse’s height start_angle: The starting arc angle in radians clockwise relative to the 3 o’clock position.
parent – The parent object or None
width – The full ellipse width
height – The full ellipse height
start_angle – The start arc angle in radians clockwise relative to the 3 o’clock position.
stop_angle – The stopping arc angle, defined like
start_angle
.brush – The brush to fill shapes with. pen: The pen to draw outlines with.
pen – The pen to draw outlines with.
The arc definition can be most easily understood as tracing an ellipse as defined in
Path.ellipse()
, wherepos
marks the top-left corner of the ellipse bounding rect. Two angles are provided in clockwise radians relative to the 3 o’clock position. The arc is traced fromstart_angle
clockwise tostop_angle
. Consequently, depending on the provided angles the actually drawn path may be far from the Path’s position.The provided angles are interpreted mod
2*pi
. The angle between them must not be 0. This also means arc angles of2*pi
, (i.e. complete ellipses), are not supported as they are interpreted as 0. Complete ellipses should instead be drawn withPath.ellipse()
.- Raises
ValueError – if invalid angles are given
- classmethod arrow(start: PointDef, parent: Optional[PositionedObject], end: PointDef, end_parent: Optional[PositionedObject] = None, brush: Optional[BrushDef] = None, pen: Optional[PenDef] = None, line_width: Unit = Mm(0.35), arrow_head_width: Unit = Mm(1.5), arrow_head_length: Unit = Mm(2.5)) Path [source]
Convenience for drawing an arrow
- Parameters
start – The position of the center of the arrow line’s start
parent – A parent object
end – The position of the arrow’s tip, relative to
end_parent
if provided orstart
end_parent – An optional parent for the end point.
brush – The brush to fill shapes with.
pen – The pen to draw outlines with. Defaults to no pen.
line_width – The thickness of the arrow’s line
arrow_head_width – The width of the arrow head extending perpendicular from the line.
arrow_head_length – The length of the arrow head parallel to the line.
Note that
end_parent
is only used for initially drawing the path. Ifend_parent
moves relative to the path after creation, the path shape will not be automatically updated.
- property breakable_length: Unit
The breakable length of the path.
This is calculated automatically from path contents. By extension, this means that by default all
Path
objects will automatically wrap in flowables.
- property background_brush: Optional[Brush]
An optional brush to paint over the path bounding rect’s background with
- line_to(x: Unit, y: Unit, parent: Optional[PositionedObject] = None)[source]
Draw a path from the current position to a new point.
If the path is empty, this will add two elements, an initial
MoveTo(ORIGIN, self)
and the requestedLineTo
.- Parameters
x – The end x position
y – The end y position
parent – An optional parent, whose position the target coordinate will be relative to.
- move_to(x: Unit, y: Unit, parent: Optional[PositionedObject] = None)[source]
Close the current sub-path and start a new one.
- Parameters
x – The end x position
y – The end y position
parent – An optional parent, whose position the target coordinate will be relative to.
- close_subpath()[source]
Close the current sub-path with a line.
Draw a line back to the starting position (including any parent) of the current subpath.
- cubic_to(control_1_x: Unit, control_1_y: Unit, control_2_x: Unit, control_2_y: Unit, end_x: Unit, end_y: Unit, control_1_parent: Optional[PositionedObject] = None, control_2_parent: Optional[PositionedObject] = None, end_parent: Optional[PositionedObject] = None)[source]
Draw a cubic bezier curve from the current position to a new point.
If the path is empty, this will add two elements, an initial
MoveTo(ORIGIN, self)
and the requestedCurveTo
.- Parameters
control_1_x – The x coordinate of the first control point.
control_1_y – The y coordinate of the first control point.
control_2_x – The x coordinate of the second control point.
control_2_y – The y coordinate of the second control point.
end_x – The x coordinate of the curve target.
end_y – The y coordinate of the curve target.
control_1_parent – An optional parent for the first control point. Defaults to
self
.control_2_parent – An optional parent for the second control point. Defaults to
self
.end_parent – An optional parent for the curve target. Defaults to
self
.
- render_complete(pos: Point, flowable_line: Optional[NewLine] = None, flowable_x: Optional[Unit] = None)[source]
Render the entire object.
This is used to render all objects outside flowables, as well as those inside flowables when they fit completely in one line of the flowable.
By default, this is a no-op. Subclasses with rendered appearances should override this.
This method behaves differently inside and outside of flowables. Whether this object is inside a flowable can be determined by whether a
flowable_line
is given. When inside a flowable, the given position is in global document coordinates, and created interfaces (or higher level classes) must not be assigned a parent. When not inside a flowable, the given position is relative toself.parent
and created interfaces (or higher level classes) must be assigned a parent. In this case, created interfaces should useself.parent.interface_for_children
as their parent.This and other render methods should generally not be called directly.
- Parameters
pos – The rendering position. If outside a flowable, this is relative to the parent. Otherwise, it is in document coordinates.
flowable_line – If in a
Flowable
, the line in which this object appearsflowable_x – If in a
Flowable
, the flowable x position of this render
- render_before_break(pos: Point, flowable_line: NewLine, flowable_x: Unit)[source]
Render the beginning of the object up to a stopping point.
For use in flowable containers when rendering an object that crosses a line or page break. This function should render the beginning portion of the object up to the break.
By default, this is a no-op. Subclasses with rendered appearances should override this.
Created interfaces and higher level objects should not be assigned a parent.
This and other render methods should generally not be called directly.
- Parameters
pos – The rendering position in document space for drawing.
flowable_line – The line in which this object appears
flowable_x – The flowable x position of this render
- render_spanning_continuation(pos: Point, flowable_line: NewLine, object_x: Unit)[source]
Render the continuation of an object after a break and before another.
For use in flowable containers when rendering an object that crosses two breaks. This function should render the portion of the object surrounded by breaks on either side.
By default, this is a no-op. Subclasses with rendered appearances should override this.
Created interfaces and higher level objects should not be assigned a parent.
This and other render methods should generally not be called directly.
- Parameters
pos – The rendering position in document space for drawing.
flowable_line – The line in which this object appears
object_x – The local object x position of the line’s start.
- render_after_break(pos: Point, flowable_line: NewLine, object_x: Unit)[source]
Render the continuation of an object after a break.
For use in flowable containers when rendering an object that crosses a line or page break. This function should render the ending portion of an object after a break.
By default, this is a no-op. Subclasses with rendered appearances should override this.
Created interfaces and higher level objects should not be assigned a parent.
This and other render methods should generally not be called directly.
- Parameters
pos – The rendering position in document space for drawing.
flowable_line – The line in which this object appears
object_x – The local object x position of the line’s start.