スタックオーバーフラワー、
Androidスマートフォンを使用して3Dフォームを作成する簡単なプロジェクトを行っています。Android Processing を使用してシンプルなアプリを作成しています。
私のコードは 3D 形状を作成し、.STL ファイルとして保存します。それは私のラップトップで動作し、.STL ファイルを保存しますが、アプリ内にあります。バージョン、携帯電話の外部ストレージ/SD カードに保存する必要があります (HTC Sensation)。私が使用している Processing ライブラリの「保存」関数 (writeSTL) が記述されているため、そうではありません。
ここに助けを求めて投稿しました(私のコードのより完全なコードもここにあります):
...そして、ライブラリを書いたマリウス・ワッツは、 writeSTL() コードはほとんどスタンドアロンであり、欠けているのは出力ストリームを作成するコードを置き換えることだけです (またはそうすべきです)。これは Android で動作するように変更する必要があります。基本的に、この行:
FileOutputStream out=(FileOutputStream)UIO.getOutputStream(p.sketchPath(filename));
私は通常、Processing に必要なことを実行させることはできますが、それ以上のことはできないという点で、優れたプログラマーではありません。この問題は私を打ち負かしました。行を置き換える正しいコードのアイデアを探しています:...
FileOutputStream out=(FileOutputStream)UIO.getOutputStream(p.sketchPath(filename));
...「Android にやさしい」何かを使って。getExternalStorageDirectory() の呼び出しは機能するはずですが、正しい構造を見つけることができません。
writeSTL 関数のコードは次のとおりです。
import java.io.*;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
/**
* Output binary STL file of mesh geometry.
* @param p Reference to PApplet instance
* @param filename Name of file to save to
*/
public void customWriteSTL(UGeometry geo, PApplet p, String filename) {
byte [] header;
ByteBuffer buf;
UFace f;
try {
if (!filename.toLowerCase().endsWith("stl")) filename+=".stl";
FileOutputStream out=(FileOutputStream)UIO.getOutputStream(p.sketchPath(filename));
buf = ByteBuffer.allocate(200);
header=new byte[80];
buf.get(header, 0, 80);
out.write(header);
buf.rewind();
buf.order(ByteOrder.LITTLE_ENDIAN);
buf.putInt(geo.faceNum);
buf.rewind();
buf.get(header, 0, 4);
out.write(header, 0, 4);
buf.rewind();
UUtil.logDivider("Writing STL '"+filename+"' "+geo.faceNum);
buf.clear();
header=new byte[50];
if (geo.bb!=null) UUtil.log(geo.bb.toString());
for (int i=0; i<geo.faceNum; i++) {
f=geo.face[i];
if (f.n==null) f.calcNormal();
buf.rewind();
buf.putFloat(f.n.x);
buf.putFloat(f.n.y);
buf.putFloat(f.n.z);
for (int j=0; j<3; j++) {
buf.putFloat(f.v[j].x);
buf.putFloat(f.v[j].y);
buf.putFloat(f.v[j].z);
}
buf.rewind();
buf.get(header);
out.write(header);
}
out.flush();
out.close();
UUtil.log("Closing '"+filename+"'. "+geo.faceNum+" triangles written.\n");
}
catch (Exception e) {
e.printStackTrace();
}
}
どんな提案もありがたく受け取られます。
前もって感謝します。