From ef7ed3848b33fb74a0f6cb0b66b832a592acfc08 Mon Sep 17 00:00:00 2001 From: Relintai Date: Wed, 29 Dec 2021 17:10:58 +0100 Subject: [PATCH] Started refactoring mesh data resource editor's gizmo. --- .../mesh_data_resource_editor/MIDGizmo.gd | 34 ++++++------- .../utilities/mesh_add_utils.gd | 1 + .../utilities/mesh_decompose.gd | 14 ++++++ .../utilities/mesh_outline.gd | 50 +++++++++++++++++++ 4 files changed, 79 insertions(+), 20 deletions(-) create mode 100644 game/addons/mesh_data_resource_editor/utilities/mesh_decompose.gd create mode 100644 game/addons/mesh_data_resource_editor/utilities/mesh_outline.gd diff --git a/game/addons/mesh_data_resource_editor/MIDGizmo.gd b/game/addons/mesh_data_resource_editor/MIDGizmo.gd index 724a6306..1a618ffd 100644 --- a/game/addons/mesh_data_resource_editor/MIDGizmo.gd +++ b/game/addons/mesh_data_resource_editor/MIDGizmo.gd @@ -1,6 +1,8 @@ tool extends EditorSpatialGizmo +var MeshOutline = preload("res://addons/mesh_data_resource_editor/utilities/mesh_outline.gd") + enum EditMode { NONE, TRANSLATE, SCALE, ROTATE } @@ -13,10 +15,11 @@ enum AxisConstraint { var gizmo_size = 3.0 -var plugin +var plugin : EditorPlugin var vertices : PoolVector3Array var indices : PoolIntArray + var selected_indices : PoolIntArray var selected_vertices : PoolVector3Array var selected_vertices_original : PoolVector3Array @@ -26,6 +29,11 @@ var axis_constraint = AxisConstraint.X | AxisConstraint.Y | AxisConstraint.Z var previous_point : Vector2 var is_dragging : bool = false +var _mesh_outline + +func _init(): + _mesh_outline = MeshOutline.new() + func set_handle(index: int, camera: Camera, point: Vector2): var relative : Vector2 = point - previous_point @@ -103,29 +111,15 @@ func redraw(): if mdr.array.size() != ArrayMesh.ARRAY_MAX: return - + var handles_material : SpatialMaterial = get_plugin().get_material("handles", self) + var material = get_plugin().get_material("main", self) + _mesh_outline.setup(mdr) + add_lines(_mesh_outline.lines, material, false) + if vertices.size() == 0: vertices = mdr.array[ArrayMesh.ARRAY_VERTEX] - - var material = get_plugin().get_material("main", self) - var indices : PoolIntArray = mdr.array[ArrayMesh.ARRAY_INDEX] - - var lines : PoolVector3Array = PoolVector3Array() - - 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]]) - - add_lines(lines, material, false) var vs : PoolVector3Array = PoolVector3Array() diff --git a/game/addons/mesh_data_resource_editor/utilities/mesh_add_utils.gd b/game/addons/mesh_data_resource_editor/utilities/mesh_add_utils.gd index b2cf5ae3..e0fc4d4d 100644 --- a/game/addons/mesh_data_resource_editor/utilities/mesh_add_utils.gd +++ b/game/addons/mesh_data_resource_editor/utilities/mesh_add_utils.gd @@ -1,3 +1,4 @@ +tool extends Object static func add_box(mdr : MeshDataResource) -> void: diff --git a/game/addons/mesh_data_resource_editor/utilities/mesh_decompose.gd b/game/addons/mesh_data_resource_editor/utilities/mesh_decompose.gd new file mode 100644 index 00000000..03b3d850 --- /dev/null +++ b/game/addons/mesh_data_resource_editor/utilities/mesh_decompose.gd @@ -0,0 +1,14 @@ +tool +extends Object + +static func get_vertex_to_vertex_map() -> Array: + return Array() + +static func get_edge_to_vertex_map() -> Array: + return Array() + +static func get_face_to_vertex_map() -> Array: + return Array() + +static func calculate_map_midpoints(mesh : Array, vertex_map : Array) -> PoolVector3Array: + return PoolVector3Array() diff --git a/game/addons/mesh_data_resource_editor/utilities/mesh_outline.gd b/game/addons/mesh_data_resource_editor/utilities/mesh_outline.gd new file mode 100644 index 00000000..eec3c2a4 --- /dev/null +++ b/game/addons/mesh_data_resource_editor/utilities/mesh_outline.gd @@ -0,0 +1,50 @@ +tool +extends Reference + +var _mdr : MeshDataResource + +var lines : PoolVector3Array + +func setup(mdr : MeshDataResource) -> void: + if _mdr != null && _mdr == mdr: + return + + if _mdr: + _mdr.disconnect("changed", self, "refresh") + + _mdr = mdr + + if _mdr: + _mdr.connect("changed", self, "refresh") + + refresh() + +func refresh(): + 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 vertices : PoolVector3Array = _mdr.array[ArrayMesh.ARRAY_VERTEX] + var indices : PoolIntArray = _mdr.array[ArrayMesh.ARRAY_INDEX] + + if vertices.size() == 0: + vertices = _mdr.array[ArrayMesh.ARRAY_VERTEX] + + 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]]) +