Hello! I’ve been working on recreating the classic roblox copy tool and I wanted it to be able to copy a part and place that copy directly on top of the original part, as close as it can be without intersecting it. I noticed that when turning Collisions
on from roblox studio, pressing Ctrl + D while selecting a part reproduces the desired functionality, as shown in the following pictures:
Before copying
After copying (new part in yellow)
I then tried to recreate that with the following script placed inside game.Workspace
:
local part = game.Workspace.Part -- The part to be copied
local newPart = part:Clone()
newPart.Parent = game.Workspace
newPart.BrickColor = BrickColor.new("Pastel yellow")
local maxCos = part.Size.Y/math.sqrt(part.Size.X^2+part.Size.Y^2)
while true do
local a = part.CFrame.UpVector
local b = Vector3.new(0,1,0)
local cross = math.abs(a:Dot(b))
if cross >= maxCos then
newPart.CFrame = part.CFrame + Vector3.new(0,part.Size.Y/cross,0)
else
cross = math.sqrt(1-cross^2)
newPart.CFrame = part.CFrame + Vector3.new(0,part.Size.X/cross,0)
end
wait()
end
The previous script works fine as long as it’s used on a part rotated along the X or Y axis, as show in the following gifs:
Along the X axis
Along the Y axis
However, undesired results arise when trying to run the script on parts rotated along the Z axis:
Along the Z axis
How can I fix the script for it to work on parts rotated in any direction? Any form of documentation about the subject, even if it does not directly answer my question, would be greatly appreciated.