From 4303e94617c15cef6f6a2223e4d06e874fa7ee03 Mon Sep 17 00:00:00 2001 From: Relintai Date: Fri, 31 Dec 2021 08:41:25 +0100 Subject: [PATCH] Implemented a different outline for the edge select mode. --- .../mesh_data_resource_editor/MIDGizmo.gd | 6 ++ .../utilities/mesh_outline.gd | 58 +++++++++++++++---- 2 files changed, 52 insertions(+), 12 deletions(-) diff --git a/game/addons/mesh_data_resource_editor/MIDGizmo.gd b/game/addons/mesh_data_resource_editor/MIDGizmo.gd index 5b77d4a0..a54b21a6 100644 --- a/game/addons/mesh_data_resource_editor/MIDGizmo.gd +++ b/game/addons/mesh_data_resource_editor/MIDGizmo.gd @@ -121,6 +121,12 @@ func redraw(): var material = get_plugin().get_material("main", self) _mesh_outline_generator.setup(_mdr) + + if selection_mode == SelectionMode.SELECTION_MODE_EDGE: + _mesh_outline_generator.generate_mark_edges() + else: + _mesh_outline_generator.generate() + add_lines(_mesh_outline_generator.lines, material, false) if _selected_points.size() > 0: diff --git a/game/addons/mesh_data_resource_editor/utilities/mesh_outline.gd b/game/addons/mesh_data_resource_editor/utilities/mesh_outline.gd index 0666ce19..5b60916c 100644 --- a/game/addons/mesh_data_resource_editor/utilities/mesh_outline.gd +++ b/game/addons/mesh_data_resource_editor/utilities/mesh_outline.gd @@ -8,9 +8,7 @@ var lines : PoolVector3Array func setup(mdr : MeshDataResource) -> void: _mdr = mdr - refresh() - -func refresh(): +func generate(): lines.resize(0) if !_mdr: @@ -31,13 +29,49 @@ func refresh(): return if indices.size() % 3 == 0: - for i in range(0, len(indices), 3): - lines.append(vertices[indices[i]]) - lines.append(vertices[indices[i + 1]]) - - lines.append(vertices[indices[i + 1]]) - lines.append(vertices[indices[i + 2]]) - - lines.append(vertices[indices[i + 2]]) - lines.append(vertices[indices[i]]) + for i in range(0, indices.size(), 3): + for j in range(3): + lines.append(vertices[indices[i + j]]) + lines.append(vertices[indices[i + ((j + 1) % 3)]]) +func generate_mark_edges(): + lines.resize(0) + + if !_mdr: + return + + if _mdr.array.size() != ArrayMesh.ARRAY_MAX: + return + + if _mdr.array[ArrayMesh.ARRAY_VERTEX] == null || _mdr.array[ArrayMesh.ARRAY_INDEX] == null: + return + + var arr : Array = _mdr.array + + var vertices : PoolVector3Array = arr[ArrayMesh.ARRAY_VERTEX] + var indices : PoolIntArray = arr[ArrayMesh.ARRAY_INDEX] + + if vertices.size() == 0: + return + + if indices.size() % 3 == 0: + for i in range(0, indices.size(), 3): + for j in range(3): + var i0 : int = indices[i + j] + var i1 : int = indices[i + ((j + 1) % 3)] + + var v0 : Vector3 = vertices[i0] + var v1 : Vector3 = vertices[i1] + + lines.append(v0) + lines.append(v1) + + var pmid : Vector3 = lerp(v0, v1, 0.5) + var l : float = (v0 - v1).length() / 20.0 + + lines.append(pmid + Vector3(l, 0, 0)) + lines.append(pmid + Vector3(-l, 0, 0)) + lines.append(pmid + Vector3(0, 0, l)) + lines.append(pmid + Vector3(0, 0, -l)) + lines.append(pmid + Vector3(0, l, 0)) + lines.append(pmid + Vector3(0, -l, 0))