anyKode Marilou
ContentsIndexHome
PreviousUpNext
Geom::GetMesh (int)

Obtenir le mesh de la géométrie.

C++
MeshSubset * GetMesh(int SubsetNumber);
Parameters 
Description 
int SubsetNumber 
[in] Subset à retourner. 

Un objet de type mesh contenant tous les subsets sélectionnés (Points=0 et Faces=0 dans le cas d'un retour vide). Le retour est NULL si une erreur c'est produite.

GetMesh permet d'obtenir le mesh complet ou partiel qui compose la géométrie. Le résultat est fonction du type de géométrie et de la valeur du paramètre SubsetNumber. 

 

Le cas général:
  • SubsetNumber >=0 : demande du subset numéro 'SubsetNumber' (voir Notes),
  • SubsetNumber == -1 : demande du mesh complet, tel que défini dans le fichier 3D ou dans la structure interne,
  • SubsetNumber == -2 : demande du mesh composé des subsets sélectionnés dans la modélisation.

 

Type de géométrie 
Résultat attendu 
Géométrie 'physique native' ou 'affichage 3D' (boite, sphere, cylindre, pyramide, cone, etc...) 
SubsetNumber > 0 : retour vide (mesh vide).
SubsetNumber <= 0 : retourne le mesh utilisé pour l'affichage 3D, optimisé pour la physique. 
Géométrie 'physique' ou 'affichage 3D' de type Mesh File (fichier 3D) 
SubsetNumber >= 0 : retourne le subset indiqué s'il existe, un mesh vide sinon.
SubsetNumber == -1 : retourne le mesh complet, tel que défini dans le fichier 3D.
SubsetNumber == -2 : retourne un mesh composé des subsets sélectionnés dans la modélisation (voir Notes) 
SubsetNumber > 0 : retour vide.
SubsetNumber <= 0 : retourne le mesh utilisé pour la physique. 

 

L'opération de création du mesh verrouille le moteur physique : le temps de réponse de la fonction est donc variable et non négligeable (il est préférable de mettre le mesh en cache au lieu de le redemander à chaque utilisation). L'objet retourné doit être détruit par l'opérateur delete.

Modélisation: exemple de selection des subsets pour un mesh issu d'un fichier 3D (physique ou affichage 3D): 

 

v4.7.4

//Example from Samples/Simple/GetMesh

(...)
ModaCPP::Geom *pPhysicsBox=pWorld->QueryGeom("/physicsBOX");
Moda::Commons::MeshSubset *pBoxMesh=pPhysicsBox->GetMesh();
DisplayMesh("Physics box",pBoxMesh);
(...)

////////////////////////////////////////////////////////////////////////////////////////
//Displays mesh information
////////////////////////////////////////////////////////////////////////////////////////
void DisplayMesh(const xkode::lib::String &Prefix, Moda::Commons::MeshSubset *pMesh, bool bDisplayBuffers=false)
    {
    if(pMesh==NULL)
        {
        _cprintf("\t%s: Mesh NULL\r\n",Prefix.GetData());
        }
    else
        {
        _cprintf("\t%s: %d faces, %d points\r\n",Prefix.GetData(),pMesh->FacesCount,pMesh->PointsCount);
        if(bDisplayBuffers)
            {
            _cprintf("\t\tEnum points:\r\n");
            for(int i=0;i<(int)pMesh->PointsCount;i++)
                {
                _cprintf("\t\t[%03d] %f, %f, %f\r\n",i,pMesh->pPoints[i].x,pMesh->pPoints[i].y,pMesh->pPoints[i].z);
                }

            _cprintf("\r\n\t\tEnum indices:\r\n");
            for(int i=0;i<(int)pMesh->FacesCount;i++)
                {
                _cprintf("\t\t[%03d] %d, %d, %d\r\n",i,pMesh->pIndices[i*3+0],pMesh->pIndices[i*3+1],pMesh->pIndices[i*3+2]);
                }
            }
        }
    }
Documentation v4.7 (18/01/2015), Copyright (c) 2015 anyKode. All rights reserved.
What do you think about this topic? Send feedback!