2016-03-24 1 views
1

Je travaille avec VTK pour le traitement de maillage 3D. J'ai un maillage et j'utilise la fonction vtkDecimatePro() pour obtenir la réduction. La fonction elle-même accepte un TargetReduction, ce qui est lié à la réduction du nombre de triangles (pourcentage). Le problème est que je dois avoir un nombre fixe de sommets, disons par exemple que je veux que toutes mes mailles aient 2000 sommets. Actuellement je le fais dans un logiciel appelé openflipper qui permet de contraindre la décimation à un nombre fixe de sommets. Cependant, dans VTK je ne suis pas sûr de savoir comment accomplir cette tâche.Comment obtenir un nombre fixe de sommets après la décimation dans VTK

Merci pour votre suggestion.

Répondre

1

Il n'est pas possible de définir le nombre de sommets souhaité. Cela ne fonctionne pas comme ça. Même la réduction de la cible est juste approximative, et vous n'êtes pas garanti d'obtenir exactement le nombre de sommets.

Qu'est-ce que vous pourriez faire, est de calculer très simplement le facteur de réduction et définir que:

// desiredN is the desired number of vertices after reduction 
double f = static_cast<double>(desiredN)/poly->GetNumberOfVertices(); 

//... 
decimate->SetTargetReduction(1.0 - f); 

// We want to preserve topology so that reduction factor applies to vertices 
// (otherwise it prescribes reduction in number of faces) 
decimate->SetPreserveTopology(1); 

HTH,

Miro

+0

Merci pour votre réponse @mirni, mais je pense que la fonction _SetTargerReduction_ est le facteur de réduction du nombre de triangles (Not Vertices). Je l'ai utilisé de cette façon, et la réduction en termes de nombre de triangles est bonne; Cependant, je n'ai pas été en mesure de fixer une réduction du nombre de sommets. Je me demande comment cela se fait dans OpenFlipper car là vous pouvez définir le nombre de sommets désiré, et jusqu'à présent il produit toujours un maillage avec ce nombre de sommets. –

+0

Roger, le nombre de sommets et de faces est lié par la formule d'Euler pour former un invariant topologique, donc si vous forcez la préservation de la topologie, le nombre de verts et le nombre de visages devraient varier du même montant. collecteurs avec un petit nombre de trous/poignées par rapport au nombre de verts. En pratique, cela signifie que vous voulez 'SetPreserveTopology (1)' sur le filtre decimate pour garder n verts et n faces varient constamment. – mirni

+0

Merci, faire des tests maintenant –