基于vtk结构化网格的eclipse三维地质模型

        上述基于vtkHexahedron网格的三维模型显示需要显式地定义每个vtkHexahedron网格,然后建立vtkUnstructuredGrid,属于非结构化网格,计算量大。这个实例采用了vtkStructuredGrid的格式,不用显式地定义每个网格,只需要定义每个节点的空间坐标就行,计算量小,显示速度快,同时还以vtkAxesActor方式添加了XYZ方向的坐标轴。采用java的具体代码如下,其中coordXYZGrid是eclipse网格种每个节点的空间坐标,values是每个网格的属性值。

private void DrawstructuredGrid(Point3D[][][] coordXYZGrid, double[][][] values, double  valueMin, double valueMax)

    {

            int node_nk = coordXYZGrid.length;

        int node_nj = coordXYZGrid[0].length;

        int node_ni = coordXYZGrid[0][0].length;

        System.out.println("nk="+node_nk+" nj="+node_nj+" ni="+node_ni);

       

        //create the points and array

        vtkPoints points = new vtkPoints();

        vtkDoubleArray scalars = new vtkDoubleArray(); 

        

        //points.SetNumberOfPoints(node_ni * node_nj * node_nk);

        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[k][j][i].X, coordXYZGrid[k][j][i].Y, coordXYZGrid[k][j][i].Z);

                    points.InsertNextPoint(coordXYZGrid[k][j][i].X, coordXYZGrid[k][j][i].Y, coordXYZGrid[k][j][i].Z);

                    //scalars.InsertTuple1(seq, k);

                    scalars.InsertNextTuple1(values[k][j][i]);

                    //Console.WriteLine(“{0} {1} {2}”, coordXYZGrid[i, j, k].x, coordXYZGrid[i, j, k].y, coordXYZGrid[i, j, k].z);

                    //seq += 1;

                }

            }

        }

        //create the structured grid

        vtkStructuredGrid grid = new  vtkStructuredGrid();

        grid.SetDimensions(node_ni, node_nj, node_nk);   //ni nj nk

        grid.SetPoints(points);

        grid.GetCellData().SetScalars(scalars);

       

        //create a mapper

        vtkDataSetMapper mapper = new vtkDataSetMapper();

        mapper.SetInputData(grid);

        mapper.SetScalarRange(valueMin,valueMax);

       

        //create the actor

        vtkActor actor = new vtkActor();

        actor.SetMapper(mapper);

        actor.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, 0);  //blue(0,0,1),red(1,0,0)

        render.AddActor(actor);

        //设置坐标轴

        vtkAxesActor axesActor = new vtkAxesActor();

        vtkOrientationMarkerWidget widget = new vtkOrientationMarkerWidget();

        widget.SetOutlineColor(0.1, 0.1, 0.1);

        widget.SetOrientationMarker(axesActor);

        widget.SetInteractor(renwinIn);

        widget.SetEnabled(1);

        widget.InteractiveOn();

        //可视化输出

        render.ResetCamera();

        renWin.Render();

        renwinIn.Start();       

       

    }

具体显示结果如下

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oceanstonetree

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值