-- ************************************************** -- Provide Moho with the name of this script object -- ************************************************** ScriptName = "SS_RefLayerUpdate" -- ************************************************** -- Reference Layer Update - Same as bulit-in, but remembers settings, shortcut-keyable + sync points -- version: 01.10 AS12.5+ #520914, #530817 M14R -- by Sam Cogheil (SimplSam) -- ************************************************** --[[ ***** Licence & Warranty ***** __NONE__ -- Use and Abuse freely ]] --[[ ***** SPECIAL THANKS to: * Stan (and team) @ MOHO Scripting -- https://mohoscripting.com * The friendly faces @ Lost Marble / Moho Forum -- https://www.lostmarble.com/forum ]] -- ************************************************** -- General information about this script -- ************************************************** SS_RefLayerUpdate = {} local SS_RefLayerUpdateDialog = {} function SS_RefLayerUpdate:Name() return 'Reference Layer Update' end function SS_RefLayerUpdate:Version() return '1.1 #5308' end function SS_RefLayerUpdate:UILabel() return 'Update Reference Layer' end function SS_RefLayerUpdate:Creator() return "Sam Cogheil (SimplSam)" end function SS_RefLayerUpdate:Description() return "Update Reference Layer/s" end function SS_RefLayerUpdate:ColorizeIcon() return true end -- ************************************************** -- Is Relevant / Is Enabled -- ************************************************** function SS_RefLayerUpdate:IsRelevant(moho) -- return moho.layer:IsReferencedLayer() return true end function SS_RefLayerUpdate:IsEnabled(moho) return true end -- ************************************************** -- Recurring Values -- ************************************************** SS_RefLayerUpdate.addNewLayers = true SS_RefLayerUpdate.removeLayers = true SS_RefLayerUpdate.replaceVectors = false SS_RefLayerUpdate.replaceBones = true SS_RefLayerUpdate.replaceBinding = false -- ************************************************** -- Prefs -- ************************************************** function SS_RefLayerUpdate:LoadPrefs(prefs) self.addNewLayers = prefs:GetBool("SS_RefLayerUpdate.addNewLayers", true) self.removeLayers = prefs:GetBool("SS_RefLayerUpdate.removeLayers", true) self.replaceVectors = prefs:GetBool("SS_RefLayerUpdate.replaceVectors", false) self.replaceBones = prefs:GetBool("SS_RefLayerUpdate.replaceBones", true) self.replaceBinding = prefs:GetBool("SS_RefLayerUpdate.replaceBinding", false) end function SS_RefLayerUpdate:SavePrefs(prefs) prefs:SetBool("SS_RefLayerUpdate.addNewLayers", self.addNewLayers) prefs:SetBool("SS_RefLayerUpdate.removeLayers", self.removeLayers) prefs:SetBool("SS_RefLayerUpdate.replaceVectors", self.replaceVectors) prefs:SetBool("SS_RefLayerUpdate.replaceBones", self.replaceBones) prefs:SetBool("SS_RefLayerUpdate.replaceBinding", self.replaceBinding) end function SS_RefLayerUpdate:ResetPrefs() self.addNewLayers = true self.removeLayers = true self.replaceVectors = false self.replaceBones = true self.replaceBinding = false end -- ************************************************** -- The guts of this script -- ************************************************** function SS_RefLayerUpdate:Run(moho) local mohodoc = moho.document local uuids = {} local dlog = SS_RefLayerUpdateDialog:new(moho) if (dlog:DoModal() == LM.GUI.MSG_CANCEL) then return end -- Get All Layer UUIDs if (self.replaceBinding) then local i = 1 local _layer = mohodoc:LayerByAbsoluteID(i) repeat uuids[_layer:UUID()] = _layer i = i + 1 _layer = mohodoc:LayerByAbsoluteID(i) until _layer == nil end local refSyncOpts = MOHO.MohoLayerRefSyncOptions:new_local() refSyncOpts.fAddNewLayers = self.addNewLayers refSyncOpts.fRemoveMissingLayers = self.removeLayers refSyncOpts.fReplaceMismatchedBones = self.replaceBones refSyncOpts.fReplaceMismatchedVectors = self.replaceVectors mohodoc:PrepUndo(nil) mohodoc:SetDirty() local layerRefInfo = MOHO.MohoLayerRef:new_local() local didoBind = {} local vecLayer, vecSelect local wasLayer = moho.layer local function ProcessLayer(layer) if (layer:IsReferencedLayer() and layer:IsReferenceOutdated()) then layer:UpdateReferencedLayer(refSyncOpts) end if (layer:IsGroupType()) then local groupLayer = moho:LayerAsGroup(layer) for j = 0, groupLayer:CountLayers() - 1 do ProcessLayer(groupLayer:Layer(j)) end end if (self.replaceBinding and layer:LayerType() == MOHO.LT_VECTOR and layer:IsReferencedLayer() and not layer:IsReferenceOutdated() and not didoBind[mohodoc:LayerAbsoluteID(layer)]) then layer:GetLayerRefInfo(layerRefInfo) if (layerRefInfo.fSameDoc) then local refLayer = uuids[layerRefInfo.fLayerUUID:Buffer()] if (refLayer) then local mesh = moho:LayerAsVector(layer):Mesh() local refMesh = moho:LayerAsVector(refLayer):Mesh() for j = 0, refMesh:CountPoints() - 1 do mesh:Point(j).fParent = refMesh:Point(j).fParent end didoBind[mohodoc:LayerAbsoluteID(layer)] = true layer:UpdateCurFrame() vecLayer = layer vecSelect = vecSelect or vecLayer:SecondarySelection() end end end end for i = 0, mohodoc:CountSelectedLayers() - 1 do local layer = mohodoc:GetSelectedLayer(i) ProcessLayer(mohodoc:GetSelectedLayer(i)) end -- Fix View Refresh if Vector updated but none of selected are Vector (and parental not Ref) if (vecLayer and not vecSelect) then moho:SetSelLayer(vecLayer, true) moho:UpdateUI() wasLayer:SetSecondarySelection(false) -- < if not - SetSel deselected if group ?? moho:SetSelLayer(wasLayer, true) vecLayer:SetSecondarySelection(false) end end -- ************************************************** -- SS_RefLayerUpdateDialog -- ************************************************** SS_RefLayerUpdateDialog.ADD_NEWMISSING_LAYERS = MOHO.MSG_BASE + 01 SS_RefLayerUpdateDialog.REMOVE_LAYERS = MOHO.MSG_BASE + 02 SS_RefLayerUpdateDialog.REPLACE_MISMATCHED_VECTORS = MOHO.MSG_BASE + 03 SS_RefLayerUpdateDialog.REPLACE_MISMATCHED_BONES = MOHO.MSG_BASE + 04 SS_RefLayerUpdateDialog.RESYNC_POINT_BINDING = MOHO.MSG_BASE + 05 function SS_RefLayerUpdateDialog:new() local d = LM.GUI.SimpleDialog('Reference Layer Update', SS_RefLayerUpdateDialog) local l = d:GetLayout() d.dynamicText1Text = LM.GUI.DynamicText('Layer differences:', 0) l:AddChild(d.dynamicText1Text, LM.GUI.ALIGN_LEFT, 0) d.addNewLayersCheck = LM.GUI.CheckBox('Add new/missing layers from source', d.ADD_NEWMISSING_LAYERS) l:AddChild(d.addNewLayersCheck, LM.GUI.ALIGN_LEFT, 0) d.removeLayersCheck = LM.GUI.CheckBox('Remove layers that don\'t exist at source', d.REMOVE_LAYERS) l:AddChild(d.removeLayersCheck, LM.GUI.ALIGN_LEFT, 0) d.dynamicText2Text = LM.GUI.DynamicText('Vector differences:', 0) l:AddChild(d.dynamicText2Text, LM.GUI.ALIGN_LEFT, 0) d.replaceVectorsCheck = LM.GUI.CheckBox('Replace mismatched vectors', d.REPLACE_MISMATCHED_VECTORS) l:AddChild(d.replaceVectorsCheck, LM.GUI.ALIGN_LEFT, 0) d.replaceBindingCheck = LM.GUI.CheckBox('Resync point bindings', d.RESYNC_POINT_BINDING) l:AddChild(d.replaceBindingCheck, LM.GUI.ALIGN_LEFT, 0) d.dynamicText3Text = LM.GUI.DynamicText('Bone differences:', 0) l:AddChild(d.dynamicText3Text, LM.GUI.ALIGN_LEFT, 0) d.replaceBonesCheck = LM.GUI.CheckBox('Replace mismatched bones', d.REPLACE_MISMATCHED_BONES) l:AddChild(d.replaceBonesCheck, LM.GUI.ALIGN_LEFT, 0) return d end function SS_RefLayerUpdateDialog:UpdateWidgets(moho) self.addNewLayersCheck:SetValue(SS_RefLayerUpdate.addNewLayers) self.removeLayersCheck:SetValue(SS_RefLayerUpdate.removeLayers) self.replaceVectorsCheck:SetValue(SS_RefLayerUpdate.replaceVectors) self.replaceBonesCheck:SetValue(SS_RefLayerUpdate.replaceBones) self.replaceBindingCheck:SetValue(SS_RefLayerUpdate.replaceBinding) end function SS_RefLayerUpdateDialog:HandleMessage(msg) end function SS_RefLayerUpdateDialog:OnOK(moho) SS_RefLayerUpdate.addNewLayers = self.addNewLayersCheck:Value() SS_RefLayerUpdate.removeLayers = self.removeLayersCheck:Value() SS_RefLayerUpdate.replaceVectors = self.replaceVectorsCheck:Value() SS_RefLayerUpdate.replaceBones = self.replaceBonesCheck:Value() SS_RefLayerUpdate.replaceBinding = self.replaceBindingCheck:Value() end
SS - Reference Layer Update+
Listed
Author: simplsam
View Script
Script type: Button/Menu
Uploaded: Sep 15 2022, 10:00
Last modified: Aug 18 2023, 02:38
Script Version: 1.1 #5308
Update Reference Layers + Point Bindings. Accessible via button/keyboard shortcut, and remembers settings (ver 1.10)
Same functionality as the built-in right-click layer menu. But accessible via tool button/keyboard shortcut, and remembers last-used option settings.
V1.10 - ReSync Point Bindings (same file reference only)
This script, and all other scripts on this site are distributed as free software under the GNU General Public License 3.0 or later.
Downloads count: 728
SS - Reference Layer Update+
Listed
Author: simplsam
View Script
Script type: Button/Menu
Uploaded: Sep 15 2022, 10:00
Last modified: Aug 18 2023, 02:38
Script Version: 1.1 #5308
Update Reference Layers + Point Bindings. Accessible via button/keyboard shortcut, and remembers settings (ver 1.10)
Same functionality as the built-in right-click layer menu. But accessible via tool button/keyboard shortcut, and remembers last-used option settings.
V1.10 - ReSync Point Bindings (same file reference only)
V1.10 - ReSync Point Bindings (same file reference only)
This script, and all other scripts on this site are distributed as free software under the GNU General Public License 3.0 or later.
Downloads count: 728