3DCoat Core API
The 3DCoat API documentation.
|
The mesh reference. More...
#include <CoreAPI.h>
Public Member Functions | |
Mesh (const Mesh &m) | |
Mesh (const Model &m) | |
Mesh & | operator= (const Mesh &m) |
Mesh & | operator= (const Model &m) |
Mesh | MakeCopy () |
bool | Read (const char *name) |
Load the mesh from the file. | |
bool | Write (const char *name) |
Save the mesh to file. | |
bool | valid () const |
Check if mesh is valid. | |
comms::cMeshContainer * | geometry () |
The low-level mesh reference allows to create, operate over individual faces, vertices, objects. | |
comms::cMeshContainer * | geometry () const |
void | clear () |
clear the mesh | |
Mesh & | operator+= (const Mesh &m) |
concatenate with the other mesh | |
Mesh & | operator+= (const Model &m) |
concatenate with the Model | |
void | addTransformed (const Mesh &m, const mat4 &t) |
concatenate the transformed mesh with the current one | |
void | boolean (const Mesh &m, BoolOpType op) |
boolean operation | |
void | transform (const mat4 &transform) |
transform the mesh | |
void | rotateToXYAxis (const vec3 &axisX, const vec3 &axisY) |
rotate the mesh so that X axis will be aligned with axisX, Y axis will be aligned with axisY | |
void | rotateToYZAxis (const vec3 &axisY, const vec3 &axisZ) |
rotate the mesh so that Y axis will be aligned with axisY, Z axis will be aligned with axisZ | |
void | rotateToZXAxis (const vec3 &axisZ, const vec3 &axisX) |
rotate the mesh so that Z axis will be aligned with axisZ, X axis will be aligned with axisX | |
int | vertsCount () const |
returns the amount of verts in the mesh | |
int | vertsUvCount () const |
returns the amount of UV - verts in the mesh | |
int | vertsNormalCount () const |
returns the amount of normal - verts in the mesh | |
int | facesCount () |
returns the faces amount | |
vec3 | getVertex (int idx) const |
get the vertex coordinate | |
void | setVertex (int idx, const vec3 &v) |
set the vertex coordinate | |
int | createNewVertex (const vec3 &position) |
create the positional vertex | |
vec2 | getVertexUV (int idx) const |
get the UV coordinate of the vertex, pay attention position verts and UV verts are different, they have different indices | |
void | setVertexUV (int idx, const vec2 &v) |
set the UV coordinate of the vertex, pay attention position verts and UV verts are different, they have different indices | |
int | createNewUvVertex (const vec2 &uv) |
create new UV vertex to be used for faces | |
vec3 | getVertexNormal (int idx) const |
get the normal of the vertex, pay attention position verts and normal verts are different, they have different indices | |
void | setVertexNormal (int idx, const vec3 &v) |
set the normal of the vertex, pay attention position verts and normal verts are different, they have different indices | |
void | calcNormals () |
re-calculate normals over the mesh | |
void | calcNormalsIgnoreSharpEdges () |
re-calculate normals over the mesh, ignore the sharp edges | |
int | getFaceVertsCount (int face) |
get the amount of vertices over the face | |
int | getFaceUvVertsCount (int face) |
get the amount of UV vertices over the face | |
int | getFaceVertex (int faceIndex, int faceVertexIndex) |
get the positional vertex index over the face | |
std::vector< int > | getFaceVerts (int face) |
get the list of UV vertex indices over the face, pay attention UV vertices are not same as position vertices | |
void | getFaceVerts (int face, list< int > &vertices) |
void | setFaceVerts (int face, const std::vector< int > &vertices) |
set the list of positional vertex indices over the face | |
void | setFaceVerts (int face, const list< int > &vertices) |
int | getFaceUvVertex (int faceIndex, int faceVertexIndex) |
get the UV vertex index over the face | |
void | setFaceUvVertex (int faceIndex, int faceVertexIndex, int uvVertexIndex) |
set the UV vertex index over the face | |
int | getFaceNormalVertex (int faceIndex, int faceVertexIndex) |
get the normal vertex index over the face | |
void | setFaceNormalVertex (int faceIndex, int faceVertexIndex, int normalVertexIndex) |
set the normal vertex index over the face | |
std::vector< int > | getFaceUvVerts (int face) |
get the list of UV vertices indices over the face | |
void | getFaceUvVerts (int face, list< int > &vertices) |
int | getFaceObject (int faceIndex) |
get the object index over the face, see the getObjectsCount(), getObjectName() | |
void | setFaceObject (int faceIndex, int objectIndex) |
set the object index for the face, see the getObjectsCount(), getObjectName() | |
int | getFaceMaterial (int faceIndex) |
get the material index over the face, see the getMaterialsCount(), getMaterialName() | |
void | setFaceMaterial (int faceIndex, int materialIndex) |
set the material index over the face, see the getMaterialsCount(), getMaterialName() | |
int | getObjectsCount () |
returns the objects count in the mesh | |
std::string | getObjectName (int idx) |
get the name of the object | |
void | setObjectName (int idx, const std::string &name) |
set object name | |
int | addObject (const char *name) |
add new object to the mesh | |
void | removeObject (int idx) |
remove object from the mesh | |
void | unifyAllObjects (const std::string &name="") |
unify all objects in the mesh, i.e. make one object | |
int | getMaterialsCount () |
get the materials count in the mesh | |
int | addMaterial (const char *name) |
add new material to the mesh | |
void | removeMaterial (int idx) |
remove the material (and corresponding faces) from the mesh | |
std::string | getMaterialName (int idx) |
get the name of the material | |
void | setMaterialName (int idx, const std::string &name) |
set material name | |
std::string | getMaterialTexture (int idx, int texture_layer) |
get the texture name of the material | |
void | setMaterialTexture (int idx, int texture_layer, const std::string &texture_path) |
set the texture layer filename of the material | |
void | fromVolume (Volume &v, bool with_subtree=false, bool all_selected=false) |
extract the mesh from the volume | |
void | fromReducedVolume (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 | |
void | fromVolumeWithMaxPolycount (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 | |
void | toVolume (Volume &v, const mat4 &transform=mat4::Identity, BoolOpType op=BOOL_MERGE) |
merge this mesh to the volume object | |
void | insertInVolume (Volume &v, const mat4 &transform=mat4::Identity) |
insert without boolean operation, if the volume is not in surface mode (volumetric) the boolean ADD will be performed anyway | |
void | addToVolume (Volume &v, const mat4 &transform=mat4::Identity) |
boolean add to volume | |
void | subtractFromVolume (Volume &v, const mat4 &transform=mat4::Identity) |
boolean subtraction of the mesh from the volume | |
void | intersectWithVolume (Volume &v, const mat4 &transform=mat4::Identity) |
boolean intersection of the mesh with the volume | |
void | fromRetopo () |
take the whole mesh from the retopo room | |
void | fromPaintRoom () |
get the mesh from the paint room | |
void | reduceToPolycount (int destination_triangles_count) |
reduce the mesh to the given polycount, mesh will be triangulated | |
void | triangulate () |
triangulate the mesh | |
void | booleanOp (Mesh &With, BoolOpType op) |
Perform the boolean operation with the given mesh. | |
std::vector< vec3 > | getMeshVertices () |
get the list of all positional vertices of the mesh | |
std::vector< vec3 > | getMeshNormals () |
get the list of all normal vertices of the mesh | |
std::vector< vec2 > | getMeshUVs () |
get the list of all UV vertices of the mesh | |
void | setMeshVertices (const std::vector< vec3 > &positions) |
set the list of all positional vertices for the mesh | |
void | setMeshNormals (const std::vector< vec3 > &normals) |
set the list of all normal vertices for the mesh | |
void | setMeshUVs (const std::vector< vec2 > &uvs) |
set the list of all UV vertices for the mesh | |
void | setMeshFaces (const std::vector< int > &faces) |
set the complete list of faces for the mesh | |
void | addMeshVertices (const std::vector< vec3 > &positions) |
add the list of all positional vertices for the mesh | |
void | addMeshNormals (const std::vector< vec3 > &normals) |
add the list of all normal vertices for the mesh | |
void | addMeshUVs (const std::vector< vec2 > &uvs) |
add the list of all UV vertices for the mesh | |
void | addMeshFaces (const std::vector< int > &faces) |
add the list of faces for the mesh, pay attention, all vertex indices are global over the whole mesh! | |
void | clearVerts () |
clear all positional vertices of the mesh | |
void | clearUvVerts () |
clear all uv vertices of the mesh | |
void | clearNormals () |
clear all normal vertices of the mesh | |
void | clearFaces () |
clear all faces of the mesh | |
void | removeFaces (const std::vector< int > &faces) |
remove the set of vertices from the mesh | |
void | clearObject () |
clear all objects | |
void | clearMaterials () |
clear all materials | |
void | ensureMaterialsAndObjectsExist () |
ensure that at least one material and one object exist in the mesh | |
int | addObject (const std::string &name) |
add the named object | |
int | addMaterial (const std::string &name) |
add the named material | |
void | removeUnusedObjectsAndMaterials () |
remove all unused objects and materials | |
void | removeUnusedVerts () |
remove all unused vertices | |
void | removeUnusedFaces () |
remove all faces that contain zero vertices | |
void | cutByPlane (const vec3 &start, const 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. | |
void | cutByDistortedPlane (const vec3 &start, const 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. | |
void | distortByPerlinNoise (float noise_degree, float noise_scale, bool anisotropic=false, int seed=0) |
distort the mesh by the Perlin noise | |
std::vector< Mesh > | splitDisconnectedParts () |
split the mesh into disconnected parts | |
void | symmetry (const vec3 &start, const vec3 &NormalDirection, bool resultInQuads) |
apply symmetry to the mesh | |
std::vector< comms::cPlane > | autodetectSymmetryPlanes () |
Detect the symmetry planes of the mesh. | |
void | weld (float minimal_relative_distance=0.0001f) |
weld the mesh, remove all vertices that are closer than minimal_relative_distance*mesh_bound_box_diagonal to each other | |
boundbox | getBounds () const |
get the mesh bound box | |
float | getVolume () const |
get the volume of the mesh | |
float | getOpenSurfaceVolume (const vec3 &start, const vec3 &dir) const |
calculate the volume even if the mesh is not closed, in this case we define plane that limits the integration | |
float | getSquare () const |
get square of the mesh | |
float | getFaceSquare (int face) |
get the squareof the face | |
float | getFaceUVSquare (int face) |
get the face square in UV space | |
vec3 | getFaceNormal (int face) |
get the face normal | |
void | relax (float degree, bool tangent, float crease_angle=180) |
relax the mesh, keep the vertices count | |
void | createVDM (int side, const char *path_to_exr, const vec3 ¢er=vec3::Zero, float radius=1, const vec3 &up=vec3::AxisZ, const vec3 &x=vec3::AxisX, const 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. | |
void | shell (float thickness_out, float thickness_in, int divisions=1) |
add some thickness to the mesh (intrude a bit) | |
std::vector< int > | extrudeOpenEdges (float distance, vec3 direction=vec3::Zero) |
extrude open edges of the mesh | |
std::vector< int > | expandOpenEdges (float distance) |
extrude open edges of the mesh | |
std::vector< int > | getOpenEdges () |
get the list of open edges | |
float | getLengthAlongDirection (const vec3 &dir) const |
get the mesh size along some axis | |
vec3 | getCenterMass () const |
calculate the center mass of the mesh | |
Static Public Member Functions | |
static Mesh | box (const vec3 ¢er=vec3::Zero, const vec3 &size=vec3::One, const vec3 &xAxis=vec3::Zero, const vec3 &yAxis=vec3::Zero, const vec3 &zAxis=vec3::Zero, float detail_size=1, float fillet=0.0f, int nx=0, int ny=0, int nz=0) |
create the box mesh | |
static Mesh | sphere (const vec3 ¢er=vec3::Zero, float radius=1.0f, float detail_size=1) |
create the sphere mesh | |
static Mesh | cylinder (const vec3 ¢er=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 | |
static Mesh | cone (const vec3 ¢er=vec3::Zero, float radius=1, float height=2, float detail_size=1, const vec3 &topAxis=vec3::AxisY) |
create the cone mesh | |
static Mesh | plane (const vec3 ¢er=vec3::Zero, float sizeX=2, float sizeY=2, int divisionsX=2, int divisionsY=2, const vec3 &xAxis=vec3::AxisX, const vec3 &yAxis=vec3::AxisY) |
create the single-side plane mesh, the faces normals are put toward the vec3.Cross(xAxis, yAxis) | |
static Mesh | hexagonal_plane (const vec3 ¢er=vec3::Zero, float sizeX=2, float sizeY=2, int divisionsX=2, int divisionsY=2, const vec3 &xAxis=vec3::AxisX, const vec3 &yAxis=vec3::AxisY) |
create the single-side triangular plane mesh that consists mostly of quasi equally-sided triangles | |
static Mesh | text (const char *string, const char *font="tahoma", float height=10.0f, const vec3 ¢er=vec3::Zero, const vec3 &text_direction=vec3::AxisX, const vec3 &text_normal=vec3::AxisY, float thickness=1, int align=1) |
Create the text mesh. | |
Protected Attributes | |
comms::cMeshContainer * | MeshData |
list< int > | raw_start |
int | raw_count |
Static Protected Attributes | |
static std::vector< std::pair< comms::cMeshContainer *, int > > | allocated_meshes |
Friends | |
class | Model |
class | prim |
The mesh reference.
int coat::Mesh::addMaterial | ( | const char * | name | ) |
add new material to the mesh
name | the material name |
int coat::Mesh::addMaterial | ( | const std::string & | name | ) |
add the named material
name | the name for the material |
void coat::Mesh::addMeshFaces | ( | const std::vector< int > & | faces | ) |
add the list of faces for the mesh, pay attention, all vertex indices are global over the whole mesh!
faces | the 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... ... |
void coat::Mesh::addMeshNormals | ( | const std::vector< vec3 > & | normals | ) |
add the list of all normal vertices for the mesh
normals | the list of normals (vec3) |
void coat::Mesh::addMeshUVs | ( | const std::vector< vec2 > & | uvs | ) |
add the list of all UV vertices for the mesh
uvs | the list of UVs (vec2) |
void coat::Mesh::addMeshVertices | ( | const std::vector< vec3 > & | positions | ) |
add the list of all positional vertices for the mesh
positions | the list of positions |
int coat::Mesh::addObject | ( | const char * | name | ) |
add new object to the mesh
name | the object name |
int coat::Mesh::addObject | ( | const std::string & | name | ) |
add the named object
name | the name for the object |
boolean add to volume
v | the destination volume |
transform | the transform |
concatenate the transformed mesh with the current one
m | the mesh |
t | the transform |
std::vector< comms::cPlane > coat::Mesh::autodetectSymmetryPlanes | ( | ) |
Detect the symmetry planes of the mesh.
void coat::Mesh::boolean | ( | const Mesh & | m, |
BoolOpType | op ) |
boolean operation
m | the mesh to operate |
void coat::Mesh::booleanOp | ( | Mesh & | With, |
BoolOpType | op ) |
Perform the boolean operation with the given mesh.
With | the mesh to perform the operation with over the current mesh |
op | the operation, see BoolOpType (-1 means no operation, 0 - add, 1 - subtract, 2 - intersect) |
|
static |
create the box mesh
center | the box center |
size | the box size |
xAxis | the x-axis direction, if zero, the x-axis is default - (1,0,0) |
yAxis | the y-axis direction, if zero, the y-axis is default - (0,1,0) |
zAxis | the z-axis direction, if zero, the z-axis is default - (0,0,1) |
detail_size | the average length of the edge over the figure. The figure will be divided so that edges length will be approximately the detail_size |
fillet | the fillet radius |
nx | the number of segments along the x-axis (if all of nx, ny, nz are above zero, it overrides the detail_size) |
ny | the number of segments along the y-axis (if all of nx, ny, nz are above zero, it overrides the detail_size) |
nz | the number of segments along the z-axis (if all of nx, ny, nz are above zero, it overrides the detail_size) |
|
static |
create the cone mesh
center | the center of the cone (the cone base center) |
radius | the cone radius |
height | the cone height |
detail_size | the average length of the edge over the figure. The figure will be divided so that edges length will be approximately the detail_size |
topAxis | the top axis direction, if zero, the top axis is default - (0,1,0) |
int coat::Mesh::createNewUvVertex | ( | const vec2 & | uv | ) |
create new UV vertex to be used for faces
uv | the texture coordinates |
int coat::Mesh::createNewVertex | ( | const vec3 & | position | ) |
create the positional vertex
position | the position |
void coat::Mesh::createVDM | ( | int | side, |
const char * | path_to_exr, | ||
const vec3 & | center = vec3::Zero, | ||
float | radius = 1, | ||
const vec3 & | up = vec3::AxisZ, | ||
const vec3 & | x = vec3::AxisX, | ||
const 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.
side | the EXR file side size |
path_to_exr | the path to the EXR file |
center | the center of the plane |
radius | the radius that should include the mesh |
up | the up vector of the plane |
x | the x vector of the plane |
y | the y vector of the plane |
void coat::Mesh::cutByDistortedPlane | ( | const vec3 & | start, |
const 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.
start | the start point of the plane |
NormalDirection | the normal direction of the plane |
noise_degree | the degree of the noise |
noise_scale | the scale of the noise |
seed | the seed for the noise |
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.
start | the start point of the plane |
NormalDirection | the normal direction of the plane |
|
static |
create the cylinder mesh
center | the center of the cylinder |
radius | the radius of the cylinder |
height | the height of the cylinder |
detail_size | the average length of the edge over the figure. The figure will be divided so that edges length will be approximately the detail_size |
slices | the number of slices, it overrides the detail_size if all of slices, caps, rings are above zero |
caps | the number of caps, it overrides the detail_size if all of slices, caps, rings are above zero |
rings | the number of rings, it overrides the detail_size if all of slices, caps, rings are above zero |
fillet | the fillet radius |
void coat::Mesh::distortByPerlinNoise | ( | float | noise_degree, |
float | noise_scale, | ||
bool | anisotropic = false, | ||
int | seed = 0 ) |
distort the mesh by the Perlin noise
noise_degree | the degree of the noise |
noise_scale | the scale of the noise |
anisotropic | if false, the noise will be applied in the direction of the normals, othervice the noise directed in random direction regardless the normals |
seed | the seed for the noise |
std::vector< int > coat::Mesh::expandOpenEdges | ( | float | distance | ) |
extrude open edges of the mesh
distance | the distance to extrude |
std::vector< int > coat::Mesh::extrudeOpenEdges | ( | float | distance, |
vec3 | direction = vec3::Zero ) |
extrude open edges of the mesh
distance | the distance to extrude |
direction | the extrude direction, if zero , the direction is the local vertex normal |
int coat::Mesh::facesCount | ( | ) |
returns the faces amount
void coat::Mesh::fromReducedVolume | ( | 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
v | the source volume |
reduction_percent | 0 means no reduction, 100 means 100% reduction, i.e. the mesh will be reduced to a single triangle |
with_subtree | if true, the subtree will be extracted, otherwise the single volume taken |
all_selected | if true, all selected volumes will be extracted, otherwise only the current volume |
void coat::Mesh::fromVolume | ( | Volume & | v, |
bool | with_subtree = false, | ||
bool | all_selected = false ) |
extract the mesh from the volume
v | the source volume |
with_subtree | if true, the subtree will be extracted, otherwise the single volume taken |
all_selected | if true, all selected volumes will be extracted, otherwise only the current volume |
void coat::Mesh::fromVolumeWithMaxPolycount | ( | 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
v | the source volume |
max_polycount | the required polycount |
with_subtree | if true, the subtree will be extracted, otherwise the single volume taken |
all_selected | if true, all selected volumes will be extracted, otherwise only the current volume |
comms::cMeshContainer * coat::Mesh::geometry | ( | ) |
The low-level mesh reference allows to create, operate over individual faces, vertices, objects.
boundbox coat::Mesh::getBounds | ( | ) | const |
get the mesh bound box
vec3 coat::Mesh::getCenterMass | ( | ) | const |
calculate the center mass of the mesh
int coat::Mesh::getFaceMaterial | ( | int | faceIndex | ) |
get the material index over the face, see the getMaterialsCount(), getMaterialName()
faceIndex | the face index, should be in [0..facesCount() - 1] |
vec3 coat::Mesh::getFaceNormal | ( | int | face | ) |
get the face normal
face | the face index |
int coat::Mesh::getFaceNormalVertex | ( | int | faceIndex, |
int | faceVertexIndex ) |
get the normal vertex index over the face
faceIndex | the face index, should be in [0..facesCount() - 1] |
faceVertexIndex | the index of the vertex within the face, should be in [0..getFaceVertsCount(faceIndex) - 1] |
int coat::Mesh::getFaceObject | ( | int | faceIndex | ) |
get the object index over the face, see the getObjectsCount(), getObjectName()
faceIndex | the face index, should be in [0..facesCount() - 1] |
float coat::Mesh::getFaceSquare | ( | int | face | ) |
get the squareof the face
face | the face index |
float coat::Mesh::getFaceUVSquare | ( | int | face | ) |
get the face square in UV space
face | the face index |
int coat::Mesh::getFaceUvVertex | ( | int | faceIndex, |
int | faceVertexIndex ) |
get the UV vertex index over the face
faceIndex | the face index, should be in [0..facesCount() - 1] |
faceVertexIndex | the index of the vertex within the face, should be in [0..getFaceVertsCount(faceIndex) - 1] |
std::vector< int > coat::Mesh::getFaceUvVerts | ( | int | face | ) |
get the list of UV vertices indices over the face
face | the face index |
int coat::Mesh::getFaceUvVertsCount | ( | int | face | ) |
get the amount of UV vertices over the face
face | the face index |
int coat::Mesh::getFaceVertex | ( | int | faceIndex, |
int | faceVertexIndex ) |
get the positional vertex index over the face
faceIndex | the face index, should be in [0..facesCount() - 1] |
faceVertexIndex | the index of the vertex within the face, should be in [0..getFaceVertsCount(faceIndex) - 1] |
std::vector< int > coat::Mesh::getFaceVerts | ( | int | face | ) |
get the list of UV vertex indices over the face, pay attention UV vertices are not same as position vertices
face | the face index |
int coat::Mesh::getFaceVertsCount | ( | int | face | ) |
get the amount of vertices over the face
face | the face index, should be in [0..facesCount() - 1] |
float coat::Mesh::getLengthAlongDirection | ( | const vec3 & | dir | ) | const |
get the mesh size along some axis
dir | the axis direction |
std::string coat::Mesh::getMaterialName | ( | int | idx | ) |
get the name of the material
idx | the material index |
int coat::Mesh::getMaterialsCount | ( | ) |
get the materials count in the mesh
std::string coat::Mesh::getMaterialTexture | ( | int | idx, |
int | texture_layer ) |
get the texture name of the material
idx | the material index |
texture_layer | the texture layer, 0 - color, 1 - gloss, 2 - bump/displacement, 3 - normalmap, 4 - specular color, 5 - emossive (color), 6 - emissive power |
std::vector< vec3 > coat::Mesh::getMeshNormals | ( | ) |
get the list of all normal vertices of the mesh
std::vector< vec2 > coat::Mesh::getMeshUVs | ( | ) |
get the list of all UV vertices of the mesh
std::vector< vec3 > coat::Mesh::getMeshVertices | ( | ) |
get the list of all positional vertices of the mesh
std::string coat::Mesh::getObjectName | ( | int | idx | ) |
get the name of the object
idx | the object index |
int coat::Mesh::getObjectsCount | ( | ) |
returns the objects count in the mesh
std::vector< int > coat::Mesh::getOpenEdges | ( | ) |
get the list of open edges
calculate the volume even if the mesh is not closed, in this case we define plane that limits the integration
start | the point on that plane |
dir | the normalized vector, normal to the plane |
float coat::Mesh::getSquare | ( | ) | const |
get square of the mesh
vec3 coat::Mesh::getVertex | ( | int | idx | ) | const |
get the vertex coordinate
idx | the vertex index |
vec3 coat::Mesh::getVertexNormal | ( | int | idx | ) | const |
get the normal of the vertex, pay attention position verts and normal verts are different, they have different indices
idx | the normal vertex index, [0..vertsNormalCount() - 1] |
vec2 coat::Mesh::getVertexUV | ( | int | idx | ) | const |
get the UV coordinate of the vertex, pay attention position verts and UV verts are different, they have different indices
idx | the UV vertex index, [0..vertsUvCount() - 1] |
float coat::Mesh::getVolume | ( | ) | const |
get the volume of the mesh
|
static |
create the single-side triangular plane mesh that consists mostly of quasi equally-sided triangles
center | the center of the plane |
sizeX | the plane size along the X-axis |
sizeY | the plane size along the Y-axis |
divisionsX | amount of divisions along the X-axis |
divisionsY | amount of divisions along the Y-axis |
xAxis | the vector of the X-axis |
yAxis | the vector of the Y-axis |
insert without boolean operation, if the volume is not in surface mode (volumetric) the boolean ADD will be performed anyway
v | the destination volume |
transform | the transform |
boolean intersection of the mesh with the volume
v | the destination volume |
transform | the transform |
concatenate with the other mesh
m | the mesh to be concatenated with this one |
concatenate with the Model
m | the mesh to be concatenated with this one |
|
static |
create the single-side plane mesh, the faces normals are put toward the vec3.Cross(xAxis, yAxis)
center | the center of the plane |
sizeX | the plane size along the X-axis |
sizeY | the plane size along the Y-axis |
divisionsX | amount of divisions along the X-axis |
divisionsY | amount of divisions along the Y-axis |
xAxis | the vector of the X-axis |
yAxis | the vector of the Y-axis |
bool coat::Mesh::Read | ( | const char * | name | ) |
Load the mesh from the file.
name | the filename. May contain full path or relative to the coat's install or documents folder. |
void coat::Mesh::reduceToPolycount | ( | int | destination_triangles_count | ) |
reduce the mesh to the given polycount, mesh will be triangulated
destination_triangles_count | the required triangles count, if it is above the existing, nothing happens |
void coat::Mesh::relax | ( | float | degree, |
bool | tangent, | ||
float | crease_angle = 180 ) |
relax the mesh, keep the vertices count
degree | the degree of relax, may be > 1 |
tangent | should be tangent relax |
crease_angle | the crease angle between faces (degrees), if the angle between faces is less than crease_angle, the edge relaxed |
void coat::Mesh::removeFaces | ( | const std::vector< int > & | faces | ) |
remove the set of vertices from the mesh
faces | the list of faces indices to remove |
void coat::Mesh::removeMaterial | ( | int | idx | ) |
remove the material (and corresponding faces) from the mesh
idx | the material index |
void coat::Mesh::removeObject | ( | int | idx | ) |
remove object from the mesh
idx | the object index |
rotate the mesh so that X axis will be aligned with axisX, Y axis will be aligned with axisY
axisX | the new X axis |
axisY | the new Y axis |
rotate the mesh so that Y axis will be aligned with axisY, Z axis will be aligned with axisZ
axisY | the new Y axis |
axisZ | the new Z axis |
rotate the mesh so that Z axis will be aligned with axisZ, X axis will be aligned with axisX
axisZ | the new Z axis |
axisX | the new X axis |
void coat::Mesh::setFaceMaterial | ( | int | faceIndex, |
int | materialIndex ) |
set the material index over the face, see the getMaterialsCount(), getMaterialName()
faceIndex | the face index, should be in [0..facesCount() - 1] |
materialIndex | the material index to set for the face |
void coat::Mesh::setFaceNormalVertex | ( | int | faceIndex, |
int | faceVertexIndex, | ||
int | normalVertexIndex ) |
set the normal vertex index over the face
faceIndex | the face index, should be in [0..facesCount() - 1] |
faceVertexIndex | the index of the vertex within the face, should be in [0..getFaceVertsCount(faceIndex) - 1] |
normalVertexIndex | the normal vertex index, should be in [0..vertsNormalCount() - 1] |
void coat::Mesh::setFaceObject | ( | int | faceIndex, |
int | objectIndex ) |
set the object index for the face, see the getObjectsCount(), getObjectName()
faceIndex | the face index, should be in [0..facesCount() - 1] |
objectIndex | the object index to set for the face |
void coat::Mesh::setFaceUvVertex | ( | int | faceIndex, |
int | faceVertexIndex, | ||
int | uvVertexIndex ) |
set the UV vertex index over the face
faceIndex | the face index, should be in [0..facesCount() - 1] |
faceVertexIndex | the index of the vertex within the face, should be in [0..getFaceVertsCount(faceIndex) - 1] |
uvVertexIndex | the UV vertex index, should be in [0..vertsUvCount() - 1] |
void coat::Mesh::setFaceVerts | ( | int | face, |
const std::vector< int > & | vertices ) |
set the list of positional vertex indices over the face
face | the face index |
vertices | the list of vertex indices |
void coat::Mesh::setMaterialName | ( | int | idx, |
const std::string & | name ) |
set material name
idx | the material index |
name | the new name |
void coat::Mesh::setMaterialTexture | ( | int | idx, |
int | texture_layer, | ||
const std::string & | texture_path ) |
set the texture layer filename of the material
idx | the material index |
texture_layer | the texture layer, 0 - color, 1 - gloss, 2 - bump/displacement, 3 - normalmap, 4 - specular color, 5 - emossive (color), 6 - emissive power |
texture_path | the texture path (full or relative to 3DCoat documents folder) |
void coat::Mesh::setMeshFaces | ( | const std::vector< int > & | faces | ) |
set the complete list of faces for the mesh
faces | the 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... ... |
void coat::Mesh::setMeshNormals | ( | const std::vector< vec3 > & | normals | ) |
set the list of all normal vertices for the mesh
normals | the list of normals (vec3) |
void coat::Mesh::setMeshUVs | ( | const std::vector< vec2 > & | uvs | ) |
set the list of all UV vertices for the mesh
uvs | the list of UVs (vec2) |
void coat::Mesh::setMeshVertices | ( | const std::vector< vec3 > & | positions | ) |
set the list of all positional vertices for the mesh
positions | the list of positions |
void coat::Mesh::setObjectName | ( | int | idx, |
const std::string & | name ) |
set object name
idx | the object index |
name | the new name |
void coat::Mesh::setVertex | ( | int | idx, |
const vec3 & | v ) |
set the vertex coordinate
idx | the vertex index |
v | the coordinate |
void coat::Mesh::setVertexNormal | ( | int | idx, |
const vec3 & | v ) |
set the normal of the vertex, pay attention position verts and normal verts are different, they have different indices
idx | the normal vertex index, [0..vertsNormalCount() - 1] |
v | the normal |
void coat::Mesh::setVertexUV | ( | int | idx, |
const vec2 & | v ) |
set the UV coordinate of the vertex, pay attention position verts and UV verts are different, they have different indices
idx | the UV vrertex index, [0..vertsUvCount() - 1] |
v | the UV coordinate |
void coat::Mesh::shell | ( | float | thickness_out, |
float | thickness_in, | ||
int | divisions = 1 ) |
add some thickness to the mesh (intrude a bit)
thickness_out | the thickness in the outer direction (extrusion) |
thickness_in | the thickness in the inner direction (intrusion) |
divisions | the amount of divisions of the edge |
|
static |
create the sphere mesh
center | the sphere center |
radius | the sphere radius |
detail_size | the average length of the edge over the figure. The figure will be divided so that edges length will be approximately the detail_size |
std::vector< Mesh > coat::Mesh::splitDisconnectedParts | ( | ) |
split the mesh into disconnected parts
boolean subtraction of the mesh from the volume
v | the destination volume |
transform | the transform |
apply symmetry to the mesh
start | the start point of the plane |
NormalDirection | the negative part (regarding the plane normal) of the mesh is removed, replaced with positive part |
resultInQuads | the cut faces will produce quads instead of triangles |
|
static |
Create the text mesh.
string | the text string |
font | the font name |
height | the text height |
center | the text center |
text_direction | the text direction left to right |
text_normal | the normal direction of the text |
thickness | the thickness of the text |
align | the text align, 0 - left, 1 - center, 2 - right |
void coat::Mesh::toVolume | ( | Volume & | v, |
const mat4 & | transform = mat4::Identity, | ||
BoolOpType | op = BOOL_MERGE ) |
merge this mesh to the volume object
v | the destination volume |
transform | the applied transformation |
op | the boolean operation to be performed, -1 means no operation, raw merge, 0 - 1, 1 - subtract, 2 - intersect |
void coat::Mesh::transform | ( | const mat4 & | transform | ) |
transform the mesh
transform | the transformation matrix |
void coat::Mesh::unifyAllObjects | ( | const std::string & | name = "" | ) |
unify all objects in the mesh, i.e. make one object
name | the name of the new object, if empty, the name of the first object will be used |
bool coat::Mesh::valid | ( | ) | const |
Check if mesh is valid.
int coat::Mesh::vertsCount | ( | ) | const |
returns the amount of verts in the mesh
int coat::Mesh::vertsNormalCount | ( | ) | const |
returns the amount of normal - verts in the mesh
int coat::Mesh::vertsUvCount | ( | ) | const |
returns the amount of UV - verts in the mesh
void coat::Mesh::weld | ( | float | minimal_relative_distance = 0.0001f | ) |
weld the mesh, remove all vertices that are closer than minimal_relative_distance*mesh_bound_box_diagonal to each other
minimal_relative_distance | the minimal distance between vertices, relative to the mesh bound box diagonal |
bool coat::Mesh::Write | ( | const char * | name | ) |
Save the mesh to file.
name | Full or relative path |