So im not that good at explaining but basically im making a tool that allows you to cut parts in half from a certian position, my problem is that its not cutting correctly if its rotated or something, as when its not rotated it works correctly but if it is then the tool cuts its kinda weird, ill put a video showing me cutting the parts in half

Code:

--Define Variables
local CAS = game:GetService("ContextActionService")
local player = game.Players.LocalPlayer
local mouse = player:GetMouse()
local Tool = script.Parent
local mtarget
local omtarget
local down
local newCut
local Side1,Side2,disx1,disx2,pos1,pos2
local targ,CH,Part1,Part2
local siX, siZ

--Cutting Function
function Cut(actionName, UserInputState)
	--print(actionName)
	--print(UserInputState)
					mtarget = mouse.Target
	if actionName == "Cutting" then
		if mtarget:FindFirstChild("Owner") then
			if mtarget.Owner.Value == player.Name then
				if UserInputState == Enum.UserInputState.Begin then
					down = true
					local sized = mtarget.Size
					if mtarget.Name ~= "CutPart" then
						local newCut = Instance.new("Part", mtarget) --Create Cut Part
						targ = newCut.Parent
						newCut.BrickColor = BrickColor.new("Pastel orange") --Change Color of part
						newCut.Anchored = true --Anchor the part
						siX = targ.Size.X
						siZ = targ.Size.Z
						if (targ.Orientation.Y > 0 and targ.Orientation.Y < 90) or (targ.Orientation.Y < 180 and targ.Orientation.Y > -90) or (siX > siZ) then
							newCut.Size = Vector3.new(0.1,0.1,sized.Z+0.1) --Change the size
							newCut.Position = Vector3.new(mouse.Hit.p.X,targ.Position.Y,targ.Position.Z)--Change the position
						end
						if (targ.Orientation.Y > 90 and targ.Orientation.Y < 180) or (targ.Orientation.Y < 0 and targ.Orientation.Y < -90) or (siZ > siX) then
							newCut.Size = Vector3.new(sized.X+0.1,0.1,0.1) --Change the size
							newCut.Position = Vector3.new(targ.Position.X,targ.Position.Y,mouse.Hit.p.Z)--Change the position
						end
						print(newCut.Position)
						print(targ.Position)
						newCut.Orientation = targ.Orientation
						newCut.Material = "Neon" --Change the material
						newCut.Name = "CutPart" --Name the part
						newCut.CanCollide = false
						targ.Anchored = true
						while down do
							newCut.Size = newCut.Size + Vector3.new(0,0.1,0) --Increase size of part
							if newCut.Size.Y >= targ.Size.Y + 0.2 then
								Side1 = targ.Position.X - (targ.Size.X/2)
								Side2 = targ.Position.X + (targ.Size.X/2)
								
								if newCut.Position.X > Side1 then
									disx1 = newCut.Position.X - Side1
									pos1 = disx1/2
									--print("Pos1:", pos1)
									Part1 = Instance.new("Part", workspace)
									Part1.Size = Vector3.new(disx1,targ.Size.Y,targ.Size.Z)
									Part1.Position = Vector3.new(targ.Position.X-pos1,targ.Position.Y,targ.Position.Z)
									Part1.BrickColor = targ.BrickColor
									Part1.Material = targ.Material
									Part1.Orientation = targ.Orientation
								else
									disx1 = Side1 - newCut.Position.X
									pos1 = (newCut.Position.X - Side1)/2
									--print("Pos1:", pos1)
									Part1 = Instance.new("Part", workspace)
									Part1.Size = Vector3.new(disx1,targ.Size.Y,targ.Size.Z)
									Part1.Position = Vector3.new(targ.Position.X-pos1,targ.Position.Y,targ.Position.Z)
									Part1.BrickColor = targ.BrickColor
									Part1.Material = targ.Material
									Part1.Orientation = targ.Orientation
								end
								if newCut.Position.X > Side2 then
									disx2 = newCut.Position.X - Side2
									pos2 = disx2/2
									--print("Pos2:", pos2)
									Part2 = Instance.new("Part", workspace)
									Part2.Size = Vector3.new(disx2,targ.Size.Y,targ.Size.Z)
									Part2.Position = Vector3.new(targ.Position.X-pos2,targ.Position.Y,targ.Position.Z)
									Part2.BrickColor = targ.BrickColor
									Part2.Material = targ.Material
									Part2.Orientation = targ.Orientation
								else
									disx2 = Side2 - newCut.Position.X
									pos2 = (newCut.Position.X - Side2)/2
									--print("Pos2:", pos2)
									Part2 = Instance.new("Part", workspace)
									Part2.Size = Vector3.new(disx2,targ.Size.Y,targ.Size.Z)
									Part2.Position = Vector3.new(targ.Position.X-pos2,targ.Position.Y,targ.Position.Z)
									Part2.BrickColor = targ.BrickColor
									Part2.Material = targ.Material
									Part2.Orientation = targ.Orientation
								end
								newCut:Destroy()
								local children = targ:GetChildren()
								targ:Destroy()
								for i = 1, #children do
								    CH = children[i]
									local CH1 = CH:Clone()
									local CH2 = CH:Clone()
									CH1.Parent = Part1
									CH2.Parent = Part2
								end
								down = false
							end
							wait()	
						end
						newCut:Destroy()
					end
				elseif UserInputState == Enum.UserInputState.End then
					if targ:FindFirstChild("CutPart") then
						targ.CutPart:Destroy()
					end
					targ.Anchored = false
					down = false
				end
			end
		end
	end
end

--Bind actions when equipping tool
function Equip()
	CAS:BindAction("Cutting", Cut, false, Enum.UserInputType.MouseButton1)
end

--Unbind actions when unequipping tool
function Unequip()
	CAS:UnbindAction("Cutting")
end

--Check is tool is equipped or unequipped
Tool.Equipped:Connect(Equip)
Tool.Unequipped:Connect(Unequip)

Video: http://www.youtube.com/watch?v=ec2XaD9NjJY&feature=youtu.be