# psd_tools.api.shape

Shape module.

In PSD/PSB, shapes are all represented as `VectorMask` in each layer, and optionally there might be `Origination` object to control live shape properties and `Stroke` to specify how outline is stylized.

## VectorMask

class psd_tools.api.shape.VectorMask(data)

  Vector mask data.

  Vector mask is a resolution-independent mask that consists of one or more Path objects. In Photoshop, all the path objects are represented as Bezier curves. Check `paths` property for how to deal with path objects.

  property bbox

    Bounding box tuple (left, top, right, bottom) in relative coordinates, where top-left corner is (0., 0.) and bottom-right corner is (1., 1.).

    Returns:

      tuple

  property clipboard_record

    Clipboard record containing bounding box information.

    Depending on the Photoshop version, this field can be None.

  property disabled

    If the mask is disabled.

  property initial_fill_rule

    Initial fill rule.

    When 0, fill inside of the path. When 1, fill outside of the shape.

    Returns:

      int

  property inverted

    Invert the mask.

  property not_linked

    If the knots are not linked.

  property paths

    List of `Subpath`. Subpath is a list-like structure that contains one or more `Knot` items. Knot contains relative coordinates of control points for a Bezier curve. `index` indicates which origination item the subpath belongs, and `operation` indicates how to combine multiple shape paths.

    In PSD, path fill rule is even-odd.

    Example:

        for subpath in layer.vector_mask.paths:
            anchors = [(
                int(knot.anchor[1] * psd.width),
                int(knot.anchor[0] * psd.height),
            ) for knot in subpath]

    Returns:

      List of Subpath.

## Stroke

class psd_tools.api.shape.Stroke(data)

  Stroke contains decorative information for strokes.

  This is a thin wrapper around `Descriptor` structure. Check _data attribute to get the raw data.

  property blend_mode

    Blend mode.

  property content

    Fill effect.

  property enabled

    If the stroke is enabled.

  property fill_enabled

    If the stroke fill is enabled.

  property line_alignment

    Alignment, one of inner, outer, center.

  property line_cap_type

    Cap type, one of butt, round, square.

  property line_dash_offset

    Line dash offset in float.

    Returns:

      float

  property line_dash_set

    Line dash set in list of `UnitFloat`.

    Returns:

      list

  property line_join_type

    Join type, one of miter, round, bevel.

  property line_width

    Stroke width in float.

  property miter_limit

    Miter limit in float.

  property opacity

    Opacity value.

  property stroke_adjust

    Stroke adjust

## Origination

Origination keeps live shape properties for some of the primitive shapes. Origination objects are accessible via `origination` property of layers. Following primitive shapes are defined: `Invalidated`, `Line`, `Rectangle`, `Ellipse`, and `RoundedRectangle`.

### Invalidated

class psd_tools.api.shape.Invalidated(data)

  Invalidated live shape.

  This equals to a primitive shape that does not provide Live shape properties. Use `VectorMask` to access shape information instead of this origination object.

  property invalidated
    Returns:

      bool

### Line

class psd_tools.api.shape.Line(data)

  Line live shape.

  property arrow_conc
    Returns:

      int

  property arrow_end

    Line arrow end.

    Returns:

      bool

  property arrow_length

    Line arrow length.

    Returns:

      float

  property arrow_start

    Line arrow start.

    Returns:

      bool

  property arrow_width

    Line arrow width.

    Returns:

      float

  property bbox

    Bounding box of the live shape.

    Returns:

      `Descriptor`

  property index

    Origination item index.

    Returns:

      int

  property invalidated
    Returns:

      bool

  property line_end

    Line end.

    Returns:

      `Descriptor`

  property line_start

    Line start.

    Returns:

      `Descriptor`

  property line_weight

    Line weight

    Returns:

      float

  property origin_type

    Type of the vector shape.

    - 1: `Rectangle`

    - 2: `RoundedRectangle`

    - 4: `Line`

    - 5: `Ellipse`

    Returns:

      int

  property resolution

    Resolution.

    Returns:

      float

### Ellipse

class psd_tools.api.shape.Ellipse(data)

  Ellipse live shape.

  property bbox

    Bounding box of the live shape.

    Returns:

      `Descriptor`

  property index

    Origination item index.

    Returns:

      int

  property invalidated
    Returns:

      bool

  property origin_type

    Type of the vector shape.

    - 1: `Rectangle`

    - 2: `RoundedRectangle`

    - 4: `Line`

    - 5: `Ellipse`

    Returns:

      int

  property resolution

    Resolution.

    Returns:

      float

### Rectangle

class psd_tools.api.shape.Rectangle(data)

  Rectangle live shape.

  property bbox

    Bounding box of the live shape.

    Returns:

      `Descriptor`

  property index

    Origination item index.

    Returns:

      int

  property invalidated
    Returns:

      bool

  property origin_type

    Type of the vector shape.

    - 1: `Rectangle`

    - 2: `RoundedRectangle`

    - 4: `Line`

    - 5: `Ellipse`

    Returns:

      int

  property resolution

    Resolution.

    Returns:

      float

### RoundedRectangle

class psd_tools.api.shape.RoundedRectangle(data)

  Rounded rectangle live shape.

  property bbox

    Bounding box of the live shape.

    Returns:

      `Descriptor`

  property index

    Origination item index.

    Returns:

      int

  property invalidated
    Returns:

      bool

  property origin_type

    Type of the vector shape.

    - 1: `Rectangle`

    - 2: `RoundedRectangle`

    - 4: `Line`

    - 5: `Ellipse`

    Returns:

      int

  property radii

    Corner radii of rounded rectangles. The order is top-left, top-right, bottom-left, bottom-right.

    Returns:

      `Descriptor`

  property resolution

    Resolution.

    Returns:

      float