Come costruire vtkPolyData sulla base delle informazioni all'interno di un file txt

StackOverflow https://stackoverflow.com/questions/4172896

  •  09-10-2019
  •  | 
  •  

Domanda

Ho un file txt che contiene un set di 3 punti di dati dimensionali e vorrei creare una vtkPolyData sulla base di tali punti.

Nel file, ho il numero di punti sulla prima riga, nel mio caso sono 6 x 6. E dopo che le coordinate reali di ogni punto. Il contenuto del file è come questo.

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

Come faccio a costruire una struttura vtkPolyData con un file txt con questi dati?

È stato utile?

Soluzione

Sembra a me come si dispone di una serie regolare a griglia di punti, giusto? Se è così, vtkImageData potrebbe essere una scelta migliore. È sempre possibile utilizzare un filtro geometria poi convertire in polydata se si ha realmente bisogno in questo modo.

  1. Crea un'istanza vtkImageData.
  2. Imposta sue dimensioni a (6, 6, 1) (la terza dimensione viene ignorato).
  3. Imposta il tipo di dati a un tipo appropriato (float o doppia, immagino).
  4. chiamata AllocateScalars ();
  5. Se in C ++,

    1. chiamare GetScalarPointer () e il cast al tipo di dati impostato in 3.
    2. Questo puntatore punterà a un array di dimensione 36. Si può solo riempire ogni punto come si farebbe normalmente.
  6. Se in un'altra lingua (TCL / Python / Java), SetScalarComponentFromFloat chiamata sui dati di immagine, con gli argomenti (x, y, 0, 0, valore). Il primo 0 è il 3 ° dimensione e il secondo è per il primo componente.

Questo vi darà una griglia, e sarà molto più efficiente della memoria di un polydata.

Se si desidera visualizzare solo i punti, utilizzare un vtkDataSetMapper, e la configurazione di proprietà dell'attore con SetRepresentationToPoints (), impostando una dimensione punto appropriato. Che farà un lavoro semplice di visualizzazione.

Altri suggerimenti

questi esempi utile? In particolare, questo fa generazione di punti e poligoni, quindi dovrebbe essere possibile adattare. Il nucleo sembra essere (con un sacco lasciato fuori):

# ...
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

# ...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top