3DCoat Python API
The 3DCoat Python API documentation.
Loading...
Searching...
No Matches
coat.Mesh Class Reference

Public Member Functions

 __init__ (self)
 
 __init__ (self)
 
 __init__ (self, Mesh m)
 
 __init__ (self, any m)
 
Mesh __assign__ (self, Mesh m)
 
Mesh __assign__ (self, any m)
 
Mesh MakeCopy (self)
 
bool Read (self, str name)
 Load the mesh from the file.
 
bool Write (self, str name)
 Save the mesh to file.
 
bool valid (self)
 Check if mesh is valid.
 
 clear (self)
 clear the mesh
 
Mesh __iadd__ (self, Mesh m)
 
Mesh __iadd__ (self, any m)
 
 addTransformed (self, Mesh m, mat4 t)
 concatenate the transformed mesh with the current one
 
 boolean (self, Mesh m, BoolOpType op)
 boolean operation
 
 transform (self, mat4 transform)
 transform the mesh
 
 rotateToXYAxis (self, vec3 axisX, vec3 axisY)
 rotate the mesh so that X axis will be aligned with axisX, Y axis will be aligned with axisY
 
 rotateToYZAxis (self, vec3 axisY, vec3 axisZ)
 rotate the mesh so that Y axis will be aligned with axisY, Z axis will be aligned with axisZ
 
 rotateToZXAxis (self, vec3 axisZ, vec3 axisX)
 rotate the mesh so that Z axis will be aligned with axisZ, X axis will be aligned with axisX
 
int vertsCount (self)
 returns the amount of verts in the mesh
 
int vertsUvCount (self)
 returns the amount of UV - verts in the mesh
 
int vertsNormalCount (self)
 returns the amount of normal - verts in the mesh
 
int facesCount (self)
 returns the faces amount
 
vec3 getVertex (self, int idx)
 get the vertex coordinate
 
 setVertex (self, int idx, vec3 v)
 set the vertex coordinate
 
int createNewVertex (self, vec3 position)
 create the positional vertex
 
vec2 getVertexUV (self, int idx)
 get the UV coordinate of the vertex, pay attention position verts and UV verts are different, they have different indices
 
 setVertexUV (self, int idx, vec2 v)
 set the UV coordinate of the vertex, pay attention position verts and UV verts are different, they have different indices
 
int createNewUvVertex (self, vec2 uv)
 create new UV vertex to be used for faces
 
vec3 getVertexNormal (self, int idx)
 get the normal of the vertex, pay attention position verts and normal verts are different, they have different indices
 
 setVertexNormal (self, int idx, vec3 v)
 set the normal of the vertex, pay attention position verts and normal verts are different, they have different indices
 
 calcNormals (self)
 re-calculate normals over the mesh
 
 calcNormalsIgnoreSharpEdges (self)
 re-calculate normals over the mesh, ignore the sharp edges
 
int getFaceVertsCount (self, int face)
 get the amount of vertices over the face
 
int getFaceUvVertsCount (self, int face)
 get the amount of UV vertices over the face
 
int getFaceVertex (self, int faceIndex, int faceVertexIndex)
 get the positional vertex index over the face
 
list getFaceVerts (self, int face)
 get the list of UV vertex indices over the face, pay attention UV vertices are not same as position vertices
 
 setFaceVerts (self, int face, list vertices)
 set the list of positional vertex indices over the face
 
int getFaceUvVertex (self, int faceIndex, int faceVertexIndex)
 get the UV vertex index over the face
 
 setFaceUvVertex (self, int faceIndex, int faceVertexIndex, int uvVertexIndex)
 set the UV vertex index over the face
 
int getFaceNormalVertex (self, int faceIndex, int faceVertexIndex)
 get the normal vertex index over the face
 
 setFaceNormalVertex (self, int faceIndex, int faceVertexIndex, int normalVertexIndex)
 set the normal vertex index over the face
 
list getFaceUvVerts (self, int face)
 get the list of UV vertices indices over the face
 
int getFaceObject (self, int faceIndex)
 get the object index over the face, see the getObjectsCount(), getObjectName()
 
 setFaceObject (self, int faceIndex, int objectIndex)
 set the object index for the face, see the getObjectsCount(), getObjectName()
 
int getFaceMaterial (self, int faceIndex)
 get the material index over the face, see the getMaterialsCount(), getMaterialName()
 
 setFaceMaterial (self, int faceIndex, int materialIndex)
 set the material index over the face, see the getMaterialsCount(), getMaterialName()
 
int getObjectsCount (self)
 returns the objects count in the mesh
 
str getObjectName (self, int idx)
 get the name of the object
 
 setObjectName (self, int idx, str name)
 set object name
 
int addObject (self, str name)
 add new object to the mesh
 
 removeObject (self, int idx)
 remove object from the mesh
 
 unifyAllObjects (self, str name="")
 unify all objects in the mesh, i.e.
 
int getMaterialsCount (self)
 get the materials count in the mesh
 
int addMaterial (self, str name)
 add new material to the mesh
 
 removeMaterial (self, int idx)
 remove the material (and corresponding faces) from the mesh
 
str getMaterialName (self, int idx)
 get the name of the material
 
 setMaterialName (self, int idx, str name)
 set material name
 
str getMaterialTexture (self, int idx, int texture_layer)
 get the texture name of the material
 
 setMaterialTexture (self, int idx, int texture_layer, str texture_path)
 set the texture layer filename of the material
 
 fromVolume (self, Volume v, bool with_subtree=False, bool all_selected=False)
 extract the mesh from the volume
 
 fromReducedVolume (self, Volume v, float reduction_percent, bool with_subtree=False, bool all_selected=False)
 extract the mesh from the volume and reduce it by the given percent
 
 fromVolumeWithMaxPolycount (self, Volume v, int max_polycount, bool with_subtree=False, bool all_selected=False)
 extract the mesh from the volume and reduce to the given polycount
 
 toVolume (self, Volume v, mat4 transform=mat4.Identity, BoolOpType op=BoolOpType.BOOL_MERGE)
 merge this mesh to the volume object
 
 insertInVolume (self, Volume v, mat4 transform=mat4.Identity)
 insert without boolean operation, if the volume is not in surface mode (volumetric) the boolean ADD will be performed anyway
 
 addToVolume (self, Volume v, mat4 transform=mat4.Identity)
 boolean add to volume
 
 subtractFromVolume (self, Volume v, mat4 transform=mat4.Identity)
 boolean subtraction of the mesh from the volume
 
 intersectWithVolume (self, Volume v, mat4 transform=mat4.Identity)
 boolean intersection of the mesh with the volume
 
 fromRetopo (self)
 take the whole mesh from the retopo room
 
 fromPaintRoom (self)
 get the mesh from the paint room
 
 reduceToPolycount (self, int destination_triangles_count)
 reduce the mesh to the given polycount, mesh will be triangulated
 
 triangulate (self)
 triangulate the mesh
 
 booleanOp (self, Mesh With, BoolOpType op)
 Perform the boolean operation with the given mesh.
 
list getMeshVertices (self)
 get the list of all positional vertices of the mesh
 
list getMeshNormals (self)
 get the list of all normal vertices of the mesh
 
list getMeshUVs (self)
 get the list of all UV vertices of the mesh
 
 setMeshVertices (self, list positions)
 set the list of all positional vertices for the mesh
 
 setMeshNormals (self, list normals)
 set the list of all normal vertices for the mesh
 
 setMeshUVs (self, list uvs)
 set the list of all UV vertices for the mesh
 
 setMeshFaces (self, list faces)
 set the complete list of faces for the mesh
 
 addMeshVertices (self, list positions)
 add the list of all positional vertices for the mesh
 
 addMeshNormals (self, list normals)
 add the list of all normal vertices for the mesh
 
 addMeshUVs (self, list uvs)
 add the list of all UV vertices for the mesh
 
 addMeshFaces (self, list faces)
 add the list of faces for the mesh, pay attention, all vertex indices are global over the whole mesh!
 
 clearVerts (self)
 clear all positional vertices of the mesh
 
 clearUvVerts (self)
 clear all uv vertices of the mesh
 
 clearNormals (self)
 clear all normal vertices of the mesh
 
 clearFaces (self)
 clear all faces of the mesh
 
 removeFaces (self, list faces)
 remove the set of vertices from the mesh
 
 clearObject (self)
 clear all objects
 
 clearMaterials (self)
 clear all materials
 
 ensureMaterialsAndObjectsExist (self)
 ensure that at least one material and one object exist in the mesh
 
int addObject (self, str name)
 add the named object
 
int addMaterial (self, str name)
 add the named material
 
 removeUnusedObjectsAndMaterials (self)
 remove all unused objects and materials
 
 removeUnusedVerts (self)
 remove all unused vertices
 
 removeUnusedFaces (self)
 remove all faces that contain zero vertices
 
 cutByPlane (self, vec3 start, vec3 NormalDirection)
 Cut off the mesh by the plane, the result is stored in the current mesh, the part of the mesh that is on the side of the negative normal direction is removed.
 
 cutByDistortedPlane (self, vec3 start, vec3 NormalDirection, float noise_degree, float noise_scale, int seed=0)
 Cut off the mesh by the distorted plane (using the Perlin noise), the result is stored in the current mesh, the part of the mesh that is on the side of the negative normal direction is removed.
 
 distortByPerlinNoise (self, float noise_degree, float noise_scale, bool anisotropic=False, int seed=0)
 distort the mesh by the Perlin noise
 
list splitDisconnectedParts (self)
 split the mesh into disconnected parts
 
 symmetry (self, vec3 start, vec3 NormalDirection, bool resultInQuads)
 apply symmetry to the mesh
 
list autodetectSymmetryPlanes (self)
 Detect the symmetry planes of the mesh.
 
 weld (self, float minimal_relative_distance=0.0001)
 weld the mesh, remove all vertices that are closer than minimal_relative_distance*mesh_bound_box_diagonal to each other
 
boundbox getBounds (self)
 get the mesh bound box
 
float getVolume (self)
 get the volume of the mesh
 
float getOpenSurfaceVolume (self, vec3 start, vec3 dir)
 calculate the volume even if the mesh is not closed, in this case we define plane that limits the integration
 
float getSquare (self)
 get square of the mesh
 
float getFaceSquare (self, int face)
 get the squareof the face
 
float getFaceUVSquare (self, int face)
 get the face square in UV space
 
vec3 getFaceNormal (self, int face)
 get the face normal
 
 relax (self, float degree, bool tangent, float crease_angle=180)
 relax the mesh, keep the vertices count
 
 createVDM (self, int side, str path_to_exr, vec3 center=vec3.Zero, float radius=1, vec3 up=vec3.AxisZ, vec3 x=vec3.AxisX, vec3 y=vec3.AxisY)
 Create the vector displacement map from the mesh and save it as EXR file.
 
 shell (self, float thickness_out, float thickness_in, int divisions=1)
 add some thickness to the mesh (intrude a bit)
 
list extrudeOpenEdges (self, float distance, vec3 direction=vec3.Zero)
 extrude open edges of the mesh
 
list expandOpenEdges (self, float distance)
 extrude open edges of the mesh
 
list getOpenEdges (self)
 get the list of open edges
 
float getLengthAlongDirection (self, vec3 dir)
 get the mesh size along some axis
 
vec3 getCenterMass (self)
 calculate the center mass of the mesh
 

Static Public Member Functions

Mesh box (vec3 center=vec3.Zero, vec3 size=vec3.One, vec3 xAxis=vec3.Zero, vec3 yAxis=vec3.Zero, vec3 zAxis=vec3.Zero, float detail_size=1, float fillet=0.0, int nx=0, int ny=0, int nz=0)
 create the box mesh
 
Mesh sphere (vec3 center=vec3.Zero, float radius=1.0, float detail_size=1)
 create the sphere mesh
 
Mesh cylinder (vec3 center=vec3.Zero, float radius=1, float height=2, float detail_size=1, int slices=0, int caps=0, int rings=0, float fillet=0)
 create the cylinder mesh
 
Mesh cone (vec3 center=vec3.Zero, float radius=1, float height=2, float detail_size=1, vec3 topAxis=vec3.AxisY)
 create the cone mesh
 
Mesh plane (vec3 center=vec3.Zero, float sizeX=2, float sizeY=2, int divisionsX=2, int divisionsY=2, vec3 xAxis=vec3.AxisX, vec3 yAxis=vec3.AxisY)
 create the single-side plane mesh, the faces normals are put toward the vec3.Cross(xAxis, yAxis)
 
Mesh hexagonal_plane (vec3 center=vec3.Zero, float sizeX=2, float sizeY=2, int divisionsX=2, int divisionsY=2, vec3 xAxis=vec3.AxisX, vec3 yAxis=vec3.AxisY)
 create the single-side triangular plane mesh that consists mostly of quasi equally-sided triangles
 
Mesh text (str string, str font="tahoma", float height=10.0, vec3 center=vec3.Zero, vec3 text_direction=vec3.AxisX, vec3 text_normal=vec3.AxisY, float thickness=1, int align=1)
 Create the text mesh.
 

Constructor & Destructor Documentation

◆ __init__() [1/4]

coat.Mesh.__init__ ( self)

◆ __init__() [2/4]

coat.Mesh.__init__ ( self)

◆ __init__() [3/4]

coat.Mesh.__init__ ( self,
Mesh m )

◆ __init__() [4/4]

coat.Mesh.__init__ ( self,
any m )

Member Function Documentation

◆ __assign__() [1/2]

Mesh coat.Mesh.__assign__ ( self,
any m )

◆ __assign__() [2/2]

Mesh coat.Mesh.__assign__ ( self,
Mesh m )

◆ __iadd__() [1/2]

Mesh coat.Mesh.__iadd__ ( self,
any m )

◆ __iadd__() [2/2]

Mesh coat.Mesh.__iadd__ ( self,
Mesh m )

◆ addMaterial() [1/2]

int coat.Mesh.addMaterial ( self,
str name )

add new material to the mesh

Parameters
namethe material name
Returns
the material index

◆ addMaterial() [2/2]

int coat.Mesh.addMaterial ( self,
str name )

add the named material

Parameters
namethe name for the material
Returns
the index of new material in the materials list

◆ addMeshFaces()

coat.Mesh.addMeshFaces ( self,
list faces )

add the list of faces for the mesh, pay attention, all vertex indices are global over the whole mesh!

Parameters
facesthe format of faces is:
amount_ot_vets_in_face1, vertex1_face1, vertex2_face1...vertexN-1_face1,
amount_ot_vets_in_face2, vertex1_face2, vertex2_face2...
...

◆ addMeshNormals()

coat.Mesh.addMeshNormals ( self,
list normals )

add the list of all normal vertices for the mesh

Parameters
normalsthe list of normals (vec3)

◆ addMeshUVs()

coat.Mesh.addMeshUVs ( self,
list uvs )

add the list of all UV vertices for the mesh

Parameters
uvsthe list of UVs (vec2)

◆ addMeshVertices()

coat.Mesh.addMeshVertices ( self,
list positions )

add the list of all positional vertices for the mesh

Parameters
positionsthe list of positions

◆ addObject() [1/2]

int coat.Mesh.addObject ( self,
str name )

add new object to the mesh

Parameters
namethe object name
Returns
the object index

◆ addObject() [2/2]

int coat.Mesh.addObject ( self,
str name )

add the named object

Parameters
namethe name for the object
Returns
the index of new object in the objects list

◆ addToVolume()

coat.Mesh.addToVolume ( self,
Volume v,
mat4 transform = mat4.Identity )

boolean add to volume

Parameters
vthe destination volume
transformthe transform

◆ addTransformed()

coat.Mesh.addTransformed ( self,
Mesh m,
mat4 t )

concatenate the transformed mesh with the current one

Parameters
mthe mesh
tthe transform

◆ autodetectSymmetryPlanes()

list coat.Mesh.autodetectSymmetryPlanes ( self)

Detect the symmetry planes of the mesh.

Returns
the list of planes

◆ boolean()

coat.Mesh.boolean ( self,
Mesh m,
BoolOpType op )

boolean operation

Parameters
mthe mesh to operate

◆ booleanOp()

coat.Mesh.booleanOp ( self,
Mesh With,
BoolOpType op )

Perform the boolean operation with the given mesh.

Parameters
Withthe mesh to perform the operation with over the current mesh
opthe operation, see BoolOpType (-1 means no operation, 0 - add, 1 - subtract, 2 - intersect)

◆ box()

Mesh coat.Mesh.box ( vec3 center = vec3.Zero,
vec3 size = vec3.One,
vec3 xAxis = vec3.Zero,
vec3 yAxis = vec3.Zero,
vec3 zAxis = vec3.Zero,
float detail_size = 1,
float fillet = 0.0,
int nx = 0,
int ny = 0,
int nz = 0 )
static

create the box mesh

Parameters
centerthe box center
sizethe box size
xAxisthe x-axis direction, if zero, the x-axis is default - (1,0,0)
yAxisthe y-axis direction, if zero, the y-axis is default - (0,1,0)
zAxisthe z-axis direction, if zero, the z-axis is default - (0,0,1)
detail_sizethe average length of the edge over the figure. The figure will be divided so that edges length will be approximately the detail_size
filletthe fillet radius
nxthe number of segments along the x-axis (if all of nx, ny, nz are above zero, it overrides the detail_size)
nythe number of segments along the y-axis (if all of nx, ny, nz are above zero, it overrides the detail_size)
nzthe number of segments along the z-axis (if all of nx, ny, nz are above zero, it overrides the detail_size)
Returns
the box mesh

◆ calcNormals()

coat.Mesh.calcNormals ( self)

re-calculate normals over the mesh

◆ calcNormalsIgnoreSharpEdges()

coat.Mesh.calcNormalsIgnoreSharpEdges ( self)

re-calculate normals over the mesh, ignore the sharp edges

◆ clear()

coat.Mesh.clear ( self)

clear the mesh

◆ clearFaces()

coat.Mesh.clearFaces ( self)

clear all faces of the mesh

◆ clearMaterials()

coat.Mesh.clearMaterials ( self)

clear all materials

◆ clearNormals()

coat.Mesh.clearNormals ( self)

clear all normal vertices of the mesh

◆ clearObject()

coat.Mesh.clearObject ( self)

clear all objects

◆ clearUvVerts()

coat.Mesh.clearUvVerts ( self)

clear all uv vertices of the mesh

◆ clearVerts()

coat.Mesh.clearVerts ( self)

clear all positional vertices of the mesh

◆ cone()

Mesh coat.Mesh.cone ( vec3 center = vec3.Zero,
float radius = 1,
float height = 2,
float detail_size = 1,
vec3 topAxis = vec3.AxisY )
static

create the cone mesh

Parameters
centerthe center of the cone (the cone base center)
radiusthe cone radius
heightthe cone height
detail_sizethe average length of the edge over the figure. The figure will be divided so that edges length will be approximately the detail_size
topAxisthe top axis direction, if zero, the top axis is default - (0,1,0)
Returns
the cone mesh

◆ createNewUvVertex()

int coat.Mesh.createNewUvVertex ( self,
vec2 uv )

create new UV vertex to be used for faces

Parameters
uvthe texture coordinates
Returns
the index

◆ createNewVertex()

int coat.Mesh.createNewVertex ( self,
vec3 position )

create the positional vertex

Parameters
positionthe position
Returns
the positional vertex index

◆ createVDM()

coat.Mesh.createVDM ( self,
int side,
str path_to_exr,
vec3 center = vec3.Zero,
float radius = 1,
vec3 up = vec3.AxisZ,
vec3 x = vec3.AxisX,
vec3 y = vec3.AxisY )

Create the vector displacement map from the mesh and save it as EXR file.

The mesh is put on plane at center and clamped by that plane.

Parameters
sidethe EXR file side size
path_to_exrthe path to the EXR file
centerthe center of the plane
radiusthe radius that should include the mesh
upthe up vector of the plane
xthe x vector of the plane
ythe y vector of the plane

◆ cutByDistortedPlane()

coat.Mesh.cutByDistortedPlane ( self,
vec3 start,
vec3 NormalDirection,
float noise_degree,
float noise_scale,
int seed = 0 )

Cut off the mesh by the distorted plane (using the Perlin noise), the result is stored in the current mesh, the part of the mesh that is on the side of the negative normal direction is removed.

Parameters
startthe start point of the plane
NormalDirectionthe normal direction of the plane
noise_degreethe degree of the noise
noise_scalethe scale of the noise
seedthe seed for the noise

◆ cutByPlane()

coat.Mesh.cutByPlane ( self,
vec3 start,
vec3 NormalDirection )

Cut off the mesh by the plane, the result is stored in the current mesh, the part of the mesh that is on the side of the negative normal direction is removed.

Parameters
startthe start point of the plane
NormalDirectionthe normal direction of the plane

◆ cylinder()

Mesh coat.Mesh.cylinder ( vec3 center = vec3.Zero,
float radius = 1,
float height = 2,
float detail_size = 1,
int slices = 0,
int caps = 0,
int rings = 0,
float fillet = 0 )
static

create the cylinder mesh

Parameters
centerthe center of the cylinder
radiusthe radius of the cylinder
heightthe height of the cylinder
detail_sizethe average length of the edge over the figure. The figure will be divided so that edges length will be approximately the detail_size
slicesthe number of slices, it overrides the detail_size if all of slices, caps, rings are above zero
capsthe number of caps, it overrides the detail_size if all of slices, caps, rings are above zero
ringsthe number of rings, it overrides the detail_size if all of slices, caps, rings are above zero
filletthe fillet radius
Returns
the cylinder mesh

◆ distortByPerlinNoise()

coat.Mesh.distortByPerlinNoise ( self,
float noise_degree,
float noise_scale,
bool anisotropic = False,
int seed = 0 )

distort the mesh by the Perlin noise

Parameters
noise_degreethe degree of the noise
noise_scalethe scale of the noise
anisotropicif false, the noise will be applied in the direction of the normals, othervice the noise directed in random direction regardless the normals
seedthe seed for the noise

◆ ensureMaterialsAndObjectsExist()

coat.Mesh.ensureMaterialsAndObjectsExist ( self)

ensure that at least one material and one object exist in the mesh

◆ expandOpenEdges()

list coat.Mesh.expandOpenEdges ( self,
float distance )

extrude open edges of the mesh

Parameters
distancethe distance to extrude
Returns
s the list of extruded edges, even is the start vertex, odd is the end vertex

◆ extrudeOpenEdges()

list coat.Mesh.extrudeOpenEdges ( self,
float distance,
vec3 direction = vec3.Zero )

extrude open edges of the mesh

Parameters
distancethe distance to extrude
directionthe extrude direction, if zero , the direction is the local vertex normal
Returns
s the list of extruded edges, even is the start vertex, odd is the end vertex

◆ facesCount()

int coat.Mesh.facesCount ( self)

returns the faces amount

Returns
the amount

◆ fromPaintRoom()

coat.Mesh.fromPaintRoom ( self)

get the mesh from the paint room

◆ fromReducedVolume()

coat.Mesh.fromReducedVolume ( self,
Volume v,
float reduction_percent,
bool with_subtree = False,
bool all_selected = False )

extract the mesh from the volume and reduce it by the given percent

Parameters
vthe source volume
reduction_percent0 means no reduction, 100 means 100% reduction, i.e. the mesh will be reduced to a single triangle
with_subtreeif true, the subtree will be extracted, otherwise the single volume taken
all_selectedif true, all selected volumes will be extracted, otherwise only the current volume

◆ fromRetopo()

coat.Mesh.fromRetopo ( self)

take the whole mesh from the retopo room

◆ fromVolume()

coat.Mesh.fromVolume ( self,
Volume v,
bool with_subtree = False,
bool all_selected = False )

extract the mesh from the volume

Parameters
vthe source volume
with_subtreeif true, the subtree will be extracted, otherwise the single volume taken
all_selectedif true, all selected volumes will be extracted, otherwise only the current volume

◆ fromVolumeWithMaxPolycount()

coat.Mesh.fromVolumeWithMaxPolycount ( self,
Volume v,
int max_polycount,
bool with_subtree = False,
bool all_selected = False )

extract the mesh from the volume and reduce to the given polycount

Parameters
vthe source volume
max_polycountthe required polycount
with_subtreeif true, the subtree will be extracted, otherwise the single volume taken
all_selectedif true, all selected volumes will be extracted, otherwise only the current volume

◆ getBounds()

boundbox coat.Mesh.getBounds ( self)

get the mesh bound box

Returns
the bound box

◆ getCenterMass()

vec3 coat.Mesh.getCenterMass ( self)

calculate the center mass of the mesh

Returns
the center mass of the surface

◆ getFaceMaterial()

int coat.Mesh.getFaceMaterial ( self,
int faceIndex )

get the material index over the face, see the getMaterialsCount(), getMaterialName()

Parameters
faceIndexthe face index, should be in [0..facesCount() - 1]
Returns
the material index

◆ getFaceNormal()

vec3 coat.Mesh.getFaceNormal ( self,
int face )

get the face normal

Parameters
facethe face index
Returns
the face normal

◆ getFaceNormalVertex()

int coat.Mesh.getFaceNormalVertex ( self,
int faceIndex,
int faceVertexIndex )

get the normal vertex index over the face

Parameters
faceIndexthe face index, should be in [0..facesCount() - 1]
faceVertexIndexthe index of the vertex within the face, should be in [0..getFaceVertsCount(faceIndex) - 1]
Returns
the normal vertex index, -1 if no normals over the face

◆ getFaceObject()

int coat.Mesh.getFaceObject ( self,
int faceIndex )

get the object index over the face, see the getObjectsCount(), getObjectName()

Parameters
faceIndexthe face index, should be in [0..facesCount() - 1]
Returns
the object index

◆ getFaceSquare()

float coat.Mesh.getFaceSquare ( self,
int face )

get the squareof the face

Parameters
facethe face index
Returns
the square

◆ getFaceUVSquare()

float coat.Mesh.getFaceUVSquare ( self,
int face )

get the face square in UV space

Parameters
facethe face index
Returns
the square

◆ getFaceUvVertex()

int coat.Mesh.getFaceUvVertex ( self,
int faceIndex,
int faceVertexIndex )

get the UV vertex index over the face

Parameters
faceIndexthe face index, should be in [0..facesCount() - 1]
faceVertexIndexthe index of the vertex within the face, should be in [0..getFaceVertsCount(faceIndex) - 1]
Returns
the UV vertex index, -1 if no UVs over the face

◆ getFaceUvVerts()

list coat.Mesh.getFaceUvVerts ( self,
int face )

get the list of UV vertices indices over the face

Parameters
facethe face index
Returns
the list of UV vertices indices

◆ getFaceUvVertsCount()

int coat.Mesh.getFaceUvVertsCount ( self,
int face )

get the amount of UV vertices over the face

Parameters
facethe face index
Returns
amount of vertices over the face, 0 if UV-s not assigned

◆ getFaceVertex()

int coat.Mesh.getFaceVertex ( self,
int faceIndex,
int faceVertexIndex )

get the positional vertex index over the face

Parameters
faceIndexthe face index, should be in [0..facesCount() - 1]
faceVertexIndexthe index of the vertex within the face, should be in [0..getFaceVertsCount(faceIndex) - 1]
Returns
the positional vertex index

◆ getFaceVerts()

list coat.Mesh.getFaceVerts ( self,
int face )

get the list of UV vertex indices over the face, pay attention UV vertices are not same as position vertices

Parameters
facethe face index
Returns
the list of vertex indices

◆ getFaceVertsCount()

int coat.Mesh.getFaceVertsCount ( self,
int face )

get the amount of vertices over the face

Parameters
facethe face index, should be in [0..facesCount() - 1]
Returns
the verts amount

◆ getLengthAlongDirection()

float coat.Mesh.getLengthAlongDirection ( self,
vec3 dir )

get the mesh size along some axis

Parameters
dirthe axis direction
Returns
the size along the axis

◆ getMaterialName()

str coat.Mesh.getMaterialName ( self,
int idx )

get the name of the material

Parameters
idxthe material index
Returns
the name

◆ getMaterialsCount()

int coat.Mesh.getMaterialsCount ( self)

get the materials count in the mesh

Returns
the count

◆ getMaterialTexture()

str coat.Mesh.getMaterialTexture ( self,
int idx,
int texture_layer )

get the texture name of the material

Parameters
idxthe material index
texture_layerthe texture layer, 0 - color, 1 - gloss, 2 - bump/displacement, 3 - normalmap, 4 - specular color, 5 - emossive (color), 6 - emissive power
Returns
the texture path (full or relative to 3DCoat documents folder)

◆ getMeshNormals()

list coat.Mesh.getMeshNormals ( self)

get the list of all normal vertices of the mesh

Returns
the list of vec3

◆ getMeshUVs()

list coat.Mesh.getMeshUVs ( self)

get the list of all UV vertices of the mesh

Returns
the list of vec2

◆ getMeshVertices()

list coat.Mesh.getMeshVertices ( self)

get the list of all positional vertices of the mesh

Returns
the list of vec3

◆ getObjectName()

str coat.Mesh.getObjectName ( self,
int idx )

get the name of the object

Parameters
idxthe object index
Returns
the name

◆ getObjectsCount()

int coat.Mesh.getObjectsCount ( self)

returns the objects count in the mesh

Returns
the count

◆ getOpenEdges()

list coat.Mesh.getOpenEdges ( self)

get the list of open edges

Returns
the list of open edges, the even is the start vertex, the odd is the end vertex

◆ getOpenSurfaceVolume()

float coat.Mesh.getOpenSurfaceVolume ( self,
vec3 start,
vec3 dir )

calculate the volume even if the mesh is not closed, in this case we define plane that limits the integration

Parameters
startthe point on that plane
dirthe normalized vector, normal to the plane
Returns
the volume

◆ getSquare()

float coat.Mesh.getSquare ( self)

get square of the mesh

Returns
the square (area)

◆ getVertex()

vec3 coat.Mesh.getVertex ( self,
int idx )

get the vertex coordinate

Parameters
idxthe vertex index
Returns
the coordinate

◆ getVertexNormal()

vec3 coat.Mesh.getVertexNormal ( self,
int idx )

get the normal of the vertex, pay attention position verts and normal verts are different, they have different indices

Parameters
idxthe normal vertex index, [0..vertsNormalCount() - 1]
Returns
the normal

◆ getVertexUV()

vec2 coat.Mesh.getVertexUV ( self,
int idx )

get the UV coordinate of the vertex, pay attention position verts and UV verts are different, they have different indices

Parameters
idxthe UV vertex index, [0..vertsUvCount() - 1]
Returns
the UV coordinate

◆ getVolume()

float coat.Mesh.getVolume ( self)

get the volume of the mesh

Returns
the volume

◆ hexagonal_plane()

Mesh coat.Mesh.hexagonal_plane ( vec3 center = vec3.Zero,
float sizeX = 2,
float sizeY = 2,
int divisionsX = 2,
int divisionsY = 2,
vec3 xAxis = vec3.AxisX,
vec3 yAxis = vec3.AxisY )
static

create the single-side triangular plane mesh that consists mostly of quasi equally-sided triangles

Parameters
centerthe center of the plane
sizeXthe plane size along the X-axis
sizeYthe plane size along the Y-axis
divisionsXamount of divisions along the X-axis
divisionsYamount of divisions along the Y-axis
xAxisthe vector of the X-axis
yAxisthe vector of the Y-axis
Returns
the hexagonal plane mesh

◆ insertInVolume()

coat.Mesh.insertInVolume ( self,
Volume v,
mat4 transform = mat4.Identity )

insert without boolean operation, if the volume is not in surface mode (volumetric) the boolean ADD will be performed anyway

Parameters
vthe destination volume
transformthe transform

◆ intersectWithVolume()

coat.Mesh.intersectWithVolume ( self,
Volume v,
mat4 transform = mat4.Identity )

boolean intersection of the mesh with the volume

Parameters
vthe destination volume
transformthe transform

◆ MakeCopy()

Mesh coat.Mesh.MakeCopy ( self)

◆ plane()

Mesh coat.Mesh.plane ( vec3 center = vec3.Zero,
float sizeX = 2,
float sizeY = 2,
int divisionsX = 2,
int divisionsY = 2,
vec3 xAxis = vec3.AxisX,
vec3 yAxis = vec3.AxisY )
static

create the single-side plane mesh, the faces normals are put toward the vec3.Cross(xAxis, yAxis)

Parameters
centerthe center of the plane
sizeXthe plane size along the X-axis
sizeYthe plane size along the Y-axis
divisionsXamount of divisions along the X-axis
divisionsYamount of divisions along the Y-axis
xAxisthe vector of the X-axis
yAxisthe vector of the Y-axis
Returns
the plane mesh

◆ Read()

bool coat.Mesh.Read ( self,
str name )

Load the mesh from the file.

Parameters
namethe filename. May contain full path or relative to the coat's install or documents folder.
Returns
true if successful.

◆ reduceToPolycount()

coat.Mesh.reduceToPolycount ( self,
int destination_triangles_count )

reduce the mesh to the given polycount, mesh will be triangulated

Parameters
destination_triangles_countthe required triangles count, if it is above the existing, nothing happens

◆ relax()

coat.Mesh.relax ( self,
float degree,
bool tangent,
float crease_angle = 180 )

relax the mesh, keep the vertices count

Parameters
degreethe degree of relax, may be > 1
tangentshould be tangent relax
crease_anglethe crease angle between faces (degrees), if the angle between faces is less than crease_angle, the edge relaxed

◆ removeFaces()

coat.Mesh.removeFaces ( self,
list faces )

remove the set of vertices from the mesh

Parameters
facesthe list of faces indices to remove

◆ removeMaterial()

coat.Mesh.removeMaterial ( self,
int idx )

remove the material (and corresponding faces) from the mesh

Parameters
idxthe material index

◆ removeObject()

coat.Mesh.removeObject ( self,
int idx )

remove object from the mesh

Parameters
idxthe object index

◆ removeUnusedFaces()

coat.Mesh.removeUnusedFaces ( self)

remove all faces that contain zero vertices

◆ removeUnusedObjectsAndMaterials()

coat.Mesh.removeUnusedObjectsAndMaterials ( self)

remove all unused objects and materials

◆ removeUnusedVerts()

coat.Mesh.removeUnusedVerts ( self)

remove all unused vertices

◆ rotateToXYAxis()

coat.Mesh.rotateToXYAxis ( self,
vec3 axisX,
vec3 axisY )

rotate the mesh so that X axis will be aligned with axisX, Y axis will be aligned with axisY

Parameters
axisXthe new X axis
axisYthe new Y axis

◆ rotateToYZAxis()

coat.Mesh.rotateToYZAxis ( self,
vec3 axisY,
vec3 axisZ )

rotate the mesh so that Y axis will be aligned with axisY, Z axis will be aligned with axisZ

Parameters
axisYthe new Y axis
axisZthe new Z axis

◆ rotateToZXAxis()

coat.Mesh.rotateToZXAxis ( self,
vec3 axisZ,
vec3 axisX )

rotate the mesh so that Z axis will be aligned with axisZ, X axis will be aligned with axisX

Parameters
axisZthe new Z axis
axisXthe new X axis

◆ setFaceMaterial()

coat.Mesh.setFaceMaterial ( self,
int faceIndex,
int materialIndex )

set the material index over the face, see the getMaterialsCount(), getMaterialName()

Parameters
faceIndexthe face index, should be in [0..facesCount() - 1]
materialIndexthe material index to set for the face

◆ setFaceNormalVertex()

coat.Mesh.setFaceNormalVertex ( self,
int faceIndex,
int faceVertexIndex,
int normalVertexIndex )

set the normal vertex index over the face

Parameters
faceIndexthe face index, should be in [0..facesCount() - 1]
faceVertexIndexthe index of the vertex within the face, should be in [0..getFaceVertsCount(faceIndex) - 1]
normalVertexIndexthe normal vertex index, should be in [0..vertsNormalCount() - 1]

◆ setFaceObject()

coat.Mesh.setFaceObject ( self,
int faceIndex,
int objectIndex )

set the object index for the face, see the getObjectsCount(), getObjectName()

Parameters
faceIndexthe face index, should be in [0..facesCount() - 1]
objectIndexthe object index to set for the face

◆ setFaceUvVertex()

coat.Mesh.setFaceUvVertex ( self,
int faceIndex,
int faceVertexIndex,
int uvVertexIndex )

set the UV vertex index over the face

Parameters
faceIndexthe face index, should be in [0..facesCount() - 1]
faceVertexIndexthe index of the vertex within the face, should be in [0..getFaceVertsCount(faceIndex) - 1]
uvVertexIndexthe UV vertex index, should be in [0..vertsUvCount() - 1]

◆ setFaceVerts()

coat.Mesh.setFaceVerts ( self,
int face,
list vertices )

set the list of positional vertex indices over the face

Parameters
facethe face index
verticesthe list of vertex indices

◆ setMaterialName()

coat.Mesh.setMaterialName ( self,
int idx,
str name )

set material name

Parameters
idxthe material index
namethe new name

◆ setMaterialTexture()

coat.Mesh.setMaterialTexture ( self,
int idx,
int texture_layer,
str texture_path )

set the texture layer filename of the material

Parameters
idxthe material index
texture_layerthe texture layer, 0 - color, 1 - gloss, 2 - bump/displacement, 3 - normalmap, 4 - specular color, 5 - emossive (color), 6 - emissive power
texture_paththe texture path (full or relative to 3DCoat documents folder)

◆ setMeshFaces()

coat.Mesh.setMeshFaces ( self,
list faces )

set the complete list of faces for the mesh

Parameters
facesthe format of faces is:
amount_ot_vets_in_face1, vertex1_face1, vertex2_face1...vertexN-1_face1,
amount_ot_vets_in_face2, vertex1_face2, vertex2_face2...
...

◆ setMeshNormals()

coat.Mesh.setMeshNormals ( self,
list normals )

set the list of all normal vertices for the mesh

Parameters
normalsthe list of normals (vec3)

◆ setMeshUVs()

coat.Mesh.setMeshUVs ( self,
list uvs )

set the list of all UV vertices for the mesh

Parameters
uvsthe list of UVs (vec2)

◆ setMeshVertices()

coat.Mesh.setMeshVertices ( self,
list positions )

set the list of all positional vertices for the mesh

Parameters
positionsthe list of positions

◆ setObjectName()

coat.Mesh.setObjectName ( self,
int idx,
str name )

set object name

Parameters
idxthe object index
namethe new name

◆ setVertex()

coat.Mesh.setVertex ( self,
int idx,
vec3 v )

set the vertex coordinate

Parameters
idxthe vertex index
vthe coordinate

◆ setVertexNormal()

coat.Mesh.setVertexNormal ( self,
int idx,
vec3 v )

set the normal of the vertex, pay attention position verts and normal verts are different, they have different indices

Parameters
idxthe normal vertex index, [0..vertsNormalCount() - 1]
vthe normal

◆ setVertexUV()

coat.Mesh.setVertexUV ( self,
int idx,
vec2 v )

set the UV coordinate of the vertex, pay attention position verts and UV verts are different, they have different indices

Parameters
idxthe UV vrertex index, [0..vertsUvCount() - 1]
vthe UV coordinate

◆ shell()

coat.Mesh.shell ( self,
float thickness_out,
float thickness_in,
int divisions = 1 )

add some thickness to the mesh (intrude a bit)

Parameters
thickness_outthe thickness in the outer direction (extrusion)
thickness_inthe thickness in the inner direction (intrusion)
divisionsthe amount of divisions of the edge

◆ sphere()

Mesh coat.Mesh.sphere ( vec3 center = vec3.Zero,
float radius = 1.0,
float detail_size = 1 )
static

create the sphere mesh

Parameters
centerthe sphere center
radiusthe sphere radius
detail_sizethe average length of the edge over the figure. The figure will be divided so that edges length will be approximately the detail_size
Returns
the sphere mesh

◆ splitDisconnectedParts()

list coat.Mesh.splitDisconnectedParts ( self)

split the mesh into disconnected parts

Returns
the list of meshes

◆ subtractFromVolume()

coat.Mesh.subtractFromVolume ( self,
Volume v,
mat4 transform = mat4.Identity )

boolean subtraction of the mesh from the volume

Parameters
vthe destination volume
transformthe transform

◆ symmetry()

coat.Mesh.symmetry ( self,
vec3 start,
vec3 NormalDirection,
bool resultInQuads )

apply symmetry to the mesh

Parameters
startthe start point of the plane
NormalDirectionthe negative part (regarding the plane normal) of the mesh is removed, replaced with positive part
resultInQuadsthe cut faces will produce quads instead of triangles

◆ text()

Mesh coat.Mesh.text ( str string,
str font = "tahoma",
float height = 10.0,
vec3 center = vec3.Zero,
vec3 text_direction = vec3.AxisX,
vec3 text_normal = vec3.AxisY,
float thickness = 1,
int align = 1 )
static

Create the text mesh.

Parameters
stringthe text string
fontthe font name
heightthe text height
centerthe text center
text_directionthe text direction left to right
text_normalthe normal direction of the text
thicknessthe thickness of the text
alignthe text align, 0 - left, 1 - center, 2 - right
Returns
the text mesh

◆ toVolume()

coat.Mesh.toVolume ( self,
Volume v,
mat4 transform = mat4.Identity,
BoolOpType op = BoolOpType.BOOL_MERGE )

merge this mesh to the volume object

Parameters
vthe destination volume
transformthe applied transformation
opthe boolean operation to be performed, -1 means no operation, raw merge, 0 - 1, 1 - subtract, 2 - intersect

◆ transform()

coat.Mesh.transform ( self,
mat4 transform )

transform the mesh

Parameters
transformthe transformation matrix

◆ triangulate()

coat.Mesh.triangulate ( self)

triangulate the mesh

◆ unifyAllObjects()

coat.Mesh.unifyAllObjects ( self,
str name = "" )

unify all objects in the mesh, i.e.

make one object

Parameters
namethe name of the new object, if empty, the name of the first object will be used

◆ valid()

bool coat.Mesh.valid ( self)

Check if mesh is valid.

Returns
true if mesh is valid

◆ vertsCount()

int coat.Mesh.vertsCount ( self)

returns the amount of verts in the mesh

Returns
the amount

◆ vertsNormalCount()

int coat.Mesh.vertsNormalCount ( self)

returns the amount of normal - verts in the mesh

Returns
teh amount

◆ vertsUvCount()

int coat.Mesh.vertsUvCount ( self)

returns the amount of UV - verts in the mesh

Returns
the amount

◆ weld()

coat.Mesh.weld ( self,
float minimal_relative_distance = 0.0001 )

weld the mesh, remove all vertices that are closer than minimal_relative_distance*mesh_bound_box_diagonal to each other

Parameters
minimal_relative_distancethe minimal distance between vertices, relative to the mesh bound box diagonal

◆ Write()

bool coat.Mesh.Write ( self,
str name )

Save the mesh to file.

Parameters
nameFull or relative path
Returns
true if successful

The documentation for this class was generated from the following file: