# class GeometryData

GeometryData represents a geometric structure consisting of point data (Vertices) and topological data (Triangles). GeometryData may represent a whole geometric object, but can also be used by streaming data filters, and in this way, only represents a part of the object. Different fields in the Vertices and Triangles fields data objects will contain point data and topological data. The standard naming convention used in the filters/renderers are as follows: (Case sensitive naming, other fields may also be present) 'Coords' Positional coordinates of a vertex, expressed with a 3-component real field (XYZ). 'TexCoords0' - 'TexCoords255' Texture coordinates of a vertex, expressed with a 2 components real field. By convention, the existing fields must be sequential, and must start with 'TexCoord0'. 'Normals' Normal vector for the vertex, expressed with a 3-component real field, a normalized (XYZ) vector. 'VertexIds' The id of the current vertex in the primitive. This field is present even if the vertex data is directly specified in the primitive data, to specify topology. The field is of type rid. 'MaterialIds' The material of the primitive. The field is of type rid. The 'Coords' and 'VertexIds' fields always exist in the object, but the other fields are optional. Also, there can exist user fields.

# Properties

Property Description
TriangleCount The number of triangles in the geometry. The number of corners is always set to (TriangleCount*3), so there is no specific method to set the number of corners.
VertexCount The number of vertices in the geometry.

# Methods

Method Description
AddBaseTypeCustomField Adds an empty custom field. To be able to add a field, it must have a name that does not conflict with the existing custom fields.
AddBaseTypeUserCornerField Adds an empty user-specified corner field.
AddBaseTypeUserTriangleField Adds an empty user-specified triangle field.
AddBaseTypeUserVertexField Adds a user-specified vertex field. To be able to add a field, it must have a name that does not conflict with the existing vertex fields.
AddBoneWeights Adds the BoneWeights and BoneIds fields in the vertices. The BoneWeights and BoneIds fields are added and removed in unison, and should always be the same tuple size. (Field names: "BoneWeights" & "BoneIds", Tuple size: varying , Stored as: Vertex attribute)
AddColors The vertex colors in the input channel from the corners the geometry. The valid id range of the channel parameter is 0-255, which equals fields 'Colors0' - 'Colors255' (Field name: 'Color0'-'Color255' which is stored as attribute per corner)
AddCustomField Adds a custom field. To be able to add a field, it must have a name that does not conflict with the existing custom fields.
AddGroupIds Adds the GroupIds field in the triangles. (Field name: "GroupIds", Tuple size: 1 , Stored as: triangle attribute)
AddMaterialIds Adds the MaterialIds field in the triangles. (Field name: "MaterialIds", Tuple size: 1 , Stored as: triangle attribute)
AddNamedColors Adds a named Color field in the corners. (Field name: "Colors0" - "Colors255", Tuple size: 4 , Stored as: Corner attribute)
AddNamedTexCoords Adds a named TexCoords field in the corners. (Field name: "TexCoords0" - "TexCoords255", Tuple size: 2 , Stored as: Corner attribute)
AddNormals Adds the Normals field in the corners. (Field name: "Normals" , Tuple size: 3 , Stored as: Corner attribute)
AddTangents Adds Tangents and Bitangents fields in the corners. The valid id range of the level parameter is 0-255. (Field names: "Tangents0" - "Tangents255" & "Bitangents0" - "Bitangents255", Tuple size: 3 , Stored as: Corner attribute)
AddTexCoords Adds a TexCoords field in the corners. The valid id range of the level parameter is 0-255, which equals fields 'TexCoords0' - 'TexCoords255' (Field name: "TexCoords0" - "TexCoords255", Tuple size: 2 , Stored as: Corner attribute)
AddTriangles AddTriangles increases the triangle count by the specified value.
AddUserCornerField Adds a user-specified corner field. To be able to add a field, it must have a name that does not conflict with the existing corner fields.
AddUserTriangleField Adds a user-specified triangle field. To be able to add a field, it must have a name that does not conflict with the existing triangle fields.
AddUserVertexField Adds a user-specified vertex field. To be able to add a field, it must have a name that does not conflict with the existing vertex fields.
AddVertexLocks Adds the VertexLocks field for the vertices. If the value for a vertex is true, then the vertex should be locked, and not be removed in the collapse-process. (Field name: "VertexLocks", Tuple size: 1 , Stored as: Vertex attribute)
AddVertexWeights Adds the VertexWeights field for the vertices. The weights are used to determine how important it is to keep the vertices when the geometry is reduced. 1 means the weight won't change the importance, values closer to 0 means it will be less important, values > 1 means the vertex is more important and less probable to be removed. (Field name: "VertexWeights", Tuple size: 1 , Stored as: Vertex attribute)
AddVertices Increases the vertex count by the specified value.
AppendGeometry Appends the geometry data to this geometry. This geometry will contain all triangles and vertices of both geometries. The VertexIds that are copied from the source are remapped to point at the vertices, which are appended to the end of the current vertices. Any field in the appended geometry that does not exist in this geometry will be added, with the tuples that are added set to 0. The method will fail if the source geometry has identically named fields, but with different tuple sizes or base types.
CalculateExtents Calculate the extents by checking the coordinates of all vertices in the geometry. Set only_triangles to true to test only vertices that are indexed by a triangle. This is a slower test, and the bounding box may not encompass all vertices' positions. the new extents are found by calling GetInf() and GetSup() afterwards.
ChangeWinding Change winding.
CleanupInvalidTriangles Finds triangles that contain the same vertex more than once, and invalidates them, ie. sets all the vertex id references to -1. These triangles can be culled using Compact().
CleanupNanValues Finds all Nan (1.#IND, 1.#INF etc) values in the real/float/double arrays in the GeometryData, and sets them to 0.0 just to make sure all numbers in the GeometryData are legit. Should not be needed if all the data loaded into the GeometryData object is ok to begin with.
Compact Removes invalid triangles and vertices not referenced by any triangle. If any vertices are removed, the triangles will be remapped to the new compacted vertex field.
ConvertHandedness Converts the handedness of the triangle winding, coords, normals and texture coordinates of the geometry from left-handed to right-handed coordinate systems and vice versa. Simplygon generally uses right-handed coordinates, so this conversion needs to be done before processing any left-handed geometry.
CopyCombine3Corners Combines three corners via barycentric coordinates. alpha_3 = 1-(alpha_1 + alpha_2) dest = src_1*alpha_1 + src_2*alpha_2 + src_3*alpha_3.
CopyCombine3Triangles Combines the fields of three triangles via barycentric coordinates. alpha_3 = 1-(alpha_1 + alpha_2) dest = src_1*alpha_1 + src_2*alpha_2 + src_3*alpha_3.
CopyCombine3Vertices Combines the fields of three vertices via barycentric coordinates. alpha_3 = 1-(alpha_1 + alpha_2) dest = src_1*alpha_1 + src_2*alpha_2 + src_3*alpha_3.
CopyCombineCorners Combines the fields of two corners by linear interpolation into the destination corner.
CopyCombineTriangles Combines the fields of two triangles by linear interpolation into the destination triangle.
CopyCombineVertices Combines the fields of two vertices by linear interpolation into the destination vertex.
CopyCorner Copies all fields in the specified corner in the source geometry to the destination corner in this geometry .
CopyTriangle Copies all fields in the specified triangle in the source geometry to the destination triangle in this geometry.
CopyVertex Copies all fields in the specified vertex in the source geometry to the destination vertex in this geometry.
CreateAABB Returns an axis aligned bounding box GeometryData of this geometry.
DeepCopy Copies the field setup and data from another object into this object. To only copy the setup, set copy_data to false.
DetectEdgeNeighbours Detect triangle edge neighbors. Neighbor ids are stored in the "SgEdgeNeighbours" Corner field.
ExpandVertices Expands the Vertices field data so that there exists one vertex for each of the three corners of each triangle in the geometry. The vertices will be organized identical to the Corners field. The triangles will be remapped to use the new vertices correctly. Expanding the vertex field is required to be able to extract a range of the geometry, and to be able to stream it. Note! This will lead to increased memory requirement, as vertex data is not shared among neigbouring triangles. It also removes the connectivity information of the triangles, and effectively detaches all triangles from one another. This call may replace fields in the Vertices field data. Requery any previously cached field pointer after the call. All user fields are copied as well.
ExtentsContainCoords Tests if the extents of the geometry fully contain all vertex coordinates. Note! ExtentsContainCoords() checks all vertices in the geometry, regardless to whether the vertex is referenced by any triangle. Use Compact() to remove any non-referenced vertex before calling ExtentsContainCoords.
ExtractRange Extracts a range of triangles with their vertices from the geometry. ExpandVertices() must first be called for the extraction to succeed. ExtractGeometry() can be used to stream geometries in chunks. If writing to a stream, the extracted geometry is guaranteed to have the same setup as the original. Any previous data in the destination will be deleted.
ExtractTriangles Extracts specified triangles from the geometry. The destination geometry will contain the triangles and vertices. The vertices in the destination will be expanded so that there exists one vertex for each of the three corners of each triangle in the geometry.
FindEdgeIdsFromVertexPairs Each tuple in the "vertex_pairs" array contains the start-vertex and end-vertex of a half-edge in the geometry. If a half-edge is found from a tuple in the "vertex_pairs" array, the edge-id of that half-edge will be stored in the edge_ids array. Do note: the half-edges are directed, so if you want all half-edges that contains 2 vertices, you need to add the tuple twice.
FindNamedColorsIndex Returns the level index of the colors field with the name returns -1 if not found.
FindNamedTexCoordsIndex Returns the level index of the texcoord field with the name returns -1 if not found.
GetBitangents Gets a Bitangents field in the corners. The valid id range of the level parameter is 0-255. (Field name: "Bitangents0" - "Bitangents255", Tuple size: 3 , Stored as: Corner attribute)
GetBoneIds The BoneIds fields in the vertices. (Field name: "BoneIds", Tuple size: varying , Stored as: Vertex attribute)
GetBoneWeights The BoneWeights field in the vertices. (Field name: "BoneWeights", Tuple size: varying , Stored as: Vertex attribute)
GetClass Get the name of the GeometryData class.
GetColors Gets a Color field in the corners. The valid id range of the level parameter is 0-255, which equals fields 'Colors0' - 'Colors255' (Field name: "Colors0" - "Colors255", Tuple size: 4 , Stored as: Corner attribute)
GetCoords The Coords field in the vertices. (Field name: "Coords", Tuple size: 3 , Stored as: Vertex attribute)
GetCorners Retrieves the IFieldData object that contains the corner fields.
GetCustomField Gets a custom field.
GetGroupIds The GroupIds field in the triangles. (Field name: "GroupIds", Tuple size: 1 , Stored as: triangle attribute)
GetInf The inferior (minimum) extent of the geometry.
GetMaterialIds The MaterialIds field in the triangles. (Field name: "MaterialIds", Tuple size: 1 , Stored as: triangle attribute)
GetNamedColors Gets a Color field, using the alternative name instead of the index.
GetNamedTexCoords Gets a TexCoords field, using the alternative name instead of the index.
GetNormals The Normals field in the corners. (Field name: "Normals" , Tuple size: 3 , Stored as: Corner attribute)
GetSup The superior (maximum) extent of the geometry.
GetTangents Gets a Tangents field in the corners. The valid id range of the level parameter is 0-255. (Field name: "Tangents0" - "Tangents255", Tuple size: 3 , Stored as: Corner attribute)
GetTexCoords Gets a TexCoords field in the corners. The valid id range of the level parameter is 0-255, which equals fields 'TexCoords0' - 'TexCoords255' (Field name: "TexCoords0" - "TexCoords255", Tuple size: 2 , Stored as: Corner attribute).
GetTriangles Retrieves the IFieldData object that contains the triangle fields.
GetUserCornerField Gets a user-specified corner field.
GetUserTriangleField Gets a user-specified triangle field.
GetUserVertexField Gets a user-specified vertex field.
GetVertexIds The VertexIds field in the corners.
GetVertexLocks The VertexLocks field for the vertices. If the value for a vertex is true, then the vertex should be locked, and not be removed in the collapse-process. (Field name: "VertexLocks", Tuple size: 1 , Stored as: Vertex attribute)
GetVertexWeights The VertexWeights field for the vertices. The weights are used to determine how important it is to keep the vertices when the geometry is reduced. 1 means the weight won't change the importance, values closer to 0 means it will be less important, values > 1 means the vertex is more important and less probable to be removed. (Field name: "VertexWeights", Tuple size: 1 , Stored as: Vertex attribute)
GetVertices Retrieves the IFieldData object that contains the vertex fields.
IsA Returns true if GeometryData is a or is a descendant of the class named as the type parameter.
IsNull Returns true if the GeometryData object is invalid.
NewCopy Creates another geometry data object with the same field setup. To also copy the data to the new object, set copy_data to true.
NewPackedCopy Creates a "packed" PackedGeometryData object, where all fields in the Corner field data object is moved to the vertex field data object. Please note that the vertex field data object will be enlarged to accommodate for data in a vertex shared by multiple triangles, where the corner data differs between the triangles. The method will fail if a Corner field is named the same as an existing Vertices field, please make sure to remove any such field before calling the method.
RemoveBoneWeights Removes the BoneWeights and BoneIds fields in the vertices. The BoneWeights and BoneIds fields are added and removed in unison, and should always be the same tuple size. (Field names: "BoneWeights" & "BoneIds", Tuple size: varying , Stored as: Vertex attribute)
RemoveColors Removes a Color field in the corners. The valid id range of the level parameter is 0-255, which equals fields 'Colors0' - 'Colors255' (Field name: "Colors0" - "Colors255", Tuple size: 4 , Stored as: Corner attribute)
RemoveCustomField Removes a custom field.
RemoveGroupIds Removes the GroupIds field in the triangles. (Field name: "GroupIds", Tuple size: 1 , Stored as: triangle attribute)
RemoveMaterialIds Removes the MaterialIds field in the triangles. (Field name: "MaterialIds", Tuple size: 1 , Stored as: triangle attribute)
RemoveNamedColors Removes a named Color field in the corners. (Field name: "Colors0" - "Colors255", Tuple size: 4 , Stored as: Corner attribute)
RemoveNamedTexCoords Removes a named TexCoords field in the corners. 'TexCoords0' - 'TexCoords255' (Field name: "TexCoords0" - "TexCoords255", Tuple size: 2 , Stored as: Corner attribute)
RemoveNormals Removes the Normals field in the corners. (Field name: "Normals" , Tuple size: 3 , Stored as: Corner attribute)
RemoveTangents Removes Tangents and Bitangents fields in the corners. The valid id range of the level parameter is 0-255. (Field names: "Tangents0" - "Tangents255" & "Bitangents0" - "Bitangents255", Tuple size: 3 , Stored as: Corner attribute)
RemoveTexCoords Removes a TexCoords field in the corners. The valid id range of the level parameter is 0-255, which equals fields 'TexCoords0' - 'TexCoords255' (Field name: "TexCoords0" - "TexCoords255", Tuple size: 2 , Stored as: Corner attribute)
RemoveUserCornerField Removes a user-specified corner field.
RemoveUserTriangleField Removes a user-specified triangle field.
RemoveUserVertexField Removes a user-specified vertex field.
RemoveVertexLocks Removes the VertexLocks field for the vertices. If the value for a vertex is true, then the vertex should be locked, and not be removed in the collapse-process. (Field name: "VertexLocks", Tuple size: 1 , Stored as: Vertex attribute)
RemoveVertexWeights Removes the VertexWeights field for the vertices. The weights are used to determine how important it is to keep the vertices when the geometry is reduced. 1 means the weight won't change the importance, values closer to 0 means it will be less important, values > 1 means the vertex is more important and less probable to be removed. (Field name: "VertexWeights", Tuple size: 1 , Stored as: Vertex attribute)
SetInf The inferior (minimum) extent of the geometry.
SetSup The superior (maximum) extent of the geometry.
Transform Transforms the geometry using the supplied matrix transformation. The fields that are modified are the Coords field of Vertices, as well as the Normals and all Tangent and Bi-tangent fields of the Corners.
Weld Welds all vertices in the geometry that are closer than the welding threshold. Non-referenced vertices will not be removed, only the vertex indices will be remapped. Call Compact() to clean up the geometry and free up memory.

# Static methods

Method Description
IsClassA Returns true if the class is a or is a descendant of the class named as the type parameter.
SafeCast SafeCast makes sure the input object is of a class that can be cast into spGeometryData, and if this is the case, returns the object cast into spGeometryData.

# Properties details

# TriangleCount

The number of triangles in the geometry. The number of corners is always set to (TriangleCount*3), so there is no specific method to set the number of corners.

    # VertexCount

    The number of vertices in the geometry.

      # Methods details

      # AddBaseTypeCustomField

      Adds an empty custom field. To be able to add a field, it must have a name that does not conflict with the existing custom fields.

        # AddBaseTypeUserCornerField

        Adds an empty user-specified corner field.

          # AddBaseTypeUserTriangleField

          Adds an empty user-specified triangle field.

            # AddBaseTypeUserVertexField

            Adds a user-specified vertex field. To be able to add a field, it must have a name that does not conflict with the existing vertex fields.

              # AddBoneWeights

              Adds the BoneWeights and BoneIds fields in the vertices. The BoneWeights and BoneIds fields are added and removed in unison, and should always be the same tuple size. (Field names: "BoneWeights" & "BoneIds", Tuple size: varying , Stored as: Vertex attribute)

                # AddColors

                The vertex colors in the input channel from the corners the geometry. The valid id range of the channel parameter is 0-255, which equals fields 'Colors0' - 'Colors255' (Field name: 'Color0'-'Color255' which is stored as attribute per corner)

                  # AddCustomField

                  Adds a custom field. To be able to add a field, it must have a name that does not conflict with the existing custom fields.

                    # AddGroupIds

                    Adds the GroupIds field in the triangles. (Field name: "GroupIds", Tuple size: 1 , Stored as: triangle attribute)

                      # AddMaterialIds

                      Adds the MaterialIds field in the triangles. (Field name: "MaterialIds", Tuple size: 1 , Stored as: triangle attribute)

                        # AddNamedColors

                        Adds a named Color field in the corners. (Field name: "Colors0" - "Colors255", Tuple size: 4 , Stored as: Corner attribute)

                          # AddNamedTexCoords

                          Adds a named TexCoords field in the corners. (Field name: "TexCoords0" - "TexCoords255", Tuple size: 2 , Stored as: Corner attribute)

                            # AddNormals

                            Adds the Normals field in the corners. (Field name: "Normals" , Tuple size: 3 , Stored as: Corner attribute)

                              # AddTangents

                              Adds Tangents and Bitangents fields in the corners. The valid id range of the level parameter is 0-255. (Field names: "Tangents0" - "Tangents255" & "Bitangents0" - "Bitangents255", Tuple size: 3 , Stored as: Corner attribute)

                                # AddTexCoords

                                Adds a TexCoords field in the corners. The valid id range of the level parameter is 0-255, which equals fields 'TexCoords0' - 'TexCoords255' (Field name: "TexCoords0" - "TexCoords255", Tuple size: 2 , Stored as: Corner attribute)

                                  # AddTriangles

                                  AddTriangles increases the triangle count by the specified value.

                                    # AddUserCornerField

                                    Adds a user-specified corner field. To be able to add a field, it must have a name that does not conflict with the existing corner fields.

                                      # AddUserTriangleField

                                      Adds a user-specified triangle field. To be able to add a field, it must have a name that does not conflict with the existing triangle fields.

                                        # AddUserVertexField

                                        Adds a user-specified vertex field. To be able to add a field, it must have a name that does not conflict with the existing vertex fields.

                                          # AddVertexLocks

                                          Adds the VertexLocks field for the vertices. If the value for a vertex is true, then the vertex should be locked, and not be removed in the collapse-process. (Field name: "VertexLocks", Tuple size: 1 , Stored as: Vertex attribute)

                                            # AddVertexWeights

                                            Adds the VertexWeights field for the vertices. The weights are used to determine how important it is to keep the vertices when the geometry is reduced. 1 means the weight won't change the importance, values closer to 0 means it will be less important, values > 1 means the vertex is more important and less probable to be removed. (Field name: "VertexWeights", Tuple size: 1 , Stored as: Vertex attribute)

                                              # AddVertices

                                              Increases the vertex count by the specified value.

                                                # AppendGeometry

                                                Appends the geometry data to this geometry. This geometry will contain all triangles and vertices of both geometries. The VertexIds that are copied from the source are remapped to point at the vertices, which are appended to the end of the current vertices. Any field in the appended geometry that does not exist in this geometry will be added, with the tuples that are added set to 0. The method will fail if the source geometry has identically named fields, but with different tuple sizes or base types.

                                                  # CalculateExtents

                                                  Calculate the extents by checking the coordinates of all vertices in the geometry. Set only_triangles to true to test only vertices that are indexed by a triangle. This is a slower test, and the bounding box may not encompass all vertices' positions. the new extents are found by calling GetInf() and GetSup() afterwards.

                                                    # ChangeWinding

                                                    Change winding.

                                                      # CleanupInvalidTriangles

                                                      Finds triangles that contain the same vertex more than once, and invalidates them, ie. sets all the vertex id references to -1. These triangles can be culled using Compact().

                                                        # CleanupNanValues

                                                        Finds all Nan (1.#IND, 1.#INF etc) values in the real/float/double arrays in the GeometryData, and sets them to 0.0 just to make sure all numbers in the GeometryData are legit. Should not be needed if all the data loaded into the GeometryData object is ok to begin with.

                                                          # Compact

                                                          Removes invalid triangles and vertices not referenced by any triangle. If any vertices are removed, the triangles will be remapped to the new compacted vertex field.

                                                            # ConvertHandedness

                                                            Converts the handedness of the triangle winding, coords, normals and texture coordinates of the geometry from left-handed to right-handed coordinate systems and vice versa. Simplygon generally uses right-handed coordinates, so this conversion needs to be done before processing any left-handed geometry.

                                                              # CopyCombine3Corners

                                                              Combines three corners via barycentric coordinates. alpha_3 = 1-(alpha_1 + alpha_2) dest = src_1*alpha_1 + src_2*alpha_2 + src_3*alpha_3.

                                                                # CopyCombine3Triangles

                                                                Combines the fields of three triangles via barycentric coordinates. alpha_3 = 1-(alpha_1 + alpha_2) dest = src_1*alpha_1 + src_2*alpha_2 + src_3*alpha_3.

                                                                  # CopyCombine3Vertices

                                                                  Combines the fields of three vertices via barycentric coordinates. alpha_3 = 1-(alpha_1 + alpha_2) dest = src_1*alpha_1 + src_2*alpha_2 + src_3*alpha_3.

                                                                    # CopyCombineCorners

                                                                    Combines the fields of two corners by linear interpolation into the destination corner.

                                                                      # CopyCombineTriangles

                                                                      Combines the fields of two triangles by linear interpolation into the destination triangle.

                                                                        # CopyCombineVertices

                                                                        Combines the fields of two vertices by linear interpolation into the destination vertex.

                                                                          # CopyCorner

                                                                          Copies all fields in the specified corner in the source geometry to the destination corner in this geometry .

                                                                            # CopyTriangle

                                                                            Copies all fields in the specified triangle in the source geometry to the destination triangle in this geometry.

                                                                              # CopyVertex

                                                                              Copies all fields in the specified vertex in the source geometry to the destination vertex in this geometry.

                                                                                # CreateAABB

                                                                                Returns an axis aligned bounding box GeometryData of this geometry.

                                                                                  # DeepCopy

                                                                                  Copies the field setup and data from another object into this object. To only copy the setup, set copy_data to false.

                                                                                    # DetectEdgeNeighbours

                                                                                    Detect triangle edge neighbors. Neighbor ids are stored in the "SgEdgeNeighbours" Corner field.

                                                                                      # ExpandVertices

                                                                                      Expands the Vertices field data so that there exists one vertex for each of the three corners of each triangle in the geometry. The vertices will be organized identical to the Corners field. The triangles will be remapped to use the new vertices correctly. Expanding the vertex field is required to be able to extract a range of the geometry, and to be able to stream it. Note! This will lead to increased memory requirement, as vertex data is not shared among neigbouring triangles. It also removes the connectivity information of the triangles, and effectively detaches all triangles from one another. This call may replace fields in the Vertices field data. Requery any previously cached field pointer after the call. All user fields are copied as well.

                                                                                        # ExtentsContainCoords

                                                                                        Tests if the extents of the geometry fully contain all vertex coordinates. Note! ExtentsContainCoords() checks all vertices in the geometry, regardless to whether the vertex is referenced by any triangle. Use Compact() to remove any non-referenced vertex before calling ExtentsContainCoords.

                                                                                          # ExtractRange

                                                                                          Extracts a range of triangles with their vertices from the geometry. ExpandVertices() must first be called for the extraction to succeed. ExtractGeometry() can be used to stream geometries in chunks. If writing to a stream, the extracted geometry is guaranteed to have the same setup as the original. Any previous data in the destination will be deleted.

                                                                                            # ExtractTriangles

                                                                                            Extracts specified triangles from the geometry. The destination geometry will contain the triangles and vertices. The vertices in the destination will be expanded so that there exists one vertex for each of the three corners of each triangle in the geometry.

                                                                                              # FindEdgeIdsFromVertexPairs

                                                                                              Each tuple in the "vertex_pairs" array contains the start-vertex and end-vertex of a half-edge in the geometry. If a half-edge is found from a tuple in the "vertex_pairs" array, the edge-id of that half-edge will be stored in the edge_ids array. Do note: the half-edges are directed, so if you want all half-edges that contains 2 vertices, you need to add the tuple twice.

                                                                                                # FindNamedColorsIndex

                                                                                                Returns the level index of the colors field with the name returns -1 if not found.

                                                                                                  # FindNamedTexCoordsIndex

                                                                                                  Returns the level index of the texcoord field with the name returns -1 if not found.

                                                                                                    # GetBitangents

                                                                                                    Gets a Bitangents field in the corners. The valid id range of the level parameter is 0-255. (Field name: "Bitangents0" - "Bitangents255", Tuple size: 3 , Stored as: Corner attribute)

                                                                                                      # GetBoneIds

                                                                                                      The BoneIds fields in the vertices. (Field name: "BoneIds", Tuple size: varying , Stored as: Vertex attribute)

                                                                                                        # GetBoneWeights

                                                                                                        The BoneWeights field in the vertices. (Field name: "BoneWeights", Tuple size: varying , Stored as: Vertex attribute)

                                                                                                          # GetClass

                                                                                                          Get the name of the GeometryData class.

                                                                                                            # GetColors

                                                                                                            Gets a Color field in the corners. The valid id range of the level parameter is 0-255, which equals fields 'Colors0' - 'Colors255' (Field name: "Colors0" - "Colors255", Tuple size: 4 , Stored as: Corner attribute)

                                                                                                              # GetCoords

                                                                                                              The Coords field in the vertices. (Field name: "Coords", Tuple size: 3 , Stored as: Vertex attribute)

                                                                                                                # GetCorners

                                                                                                                Retrieves the IFieldData object that contains the corner fields.

                                                                                                                  # GetCustomField

                                                                                                                  Gets a custom field.

                                                                                                                    # GetGroupIds

                                                                                                                    The GroupIds field in the triangles. (Field name: "GroupIds", Tuple size: 1 , Stored as: triangle attribute)

                                                                                                                      # GetInf

                                                                                                                      The inferior (minimum) extent of the geometry.

                                                                                                                        # GetMaterialIds

                                                                                                                        The MaterialIds field in the triangles. (Field name: "MaterialIds", Tuple size: 1 , Stored as: triangle attribute)

                                                                                                                          # GetNamedColors

                                                                                                                          Gets a Color field, using the alternative name instead of the index.

                                                                                                                            # GetNamedTexCoords

                                                                                                                            Gets a TexCoords field, using the alternative name instead of the index.

                                                                                                                              # GetNormals

                                                                                                                              The Normals field in the corners. (Field name: "Normals" , Tuple size: 3 , Stored as: Corner attribute)

                                                                                                                                # GetSup

                                                                                                                                The superior (maximum) extent of the geometry.

                                                                                                                                  # GetTangents

                                                                                                                                  Gets a Tangents field in the corners. The valid id range of the level parameter is 0-255. (Field name: "Tangents0" - "Tangents255", Tuple size: 3 , Stored as: Corner attribute)

                                                                                                                                    # GetTexCoords

                                                                                                                                    Gets a TexCoords field in the corners. The valid id range of the level parameter is 0-255, which equals fields 'TexCoords0' - 'TexCoords255' (Field name: "TexCoords0" - "TexCoords255", Tuple size: 2 , Stored as: Corner attribute).

                                                                                                                                      # GetTriangles

                                                                                                                                      Retrieves the IFieldData object that contains the triangle fields.

                                                                                                                                        # GetUserCornerField

                                                                                                                                        Gets a user-specified corner field.

                                                                                                                                          # GetUserTriangleField

                                                                                                                                          Gets a user-specified triangle field.

                                                                                                                                            # GetUserVertexField

                                                                                                                                            Gets a user-specified vertex field.

                                                                                                                                              # GetVertexIds

                                                                                                                                              The VertexIds field in the corners.

                                                                                                                                                # GetVertexLocks

                                                                                                                                                The VertexLocks field for the vertices. If the value for a vertex is true, then the vertex should be locked, and not be removed in the collapse-process. (Field name: "VertexLocks", Tuple size: 1 , Stored as: Vertex attribute)

                                                                                                                                                  # GetVertexWeights

                                                                                                                                                  The VertexWeights field for the vertices. The weights are used to determine how important it is to keep the vertices when the geometry is reduced. 1 means the weight won't change the importance, values closer to 0 means it will be less important, values > 1 means the vertex is more important and less probable to be removed. (Field name: "VertexWeights", Tuple size: 1 , Stored as: Vertex attribute)

                                                                                                                                                    # GetVertices

                                                                                                                                                    Retrieves the IFieldData object that contains the vertex fields.

                                                                                                                                                      # IsA

                                                                                                                                                      Returns true if GeometryData is a or is a descendant of the class named as the type parameter.

                                                                                                                                                        # IsNull

                                                                                                                                                        Returns true if the GeometryData object is invalid.

                                                                                                                                                          # NewCopy

                                                                                                                                                          Creates another geometry data object with the same field setup. To also copy the data to the new object, set copy_data to true.

                                                                                                                                                            # NewPackedCopy

                                                                                                                                                            Creates a "packed" PackedGeometryData object, where all fields in the Corner field data object is moved to the vertex field data object. Please note that the vertex field data object will be enlarged to accommodate for data in a vertex shared by multiple triangles, where the corner data differs between the triangles. The method will fail if a Corner field is named the same as an existing Vertices field, please make sure to remove any such field before calling the method.

                                                                                                                                                              # RemoveBoneWeights

                                                                                                                                                              Removes the BoneWeights and BoneIds fields in the vertices. The BoneWeights and BoneIds fields are added and removed in unison, and should always be the same tuple size. (Field names: "BoneWeights" & "BoneIds", Tuple size: varying , Stored as: Vertex attribute)

                                                                                                                                                                # RemoveColors

                                                                                                                                                                Removes a Color field in the corners. The valid id range of the level parameter is 0-255, which equals fields 'Colors0' - 'Colors255' (Field name: "Colors0" - "Colors255", Tuple size: 4 , Stored as: Corner attribute)

                                                                                                                                                                  # RemoveCustomField

                                                                                                                                                                  Removes a custom field.

                                                                                                                                                                    # RemoveGroupIds

                                                                                                                                                                    Removes the GroupIds field in the triangles. (Field name: "GroupIds", Tuple size: 1 , Stored as: triangle attribute)

                                                                                                                                                                      # RemoveMaterialIds

                                                                                                                                                                      Removes the MaterialIds field in the triangles. (Field name: "MaterialIds", Tuple size: 1 , Stored as: triangle attribute)

                                                                                                                                                                        # RemoveNamedColors

                                                                                                                                                                        Removes a named Color field in the corners. (Field name: "Colors0" - "Colors255", Tuple size: 4 , Stored as: Corner attribute)

                                                                                                                                                                          # RemoveNamedTexCoords

                                                                                                                                                                          Removes a named TexCoords field in the corners. 'TexCoords0' - 'TexCoords255' (Field name: "TexCoords0" - "TexCoords255", Tuple size: 2 , Stored as: Corner attribute)

                                                                                                                                                                            # RemoveNormals

                                                                                                                                                                            Removes the Normals field in the corners. (Field name: "Normals" , Tuple size: 3 , Stored as: Corner attribute)

                                                                                                                                                                              # RemoveTangents

                                                                                                                                                                              Removes Tangents and Bitangents fields in the corners. The valid id range of the level parameter is 0-255. (Field names: "Tangents0" - "Tangents255" & "Bitangents0" - "Bitangents255", Tuple size: 3 , Stored as: Corner attribute)

                                                                                                                                                                                # RemoveTexCoords

                                                                                                                                                                                Removes a TexCoords field in the corners. The valid id range of the level parameter is 0-255, which equals fields 'TexCoords0' - 'TexCoords255' (Field name: "TexCoords0" - "TexCoords255", Tuple size: 2 , Stored as: Corner attribute)

                                                                                                                                                                                  # RemoveUserCornerField

                                                                                                                                                                                  Removes a user-specified corner field.

                                                                                                                                                                                    # RemoveUserTriangleField

                                                                                                                                                                                    Removes a user-specified triangle field.

                                                                                                                                                                                      # RemoveUserVertexField

                                                                                                                                                                                      Removes a user-specified vertex field.

                                                                                                                                                                                        # RemoveVertexLocks

                                                                                                                                                                                        Removes the VertexLocks field for the vertices. If the value for a vertex is true, then the vertex should be locked, and not be removed in the collapse-process. (Field name: "VertexLocks", Tuple size: 1 , Stored as: Vertex attribute)

                                                                                                                                                                                          # RemoveVertexWeights

                                                                                                                                                                                          Removes the VertexWeights field for the vertices. The weights are used to determine how important it is to keep the vertices when the geometry is reduced. 1 means the weight won't change the importance, values closer to 0 means it will be less important, values > 1 means the vertex is more important and less probable to be removed. (Field name: "VertexWeights", Tuple size: 1 , Stored as: Vertex attribute)

                                                                                                                                                                                            # SetInf

                                                                                                                                                                                            The inferior (minimum) extent of the geometry.

                                                                                                                                                                                              # SetSup

                                                                                                                                                                                              The superior (maximum) extent of the geometry.

                                                                                                                                                                                                # Transform

                                                                                                                                                                                                Transforms the geometry using the supplied matrix transformation. The fields that are modified are the Coords field of Vertices, as well as the Normals and all Tangent and Bi-tangent fields of the Corners.

                                                                                                                                                                                                  # Weld

                                                                                                                                                                                                  Welds all vertices in the geometry that are closer than the welding threshold. Non-referenced vertices will not be removed, only the vertex indices will be remapped. Call Compact() to clean up the geometry and free up memory.

                                                                                                                                                                                                    # Static methods details

                                                                                                                                                                                                    # IsClassA

                                                                                                                                                                                                    Returns true if the class is a or is a descendant of the class named as the type parameter.

                                                                                                                                                                                                      # SafeCast

                                                                                                                                                                                                      SafeCast makes sure the input object is of a class that can be cast into spGeometryData, and if this is the case, returns the object cast into spGeometryData.