基于java的油藏模型三维显示

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;

 

}

Design a site like this with WordPress.com
Get started