当前位置: 首页 > news >正文

java:VTKImagedata绘制三维体

直接上的代码:
package vtkdemoeasy;

import java.util.Random;

import vtk.vtkColorTransferFunction;
import vtk.vtkFloatArray;
import vtk.vtkGPUVolumeRayCastMapper;
import vtk.vtkImageData;
import vtk.vtkInformation;
import vtk.vtkInteractorStyleTrackballCamera;
import vtk.vtkNativeLibrary;
import vtk.vtkPiecewiseFunction;
import vtk.vtkRenderWindow;
import vtk.vtkRenderWindowInteractor;
import vtk.vtkRenderer;
import vtk.vtkVolume;
import vtk.vtkVolumeProperty;

public class Imagedata {

	/**
	 * @param args
	 */
	 static {
	        if (!vtkNativeLibrary.LoadAllNativeLibraries()) {
	          for (vtkNativeLibrary lib : vtkNativeLibrary.values()) {
	            if (!lib.IsLoaded()) {
	              System.out.println(lib.GetLibraryName() + " not loaded");
	            }
	          }
	        }
	        vtkNativeLibrary.DisableOutputWindow(null);
	      }
	 public static void creatImageData() {
		 int min_gray = 4;  
		 int   max_gray = 200;  
		 double    transparency = 0.03;  
		 int   dx = 5;
		 int  dy =5; 
		 int   dz = 5;  
		 int    x =  100;  
		 int    y = 100;  
		 int    z = 50;   
		    
		    //-----_建立图像数据-------  
	      vtkImageData  img=new vtkImageData();  
	      vtkInformation info=new vtkInformation();
	      //vtkInformation info2=img.GetInformation();
	      //此处也可以从img里面获取information,如  
	      //果information为空,则会创建一个新的,相当于调用New之后再SetInformation 
	      
	      img.SetDimensions(x, y, z);
	      img.SetSpacing(dx, dy, dz);
	      img.SetOrigin(0, 0, 0);
	      img.SetScalarType(8, info);//img->SetScalarType(VTK_UNSIGNED_CHAR, info);  
	      img.SetNumberOfScalarComponents(1, info);
	      img.AllocateScalars(info);
	      
	      int size=img.GetScalarSize();
	      int type=img.GetScalarType();
	      System.out.println(size);
	      System.out.println(type);
	      
	      float temp, max = 0;  
	      float[] tempfloat = new float[x * y * z];  
	      vtkFloatArray pointsScalars= new vtkFloatArray();
	  
	        for (int i = 0; i<x * y * z; i++)  
	        {  
	        	Random ran=new Random(); 
	        	temp=ran.nextFloat();
	        	System.out.println(temp);
	        	if (max < temp)  
	                max = temp; 
	        	tempfloat[i]=temp;
	        }
	        for (int i = 0; i<x * y * z; i++)  {
	        	pointsScalars.SetNumberOfTuples(x * y * z);//此行可有可无
			    pointsScalars.InsertValue(i,(tempfloat[i] / max * 255));//第1个参数是points点的Id,第2个参数是该点的属性值			    
	        }
	        img.GetPointData().SetScalars(pointsScalars);
	        
	        vtkGPUVolumeRayCastMapper volumeMapper =new   vtkGPUVolumeRayCastMapper();  
	        volumeMapper.SetInputData(img); 

	        vtkVolumeProperty volumeProperty=new vtkVolumeProperty();
	          
		    volumeProperty.SetInterpolationTypeToLinear();  
		    //volumeProperty.ShadeOn();  //打开或者关闭阴影测试  
		    volumeProperty.SetAmbient(0.4);  
		    volumeProperty.SetDiffuse(0.6);  
		    volumeProperty.SetSpecular(0.2);  
        
		    vtkPiecewiseFunction compositeOpacity =new vtkPiecewiseFunction(); 
	        compositeOpacity.ClampingOn();  
	        compositeOpacity.AddPoint(min_gray, 0);  
	        compositeOpacity.AddPoint(max_gray, transparency);  
	        
	        volumeProperty.SetScalarOpacity(compositeOpacity); //设置不透明度传输函数
		        
            vtkColorTransferFunction color=new vtkColorTransferFunction();
            color.AddRGBPoint(0.0, 0.0, 0.0, 0.0);  
            color.AddRGBPoint(36.0, 1.0, 0.0, 0.0);  
            color.AddRGBPoint(72.0, 1.0, 1.0, 0.0);  
            color.AddRGBPoint(108.0, 0.0, 1.0, 0.0);  
            color.AddRGBPoint(144.0, 0.0, 1.0, 1.0);  
            color.AddRGBPoint(180.0, 0.0, 0.0, 1.0);  
            color.AddRGBPoint(216.0, 1.0, 0.0, 1.0);  
            color.AddRGBPoint(255.0, 1.0, 1.0, 1.0); 
	            
            
            volumeProperty.SetColor(color);  
            
            vtkVolume volume = new  vtkVolume();  
            volume.SetMapper(volumeMapper);  
            volume.SetProperty(volumeProperty); 
             
            vtkRenderer ren =new vtkRenderer();
            ren.SetBackground(1.0, 1.0, 1.0);  
            ren.AddVolume(volume);  
            //ren.ResetCamera();  
            
          //创建显示窗口
     	   
     	   vtkRenderWindow renWin= new vtkRenderWindow(); 
     	   renWin.AddRenderer(ren);
     	   
     	   vtkRenderWindowInteractor iren= new vtkRenderWindowInteractor();
     	   vtkInteractorStyleTrackballCamera style= new vtkInteractorStyleTrackballCamera();
     	   iren.SetInteractorStyle(style);
     	   iren.SetRenderWindow(renWin);
     	   
     	   renWin.SetSize(700,700); 
     	   renWin.Render();
     	   iren.Start();
            
    
		}
		
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		creatImageData();
	}

}

相关文章:

  • python :sort() , sorted() , searchsorted(), np.linspace() ,mean()
  • Spring总结
  • IoC
  • 解决散点数据插值中的问题:输入含有 NaN 的数据
  • pykrige.ok3d.OrdinaryKriging3D函数定义分析
  • 克里金插值程序
  • mysql “group by ”与order by的研究
  • struts2校验、ajax校验、javascript验证有何区别及联系?
  • Struts2之validate数据校验两种方式,SSH框架之Struts的验证总结、验证的错误处理
  • Spring AOP解析,Spring实现AOP的4种方式
  • java反射机制,函数调用
  • 过滤器、监听器、拦截器
  • Spring中Bean的生命周期是怎样的?
  • BST,BVL,二叉排序树与平衡二叉树
  • 平衡二叉树(Balanced Binary Tree)---AVL树
  • Angular 响应式表单之下拉框
  • Angularjs之国际化
  • iOS | NSProxy
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • js中的正则表达式入门
  • Python_OOP
  • RxJS: 简单入门
  • Service Worker
  • SSH 免密登录
  • ViewService——一种保证客户端与服务端同步的方法
  • 关于使用markdown的方法(引自CSDN教程)
  • 简析gRPC client 连接管理
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 老板让我十分钟上手nx-admin
  • 通过npm或yarn自动生成vue组件
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • AI算硅基生命吗,为什么?
  • linux 淘宝开源监控工具tsar
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • ​比特币大跌的 2 个原因
  • %check_box% in rails :coditions={:has_many , :through}
  • (10)ATF MMU转换表
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (k8s中)docker netty OOM问题记录
  • (ZT)薛涌:谈贫说富
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)VC++中ondraw在什么时候调用的
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • ./configure,make,make install的作用(转)
  • .cfg\.dat\.mak(持续补充)
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .NET Core 中插件式开发实现
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .NET命令行(CLI)常用命令
  • .NET牛人应该知道些什么(2):中级.NET开发人员