package SimpleVTK;
import vtk.*;
public class SimpleVTK {
static {
if (!vtkNativeLibrary.LoadAllNativeLibraries()) {
for (vtkNativeLibrary lib : vtkNativeLibrary.values()) {
if (!lib.IsLoaded()) {
System.out.println(lib.GetLibraryName() + ” not loaded”);
}
}
}
vtkNativeLibrary.DisableOutputWindow(null);
}
private void helloworld(){
//设置圆柱体样式
vtkCylinderSource cylinderSource = new vtkCylinderSource();
cylinderSource.SetCenter(0,0,0);
cylinderSource.SetHeight(5);
cylinderSource.SetRadius(1);
//设置映射,输入圆柱体数据
vtkPolyDataMapper mapper = new vtkPolyDataMapper();
mapper.SetInputConnection(cylinderSource.GetOutputPort()) ;
//设置Actor,存储图像
vtkActor actor = new vtkActor();
actor.SetMapper(mapper);
//设置渲染
vtkRenderer renderer = new vtkRenderer();
renderer.AddActor(actor);
//创建显示窗口
vtkRenderWindow renwin = new vtkRenderWindow();
renwin.AddRenderer(renderer);
//设置交互样式
vtkRenderWindowInteractor renwinIn = new vtkRenderWindowInteractor();
renwinIn.SetRenderWindow(renwin);
//可视化输出
renwin.Render();
renwinIn.Start();
}
private void DrawCoordXYZGrid(Point3D[][][] coordXYZGrid)
{
int node_ni = coordXYZGrid.length;
int node_nj = coordXYZGrid[0].length;
int node_nk = coordXYZGrid[0][0].length;
vtkPoints points = new vtkPoints();
vtkFloatArray scalars = new vtkFloatArray();
points.SetNumberOfPoints(node_ni * node_nj * node_nk);
int seq = 0;
for (int k = 0; k < node_nk; k++)
for (int j = 0; j < node_nj; j++)
for (int i = 0; i < node_ni; i++)
{
points.InsertPoint(seq, coordXYZGrid[i][j][ k].X, coordXYZGrid[i][j][k].Y, coordXYZGrid[i][j][k].Z);
scalars.InsertTuple1(seq, k);
//Console.WriteLine(“{0} {1} {2}”, coordXYZGrid[i, j, k].x, coordXYZGrid[i, j, k].y, coordXYZGrid[i, j, k].z);
seq += 1;
}
vtkHexahedron hexahedron;
vtkUnstructuredGrid coordXYZUG = new vtkUnstructuredGrid();
coordXYZUG.Allocate(1, 1);
coordXYZUG.SetPoints(points);
coordXYZUG.GetPointData().SetScalars(scalars);
seq = 0;
for (int k = 0; k < node_nk -1; k++)
for (int j = 0; j < node_nj – 1; j++)
for (int i = 0; i < node_ni – 1; i++)
{
seq = k * node_nj * node_ni + j * node_ni + i;
hexahedron = new vtkHexahedron();
hexahedron.GetPointIds().SetId(0, seq);
hexahedron.GetPointIds().SetId(1, seq + 1);
hexahedron.GetPointIds().SetId(2, seq + node_ni + 1);
hexahedron.GetPointIds().SetId(3, seq + node_ni);
hexahedron.GetPointIds().SetId(4, seq + node_nj * node_ni);
hexahedron.GetPointIds().SetId(5, seq + node_nj * node_ni + 1);
hexahedron.GetPointIds().SetId(6, seq + node_nj * node_ni + node_ni + 1);
hexahedron.GetPointIds().SetId(7, seq + node_nj * node_ni + node_ni);
coordXYZUG.InsertNextCell(hexahedron.GetCellType(), hexahedron.GetPointIds());
}
vtkDataSetMapper aHexahedronMapper = new vtkDataSetMapper();
aHexahedronMapper.SetInputData(coordXYZUG);
aHexahedronMapper.SetScalarRange(0, node_nk);
vtkActor aHexahedronActor = new vtkActor();
aHexahedronActor.SetMapper(aHexahedronMapper);
aHexahedronActor.GetProperty().SetDiffuseColor(1, 1, 0);
vtkRenderer render = new vtkRenderer();
vtkRenderWindow renWin = new vtkRenderWindow();
//设置交互样式
vtkRenderWindowInteractor renwinIn = new vtkRenderWindowInteractor();
renwinIn.SetRenderWindow(renWin);
renWin.AddRenderer(render);
render.SetBackground(0, 0, 1);
render.AddActor(aHexahedronActor);
//可视化输出
renWin.Render();
renwinIn.Start();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
double dx=10;
double dy=10;
double dz=5;
Point3D[][][] grid = new Point3D[100][][];
for(int i=0;i<grid.length;i++)
{
grid[i] = new Point3D[100][];
for(int j=0;j<grid[i].length;j++)
{
grid[i][j] = new Point3D[10];
for(int k=0;k<grid[i][j].length;k++)
{
grid[i][j][k] = new Point3D();
grid[i][j][k].X = i*dx;
grid[i][j][k].Y= j*dy;
grid[i][j][k].Z= k*dz;
}
}
}
//sk.helloworld();
SimpleVTK sk = new SimpleVTK();
sk.DrawCoordXYZGrid(grid);
}
}
class Point3D
{
public double X;
public double Y;
public double Z;
}
