We have moved to https://dokuwiki.librecad.org/

Lots of content was already moved to the new wiki, but there is still work to do. If you want to contribute, please register a new account at https://dokuwiki.librecad.org/

This wiki will be kept for a while to keep search engine results valid. Moved sites may be deleted here in future.

LibreCAD 3 - Lua Scripting

From LibreCAD wiki
Jump to: navigation, search

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 lb = lc.builder.LineBuilder()
lb:setStartPoint(lc.geo.Coordinate(0,0))
lb:setEndPoint(lc.geo.Coordinate(10,100))
lb:setLayer(layer)
local l = lb:build()

-- Get the builder object (will be renamed later)
local b=lc.operation.EntityBuilder(document)

-- Append the line
b:appendEntity(l)

-- Put the line in next operations stack
b:appendOperation(lc.operation.Push())

-- Make a copy 'in place' of the line
b:appendOperation(lc.operation.Copy(lc.geo.Coordinate(0,0))) 

-- Rotate the line
b:appendOperation(lc.operation.Rotate(lc.geo.Coordinate(0,0), math.rad(45)))

-- Do this 7 times
b:appendOperation(lc.operation.Loop(7))

-- Apply into the document
b:execute()

Result:

LibreCAD_-20140418-132431.jpg

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 lb = lc.builder.LineBuilder()
lb:setStartPoint(lc.geo.Coordinate(0,0))
lb:setEndPoint(lc.geo.Coordinate(10,100))
lb:setLayer(layer)
local l = lb:build()


-- Get the builder object
local b=lc.operation.EntityBuilder(document)

-- Append the line
b:appendEntity(l)

-- Push all entities into working buffer
b:appendOperation(lc.operation.Push())

-- Make a copy 'in place' of the line
b:appendOperation(lc.operation.Copy(lc.geo.Coordinate(0,0))) 

-- Rotate the line
b:appendOperation(lc.operation.Rotate(lc.geo.Coordinate(0,0), math.rad(45)))

-- Do this 7 times
b:appendOperation(lc.operation.Loop(7))

-- Push all entities into working buffer
b:appendOperation(lc.operation.Push())

-- copy
b:appendOperation(lc.operation.Copy(lc.geo.Coordinate(200,0)))

-- Apply into the document
b:execute()

Result:

LibreCAD_-20140418-145037.jpg