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 |
_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: Camera, point: Vector2) virtual |
void |
_set_subgizmo_transform(id: int, transform: Transform3D) virtual |
_subgizmos_intersect_frustum(camera: Camera, frustum: Array[Plane]) virtual const |
|
_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() |
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: 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())。transform在Item3D的本地坐标系中给出。
PackedInt32Array _subgizmos_intersect_frustum(camera: Camera, frustum: Array[Plane]) virtual const 🔗
重写此方法以允许使用鼠标拖动框选择子gizmos。给定camera和frustum,此方法应返回截头体中包含哪些子gizmos。frustum参数由一个数组组成,其中包含构成选择截头体的所有Plane。返回值应包含唯一subgizmo标识符的列表,这些标识符可以具有任何非负值,并将用于其他虚拟方法,如_get_subgizmo_transform()或_commit_subgizmos()。
int _subgizmos_intersect_ray(camera: Camera, point: Vector2) virtual const 🔗
重写此方法以允许使用鼠标单击选择subgizmo。给定屏幕坐标中的camera和point,此方法应返回应选择的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、局部transform和skeleton向gizmo添加网格。在_redraw()期间调用此方法。
void add_unscaled_billboard(material: Material, default_scale: float = 1, modulate: Color = Color(1, 1, 1, 1)) 🔗
添加用于可视化和选择的未缩放广告牌。在_redraw()期间调用此方法。
void clear() 🔗
删除gizmo中的所有内容,包括网格、碰撞和句柄。
返回与此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()期间突出显示选定的元素。
设置小发明的隐藏状态。如果true,小发明将被隐藏。如果false,它将被显示。