EditorNode3DGizmo
继承: Node3DGizmo < RefCounted < Object
用于编辑 Node3D 对象的小工具。
描述
小工具可用于为 Node3D 对象提供自定义可视化和编辑功能(控柄和子小工具)。可以被重写以创建自定义小工具,但对于简单的小工具而言,通常建议创建 EditorNode3DGizmoPlugin。
方法
void | _begin_handle_action(id: int, secondary: bool) virtual |
void | _commit_handle(id: int, secondary: bool, restore: Variant, cancel: bool) virtual |
void | _commit_subgizmos(ids: PackedInt32Array, restores: Array[Transform3D], cancel: bool) virtual |
_get_handle_name(id: int, secondary: bool) virtual const | |
_get_handle_value(id: int, secondary: bool) virtual const | |
_get_subgizmo_transform(id: int) virtual const | |
_is_handle_highlighted(id: int, secondary: bool) virtual const | |
void | _redraw() virtual |
void | _set_handle(id: int, secondary: bool, camera: Camera3D, point: Vector2) virtual |
void | _set_subgizmo_transform(id: int, transform: Transform3D) virtual |
_subgizmos_intersect_frustum(camera: Camera3D, frustum: Array[Plane]) virtual const | |
_subgizmos_intersect_ray(camera: Camera3D, point: Vector2) virtual const | |
void | add_collision_segments(segments: PackedVector3Array) |
void | add_collision_triangles(triangles: TriangleMesh) |
void | add_handles(handles: PackedVector3Array, material: Material, ids: PackedInt32Array, billboard: bool = false, secondary: bool = false) |
void | add_lines(lines: PackedVector3Array, material: Material, billboard: bool = false, modulate: Color = Color(1, 1, 1, 1)) |
void | add_mesh(mesh: Mesh, material: Material = null, transform: Transform3D = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0), skeleton: SkinReference = null) |
void | add_unscaled_billboard(material: Material, default_scale: float = 1, modulate: Color = Color(1, 1, 1, 1)) |
void | clear() |
get_node_3d() const | |
get_plugin() const | |
get_subgizmo_selection() const | |
is_subgizmo_selected(id: int) const | |
void | set_hidden(hidden: bool) |
void | set_node_3d(node: Node) |
方法说明
void _begin_handle_action(id: int, secondary: bool) virtual 🔗
该方法目前没有描述,请帮我们贡献一个吧!
void _commit_handle(id: int, secondary: bool, restore: Variant, cancel: bool) virtual 🔗
覆盖该方法,以提交一个正在编辑的控柄(控柄必须是之前通过 add_handles 添加的)。这通常意味着为该修改创建一个 UndoRedo 动作,将当前控柄值用作“做”,并将 restore
参数用作“撤销”。
如果 cancel
参数为 true
,则应直接设置 restore
值,而不需要任何 UndoRedo 动作。
当提交的控柄为次要控柄时,secondary
参数为 true
(有关更多信息,请参阅 add_handles)。
void _commit_subgizmos(ids: PackedInt32Array, restores: Array[Transform3D], cancel: bool) virtual 🔗
覆盖该方法,以提交一组正在编辑的子小工具(参见 _subgizmos_intersect_ray 和 _subgizmos_intersect_frustum)。这通常意味着为该更改创建一个 UndoRedo 动作,将当前变换用作“做”,并将 restores
变换用作“撤消”。
如果 cancel
参数为 true
,则restores
变换应被直接设置 ,而无需任何 UndoRedo 动作。
String _get_handle_name(id: int, secondary: bool) virtual const 🔗
覆盖该方法,以返回编辑的控柄的名称(控柄必须先前通过 add_handles 添加的)。可以命名控柄以供用户在编辑时引用。
当请求的控柄是次要控柄时,secondary
参数为 true
(有关更多信息,请参阅 add_handles)。
Variant _get_handle_value(id: int, secondary: bool) virtual const 🔗
覆盖该方法,以返回一个控柄的当前值。该值将在编辑开始时被请求,并用作 _commit_handle 中的 restore
参数。
当请求的控柄是次要控柄时,secondary
参数为 true
(有关更多信息,请参阅 add_handles)。
Transform3D _get_subgizmo_transform(id: int) virtual const 🔗
覆盖该方法,以返回子小工具的当前变换。该变换将在编辑开始时被请求,并用作 _commit_subgizmos 中的 restore
参数。
bool _is_handle_highlighted(id: int, secondary: bool) virtual const 🔗
覆盖该方法,只要给定的控柄应该在编辑器中被高亮显示时就返回 true
。
当请求的控柄是次要控柄时,secondary
参数为 true
(有关更多信息,请参阅 add_handles)。
void _redraw() virtual 🔗
覆盖该方法,每当请求小工具更新时将添加所有小工具元素。通常在该方法的开头调用 clear,然后根据节点的属性添加可视元素。
void _set_handle(id: int, secondary: bool, camera: Camera3D, point: Vector2) virtual 🔗
覆盖该方法,当用户拖动小工具控柄(之前使用 add_handles 添加的)时更新节点属性。提供的 point
是屏幕坐标中的鼠标位置, camera
可用于将其转换为射线投射。
当编辑的控柄是次要控柄时,secondary
参数为 true
(有关更多信息,请参阅 add_handles)。
void _set_subgizmo_transform(id: int, transform: Transform3D) virtual 🔗
覆盖该方法,以在子小工具编辑期间更新节点属性(参见 _subgizmos_intersect_ray 和 _subgizmos_intersect_frustum)。transform
是在 Node3D 的局部坐标系中给出的。
PackedInt32Array _subgizmos_intersect_frustum(camera: Camera3D, frustum: Array[Plane]) virtual const 🔗
覆盖该方法,以允许使用鼠标拖动框选来选择子小工具。给定一个 camera
和一个 frustum
,这个方法应该返回哪些子小工具包含在锥体中。frustum
参数由一个数组组成,其中包含构成选择锥体的所有 Plane。返回的值应该包含一个唯一的子小工具标识符列表,它可以有任何非负值,并将用于其他虚方法,如 _get_subgizmo_transform 或 _commit_subgizmos。
int _subgizmos_intersect_ray(camera: Camera3D, point: Vector2) virtual const 🔗
覆盖该方法,以允许使用鼠标点击选择子小工具。给定屏幕坐标中的 camera
和 point
时,该方法应返回应选择哪个子小工具。返回值应该是一个唯一的子小工具标识符,它可以有任何非负值,并将用于其他虚方法,如 _get_subgizmo_transform 或 _commit_subgizmos。
void add_collision_segments(segments: PackedVector3Array) 🔗
将指定的 segments
添加到小工具的碰撞形状以进行拾取。在 _redraw 期间调用该方法。
void add_collision_triangles(triangles: TriangleMesh) 🔗
将碰撞三角形添加到小工具以进行拾取。TriangleMesh 也可以从常规 Mesh 生成。在 _redraw 期间调用该方法。
void add_handles(handles: PackedVector3Array, material: Material, ids: PackedInt32Array, billboard: bool = false, secondary: bool = false) 🔗
添加可用于编辑该小工具的 Node3D 属性的一组控柄(点)。ids
参数可用于为每个控柄指定一个自定义的标识符,如果传递了一个空的数组,id 将按照 handles
参数顺序自动分配。
secondary
参数将添加的控柄标记为次要控柄,这意味着它们通常比普通控柄具有更低的选择优先级。当用户按住 Shift 键时,次要控柄将被切换为比普通控柄具有更高的优先级。这种优先级的变化可用于在同一点放置多个控柄,同时仍让用户控制他们的选择。
这些虚方法将在编辑这些控柄时被调用。在 _redraw 期间将调用该方法。
void add_lines(lines: PackedVector3Array, material: Material, billboard: bool = false, modulate: Color = Color(1, 1, 1, 1)) 🔗
为小工具添加使用给定材质的线段(一对对点的集合)。线段将用于展示和选择。请在 _redraw 期间调用此方法。
void add_mesh(mesh: Mesh, material: Material = null, transform: Transform3D = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0), skeleton: SkinReference = null) 🔗
为小工具添加网格,可以指定材质 material
、本地变换 transform
和骨架 skeleton
。请在 _redraw 期间调用此方法。
void add_unscaled_billboard(material: Material, default_scale: float = 1, modulate: Color = Color(1, 1, 1, 1)) 🔗
添加未缩放的公告板,将用于展示和选择。请在 _redraw 期间调用此方法。
void clear() 🔗
移除小工具中的一切,包括网格、碰撞和控柄。
返回与这个小工具关联的 Node3D 节点。
EditorNode3DGizmoPlugin get_plugin() const 🔗
返回拥有该小工具的 EditorNode3DGizmoPlugin。可以在使用 EditorNode3DGizmoPlugin.get_material 获取材质时使用。
PackedInt32Array get_subgizmo_selection() const 🔗
返回当前选定的子小工具的列表。可用于在 _redraw 期间高亮显示所选元素。
bool is_subgizmo_selected(id: int) const 🔗
如果给定的子小工具是当前所选定的,则返回 true
。可用于在 _redraw 期间高亮显示所选元素。
void set_hidden(hidden: bool) 🔗
设置该小工具的隐藏状态。如果为 true
,则该小工具将被隐藏。如果为 false
则会显示。