# How to Draw Cubic Bezier Curve via Lua Script?

Hi folks,

Is it possible to draw a cubic Bezier curve via Lua script with app.useTool? I’m having trouble working out how I might order a points array to give to the curve. In part this is because I’m not acclimated to working with the tool manually either . The curve tool might use a different type of curve altogether, but here’s what I’m familiar with:

In a format like this SVG example,

<svg width="190" height="160" xmlns="http://www.w3.org/2000/svg">
<path d="M 10 80 C 40 10, 65 10, 95 80 S 150 150, 180 80" stroke="black" fill="transparent"/>
</svg>

the M moves the sub-path to the initial anchor point x and y, then C is followed by three coordinates which stand for the first control point, second control point and second anchor point. (The S command is a reflection of the curve, not really needed for this example; I’m only concerned with the left side of the curve at the moment.)

Here’s some Lua code as it stands

local pts = {
-- Horizontal line.
-- Point(10, 80), --  anchor point 0
-- Point(40, 10), -- control point 0
-- Point(65, 10), -- control point 1
-- Point(95, 80)  --  anchor point 1

-- Diagonal line.
Point(10, 80), --  anchor point 0
Point(95, 80), --  anchor point 1
Point(40, 10), -- control point 0
Point(65, 10)  -- control point 1
}

local dlg = Dialog { title = "Curve Test" }

dlg:button {
id = "ok",
text = "OK",
focus = true,
onclick = function()
local args = dlg.data
if args.ok then
app.useTool {
tool = "curve",
points = pts
}
app.refresh()
end
end
}

dlg:show { wait = false }

I realize there are work-arounds, such evaluating a range of points from a step in [0, 1] then connecting line segments. I was curious, though, if this tool could be used.

Thanks for any insights y’all might have!
Best,
Jeremy