How to get rotation item of GridMap?

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By Tort

Hey. I use GridMap. I tried get_cell_item_orientation
Why does it return an integer?

:bust_in_silhouette: Reply From: Zylann

I believe this is an index to a lookup table containing all possible combinations of rotations for a 3D cell that can rotate by steps of 90 degrees. Think of it as the combination of an axis and a rotation around that axis. There are 6 axes (X, Y, Z, -X, -Y, -Z) and 4 rotations (0, 90, 180 and 270 degrees), so that gives 24 possible rotations.

This index can be converted into a Basis (which itself can also be converted to a Quat) using the Basis.set_orthogonal_index function, but this C++ function is not exposed to GDScript :confused:

Exactly

I tortured the keyboard a little :slight_smile:

func orthogonal_hren(value):
	if value == 0:
		return(Vector3(0, 0, 0))
	elif value == 1:
		return(Vector3(0, 0, PI/2))
	elif value == 2:
		return(Vector3(0, 0, PI))
	elif value == 3:
		return(Vector3(0, 0, -PI/2))
	elif value == 4:
		return(Vector3(PI/2, 0, 0))
	elif value == 5:
		return(Vector3(PI, -PI/2, -PI/2))
	elif value == 6:
		return(Vector3(-PI/2, PI, 0))
	elif value == 7:
		return(Vector3(0, -PI/2, -PI/2))
	elif value == 8:
		return(Vector3(-PI, 0, 0))
	elif value == 9:
		return(Vector3(PI, 0, -PI/2))
	elif value == 10:
		return(Vector3(0, PI, 0))
	elif value == 11:
		return(Vector3(0, PI, -PI/2))
	elif value == 12:
		return(Vector3(-PI/2, 0, 0))
	elif value == 13:
		return(Vector3(0, -PI/2, PI/2))
	elif value == 14:
		return(Vector3(PI/2, 0, PI))
	elif value == 15:
		return(Vector3(0, PI/2, -PI/2))
	elif value == 16:
		return(Vector3(0, PI/2, 0))
	elif value == 17:
		return(Vector3(-PI/2, PI/2, 0))
	elif value == 18:
		return(Vector3(PI, PI/2, 0))
	elif value == 19:
		return(Vector3(PI/2, PI/2, 0))
	elif value == 20:
		return(Vector3(PI, -PI/2, 0))
	elif value == 21:
		return(Vector3(-PI/2, -PI/2, 0))
	elif value == 22:
		return(Vector3(0, -PI/2, 0))
	elif value == 23:
		return(Vector3(PI/2, -PI/2, 0))

Tort | 2019-03-22 20:17

But I just copy pasted that, XD, and also I recommend using a match statement instead.

sairam123 | 2020-10-21 20:39

I recommend an array

const orthogonal_angles = [
    Vector3(0, 0, 0),
    Vector3(0, 0, PI/2),
    Vector3(0, 0, PI),
    Vector3(0, 0, -PI/2),
    Vector3(PI/2, 0, 0),
    Vector3(PI, -PI/2, -PI/2),
    Vector3(-PI/2, PI, 0),
    Vector3(0, -PI/2, -PI/2),
    Vector3(-PI, 0, 0),
    Vector3(PI, 0, -PI/2),
    Vector3(0, PI, 0),
    Vector3(0, PI, -PI/2),
    Vector3(-PI/2, 0, 0),
    Vector3(0, -PI/2, PI/2),
    Vector3(PI/2, 0, PI),
    Vector3(0, PI/2, -PI/2),
    Vector3(0, PI/2, 0),
    Vector3(-PI/2, PI/2, 0),
    Vector3(PI, PI/2, 0),
    Vector3(PI/2, PI/2, 0),
    Vector3(PI, -PI/2, 0),
    Vector3(-PI/2, -PI/2, 0),
    Vector3(0, -PI/2, 0),
    Vector3(PI/2, -PI/2, 0)
]

# Use:
var angles = orthogonal_angles[index]

Zylann | 2020-10-21 22:32

Is radians or degrees?
I mean I use only use y axis.

I’ll edit this comment with my function, when I get to my PC.

sairam123 | 2020-10-22 19:33

Well, do you know how to expose that?, I’m trying to expose it, but I don’t know how.

sairam123 | 2020-11-19 01:42