LibreCAD 3 - Lua Scripting

Lua is a powerful, fast, lightweight, embeddable scripting language developed by a team at PUC-Rio, the Pontifical Catholic University of Rio de Janeiro in Brazil.

LibreCAD Scripting with lua

One of the scripting languages LibreCAD support's is [Lua]. Lua is the default scripting language and will be available for most simple scripting needs.
Lua is very powerful but at the same time provides a easy to understand programming language. Please see Lua's reference manual for more information.

To create entities within a document there is a builder object that allows to add new entities or append selected entities into the build. From there you can apply steps to process the entities. After each step the result of the step is passed along to the next step.

To run the examples, open the Lua script window in the toolbar "Lua" > "Run script".

Example 1:

Create a line and copy/rotate the line 7 times.
This create 128 entities, because the Copy operation copy all the lines on each loop.

-- Get the layer
local layer = document:layerByName("0")
-- Create a Line
local l=Line(Coord(0,0), Coord(10,100), layer);
-- Get the builder object (will be renamed later)
local b=EntityBuilder(document)
-- Append the line
b:appendEntity(l)
-- Put the line in next operations stack
b:appendOperation(Push())
-- Make a copy 'in place' of the line
b:appendOperation(Copy(Coord(0,0)))
-- Rotate the line
b:appendOperation(Rotate(Coord(0,0), math.rad(45)))
-- Do this 7 times
b:appendOperation(Loop(7))
-- Apply into the document
b:execute()

Result:

Example 2:

Create a line and copy/rotate the line 7 times, then copy the result and move that to location 100,0
Same as abore, it creates 256 lines.

-- Get the layer
local layer = document:layerByName("0")
-- Create a Line
local l=Line(Coord(0,0), Coord(10,100), layer);
-- Get the builder object
local b=EntityBuilder(document)
-- Append the line
b:appendEntity(l)
-- Push all entities into working buffer
b:appendOperation(Push())
-- Make a copy 'in place' of the line
b:appendOperation(Copy(Coord(0,0)))
-- Rotate the line
b:appendOperation(Rotate(Coord(0,0), math.rad(45)))
-- Do this 7 times
b:appendOperation(Loop(7))
-- Push all entities into working buffer
b:appendOperation(Push())
-- copy
b:appendOperation(Copy(Coord(200,0)))
-- Apply into the document
b:execute()