---
title: PathData
---
PathData is an indexed collection of [PathCommand](/scripting/api-reference/path/path-command) objects.
Both Path and PathData behave like arrays of commands and support iteration via ipairs.
## Methods
### `__len`
{/* function __len(self): number */}
```lua
__len() -> number
```
Each entry is a [PathCommand](/scripting/api-reference/path/path-command) describing one segment or action in the path.
```lua
for i, command in ipairs(pathData) do
print(i, command.type)
end
```
Returns the number of commands in the path.
```lua
local count = #pathData
print(count)
```
### `contours`
{/* contours: (self: PathData) -> ContourMeasure? */}
```lua
contours() -> ContourMeasure?
```
Returns a [ContourMeasure](/scripting/api-reference/path/contour-measure) for the first contour in the path. A contour is a
sequence of path segments starting at a `moveTo` and ending before the next
`moveTo` (or end of path). Use the `next` property on the returned
[ContourMeasure](/scripting/api-reference/path/contour-measure) to iterate through subsequent contours. Returns `nil` if the
path has no contours.
```lua
local contour = pathData:contours()
while contour do
print(contour.length)
contour = contour.next
end
```
### `measure`
{/* measure: (self: PathData) -> PathMeasure */}
```lua
measure() -> PathMeasure
```
Returns a [PathMeasure](/scripting/api-reference/path/path-measure) that measures the entire path across all contours.
This provides the total length and allows operations on the path as a whole.
```lua
local measure = pathData:measure()
print(measure.length)
```