【WebPerformer】明細に行挿入機能①

4月も最終日という事で、、、
天候が安定しない日々が続いておりますが、この時期の体調管理には気を付けて下さい。

今回もWebPerformerのユーザ定義実装についての記事になります。
意外にもWebPerformer関連の地味なユーザ定義の情報は評判が良いらしく、引き続き投稿していこうかと思います。

WebPerformerの標準機能だと、明細に行の追加を行う際、最終行に追加されます。
ですが、システムをご利用になるお客様の中では、[途中行に新規行を追加したい]と考えておられる方も多いのではないでしょうか。

javascriptをカスタマイズし、オリジナルの途中行挿入機能を実装してみることにします。
WebPerformerが標準で実装している行追加・削除の[+][-]ボタンの機能は特に変更せず、
アクションボタン押下時にjavascriptをコールし、新規行を挿入するイメージになります。

後程説明しますが、行挿入と記載しておりますが実際には[行が下に1段ズレる動作]を利用しています。
イメージは下図のようになります。

①行挿入前
001
②行挿入後
002

Android 3D行先コンパス AR 修正 ver1.11

3D行先コンパス AR

バグ修正
1)NECの10インチタブレット LifeTouch(LT-TLX5W1AB)X,Y,Z軸がおかしいバグ修正

device_angle = getWindowManager().getDefaultDisplay().getRotation();
device_angle がSurface.ROTATION_270でした。通常のスマホだと、Surface.ROTATION_0です。
とういうことは、タブレットによっては、Surface.ROTATION_90やSurface.ROTATION_180があるかも。

「メモ」
remapCoordinateSystemの第二、第三引数は、いまいち、机上(思考)と端末座標、OPENGL座標が結びつかないので、例によって総当たり(24通りの中から)でピックアップしました。

AXIS_X, AXIS_Y
AXIS_X, AXIS_Z
AXIS_X, AXIS_MINUS_Y
AXIS_X, AXIS_MINUS_Z

AXIS_Y, AXIS_X
AXIS_Y, AXIS_Z
AXIS_Y, AXIS_MINUS_X
AXIS_Y, AXIS_MINUS_Z

AXIS_Z, AXIS_X
AXIS_Z, AXIS_Y
AXIS_Z, AXIS_MINUS_X
AXIS_Z, AXIS_MINUS_Y

AXIS_MINUS_X, AXIS_Y
AXIS_MINUS_X, AXIS_Z
AXIS_MINUS_X, AXIS_MINUS_Y
AXIS_MINUS_X, AXIS_MINUS_Z  Surface.ROTATION_270

AXIS_MINUS_Y, AXIS_X
AXIS_MINUS_Y, AXIS_Z
AXIS_MINUS_Y, AXIS_MINUS_X
AXIS_MINUS_Y, AXIS_MINUS_Z

AXIS_MINUS_Z, AXIS_X     Surface.ROTATION_0
AXIS_MINUS_Z, AXIS_Y
AXIS_MINUS_Z, AXIS_MINUS_X
AXIS_MINUS_Z, AXIS_MINUS_Y

switch (device_angle){
case Surface.ROTATION_0:
//スマートフォン(縦)
SensorManager.remapCoordinateSystem( inR, SensorManager.AXIS_MINUS_Z, SensorManager.AXIS_X, outR );
break;
case Surface.ROTATION_270:
//タブレット横にセンサーが設定されているもの 10インチタブレット縦
SensorManager.remapCoordinateSystem( inR, SensorManager.AXIS_MINUS_X, SensorManager.AXIS_MINUS_Z, outR );
break;
default:
SensorManager.remapCoordinateSystem( inR, SensorManager.AXIS_MINUS_Z, SensorManager.AXIS_X, outR );
break;
}

もし、Surface.ROTATION_90やSurface.ROTATION_180場合は崩れます。
zahyou2
2)N,S,E,Wのテクスチャーが正しく表示されないバグ修正

OpenGL ES1.0では、テクスチャーの1辺のサイズは2のn乗でなければならない。
96 x 96にしていました。(Nexus5,7 ,Xperiaだと、これでも正しく表示できますが、NECの10インチタブレット LifeTouch Android 4.0.1は仕様どおり表示できません。)

3)カメラSurfaceViewがGoogleMapのViewより下に隠れて表示されないバグ修正。

NECの10インチタブレット LifeTouchで発生。
OpenGLのSurfaceViewは、mOpenglView.setZOrderOnTop(true)でトップに持ってきているのですが、
カメラSurfaceViewが端末およびアプリのタイミングにより中途半端になるようで、mCameraview.setZOrderMediaOverlay(true) を設定しました。

もし、SurfaceViewを3つ以上使う場合は対処不明です。

 

Android 3D行先コンパス AR リリースしました。

3D行先コンパス AR

icon

info-2

・カメラ上に3Dのコンパスを表示しています。
・Google Mapで行先を設定すると、目的地への方角、距離、天気を表示します。
・天気予報は、OpenWeather APIを使用。 精度はあまりよくありませんが、world wideです。
http://openweathermap.org/
・コンパスがずれていると思われる時は8の字(メビウスの輪)キャリブレーションを行って下さい。
http://www.s3sensor.com/s3/calibration/
これでほぼ直ります。(iPhone,Android)
※これでほぼ直ります。機械を信用しすぎてはダメです。最終自分の勘を信じましょう。。。
5月に会社でシンガポール旅行があるので、これで迷わずにキャンパス内を歩けるかと。
http://www.nus.edu.sg/campusmap/pdf/nus_kent_ridge_coloured.pdf

================================
2.3.4 / 4.1.2 / 4.4.4 Xperia,Nexus 5,Nexus 7(タブレット)で動作確認済みですが、
NECの10インチタブレット LifeTouch(LT-TLX5W1AB)では、X,Y,Z軸がなぜかおかしく
今のところ正しく動作しません。

表示は端末を縦固定、カメラも90度回転して使用してします。その関係か
remapCoordinateSystem()の第二、第三引数は、デバイスのX軸、Y軸がそれぞれ指している世界座標系の
方向を指定するのですが、机上で思った設定をしてもどうもうまく定まらず、トライ&エラーで
最終 remapCoordinateSystem( inR, SensorManager.AXIS_MINUS_Z, SensorManager.AXIS_X, outR );
で動作するようになりました。

もしかして、getRotation()でチェックして、それぞれの端末環境によって、第二、第三引数
を替えないといけないのかもしれません。
https://github.com/kvirair/Compass-View-Library/blob/master/src/garin/artemiy/compassview/library/CompassSensorsActivity.java
(NECの10インチタブレットが正しいのかも。今後の検討)

【追記】
http://d.hatena.ne.jp/yellow_73/20110815
にあるように、Androidのタブレット機では横長基準でセンサを仕掛けているものがあります。携帯電話機なら縦長基準。
そういうことですか。。また、改修しておきます。(4/14)

参考:
remapCoordinateSystem() の第二、第三引数の決定
http://blogs.yahoo.co.jp/count_zero_blog/62278295.html
モーションセンサー その3
http://into.cocolog-nifty.com/pulog/2011/10/android029-3-se.html
三次元コンパスを作ってみた
http://android20092009.blog67.fc2.com/blog-entry-41.html
ソースコード参照させて頂きました。OPENGLの部分
Androidでテキストをマーキー表示するカスタムビューの作り方
http://d.hatena.ne.jp/mingos/20110215/1297788794
ソースコード参照させて頂きました。