Skip to content

Commit

Permalink
Add circle creation
Browse files Browse the repository at this point in the history
  • Loading branch information
feragon committed Jun 16, 2016
1 parent b2dc671 commit d4340c9
Show file tree
Hide file tree
Showing 10 changed files with 185 additions and 8 deletions.
68 changes: 68 additions & 0 deletions lcUI/ui/icons/circle.svg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions lcUI/ui/resource.qrc
Expand Up @@ -2,5 +2,6 @@
<qresource prefix="/icons"> <qresource prefix="/icons">
<file alias="linesfree.png">icons/linesfree.png</file> <file alias="linesfree.png">icons/linesfree.png</file>
<file alias="linesnormal.png">icons/linesnormal.png</file> <file alias="linesnormal.png">icons/linesnormal.png</file>
<file alias="circle.svg">icons/circle.svg</file>
</qresource> </qresource>
</RCC> </RCC>
87 changes: 87 additions & 0 deletions lcUILua/actions/circleoperations.lua
@@ -0,0 +1,87 @@
CircleOperations = {}
CircleOperations.__index = CircleOperations

setmetatable(CircleOperations, {
__index = Operations,
__call = function (o, ...)
local self = setmetatable({}, o)
self:_init(...)
return self
end,
})

function CircleOperations:_init(id)
Operations._init(self, id)

self.center = nil
self.circle = nil
self.circle_id = ID():id()

event.register('point', self)

message("Click on center")
end

function CircleOperations:onEvent(eventName, ...)
if(Operations.forMe(self) == false) then
return
end

if(eventName == "point") then
self:newPoint(...)
elseif(eventName == "mouseMove") then
self:createTempCircle(...)
elseif(eventName == "number") then
self:createCircle(...)
end
end

function CircleOperations:newPoint(point)
if(self.center == nil) then
self.center = point
self.circle = self:getCircle(point, 0)

active_widget():tempEntities():addEntity(self.circle)

event.register('mouseMove', self)
event.register('number', self)

message("Click on second point or enter the radius")
else
self:createCircle(point)
end
end

function CircleOperations:getCircle(center, radius)
if(type(radius) == "userdata") then
radius = center:distanceTo(radius)
end

local d = active_widget():document()
local layer = d:layerByName("0")
local c = Circle(center, radius, layer)
c:setId(self.circle_id)

return c
end

function CircleOperations:createTempCircle(point)
active_widget():tempEntities():removeEntity(self.circle)

self.circle = self:getCircle(self.center, point)

active_widget():tempEntities():addEntity(self.circle)
end

function CircleOperations:createCircle(point)
active_widget():tempEntities():removeEntity(self.circle)

local b = Builder(active_widget():document())
local c = self:getCircle(self.center, point)
b:append(c)
b:execute()

event.delete('mouseMove', self)
event.delete('number', self)
event.delete('point', self)
end
1 change: 1 addition & 0 deletions lcUILua/actions/lineoperations.lua
Expand Up @@ -47,6 +47,7 @@ function LineOperations:newPoint(point)
b:execute() b:execute()


event.delete('mouseMove', self) event.delete('mouseMove', self)
event.delete('number', self)
event.delete('point', self) event.delete('point', self)
else else
self.lastPoint = point self.lastPoint = point
Expand Down
1 change: 1 addition & 0 deletions lcUILua/actions/operations.lua
@@ -1,5 +1,6 @@
require 'actions.event' require 'actions.event'
require 'actions.lineoperations' require 'actions.lineoperations'
require 'actions.circleoperations'


Operations = {} Operations = {}
Operations.__index = Operations Operations.__index = Operations
Expand Down
1 change: 1 addition & 0 deletions lcUILua/ui/commandline.lua
Expand Up @@ -45,6 +45,7 @@ function add_commandline()
luaInterface:luaConnect(cliCommand, "numberEntered(double)", number) luaInterface:luaConnect(cliCommand, "numberEntered(double)", number)


add_command("LINE", create_line) add_command("LINE", create_line)
add_command("CIRCLE", create_circle)


event.register("point", setLastPoint) event.register("point", setLastPoint)
end end
2 changes: 2 additions & 0 deletions lcUILua/ui/mainwindow.lua
Expand Up @@ -40,6 +40,7 @@ local function create_menu()
local menuBar = mainWindow:menuBar() local menuBar = mainWindow:menuBar()
local drawMenu = menuBar:addMenuStr(qt.QString("Draw")) local drawMenu = menuBar:addMenuStr(qt.QString("Draw"))
local lineAction = drawMenu:addActionStr(qt.QString("Line")) local lineAction = drawMenu:addActionStr(qt.QString("Line"))
local circleAction = drawMenu:addActionStr(qt.QString("Circle"))


local luaMenu = menuBar:addMenuStr(qt.QString("Lua")) local luaMenu = menuBar:addMenuStr(qt.QString("Lua"))
local luaScriptAction = luaMenu:addActionStr(qt.QString("Run script")) local luaScriptAction = luaMenu:addActionStr(qt.QString("Run script"))
Expand All @@ -50,6 +51,7 @@ local function create_menu()
luaInterface:luaConnect(mainWindow:findChild("actionRedo"), "triggered(bool)", redo) luaInterface:luaConnect(mainWindow:findChild("actionRedo"), "triggered(bool)", redo)


luaInterface:luaConnect(lineAction, "triggered(bool)", create_line) luaInterface:luaConnect(lineAction, "triggered(bool)", create_line)
luaInterface:luaConnect(circleAction, "triggered(bool)", create_circle)


luaInterface:luaConnect(luaScriptAction, "triggered(bool)", open_lua_script) luaInterface:luaConnect(luaScriptAction, "triggered(bool)", open_lua_script)
end end
Expand Down
4 changes: 4 additions & 0 deletions lcUILua/ui/operations.lua
@@ -1,3 +1,7 @@
function create_line() function create_line()
op[active_widget().id] = LineOperations(active_widget().id) op[active_widget().id] = LineOperations(active_widget().id)
end

function create_circle()
op[active_widget().id] = CircleOperations(active_widget().id)
end end
27 changes: 19 additions & 8 deletions lcUILua/ui/toolbar.lua
@@ -1,20 +1,31 @@
local iconSize = qt.QSize(24, 24) local iconSize = qt.QSize(24, 24)


local function create_button(name, icon)
local button = qt.QPushButton(qt.QString(name))
button:setFlat(true)

if(icon ~= nil) then
button:setIcon(qt.QIcon(qt.QString(icon)))
button:setIconSize(iconSize)
end

return button
end

function add_toolbar() function add_toolbar()
toolbar = lc.Toolbar(mainWindow) toolbar = lc.Toolbar(mainWindow)
mainWindow:addDockWidget(4, toolbar) mainWindow:addDockWidget(4, toolbar)


local quickAccess = lc.ToolbarTab() local quickAccess = lc.ToolbarTab()
local testGroup = quickAccess:addGroup("Creation") local creationGroup = quickAccess:addGroup("Creation")

local lineButton = qt.QPushButton(qt.QString(""))
lineButton:setFlat(true)
lineButton:setIcon(qt.QIcon(qt.QString(":/icons/linesnormal.png")))
lineButton:setIconSize(iconSize)

quickAccess:addButton(testGroup, lineButton,0,0,1,1)


local lineButton = create_button("", ":/icons/linesnormal.png")
quickAccess:addButton(creationGroup, lineButton, 0, 0, 1, 1)
luaInterface:luaConnect(lineButton, "pressed()", create_line) luaInterface:luaConnect(lineButton, "pressed()", create_line)


local circleButton = create_button("", ":/icons/circle.svg")
quickAccess:addButton(creationGroup, circleButton, 1, 0, 1, 1)
luaInterface:luaConnect(circleButton, "pressed()", create_circle)

toolbar:addTab("Quick Access", quickAccess) toolbar:addTab("Quick Access", quickAccess)
end end
1 change: 1 addition & 0 deletions lcadluascript/cad/lualibrecadbridge.cpp
Expand Up @@ -115,6 +115,7 @@ void lua_openlckernel(lua_State* L) {
.addFunction("y", &geo::Coordinate::y) .addFunction("y", &geo::Coordinate::y)
.addFunction("z", &geo::Coordinate::z) .addFunction("z", &geo::Coordinate::z)
.addFunction("angleTo", &geo::Coordinate::angleTo) .addFunction("angleTo", &geo::Coordinate::angleTo)
.addFunction("distanceTo", &geo::Coordinate::distanceTo)


.addFunction("add", [](const geo::Coordinate* c1, const geo::Coordinate c2) { .addFunction("add", [](const geo::Coordinate* c1, const geo::Coordinate c2) {
return *c1 + c2; return *c1 + c2;
Expand Down

0 comments on commit d4340c9

Please sign in to comment.