mirror of
https://github.com/introlab/rtabmap.git
synced 2026-09-02 01:20:25 +08:00
Tango: zipping obj files, exporting in Export sub directory
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
<!-- BEGIN_INCLUDE(manifest) -->
|
<!-- BEGIN_INCLUDE(manifest) -->
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="com.introlab.rtabmap"
|
package="com.introlab.rtabmap"
|
||||||
android:versionCode="40"
|
android:versionCode="41"
|
||||||
android:versionName="@RTABMAP_VERSION@">
|
android:versionName="@RTABMAP_VERSION@">
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.CAMERA" />
|
<uses-permission android:name="android.permission.CAMERA" />
|
||||||
|
|||||||
@@ -107,6 +107,7 @@ public class RTABMapActivity extends Activity implements OnClickListener {
|
|||||||
public static final String RTABMAP_TMP_DIR = "tmp/";
|
public static final String RTABMAP_TMP_DIR = "tmp/";
|
||||||
public static final String RTABMAP_TMP_FILENAME = "map";
|
public static final String RTABMAP_TMP_FILENAME = "map";
|
||||||
public static final String RTABMAP_SDCARD_PATH = "/sdcard/";
|
public static final String RTABMAP_SDCARD_PATH = "/sdcard/";
|
||||||
|
public static final String RTABMAP_EXPORT_DIR = "Export/";
|
||||||
|
|
||||||
public static final String RTABMAP_AUTH_TOKEN_KEY = "com.introlab.rtabmap.AUTH_TOKEN";
|
public static final String RTABMAP_AUTH_TOKEN_KEY = "com.introlab.rtabmap.AUTH_TOKEN";
|
||||||
public static final String RTABMAP_FILENAME_KEY = "com.introlab.rtabmap.FILENAME";
|
public static final String RTABMAP_FILENAME_KEY = "com.introlab.rtabmap.FILENAME";
|
||||||
@@ -1742,6 +1743,8 @@ public class RTABMapActivity extends Activity implements OnClickListener {
|
|||||||
|
|
||||||
File tmpDir = new File(mWorkingDirectory + RTABMAP_TMP_DIR);
|
File tmpDir = new File(mWorkingDirectory + RTABMAP_TMP_DIR);
|
||||||
tmpDir.mkdirs();
|
tmpDir.mkdirs();
|
||||||
|
File exportDir = new File(mWorkingDirectory + RTABMAP_EXPORT_DIR);
|
||||||
|
exportDir.mkdirs();
|
||||||
|
|
||||||
Thread exportThread = new Thread(new Runnable() {
|
Thread exportThread = new Thread(new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
@@ -1943,7 +1946,7 @@ public class RTABMapActivity extends Activity implements OnClickListener {
|
|||||||
dialog.dismiss();
|
dialog.dismiss();
|
||||||
if(!fileName.isEmpty())
|
if(!fileName.isEmpty())
|
||||||
{
|
{
|
||||||
File newFile = new File(mWorkingDirectory + fileName + extension);
|
File newFile = new File(mWorkingDirectory + RTABMAP_EXPORT_DIR + fileName + (mExportedOBJ?".zip":".ply"));
|
||||||
if(newFile.exists())
|
if(newFile.exists())
|
||||||
{
|
{
|
||||||
new AlertDialog.Builder(getActivity())
|
new AlertDialog.Builder(getActivity())
|
||||||
@@ -1975,43 +1978,40 @@ public class RTABMapActivity extends Activity implements OnClickListener {
|
|||||||
|
|
||||||
private void writeExportedFiles(String fileName, boolean isOBJ)
|
private void writeExportedFiles(String fileName, boolean isOBJ)
|
||||||
{
|
{
|
||||||
final String extension = mExportedOBJ?".obj":".ply";
|
String pathHuman;
|
||||||
final String path = mWorkingDirectory + fileName + extension;
|
|
||||||
final String pathHuman = mWorkingDirectoryHuman + fileName + extension;
|
|
||||||
|
|
||||||
boolean success = true;
|
boolean success = true;
|
||||||
if(mExportedOBJ)
|
if(mExportedOBJ)
|
||||||
{
|
{
|
||||||
File toOBJFile = new File(mWorkingDirectory + fileName + extension);
|
final String zipOutput = mWorkingDirectory+RTABMAP_EXPORT_DIR+fileName+".zip";
|
||||||
File toMTLFile = new File(mWorkingDirectory + fileName + ".mtl");
|
pathHuman = mWorkingDirectoryHuman + RTABMAP_EXPORT_DIR + fileName + ".zip";
|
||||||
File toJPGFile = new File(mWorkingDirectory + fileName + ".jpg");
|
|
||||||
|
|
||||||
toOBJFile.delete();
|
String[] filesToZip = new String[3];
|
||||||
toMTLFile.delete();
|
filesToZip[0] = mWorkingDirectory + RTABMAP_TMP_DIR + RTABMAP_TMP_FILENAME + ".obj";
|
||||||
toJPGFile.delete();
|
filesToZip[1] = mWorkingDirectory + RTABMAP_TMP_DIR + RTABMAP_TMP_FILENAME + ".mtl";
|
||||||
|
filesToZip[2] = mWorkingDirectory + RTABMAP_TMP_DIR + RTABMAP_TMP_FILENAME + ".jpg";
|
||||||
|
|
||||||
File fromOBJFile = new File(mWorkingDirectory + RTABMAP_TMP_DIR + RTABMAP_TMP_FILENAME + extension);
|
File toZIPFile = new File(zipOutput);
|
||||||
File fromMTLFile = new File(mWorkingDirectory + RTABMAP_TMP_DIR + RTABMAP_TMP_FILENAME + ".mtl");
|
toZIPFile.delete();
|
||||||
File fromJPGFile = new File(mWorkingDirectory + RTABMAP_TMP_DIR + RTABMAP_TMP_FILENAME + ".jpg");
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
copy(fromOBJFile,toOBJFile);
|
Util.zip(filesToZip, zipOutput);
|
||||||
copy(fromMTLFile,toMTLFile);
|
mToast.makeText(getActivity(), String.format("Mesh \"%s\" successfully exported!", pathHuman), mToast.LENGTH_LONG).show();
|
||||||
copy(fromJPGFile,toJPGFile);
|
|
||||||
mToast.makeText(getActivity(), String.format("Mesh \"%s\" (with texture \"%s\" and \"%s\") successfully exported!", pathHuman, fileName + ".jpg", fileName + ".mtl"), mToast.LENGTH_LONG).show();
|
|
||||||
}
|
}
|
||||||
catch(IOException e)
|
catch(IOException e)
|
||||||
{
|
{
|
||||||
mToast.makeText(getActivity(), String.format("Exporting mesh \"%s\" (with texture \"%s\" and \"%s\") failed! Error=%s", pathHuman, fileName + ".jpg", fileName + ".mtl", e.getMessage()), mToast.LENGTH_LONG).show();
|
mToast.makeText(getActivity(), String.format("Exporting mesh \"%s\" failed! Error=%s", pathHuman, e.getMessage()), mToast.LENGTH_LONG).show();
|
||||||
success = false;
|
success = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
final String path = mWorkingDirectory + RTABMAP_EXPORT_DIR+ fileName + ".ply";
|
||||||
|
pathHuman = mWorkingDirectoryHuman + RTABMAP_EXPORT_DIR + fileName + ".ply";
|
||||||
|
|
||||||
File toPLYFile = new File(path);
|
File toPLYFile = new File(path);
|
||||||
toPLYFile.delete();
|
toPLYFile.delete();
|
||||||
File fromPLYFile = new File(mWorkingDirectory + RTABMAP_TMP_DIR + RTABMAP_TMP_FILENAME + extension);
|
File fromPLYFile = new File(mWorkingDirectory + RTABMAP_TMP_DIR + RTABMAP_TMP_FILENAME + ".ply");
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,27 +1,8 @@
|
|||||||
package com.introlab.rtabmap;
|
package com.introlab.rtabmap;
|
||||||
|
|
||||||
import java.io.BufferedInputStream;
|
|
||||||
import java.io.BufferedOutputStream;
|
|
||||||
import java.io.BufferedReader;
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.net.SocketTimeoutException;
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.zip.ZipEntry;
|
|
||||||
import java.util.zip.ZipOutputStream;
|
|
||||||
|
|
||||||
import org.apache.http.HttpEntity;
|
|
||||||
import org.apache.http.HttpResponse;
|
|
||||||
import org.apache.http.client.HttpClient;
|
|
||||||
import org.apache.http.client.methods.HttpPatch;
|
|
||||||
import org.apache.http.entity.StringEntity;
|
|
||||||
import org.apache.http.impl.client.DefaultHttpClient;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
@@ -37,7 +18,6 @@ import android.os.AsyncTask;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import android.text.Editable;
|
import android.text.Editable;
|
||||||
import android.text.InputType;
|
|
||||||
import android.text.SpannableString;
|
import android.text.SpannableString;
|
||||||
import android.text.TextWatcher;
|
import android.text.TextWatcher;
|
||||||
import android.text.method.LinkMovementMethod;
|
import android.text.method.LinkMovementMethod;
|
||||||
@@ -52,7 +32,6 @@ import android.widget.CheckBox;
|
|||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
import android.widget.ToggleButton;
|
|
||||||
|
|
||||||
public class SketchfabActivity extends Activity implements OnClickListener {
|
public class SketchfabActivity extends Activity implements OnClickListener {
|
||||||
|
|
||||||
@@ -60,8 +39,6 @@ public class SketchfabActivity extends Activity implements OnClickListener {
|
|||||||
private static final String CLIENT_ID = "RXrIJYAwlTELpySsyM8TrK9r3kOGQ5Qjj9VVDIfV";
|
private static final String CLIENT_ID = "RXrIJYAwlTELpySsyM8TrK9r3kOGQ5Qjj9VVDIfV";
|
||||||
private static final String REDIRECT_URI = "https://introlab.github.io/rtabmap/oauth2_redirect";
|
private static final String REDIRECT_URI = "https://introlab.github.io/rtabmap/oauth2_redirect";
|
||||||
|
|
||||||
public static final int ZIP_BUFFER_SIZE = 1<<20; // 1MB
|
|
||||||
|
|
||||||
ProgressDialog mProgressDialog;
|
ProgressDialog mProgressDialog;
|
||||||
|
|
||||||
private Dialog mAuthDialog;
|
private Dialog mAuthDialog;
|
||||||
@@ -199,6 +176,13 @@ public class SketchfabActivity extends Activity implements OnClickListener {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isNetworkAvailable() {
|
||||||
|
ConnectivityManager connectivityManager
|
||||||
|
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||||
|
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
|
||||||
|
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
|
||||||
|
}
|
||||||
|
|
||||||
private void authorizeAndPublish(final String[] filesToZip, final String fileName)
|
private void authorizeAndPublish(final String[] filesToZip, final String fileName)
|
||||||
{
|
{
|
||||||
if(!isNetworkAvailable())
|
if(!isNetworkAvailable())
|
||||||
@@ -281,7 +265,7 @@ public class SketchfabActivity extends Activity implements OnClickListener {
|
|||||||
Thread workingThread = new Thread(new Runnable() {
|
Thread workingThread = new Thread(new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
try{
|
try{
|
||||||
zip(filesToZip, zipOutput);
|
Util.zip(filesToZip, zipOutput);
|
||||||
runOnUiThread(new Runnable() {
|
runOnUiThread(new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
mProgressDialog.dismiss();
|
mProgressDialog.dismiss();
|
||||||
@@ -341,48 +325,6 @@ public class SketchfabActivity extends Activity implements OnClickListener {
|
|||||||
workingThread.start();
|
workingThread.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isNetworkAvailable() {
|
|
||||||
ConnectivityManager connectivityManager
|
|
||||||
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
|
|
||||||
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
|
|
||||||
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void zip(String file, String zipFile) throws IOException {
|
|
||||||
Log.i(RTABMapActivity.TAG, "Zipping " + file +" to " + zipFile);
|
|
||||||
String[] files = new String[1];
|
|
||||||
files[0] = file;
|
|
||||||
zip(files, zipFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void zip(String[] files, String zipFile) throws IOException {
|
|
||||||
Log.i(RTABMapActivity.TAG, "Zipping " + String.valueOf(files.length) +" files to " + zipFile);
|
|
||||||
BufferedInputStream origin = null;
|
|
||||||
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFile)));
|
|
||||||
try {
|
|
||||||
byte data[] = new byte[ZIP_BUFFER_SIZE];
|
|
||||||
|
|
||||||
for (int i = 0; i < files.length; i++) {
|
|
||||||
FileInputStream fi = new FileInputStream(files[i]);
|
|
||||||
origin = new BufferedInputStream(fi, ZIP_BUFFER_SIZE);
|
|
||||||
try {
|
|
||||||
ZipEntry entry = new ZipEntry(files[i].substring(files[i].lastIndexOf("/") + 1));
|
|
||||||
out.putNextEntry(entry);
|
|
||||||
int count;
|
|
||||||
while ((count = origin.read(data, 0, ZIP_BUFFER_SIZE)) != -1) {
|
|
||||||
out.write(data, 0, count);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
finally {
|
|
||||||
origin.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
finally {
|
|
||||||
out.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class uploadToSketchfabTask extends AsyncTask<String, Void, Void>
|
private class uploadToSketchfabTask extends AsyncTask<String, Void, Void>
|
||||||
{
|
{
|
||||||
String mModelUri;
|
String mModelUri;
|
||||||
|
|||||||
56
app/android/src/com/introlab/rtabmap/Util.java
Normal file
56
app/android/src/com/introlab/rtabmap/Util.java
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
package com.introlab.rtabmap;
|
||||||
|
|
||||||
|
import java.io.BufferedInputStream;
|
||||||
|
import java.io.BufferedOutputStream;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.zip.ZipEntry;
|
||||||
|
import java.util.zip.ZipOutputStream;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.net.ConnectivityManager;
|
||||||
|
import android.net.NetworkInfo;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
public class Util {
|
||||||
|
|
||||||
|
public static final int ZIP_BUFFER_SIZE = 1<<20; // 1MB
|
||||||
|
|
||||||
|
public static void zip(String file, String zipFile) throws IOException {
|
||||||
|
Log.i(RTABMapActivity.TAG, "Zipping " + file +" to " + zipFile);
|
||||||
|
String[] files = new String[1];
|
||||||
|
files[0] = file;
|
||||||
|
zip(files, zipFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void zip(String[] files, String zipFile) throws IOException {
|
||||||
|
Log.i(RTABMapActivity.TAG, "Zipping " + String.valueOf(files.length) +" files to " + zipFile);
|
||||||
|
BufferedInputStream origin = null;
|
||||||
|
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFile)));
|
||||||
|
try {
|
||||||
|
byte data[] = new byte[ZIP_BUFFER_SIZE];
|
||||||
|
|
||||||
|
for (int i = 0; i < files.length; i++) {
|
||||||
|
FileInputStream fi = new FileInputStream(files[i]);
|
||||||
|
origin = new BufferedInputStream(fi, ZIP_BUFFER_SIZE);
|
||||||
|
try {
|
||||||
|
ZipEntry entry = new ZipEntry(files[i].substring(files[i].lastIndexOf("/") + 1));
|
||||||
|
out.putNextEntry(entry);
|
||||||
|
int count;
|
||||||
|
while ((count = origin.read(data, 0, ZIP_BUFFER_SIZE)) != -1) {
|
||||||
|
out.write(data, 0, count);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
origin.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
out.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user