mirror of
https://github.com/Relintai/pandemonium_engine.git
synced 2024-12-27 22:27:15 +01:00
Turned the remaining mesh data resource editor gdscript classes into skeleton c++ classes.
This commit is contained in:
parent
534d758c54
commit
8c1c9e53d1
@ -1,255 +0,0 @@
|
||||
tool
|
||||
extends Control
|
||||
|
||||
var _plugin : EditorPlugin
|
||||
|
||||
export var uv_preview_path : NodePath
|
||||
export var uv_editor_path : NodePath
|
||||
|
||||
var uv_preview : Node
|
||||
var uv_editor : Node
|
||||
|
||||
func _enter_tree():
|
||||
uv_preview = get_node(uv_preview_path)
|
||||
uv_editor = get_node(uv_editor_path)
|
||||
|
||||
if _plugin && uv_editor:
|
||||
uv_editor.set_plugin(_plugin)
|
||||
|
||||
func set_plugin(plugin : EditorPlugin) -> void:
|
||||
_plugin = plugin
|
||||
|
||||
if uv_editor:
|
||||
uv_editor.set_plugin(plugin)
|
||||
|
||||
func set_mesh_data_resource(a : MeshDataResource) -> void:
|
||||
if uv_preview:
|
||||
uv_preview.set_mesh_data_resource(a)
|
||||
|
||||
if uv_editor:
|
||||
uv_editor.set_mesh_data_resource(a)
|
||||
|
||||
func set_mesh_data_instance(a : MeshDataInstance) -> void:
|
||||
if uv_preview:
|
||||
uv_preview.set_mesh_data_instance(a)
|
||||
|
||||
if uv_editor:
|
||||
uv_editor.set_mesh_data_instance(a)
|
||||
|
||||
func _unhandled_key_input(event : InputEventKey) -> void:
|
||||
if event.echo:
|
||||
return
|
||||
|
||||
if event.alt || event.shift || event.control || event.meta || event.command:
|
||||
return
|
||||
|
||||
if event.scancode == KEY_G:
|
||||
set_edit_mode_translate()
|
||||
elif event.scancode == KEY_H:
|
||||
set_edit_mode_rotate()
|
||||
elif event.scancode == KEY_J:
|
||||
set_edit_mode_scale()
|
||||
|
||||
elif event.scancode == KEY_V:
|
||||
set_axis_x(!get_axis_x())
|
||||
elif event.scancode == KEY_B:
|
||||
set_axis_y(!get_axis_y())
|
||||
elif event.scancode == KEY_N:
|
||||
set_axis_z(!get_axis_z())
|
||||
|
||||
elif event.scancode == KEY_K:
|
||||
set_selection_mode_vertex()
|
||||
elif event.scancode == KEY_L:
|
||||
set_selection_mode_edge()
|
||||
elif event.scancode == KEY_SEMICOLON:
|
||||
set_selection_mode_face()
|
||||
|
||||
#Edit modes
|
||||
func set_edit_mode_translate() -> void:
|
||||
$VBoxContainer/Actions/Actions/VBoxContainer2/HBoxContainer/Translate.pressed = true
|
||||
|
||||
func set_edit_mode_rotate() -> void:
|
||||
$VBoxContainer/Actions/Actions/VBoxContainer2/HBoxContainer/Rotate.pressed = true
|
||||
|
||||
func set_edit_mode_scale() -> void:
|
||||
$VBoxContainer/Actions/Actions/VBoxContainer2/HBoxContainer/Scale.pressed = true
|
||||
|
||||
func on_edit_mode_translate_toggled(on : bool) -> void:
|
||||
if on:
|
||||
if _plugin:
|
||||
_plugin.set_translate()
|
||||
|
||||
func on_edit_mode_rotate_toggled(on : bool) -> void:
|
||||
if on:
|
||||
if _plugin:
|
||||
_plugin.set_rotate()
|
||||
|
||||
func on_edit_mode_scale_toggled(on : bool) -> void:
|
||||
if on:
|
||||
if _plugin:
|
||||
_plugin.set_scale()
|
||||
|
||||
#axis locks
|
||||
func get_axis_x() -> bool:
|
||||
return $VBoxContainer/Actions/Actions/VBoxContainer2/HBoxContainer2/AxisX.pressed
|
||||
|
||||
func get_axis_y() -> bool:
|
||||
return $VBoxContainer/Actions/Actions/VBoxContainer2/HBoxContainer2/AxisY.pressed
|
||||
|
||||
func get_axis_z() -> bool:
|
||||
return $VBoxContainer/Actions/Actions/VBoxContainer2/HBoxContainer2/AxisZ.pressed
|
||||
|
||||
func set_axis_x(on : bool) -> void:
|
||||
$VBoxContainer/Actions/Actions/VBoxContainer2/HBoxContainer2/AxisX.pressed = on
|
||||
|
||||
func set_axis_y(on : bool) -> void:
|
||||
$VBoxContainer/Actions/Actions/VBoxContainer2/HBoxContainer2/AxisY.pressed = on
|
||||
|
||||
func set_axis_z(on : bool) -> void:
|
||||
$VBoxContainer/Actions/Actions/VBoxContainer2/HBoxContainer2/AxisZ.pressed = on
|
||||
|
||||
func on_axis_x_toggled(on : bool) -> void:
|
||||
if _plugin:
|
||||
_plugin.set_axis_x(on)
|
||||
|
||||
func on_axis_y_toggled(on : bool) -> void:
|
||||
if _plugin:
|
||||
_plugin.set_axis_y(on)
|
||||
|
||||
func on_axis_z_toggled(on : bool) -> void:
|
||||
if _plugin:
|
||||
_plugin.set_axis_z(on)
|
||||
|
||||
#selection modes
|
||||
func on_selection_mode_vertex_toggled(on : bool) -> void:
|
||||
if on:
|
||||
if _plugin:
|
||||
_plugin.set_selection_mode_vertex()
|
||||
|
||||
func on_selection_mode_edge_toggled(on : bool) -> void:
|
||||
if on:
|
||||
if _plugin:
|
||||
_plugin.set_selection_mode_edge()
|
||||
|
||||
func on_selection_mode_face_toggled(on : bool) -> void:
|
||||
if on:
|
||||
if _plugin:
|
||||
_plugin.set_selection_mode_face()
|
||||
|
||||
func set_selection_mode_vertex() -> void:
|
||||
$VBoxContainer/Actions/Actions/VBoxContainer2/HBoxContainer3/Vertex.pressed = true
|
||||
|
||||
func set_selection_mode_edge() -> void:
|
||||
$VBoxContainer/Actions/Actions/VBoxContainer2/HBoxContainer3/Edge.pressed = true
|
||||
|
||||
func set_selection_mode_face() -> void:
|
||||
$VBoxContainer/Actions/Actions/VBoxContainer2/HBoxContainer3/Face.pressed = true
|
||||
|
||||
|
||||
func _on_Extrude_pressed():
|
||||
_plugin.extrude()
|
||||
|
||||
func _on_AddBox_pressed():
|
||||
_plugin.add_box()
|
||||
|
||||
func _on_UnwrapButton_pressed():
|
||||
_plugin.uv_unwrap()
|
||||
|
||||
func _on_add_triangle_pressed():
|
||||
_plugin.add_triangle()
|
||||
|
||||
func _on_add_quad_pressed():
|
||||
_plugin.add_quad()
|
||||
|
||||
func _on_split_pressed():
|
||||
_plugin.split()
|
||||
|
||||
func _on_connect_to_first_selected_pressed():
|
||||
_plugin.connect_to_first_selected()
|
||||
|
||||
func _on_connect_to_avg_pressed():
|
||||
_plugin.connect_to_avg()
|
||||
|
||||
func _on_connect_to_last_selected_pressed():
|
||||
_plugin.connect_to_last_selected()
|
||||
|
||||
func _on_disconnect_pressed():
|
||||
_plugin.disconnect_action()
|
||||
|
||||
func _on_add_triangle_at_pressed():
|
||||
_plugin.add_triangle_at()
|
||||
|
||||
func _on_add_auad_at_pressed():
|
||||
_plugin.add_quad_at()
|
||||
|
||||
func _oncreate_face_pressed():
|
||||
_plugin.create_face()
|
||||
|
||||
func _on_delete_pressed():
|
||||
_plugin.delete_selected()
|
||||
|
||||
func _on_GenNormals_pressed():
|
||||
_plugin.generate_normals()
|
||||
|
||||
func _on_RemDoubles_pressed():
|
||||
_plugin.remove_doubles()
|
||||
|
||||
func _on_MergeOptimize_pressed():
|
||||
_plugin.merge_optimize()
|
||||
|
||||
func _on_GenTangents_pressed():
|
||||
_plugin.generate_tangents()
|
||||
|
||||
func _on_mark_seam_pressed():
|
||||
_plugin.mark_seam()
|
||||
|
||||
func _on_unmark_seam_pressed():
|
||||
_plugin.unmark_seam()
|
||||
|
||||
func _on_apply_seams_pressed():
|
||||
_plugin.apply_seam()
|
||||
|
||||
func _on_uv_edit_pressed():
|
||||
$Popups/UVEditorPopup.popup_centered()
|
||||
|
||||
func on_pivot_average_toggled(on : bool):
|
||||
if on:
|
||||
_plugin.set_pivot_averaged()
|
||||
|
||||
func on_pivot_mdi_origin_toggled(on : bool):
|
||||
if on:
|
||||
_plugin.set_pivot_mdi_origin()
|
||||
|
||||
func on_pivot_world_origin_toggled(on : bool):
|
||||
if on:
|
||||
_plugin.set_pivot_world_origin()
|
||||
|
||||
func on_visual_indicator_outline_toggled(on : bool):
|
||||
_plugin.visual_indicator_outline_set(on)
|
||||
|
||||
func on_visual_indicator_seam_toggled(on : bool):
|
||||
_plugin.visual_indicator_seam_set(on)
|
||||
|
||||
func on_visual_indicator_handle_toggled(on : bool):
|
||||
_plugin.visual_indicator_handle_set(on)
|
||||
|
||||
func _on_select_all_pressed():
|
||||
_plugin.select_all()
|
||||
|
||||
func onhandle_selection_type_front_toggled(on : bool):
|
||||
if on:
|
||||
_plugin.handle_selection_type_front()
|
||||
|
||||
func onhandle_selection_type_back_toggled(on : bool):
|
||||
if on:
|
||||
_plugin.handle_selection_type_back()
|
||||
|
||||
func onhandle_selection_type_all_toggled(on : bool):
|
||||
if on:
|
||||
_plugin.handle_selection_type_all()
|
||||
|
||||
func _on_clean_mesh_pressed():
|
||||
_plugin.clean_mesh()
|
||||
|
||||
func _on_flip_face_pressed():
|
||||
_plugin.flip_selected_faces()
|
@ -1,33 +0,0 @@
|
||||
tool
|
||||
extends EditorSpatialGizmoPlugin
|
||||
|
||||
const MDIGizmo = preload("res://addons/mesh_data_resource_editor/MIDGizmo.gd")
|
||||
|
||||
var plugin
|
||||
|
||||
func _init():
|
||||
create_material("main", Color(0.7, 0.7, 0.7))
|
||||
create_material("seam", Color(1, 0, 0), false, true)
|
||||
create_handle_material("handles")
|
||||
|
||||
func get_name():
|
||||
return "MDIGizmo"
|
||||
|
||||
func get_priority():
|
||||
return 100
|
||||
|
||||
func create_gizmo(spatial):
|
||||
if spatial is MeshDataInstance:
|
||||
var gizmo = MDIGizmo.new()
|
||||
|
||||
gizmo.set_editor_plugin(plugin)
|
||||
gizmo.set_spatial_node(spatial)
|
||||
gizmo.setup()
|
||||
plugin.register_gizmo(gizmo)
|
||||
|
||||
return gizmo
|
||||
else:
|
||||
return null
|
||||
|
||||
func is_handle_highlighted(gizmo, index):
|
||||
pass
|
@ -1,7 +0,0 @@
|
||||
[plugin]
|
||||
|
||||
name="mesh_data_resource_editor"
|
||||
description=""
|
||||
author="Relintai"
|
||||
version="1.0"
|
||||
script="plugin.gd"
|
@ -1,3 +1,405 @@
|
||||
/*
|
||||
Copyright (c) 2019-2022 Péter Magyar
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "mdi_ed.h"
|
||||
|
||||
void MDIEd::_enter_tree() {
|
||||
/*
|
||||
uv_preview = get_node(uv_preview_path)
|
||||
uv_editor = get_node(uv_editor_path)
|
||||
|
||||
if _plugin && uv_editor:
|
||||
uv_editor.set_plugin(_plugin)
|
||||
*/
|
||||
}
|
||||
void MDIEd::set_plugin(EditorPlugin *plugin) {
|
||||
/*
|
||||
_plugin = plugin
|
||||
|
||||
if uv_editor:
|
||||
uv_editor.set_plugin(plugin)
|
||||
*/
|
||||
}
|
||||
void MDIEd::set_mesh_data_resource(Ref<MeshDataResource> a) {
|
||||
/*
|
||||
if uv_preview:
|
||||
uv_preview.set_mesh_data_resource(a)
|
||||
|
||||
if uv_editor:
|
||||
uv_editor.set_mesh_data_resource(a)
|
||||
*/
|
||||
}
|
||||
void MDIEd::set_mesh_data_instance(MeshDataInstance *a) {
|
||||
/*
|
||||
if uv_preview:
|
||||
uv_preview.set_mesh_data_instance(a)
|
||||
|
||||
if uv_editor:
|
||||
uv_editor.set_mesh_data_instance(a)
|
||||
*/
|
||||
}
|
||||
void MDIEd::_unhandled_key_input(Ref<InputEventKey> event) {
|
||||
/*
|
||||
if event.echo:
|
||||
return
|
||||
|
||||
if event.alt || event.shift || event.control || event.meta || event.command:
|
||||
return
|
||||
|
||||
if event.scancode == KEY_G:
|
||||
set_edit_mode_translate()
|
||||
elif event.scancode == KEY_H:
|
||||
set_edit_mode_rotate()
|
||||
elif event.scancode == KEY_J:
|
||||
set_edit_mode_scale()
|
||||
|
||||
elif event.scancode == KEY_V:
|
||||
set_axis_x(!get_axis_x())
|
||||
elif event.scancode == KEY_B:
|
||||
set_axis_y(!get_axis_y())
|
||||
elif event.scancode == KEY_N:
|
||||
set_axis_z(!get_axis_z())
|
||||
|
||||
elif event.scancode == KEY_K:
|
||||
set_selection_mode_vertex()
|
||||
elif event.scancode == KEY_L:
|
||||
set_selection_mode_edge()
|
||||
elif event.scancode == KEY_SEMICOLON:
|
||||
set_selection_mode_face()
|
||||
|
||||
*/
|
||||
}
|
||||
|
||||
//Edit modes
|
||||
void MDIEd::set_edit_mode_translate() {
|
||||
/*
|
||||
$VBoxContainer/Actions/Actions/VBoxContainer2/HBoxContainer/Translate.pressed = true
|
||||
*/
|
||||
}
|
||||
void MDIEd::set_edit_mode_rotate() {
|
||||
/*
|
||||
$VBoxContainer/Actions/Actions/VBoxContainer2/HBoxContainer/Rotate.pressed = true
|
||||
*/
|
||||
}
|
||||
void MDIEd::set_edit_mode_scale() {
|
||||
/*
|
||||
$VBoxContainer/Actions/Actions/VBoxContainer2/HBoxContainer/Scale.pressed = true
|
||||
*/
|
||||
}
|
||||
|
||||
void MDIEd::on_edit_mode_translate_toggled(bool on) {
|
||||
/*
|
||||
if on:
|
||||
if _plugin:
|
||||
_plugin.set_translate()
|
||||
*/
|
||||
}
|
||||
void MDIEd::on_edit_mode_rotate_toggled(bool on) {
|
||||
/*
|
||||
if on:
|
||||
if _plugin:
|
||||
_plugin.set_rotate()
|
||||
*/
|
||||
}
|
||||
void MDIEd::on_edit_mode_scale_toggled(bool on) {
|
||||
/*
|
||||
if on:
|
||||
if _plugin:
|
||||
_plugin.set_scale()
|
||||
*/
|
||||
}
|
||||
|
||||
//axis locks
|
||||
bool MDIEd::get_axis_x() {
|
||||
/*
|
||||
return $VBoxContainer/Actions/Actions/VBoxContainer2/HBoxContainer2/AxisX.pressed
|
||||
*/
|
||||
}
|
||||
bool MDIEd::get_axis_y() {
|
||||
/*
|
||||
return $VBoxContainer/Actions/Actions/VBoxContainer2/HBoxContainer2/AxisY.pressed
|
||||
*/
|
||||
}
|
||||
bool MDIEd::get_axis_z() {
|
||||
/*
|
||||
return $VBoxContainer/Actions/Actions/VBoxContainer2/HBoxContainer2/AxisZ.pressed
|
||||
*/
|
||||
}
|
||||
void MDIEd::set_axis_x(bool on) {
|
||||
/*
|
||||
$VBoxContainer/Actions/Actions/VBoxContainer2/HBoxContainer2/AxisX.pressed = on
|
||||
*/
|
||||
}
|
||||
void MDIEd::set_axis_y(bool on) {
|
||||
/*
|
||||
$VBoxContainer/Actions/Actions/VBoxContainer2/HBoxContainer2/AxisY.pressed = on
|
||||
*/
|
||||
}
|
||||
void MDIEd::set_axis_z(bool on) {
|
||||
/*
|
||||
$VBoxContainer/Actions/Actions/VBoxContainer2/HBoxContainer2/AxisZ.pressed = on
|
||||
*/
|
||||
}
|
||||
|
||||
void MDIEd::on_axis_x_toggled(bool on) {
|
||||
/*
|
||||
if _plugin:
|
||||
_plugin.set_axis_x(on)
|
||||
*/
|
||||
}
|
||||
void MDIEd::on_axis_y_toggled(bool on) {
|
||||
/*
|
||||
if _plugin:
|
||||
_plugin.set_axis_y(on)
|
||||
*/
|
||||
}
|
||||
void MDIEd::on_axis_z_toggled(bool on) {
|
||||
/*
|
||||
if _plugin:
|
||||
_plugin.set_axis_z(on)
|
||||
*/
|
||||
}
|
||||
|
||||
//selection modes
|
||||
void MDIEd::on_selection_mode_vertex_toggled(bool on) {
|
||||
/*
|
||||
if on:
|
||||
if _plugin:
|
||||
_plugin.set_selection_mode_vertex()
|
||||
*/
|
||||
}
|
||||
void MDIEd::on_selection_mode_edge_toggled(bool on) {
|
||||
/*
|
||||
if on:
|
||||
if _plugin:
|
||||
_plugin.set_selection_mode_edge()
|
||||
*/
|
||||
}
|
||||
void MDIEd::on_selection_mode_face_toggled(bool on) {
|
||||
/*
|
||||
if on:
|
||||
if _plugin:
|
||||
_plugin.set_selection_mode_face()
|
||||
*/
|
||||
}
|
||||
|
||||
void MDIEd::set_selection_mode_vertex() {
|
||||
/*
|
||||
$VBoxContainer/Actions/Actions/VBoxContainer2/HBoxContainer3/Vertex.pressed = true
|
||||
*/
|
||||
}
|
||||
void MDIEd::set_selection_mode_edge() {
|
||||
/*
|
||||
$VBoxContainer/Actions/Actions/VBoxContainer2/HBoxContainer3/Edge.pressed = true
|
||||
*/
|
||||
}
|
||||
void MDIEd::set_selection_mode_face() {
|
||||
/*
|
||||
$VBoxContainer/Actions/Actions/VBoxContainer2/HBoxContainer3/Face.pressed = true
|
||||
*/
|
||||
}
|
||||
|
||||
void MDIEd::_on_Extrude_pressed() {
|
||||
/*
|
||||
_plugin.extrude()
|
||||
*/
|
||||
}
|
||||
void MDIEd::_on_AddBox_pressed() {
|
||||
/*
|
||||
_plugin.add_box()
|
||||
*/
|
||||
}
|
||||
void MDIEd::_on_UnwrapButton_pressed() {
|
||||
/*
|
||||
_plugin.uv_unwrap()
|
||||
*/
|
||||
}
|
||||
void MDIEd::_on_add_triangle_pressed() {
|
||||
/*
|
||||
_plugin.add_triangle()
|
||||
*/
|
||||
}
|
||||
void MDIEd::_on_add_quad_pressed() {
|
||||
/*
|
||||
_plugin.add_quad()
|
||||
*/
|
||||
}
|
||||
void MDIEd::_on_split_pressed() {
|
||||
/*
|
||||
_plugin.split()
|
||||
*/
|
||||
}
|
||||
void MDIEd::_on_connect_to_first_selected_pressed() {
|
||||
/*
|
||||
_plugin.connect_to_first_selected()
|
||||
*/
|
||||
}
|
||||
void MDIEd::_on_connect_to_avg_pressed() {
|
||||
/*
|
||||
_plugin.connect_to_avg()
|
||||
*/
|
||||
}
|
||||
void MDIEd::_on_connect_to_last_selected_pressed() {
|
||||
/*
|
||||
_plugin.connect_to_last_selected()
|
||||
*/
|
||||
}
|
||||
void MDIEd::_on_disconnect_pressed() {
|
||||
/*
|
||||
_plugin.disconnect_action()
|
||||
*/
|
||||
}
|
||||
void MDIEd::_on_add_triangle_at_pressed() {
|
||||
/*
|
||||
_plugin.add_triangle_at()
|
||||
*/
|
||||
}
|
||||
void MDIEd::_on_add_auad_at_pressed() {
|
||||
/*
|
||||
_plugin.add_quad_at()
|
||||
*/
|
||||
}
|
||||
void MDIEd::_oncreate_face_pressed() {
|
||||
/*
|
||||
_plugin.create_face()
|
||||
*/
|
||||
}
|
||||
void MDIEd::_on_delete_pressed() {
|
||||
/*
|
||||
_plugin.delete_selected()
|
||||
*/
|
||||
}
|
||||
void MDIEd::_on_GenNormals_pressed() {
|
||||
/*
|
||||
_plugin.generate_normals()
|
||||
*/
|
||||
}
|
||||
void MDIEd::_on_RemDoubles_pressed() {
|
||||
/*
|
||||
_plugin.remove_doubles()
|
||||
*/
|
||||
}
|
||||
void MDIEd::_on_MergeOptimize_pressed() {
|
||||
/*
|
||||
_plugin.merge_optimize()
|
||||
*/
|
||||
}
|
||||
void MDIEd::_on_GenTangents_pressed() {
|
||||
/*
|
||||
_plugin.generate_tangents()
|
||||
*/
|
||||
}
|
||||
void MDIEd::_on_mark_seam_pressed() {
|
||||
/*
|
||||
_plugin.mark_seam()
|
||||
*/
|
||||
}
|
||||
void MDIEd::_on_unmark_seam_pressed() {
|
||||
/*
|
||||
_plugin.unmark_seam()
|
||||
*/
|
||||
}
|
||||
void MDIEd::_on_apply_seams_pressed() {
|
||||
/*
|
||||
_plugin.apply_seam()
|
||||
*/
|
||||
}
|
||||
void MDIEd::_on_uv_edit_pressed() {
|
||||
/*
|
||||
$Popups/UVEditorPopup.popup_centered()
|
||||
*/
|
||||
}
|
||||
|
||||
void MDIEd::on_pivot_average_toggled(bool on) {
|
||||
/*
|
||||
if on:
|
||||
_plugin.set_pivot_averaged()
|
||||
*/
|
||||
}
|
||||
void MDIEd::on_pivot_mdi_origin_toggled(bool on) {
|
||||
/*
|
||||
if on:
|
||||
_plugin.set_pivot_mdi_origin()
|
||||
*/
|
||||
}
|
||||
void MDIEd::on_pivot_world_origin_toggled(bool on) {
|
||||
/*
|
||||
if on:
|
||||
_plugin.set_pivot_world_origin()
|
||||
*/
|
||||
}
|
||||
void MDIEd::on_visual_indicator_outline_toggled(bool on) {
|
||||
/*
|
||||
_plugin.visual_indicator_outline_set(on)
|
||||
*/
|
||||
}
|
||||
void MDIEd::on_visual_indicator_seam_toggled(bool on) {
|
||||
/*
|
||||
_plugin.visual_indicator_seam_set(on)
|
||||
*/
|
||||
}
|
||||
void MDIEd::on_visual_indicator_handle_toggled(bool on) {
|
||||
/*
|
||||
_plugin.visual_indicator_handle_set(on)
|
||||
*/
|
||||
}
|
||||
void MDIEd::_on_select_all_pressed() {
|
||||
/*
|
||||
_plugin.select_all()
|
||||
*/
|
||||
}
|
||||
|
||||
void MDIEd::onhandle_selection_type_front_toggled(bool on) {
|
||||
/*
|
||||
if on:
|
||||
_plugin.handle_selection_type_front()
|
||||
*/
|
||||
}
|
||||
void MDIEd::onhandle_selection_type_back_toggled(bool on) {
|
||||
/*
|
||||
if on:
|
||||
_plugin.handle_selection_type_back()
|
||||
*/
|
||||
}
|
||||
void MDIEd::onhandle_selection_type_all_toggled(bool on) {
|
||||
/*
|
||||
if on:
|
||||
_plugin.handle_selection_type_all()
|
||||
*/
|
||||
}
|
||||
|
||||
void MDIEd::_on_clean_mesh_pressed() {
|
||||
/*
|
||||
_plugin.clean_mesh()
|
||||
*/
|
||||
}
|
||||
void MDIEd::_on_flip_face_pressed() {
|
||||
/*
|
||||
_plugin.flip_selected_faces()
|
||||
*/
|
||||
}
|
||||
|
||||
MDIEd::MDIEd() {
|
||||
/*
|
||||
[gd_scene load_steps=9 format=2]
|
||||
|
||||
[ext_resource path="res://addons/mesh_data_resource_editor/MDIEd.gd" type="Script" id=1]
|
||||
@ -238,7 +640,7 @@ margin_left = 343.0
|
||||
margin_right = 668.0
|
||||
margin_bottom = 20.0
|
||||
rect_min_size = Vector2( 25, 20 )
|
||||
hint_tooltip = "Only select handles that face away
|
||||
hint_tooltip = "Only select handles that face away
|
||||
the camera."
|
||||
size_flags_horizontal = 3
|
||||
toggle_mode = true
|
||||
@ -767,3 +1169,13 @@ size_flags_vertical = 3
|
||||
[connection signal="pressed" from="VBoxContainer/ScrollContainer/VBoxContainer2/Add/Add/AddBox" to="." method="_on_AddBox_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/ScrollContainer/VBoxContainer2/Add/Add/AddTriangle" to="." method="_on_add_triangle_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/ScrollContainer/VBoxContainer2/Add/Add/AddQuad" to="." method="_on_add_quad_pressed"]
|
||||
|
||||
|
||||
*/
|
||||
}
|
||||
|
||||
MDIEd::~MDIEd() {
|
||||
}
|
||||
|
||||
void MDIEd::_bind_methods() {
|
||||
}
|
121
modules/mesh_data_resource/editor/mdi_ed.h
Normal file
121
modules/mesh_data_resource/editor/mdi_ed.h
Normal file
@ -0,0 +1,121 @@
|
||||
#ifndef MDI_ED_H
|
||||
#define MDI_ED_H
|
||||
|
||||
/*
|
||||
Copyright (c) 2019-2022 Péter Magyar
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "scene/gui/control.h"
|
||||
|
||||
class MDIEd : public Control {
|
||||
GDCLASS(MDIEd, Control);
|
||||
|
||||
public:
|
||||
void _enter_tree();
|
||||
void set_plugin(EditorPlugin *plugin);
|
||||
void set_mesh_data_resource(Ref<MeshDataResource> a);
|
||||
void set_mesh_data_instance(MeshDataInstance *a);
|
||||
void _unhandled_key_input(Ref<InputEventKey> event);
|
||||
|
||||
//Edit modes
|
||||
void set_edit_mode_translate();
|
||||
void set_edit_mode_rotate();
|
||||
void set_edit_mode_scale();
|
||||
|
||||
void on_edit_mode_translate_toggled(bool on);
|
||||
void on_edit_mode_rotate_toggled(bool on);
|
||||
void on_edit_mode_scale_toggled(bool on);
|
||||
|
||||
//axis locks
|
||||
bool get_axis_x();
|
||||
bool get_axis_y();
|
||||
bool get_axis_z();
|
||||
void set_axis_x(bool on);
|
||||
void set_axis_y(bool on);
|
||||
void set_axis_z(bool on);
|
||||
|
||||
void on_axis_x_toggled(bool on);
|
||||
void on_axis_y_toggled(bool on);
|
||||
void on_axis_z_toggled(bool on);
|
||||
|
||||
//selection modes
|
||||
void on_selection_mode_vertex_toggled(bool on);
|
||||
void on_selection_mode_edge_toggled(bool on);
|
||||
void on_selection_mode_face_toggled(bool on);
|
||||
|
||||
void set_selection_mode_vertex();
|
||||
void set_selection_mode_edge();
|
||||
void set_selection_mode_face();
|
||||
|
||||
void _on_Extrude_pressed();
|
||||
void _on_AddBox_pressed();
|
||||
void _on_UnwrapButton_pressed();
|
||||
void _on_add_triangle_pressed();
|
||||
void _on_add_quad_pressed();
|
||||
void _on_split_pressed();
|
||||
void _on_connect_to_first_selected_pressed();
|
||||
void _on_connect_to_avg_pressed();
|
||||
void _on_connect_to_last_selected_pressed();
|
||||
void _on_disconnect_pressed();
|
||||
void _on_add_triangle_at_pressed();
|
||||
void _on_add_auad_at_pressed();
|
||||
void _oncreate_face_pressed();
|
||||
void _on_delete_pressed();
|
||||
void _on_GenNormals_pressed();
|
||||
void _on_RemDoubles_pressed();
|
||||
void _on_MergeOptimize_pressed();
|
||||
void _on_GenTangents_pressed();
|
||||
void _on_mark_seam_pressed();
|
||||
void _on_unmark_seam_pressed();
|
||||
void _on_apply_seams_pressed();
|
||||
void _on_uv_edit_pressed();
|
||||
|
||||
void on_pivot_average_toggled(bool on);
|
||||
void on_pivot_mdi_origin_toggled(bool on);
|
||||
void on_pivot_world_origin_toggled(bool on);
|
||||
void on_visual_indicator_outline_toggled(bool on);
|
||||
void on_visual_indicator_seam_toggled(bool on);
|
||||
void on_visual_indicator_handle_toggled(bool on);
|
||||
void _on_select_all_pressed();
|
||||
|
||||
void onhandle_selection_type_front_toggled(bool on);
|
||||
void onhandle_selection_type_back_toggled(bool on);
|
||||
void onhandle_selection_type_all_toggled(bool on);
|
||||
|
||||
void _on_clean_mesh_pressed();
|
||||
void _on_flip_face_pressed();
|
||||
|
||||
MDIEd();
|
||||
~MDIEd();
|
||||
|
||||
EditorPlugin *_plugin;
|
||||
|
||||
//export var uv_preview_path : NodePath
|
||||
//export var uv_editor_path : NodePath
|
||||
|
||||
Node *uv_preview;
|
||||
Node *uv_editor;
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
};
|
||||
|
||||
#endif
|
@ -1,289 +1,431 @@
|
||||
tool
|
||||
extends EditorPlugin
|
||||
/*
|
||||
Copyright (c) 2019-2022 Péter Magyar
|
||||
|
||||
const MDRMeshUtils = preload("res://addons/mesh_data_resource_editor/utilities/mdred_mesh_utils.gd")
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
const MdiGizmoPlugin = preload("res://addons/mesh_data_resource_editor/MDIGizmoPlugin.gd")
|
||||
const MDIEdGui = preload("res://addons/mesh_data_resource_editor/MDIEd.tscn")
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
var gizmo_plugin = MdiGizmoPlugin.new()
|
||||
var mdi_ed_gui : Control
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
var active_gizmos : Array
|
||||
#include "mdi_ed_plugin.h"
|
||||
|
||||
var current_mesh_data_instance : MeshDataInstance = null
|
||||
|
||||
func _enter_tree():
|
||||
void MDIEdPlugin::_enter_tree() {
|
||||
/*
|
||||
gizmo_plugin = MdiGizmoPlugin.new()
|
||||
mdi_ed_gui = MDIEdGui.instance()
|
||||
mdi_ed_gui.set_plugin(self)
|
||||
active_gizmos = []
|
||||
|
||||
|
||||
gizmo_plugin.plugin = self
|
||||
|
||||
|
||||
add_control_to_container(EditorPlugin.CONTAINER_SPATIAL_EDITOR_SIDE_RIGHT, mdi_ed_gui)
|
||||
mdi_ed_gui.hide()
|
||||
|
||||
add_spatial_gizmo_plugin(gizmo_plugin)
|
||||
|
||||
set_input_event_forwarding_always_enabled()
|
||||
|
||||
func _exit_tree():
|
||||
add_spatial_gizmo_plugin(gizmo_plugin)
|
||||
|
||||
set_input_event_forwarding_always_enabled()
|
||||
*/
|
||||
}
|
||||
void MDIEdPlugin::_exit_tree() {
|
||||
/*
|
||||
#print("_exit_tree")
|
||||
|
||||
|
||||
remove_spatial_gizmo_plugin(gizmo_plugin)
|
||||
#remove_control_from_container(EditorPlugin.CONTAINER_SPATIAL_EDITOR_SIDE_RIGHT, mdi_ed_gui)
|
||||
mdi_ed_gui.queue_free()
|
||||
pass
|
||||
|
||||
#func enable_plugin():
|
||||
# print("enable_plugin")
|
||||
# pass
|
||||
#
|
||||
#func disable_plugin():
|
||||
# print("disable_plugin")
|
||||
# remove_spatial_gizmo_plugin(gizmo_plugin)
|
||||
# remove_control_from_container(EditorPlugin.CONTAINER_SPATIAL_EDITOR_SIDE_RIGHT, mdi_ed_gui)
|
||||
# mdi_ed_gui.queue_free()
|
||||
*/
|
||||
}
|
||||
|
||||
func handles(object):
|
||||
bool MDIEdPlugin::handles(Object *object) {
|
||||
/*
|
||||
#print("disable_plugin")
|
||||
|
||||
|
||||
if object is MeshDataInstance:
|
||||
return true
|
||||
|
||||
return false
|
||||
|
||||
func edit(object):
|
||||
return false
|
||||
*/
|
||||
}
|
||||
void MDIEdPlugin::edit(Object *object) {
|
||||
/*
|
||||
var mdi : MeshDataInstance = object as MeshDataInstance
|
||||
|
||||
if mdi:
|
||||
if current_mesh_data_instance && mdi.gizmo && current_mesh_data_instance.gizmo:
|
||||
mdi.gizmo.transfer_state_from(current_mesh_data_instance.gizmo)
|
||||
|
||||
|
||||
mdi_ed_gui.set_mesh_data_resource(mdi.mesh_data)
|
||||
mdi_ed_gui.set_mesh_data_instance(mdi)
|
||||
|
||||
current_mesh_data_instance = mdi
|
||||
|
||||
func make_visible(visible):
|
||||
current_mesh_data_instance = mdi
|
||||
*/
|
||||
}
|
||||
void MDIEdPlugin::make_visible(bool visible) {
|
||||
/*
|
||||
#print("make_visible")
|
||||
|
||||
|
||||
if visible:
|
||||
mdi_ed_gui.show()
|
||||
else:
|
||||
#mdi_ed_gui.hide()
|
||||
#figure out how to hide it when something else gets selected, don't hide on unselect
|
||||
pass
|
||||
*/
|
||||
}
|
||||
|
||||
func get_plugin_name():
|
||||
void MDIEdPlugin::get_plugin_name() {
|
||||
/*
|
||||
return "mesh_data_resource_editor"
|
||||
|
||||
*/
|
||||
}
|
||||
|
||||
#func forward_spatial_gui_input(camera, event):
|
||||
# return forward_spatial_gui_input(0, camera, event)
|
||||
|
||||
func register_gizmo(gizmo):
|
||||
active_gizmos.append(gizmo)
|
||||
|
||||
func unregister_gizmo(gizmo):
|
||||
void MDIEdPlugin::register_gizmo(MDIGizmo *gizmo) {
|
||||
/*
|
||||
active_gizmos.append(gizmo)
|
||||
*/
|
||||
}
|
||||
void MDIEdPlugin::unregister_gizmo(MDIGizmo *gizmo) {
|
||||
/*
|
||||
for i in range(active_gizmos.size()):
|
||||
if active_gizmos[i] == gizmo:
|
||||
active_gizmos.remove(i)
|
||||
return
|
||||
*/
|
||||
}
|
||||
|
||||
func set_translate() -> void:
|
||||
void MDIEdPlugin::set_translate() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.set_translate()
|
||||
|
||||
func set_scale() -> void:
|
||||
*/
|
||||
}
|
||||
void MDIEdPlugin::set_scale() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.set_scale()
|
||||
|
||||
func set_rotate() -> void:
|
||||
*/
|
||||
}
|
||||
void MDIEdPlugin::set_rotate() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.set_rotate()
|
||||
|
||||
func set_axis_x(on : bool) -> void:
|
||||
*/
|
||||
}
|
||||
|
||||
void MDIEdPlugin::set_axis_x(bool on) {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.set_axis_x(on)
|
||||
|
||||
func set_axis_y(on : bool) -> void:
|
||||
*/
|
||||
}
|
||||
void MDIEdPlugin::set_axis_y(bool on) {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.set_axis_y(on)
|
||||
|
||||
func set_axis_z(on : bool) -> void:
|
||||
*/
|
||||
}
|
||||
void MDIEdPlugin::set_axis_z(bool on) {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.set_axis_z(on)
|
||||
*/
|
||||
}
|
||||
|
||||
func set_selection_mode_vertex() -> void:
|
||||
void MDIEdPlugin::set_selection_mode_vertex() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.set_selection_mode_vertex()
|
||||
|
||||
func set_selection_mode_edge() -> void:
|
||||
*/
|
||||
}
|
||||
void MDIEdPlugin::set_selection_mode_edge() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.set_selection_mode_edge()
|
||||
|
||||
func set_selection_mode_face() -> void:
|
||||
*/
|
||||
}
|
||||
void MDIEdPlugin::set_selection_mode_face() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.set_selection_mode_face()
|
||||
*/
|
||||
}
|
||||
|
||||
func get_mdr() -> MeshDataResource:
|
||||
Ref<MeshDataResource> MDIEdPlugin::get_mdr() {
|
||||
/*
|
||||
if current_mesh_data_instance:
|
||||
return current_mesh_data_instance.mesh_data
|
||||
|
||||
|
||||
return null
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
#func forward_spatial_gui_input(camera, event):
|
||||
# for g in active_gizmos:
|
||||
# if g.forward_spatial_gui_input(0, camera, event):
|
||||
# return true
|
||||
#
|
||||
# return false
|
||||
|
||||
func forward_spatial_gui_input(index, camera, event):
|
||||
bool MDIEdPlugin::forward_spatial_gui_input(int index, Camera *camera, const Ref<InputEvent> &p_event) {
|
||||
/*
|
||||
if (!is_instance_valid(current_mesh_data_instance)):
|
||||
current_mesh_data_instance = null
|
||||
|
||||
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
if current_mesh_data_instance.gizmo.forward_spatial_gui_input(index, camera, event):
|
||||
return true
|
||||
|
||||
return false
|
||||
*/
|
||||
}
|
||||
|
||||
func add_box() -> void:
|
||||
void MDIEdPlugin::add_box() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.add_box()
|
||||
|
||||
func add_triangle() -> void:
|
||||
*/
|
||||
}
|
||||
void MDIEdPlugin::add_triangle() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.add_triangle()
|
||||
|
||||
func add_quad() -> void:
|
||||
*/
|
||||
}
|
||||
void MDIEdPlugin::add_quad() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.add_quad()
|
||||
*/
|
||||
}
|
||||
|
||||
func add_triangle_at() -> void:
|
||||
void MDIEdPlugin::add_triangle_at() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.add_triangle_at()
|
||||
|
||||
func add_quad_at() -> void:
|
||||
*/
|
||||
}
|
||||
void MDIEdPlugin::add_quad_at() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.add_quad_at()
|
||||
*/
|
||||
}
|
||||
|
||||
func split():
|
||||
void MDIEdPlugin::split() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.split()
|
||||
*/
|
||||
}
|
||||
|
||||
func connect_action():
|
||||
void MDIEdPlugin::connect_action() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.connect_action()
|
||||
|
||||
func disconnect_action():
|
||||
*/
|
||||
}
|
||||
void MDIEdPlugin::disconnect_action() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.disconnect_action()
|
||||
*/
|
||||
}
|
||||
|
||||
func create_face():
|
||||
void MDIEdPlugin::create_face() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.create_face()
|
||||
|
||||
func delete_selected():
|
||||
*/
|
||||
}
|
||||
void MDIEdPlugin::delete_selected() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.delete_selected()
|
||||
*/
|
||||
}
|
||||
|
||||
func generate_normals():
|
||||
void MDIEdPlugin::generate_normals() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.generate_normals()
|
||||
|
||||
func remove_doubles():
|
||||
*/
|
||||
}
|
||||
void MDIEdPlugin::remove_doubles() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.remove_doubles()
|
||||
|
||||
func merge_optimize():
|
||||
*/
|
||||
}
|
||||
void MDIEdPlugin::merge_optimize() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.merge_optimize()
|
||||
|
||||
func generate_tangents():
|
||||
*/
|
||||
}
|
||||
void MDIEdPlugin::generate_tangents() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.generate_tangents()
|
||||
|
||||
func connect_to_first_selected():
|
||||
*/
|
||||
}
|
||||
|
||||
void MDIEdPlugin::connect_to_first_selected() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.connect_to_first_selected()
|
||||
|
||||
func connect_to_avg():
|
||||
*/
|
||||
}
|
||||
void MDIEdPlugin::connect_to_avg() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.connect_to_avg()
|
||||
|
||||
func connect_to_last_selected():
|
||||
*/
|
||||
}
|
||||
void MDIEdPlugin::connect_to_last_selected() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.connect_to_last_selected()
|
||||
*/
|
||||
}
|
||||
|
||||
func mark_seam():
|
||||
void MDIEdPlugin::mark_seam() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.mark_seam()
|
||||
|
||||
func unmark_seam():
|
||||
*/
|
||||
}
|
||||
void MDIEdPlugin::unmark_seam() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.unmark_seam()
|
||||
|
||||
func apply_seam():
|
||||
*/
|
||||
}
|
||||
void MDIEdPlugin::apply_seam() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.apply_seam()
|
||||
*/
|
||||
}
|
||||
|
||||
func uv_unwrap() -> void:
|
||||
void MDIEdPlugin::uv_unwrap() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.uv_unwrap()
|
||||
|
||||
func set_pivot_averaged():
|
||||
*/
|
||||
}
|
||||
|
||||
void MDIEdPlugin::set_pivot_averaged() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.set_pivot_averaged()
|
||||
|
||||
func set_pivot_mdi_origin():
|
||||
*/
|
||||
}
|
||||
void MDIEdPlugin::set_pivot_mdi_origin() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.set_pivot_mdi_origin()
|
||||
|
||||
func set_pivot_world_origin():
|
||||
*/
|
||||
}
|
||||
void MDIEdPlugin::set_pivot_world_origin() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.set_pivot_world_origin()
|
||||
|
||||
func visual_indicator_outline_set(on : bool):
|
||||
*/
|
||||
}
|
||||
|
||||
void MDIEdPlugin::visual_indicator_outline_set(bool on) {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.visual_indicator_outline_set(on)
|
||||
|
||||
func visual_indicator_seam_set(on : bool):
|
||||
*/
|
||||
}
|
||||
void MDIEdPlugin::visual_indicator_seam_set(bool on) {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.visual_indicator_seam_set(on)
|
||||
|
||||
func visual_indicator_handle_set(on : bool):
|
||||
*/
|
||||
}
|
||||
void MDIEdPlugin::visual_indicator_handle_set(bool on) {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.visual_indicator_handle_set(on)
|
||||
*/
|
||||
}
|
||||
|
||||
func select_all():
|
||||
void MDIEdPlugin::select_all() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.select_all()
|
||||
*/
|
||||
}
|
||||
|
||||
func handle_selection_type_front():
|
||||
void MDIEdPlugin::handle_selection_type_front() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.handle_selection_type_front()
|
||||
|
||||
func handle_selection_type_back():
|
||||
*/
|
||||
}
|
||||
void MDIEdPlugin::handle_selection_type_back() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.handle_selection_type_back()
|
||||
|
||||
func handle_selection_type_all():
|
||||
*/
|
||||
}
|
||||
void MDIEdPlugin::handle_selection_type_all() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.handle_selection_type_all()
|
||||
*/
|
||||
}
|
||||
|
||||
func extrude():
|
||||
void MDIEdPlugin::extrude() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.extrude()
|
||||
|
||||
func clean_mesh():
|
||||
*/
|
||||
}
|
||||
void MDIEdPlugin::clean_mesh() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.clean_mesh()
|
||||
|
||||
func flip_selected_faces():
|
||||
*/
|
||||
}
|
||||
|
||||
void MDIEdPlugin::flip_selected_faces() {
|
||||
/*
|
||||
if current_mesh_data_instance && current_mesh_data_instance.gizmo:
|
||||
current_mesh_data_instance.gizmo.flip_selected_faces()
|
||||
*/
|
||||
}
|
||||
|
||||
MDIEdPlugin::MDIEdPlugin() {
|
||||
/*
|
||||
|
||||
const MDRMeshUtils = preload("res://addons/mesh_data_resource_editor/utilities/mdred_mesh_utils.gd")
|
||||
|
||||
const MdiGizmoPlugin = preload("res://addons/mesh_data_resource_editor/MDIGizmoPlugin.gd")
|
||||
const MDIEdGui = preload("res://addons/mesh_data_resource_editor/MDIEd.tscn")
|
||||
|
||||
var gizmo_plugin = MdiGizmoPlugin.new()
|
||||
var mdi_ed_gui : Control
|
||||
|
||||
var active_gizmos : Array
|
||||
|
||||
var current_mesh_data_instance : MeshDataInstance = null
|
||||
|
||||
*/
|
||||
}
|
||||
|
||||
MDIEdPlugin::~MDIEdPlugin() {
|
||||
}
|
||||
|
||||
void MDIEdPlugin::_bind_methods() {
|
||||
}
|
131
modules/mesh_data_resource/editor/mdi_ed_plugin.h
Normal file
131
modules/mesh_data_resource/editor/mdi_ed_plugin.h
Normal file
@ -0,0 +1,131 @@
|
||||
#ifndef MDI_ED_PLUGIN_H
|
||||
#define MDI_ED_PLUGIN_H
|
||||
|
||||
/*
|
||||
Copyright (c) 2019-2022 Péter Magyar
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "editor/editor_plugin.h"
|
||||
|
||||
#include "core/os/input_event.h"
|
||||
|
||||
class Camera;
|
||||
class MDIGizmo;
|
||||
class MeshDataResource;
|
||||
class MdiGizmoPlugin;
|
||||
class MeshDataInstance;
|
||||
|
||||
class MDIEdPlugin : public EditorPlugin {
|
||||
GDCLASS(MDIEdPlugin, EditorPlugin);
|
||||
|
||||
public:
|
||||
void _enter_tree();
|
||||
void _exit_tree();
|
||||
|
||||
bool handles(Object *object);
|
||||
void edit(Object *object);
|
||||
void make_visible(bool visible);
|
||||
|
||||
void get_plugin_name();
|
||||
|
||||
void register_gizmo(MDIGizmo *gizmo);
|
||||
void unregister_gizmo(MDIGizmo *gizmo);
|
||||
|
||||
void set_translate();
|
||||
void set_scale();
|
||||
void set_rotate();
|
||||
|
||||
void set_axis_x(bool on);
|
||||
void set_axis_y(bool on);
|
||||
void set_axis_z(bool on);
|
||||
|
||||
void set_selection_mode_vertex();
|
||||
void set_selection_mode_edge();
|
||||
void set_selection_mode_face();
|
||||
|
||||
Ref<MeshDataResource> get_mdr();
|
||||
|
||||
bool forward_spatial_gui_input(int index, Camera *camera, const Ref<InputEvent> &p_event);
|
||||
|
||||
void add_box();
|
||||
void add_triangle();
|
||||
void add_quad();
|
||||
|
||||
void add_triangle_at();
|
||||
void add_quad_at();
|
||||
|
||||
void split();
|
||||
|
||||
void connect_action();
|
||||
void disconnect_action();
|
||||
|
||||
void create_face();
|
||||
void delete_selected();
|
||||
|
||||
void generate_normals();
|
||||
void remove_doubles();
|
||||
void merge_optimize();
|
||||
void generate_tangents();
|
||||
|
||||
void connect_to_first_selected();
|
||||
void connect_to_avg();
|
||||
void connect_to_last_selected();
|
||||
|
||||
void mark_seam();
|
||||
void unmark_seam();
|
||||
void apply_seam();
|
||||
|
||||
void uv_unwrap();
|
||||
|
||||
void set_pivot_averaged();
|
||||
void set_pivot_mdi_origin();
|
||||
void set_pivot_world_origin();
|
||||
|
||||
void visual_indicator_outline_set(bool on);
|
||||
void visual_indicator_seam_set(bool on);
|
||||
void visual_indicator_handle_set(bool on);
|
||||
|
||||
void select_all();
|
||||
|
||||
void handle_selection_type_front();
|
||||
void handle_selection_type_back();
|
||||
void handle_selection_type_all();
|
||||
|
||||
void extrude();
|
||||
void clean_mesh();
|
||||
|
||||
void flip_selected_faces();
|
||||
|
||||
MDIEdPlugin();
|
||||
~MDIEdPlugin();
|
||||
|
||||
MdiGizmoPlugin *gizmo_plugin;
|
||||
Control mdi_ed_gui;
|
||||
|
||||
Array active_gizmos;
|
||||
|
||||
Ref<MeshDataInstance> current_mesh_data_instance;
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
};
|
||||
|
||||
#endif
|
File diff suppressed because it is too large
Load Diff
243
modules/mesh_data_resource/editor/mdi_gizmo.h
Normal file
243
modules/mesh_data_resource/editor/mdi_gizmo.h
Normal file
@ -0,0 +1,243 @@
|
||||
#ifndef MDI_GIZMO_H
|
||||
#define MDI_GIZMO_H
|
||||
|
||||
/*
|
||||
Copyright (c) 2019-2022 Péter Magyar
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "editor/plugins/spatial_editor_plugin.h"
|
||||
|
||||
#include "core/pool_vector.h"
|
||||
#include "core/variant.h"
|
||||
#include "core/math/vector3.h"
|
||||
#include "core/reference.h"
|
||||
#include "core/math/basis.h"
|
||||
#include "core/math/transform.h"
|
||||
|
||||
class Camera;
|
||||
class MeshDataResource;
|
||||
class MeshOutlineGenerator;
|
||||
class InputEvent;
|
||||
class EditorPlugin;
|
||||
class UndoRedo;
|
||||
|
||||
class MDIGizmo : public EditorSpatialGizmo {
|
||||
GDCLASS(MDIGizmo, EditorSpatialGizmo);
|
||||
|
||||
public:
|
||||
enum EditMode {
|
||||
EDIT_MODE_NONE = 0,
|
||||
EDIT_MODE_TRANSLATE = 1,
|
||||
EDIT_MODE_SCALE = 2,
|
||||
EDIT_MODE_ROTATE = 3
|
||||
};
|
||||
|
||||
enum AxisConstraint {
|
||||
AXIS_CONSTRAINT_X = 1 << 0,
|
||||
AXIS_CONSTRAINT_Y = 1 << 1,
|
||||
AXIS_CONSTRAINT_Z = 1 << 2,
|
||||
};
|
||||
|
||||
enum SelectionMode {
|
||||
SELECTION_MODE_VERTEX = 0,
|
||||
SELECTION_MODE_EDGE = 1,
|
||||
SELECTION_MODE_FACE = 2,
|
||||
};
|
||||
|
||||
enum PivotTypes {
|
||||
PIVOT_TYPE_AVERAGED = 0,
|
||||
PIVOT_TYPE_MDI_ORIGIN = 1,
|
||||
PIVOT_TYPE_WORLD_ORIGIN = 2,
|
||||
};
|
||||
|
||||
enum HandleSelectionType {
|
||||
HANDLE_SELECTION_TYPE_FRONT = 0,
|
||||
HANDLE_SELECTION_TYPE_BACK = 1,
|
||||
HANDLE_SELECTION_TYPE_ALL = 2,
|
||||
};
|
||||
|
||||
void setup();
|
||||
void set_editor_plugin(EditorPlugin *editor_plugin);
|
||||
|
||||
void set_handle(int index, Camera *camera, Vector2 point);
|
||||
void redraw();
|
||||
void apply();
|
||||
|
||||
void select_all();
|
||||
|
||||
bool selection_click(int index, Camera *camera, const Ref<InputEvent> &event);
|
||||
bool is_point_visible(Vector3 point_orig, Vector3 camera_pos, Transform gt);
|
||||
|
||||
void selection_click_select_front_or_back(int index, Camera *camera, const Ref<InputEvent> &event);
|
||||
void selection_click_select_through(int index, Camera *camera, const Ref<InputEvent> &event);
|
||||
void selection_drag(int index, Camera *camera, const Ref<InputEvent> &event);
|
||||
void selection_drag_rect_select_front_back(int index, Camera *camera, const Ref<InputEvent> &event);
|
||||
void selection_drag_rect_select_through(int index, Camera *camera, const Ref<InputEvent> &event);
|
||||
bool forward_spatial_gui_input(int index, Camera *camera, const Ref<InputEvent> &event);
|
||||
void add_to_all_selected(Vector3 ofs);
|
||||
|
||||
void mul_all_selected_with_basis(Basis b);
|
||||
void mul_all_selected_with_transform(Transform t);
|
||||
void mul_all_selected_with_transform_acc(Transform t);
|
||||
|
||||
void set_translate();
|
||||
void set_scale();
|
||||
void set_rotate();
|
||||
void set_edit_mode(int em);
|
||||
|
||||
void set_axis_x(bool on);
|
||||
void set_axis_y(bool on);
|
||||
void set_axis_z(bool on);
|
||||
|
||||
void set_selection_mode_vertex();
|
||||
void set_selection_mode_edge();
|
||||
void set_selection_mode_face();
|
||||
|
||||
void _notification(int what);
|
||||
|
||||
void recalculate_handle_points();
|
||||
void on_mesh_data_resource_changed(Ref<MeshDataResource> mdr);
|
||||
void on_mdr_changed();
|
||||
void disable_change_event();
|
||||
void enable_change_event(bool update = true);
|
||||
void add_triangle();
|
||||
void add_quad();
|
||||
|
||||
bool is_verts_equal(Vector3 v0, Vector3 v1);
|
||||
Vector3 find_other_vertex_for_edge(int edge, Vector3 v0);
|
||||
Array split_edge_indices(int edge);
|
||||
bool pool_int_arr_contains(PoolIntArray arr, int val);
|
||||
PoolIntArray find_triangles_for_edge(int edge);
|
||||
int find_first_triangle_for_edge(int edge);
|
||||
void add_triangle_to_edge(int edge);
|
||||
void add_quad_to_edge(int edge);
|
||||
void add_triangle_at();
|
||||
void add_quad_at();
|
||||
|
||||
void extrude();
|
||||
void add_box();
|
||||
void split();
|
||||
void disconnect_action();
|
||||
int get_first_triangle_index_for_vertex(int indx);
|
||||
|
||||
void create_face();
|
||||
|
||||
Array split_face_indices(int face);
|
||||
int find_first_triangle_index_for_face(int face);
|
||||
|
||||
void delete_selected();
|
||||
void generate_normals();
|
||||
void generate_tangents();
|
||||
void remove_doubles();
|
||||
void merge_optimize();
|
||||
|
||||
void connect_to_first_selected();
|
||||
void connect_to_avg();
|
||||
void connect_to_last_selected();
|
||||
|
||||
PoolIntArray get_first_index_pair_for_edge(int edge);
|
||||
PoolIntArray get_all_index_pairs_for_edge(int edge);
|
||||
|
||||
void mark_seam();
|
||||
void unmark_seam();
|
||||
void set_seam(Ref<MeshDataResource> mdr, PoolIntArray arr);
|
||||
void apply_seam();
|
||||
|
||||
void clean_mesh();
|
||||
|
||||
void uv_unwrap();
|
||||
void flip_selected_faces();
|
||||
|
||||
void add_mesh_change_undo_redo(Array orig_arr, Array new_arr, String action_name);
|
||||
void add_mesh_seam_change_undo_redo(Array orig_arr, PoolIntArray orig_seams, Array new_arr, PoolIntArray new_seams, String action_name);
|
||||
|
||||
void apply_mesh_change(Ref<MeshDataResource> mdr, Array arr);
|
||||
void apply_vertex_array(Ref<MeshDataResource> mdr, PoolVector3Array verts);
|
||||
|
||||
Array copy_arrays(Array arr);
|
||||
PoolIntArray copy_pool_int_array(PoolIntArray pia);
|
||||
PoolVector3Array copy_mdr_verts_array();
|
||||
|
||||
void setup_op_drag_indices();
|
||||
Vector3 get_drag_op_pivot();
|
||||
|
||||
void select_handle_points(PoolVector3Array points);
|
||||
|
||||
void set_pivot_averaged();
|
||||
void set_pivot_mdi_origin();
|
||||
void set_pivot_world_origin();
|
||||
|
||||
void transfer_state_from(EditorSpatialGizmo *other);
|
||||
|
||||
void visual_indicator_outline_set(bool on);
|
||||
void visual_indicator_seam_set(bool on);
|
||||
void visual_indicator_handle_set(bool on);
|
||||
|
||||
void handle_selection_type_front();
|
||||
void handle_selection_type_back();
|
||||
void handle_selection_type_all();
|
||||
|
||||
MDIGizmo();
|
||||
~MDIGizmo();
|
||||
|
||||
float gizmo_size;
|
||||
|
||||
int edit_mode;
|
||||
int pivot_type;
|
||||
int axis_constraint;
|
||||
int selection_mode;
|
||||
int handle_selection_type;
|
||||
bool visual_indicator_outline;
|
||||
bool visual_indicator_seam;
|
||||
bool visual_indicator_handle;
|
||||
|
||||
Vector2 previous_point;
|
||||
Vector3 _last_known_camera_facing;
|
||||
|
||||
bool _rect_drag;
|
||||
Vector2 _rect_drag_start_point;
|
||||
float _rect_drag_min_ofset;
|
||||
|
||||
Ref<MeshDataResource> _mdr;
|
||||
|
||||
PoolVector3Array _vertices;
|
||||
PoolIntArray _indices;
|
||||
PoolVector3Array _handle_points;
|
||||
Array _handle_to_vertex_map;
|
||||
PoolIntArray _selected_points;
|
||||
|
||||
Ref<MeshOutlineGenerator> _mesh_outline_generator;
|
||||
|
||||
bool _handle_drag_op;
|
||||
PoolVector3Array _drag_op_orig_verices;
|
||||
PoolIntArray _drag_op_indices;
|
||||
Vector3 _drag_op_accumulator;
|
||||
Quat _drag_op_accumulator_quat;
|
||||
Vector3 _drag_op_pivot;
|
||||
|
||||
EditorPlugin *_editor_plugin;
|
||||
UndoRedo *_undo_redo;
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
};
|
||||
|
||||
#endif
|
63
modules/mesh_data_resource/editor/mdi_gizmo_plugin.cpp
Normal file
63
modules/mesh_data_resource/editor/mdi_gizmo_plugin.cpp
Normal file
@ -0,0 +1,63 @@
|
||||
/*
|
||||
Copyright (c) 2019-2022 Péter Magyar
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "mdi_gizmo_plugin.h"
|
||||
|
||||
String MDIGizmoPlugin::get_name() const {
|
||||
return "MDIGizmo";
|
||||
}
|
||||
int MDIGizmoPlugin::get_priority() const {
|
||||
return 100;
|
||||
}
|
||||
bool MDIGizmoPlugin::is_handle_highlighted(const EditorSpatialGizmo *p_gizmo, int p_idx) const {
|
||||
return EditorSpatialGizmoPlugin::is_handle_highlighted(p_gizmo, p_idx);
|
||||
}
|
||||
|
||||
Ref<EditorSpatialGizmo> MDIGizmoPlugin::create_gizmo(Spatial *p_spatial) {
|
||||
/*
|
||||
if spatial is MeshDataInstance:
|
||||
var gizmo = MDIGizmo.new()
|
||||
|
||||
gizmo.set_editor_plugin(plugin)
|
||||
gizmo.set_spatial_node(spatial)
|
||||
gizmo.setup()
|
||||
plugin.register_gizmo(gizmo)
|
||||
|
||||
return gizmo
|
||||
else:
|
||||
return null
|
||||
*/
|
||||
}
|
||||
|
||||
MDIGizmoPlugin::MDIGizmoPlugin() {
|
||||
plugin = nullptr;
|
||||
|
||||
create_material("main", Color(0.7, 0.7, 0.7));
|
||||
create_material("seam", Color(1, 0, 0), false, true);
|
||||
create_handle_material("handles");
|
||||
}
|
||||
|
||||
MDIGizmoPlugin::~MDIGizmoPlugin() {
|
||||
}
|
||||
|
||||
void MDIGizmoPlugin::_bind_methods() {
|
||||
}
|
49
modules/mesh_data_resource/editor/mdi_gizmo_plugin.h
Normal file
49
modules/mesh_data_resource/editor/mdi_gizmo_plugin.h
Normal file
@ -0,0 +1,49 @@
|
||||
#ifndef MDI_GIZMO_PLUGIN_H
|
||||
#define MDI_GIZMO_PLUGIN_H
|
||||
|
||||
/*
|
||||
Copyright (c) 2019-2022 Péter Magyar
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "editor/plugins/spatial_editor_plugin.h"
|
||||
|
||||
class MDIEdPlugin;
|
||||
|
||||
class MDIGizmoPlugin : public EditorSpatialGizmoPlugin {
|
||||
GDCLASS(MDIGizmoPlugin, EditorSpatialGizmoPlugin);
|
||||
|
||||
public:
|
||||
void _init();
|
||||
String get_name() const;
|
||||
int get_priority() const;
|
||||
bool is_handle_highlighted(const EditorSpatialGizmo *p_gizmo, int p_idx) const;
|
||||
|
||||
MDIGizmoPlugin();
|
||||
~MDIGizmoPlugin();
|
||||
|
||||
MDIEdPlugin *plugin;
|
||||
|
||||
protected:
|
||||
Ref<EditorSpatialGizmo> create_gizmo(Spatial *p_spatial);
|
||||
static void _bind_methods();
|
||||
};
|
||||
|
||||
#endif
|
@ -1,63 +1,102 @@
|
||||
tool
|
||||
extends Control
|
||||
/*
|
||||
Copyright (c) 2019-2022 Péter Magyar
|
||||
|
||||
var mesh_data_resource : MeshDataResource = null setget set_mesh_data_resource
|
||||
var background_texture : Texture = null
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
func set_mesh_data_resource(a : MeshDataResource):
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "mdi_ed_uv_editor.h"
|
||||
|
||||
void MDIEdUVEditor::set_mesh_data_resource(Ref<MeshDataResource> a) {
|
||||
/*
|
||||
if mesh_data_resource:
|
||||
mesh_data_resource.disconnect("changed", self, "on_mdr_changed")
|
||||
|
||||
|
||||
mesh_data_resource = a
|
||||
|
||||
|
||||
if mesh_data_resource:
|
||||
mesh_data_resource.connect("changed", self, "on_mdr_changed")
|
||||
|
||||
update()
|
||||
|
||||
func set_mesh_data_instance(a : MeshDataInstance):
|
||||
*/
|
||||
}
|
||||
void MDIEdUVEditor::set_mesh_data_instance(MeshDataInstance *a) {
|
||||
/*
|
||||
|
||||
if !a:
|
||||
background_texture = null
|
||||
|
||||
|
||||
background_texture = a.texture
|
||||
|
||||
func on_mdr_changed():
|
||||
update()
|
||||
*/
|
||||
}
|
||||
void MDIEdUVEditor::on_mdr_changed() {
|
||||
update();
|
||||
}
|
||||
void MDIEdUVEditor::_draw() {
|
||||
/*
|
||||
|
||||
func _draw():
|
||||
if background_texture:
|
||||
draw_texture_rect_region(background_texture, Rect2(Vector2(), get_size()), Rect2(Vector2(), background_texture.get_size()))
|
||||
|
||||
|
||||
if !mesh_data_resource:
|
||||
return
|
||||
|
||||
|
||||
if mesh_data_resource.array.size() != ArrayMesh.ARRAY_MAX:
|
||||
return
|
||||
|
||||
|
||||
var uvs : PoolVector2Array = mesh_data_resource.array[ArrayMesh.ARRAY_TEX_UV]
|
||||
var indices : PoolIntArray = mesh_data_resource.array[ArrayMesh.ARRAY_INDEX]
|
||||
|
||||
|
||||
if indices.size() % 3 == 0:
|
||||
for i in range(0, len(indices), 3):
|
||||
var c : Color = Color(1, 1, 1, 1)
|
||||
|
||||
|
||||
if uvs[indices[i]].is_equal_approx(Vector2()) || uvs[indices[i + 1]].is_equal_approx(Vector2()):
|
||||
c = Color(1, 0, 0, 1)
|
||||
else:
|
||||
c = Color(1, 1, 1, 1)
|
||||
|
||||
|
||||
draw_line(uvs[indices[i]] * get_size(), uvs[indices[i + 1]] * get_size(), c, 1, false)
|
||||
|
||||
if uvs[indices[i + 1]].is_equal_approx(Vector2()) || uvs[indices[i + 2]].is_equal_approx(Vector2()):
|
||||
c = Color(1, 0, 0, 1)
|
||||
else:
|
||||
c = Color(1, 1, 1, 1)
|
||||
|
||||
|
||||
draw_line(uvs[indices[i + 1]] * get_size(), uvs[indices[i + 2]] * get_size(), c, 1, false)
|
||||
|
||||
|
||||
if uvs[indices[i + 2]].is_equal_approx(Vector2()) || uvs[indices[i]].is_equal_approx(Vector2()):
|
||||
c = Color(1, 0, 0, 1)
|
||||
else:
|
||||
c = Color(1, 1, 1, 1)
|
||||
|
||||
draw_line(uvs[indices[i + 2]] * get_size(), uvs[indices[i]] * get_size(), c, 1, false)
|
||||
|
||||
|
||||
*/
|
||||
}
|
||||
|
||||
MDIEdUVEditor::MDIEdUVEditor() {
|
||||
}
|
||||
|
||||
MDIEdUVEditor::~MDIEdUVEditor() {
|
||||
}
|
||||
|
||||
void MDIEdUVEditor::_bind_methods() {
|
||||
}
|
@ -0,0 +1,53 @@
|
||||
#ifndef MDI_ED_UV_EDITOR_H
|
||||
#define MDI_ED_UV_EDITOR_H
|
||||
|
||||
/*
|
||||
Copyright (c) 2019-2022 Péter Magyar
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "scene/gui/control.h"
|
||||
|
||||
#include "core/reference.h"
|
||||
|
||||
class MeshDataResource;
|
||||
class MeshDataInstance;
|
||||
class Texture;
|
||||
|
||||
class MDIEdUVEditor : public Control {
|
||||
GDCLASS(MDIEdUVEditor, Control);
|
||||
|
||||
public:
|
||||
void set_mesh_data_resource(Ref<MeshDataResource> a);
|
||||
void set_mesh_data_instance(MeshDataInstance *a);
|
||||
void on_mdr_changed();
|
||||
void _draw();
|
||||
|
||||
MDIEdUVEditor();
|
||||
~MDIEdUVEditor();
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
||||
Ref<MeshDataResource> mesh_data_resource;
|
||||
Ref<Texture> background_texture;
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user