From 52a6cc5badf2d55a4024ca6fd788dfccddf44dd9 Mon Sep 17 00:00:00 2001 From: matlabbe Date: Fri, 16 Jun 2017 16:24:38 -0400 Subject: [PATCH] Tango: fixed sketchfab export ply error, exported objs are now rotated -90deg x-axis by default for sketchfab --- app/android/jni/RTABMapApp.cpp | 7 ++++ .../com/introlab/rtabmap/RTABMapActivity.java | 41 ++----------------- .../introlab/rtabmap/SketchfabActivity.java | 17 ++++---- .../src/com/introlab/rtabmap/Util.java | 37 +++++++++++++++++ 4 files changed, 55 insertions(+), 47 deletions(-) diff --git a/app/android/jni/RTABMapApp.cpp b/app/android/jni/RTABMapApp.cpp index 720752fc..9492e7b6 100644 --- a/app/android/jni/RTABMapApp.cpp +++ b/app/android/jni/RTABMapApp.cpp @@ -2480,8 +2480,15 @@ bool RTABMapApp::exportMesh( } else if(textureMesh->tex_materials.size()) { + // With Sketchfab, the OBJ models are rotated 90 degrees on x axis, so rotate -90 to have model in right position + pcl::PointCloud::Ptr cloud(new pcl::PointCloud); + pcl::fromPCLPointCloud2(textureMesh->cloud, *cloud); + pcl::PCLPointCloud2 tmp = textureMesh->cloud; + cloud = rtabmap::util3d::transformPointCloud(cloud, rtabmap::Transform(1,0,0,0, 0,0,1,0, 0,-1,0,0)); + pcl::toPCLPointCloud2(*cloud, textureMesh->cloud); LOGI("Saving obj (%d vertices, %d polygons) to %s.", (int)textureMesh->cloud.data.size()/textureMesh->cloud.point_step, totalPolygons, filePath.c_str()); success = pcl::io::saveOBJFile(filePath, *textureMesh) == 0; + textureMesh->cloud = tmp; if(success) { LOGI("Saved obj to %s!", filePath.c_str()); diff --git a/app/android/src/com/introlab/rtabmap/RTABMapActivity.java b/app/android/src/com/introlab/rtabmap/RTABMapActivity.java index 59ae37f4..fd10c73d 100644 --- a/app/android/src/com/introlab/rtabmap/RTABMapActivity.java +++ b/app/android/src/com/introlab/rtabmap/RTABMapActivity.java @@ -1168,41 +1168,6 @@ public class RTABMapActivity extends Activity implements OnClickListener { private RTABMapActivity getActivity() {return this;} - private String[] loadFileList(String directory, final boolean databasesOnly) { - File path = new File(directory); - String fileList[]; - try { - path.mkdirs(); - } - catch(SecurityException e) { - Log.e(TAG, "unable to write on the sd card " + e.toString()); - } - if(path.exists()) { - FilenameFilter filter = new FilenameFilter() { - - @Override - public boolean accept(File dir, String filename) { - File sel = new File(dir, filename); - if(databasesOnly) - { - return filename.compareTo(RTABMAP_TMP_DB) != 0 && filename.endsWith(".db"); - } - else - { - return sel.isFile(); - } - } - - }; - fileList = path.list(filter); - Arrays.sort(fileList); - } - else { - fileList = new String[0]; - } - return fileList; - } - private void standardOptimization() { mExportProgressDialog.setTitle("Post-Processing"); mExportProgressDialog.setMessage(String.format("Please wait while optimizing...")); @@ -1800,7 +1765,7 @@ public class RTABMapActivity extends Activity implements OnClickListener { } else if(itemId == R.id.open) { - final String[] files = loadFileList(mWorkingDirectory, true); + final String[] files = Util.loadFileList(mWorkingDirectory, true); if(files.length > 0) { String[] filesWithSize = new String[files.length]; @@ -1885,7 +1850,7 @@ public class RTABMapActivity extends Activity implements OnClickListener { File tmpDir = new File(mWorkingDirectory + RTABMAP_TMP_DIR); tmpDir.mkdirs(); - String[] fileNames = loadFileList(mWorkingDirectory + RTABMAP_TMP_DIR, false); + String[] fileNames = Util.loadFileList(mWorkingDirectory + RTABMAP_TMP_DIR, false); if(!DISABLE_LOG) Log.i(TAG, String.format("Deleting %d files in \"%s\"", fileNames.length, mWorkingDirectory + RTABMAP_TMP_DIR)); for(int i=0; i 0) { String[] filesToZip = new String[fileNames.length]; diff --git a/app/android/src/com/introlab/rtabmap/SketchfabActivity.java b/app/android/src/com/introlab/rtabmap/SketchfabActivity.java index be34b84a..9e4a61e1 100644 --- a/app/android/src/com/introlab/rtabmap/SketchfabActivity.java +++ b/app/android/src/com/introlab/rtabmap/SketchfabActivity.java @@ -135,15 +135,14 @@ public class SketchfabActivity extends Activity implements OnClickListener { // verify if we have all files if(extension.compareTo(".obj") == 0) { - File objFile = new File(mWorkingDirectory + RTABMapActivity.RTABMAP_TMP_DIR + RTABMapActivity.RTABMAP_TMP_FILENAME + ".obj"); - File mltFile = new File(mWorkingDirectory + RTABMapActivity.RTABMAP_TMP_DIR + RTABMapActivity.RTABMAP_TMP_FILENAME + ".mtl"); - File jpgFile = new File(mWorkingDirectory + RTABMapActivity.RTABMAP_TMP_DIR + RTABMapActivity.RTABMAP_TMP_FILENAME + ".jpg"); - if(objFile.exists() && mltFile.exists() && jpgFile.exists()) + String[] fileNames = Util.loadFileList(mWorkingDirectory + RTABMapActivity.RTABMAP_TMP_DIR, false); + if(fileNames.length > 0) { - files = new String[3]; - files[0] = objFile.getAbsolutePath(); - files[1] = mltFile.getAbsolutePath(); - files[2] = jpgFile.getAbsolutePath(); + files = new String[fileNames.length]; + for(int i=0; i