You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2026-01-06 19:41:11 +00:00
Proposal 1246: Make Path3D handles more visible.
Resolves godotengine/godot-proposals#1246. It is difficult to tell the difference between the handles for adjusting curves and the points themselves when looking at a Path gizmo. This re-uses the icons used for Path2D. Unlike Path2D, this does not use a different icon for smooth vs sharp points, as using a potentially different material for each point would prevent batching the points in add_handles (and adding them out-of-order messes up other logic based on handle indices). This includes a public API change to allow specifying a texture for a handle material. This allows spatial gizmo plugins to customize the way a handle is rendered, if desired, but does not break existing behavior (as providing no texture uses the default). The path handle icons were resized as well. 16x16 is the standard icon size. These icons were 10x10 rather than 16x16, and appeared rather small in the editor. To resize, I: - Opened the original in Inkscape - Resized the document to 16x16 - Opened the transform dialog - Scaled by 160% proportionally - Used Align/Distribute to center on the page - Saved the document - Cleaned with `svgcleaner --multipass`
This commit is contained in:
@@ -6718,12 +6718,12 @@ void EditorNode3DGizmoPlugin::create_icon_material(const String &p_name, const R
|
||||
materials[p_name] = icons;
|
||||
}
|
||||
|
||||
void EditorNode3DGizmoPlugin::create_handle_material(const String &p_name, bool p_billboard) {
|
||||
void EditorNode3DGizmoPlugin::create_handle_material(const String &p_name, bool p_billboard, const Ref<Texture2D> &p_icon) {
|
||||
Ref<StandardMaterial3D> handle_material = Ref<StandardMaterial3D>(memnew(StandardMaterial3D));
|
||||
|
||||
handle_material->set_shading_mode(StandardMaterial3D::SHADING_MODE_UNSHADED);
|
||||
handle_material->set_flag(StandardMaterial3D::FLAG_USE_POINT_SIZE, true);
|
||||
Ref<Texture2D> handle_t = Node3DEditor::get_singleton()->get_theme_icon("Editor3DHandle", "EditorIcons");
|
||||
Ref<Texture2D> handle_t = p_icon != nullptr ? p_icon : Node3DEditor::get_singleton()->get_theme_icon("Editor3DHandle", "EditorIcons");
|
||||
handle_material->set_point_size(handle_t->get_width());
|
||||
handle_material->set_texture(StandardMaterial3D::TEXTURE_ALBEDO, handle_t);
|
||||
handle_material->set_albedo(Color(1, 1, 1));
|
||||
@@ -6807,7 +6807,7 @@ void EditorNode3DGizmoPlugin::_bind_methods() {
|
||||
|
||||
ClassDB::bind_method(D_METHOD("create_material", "name", "color", "billboard", "on_top", "use_vertex_color"), &EditorNode3DGizmoPlugin::create_material, DEFVAL(false), DEFVAL(false), DEFVAL(false));
|
||||
ClassDB::bind_method(D_METHOD("create_icon_material", "name", "texture", "on_top", "color"), &EditorNode3DGizmoPlugin::create_icon_material, DEFVAL(false), DEFVAL(Color(1, 1, 1, 1)));
|
||||
ClassDB::bind_method(D_METHOD("create_handle_material", "name", "billboard"), &EditorNode3DGizmoPlugin::create_handle_material, DEFVAL(false));
|
||||
ClassDB::bind_method(D_METHOD("create_handle_material", "name", "billboard", "texture"), &EditorNode3DGizmoPlugin::create_handle_material, DEFVAL(false), DEFVAL(Variant()));
|
||||
ClassDB::bind_method(D_METHOD("add_material", "name", "material"), &EditorNode3DGizmoPlugin::add_material);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_material", "name", "gizmo"), &EditorNode3DGizmoPlugin::get_material); //, DEFVAL(Ref<EditorNode3DGizmo>()));
|
||||
|
||||
@@ -864,7 +864,7 @@ protected:
|
||||
public:
|
||||
void create_material(const String &p_name, const Color &p_color, bool p_billboard = false, bool p_on_top = false, bool p_use_vertex_color = false);
|
||||
void create_icon_material(const String &p_name, const Ref<Texture2D> &p_texture, bool p_on_top = false, const Color &p_albedo = Color(1, 1, 1, 1));
|
||||
void create_handle_material(const String &p_name, bool p_billboard = false);
|
||||
void create_handle_material(const String &p_name, bool p_billboard = false, const Ref<Texture2D> &p_texture = nullptr);
|
||||
void add_material(const String &p_name, Ref<StandardMaterial3D> p_material);
|
||||
|
||||
Ref<StandardMaterial3D> get_material(const String &p_name, const Ref<EditorNode3DGizmo> &p_gizmo = Ref<EditorNode3DGizmo>());
|
||||
|
||||
@@ -224,6 +224,7 @@ void Path3DGizmo::redraw() {
|
||||
Ref<StandardMaterial3D> path_material = gizmo_plugin->get_material("path_material", this);
|
||||
Ref<StandardMaterial3D> path_thin_material = gizmo_plugin->get_material("path_thin_material", this);
|
||||
Ref<StandardMaterial3D> handles_material = gizmo_plugin->get_material("handles");
|
||||
Ref<StandardMaterial3D> sec_handles_material = gizmo_plugin->get_material("sec_handles");
|
||||
|
||||
Ref<Curve3D> c = path->get_curve();
|
||||
if (c.is_null()) {
|
||||
@@ -281,7 +282,7 @@ void Path3DGizmo::redraw() {
|
||||
add_handles(handles, handles_material);
|
||||
}
|
||||
if (sec_handles.size()) {
|
||||
add_handles(sec_handles, handles_material, false, true);
|
||||
add_handles(sec_handles, sec_handles_material, false, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -641,5 +642,6 @@ Path3DGizmoPlugin::Path3DGizmoPlugin() {
|
||||
Color path_color = EDITOR_DEF("editors/3d_gizmos/gizmo_colors/path", Color(0.5, 0.5, 1.0, 0.8));
|
||||
create_material("path_material", path_color);
|
||||
create_material("path_thin_material", Color(0.5, 0.5, 0.5));
|
||||
create_handle_material("handles");
|
||||
create_handle_material("handles", false, Node3DEditor::get_singleton()->get_theme_icon("EditorPathSmoothHandle", "EditorIcons"));
|
||||
create_handle_material("sec_handles", false, Node3DEditor::get_singleton()->get_theme_icon("EditorCurveHandle", "EditorIcons"));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user