@@ -16,6 +16,11 @@ var custom_models : PackedStringArray = PackedStringArray()
1616@onready var SpeedMedium := % Speed_Medium
1717@onready var SpeedFast := % Speed_Fast
1818
19+ @onready var SnapTop := % SnapTop
20+ @onready var SnapFront := % SnapFront
21+ @onready var SnapRight := % SnapRight
22+
23+ enum SnapView {Top , Front , Right }
1924
2025func _ready () -> void :
2126 await preview3D .ready
@@ -43,9 +48,11 @@ func _ready() -> void:
4348 2 : SpeedMedium .button_pressed = true
4449 3 : SpeedFast .button_pressed = true
4550
51+
4652func _open () -> void :
4753 pass
4854
55+
4956func update_model_selector () -> void :
5057 var objects_count : int = preview3D .objects .get_child_count ()
5158 Model .clear ()
@@ -55,6 +62,7 @@ func update_model_selector() -> void:
5562 for i in min (custom_models .size (), MAX_CUSTOM_MODELS ):
5663 Model .add_item (custom_models [i ].get_file (), i + objects_count )
5764
65+
5866func _on_model_item_selected (index : int , custom_model_path : String = "" ) -> void :
5967 var objects_count : int = preview3D .objects .get_child_count ()
6068 if index >= objects_count :
@@ -84,8 +92,6 @@ func _on_model_item_selected(index: int, custom_model_path : String = "") -> voi
8492 _on_model_item_selected (0 )
8593
8694
87-
88-
8995func _on_model_configurate_pressed () -> void :
9096 preview3D .configure_model ()
9197
@@ -108,3 +114,36 @@ func _on_speed_medium_toggled(_toggled_on: bool) -> void:
108114func _on_speed_fast_toggled (_toggled_on : bool ) -> void :
109115 mm_globals .set_config (SETTING_3D_PREVIEW_ROTATION_SPEED , 3 )
110116 preview3D .set_rotate_model_speed (0.1 )
117+
118+
119+ func _process (delta : float ) -> void :
120+ var shift_down : bool = Input .is_key_pressed (KEY_SHIFT )
121+ if $ VBoxContainer/Model/SnapView .get_rect ().has_point (get_local_mouse_position ()):
122+ SnapTop .text = "Bottom" if shift_down else "Top"
123+ SnapFront .text = "Back" if shift_down else "Front"
124+ SnapRight .text = "Left" if shift_down else "Right"
125+
126+
127+ func _on_snap_pressed (id : int ) -> void :
128+ var shift_down : bool = Input .is_key_pressed (KEY_SHIFT )
129+ var tween := get_tree ().create_tween ()
130+ var pivot := preview3D .get_node ("MaterialPreview/Preview3d/ObjectsPivot/Objects" )
131+ var cam_control := preview3D .get_node ("MaterialPreview/Preview3d/CameraController" )
132+ var camrot2 : Node3D = preview3D .camera_controller .camera_rotation2
133+ var camrot1 : Node3D = preview3D .camera_controller .camera_rotation1
134+ var rot2 := camrot2 .rotation
135+ var rot1 := Vector3 (camrot1 .rotation .x , 0.0 , camrot2 .rotation .z )
136+ match id :
137+ SnapView .Top :
138+ rot2 .x = - PI * (- 0.5 if shift_down else 0.5 )
139+ rot1 .y = 0.0
140+ SnapView .Front :
141+ rot2 .x = 0.0
142+ rot1 .y = PI * (1.0 if shift_down else 0.0 )
143+ SnapView .Right :
144+ rot2 .x = 0.0
145+ rot1 .y = - PI * (0.5 if shift_down else - 0.5 )
146+ tween .tween_property (camrot2 , "rotation" , rot2 , 0.2 ).set_trans (Tween .TRANS_CUBIC )
147+ tween .parallel ().tween_property (camrot1 , "rotation" , rot1 , 0.2 ).set_trans (Tween .TRANS_CUBIC )
148+ tween .parallel ().tween_property (pivot , "transform:origin" , Vector3 .ZERO , 0.2 ).set_trans (Tween .TRANS_CUBIC )
149+ tween .parallel ().tween_property (cam_control , "transform:origin" , Vector3 .ZERO , 0.2 ).set_trans (Tween .TRANS_CUBIC )
0 commit comments