I have a claw that opens and closes using weld-constraints, anchoring, and the tween service. Unfortunately, after running the code once, trying to run it again, results in one of the parts jumping into its previous orientation for a reason I have yet to determine.

Video (GIF):

Script:

```
local TS = game:GetService("TweenService")
local TweenTurningInfo = TweenInfo.new(2,Enum.EasingStyle.Linear,Enum.EasingDirection.InOut)
local module = {}
local claw = script.Parent
local function unLock(special)
local start,term = string.find(special.Name,"Rotate")
local number = tonumber(string.split(special.Name,"")[term+1])
for i,v in claw:GetChildren() do
if v == special then
v.Anchored = true
end
if string.match(v.Name,"Rotate") ~= nil and v ~= special then
local startsmall,termsmall = string.find(v.Name,"Rotate")
local specificnumber = tonumber(string.split(v.Name,"")[termsmall+1])
--print(special.Name..":"..number.."|"..v.Name..":"..specificnumber)
if specificnumber > number then
v.Anchored = false
--print("Unanchored: "..v.Name)
else
v.Anchored = true
--print("Anchored: "..v.Name)
end
end
if string.match(v.Name,"Rod") ~= nil then
local startsmall,termsmall = string.find(v.Name,"Rod")
local specificnumber = tonumber(string.split(v.Name,"")[termsmall+1])
if number == specificnumber+1 and v:FindFirstChildOfClass("WeldConstraint") then
v:FindFirstChildOfClass("WeldConstraint").Enabled = false
elseif v:FindFirstChildOfClass("WeldConstraint") then
v:FindFirstChildOfClass("WeldConstraint").Enabled = true
end
end
end
if number >= 6 then
if number == 6 then
claw.Rotate62.Anchored = true
end
if number == 7 then
claw.Rotate72.Anchored = true
end
if number == 8 then
claw.Rotate82.Anchored = true
end
end
end
function module.setClaw(Radius:number,EularAngles:Vector3)
Radius = Radius/4--for whatever reason, the radius value seems to create an arc for a circle with 4 times the radius
unLock(claw.Rotate5)
local claw5 = TS:Create(claw.Rotate5,TweenTurningInfo,{CFrame = CFrame.new(claw.Rotate5.CFrame.Position)*CFrame.Angles(EularAngles.X,EularAngles.Y,EularAngles.Z)})
claw5:Play()
claw5.Completed:Wait()
local claw61 = TS:Create(claw.Rotate61,TweenTurningInfo,{CFrame = CFrame.new(claw.Rotate61.CFrame.Position)*CFrame.Angles(-EularAngles.X,EularAngles.Y,EularAngles.Z)*CFrame.Angles(-math.pi/2,0,0)})
local claw62 = TS:Create(claw.Rotate62,TweenTurningInfo,{CFrame = CFrame.new(claw.Rotate62.CFrame.Position)*CFrame.Angles(-EularAngles.X,EularAngles.Y,EularAngles.Z)*CFrame.Angles(math.pi/2,math.pi,0)})
unLock(claw.Rotate61)
claw61:Play()
claw62:Play()
claw62.Completed:Wait()
local claw71 = TS:Create(claw.Rotate71,TweenTurningInfo,{CFrame = CFrame.new(claw.Rotate71.CFrame.Position)*CFrame.Angles(-EularAngles.X,EularAngles.Y,EularAngles.Z)*CFrame.Angles(-math.pi/2,0,0)})
local claw72 = TS:Create(claw.Rotate72,TweenTurningInfo,{CFrame = CFrame.new(claw.Rotate72.CFrame.Position)*CFrame.Angles(-EularAngles.X,EularAngles.Y,EularAngles.Z)*CFrame.Angles(math.pi/2,math.pi,0)})
unLock(claw.Rotate71)
claw71:Play()
claw72:Play()
claw72.Completed:Wait()
local claw81 = TS:Create(claw.Rotate81,TweenTurningInfo,{CFrame = CFrame.new(claw.Rotate81.CFrame.Position)*CFrame.Angles(-EularAngles.X,EularAngles.Y,EularAngles.Z)*CFrame.Angles(-math.pi/2,0,0)})
local claw82 = TS:Create(claw.Rotate82,TweenTurningInfo,{CFrame = CFrame.new(claw.Rotate82.CFrame.Position)*CFrame.Angles(-EularAngles.X,EularAngles.Y,EularAngles.Z)*CFrame.Angles(math.pi/2,math.pi,0)})
unLock(claw.Rotate81)
claw81:Play()
claw82:Play()
claw82.Completed:Wait()
local midLength = math.sqrt(Radius^2-11.75/2)--11.75 is the arm length.
local degree = math.atan(11.75/2/midLength) --this is the degree downwards each part is angled
local claw61 = TS:Create(claw.Rotate61,TweenTurningInfo,{CFrame = claw.Rotate61.CFrame*CFrame.Angles(degree,0,0)})
local claw62 = TS:Create(claw.Rotate62,TweenTurningInfo,{CFrame = claw.Rotate62.CFrame*CFrame.Angles(degree,0,0)})
unLock(claw.Rotate61)
claw61:Play()
claw62:Play()
claw62.Completed:Wait()
local claw71 = TS:Create(claw.Rotate71,TweenTurningInfo,{CFrame = claw.Rotate71.CFrame*CFrame.Angles(degree,0,0)})
local claw72 = TS:Create(claw.Rotate72,TweenTurningInfo,{CFrame = claw.Rotate72.CFrame*CFrame.Angles(degree,0,0)})
unLock(claw.Rotate71)
claw71:Play()
claw72:Play()
claw72.Completed:Wait()
local claw81 = TS:Create(claw.Rotate81,TweenTurningInfo,{CFrame = claw.Rotate81.CFrame*CFrame.Angles(degree,0,0)})
local claw82 = TS:Create(claw.Rotate82,TweenTurningInfo,{CFrame = claw.Rotate82.CFrame*CFrame.Angles(degree,0,0)})
unLock(claw.Rotate81)
claw81:Play()
claw82:Play()
claw82.Completed:Wait()
unLock({Name="Rotate9"})
end
return module
```

I then called the module with `module.setClaw(24,Vector3.new(0,0,math.pi/2)`

.

Part hierarchy:

Essentially, everything is welded to the next one, with rods welding to rotates, and rotates welding to rods.