【问题标题】:How to use jzy3d in android using eclipse?如何使用 Eclipse 在 android 中使用 jzy3d?
【发布时间】:2014-05-29 16:39:51
【问题描述】:

嗨。我想在 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 库添加到我的项目中。

【问题讨论】:

  • 为了利益,你有没有让这个适用于安卓系统?
  • 很遗憾没有

标签: android eclipse jogl jzy3d


【解决方案1】:

Android 不支持 AWT。此外,您使用来自 JOGL 1 的“jogl.jar”,而 JOGL 仅从其第二版开始支持 Android。请使用更新版本的 Jzy3D 并对 JOGL 和 GlueGen 执行相同操作。据我所知,Jzy3D 0.8 不支持 Android。

【讨论】:

    【解决方案2】:

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

    对于 Android,要求不依赖 AWT,通过忽略 jzy3d 主库中的 src/awt(忽略 swing 和 swt 也应该是一个好主意),这是可行的。 Jzy3d 有自己的 AWT Rectangle 等价物,所以它仍然会构建。 您必须派生 CanvasNewtAwt [1] 以使其与 Android 一起使用(请参阅 [2] 和 [3])。您还想了解 maven poms 如何选择 awt 和 swing 源 [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

    【讨论】:

      猜你喜欢
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 2013-06-15
      • 1970-01-01
      • 1970-01-01
      • 2011-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多