So, we have a part that is 3x3x3.
How do i get the position of each stud in the part?
Let’s say we put parts of size of a stud, each on a position to make a part that is the size of 3x3x3, now i want to do that, but instead, i need to get the studs from the part. Basically cutting in half a part 9 times to get a stud.
Next thing i want to do, is create a part of the size of a stud, and position it to a stud of the part, each by each until it’s completed.
So, how do i get the position of each stud in a part? (No matter the size)
Not sure what you’re trying to explain here, are you trying to split a part into individual studs?
local function GetStudPositions(Part : BasePart) : {}
local StudPositions = {}
for X = (Part.Position.X - Part.Size.X / 2) + 0.5, (Part.Position.X + Part.Size.X / 2) - 0.5 do
for Y = (Part.Position.Y - Part.Size.Y / 2) + 0.5, (Part.Position.Y + Part.Size.Y / 2) - 0.5 do
for Z = (Part.Position.Z - Part.Size.Z / 2) + 0.5, (Part.Position.Z + Part.Size.Z / 2) - 0.5 do
table.insert(StudPositions, Vector3.new(X, Y, Z))
end
end
end
return StudPositions
end
local Part = Instance.new("Part")
local StudPositions = GetStudPositions(Part)
for _, StudPosition in ipairs(StudPositions) do
print(StudPosition.X, math.round(StudPosition.Y * 10) / 10, StudPosition.Z) --math.round() bit necessary due to long decimals.
end
print(Part.Size.X, math.round(Part.Size.Y * 10) / 10, Part.Size.Z)
This script splits a part into 1x1x1 parts and puts them in and array so you can change the color, size, position etc… .
local box = script.Parent
local function testFunction()
local center = box.Position
local size = box.Size
local total = box.Size.X * box.Size.Y * box.Size.Z -- the number of studs inside of the part
local topRight = Vector3.new(center.X + (size.X - 1) / 2, center.Y + (size.Y - 1) / 2, center.Z + (size.Z - 1) / 2)
local rightStuds = {}
local rightWall = {}
local splittedBox = {}
for i = size.X, 1, -1 do
local part = Instance.new("Part", workspace)
part.Anchored = true
part.Size = Vector3.one
part.Position = topRight
topRight += Vector3.new(-1, 0, 0)
table.insert(rightStuds, part)
end
for i, v in pairs(rightStuds) do
table.insert(rightWall, v)
local function clonePart(part)
local clone = part:Clone()
table.insert(rightWall, clone)
clone.Parent = workspace
clone.Position += Vector3.new(0, -1, 0)
return clone
end
local clone
for i = 0, size.Y - 2 do
if clone then
clone = clonePart(clone)
else
clone = clonePart(v)
end
end
end
for i, v in pairs(rightWall) do
table.insert(splittedBox, v)
local function clonePart(part)
local clone = part:Clone()
table.insert(splittedBox, clone)
clone.Parent = workspace
clone.Position += Vector3.new(0, 0, -1)
return clone
end
local clone
for i = 0, size.Z - 2 do
if clone then
clone = clonePart(clone)
else
clone = clonePart(v)
end
end
end
local model = Instance.new("Model", box.Parent)
model.Name = box.Name
for i, v in pairs(splittedBox) do
v.Parent = model
end
print(#splittedBox, total)
box:Destroy()
end
testFunction()