Implement snapping in the CSG gizmos and 3D polygon editor

The spatial editor snap settings will now affect the CSG gizmos
and 3D polygon editor (which is used in CSGPolygon).
This commit is contained in:
Hugo Locurcio 2019-07-02 20:00:00 +02:00
parent ae65c610e7
commit 527fb3968a
No known key found for this signature in database
GPG key ID: 39E8F8BE30B0A49C
2 changed files with 18 additions and 2 deletions

View file

@ -346,8 +346,10 @@ bool Polygon3DEditor::forward_spatial_gui_input(Camera *p_camera, const Ref<Inpu
snap_ignore = false;
}
if (!snap_ignore) {
cpoint = CanvasItemEditor::get_singleton()->snap_point(cpoint);
if (!snap_ignore && SpatialEditor::get_singleton()->is_snap_enabled()) {
cpoint = cpoint.snapped(Vector2(
SpatialEditor::get_singleton()->get_translate_snap(),
SpatialEditor::get_singleton()->get_translate_snap()));
}
edited_point_pos = cpoint;

View file

@ -120,6 +120,10 @@ void CSGShapeSpatialGizmoPlugin::set_handle(EditorSpatialGizmo *p_gizmo, int p_i
Vector3 ra, rb;
Geometry::get_closest_points_between_segments(Vector3(), Vector3(4096, 0, 0), sg[0], sg[1], ra, rb);
float d = ra.x;
if (SpatialEditor::get_singleton()->is_snap_enabled()) {
d = Math::stepify(d, SpatialEditor::get_singleton()->get_translate_snap());
}
if (d < 0.001)
d = 0.001;
@ -135,6 +139,10 @@ void CSGShapeSpatialGizmoPlugin::set_handle(EditorSpatialGizmo *p_gizmo, int p_i
Vector3 ra, rb;
Geometry::get_closest_points_between_segments(Vector3(), axis * 4096, sg[0], sg[1], ra, rb);
float d = ra[p_idx];
if (SpatialEditor::get_singleton()->is_snap_enabled()) {
d = Math::stepify(d, SpatialEditor::get_singleton()->get_translate_snap());
}
if (d < 0.001)
d = 0.001;
@ -154,6 +162,9 @@ void CSGShapeSpatialGizmoPlugin::set_handle(EditorSpatialGizmo *p_gizmo, int p_i
Vector3 ra, rb;
Geometry::get_closest_points_between_segments(Vector3(), axis * 4096, sg[0], sg[1], ra, rb);
float d = axis.dot(ra);
if (SpatialEditor::get_singleton()->is_snap_enabled()) {
d = Math::stepify(d, SpatialEditor::get_singleton()->get_translate_snap());
}
if (d < 0.001)
d = 0.001;
@ -173,6 +184,9 @@ void CSGShapeSpatialGizmoPlugin::set_handle(EditorSpatialGizmo *p_gizmo, int p_i
Vector3 ra, rb;
Geometry::get_closest_points_between_segments(Vector3(), axis * 4096, sg[0], sg[1], ra, rb);
float d = axis.dot(ra);
if (SpatialEditor::get_singleton()->is_snap_enabled()) {
d = Math::stepify(d, SpatialEditor::get_singleton()->get_translate_snap());
}
if (d < 0.001)
d = 0.001;