EditorNode3DGizmo

继承: Node3DGizmo < RefCounted < Object

用于编辑Item3D对象的Gizmo。

描述

用于为Item3D对象提供自定义可视化和编辑(句柄和子gizmos)的Gizmo。可以覆盖以创建自定义gizmos,但对于简单的gizmos,通常建议创建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

String

_get_handle_name(id: int, secondary: bool) virtual const

Variant

_get_handle_value(id: int, secondary: bool) virtual const

Transform3D

_get_subgizmo_transform(id: int) virtual const

bool

_is_handle_highlighted(id: int, secondary: bool) virtual const

void

_redraw() virtual

void

_set_handle(id: int, secondary: bool, camera: Camera, point: Vector2) virtual

void

_set_subgizmo_transform(id: int, transform: Transform3D) virtual

PackedInt32Array

_subgizmos_intersect_frustum(camera: Camera, frustum: Array[Plane]) virtual const

int

_subgizmos_intersect_ray(camera: Camera, 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()

Item3D

get_node_3d() const

EditorNode3DGizmoPlugin

get_plugin() const

PackedInt32Array

get_subgizmo_selection() const

bool

is_subgizmo_selected(id: int) const

void

set_hidden(hidden: bool)

void

set_node_3d(node: Item)


方法说明

void _begin_handle_action(id: int, secondary: bool) virtual 🔗


void _commit_handle(id: int, secondary: bool, restore: Variant, cancel: bool) virtual 🔗

重写此方法以提交正在编辑的句柄(句柄必须先前由add_handles()添加)。这通常意味着为更改创建UndoRedo操作,使用当前句柄值作为“do”,使用restore参数作为“undo”。

如果cancel参数为true,则应直接设置restore值,而无需任何UndoRedo操作。

当提交的句柄是辅助句柄时,secondary参数为true(有关详细信息,请参阅add_handles())。


void _commit_subgizmos(ids: PackedInt32Array, restores: Array[Transform3D], cancel: bool) virtual 🔗

重写此方法以提交正在编辑的一组subgizmos(参见_subgizmos_intersect_ray()_subgizmos_intersect_frustum())。这通常意味着为更改创建UndoRedo操作,将当前转换使用为“do”,将restores转换使用为“undo”。

如果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()中的恢复参数。

当请求的句柄是辅助句柄时,secondary参数为true(有关详细信息,请参阅add_handles())。


Transform3D _get_subgizmo_transform(id: int) virtual const 🔗

重写此方法以返回subgizmo的当前转换。此转换将在编辑开始时请求,并用作_commit_subgizmos()中的恢复参数。


bool _is_handle_highlighted(id: int, secondary: bool) virtual const 🔗

重写此方法以在编辑器中突出显示给定句柄时返回true

当请求的句柄是辅助句柄时,secondary参数为true(有关详细信息,请参阅add_handles())。


void _redraw() virtual 🔗

重写此方法以在请求gizmo更新时添加所有gizmo元素。通常在此方法的开头调用clear(),然后根据节点的属性添加可视元素。


void _set_handle(id: int, secondary: bool, camera: Camera, point: Vector2) virtual 🔗

覆盖此方法以在用户拖动gizmo句柄时更新节点属性(之前添加了add_handles())。提供的point是屏幕坐标中的鼠标位置,camera可用于将其转换为光线投射。

当编辑的句柄是辅助句柄时,secondary参数为true(有关详细信息,请参阅add_handles())。


void _set_subgizmo_transform(id: int, transform: Transform3D) virtual 🔗

覆盖此方法以在subgizmo编辑期间更新节点属性(参见_subgizmos_intersect_ray()_subgizmos_intersect_frustum())。transformItem3D的本地坐标系中给出。


PackedInt32Array _subgizmos_intersect_frustum(camera: Camera, frustum: Array[Plane]) virtual const 🔗

重写此方法以允许使用鼠标拖动框选择子gizmos。给定camerafrustum,此方法应返回截头体中包含哪些子gizmos。frustum参数由一个数组组成,其中包含构成选择截头体的所有Plane。返回值应包含唯一subgizmo标识符的列表,这些标识符可以具有任何非负值,并将用于其他虚拟方法,如_get_subgizmo_transform()_commit_subgizmos()


int _subgizmos_intersect_ray(camera: Camera, point: Vector2) virtual const 🔗

重写此方法以允许使用鼠标单击选择subgizmo。给定屏幕坐标中的camerapoint,此方法应返回应选择的subgizmo。返回值应是唯一的subgizmo标识符,它可以具有任何非负值,并将用于其他虚拟方法,如_get_subgizmo_transform()_commit_subgizmos()


void add_collision_segments(segments: PackedVector3Array) 🔗

将指定的segments添加到gizmo的碰撞形状以进行挑选。在_redraw()期间调用此方法。


void add_collision_triangles(triangles: TriangleMesh) 🔗

将碰撞三角形添加到gizmo以进行挑选。也可以从常规Mesh生成TriangleMesh。在_redraw()期间调用此方法。


void add_handles(handles: PackedVector3Array, material: Material, ids: PackedInt32Array, billboard: bool = false, secondary: bool = false) 🔗

添加可用于编辑gizmo的Item3D属性的句柄(点)列表。ids参数可用于为每个句柄指定自定义标识符,如果传递一个空数组,id将根据handles参数顺序自动分配。

secondary参数将添加的句柄标记为次要句柄,这意味着它们的选择优先级通常低于常规句柄。当用户按住shift键时,次要句柄将切换为具有比常规句柄更高的优先级。这种优先级的变化可用于将多个句柄放置在同一点,同时仍然让用户控制它们的选择。

编辑这些句柄时会调用一些虚拟方法。在_redraw()期间调用此方法。


void add_lines(lines: PackedVector3Array, material: Material, billboard: bool = false, modulate: Color = Color(1, 1, 1, 1)) 🔗

使用给定的材质向gizmo添加线条(作为2个点的集合)。线条用于可视化gizmo。在_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、局部transformskeleton向gizmo添加网格。在_redraw()期间调用此方法。


void add_unscaled_billboard(material: Material, default_scale: float = 1, modulate: Color = Color(1, 1, 1, 1)) 🔗

添加用于可视化和选择的未缩放广告牌。在_redraw()期间调用此方法。


void clear() 🔗

删除gizmo中的所有内容,包括网格、碰撞和句柄。


Item3D get_node_3d() const 🔗

返回与此gizmo关联的Item3D节点。


EditorNode3DGizmoPlugin get_plugin() const 🔗

返回拥有此gizmo的EditorNode3DGizmoPlugin。使用EditorNode3DGizmoPlugin.get_material()检索材质很有用。


PackedInt32Array get_subgizmo_selection() const 🔗

返回当前选定子gizmos的列表。可用于在_redraw()期间突出显示选定的元素。


bool is_subgizmo_selected(id: int) const 🔗

如果当前选择了给定的subgizmo,则返回true。可用于在_redraw()期间突出显示选定的元素。


void set_hidden(hidden: bool) 🔗

设置小发明的隐藏状态。如果true,小发明将被隐藏。如果false,它将被显示。


void set_node_3d(node: Item) 🔗

设置gizmo的引用Item3D节点。node必须继承自Item3D