前言
用过matlab,scilab,octave,python的人,对三维曲面都有一定的了解,里面有一套针对曲面绘制的函数方法,诸如mesh、surface、contour以及网格插值函数interp、griddata等等。现在普遍的java web开发都有或多或少的图形展示界面,前端方面展示的一般都是基于图表形式的控件,有echart 、highchart等,但这些都只限于二维的图形。当让可以用客户端去做三维展现,这里就不考虑了。是否有一种东西,既可以做三维展示,旋转曲面,又可以实现数据的交互。
可采用将jzy3d绘制的图形嵌入到applet中,让applet去处理数据交互!
三维控件jzy3d
首先的考量是控件能绘制等值面,曲面,其次最好是java实现的,好与后台交互。net的控件之前也考虑过,好像也能做到,忘记出处了。jzy3d基于awt,swt开发的,可以直接基于客户端运行,同时新的版本基于jogl 可以用applet展现三维。这正是我所需要的。
后台交互
后台框架现在多如牛毛,springmvc , serverlet等,我采用的是springboot,方便开发集成。其中很重要的一点,applet只能与applet的服务器交互,其他的是不允许的。
代码片段
//html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<title>Insert title here</title>
</head>
<body>
<p>hellow</p>
<applet code="appletcontour.appletcontour.HelloApplet" width=800 height=600 codebase="./"
archive="jzy3d-api-1.0.1-SNAPSHOT.jar,
jzy3d-depthpeeling-1.0.1-SNAPSHOT.jar,
jzy3d-guide-1.0.1-SNAPSHOT.jar,
jzy3d-jdt-core-1.0.1-SNAPSHOT.jar,
gluegen-rt.jar,
gluegen-rt-natives-windows-i586.jar
gluegen-rt-natives-windows-amd64.jar,
jogl-all.jar,
log4j-1.2.16.jar,
jogl-all-natives-windows-i586.jar
jogl-all-natives-windows-amd64.jar"></applet>
</body>
</html>
//applet
package appletcontour.appletcontour;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JApplet;
import org.jzy3d.chart.Chart;
import org.jzy3d.chart.ChartLauncher;
import org.jzy3d.chart.Settings;
import org.jzy3d.demos.surface.WireSurfaceDemo;
import org.jzy3d.plot3d.rendering.canvas.ICanvas;
public class HelloApplet extends JApplet implements ActionListener {
/**
*
*/
private static final long serialVersionUID = -8375384122588025739L;
private Chart chart;
private ICanvas canvas;
public void paint(Graphics g) {
super.paint(g);
}
@Override
public void init() {
try {
WireSurfaceDemo demo = new WireSurfaceDemo();
Settings.getInstance().setHardwareAccelerated(true);
demo.init();
this.chart = demo.getChart();
boolean allowSlaveThreadOnDoubleClick = true;
boolean startThreadImmediatly = true;
ChartLauncher.configureControllers(chart, "title",
allowSlaveThreadOnDoubleClick, startThreadImmediatly);
chart.render();
this.canvas = chart.getCanvas();
getContentPane().add((java.awt.Component) this.canvas);
} catch (Exception e) {
e.printStackTrace();
} finally {
}
}
@Override
public void actionPerformed(ActionEvent e) {
}
}
//效果参考
http://download.jzy3d.org/api/0.9/applet/jzy3d-applet.html
调试
(1)用appletviewer调试,开java console在“配置java”处。
(2)暴力删除第三方jar包中 trustLibrary:true标记, jre\lib\security\java.policy添加 grant{ permission java.security.AllPermission;}
(3) “配置java”处添加站点 http://127.0.0.1:8080/