2010-11-13 14 views
1

J'ai un fichier txt qui contient un ensemble de 3 points de données dimensionnelles et je voudrais créer un vtkPolyData basé sur ces points.Comment construire vtkPolyData basé sur les informations contenues dans un fichier txt

Dans le fichier, j'ai le nombre de points sur la première ligne, dans mon cas, ils sont 6 x 6. Et après cela, les coordonnées réelles de chaque point. Le contenu du fichier est comme ça.

6 6 
1 1 3 
2 1 3.4 
3 1 3.6 
4 1 3.6 
5 1 3.4 
6 1 3 
1 2 3 
2 2 3.8 
3 2 4.2 
4 2 4.2 
5 2 3.8 
6 2 3 
1 3 3 
2 3 3 
3 3 3 
4 3 3 
5 3 3 
6 3 3 
1 4 3 
2 4 3 
3 4 3 
4 4 3 
5 4 3 
6 4 3 
1 5 3 
2 5 3.8 
3 5 4.2 
4 5 4.2 
5 5 3.8 
6 5 3 
1 6 3 
2 6 3.4 
3 6 3.6 
4 6 3.6 
5 6 3.4 
6 6 3 

Comment puis-je créer une structure vtkPolyData avec un fichier txt avec ces données?

Répondre

2

Il me semble que vous avez une série de points maillée régulièrement, non? Si c'est le cas, vtkImageData pourrait être un meilleur choix. Vous pouvez toujours utiliser un filtre de géométrie pour convertir en polydata si vous en avez réellement besoin.

  1. Créez une instance de vtkImageData.
  2. Définissez ses dimensions sur (6, 6, 1) (la troisième dimension est ignorée).
  3. Définir son type de données à un type approprié (float ou double, je suppose).
  4. Appelez AllocateScalars();
  5. Si en C++,

    1. appel GetScalarPointer() et de le jeter sur le type de données défini dans 3.
    2. Ce pointeur pointera vers un tableau de taille 36. Vous pouvez simplement remplir chaque point que tu le ferais normalement.
  6. Si dans une autre langue (TCL/Python/Java), appelez SetScalarComponentFromFloat sur les données d'image, avec les arguments (x, y, 0, 0, valeur). Le premier 0 est la 3ème dimension et le second est pour le premier composant.

Cela vous donnera une grille, et il sera beaucoup plus efficace en mémoire qu'une polydata.

Si vous souhaitez visualiser uniquement les points, utilisez vtkDataSetMapper et définissez la propriété de l'acteur avec SetRepresentationToPoints(), en définissant une taille de point appropriée. Cela fera un travail simple de visualisation.

0

Est-ce que these examples est utile? En particulier, this fait la génération de points et de polygones, donc il devrait être possible de s'adapter. Le noyau semble être (avec beaucoup gauche) sur:

# ... 
vtkPolyData shell 
vtkFloatPoints points 
vtkCellArray strips 

# Generate points... 
loop { 
    ... 
    points InsertPoint $k $x0 $x1 $x2 
} 
shell SetPoints points 
points Delete 

# Generate triangles/polygons... 
loop { 
    strips InsertNextCell $NP2 
    # ... 
    strips InsertCellPoint [expr $kb +$ke ] 
    # ... 
    strips InsertCellPoint [expr $kb +$ke ] 
} 
shell SetStrips strips 
strips Delete 

# ... 
+0

J'ai atteint le point de boucle dans votre code. J'ai réussi à lire une ligne à partir du fichier txt, mais je ne sais pas comment convertir cette chaîne en un point de données flottant en utilisant le langage tcl. – Simon

+0

Vous ne lancez pas dans Tcl. Il le fait pour vous comme nécessaire "dans les coulisses". Essayez simplement d'utiliser les valeurs dans 'InsertPoint'. –