Scaling Problem?

image

How do you fix this?

Plus I have been building in .50 stud the whole time and now for some reason I am having a scaling bug like this. Anyone have any ideas?

2 Likes

Use the resizealign plugin to match faces with other faces

3 Likes

What I usually do is allow the snapping of parts to align things for me, given that the parts are the same size.

Images

4112

4113

4114

4115

After you’ve created the snapped area you’re free to rotate it and do whatever you needed the new parts for.

4116

3 Likes

It’s due to the floating decimal issue. From what I remember it’s because when you rotate or move Parts the inaccuracy of the decimal value (example:1/3 is .3 repeating which can’t be exactly stated in calculations) will throw your values off. Check this for an explanation: https://en.wikipedia.org/wiki/Floating-point_arithmetic

I’ve just got in the habit of putting values of 90.00000000000000 or 0.00000000000 (I just hold the 0 key down!) in the Rotation angle x,y and z in Properties on Parts that I want to align properly, especially long Parts where a minor variation gets magnified by any angle.

If you also notice when you have 2 Parts close together you can put values of more than 3 decimal places in the Parts Position values. I’ve done this for years now to align Parts more precisely. The value gets rounded off in the displayed Properties Position value, but if you place a 1x1x1 Part at y = 1.000000 studs and another one above it at y = 2.0005 studs you will see the gap between them when you get really close.

I had the same problem, seemed to be fixed for me tho, I guess I got lucky

You can probably iterate through each part in the workspace and round them to the nearest 0.1. Try running this script:

-- Rouding function.
-- Rounds n to the nearest multiple.
function round(n, multiple)
	local multiple = multiple or 1
    return (math.floor(n/multiple + 1/2) * multiple)
end

-- Get all parts in the workspace.
local parts = {}
for _, instance in pairs(workspace:GetDescendants()) do
	if instance:IsA("BasePart") and not instance:IsA("Terrain") then
		table.insert(parts, instance)
	end
end

-- Align each part to the nearest 0.1
local ALIGNMENT = 0.1
for _, part in pairs(parts) do
	local originalPosition = part.Position
	local x, y, z = originalPosition.x, originalPosition.y, originalPosition.z
	local alignedPosition = Vector3.new(
		round(x, ALIGNMENT),
		round(y, ALIGNMENT),
		round(z, ALIGNMENT)
	)
	
	local deltaPosition = alignedPosition - originalPosition
	part.CFrame = CFrame.new(deltaPosition) * part.CFrame 
end
3 Likes

Not necessarily a 100% great idea, for my build style this would cause me a lot more grief than convenience

1 Like

Mind trying it out?

Edit: Hey, you’re not OP! OP specifically said that they’ve been building at a 0.5 grid.

1 Like

I don’t know if you’re using a building plugin, but in my experience…

I use F3X and I get that problem when I move a brick using the Global axes versus the Local/Last axes, since the Global axes are fixed at 90 degrees apart, so it may move it along an axis that is just slightly (<0.01 degrees) rotated off of the Global axis.

To fix it I usually have to drag the part away and just drag it back onto the part I want to connect it to so that it snaps in place, similar to what someone above me suggested.

But if the build is too complex to do so, unfortunately I just have to live with it. That doesn’t seem to be the case with your build, though, so just re-dragging the parts onto there should work fine. :slight_smile:

Im having the same issue.