Placement system help

You can write your topic however you want, but you need to answer these questions:

  1. What do you want to achieve? Hi I want to make a hotel game, I’ve already made 3 placement system but now i need to be able to place wall
  2. What is the issue? Im not sure how to apporach that, Wall are thin and if i check for collision it may cause some issue as the wall beside will technically go into the other wall due to decimal imprecision, So How would you suggest me to approach wall placement system
  3. What solutions have you thought of so far? get the center of the wall to be on a grid and the wall on the side and rotate/move by the center of the grid

PS I need grid placement also and collision detection and the wall should be able to fit with the furnitures which are placed at the center of the grid

Hey i had this in my bookmarks sorry i didnt reply way back in april. i hope you will read this.

local RatePerSecond = 60 -- this is how many times you can fire the function btw put this in local script
local Mouse = game.Players.LocalPlayer:GetMouse()
local Remote = -- Make a Remote Here for FilteringEnabled Safety
local Guide = --your wall, make sure you have model with primary part which is welded to other parts, do :Clone() on it
local DeBounce = false
local Rotation = 0
local UIS = game:GetService("UserInputService")
local Break = false

while wait(1/RatePerSecond) do
Guide.Parent = workspace
local RaycastParamsO = RaycastParams.new()
RaycastParamsO.FilterInstancesDescendants = {game.Players.LocalPlayer.Character,Guide,--Other Places like Buildings where you dont want players to build or you could just make a part where you can place walls for that just do {urparthere},do whitelist.
RaycastParamsO.FilterType = Enum.RaycastFilterType.Blacklist
local Raycast = workspace:Raycast(Mouse.UnitRay.Origin,Mouse.UnitRay.Direction*1000,RaycastParams)
if Raycast then
local Tween = game:GetService("TweenService"):Create(Guide.PrimaryPart,TweenInfo.new(1-- or 0.5 depends on you, you can add other stuff aswell),{["CFrame"] = CFrame.New(math.round(Raycast.Position.X),math.round(Raycast.Position.Y) + Guide.PrimaryPart.Size.Y/2,math.round(Raycast.Position.Z)) * CFrame.Angles(0,math.rad(Rotation),0)}
Tween:Play()
end
if UIS:IsKeyDown(Enum.Keycode.R) then
if Rotation == 345 then
Rotation == 0
else 
Rotation += 15
end
local Connection = Mouse.Button1Up:Connect(function()
Break = true
end)
Connection:Dissconnect()
if Break then 
break
end
end