Class reference
MeshDataTool
Inherits RefCounted
Helper tool to access and edit Mesh data.
Description
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 create_from_surface(). When you are finished editing the data commit the data to a mesh with commit_to_surface(). Below is an example of how MeshDataTool may be used.
var mesh = ArrayMesh.new()
mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, BoxMesh.new().get_mesh_arrays())
var mdt = MeshDataTool.new()
mdt.create_from_surface(mesh, 0)
for i in range(mdt.get_vertex_count()):
var vertex = mdt.get_vertex(i)
# 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.clear_surfaces()
mdt.commit_to_surface(mesh)
var mi = MeshInstance.new()
mi.mesh = mesh
add_child(mi)
var mesh = new ArrayMesh();
mesh.AddSurfaceFromArrays(Mesh.PrimitiveType.Triangles, new BoxMesh().GetMeshArrays());
var mdt = new MeshDataTool();
mdt.CreateFromSurface(mesh, 0);
for (var i = 0; i < mdt.GetVertexCount(); i++)
{
Vector3 vertex = mdt.GetVertex(i);
// In this example we extend the mesh by one unit, which results in separated faces as it is flat shaded.
vertex += mdt.GetVertexNormal(i);
// Save your change.
mdt.SetVertex(i, vertex);
}
mesh.ClearSurfaces();
mdt.CommitToSurface(mesh);
var mi = new MeshInstance();
mi.Mesh = mesh;
AddChild(mi);
See also ArrayMesh, ImmediateMesh and SurfaceTool for procedural geometry generation. Note: Redot uses clockwise winding order for front faces of triangle primitive modes.
Methods
void clear()
Clears all data currently in MeshDataTool.
int commit_to_surface(ArrayMesh mesh, int compression_flags = 0)
int commit_to_surface(ArrayMesh mesh, int compression_flags = 0)Adds a new surface to specified Mesh with edited data.
int create_from_surface(ArrayMesh mesh, int surface)
int create_from_surface(ArrayMesh mesh, int surface)Uses specified surface of given Mesh to populate data for MeshDataTool. Requires Mesh with primitive type Mesh.PRIMITIVE_TRIANGLES.
int get_edge_count() const
int get_edge_count() constReturns the number of edges in this Mesh.
PackedInt32Array get_edge_faces(int idx) const
PackedInt32Array get_edge_faces(int idx) constReturns array of faces that touch given edge.
Variant get_edge_meta(int idx) const
Variant get_edge_meta(int idx) constReturns meta information assigned to given edge.
int get_edge_vertex(int idx, int vertex) const
int get_edge_vertex(int idx, int vertex) constReturns the index of the specified vertex connected to the edge at index idx. vertex can only be 0 or 1, as edges are composed of two vertices.
int get_face_count() const
int get_face_count() constReturns the number of faces in this Mesh.
int get_face_edge(int idx, int edge) const
int get_face_edge(int idx, int edge) constReturns the edge associated with the face at index idx. edge argument must be either 0, 1, or 2 because a face only has three edges.
Variant get_face_meta(int idx) const
Variant get_face_meta(int idx) constReturns the metadata associated with the given face.
Vector3 get_face_normal(int idx) const
Vector3 get_face_normal(int idx) constCalculates and returns the face normal of the given face.
int get_face_vertex(int idx, int vertex) const
int get_face_vertex(int idx, int vertex) constReturns the specified vertex index of the given face. vertex must be either 0, 1, or 2 because faces contain three vertices.
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)
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);
int get_format() const
int get_format() constReturns the Mesh's format as a combination of the Mesh.ArrayFormat flags. For example, a mesh containing both vertices and normals would return a format of 3 because Mesh.ARRAY_FORMAT_VERTEX is 1 and Mesh.ARRAY_FORMAT_NORMAL is 2.
Material get_material() const
Material get_material() constReturns the material assigned to the Mesh.
Vector3 get_vertex(int idx) const
Vector3 get_vertex(int idx) constReturns the position of the given vertex.
PackedInt32Array get_vertex_bones(int idx) const
PackedInt32Array get_vertex_bones(int idx) constReturns the bones of the given vertex.
Color get_vertex_color(int idx) const
Color get_vertex_color(int idx) constReturns the color of the given vertex.
int get_vertex_count() const
int get_vertex_count() constReturns the total number of vertices in Mesh.
PackedInt32Array get_vertex_edges(int idx) const
PackedInt32Array get_vertex_edges(int idx) constReturns an array of edges that share the given vertex.
PackedInt32Array get_vertex_faces(int idx) const
PackedInt32Array get_vertex_faces(int idx) constReturns an array of faces that share the given vertex.
Variant get_vertex_meta(int idx) const
Variant get_vertex_meta(int idx) constReturns the metadata associated with the given vertex.
Vector3 get_vertex_normal(int idx) const
Vector3 get_vertex_normal(int idx) constReturns the normal of the given vertex.
Plane get_vertex_tangent(int idx) const
Plane get_vertex_tangent(int idx) constReturns the tangent of the given vertex.
Vector2 get_vertex_uv(int idx) const
Vector2 get_vertex_uv(int idx) constReturns the UV of the given vertex.
Vector2 get_vertex_uv2(int idx) const
Vector2 get_vertex_uv2(int idx) constReturns the UV2 of the given vertex.
PackedFloat32Array get_vertex_weights(int idx) const
PackedFloat32Array get_vertex_weights(int idx) constReturns bone weights of the given vertex.
void set_edge_meta(int idx, Variant meta)
int idx, Variant meta)Sets the metadata of the given edge.
void set_face_meta(int idx, Variant meta)
int idx, Variant meta)Sets the metadata of the given face.
void set_material(Material material)
Material material)Sets the material to be used by newly-constructed Mesh.
void set_vertex(int idx, Vector3 vertex)
int idx, Vector3 vertex)Sets the position of the given vertex.
void set_vertex_bones(int idx, PackedInt32Array bones)
int idx, PackedInt32Array bones)Sets the bones of the given vertex.
void set_vertex_color(int idx, Color color)
int idx, Color color)Sets the color of the given vertex.
void set_vertex_meta(int idx, Variant meta)
int idx, Variant meta)Sets the metadata associated with the given vertex.
void set_vertex_normal(int idx, Vector3 normal)
int idx, Vector3 normal)Sets the normal of the given vertex.
void set_vertex_tangent(int idx, Plane tangent)
int idx, Plane tangent)Sets the tangent of the given vertex.
void set_vertex_uv(int idx, Vector2 uv)
int idx, Vector2 uv)Sets the UV of the given vertex.
void set_vertex_uv2(int idx, Vector2 uv2)
int idx, Vector2 uv2)Sets the UV2 of the given vertex.
void set_vertex_weights(int idx, PackedFloat32Array weights)
int idx, PackedFloat32Array weights)Sets the bone weights of the given vertex.