@haehn ハイヘーン (XTK)
GWT で edge-XTK を使用し、単純な STL をレンダリングしようとしています。ただし、XTK コードはメッシュに色を割り当てる行で失敗します。
mesh.color = [0.7,0,0] // this line fails
XTK コードによって発行されたエラー メッセージ:"Invalid color"
この動作は、GWT で XTK を使用する場合にのみ観察されます。
エラーは、この XTK コード スニペットから発生しているようです
X.displayable.prototype.__defineSetter__('color', function(color) {
// we accept only numbers as arguments
if (!goog.isDefAndNotNull(color) || !(color instanceof Array) ||
(color.length != 3)) {
throw new Error('Invalid color.');
}
問題は、GWT が iframe を使用してページを作成する方法にあると推測しています...そのため、上記の if 条件が GWT で失敗する可能性があります。上記のチェックを次のスニペットに置き換えると思います(ここからアイデアを得ました)。問題が解決する場合があります。
use goog.isArray(color) instead of (color instanceof Array)
調査してコメントしていただけますか?
編集:
こんにちはXTK
GWT で XTK を使用する方法を示すコード スニペットを次に示します。
public class TestGwtXtk implements EntryPoint {
public void onModuleLoad() {
testXtk();
}
// GWT JSNI method, which allows mixing Java and JS natively.
// it is akin using c++ or c libraries in java or android
private native void testXtk() /*-{
var r = new $wnd.X.renderer3D();
r.container = 'xtk_container'; // div ele
r.config.PROGRESSBAR_ENABLED = false;
r.init();
cube = new $wnd.X.cube();
cube.lengthX = cube.lengthY = cube.lengthZ = 20;
cube.color = [ 1, 1, 1 ]; // fails here in XTK code
cube.center = [ 0, 0, 0 ]; // fails here in XTK code
r.add(cube);
r.render();
}-*/;
}
インライン コメントで指摘されているように、javascript 配列の使用は失敗します。失敗は、[0,0,0] や new Array(0,0,0) などの js 配列の使用法が間違っているためではありません。失敗は、XTK コードが「配列のインスタンス」をチェックする方法によるものです。
編集:2
親愛なるXTK
git から XTK コードをチェックアウトし、提案している変更を加え、XTK.js を再構築し、最終的に私の修正が問題を解決することをテストすることができました。
例: displayable.js で 1 行コメントし、次のように別の行を追加しました。
// if (!goog.isDefAndNotNull(color) || !(color instanceof Array) || (color.length != 3)) {
if (!goog.isDefAndNotNull(color) || !(goog.isArray(color)) || (color.length != 3)) {
ユースケースを実現するために、xtk コードベースの他のいくつかの場所で同様の変更を行いました。これが正しい解決策である理由の説明は、次のとおりです: Closure: The Definitive Guide。リリース 8 のコードベースでこの修正を行うことを検討していただけますか? ありがとうございました