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!
 
       
       
 

 
 
 
 
			
 
 
