Merge Layers Script?
Posted: Tue Dec 14, 2021 2:08 am
Has anyone written a Merge Layers Script to save constantly cutting/pasting and deleting layers?
Cheers
D.K
Cheers
D.K
Code: Select all
-- **************************************************
-- Provide Moho with the name of this script object
-- **************************************************
ScriptName = "Syn_MergeVectors"
-- **************************************************
-- General information about this script
-- **************************************************
Syn_MergeVectors = {}
function Syn_MergeVectors:Name()
return "Merge Vectors"
end
function Syn_MergeVectors:Version()
return "1.0"
end
function Syn_MergeVectors:Description()
return "Merge all selected vector layers"
end
function Syn_MergeVectors:Creator()
return "(c)2021 J.Wesley Fowler (synthsin75)"
end
function Syn_MergeVectors:UILabel()
return("SYN: Merge Vectors")
end
-- **************************************************
-- Recurring values
-- **************************************************
Syn_MergeVectors.delete = true --true to delete merged layers, otherwise false
-- **************************************************
-- The guts of this script
-- **************************************************
function Syn_MergeVectors:Run(moho)
moho.document:PrepUndo()
moho.document:SetDirty()
local layers = {}
local count = 0
repeat
local layer = moho.document:LayerByAbsoluteID(count)
if layer then
count = count + 1
if (layer:SecondarySelection() and layer:LayerType() == MOHO.LT_VECTOR) then
table.insert(layers, moho:LayerAsVector(layer))
end
end
until not layer
local merge = moho:CreateNewLayer(MOHO.LT_VECTOR, false)
merge:SetName("Merged "..count.." vector layers")
moho:SetSelLayer(merge)
for i,v in ipairs(layers) do
moho:Copy(v:Mesh())
moho:Paste()
end
if (not self.delete) then
moho:SetSelLayer(layers[#layers])
end
for i=#layers, 1, -1 do
if (self.delete) then
moho:DeleteLayer(layers[i])
else
layers[i]:SetSecondarySelection(true)
end
end
end
If that works better for people, DK?, I can always do that instead. But if anyone wants to leave the merged layers unaltered and undeleted (non-destructive merge), making a new layer keeps that an option.
Code: Select all
-- **************************************************
-- Provide Moho with the name of this script object
-- **************************************************
ScriptName = "Syn_MergeVectors"
-- **************************************************
-- General information about this script
-- **************************************************
Syn_MergeVectors = {}
function Syn_MergeVectors:Name()
return "Merge Vectors"
end
function Syn_MergeVectors:Version()
return "1.1"
end
function Syn_MergeVectors:Description()
return "Merge all selected vector layers"
end
function Syn_MergeVectors:Creator()
return "(c)2021 J.Wesley Fowler (synthsin75)"
end
function Syn_MergeVectors:UILabel()
return("SYN: Merge Vectors")
end
-- **************************************************
-- Recurring values
-- **************************************************
Syn_MergeVectors.destructive = true --true to delete merged layers, otherwise false
-- **************************************************
-- The guts of this script
-- **************************************************
function Syn_MergeVectors:Run(moho)
moho.document:PrepUndo()
moho.document:SetDirty()
local layers = {}
local count = 0
repeat
local layer = moho.document:LayerByAbsoluteID(count)
if layer then
count = count + 1
if (layer:SecondarySelection() and layer:LayerType() == MOHO.LT_VECTOR) then
table.insert(layers, moho:LayerAsVector(layer))
end
end
until not layer
local merge
if (not self.destructive) then
merge = moho:CreateNewLayer(MOHO.LT_VECTOR, false)
merge:SetName("Merged "..count.." vector layers")
else
merge = moho.layer
end
moho:SetSelLayer(merge)
for i,v in ipairs(layers) do
if (v ~= merge) then
v:Mesh():SelectAll()
moho:Copy(v:Mesh())
moho:Paste()
end
end
if (not self.destructive) then
moho:SetSelLayer(layers[1])
end
for i=#layers, 1, -1 do
if (self.destructive and layers[i] ~= merge) then
moho:DeleteLayer(layers[i])
elseif (not self.destructive) then
layers[i]:SetSecondarySelection(true)
end
end
end