Как использовать jzy3d в Android с помощью Eclipse?

Привет. Я хочу создать график 3dplot в Android. Я хочу использовать 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 в мой проект.

введите описание изображения здесь

2 ответа

AWT не поддерживается в Android. Кроме того, вы используете "jogl.jar", который поставляется из JOGL 1, тогда как JOGL поддерживает Android только со второй версии. Пожалуйста, используйте более свежую версию Jzy3D и сделайте то же самое для JOGL и GlueGen. Насколько я знаю, Jzy3D 0.8 не поддерживает Android.

JOGL2, базовый фреймворк для рендеринга Jzy3d 0.9.x, позволяет развертывать на Android, поэтому Jzy3d сможет это сделать.

Для Android существует требование не зависеть от AWT, что становится возможным благодаря игнорированию src / awt в основной библиотеке jzy3d (игнорирование swing и swt также должно быть хорошей идеей). Jzy3d имеет свои эквиваленты для AWT Rectangle и тому подобное, поэтому он все равно будет строить. Вам нужно получить CanvasNewtAwt [1], чтобы он работал с Android (см. [2] и [3]). Вы также захотите посмотреть, как maven poms выбирают awt и источник качания [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

Другие вопросы по тегам