@haehn 嗨,Haehn (XTK)
我正在使用带有 GWT 的 edge-XTK 并尝试渲染一个简单的 STL。然而,XTK 代码在我们为网格分配颜色的那一行失败了。
mesh.color = [0.7,0,0] // this line fails
XTK 代码发出的错误消息:"Invalid color"
仅在将 XTK 与 GWT 一起使用时才会观察到此行为。
错误似乎来自此 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
这是显示我如何将 XTK 与 GWT 一起使用的代码片段。
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 数组失败。失败不是因为js数组使用,比如[0,0,0]或者new Array(0,0,0)错误。失败是因为 XTK 代码检查“数组实例”的方式。
编辑:2
亲爱的XTK
我能够从 git 签出 XTK 代码,进行我提议的更改,重新构建 XTK.js 并最终成功测试我的修复解决了问题。
例如:在 displayable.js 我注释了一行并添加了另一行:
// 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 的代码库中进行此修复?谢谢