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.
# In this example we extend the mesh by one unit, which results in separated faces as it is flat shaded.
vertex += mdt.get_vertex_normal(i)
# Save your change.
mdt.set_vertex(i, vertex)
mesh.surface_remove(0)
mdt.commit_to_surface(mesh)
var mi = MeshInstance.new()
mi.mesh = mesh
add_child(mi)
[/codeblock]
See also [ArrayMesh], [ImmediateGeometry] and [SurfaceTool] for procedural geometry generation.
[b]Note:[/b] Godot uses clockwise [url=https://learnopengl.com/Advanced-OpenGL/Face-culling]winding order[/url] for front faces of triangle primitive modes.
</description>
<tutorials>
</tutorials>
<methods>
<methodname="clear">
<returntype="void"/>
<description>
Clears all data currently in MeshDataTool.
</description>
</method>
<methodname="commit_to_surface">
<returntype="int"enum="Error"/>
<argumentindex="0"name="mesh"type="ArrayMesh"/>
<description>
Adds a new surface to specified [Mesh] with edited data.
</description>
</method>
<methodname="create_from_surface">
<returntype="int"enum="Error"/>
<argumentindex="0"name="mesh"type="ArrayMesh"/>
<argumentindex="1"name="surface"type="int"/>
<description>
Uses specified surface of given [Mesh] to populate data for MeshDataTool.
Requires [Mesh] with primitive type [constant Mesh.PRIMITIVE_TRIANGLES].
</description>
</method>
<methodname="get_edge_count"qualifiers="const">
<returntype="int"/>
<description>
Returns the number of edges in this [Mesh].
</description>
</method>
<methodname="get_edge_faces"qualifiers="const">
<returntype="PoolIntArray"/>
<argumentindex="0"name="idx"type="int"/>
<description>
Returns array of faces that touch given edge.
</description>
</method>
<methodname="get_edge_meta"qualifiers="const">
<returntype="Variant"/>
<argumentindex="0"name="idx"type="int"/>
<description>
Returns meta information assigned to given edge.
</description>
</method>
<methodname="get_edge_vertex"qualifiers="const">
<returntype="int"/>
<argumentindex="0"name="idx"type="int"/>
<argumentindex="1"name="vertex"type="int"/>
<description>
Returns index of specified vertex connected to given edge.
Vertex argument can only be 0 or 1 because edges are comprised of two vertices.
</description>
</method>
<methodname="get_face_count"qualifiers="const">
<returntype="int"/>
<description>
Returns the number of faces in this [Mesh].
</description>
</method>
<methodname="get_face_edge"qualifiers="const">
<returntype="int"/>
<argumentindex="0"name="idx"type="int"/>
<argumentindex="1"name="edge"type="int"/>
<description>
Returns specified edge associated with given face.
Edge argument must be either 0, 1, or 2 because a face only has three edges.
</description>
</method>
<methodname="get_face_meta"qualifiers="const">
<returntype="Variant"/>
<argumentindex="0"name="idx"type="int"/>
<description>
Returns the metadata associated with the given face.
</description>
</method>
<methodname="get_face_normal"qualifiers="const">
<returntype="Vector3"/>
<argumentindex="0"name="idx"type="int"/>
<description>
Calculates and returns the face normal of the given face.
</description>
</method>
<methodname="get_face_vertex"qualifiers="const">
<returntype="int"/>
<argumentindex="0"name="idx"type="int"/>
<argumentindex="1"name="vertex"type="int"/>
<description>
Returns the specified vertex of the given face.
Vertex argument must be either 0, 1, or 2 because faces contain three vertices.
</description>
</method>
<methodname="get_format"qualifiers="const">
<returntype="int"/>
<description>
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 ArrayMesh.ARRAY_FORMAT_VERTEX] is [code]1[/code] and [constant ArrayMesh.ARRAY_FORMAT_NORMAL] is [code]2[/code].
See [enum ArrayMesh.ArrayFormat] for a list of format flags.
</description>
</method>
<methodname="get_material"qualifiers="const">
<returntype="Material"/>
<description>
Returns the material assigned to the [Mesh].
</description>
</method>
<methodname="get_vertex"qualifiers="const">
<returntype="Vector3"/>
<argumentindex="0"name="idx"type="int"/>
<description>
Returns the vertex at given index.
</description>
</method>
<methodname="get_vertex_bones"qualifiers="const">
<returntype="PoolIntArray"/>
<argumentindex="0"name="idx"type="int"/>
<description>
Returns the bones of the given vertex.
</description>
</method>
<methodname="get_vertex_color"qualifiers="const">
<returntype="Color"/>
<argumentindex="0"name="idx"type="int"/>
<description>
Returns the color of the given vertex.
</description>
</method>
<methodname="get_vertex_count"qualifiers="const">
<returntype="int"/>
<description>
Returns the total number of vertices in [Mesh].
</description>
</method>
<methodname="get_vertex_edges"qualifiers="const">
<returntype="PoolIntArray"/>
<argumentindex="0"name="idx"type="int"/>
<description>
Returns an array of edges that share the given vertex.
</description>
</method>
<methodname="get_vertex_faces"qualifiers="const">
<returntype="PoolIntArray"/>
<argumentindex="0"name="idx"type="int"/>
<description>
Returns an array of faces that share the given vertex.
</description>
</method>
<methodname="get_vertex_meta"qualifiers="const">
<returntype="Variant"/>
<argumentindex="0"name="idx"type="int"/>
<description>
Returns the metadata associated with the given vertex.