# ImageSetDrawingStroke

Sets the stroke properties for subsequent drawing operations on an image.

## Syntax

```
ImageSetDrawingStroke( name [, attributeCollection] )
```

Or as a member:

```
someImage.setDrawingStroke( [attributeCollection] )
```

## Arguments

| Name                | Type   | Required | Description                                                                        |
| ------------------- | ------ | -------- | ---------------------------------------------------------------------------------- |
| name                | any    | Yes      | The image to set the drawing stroke for. Can be a `BoxImage` object or image name. |
| attributeCollection | struct | No       | A struct of stroke attributes. See below for supported keys.                       |

## Returns

`BoxImage` — The image object with updated drawing stroke settings.

## Description

Sets the drawing stroke attributes for the specified image. Stroke attributes control how lines and shapes are drawn, including thickness, end cap style, line join style, and dash patterns.

## Attribute Collection Keys

The `attributeCollection` struct supports the following optional keys:

| Key        | Type   | Description                                                                                                            | Valid Values                           |
| ---------- | ------ | ---------------------------------------------------------------------------------------------------------------------- | -------------------------------------- |
| width      | float  | The stroke width in pixels. Controls the thickness of lines and shape outlines.                                        | Any positive number (e.g., 2.5)        |
| endCaps    | string | The end cap style for unclosed subpaths and dash segments.                                                             | "butt", "round", "square"              |
| lineJoins  | string | The line join style for path segment intersections.                                                                    | "miter", "round", "bevel"              |
| miterLimit | float  | The miter limit for mitered line joins. Controls when a miter join is replaced with a bevel join.                      | Any positive number (e.g., 10.0)       |
| dashArray  | array  | An array of floats defining the dash pattern. Alternating values represent lengths of opaque and transparent segments. | Array of floats (e.g., \[10, 5, 2, 5]) |
| dashPhase  | float  | The offset to start the dash pattern. Controls where in the dash pattern to begin.                                     | Any number (e.g., 0.0)                 |

### End Cap Styles

* `butt` - Ends with no added decoration (square end at the endpoint)
* `round` - Ends with a round decoration (semicircle beyond the endpoint)
* `square` - Ends with a square projection (square beyond the endpoint)

### Line Join Styles

* `miter` - Joins segments by extending outer edges until they meet
* `round` - Joins segments by rounding off the corner
* `bevel` - Joins segments by connecting outer corners with a straight segment

## Example

```boxlang
// Set basic stroke width
ImageSetDrawingStroke( myImage, { width: 3.0 } );

// Set width and end cap style
ImageSetDrawingStroke( myImage, { width: 5.0, endCaps: "round" } );

// Create a dashed line
ImageSetDrawingStroke( myImage, {
    width: 2.0,
    dashArray: [10, 5],
    dashPhase: 0
} );

// Full configuration
ImageSetDrawingStroke( myImage, {
    width: 4.0,
    endCaps: "round",
    lineJoins: "miter",
    miterLimit: 10.0,
    dashArray: [15, 5, 5, 5],
    dashPhase: 0
} );

// As a member function (chainable)
myImage.setDrawingStroke({ width: 2 })
       .drawLine(0, 0, 100, 100)
       .setDrawingStroke({ width: 4, dashArray: [5, 5] })
       .drawRect(50, 50, 100, 100, false);
```

## Related BIFs

* ImageSetDrawingColor
* ImageDrawLine
* ImageDrawRect
* ImageDrawOval
* ImageSetAntiAliasing

## Notes

* The `name` argument can be a `BoxImage` object or the name of an image variable in the current context.
* All attributes in the `attributeCollection` are optional - only provide the ones you want to change.
* If an attribute is not provided, the corresponding stroke property remains unchanged from its current value.
* The operation modifies the image in place when used as a member function.
* Returns the modified image object for chaining or further processing.
* Default values: `width=1.0`, `endCaps="round"`, `lineJoins="bevel"`
* The stroke settings affect all subsequent drawing operations until changed again.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://boxlang.ortusbooks.com/boxlang-framework/modularity/image-manipulation/reference/built-in-functions/imagesetdrawingstroke.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
