プログラマメモ2 - programmer no memo2

JavaでSpaceNavigatorからの値をとってみる。Windowsで。 2008/11/28
2008/12/01

Javaです。Windowsです。
SpaceNavigatorという入力デバイスからの値を取得してみます。

スペースナビゲーター


開発元からSDK(参考コード)が提供されています。
Windows、OSX、Linuxで動作するそうです。
SDKの利用は要登録

Windows上で、Javaを使ってこのデバイスから入力値を取得してみます。

使うもの、JACOB(JAVA-COM Bridge)

新しい
古い

このJACOBを使うとJAVA-COM間のやりとりが便利!?に行えます。

ちなみにCOMって何だ?というのは、Component Object Model - Wikipedia
コンポーネント・オブジェクト・モデルですね。


とりあえず、SensorのTranslation値は取得できました。
Rotationの値は取得できませんでした。。。
環境依存なのかしら。。。

綴りまちがえていた。。。
RotationをRotaionとしていたOrz...

import java.util.Scanner;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

public class TestSpaceNavigator2 {

public static void main(String[] args) throws InterruptedException {

final ActiveXComponent activeXComponent;
activeXComponent = new ActiveXComponent("TDxInput.Device");
System.out.println(activeXComponent.getProgramId());
System.out.println(">>>>>" + activeXComponent.invoke("Connect"));
/*
* アプリケーション終了のためのスレッド
*/
Runnable runnable = new Runnable() {

@Override
public void run() {

// System.in
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
String s = scanner.next();
if ("q".equals(s)) {
System.out.println("*** Disconnect");
Dispatch.call(activeXComponent, "Disconnect");
System.exit(0);
}
}
}

};

new Thread(runnable).start();

Variant v = activeXComponent.invoke("Type");
System.out.println("*** TYPE:" + v);
Dispatch sensor = activeXComponent.invoke("Sensor").getDispatch();
while (true) {

// Dispatch rotation = sensor.call(sensor, "Rotaion").getDispatch();
try {
// sensor.call(sensor, "Rotaion").getDispatch();
Variant variant = sensor.call(sensor, "Translation");

Variant x = variant.getDispatch().call(variant.getDispatch(),
"X");
Variant y = variant.getDispatch().call(variant.getDispatch(),
"Y");
Variant z = variant.getDispatch().call(variant.getDispatch(),
"Z");
Variant length = variant.getDispatch().call(
variant.getDispatch(), "Length");
System.out.println("IsConnected:["
+ activeXComponent.invoke("IsConnected")
+ "] Translation x:[" + x + "] y:[" + y + "] z:[" + z
+ "] length:[" + length + "]");
variant.getDispatch().safeRelease();
} catch (Exception e) {
System.out.println("*** error");
}
Thread.sleep(100);
}

}

}

: