|
@@ -3297,8 +3297,10 @@ void Node3DEditorViewport::_menu_option(int p_option) {
|
|
|
xform.basis.rotate_local(Vector3(1, 0, 0), Math_TAU * 0.25);
|
|
|
}
|
|
|
|
|
|
- undo_redo->add_do_method(sp, "set_global_transform", xform);
|
|
|
- undo_redo->add_undo_method(sp, "set_global_transform", sp->get_global_gizmo_transform());
|
|
|
+ Node3D *parent = sp->get_parent_node_3d();
|
|
|
+ Transform3D local_xform = parent ? parent->get_global_transform().inverse_xform(xform) : xform;
|
|
|
+ undo_redo->add_do_method(sp, "set_transform", local_xform);
|
|
|
+ undo_redo->add_undo_method(sp, "set_transform", sp->get_local_gizmo_transform());
|
|
|
}
|
|
|
undo_redo->commit_action();
|
|
|
|
|
@@ -4362,16 +4364,7 @@ bool Node3DEditorViewport::_create_instance(Node *parent, String &path, const Po
|
|
|
|
|
|
Node3D *node3d = Object::cast_to<Node3D>(instantiated_scene);
|
|
|
if (node3d) {
|
|
|
- Transform3D gl_transform;
|
|
|
- Node3D *parent_node3d = Object::cast_to<Node3D>(parent);
|
|
|
- if (parent_node3d) {
|
|
|
- gl_transform = parent_node3d->get_global_gizmo_transform();
|
|
|
- }
|
|
|
-
|
|
|
- gl_transform.origin = preview_node_pos;
|
|
|
- gl_transform.basis *= node3d->get_transform().basis;
|
|
|
-
|
|
|
- undo_redo->add_do_method(instantiated_scene, "set_global_transform", gl_transform);
|
|
|
+ undo_redo->add_do_method(instantiated_scene, "set_transform", node3d->get_transform());
|
|
|
}
|
|
|
|
|
|
return true;
|
|
@@ -4602,8 +4595,8 @@ void Node3DEditorViewport::commit_transform() {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- undo_redo->add_do_method(sp, "set_global_transform", sp->get_global_gizmo_transform());
|
|
|
- undo_redo->add_undo_method(sp, "set_global_transform", se->original);
|
|
|
+ undo_redo->add_do_method(sp, "set_transform", sp->get_local_gizmo_transform());
|
|
|
+ undo_redo->add_undo_method(sp, "set_transform", se->original_local);
|
|
|
}
|
|
|
undo_redo->commit_action();
|
|
|
|
|
@@ -6163,8 +6156,10 @@ void Node3DEditor::_xform_dialog_action() {
|
|
|
tr.origin += t.origin;
|
|
|
}
|
|
|
|
|
|
- undo_redo->add_do_method(sp, "set_global_transform", tr);
|
|
|
- undo_redo->add_undo_method(sp, "set_global_transform", sp->get_global_gizmo_transform());
|
|
|
+ Node3D *parent = sp->get_parent_node_3d();
|
|
|
+ Transform3D local_tr = parent ? parent->get_global_transform().inverse_xform(tr) : tr;
|
|
|
+ undo_redo->add_do_method(sp, "set_transform", local_tr);
|
|
|
+ undo_redo->add_undo_method(sp, "set_transform", sp->get_transform());
|
|
|
}
|
|
|
undo_redo->commit_action();
|
|
|
}
|
|
@@ -7512,8 +7507,10 @@ void Node3DEditor::_snap_selected_nodes_to_floor() {
|
|
|
new_transform.origin.y = result.position.y;
|
|
|
new_transform.origin = new_transform.origin - position_offset;
|
|
|
|
|
|
- undo_redo->add_do_method(sp, "set_global_transform", new_transform);
|
|
|
- undo_redo->add_undo_method(sp, "set_global_transform", sp->get_global_transform());
|
|
|
+ Node3D *parent = sp->get_parent_node_3d();
|
|
|
+ Transform3D new_local_xform = parent ? parent->get_global_transform().inverse_xform(new_transform) : new_transform;
|
|
|
+ undo_redo->add_do_method(sp, "set_transform", new_local_xform);
|
|
|
+ undo_redo->add_undo_method(sp, "set_transform", sp->get_transform());
|
|
|
}
|
|
|
}
|
|
|
|