0

I'm using the ARexampleLocationBased tutorial ,the POIS ar correctly shown but the annottations are not shown ,,the program works correct but the billoboards image down the POI's are not visible

package pfg.proyecto.com.proyecto;

import android.view.View;

import com.metaio.sdk.ARELActivity;


public class ARELViewActivity extends ARELActivity
{
    @Override
protected int getGUILayout()
{
    return R.layout.activity_main;
}

public void onButtonClick(View v)
{
    finish();
}

}

and this is the main activity code

 package pfg.proyecto.com.proyecto;

 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.text.TextPaint;
 import android.util.Log;
 import android.view.View;

import com.metaio.cloud.plugin.util.MetaioCloudUtils;
import com.metaio.sdk.ARELInterpreterAndroidJava;
import com.metaio.sdk.ARViewActivity;
import com.metaio.sdk.MetaioDebug;
import com.metaio.sdk.jni.AnnotatedGeometriesGroupCallback;
import com.metaio.sdk.jni.EGEOMETRY_FOCUS_STATE;
import com.metaio.sdk.jni.IAnnotatedGeometriesGroup;
import com.metaio.sdk.jni.IGeometry;
import com.metaio.sdk.jni.IMetaioSDKCallback;
import com.metaio.sdk.jni.IRadar;
import com.metaio.sdk.jni.ImageStruct;
import com.metaio.sdk.jni.LLACoordinate;
import com.metaio.sdk.jni.Rotation;
import com.metaio.sdk.jni.SensorValues;
import com.metaio.sdk.jni.Vector3d;
import com.metaio.tools.io.AssetsManager;

import java.io.File;
import java.io.IOException;
import java.util.concurrent.locks.Lock;

public class MainActivity extends ARViewActivity
{
    private IAnnotatedGeometriesGroup mAnnotatedGeometriesGroup;

    private MyAnnotatedGeometriesGroupCallback mAnnotatedGeometriesGroupCallback;

/**
 * Geometries
 */
private IGeometry mLondonGeo;
private IGeometry mMunichGeo;
private IGeometry mRomeGeo;
private IGeometry mTokyoGeo;
private IGeometry mParisGeo;


private IRadar mRadar;

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    // Set GPS tracking configuration
    boolean result = metaioSDK.setTrackingConfiguration("GPS", false);
    new LoadAssets().execute(0);
    MetaioDebug.log("Tracking data loaded: " + result);
}

@Override
protected void onDestroy()
{
    // Break circular reference of Java objects
    if (mAnnotatedGeometriesGroup != null)
    {
        mAnnotatedGeometriesGroup.registerCallback(null);
    }

    if (mAnnotatedGeometriesGroupCallback != null)
    {
        mAnnotatedGeometriesGroupCallback.delete();
        mAnnotatedGeometriesGroupCallback = null;
    }

    super.onDestroy();
}

@Override
public void onDrawFrame()
{
    if (metaioSDK != null && mSensors != null)
    {
        SensorValues sensorValues = mSensors.getSensorValues();

        float heading = 0.0f;
        if (sensorValues.hasAttitude())
        {
            float m[] = new float[9];
            sensorValues.getAttitude().getRotationMatrix(m);

            Vector3d v = new Vector3d(m[6], m[7], m[8]);
            v.normalize();

            heading = (float)(-Math.atan2(v.getY(), v.getX()) - Math.PI / 2.0);
        }

        IGeometry geos[] = new IGeometry[] {mLondonGeo, mParisGeo, mRomeGeo, mTokyoGeo,};
        Rotation rot = new Rotation((float)(Math.PI / 2.0), 0.0f, -heading);
        for (IGeometry geo : geos)
        {
            if (geo != null)
            {
                geo.setRotation(rot);
            }
        }
    }

    super.onDrawFrame();
}

public void onButtonClick(View v)
{
    finish();
}

@Override
protected int getGUILayout()
{
    return R.layout.activity_main;
}

@Override
protected IMetaioSDKCallback getMetaioSDKCallbackHandler()
{
    return null;
}

@Override
protected void loadContents()
{
    mAnnotatedGeometriesGroup = metaioSDK.createAnnotatedGeometriesGroup();
    mAnnotatedGeometriesGroupCallback = new MyAnnotatedGeometriesGroupCallback();
    mAnnotatedGeometriesGroup.registerCallback(mAnnotatedGeometriesGroupCallback);

    // Clamp geometries' Z position to range [5000;200000] no matter how close or far they are
    // away.
    // This influences minimum and maximum scaling of the geometries (easier for development).
    metaioSDK.setLLAObjectRenderingLimits(5, 200);

    // Set render frustum accordingly
    metaioSDK.setRendererClippingPlaneLimits(10, 220000);

    // let's create LLA objects for known cities
    LLACoordinate munich = new LLACoordinate(48.142573, 11.550321, 0, 0);
    LLACoordinate london = new LLACoordinate(51.50661, -0.130463, 0, 0);
    LLACoordinate tokyo = new LLACoordinate(35.657464, 139.773865, 0, 0);
    LLACoordinate rome = new LLACoordinate(41.90177, 12.45987, 0, 0);
    LLACoordinate paris = new LLACoordinate(48.85658, 2.348671, 0, 0);
    LLACoordinate parque = new LLACoordinate(36.465985, -6.201081, 0, 0);

    // Load some POIs. Each of them has the same shape at its geoposition. We pass a string
    // (const char*) to IAnnotatedGeometriesGroup::addGeometry so that we can use it as POI
    // title
    // in the callback, in order to create an annotation image with the title on it.
    mLondonGeo = createPOIGeometry(london);
    mAnnotatedGeometriesGroup.addGeometry(mLondonGeo, "London");

    mParisGeo = createPOIGeometry(paris);
    mAnnotatedGeometriesGroup.addGeometry(mParisGeo, "Paris");

    mRomeGeo = createPOIGeometry(rome);
    mAnnotatedGeometriesGroup.addGeometry(mRomeGeo, "Rome");

    mTokyoGeo = createPOIGeometry(tokyo);
    mAnnotatedGeometriesGroup.addGeometry(mTokyoGeo, "Tokyo");



    File metaioManModel =
            AssetsManager.getAssetPathAsFile(getApplicationContext(),
                    "metaioman.md2");
    if (metaioManModel != null)
    {
        mMunichGeo = metaioSDK.createGeometry(metaioManModel);
        if (mMunichGeo != null)
        {
            mMunichGeo.setTranslationLLA(munich);
            mMunichGeo.setLLALimitsEnabled(true);
            mMunichGeo.setScale(500);
        }
        else
        {
            MetaioDebug.log(Log.ERROR, "Error loading geometry: " + metaioManModel);
        }
    }

    // create radar
    mRadar = metaioSDK.createRadar();
    mRadar.setBackgroundTexture(AssetsManager.getAssetPathAsFile(getApplicationContext(),
            "radar.png"));
    mRadar.setObjectsDefaultTexture(AssetsManager.getAssetPathAsFile(getApplicationContext(),
            "yellow.png"));
    mRadar.setRelativeToScreen(IGeometry.ANCHOR_TL);

    // add geometries to the radar
    mRadar.add(mLondonGeo);
    mRadar.add(mMunichGeo);
    mRadar.add(mTokyoGeo);
    mRadar.add(mParisGeo);
    mRadar.add(mRomeGeo);
}

private IGeometry createPOIGeometry(LLACoordinate lla)
{
    final File path =
            AssetsManager.getAssetPathAsFile(getApplicationContext(),
                    "ExamplePOI.obj");
    if (path != null)
    {
        IGeometry geo = metaioSDK.createGeometry(path);
        geo.setTranslationLLA(lla);
        geo.setLLALimitsEnabled(true);
        geo.setScale(100);
        return geo;
    }
    else
    {
        MetaioDebug.log(Log.ERROR, "Missing files for POI geometry");
        return null;
    }
}

@Override
protected void onGeometryTouched(final IGeometry geometry)
{
    MetaioDebug.log("Geometry selected: " + geometry);

    mSurfaceView.queueEvent(new Runnable()
    {

        @Override
        public void run()
        {
            mRadar.setObjectsDefaultTexture(AssetsManager.getAssetPathAsFile(getApplicationContext(),
                    "yellow.png"));
            mRadar.setObjectTexture(geometry, AssetsManager.getAssetPathAsFile(getApplicationContext(),
                    "red.png"));
            mAnnotatedGeometriesGroup.setSelectedGeometry(geometry);
        }
    });
}

final class MyAnnotatedGeometriesGroupCallback extends AnnotatedGeometriesGroupCallback
{
    Bitmap mAnnotationBackground, mEmptyStarImage, mFullStarImage;
    int mAnnotationBackgroundIndex;
    ImageStruct texture;
    String[] textureHash = new String[1];
    TextPaint mPaint;
    Lock geometryLock;


    Bitmap inOutCachedBitmaps[] = new Bitmap[] {mAnnotationBackground, mEmptyStarImage, mFullStarImage};
    int inOutCachedAnnotationBackgroundIndex[] = new int[] {mAnnotationBackgroundIndex};

    public MyAnnotatedGeometriesGroupCallback()
    {
        mPaint = new TextPaint();
        mPaint.setFilterBitmap(true); // enable dithering
        mPaint.setAntiAlias(true); // enable anti-aliasing
    }

    @Override
    public IGeometry loadUpdatedAnnotation(IGeometry geometry, Object userData, IGeometry existingAnnotation)
    {
        if (userData == null)
        {
            return null;
        }

        if (existingAnnotation != null)
        {
            // We don't update the annotation if e.g. distance has changed
            return existingAnnotation;
        }

        String title = (String)userData; // as passed to addGeometry
        LLACoordinate location = geometry.getTranslationLLA();
        float distance = (float)MetaioCloudUtils.getDistanceBetweenTwoCoordinates(location, mSensors.getLocation());
        Bitmap thumbnail = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
        try
        {
            texture =
                    ARELInterpreterAndroidJava.getAnnotationImageForPOI(title, title, distance, "5", thumbnail,
                            null,
                            metaioSDK.getRenderSize(), MainActivity.this,
                            mPaint, inOutCachedBitmaps, inOutCachedAnnotationBackgroundIndex, textureHash);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            if (thumbnail != null)
                thumbnail.recycle();
            thumbnail = null;
        }

        mAnnotationBackground = inOutCachedBitmaps[0];
        mEmptyStarImage = inOutCachedBitmaps[1];
        mFullStarImage = inOutCachedBitmaps[2];
        mAnnotationBackgroundIndex = inOutCachedAnnotationBackgroundIndex[0];

        IGeometry resultGeometry = null;

        if (texture != null)
        {
            if (geometryLock != null)
            {
                geometryLock.lock();
            }

            try
            {
                // Use texture "hash" to ensure that SDK loads new texture if texture changed
                resultGeometry = metaioSDK.createGeometryFromImage(textureHash[0], texture, true, false);
            }
            finally
            {
                if (geometryLock != null)
                {
                    geometryLock.unlock();
                }
            }
        }

        return resultGeometry;
    }

    @Override
    public void onFocusStateChanged(IGeometry geometry, Object userData, EGEOMETRY_FOCUS_STATE oldState,
                                    EGEOMETRY_FOCUS_STATE newState)
    {
        MetaioDebug.log("onFocusStateChanged for " + (String)userData + ", " + oldState + "->" + newState);
    }
}

public class LoadAssets extends AsyncTask<Integer, Integer, Boolean> {
    @Override
    protected Boolean doInBackground(Integer... params) {
        try
        {
            // Extract all assets and overwrite existing files if debug build
            AssetsManager.extractAllAssets(getApplicationContext(), BuildConfig.DEBUG);
        }
        catch (IOException e)
        {
            MetaioDebug.log(Log.ERROR, "Error extracting assets: " + e.getMessage());
            MetaioDebug.printStackTrace(Log.ERROR, e);
            return false;
        }
        return true;
    }
}

}

Somebody knows what is wrong?

Gagravarr
  • 47,320
  • 10
  • 111
  • 156
AFS
  • 1,433
  • 6
  • 28
  • 52

1 Answers1

0

if you use skd 5.3 or later you must copy assets/junaio folder of tutorial(example_SDK) into your assets folder so your poi shown. i've just found it i am working on that right know. my poi.obj rotates...

Javad Karbasian
  • 93
  • 1
  • 1
  • 6