2017-09-12 22:42:36 +02:00
<?xml version="1.0" encoding="UTF-8" ?>
2020-02-01 02:03:48 +01:00
<class name= "MeshDataTool" inherits= "Reference" version= "4.0" >
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)
2018-10-11 06:28:04 +02:00
mesh.surface_remove(0)
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);
}
mesh.SurfaceRemove(0);
mdt.CommitToSurface(mesh);
var mi = new MeshInstance();
mi.Mesh = mesh;
AddChild(mi);
[/csharp]
[/codeblocks]
2020-04-19 23:21:42 +02:00
See also [ArrayMesh], [ImmediateGeometry3D] 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.
2017-09-12 22:42:36 +02:00
</description>
<tutorials >
</tutorials>
<methods >
<method name= "clear" >
<return type= "void" >
</return>
<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" >
<return type= "int" enum= "Error" >
</return>
<argument index= "0" name= "mesh" type= "ArrayMesh" >
</argument>
<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" >
<return type= "int" enum= "Error" >
</return>
<argument index= "0" name= "mesh" type= "ArrayMesh" >
</argument>
<argument index= "1" name= "surface" type= "int" >
</argument>
<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" >
<return type= "int" >
</return>
<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" >
2020-02-25 18:10:58 +01:00
<return type= "PackedInt32Array" >
2017-09-12 22:42:36 +02:00
</return>
<argument index= "0" name= "idx" type= "int" >
</argument>
<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" >
<return type= "Variant" >
</return>
<argument index= "0" name= "idx" type= "int" >
</argument>
<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" >
<return type= "int" >
</return>
<argument index= "0" name= "idx" type= "int" >
</argument>
<argument index= "1" name= "vertex" type= "int" >
</argument>
<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" >
<return type= "int" >
</return>
<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" >
<return type= "int" >
</return>
<argument index= "0" name= "idx" type= "int" >
</argument>
<argument index= "1" name= "edge" type= "int" >
</argument>
<description >
2018-10-11 06:28:04 +02:00
Returns specified edge associated with given face.
2018-11-04 22:15:11 +01:00
Edge argument must 2 or less because a face only has three edges.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "get_face_meta" qualifiers= "const" >
<return type= "Variant" >
</return>
<argument index= "0" name= "idx" type= "int" >
</argument>
<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" >
<return type= "Vector3" >
</return>
<argument index= "0" name= "idx" type= "int" >
</argument>
<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" >
<return type= "int" >
</return>
<argument index= "0" name= "idx" type= "int" >
</argument>
<argument index= "1" name= "vertex" type= "int" >
</argument>
<description >
2019-06-22 01:04:47 +02:00
Returns the specified vertex of the given face.
2018-11-04 22:15:11 +01:00
Vertex argument must be 2 or less because faces contain three vertices.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "get_format" qualifiers= "const" >
<return type= "int" >
</return>
<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" >
<return type= "Material" >
</return>
<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" >
<return type= "Vector3" >
</return>
<argument index= "0" name= "idx" type= "int" >
</argument>
<description >
2018-10-11 06:28:04 +02:00
Returns the vertex at given index.
2017-09-12 22:42:36 +02:00
</description>
</method>
<method name= "get_vertex_bones" qualifiers= "const" >
2020-02-25 18:10:58 +01:00
<return type= "PackedInt32Array" >
2017-09-12 22:42:36 +02:00
</return>
<argument index= "0" name= "idx" type= "int" >
</argument>
<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" >
<return type= "Color" >
</return>
<argument index= "0" name= "idx" type= "int" >
</argument>
<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" >
<return type= "int" >
</return>
<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" >
2020-02-25 18:10:58 +01:00
<return type= "PackedInt32Array" >
2017-09-12 22:42:36 +02:00
</return>
<argument index= "0" name= "idx" type= "int" >
</argument>
<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" >
2020-02-25 18:10:58 +01:00
<return type= "PackedInt32Array" >
2017-09-12 22:42:36 +02:00
</return>
<argument index= "0" name= "idx" type= "int" >
</argument>
<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" >
<return type= "Variant" >
</return>
<argument index= "0" name= "idx" type= "int" >
</argument>
<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" >
<return type= "Vector3" >
</return>
<argument index= "0" name= "idx" type= "int" >
</argument>
<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" >
<return type= "Plane" >
</return>
<argument index= "0" name= "idx" type= "int" >
</argument>
<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" >
<return type= "Vector2" >
</return>
<argument index= "0" name= "idx" type= "int" >
</argument>
<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" >
<return type= "Vector2" >
</return>
<argument index= "0" name= "idx" type= "int" >
</argument>
<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" >
2020-02-25 18:10:58 +01:00
<return type= "PackedFloat32Array" >
2017-09-12 22:42:36 +02:00
</return>
<argument index= "0" name= "idx" type= "int" >
</argument>
<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" >
<return type= "void" >
</return>
<argument index= "0" name= "idx" type= "int" >
</argument>
<argument index= "1" name= "meta" type= "Variant" >
</argument>
<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" >
<return type= "void" >
</return>
<argument index= "0" name= "idx" type= "int" >
</argument>
<argument index= "1" name= "meta" type= "Variant" >
</argument>
<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" >
<return type= "void" >
</return>
<argument index= "0" name= "material" type= "Material" >
</argument>
<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" >
<return type= "void" >
</return>
<argument index= "0" name= "idx" type= "int" >
</argument>
<argument index= "1" name= "vertex" type= "Vector3" >
</argument>
<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" >
<return type= "void" >
</return>
<argument index= "0" name= "idx" type= "int" >
</argument>
2020-02-25 18:10:58 +01:00
<argument index= "1" name= "bones" type= "PackedInt32Array" >
2017-09-12 22:42:36 +02:00
</argument>
<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" >
<return type= "void" >
</return>
<argument index= "0" name= "idx" type= "int" >
</argument>
<argument index= "1" name= "color" type= "Color" >
</argument>
<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" >
<return type= "void" >
</return>
<argument index= "0" name= "idx" type= "int" >
</argument>
<argument index= "1" name= "meta" type= "Variant" >
</argument>
<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" >
<return type= "void" >
</return>
<argument index= "0" name= "idx" type= "int" >
</argument>
<argument index= "1" name= "normal" type= "Vector3" >
</argument>
<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" >
<return type= "void" >
</return>
<argument index= "0" name= "idx" type= "int" >
</argument>
<argument index= "1" name= "tangent" type= "Plane" >
</argument>
<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" >
<return type= "void" >
</return>
<argument index= "0" name= "idx" type= "int" >
</argument>
<argument index= "1" name= "uv" type= "Vector2" >
</argument>
<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" >
<return type= "void" >
</return>
<argument index= "0" name= "idx" type= "int" >
</argument>
<argument index= "1" name= "uv2" type= "Vector2" >
</argument>
<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" >
<return type= "void" >
</return>
<argument index= "0" name= "idx" type= "int" >
</argument>
2020-02-25 18:10:58 +01:00
<argument index= "1" name= "weights" type= "PackedFloat32Array" >
2017-09-12 22:42:36 +02:00
</argument>
<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>
<constants >
</constants>
</class>