Page 1 of 2

Only visible bones option for Parent Bone tool

Posted: Sun May 22, 2022 11:52 pm
by Daxel
Right now the Parent Bone tool doesn't have any options to limit the amount of arrows we see, so the shy bones and the hidden bones still show their arrows cluttering the view.

I think the default mode should be to show only the relations of the visible bones, with an option to show the relation of all bones. After all, it doesn't make much sense to work on the relation of bones while you are not seeing them.

This has always been slightly annoying to me, but now that we have the super cool Vitruvian bones I think we need a solution, because the Parent Bone tool shows even the non-active vitruvian bones groups, and you can see below how it looks with only two hands as Vitruvian groups. I'm scared of adding a third. :roll:

If there is already some way to solve this that I missed please let me know.

Image

Re: Only visible bones option for Parent Bone tool

Posted: Mon May 23, 2022 12:12 am
by Greenlaw
You know, that never bothered me before...but it probably will now.

Gee, thanks Daxel. 😸

Anyway, I agree...this sounds like a good idea.

Re: Only visible bones option for Parent Bone tool

Posted: Mon May 23, 2022 12:18 am
by synthsin75
Quick mod to do that, but I don't have the time to make it an option:

Code: Select all

-- **************************************************
-- Provide Moho with the name of this script object
-- **************************************************

ScriptName = "LM_ReparentBone"

-- **************************************************
-- General information about this script
-- **************************************************

LM_ReparentBone = {}

LM_ReparentBone.BASE_STR = 2230

function LM_ReparentBone:Name()
	return "Reparent Bone"
end

function LM_ReparentBone:Version()
	return "6.0"
end

function LM_ReparentBone:Description()
	return MOHO.Localize("/Scripts/Tool/ReparentBone/Description=Click to attach bone to a new parent (hold <alt> to select a new bone, <ctrl/cmd> to select a target bone)")
end

function LM_ReparentBone:Creator()
	return "Lost Marble LLC"
end

function LM_ReparentBone:UILabel()
	return(MOHO.Localize("/Scripts/Tool/ReparentBone/ReparentBone=Reparent Bone"))
end

-- **************************************************
-- The guts of this script
-- **************************************************

function LM_ReparentBone:IsEnabled(moho)
	if (moho:CountBones() < 2) then
		return false
	end
	if (moho.frame > 0 and not MOHO.IsMohoPro()) then
		return false
	end
	return true
end

function LM_ReparentBone:IsRelevant(moho)
	local skel = moho:Skeleton()
	if (skel == nil) then
		return false
	end
	if (moho.frame > 0 and not MOHO.IsMohoPro()) then
		return false
	end
	return true
end

function LM_ReparentBone:OnMouseDown(moho, mouseEvent)
	moho.document:PrepUndo(moho.layer, true)
	moho.document:SetDirty()
	self:OnReparent(moho, mouseEvent)
end

function LM_ReparentBone:OnMouseMoved(moho, mouseEvent)
	self:OnReparent(moho, mouseEvent)
end

function LM_ReparentBone:OnMouseUp(moho, mouseEvent)
	moho:UpdateUI()
end

function LM_ReparentBone:OnKeyDown(moho, keyEvent)
	LM_SelectBone:OnKeyDown(moho, keyEvent)
end

function LM_ReparentBone:DrawMe(moho, view)
	local skel = moho:Skeleton()
	if (skel == nil) then
		return
	end

	local g = view:Graphics()
	local matrix = LM.Matrix:new_local()
	local bonePt = LM.Vector2:new_local()
	local parentPt = LM.Vector2:new_local()
	local arrowPt1 = LM.Vector2:new_local()
	local arrowPt2 = LM.Vector2:new_local()

	moho.layer:GetFullTransform(moho.frame, matrix, moho.document)
	g:Push()
	g:ApplyMatrix(matrix)

	g:SetSmoothing(true)
	for i = 0, skel:CountBones() - 1 do
		local bone = skel:Bone(i)
--[syn]		if (bone.fParent >= 0) then
--[[syn]]		if (bone.fParent >= 0) and (not bone.fHidden or not bone.fShy) then
			local parentBone = skel:Bone(bone.fParent)

			bonePt:Set(bone.fLength / 2, 0)
			bone.fMovedMatrix:Transform(bonePt)

			parentPt:Set(parentBone.fLength / 2, 0)
			parentBone.fMovedMatrix:Transform(parentPt)

			local v = parentPt - bonePt
			local mag = v:Mag()
			local f = mag
			if (f > 0.2) then
				f = 0.2
			end
			arrowPt1:Set(mag - f / 4, -f / 16)
			arrowPt2:Set(mag - f / 4, f / 16)
			f = math.atan2(v.y, v.x)
			arrowPt1:Rotate(f)
			arrowPt2:Rotate(f)
			arrowPt1.x = arrowPt1.x + bonePt.x
			arrowPt1.y = arrowPt1.y + bonePt.y
			arrowPt2.x = arrowPt2.x + bonePt.x
			arrowPt2.y = arrowPt2.y + bonePt.y

			if (bone.fSelected) then
				g:SetColor(MOHO.MohoGlobals.SelCol)
			else
				g:SetColor(MOHO.MohoGlobals.ElemCol)
			end
			g:DrawLine(bonePt.x, bonePt.y, parentPt.x, parentPt.y)
			g:BeginShape()
			g:AddLine(parentPt, arrowPt1)
			g:AddLine(arrowPt1, arrowPt2)
			g:AddLine(arrowPt2, parentPt)
			g:EndShape()
		end
	end

	g:Pop()
end

function LM_ReparentBone:OnReparent(moho, mouseEvent)
	if (mouseEvent.altKey) then
		LM_SelectBone:Select(moho, mouseEvent.pt, mouseEvent.vec, mouseEvent.view, mouseEvent.shiftKey, mouseEvent.ctrlKey)
		return
	end

	local skel = moho:Skeleton()
	if (skel == nil) then
		return
	end

	if (moho:CountSelectedBones() < 1) then
		return
	end

	-- let the user pick another bone - this will be the new parent
	local parentID = mouseEvent.view:PickBone(mouseEvent.pt, mouseEvent.vec, moho.layer, true)
	local parentFrame = moho.layerFrame -- 0

	if (mouseEvent.ctrlKey) then
		local targetChanged = false
		for i = 0, skel:CountBones() - 1 do
			local bone = skel:Bone(i)

			if (bone.fSelected and parentID ~= bone.fTargetBone:GetValue(moho.layerFrame)) then
				bone.fTargetBone:SetValue(moho.layerFrame, parentID)
				targetChanged = true
			end
		end
		if (targetChanged) then
			moho:NewKeyframe(CHANNEL_BONE_TARGET)
		end
	else
		for i = 0, skel:CountBones() - 1 do
			local bone = skel:Bone(i)

			if (bone.fSelected) then
				if (not skel:IsBoneChild(i, parentID)) then
					-- new parent chosen
					local v1 = LM.Vector2:new_local()
					local v2 = LM.Vector2:new_local()
					v1:Set(0, 0)
					if (bone:IsZeroLength()) then
						v2:Set(0.1, 0)
					else
						v2:Set(bone.fLength, 0)
					end
					bone.fMovedMatrix:Transform(v1)
					bone.fMovedMatrix:Transform(v2)

					if (parentID >= 0) then
						local invMatrix = LM.Matrix:new_local()
						local parent = skel:Bone(parentID)
						invMatrix:Set(parent.fMovedMatrix)
						invMatrix:Invert()
						invMatrix:Transform(v1)
						invMatrix:Transform(v2)
					end

					if (parentFrame ~= 0) then
						bone.fAnimPos:AddKey(parentFrame - 1)
						if (bone:ParentalFlipFactor() < 0.0) then
							bone.fFlipV:SetValue(parentFrame, not bone.fFlipV:GetValue(parentFrame))
						end
					end
					bone.fAnimPos:SetValue(parentFrame, v1)
					v2 = v2 - v1
					local angle = math.atan2(v2.y, v2.x)

					while angle > 2 * math.pi do
						angle = angle - 2 * math.pi
					end
					while angle < 0 do
						angle = angle + 2 * math.pi
					end

					if (bone.fFixedAngle) then
						if (parentFrame == 0) then
							bone.fAnimAngle:SetValue(parentFrame, angle)
						end
					else
						local angleDiff = angle - bone.fAnimAngle:GetValue(parentFrame)
						if (parentFrame ~= 0) then
							bone.fAnimAngle:AddKey(parentFrame - 1)
						end
						bone.fAnimAngle:SetValue(parentFrame, angle)
						-- update future angle keyframes for relative offsets just like this frame
						for keyID = 0, bone.fAnimAngle:CountKeys() - 1 do
							local angleFrame = bone.fAnimAngle:GetKeyWhen(keyID)
							if (angleFrame > parentFrame) then
								local newAngle = bone.fAnimAngle:GetValue(angleFrame) + angleDiff
								bone.fAnimAngle:SetValue(angleFrame, newAngle)
							end
						end
						if (parentFrame == 0) then -- update action keyframes for relative offsets just like this frame
							for actionID = 0, bone.fAnimAngle:CountActions() - 1 do
								local action = moho:ChannelAsAnimVal(bone.fAnimAngle:Action(actionID))
								for keyID = 0, action:CountKeys() - 1 do
									local angleFrame = action:GetKeyWhen(keyID)
									if (angleFrame > parentFrame) then
										local newAngle = action:GetValue(angleFrame) + angleDiff
										action:SetValue(angleFrame, newAngle)
									end
								end
							end
						end
					end

					if (bone.fAnimParent:CountKeys() < 2) then
						bone.fAnimParent:SetValue(0, bone.fParent)
					end
					bone.fParent = parentID
					bone.fAnimParent:SetValue(parentFrame, parentID)
					if (parentFrame ~= 0) then
						if (bone:ParentalFlipFactor() < 0.0) then
							bone.fFlipV:SetValue(parentFrame, not bone.fFlipV:GetValue(parentFrame))
						end
					end
				end
			end
		end

		moho:NewKeyframe(CHANNEL_BONE)
		moho:NewKeyframe(CHANNEL_BONE_T)
		moho:NewKeyframe(CHANNEL_BONE_PARENT)
	end

	moho.layer:UpdateCurFrame()
	mouseEvent.view:DrawMe()
	moho:UpdateSelectedChannels()
end

-- **************************************************
-- Tool options - create and respond to tool's UI
-- **************************************************

LM_ReparentBone.CHANGE = MOHO.MSG_BASE
LM_ReparentBone.DUMMY = MOHO.MSG_BASE + 1
LM_ReparentBone.SELECTITEM = MOHO.MSG_BASE + 2

function LM_ReparentBone:DoLayout(moho, layout)
	self.menu = LM.GUI.Menu(MOHO.Localize("/Scripts/Tool/ReparentBone/SelectBone=Select Bone"))

	self.popup = LM.GUI.PopupMenu(128, false)
	self.popup:SetMenu(self.menu)
	layout:AddChild(self.popup)
end

function LM_ReparentBone:UpdateWidgets(moho)
	local skel = moho:Skeleton()
	if (skel == nil) then
		return
	end

	MOHO.BuildBoneMenu(self.menu, skel, self.SELECTITEM, self.DUMMY)
end

function LM_ReparentBone:HandleMessage(moho, view, msg)
	local skel = moho:Skeleton()
	if (skel == nil) then
		return
	end

	if (msg >= self.SELECTITEM) then
		for i = 0, skel:CountBones() - 1 do
			skel:Bone(i).fSelected = (i == msg - self.SELECTITEM)
		end
		moho:UpdateUI()
	end
end

Re: Only visible bones option for Parent Bone tool

Posted: Mon May 23, 2022 2:50 am
by Greenlaw
Cool! Thanks Wes. I'll give this a try and let you know how it goes.

I can't think of why I would need to see the parenting of hidden bones unless those bones fall in a chain between visible bones. I'll let you know if there are any unexpected problems with this idea.

Re: Only visible bones option for Parent Bone tool

Posted: Mon May 23, 2022 4:32 am
by synthsin75
Greenlaw wrote: ↑Mon May 23, 2022 2:50 am I can't think of why I would need to see the parenting of hidden bones unless those bones fall in a chain between visible bones.
Yeah, and the way I did it, it still shows an arrow from any visible bone, even if it's too a hidden one.

Re: Only visible bones option for Parent Bone tool

Posted: Mon May 23, 2022 5:30 am
by Greenlaw
So far, it works like a charm! Thanks Wes. Will let you know if I run into any issues.

For users not sure what to do with the above info, copy the script to a text file and save the file as lm_reparent_bone.lua. Then move the file to the Script/Tool folder in your Custom Content Folder. For this to work you also need to copy the seven image files beginning with 'lm_reparent_bone_' from this location...

C:\Program Files\Moho\Moho 13.5.4\Resources\Support\Scripts\Tool

...to the Custom Content Folder's Script\Tool folder.

Note that if you don't copy the images to the folder, this script mod will break.

Re: Only visible bones option for Parent Bone tool

Posted: Mon May 23, 2022 11:03 am
by Daxel
Thank you so much for the script, Wes! And also for the instructions to install it, Greenlaw.

I think I installed it correctly, because the parenting of the non-visible shy bones doesn't show anymore. But the hidden bones and the non-active vitruvian bones parenting arrows keep showing so in this case my example image of the hand keeps looking the same way because vitruvian bones are the ones that add more clutter.

Re: Only visible bones option for Parent Bone tool

Posted: Tue May 24, 2022 12:39 am
by synthsin75
Forgot all about vitruvian bones.

Here ya go:

Code: Select all

-- **************************************************
-- Provide Moho with the name of this script object
-- **************************************************

ScriptName = "LM_ReparentBone"

-- **************************************************
-- General information about this script
-- **************************************************

LM_ReparentBone = {}

LM_ReparentBone.BASE_STR = 2230

function LM_ReparentBone:Name()
	return "Reparent Bone"
end

function LM_ReparentBone:Version()
	return "6.0"
end

function LM_ReparentBone:Description()
	return MOHO.Localize("/Scripts/Tool/ReparentBone/Description=Click to attach bone to a new parent (hold <alt> to select a new bone, <ctrl/cmd> to select a target bone)")
end

function LM_ReparentBone:Creator()
	return "Lost Marble LLC"
end

function LM_ReparentBone:UILabel()
	return(MOHO.Localize("/Scripts/Tool/ReparentBone/ReparentBone=Reparent Bone"))
end

-- **************************************************
-- The guts of this script
-- **************************************************

function LM_ReparentBone:IsEnabled(moho)
	if (moho:CountBones() < 2) then
		return false
	end
	if (moho.frame > 0 and not MOHO.IsMohoPro()) then
		return false
	end
	return true
end

function LM_ReparentBone:IsRelevant(moho)
	local skel = moho:Skeleton()
	if (skel == nil) then
		return false
	end
	if (moho.frame > 0 and not MOHO.IsMohoPro()) then
		return false
	end
	return true
end

function LM_ReparentBone:OnMouseDown(moho, mouseEvent)
	moho.document:PrepUndo(moho.layer, true)
	moho.document:SetDirty()
	self:OnReparent(moho, mouseEvent)
end

function LM_ReparentBone:OnMouseMoved(moho, mouseEvent)
	self:OnReparent(moho, mouseEvent)
end

function LM_ReparentBone:OnMouseUp(moho, mouseEvent)
	moho:UpdateUI()
end

function LM_ReparentBone:OnKeyDown(moho, keyEvent)
	LM_SelectBone:OnKeyDown(moho, keyEvent)
end

function LM_ReparentBone:DrawMe(moho, view)
	local skel = moho:Skeleton()
	if (skel == nil) then
		return
	end

	local g = view:Graphics()
	local matrix = LM.Matrix:new_local()
	local bonePt = LM.Vector2:new_local()
	local parentPt = LM.Vector2:new_local()
	local arrowPt1 = LM.Vector2:new_local()
	local arrowPt2 = LM.Vector2:new_local()

	moho.layer:GetFullTransform(moho.frame, matrix, moho.document)
	g:Push()
	g:ApplyMatrix(matrix)

	g:SetSmoothing(true)
	for i = 0, skel:CountBones() - 1 do
		local bone = skel:Bone(i)
--[syn]		if (bone.fParent >= 0) then
--[[syn]]		if (bone.fParent >= 0) and (not bone.fHidden --[[and not bone.fShy]]) and (bone:IsGroupVisible()) then
			local parentBone = skel:Bone(bone.fParent)

			bonePt:Set(bone.fLength / 2, 0)
			bone.fMovedMatrix:Transform(bonePt)

			parentPt:Set(parentBone.fLength / 2, 0)
			parentBone.fMovedMatrix:Transform(parentPt)

			local v = parentPt - bonePt
			local mag = v:Mag()
			local f = mag
			if (f > 0.2) then
				f = 0.2
			end
			arrowPt1:Set(mag - f / 4, -f / 16)
			arrowPt2:Set(mag - f / 4, f / 16)
			f = math.atan2(v.y, v.x)
			arrowPt1:Rotate(f)
			arrowPt2:Rotate(f)
			arrowPt1.x = arrowPt1.x + bonePt.x
			arrowPt1.y = arrowPt1.y + bonePt.y
			arrowPt2.x = arrowPt2.x + bonePt.x
			arrowPt2.y = arrowPt2.y + bonePt.y

			if (bone.fSelected) then
				g:SetColor(MOHO.MohoGlobals.SelCol)
			else
				g:SetColor(MOHO.MohoGlobals.ElemCol)
			end
			g:DrawLine(bonePt.x, bonePt.y, parentPt.x, parentPt.y)
			g:BeginShape()
			g:AddLine(parentPt, arrowPt1)
			g:AddLine(arrowPt1, arrowPt2)
			g:AddLine(arrowPt2, parentPt)
			g:EndShape()
		end
	end

	g:Pop()
end

function LM_ReparentBone:OnReparent(moho, mouseEvent)
	if (mouseEvent.altKey) then
		LM_SelectBone:Select(moho, mouseEvent.pt, mouseEvent.vec, mouseEvent.view, mouseEvent.shiftKey, mouseEvent.ctrlKey)
		return
	end

	local skel = moho:Skeleton()
	if (skel == nil) then
		return
	end

	if (moho:CountSelectedBones() < 1) then
		return
	end

	-- let the user pick another bone - this will be the new parent
	local parentID = mouseEvent.view:PickBone(mouseEvent.pt, mouseEvent.vec, moho.layer, true)
	local parentFrame = moho.layerFrame -- 0

	if (mouseEvent.ctrlKey) then
		local targetChanged = false
		for i = 0, skel:CountBones() - 1 do
			local bone = skel:Bone(i)

			if (bone.fSelected and parentID ~= bone.fTargetBone:GetValue(moho.layerFrame)) then
				bone.fTargetBone:SetValue(moho.layerFrame, parentID)
				targetChanged = true
			end
		end
		if (targetChanged) then
			moho:NewKeyframe(CHANNEL_BONE_TARGET)
		end
	else
		for i = 0, skel:CountBones() - 1 do
			local bone = skel:Bone(i)

			if (bone.fSelected) then
				if (not skel:IsBoneChild(i, parentID)) then
					-- new parent chosen
					local v1 = LM.Vector2:new_local()
					local v2 = LM.Vector2:new_local()
					v1:Set(0, 0)
					if (bone:IsZeroLength()) then
						v2:Set(0.1, 0)
					else
						v2:Set(bone.fLength, 0)
					end
					bone.fMovedMatrix:Transform(v1)
					bone.fMovedMatrix:Transform(v2)

					if (parentID >= 0) then
						local invMatrix = LM.Matrix:new_local()
						local parent = skel:Bone(parentID)
						invMatrix:Set(parent.fMovedMatrix)
						invMatrix:Invert()
						invMatrix:Transform(v1)
						invMatrix:Transform(v2)
					end

					if (parentFrame ~= 0) then
						bone.fAnimPos:AddKey(parentFrame - 1)
						if (bone:ParentalFlipFactor() < 0.0) then
							bone.fFlipV:SetValue(parentFrame, not bone.fFlipV:GetValue(parentFrame))
						end
					end
					bone.fAnimPos:SetValue(parentFrame, v1)
					v2 = v2 - v1
					local angle = math.atan2(v2.y, v2.x)

					while angle > 2 * math.pi do
						angle = angle - 2 * math.pi
					end
					while angle < 0 do
						angle = angle + 2 * math.pi
					end

					if (bone.fFixedAngle) then
						if (parentFrame == 0) then
							bone.fAnimAngle:SetValue(parentFrame, angle)
						end
					else
						local angleDiff = angle - bone.fAnimAngle:GetValue(parentFrame)
						if (parentFrame ~= 0) then
							bone.fAnimAngle:AddKey(parentFrame - 1)
						end
						bone.fAnimAngle:SetValue(parentFrame, angle)
						-- update future angle keyframes for relative offsets just like this frame
						for keyID = 0, bone.fAnimAngle:CountKeys() - 1 do
							local angleFrame = bone.fAnimAngle:GetKeyWhen(keyID)
							if (angleFrame > parentFrame) then
								local newAngle = bone.fAnimAngle:GetValue(angleFrame) + angleDiff
								bone.fAnimAngle:SetValue(angleFrame, newAngle)
							end
						end
						if (parentFrame == 0) then -- update action keyframes for relative offsets just like this frame
							for actionID = 0, bone.fAnimAngle:CountActions() - 1 do
								local action = moho:ChannelAsAnimVal(bone.fAnimAngle:Action(actionID))
								for keyID = 0, action:CountKeys() - 1 do
									local angleFrame = action:GetKeyWhen(keyID)
									if (angleFrame > parentFrame) then
										local newAngle = action:GetValue(angleFrame) + angleDiff
										action:SetValue(angleFrame, newAngle)
									end
								end
							end
						end
					end

					if (bone.fAnimParent:CountKeys() < 2) then
						bone.fAnimParent:SetValue(0, bone.fParent)
					end
					bone.fParent = parentID
					bone.fAnimParent:SetValue(parentFrame, parentID)
					if (parentFrame ~= 0) then
						if (bone:ParentalFlipFactor() < 0.0) then
							bone.fFlipV:SetValue(parentFrame, not bone.fFlipV:GetValue(parentFrame))
						end
					end
				end
			end
		end

		moho:NewKeyframe(CHANNEL_BONE)
		moho:NewKeyframe(CHANNEL_BONE_T)
		moho:NewKeyframe(CHANNEL_BONE_PARENT)
	end

	moho.layer:UpdateCurFrame()
	mouseEvent.view:DrawMe()
	moho:UpdateSelectedChannels()
end

-- **************************************************
-- Tool options - create and respond to tool's UI
-- **************************************************

LM_ReparentBone.CHANGE = MOHO.MSG_BASE
LM_ReparentBone.DUMMY = MOHO.MSG_BASE + 1
LM_ReparentBone.SELECTITEM = MOHO.MSG_BASE + 2

function LM_ReparentBone:DoLayout(moho, layout)
	self.menu = LM.GUI.Menu(MOHO.Localize("/Scripts/Tool/ReparentBone/SelectBone=Select Bone"))

	self.popup = LM.GUI.PopupMenu(128, false)
	self.popup:SetMenu(self.menu)
	layout:AddChild(self.popup)
end

function LM_ReparentBone:UpdateWidgets(moho)
	local skel = moho:Skeleton()
	if (skel == nil) then
		return
	end

	MOHO.BuildBoneMenu(self.menu, skel, self.SELECTITEM, self.DUMMY)
end

function LM_ReparentBone:HandleMessage(moho, view, msg)
	local skel = moho:Skeleton()
	if (skel == nil) then
		return
	end

	if (msg >= self.SELECTITEM) then
		for i = 0, skel:CountBones() - 1 do
			skel:Bone(i).fSelected = (i == msg - self.SELECTITEM)
		end
		moho:UpdateUI()
	end
end

Re: Only visible bones option for Parent Bone tool

Posted: Tue May 24, 2022 9:34 am
by Daxel
It works super well! I can add as many vitruvian hands as I want now, without clutter problems. Thank you so much, Wes.

Re: Only visible bones option for Parent Bone tool

Posted: Tue May 24, 2022 11:06 am
by lucasfranca
Cool! I needed this too. Very good to know the process of modifying a tool. Thanks everyone for that!

Re: Only visible bones option for Parent Bone tool

Posted: Tue May 24, 2022 10:36 pm
by Greenlaw
Awesome! Thanks Wes!

Re: Only visible bones option for Parent Bone tool

Posted: Wed May 25, 2022 6:15 am
by davoodice2

Re: Only visible bones option for Parent Bone tool

Posted: Wed May 25, 2022 9:48 am
by Daxel
Thanks for the addition!
I noticed a little problem: going out of frame 0 resets the option disabling it, and closing and opening Moho does the same.

Re: Only visible bones option for Parent Bone tool

Posted: Wed May 25, 2022 10:10 am
by davoodice2
Daxel wrote: ↑Wed May 25, 2022 9:48 am
Thanks for the addition!
I noticed a little problem: going out of frame 0 resets the option disabling it, and closing and opening Moho does the same.
yes . It needs more codes to store ui state :D
https://www.mediafire.com/file/atditau5 ... e.zip/file

Re: Only visible bones option for Parent Bone tool

Posted: Wed May 25, 2022 10:46 am
by Daxel
davoodice2 wrote: ↑Wed May 25, 2022 10:10 am yes . It needs more codes to store ui state :D
https://www.mediafire.com/file/atditau5 ... e.zip/file
Nice! Just so you know, it still doesn't store the setting between Moho sesions but now that the option is enabled by default it doesn't matter to me.