I am attempting to recreate the Roblox Dragger class as it is incompatible with FilteringEnabled. I am far from decent when it comes to 3D mathematics and CFraming. I have mustered up this piece of code:
local MouseRay = Ray.new( Mouse.UnitRay.Origin, Mouse.UnitRay.Direction * 999 )
local IgnoreList = { Player.Character, DragPart }
local Hit, Position, Normal = workspace:FindPartOnRayWithIgnoreList( MouseRay, IgnoreList )
--local Position = Vector3.new( math.floor( Position.x ), math.floor( Position.y ), math.floor( Position.z ) )
local Shifted = Hit.CFrame + ( ( DragPart.Size/2 ) * Normal )
local MousePosition = Hit.CFrame:toObjectSpace( CFrame.new( Position ) ):inverse()
Shifted = Shifted - MousePosition.p
DragPart.CFrame = Shifted
It works in a very mediocre fashion for only a single part and completely falters once any rotation is applied to the moused over part.
The main question is - How do I align the part I am moving with the 'grid' of the part I am moused over? This is all to achieve the goal of moving a part along the grid in 1 stud increments much like the 'Dragger' class.
Thanks in advance for any provided help.

2 comments
I don't see a reason why dragger wouldn't work with FE. It will obviously have to be made my client, since it's completely local feature. Then on resizing you would need to send the new size to server
I have done extensive testing on the dragger for both local and serverside. The short conclusion is that locally doesn't function consistently and the serverside is a mess of remotevent spamming and lag