X3Dom + D3中IndexedFaceSet的问题

时间:2013-05-24 18:12:38

标签: d3.js x3dom

我正在使用D3来标记X3Dom,如下例所示:http://bl.ocks.org/jbeuckm/5620882

我将示例转换为使用简单方块而不是框:http://bl.ocks.org/jbeuckm/5645205

在更高版本中,我开始加载数据并从各种回调中调用plotAxis和plotData。如果我像第一个例子中那样绘制框,它可以正常工作:

shape.append("x3d:box");

但是当我替换我的2个三角形脸部时......

shape.append("x3d:indexedFaceSet")
        .attr("coordIndex", "0 1 2 -1  2 3 0 -1")
        .attr('solid', 'false')
        .append("x3d:coordinate")
        .attr("point", "-1 -1 0,  1 -1 0,  1 1 0,  -1 1 0")

它不起作用,我收到此错误:

Uncaught TypeError: Cannot call method 'getPoints' of null
x3dom.registerNodeType.defineClass.nodeChanged  x3dom.js:3175
x3dom.NodeNameSpace.setupTree  x3dom.js:1929
domEventListener.onNodeInserted  x3dom.js:1296
append  d3.v2.js:3701
d3_selectionPrototype.select  d3.v2.js:3606
d3_selectionPrototype.append  d3.v2.js:3707
plotData  tran_3d.html:132
(anonymous function)  tran_3d.html:240
st.Callbacks.f  jquery-1.9.0.min.js:1
st.Callbacks.p.fireWith  jquery-1.9.0.min.js:1
st.extend.Deferred.st.each.i.(anonymous function)  jquery-1.9.0.min.js:1
(anonymous function)  tran_3d.html:280
d3.json  d3.v2.js:2950
ready  d3.v2.js:2940

看起来“节点插入”代码可能会在< Coordinate>之前分析形状。已将子项添加到< IndexedFaceSet>中。但是,我不确定为什么同一个附加语句在一个上下文中起作用而不是另一个上下文。再次,只是附加一个x3d:框在我的数据加载设置中工作正常,但x3d:indexedFaceSet会抛出错误。

1 个答案:

答案 0 :(得分:0)

解决方法是单独构建IndexedFaceSet节点,然后为节点生成标记字符串,然后使用D3的selection.html(str)将节点附加到形状。在上面引用的代码中,“shape”是数据绑定节点的选择,因此解决方法如下:

shape.each(function(d){

   var newNode = "<indexedFaceSet coordIndex="..."><coordinate point="..."/></indexedFaceSet>";

   d3.select(this).html(newNode);
});