So, I wrote my first script for LDCad, hooray!
It is a simple macro to transpose two colors in a selection. You might use it if you have built a huge checkered floor out of tiles and realized you have the pattern backwards!
I'm sure there are ways to improve it, but I'm actually pleased I was able to work it out in one day.
Here it is:
Suggestions are welcome!
It is a simple macro to transpose two colors in a selection. You might use it if you have built a huge checkered floor out of tiles and realized you have the pattern backwards!
I'm sure there are ways to improve it, but I'm actually pleased I was able to work it out in one day.
Here it is:
Code:
genTools=require('genTools')
function runColorSwap()
local ses=ldc.session()
local sel=ses:getSelection()
local cnt=sel:getRefCount()
if not ses:isLinked() then
ldc.dialog.runMessage('No active model.')
return
end
if cnt==0 then
ldc.dialog.runMessage('No selection active.')
return
elseif cnt<2 then
ldc.dialog.runMessage('At least two items must be selected.')
return
end
local colors={}
local function has_value (tab, val)
for k, v in ipairs(tab) do
if v == val then
return true
end
end
return false
end
for i=1,cnt do
local ref=sel:getRef(i)
local col=ref:getColor()
if not has_value(colors, col) then
table.insert(colors, col)
end
end
if #colors==2 then
for i=1,cnt do
local ref=sel:getRef(i)
local col=ref:getColor()
if col==colors[1] then
ref:setColor(colors[2])
elseif col==colors[2] then
ref:setColor(colors[1])
end
end
else ldc.dialog.runMessage('The selection must contain exactly two colors.')
end
end
--===================
function register()
local macro=ldc.macro('Color swap')
macro:setHint('Transposes two colors in a selection.')
macro:setEvent('run', 'runColorSwap')
end
register()
Suggestions are welcome!