# How to detect when a part is COMPLETELY inside a region?

I have parts of different sizes, different orientations.
I use the mouse to drag these outside parts into a box/region.
The outside parts of the box are in red and should change to green only when they are COMPLETELY inside the box:

In the example above you can see that one part is green (completely inside the box), a second is red (completely outside), and a third part is also red (almost all inside, but not completely inside).

All parts inside the box are ANCHORED and should not use physics (collide, touch).

How could I do that?

1 Like

This function can determine if a point is inside a brick:

``````function isInsideBrick(position, brick)
local v3 = brick.CFrame:PointToObjectSpace(position)
return (math.abs(v3.X) <= brick.Size.X / 2)
and (math.abs(v3.Y) <= brick.Size.Y / 2)
and (math.abs(v3.Z) <= brick.Size.Z / 2)
end
``````

To see if an entire brick is inside the region you would check for every corner of the brick.

``````function isCompletelyInside(part, region)
local size = part.Size / 2
local corners = {
part.CFrame * CFrame.new(size.X, size.Y, size.Z),
part.CFrame * CFrame.new(size.X, size.Y, -size.Z),
part.CFrame * CFrame.new(size.X, -size.Y, size.Z),
part.CFrame * CFrame.new(size.X, -size.Y, -size.Z),
part.CFrame * CFrame.new(-size.X, size.Y, size.Z),
part.CFrame * CFrame.new(-size.X, size.Y, -size.Z),
part.CFrame * CFrame.new(-size.X, -size.Y, size.Z),
part.CFrame * CFrame.new(-size.X, -size.Y, -size.Z)
}
for _, cf in ipairs(corners) do
-- if any corner is outside, stop
if (not isInsideBrick(cf.Position, region)) then
return false
end
end
return true
end
``````
9 Likes

That’s perfect!
I’m happy to see that there are people who use their experience and intelligence to support others!
Thank you very much!

2 Likes

Yo, it works! I have been looking for something like this, thank you (: