Я хочу использовать VTK в C ++ и построить молекулу в 3D. У меня есть вектор, представляющий позиции атома и другой вектор, представляющий размер каждого атома. Как я могу это сделать? Нужно ли создавать новый сферный источник для каждого атома.
vector< vector <double> > Positions;
vector< double > Sizes;
Взгляните на vtkGlyph3D и этот пример:
http://www.vtk.org/Wiki/VTK/Examples/Cxx/Filtering/Glyph3D
Однако для каждого размера атома вам потребуется отдельный источник сферы, все атомы одинакового размера могут использовать один и тот же источник сферы …
void VTK_Plotter::Add_Point(vector<double> Position, double Size)
{
Size = floor((log10(Size) + 0.2) * 100.0) / 100.0;
vtkSmartPointer<vtkSphereSource> Current_Sphere_Source;
// Different atomi number have different set of points
vtkSmartPointer<vtkPoints> Current_Point_Group;
// If the point has a size not in the list create a new sphere source with different size
if (Table_Size_Source.find(Size) == Table_Size_Source.end()) {
// Create new source
Current_Sphere_Source = vtkSmartPointer<vtkSphereSource>::New();
Current_Sphere_Source->SetRadius(Size);
Table_Size_Source[Size] = Current_Sphere_Source;
// Create new points
Current_Point_Group = vtkSmartPointer<vtkPoints>::New();
Table_Points_VTK[Size] = Current_Point_Group;
}
else
{
Current_Sphere_Source = Table_Size_Source[Size];
Current_Point_Group = Table_Points_VTK[Size];
}
}