2017-09-12 22:42:36 +02:00
<?xml version="1.0" encoding="UTF-8" ?>
2023-07-06 10:08:05 +02:00
<class name= "MeshDataTool" inherits= "RefCounted" xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation= "../class.xsd" >
2017-09-12 22:42:36 +02:00
<brief_description >
2018-10-11 06:28:04 +02:00
Helper tool to access and edit [Mesh] data.
2017-09-12 22:42:36 +02:00
</brief_description>
<description >
2019-06-22 01:04:47 +02:00
MeshDataTool provides access to individual vertices in a [Mesh]. It allows users to read and edit vertex data of meshes. It also creates an array of faces and edges.
To use MeshDataTool, load a mesh with [method create_from_surface]. When you are finished editing the data commit the data to a mesh with [method commit_to_surface].
Below is an example of how MeshDataTool may be used.
2020-10-31 20:39:24 +01:00
[codeblocks]
[gdscript]
var mesh = ArrayMesh.new()
2020-12-04 16:39:45 +01:00
mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, BoxMesh.new().get_mesh_arrays())
2018-10-11 06:28:04 +02:00
var mdt = MeshDataTool.new()
mdt.create_from_surface(mesh, 0)
for i in range(mdt.get_vertex_count()):
2018-12-14 09:37:19 +01:00
var vertex = mdt.get_vertex(i)
2021-05-20 12:07:26 +02:00
# In this example we extend the mesh by one unit, which results in separated faces as it is flat shaded.
2020-10-31 20:39:24 +01:00
vertex += mdt.get_vertex_normal(i)
# Save your change.
2018-12-14 09:37:19 +01:00
mdt.set_vertex(i, vertex)
2023-04-26 16:01:31 +02:00
mesh.clear_surfaces()
2018-10-11 06:28:04 +02:00
mdt.commit_to_surface(mesh)
2020-10-31 20:39:24 +01:00
var mi = MeshInstance.new()
mi.mesh = mesh
add_child(mi)
[/gdscript]
[csharp]
var mesh = new ArrayMesh();
2020-12-04 16:39:45 +01:00
mesh.AddSurfaceFromArrays(Mesh.PrimitiveType.Triangles, new BoxMesh().GetMeshArrays());
2020-10-31 20:39:24 +01:00
var mdt = new MeshDataTool();
mdt.CreateFromSurface(mesh, 0);
for (var i = 0; i < mdt.GetVertexCount(); i++)
{
Vector3 vertex = mdt.GetVertex(i);
2021-05-20 12:07:26 +02:00
// In this example we extend the mesh by one unit, which results in separated faces as it is flat shaded.
2020-10-31 20:39:24 +01:00
vertex += mdt.GetVertexNormal(i);
// Save your change.
mdt.SetVertex(i, vertex);
}
2023-04-26 16:01:31 +02:00
mesh.ClearSurfaces();
2020-10-31 20:39:24 +01:00
mdt.CommitToSurface(mesh);
var mi = new MeshInstance();
mi.Mesh = mesh;
AddChild(mi);
[/csharp]
[/codeblocks]
2021-06-30 03:55:11 +02:00
See also [ArrayMesh], [ImmediateMesh] and [SurfaceTool] for procedural geometry generation.
2020-04-19 23:21:42 +02:00
[b]Note:[/b] Godot uses clockwise [url=https://learnopengl.com/Advanced-OpenGL/Face-culling]winding order[/url] for front faces of triangle primitive modes.
2017-09-12 22:42:36 +02:00
</description>
<tutorials >
2023-08-15 12:14:01 +02:00
<link title= "Using the MeshDataTool" > $DOCS_URL/tutorials/3d/procedural_geometry/meshdatatool.html</link>
2017-09-12 22:42:36 +02:00
</tutorials>
<methods >
<method name= "clear" >
2021-07-30 15:28:05 +02:00
<return type= "void" />
2017-09-12 22:42:36 +02:00
<description >
2018-10-11 06:28:04 +02:00
Clears all data currently in MeshDataTool.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "commit_to_surface" >
2021-07-30 15:28:05 +02:00
<return type= "int" enum= "Error" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "mesh" type= "ArrayMesh" />
2023-08-29 21:04:32 +02:00
<param index= "1" name= "compression_flags" type= "int" default= "0" />
2017-09-12 22:42:36 +02:00
<description >
2018-10-11 06:28:04 +02:00
Adds a new surface to specified [Mesh] with edited data.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "create_from_surface" >
2021-07-30 15:28:05 +02:00
<return type= "int" enum= "Error" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "mesh" type= "ArrayMesh" />
<param index= "1" name= "surface" type= "int" />
2017-09-12 22:42:36 +02:00
<description >
2018-10-11 06:28:04 +02:00
Uses specified surface of given [Mesh] to populate data for MeshDataTool.
2019-06-27 12:34:26 +02:00
Requires [Mesh] with primitive type [constant Mesh.PRIMITIVE_TRIANGLES].
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "get_edge_count" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "int" />
2017-09-12 22:42:36 +02:00
<description >
2018-10-11 06:28:04 +02:00
Returns the number of edges in this [Mesh].
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "get_edge_faces" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "PackedInt32Array" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "idx" type= "int" />
2017-09-12 22:42:36 +02:00
<description >
2018-10-11 06:28:04 +02:00
Returns array of faces that touch given edge.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "get_edge_meta" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "Variant" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "idx" type= "int" />
2017-09-12 22:42:36 +02:00
<description >
2018-10-11 06:28:04 +02:00
Returns meta information assigned to given edge.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "get_edge_vertex" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "int" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "idx" type= "int" />
<param index= "1" name= "vertex" type= "int" />
2017-09-12 22:42:36 +02:00
<description >
2018-10-11 06:28:04 +02:00
Returns index of specified vertex connected to given edge.
Vertex argument can only be 0 or 1 because edges are comprised of two vertices.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "get_face_count" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "int" />
2017-09-12 22:42:36 +02:00
<description >
2018-10-11 06:28:04 +02:00
Returns the number of faces in this [Mesh].
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "get_face_edge" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "int" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "idx" type= "int" />
<param index= "1" name= "edge" type= "int" />
2017-09-12 22:42:36 +02:00
<description >
2018-10-11 06:28:04 +02:00
Returns specified edge associated with given face.
2021-12-23 18:58:02 +01:00
Edge argument must be either 0, 1, or 2 because a face only has three edges.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "get_face_meta" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "Variant" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "idx" type= "int" />
2017-09-12 22:42:36 +02:00
<description >
2019-06-22 01:04:47 +02:00
Returns the metadata associated with the given face.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "get_face_normal" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "Vector3" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "idx" type= "int" />
2017-09-12 22:42:36 +02:00
<description >
2019-06-22 01:04:47 +02:00
Calculates and returns the face normal of the given face.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "get_face_vertex" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "int" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "idx" type= "int" />
<param index= "1" name= "vertex" type= "int" />
2017-09-12 22:42:36 +02:00
<description >
2023-08-28 23:32:53 +02:00
Returns the specified vertex index of the given face.
2021-12-23 18:58:02 +01:00
Vertex argument must be either 0, 1, or 2 because faces contain three vertices.
2023-08-28 23:32:53 +02:00
[b]Example:[/b]
[codeblocks]
[gdscript]
var index = mesh_data_tool.get_face_vertex(0, 1) # Gets the index of the second vertex of the first face.
var position = mesh_data_tool.get_vertex(index)
var normal = mesh_data_tool.get_vertex_normal(index)
[/gdscript]
[csharp]
int index = meshDataTool.GetFaceVertex(0, 1); // Gets the index of the second vertex of the first face.
Vector3 position = meshDataTool.GetVertex(index);
Vector3 normal = meshDataTool.GetVertexNormal(index);
[/csharp]
[/codeblocks]
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "get_format" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "int" />
2017-09-12 22:42:36 +02:00
<description >
2020-12-04 15:54:48 +01:00
Returns the [Mesh]'s format. Format is an integer made up of [Mesh] format flags combined together. For example, a mesh containing both vertices and normals would return a format of [code]3[/code] because [constant Mesh.ARRAY_FORMAT_VERTEX] is [code]1[/code] and [constant Mesh.ARRAY_FORMAT_NORMAL] is [code]2[/code].
See [enum Mesh.ArrayFormat] for a list of format flags.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "get_material" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "Material" />
2017-09-12 22:42:36 +02:00
<description >
2019-06-22 01:04:47 +02:00
Returns the material assigned to the [Mesh].
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "get_vertex" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "Vector3" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "idx" type= "int" />
2017-09-12 22:42:36 +02:00
<description >
2023-09-01 02:13:34 +02:00
Returns the position of the given vertex.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "get_vertex_bones" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "PackedInt32Array" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "idx" type= "int" />
2017-09-12 22:42:36 +02:00
<description >
2018-10-11 06:28:04 +02:00
Returns the bones of the given vertex.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "get_vertex_color" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "Color" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "idx" type= "int" />
2017-09-12 22:42:36 +02:00
<description >
2018-10-11 06:28:04 +02:00
Returns the color of the given vertex.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "get_vertex_count" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "int" />
2017-09-12 22:42:36 +02:00
<description >
2018-10-11 06:28:04 +02:00
Returns the total number of vertices in [Mesh].
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "get_vertex_edges" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "PackedInt32Array" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "idx" type= "int" />
2017-09-12 22:42:36 +02:00
<description >
2019-06-22 01:04:47 +02:00
Returns an array of edges that share the given vertex.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "get_vertex_faces" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "PackedInt32Array" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "idx" type= "int" />
2017-09-12 22:42:36 +02:00
<description >
2019-06-22 01:04:47 +02:00
Returns an array of faces that share the given vertex.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "get_vertex_meta" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "Variant" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "idx" type= "int" />
2017-09-12 22:42:36 +02:00
<description >
2019-06-22 01:04:47 +02:00
Returns the metadata associated with the given vertex.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "get_vertex_normal" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "Vector3" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "idx" type= "int" />
2017-09-12 22:42:36 +02:00
<description >
2019-06-22 01:04:47 +02:00
Returns the normal of the given vertex.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "get_vertex_tangent" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "Plane" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "idx" type= "int" />
2017-09-12 22:42:36 +02:00
<description >
2019-06-22 01:04:47 +02:00
Returns the tangent of the given vertex.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "get_vertex_uv" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "Vector2" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "idx" type= "int" />
2017-09-12 22:42:36 +02:00
<description >
2019-06-22 01:04:47 +02:00
Returns the UV of the given vertex.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "get_vertex_uv2" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "Vector2" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "idx" type= "int" />
2017-09-12 22:42:36 +02:00
<description >
2019-06-22 01:04:47 +02:00
Returns the UV2 of the given vertex.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "get_vertex_weights" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "PackedFloat32Array" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "idx" type= "int" />
2017-09-12 22:42:36 +02:00
<description >
2019-06-22 01:04:47 +02:00
Returns bone weights of the given vertex.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "set_edge_meta" >
2021-07-30 15:28:05 +02:00
<return type= "void" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "idx" type= "int" />
<param index= "1" name= "meta" type= "Variant" />
2017-09-12 22:42:36 +02:00
<description >
2019-06-22 01:04:47 +02:00
Sets the metadata of the given edge.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "set_face_meta" >
2021-07-30 15:28:05 +02:00
<return type= "void" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "idx" type= "int" />
<param index= "1" name= "meta" type= "Variant" />
2017-09-12 22:42:36 +02:00
<description >
2019-06-22 01:04:47 +02:00
Sets the metadata of the given face.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "set_material" >
2021-07-30 15:28:05 +02:00
<return type= "void" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "material" type= "Material" />
2017-09-12 22:42:36 +02:00
<description >
2019-06-22 01:04:47 +02:00
Sets the material to be used by newly-constructed [Mesh].
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "set_vertex" >
2021-07-30 15:28:05 +02:00
<return type= "void" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "idx" type= "int" />
<param index= "1" name= "vertex" type= "Vector3" />
2017-09-12 22:42:36 +02:00
<description >
2019-06-22 01:04:47 +02:00
Sets the position of the given vertex.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "set_vertex_bones" >
2021-07-30 15:28:05 +02:00
<return type= "void" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "idx" type= "int" />
<param index= "1" name= "bones" type= "PackedInt32Array" />
2017-09-12 22:42:36 +02:00
<description >
2019-06-22 01:04:47 +02:00
Sets the bones of the given vertex.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "set_vertex_color" >
2021-07-30 15:28:05 +02:00
<return type= "void" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "idx" type= "int" />
<param index= "1" name= "color" type= "Color" />
2017-09-12 22:42:36 +02:00
<description >
2019-06-22 01:04:47 +02:00
Sets the color of the given vertex.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "set_vertex_meta" >
2021-07-30 15:28:05 +02:00
<return type= "void" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "idx" type= "int" />
<param index= "1" name= "meta" type= "Variant" />
2017-09-12 22:42:36 +02:00
<description >
2019-06-22 01:04:47 +02:00
Sets the metadata associated with the given vertex.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "set_vertex_normal" >
2021-07-30 15:28:05 +02:00
<return type= "void" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "idx" type= "int" />
<param index= "1" name= "normal" type= "Vector3" />
2017-09-12 22:42:36 +02:00
<description >
2019-06-22 01:04:47 +02:00
Sets the normal of the given vertex.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "set_vertex_tangent" >
2021-07-30 15:28:05 +02:00
<return type= "void" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "idx" type= "int" />
<param index= "1" name= "tangent" type= "Plane" />
2017-09-12 22:42:36 +02:00
<description >
2019-06-22 01:04:47 +02:00
Sets the tangent of the given vertex.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "set_vertex_uv" >
2021-07-30 15:28:05 +02:00
<return type= "void" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "idx" type= "int" />
<param index= "1" name= "uv" type= "Vector2" />
2017-09-12 22:42:36 +02:00
<description >
2019-06-22 01:04:47 +02:00
Sets the UV of the given vertex.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "set_vertex_uv2" >
2021-07-30 15:28:05 +02:00
<return type= "void" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "idx" type= "int" />
<param index= "1" name= "uv2" type= "Vector2" />
2017-09-12 22:42:36 +02:00
<description >
2019-06-22 01:04:47 +02:00
Sets the UV2 of the given vertex.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "set_vertex_weights" >
2021-07-30 15:28:05 +02:00
<return type= "void" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "idx" type= "int" />
<param index= "1" name= "weights" type= "PackedFloat32Array" />
2017-09-12 22:42:36 +02:00
<description >
2019-06-22 01:04:47 +02:00
Sets the bone weights of the given vertex.
2017-09-12 22:42:36 +02:00
</description>
</method>
</methods>
</class>