如何在android中使用eclipse使用jzy3d?

时间:2014-05-29 16:39:52

标签: android eclipse jogl jzy3d

您好。我想在android中创建一个3dplot图。我想使用jzy3d lib并找到这个例子开始。

import org.jzy3d.chart.Chart;
import org.jzy3d.colors.Color;
import org.jzy3d.colors.ColorMapper;
import org.jzy3d.colors.colormaps.ColorMapRainbow;
import org.jzy3d.maths.Range;
import org.jzy3d.plot3d.builder.Builder;
import org.jzy3d.plot3d.builder.Mapper;
import org.jzy3d.plot3d.builder.concrete.OrthonormalGrid;
import org.jzy3d.plot3d.primitives.Shape;
import org.jzy3d.plot3d.rendering.canvas.Quality;
import org.jzy3d.ui.ChartLauncher;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Mapper mapper = new Mapper() {
        public double f(double x, double y) {
            return 10 * Math.sin(x / 10) * Math.cos(y / 20) * x;
        }
    };

    // Define range and precision for the function to plot
    Range range = new Range(-150, 150);
    int steps = 50;

    // Create a surface drawing that function
    Shape surface = (Shape) Builder.buildOrthonormal(new OrthonormalGrid(range, steps, range, steps), mapper);
    surface.setColorMapper(new ColorMapper(new ColorMapRainbow(), surface.getBounds().getZmin(), surface.getBounds().getZmax()));
    surface.setFaceDisplayed(true);
    surface.setWireframeDisplayed(false);
    surface.setWireframeColor(Color.BLACK);

    // Create a chart and add the surface
    Chart chart = new Chart(Quality.Advanced);
    chart.getScene().getGraph().add(surface);
    ChartLauncher.openChart(chart);
}

但是当我想运行它时会出现以下错误消息:

05-29 20:10:16.685: E/AndroidRuntime(20113): java.lang.NoClassDefFoundError: org.jzy3d.plot3d.rendering.canvas.CanvasAWT     

当然我将jzy3d,jogl,swt,gluegen libs添加到我的项目中。

enter image description here

2 个答案:

答案 0 :(得分:1)

Android下不支持AWT。而且,你使用" jogl.jar"它来自JOGL 1,而JOGL仅支持Android,因为它的第二个版本。请使用更新版本的Jzy3D并对JOGL和GlueGen执行相同操作。据我所知,Jzy3D 0.8并不支持Android。

答案 1 :(得分:0)

JOGL2,Jzy3d 0.9.x渲染的底层框架允许在Android上进行部署,因此Jzy3d将能够这样做。

对于Android,需要不依赖于AWT,这可以通过忽略jzy3d主库中的src / awt来实现(忽略swing和swt也应该是一个好主意)。 Jzy3d有自己的等同于AWT矩形&喜欢这样它仍然会建立。 您必须派生CanvasNewtAwt [1]才能使其与Android一起使用(参见[2]和[3])。你还想看看maven poms如何选择awt和swing source [4]。

[1] http://doc.jzy3d.org/javadoc/0.9.1/jzy3d-api/org/jzy3d/plot3d/rendering/canvas/CanvasNewtAwt.html

[2] http://forum.jogamp.org/Migrate-a-Java-application-using-Jogl-to-Android-tablet-td3732586.html

[3] http://jogamp.org/jogl/doc/NEWT-Overview.html

[4] https://github.com/jzy3d/jzy3d-api/blob/master/jzy3d-api/pom.xml