D3.js X3Dom+;D3
我使用D3标记X3Dom,如下例所示: 我将示例转换为使用简单的正方形而不是长方体: 在更高版本中,我开始加载数据并从各种回调调用plotAxis和plotData。如果我像第一个示例中那样绘制长方体,它将按预期工作:D3.js X3Dom+;D3,d3.js,x3dom,D3.js,X3dom,我使用D3标记X3Dom,如下例所示: 我将示例转换为使用简单的正方形而不是长方体: 在更高版本中,我开始加载数据并从各种回调调用plotAxis和plotData。如果我像第一个示例中那样绘制长方体,它将按预期工作: shape.append("x3d:box"); 但当我替换我的2三角形面集时 shape.append("x3d:indexedFaceSet") .attr("coordIndex", "0 1 2 -1 2 3 0 -1") .attr(
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
看起来“插入节点”代码可能会在将子节点添加到图形之前分析形状。但是,我不确定为什么相同的append语句在一个上下文中有效,而在另一个上下文中无效。同样,在我的数据加载设置中,只需附加一个x3d:box就可以了,但是x3d:indexedFaceSet会抛出错误。一种解决方法是单独构建indexedFaceSet节点,然后为节点生成标记字符串,然后使用D3的selection.html(str)将节点附加到形状。在上面引用的代码中,“shape”是数据绑定节点的选择,因此解决方法如下:
shape.each(function(d){
var newNode = "<indexedFaceSet coordIndex="..."><coordinate point="..."/></indexedFaceSet>";
d3.select(this).html(newNode);
});
shape.每个函数(d){
var newNode=“”;
d3.选择(this).html(newNode);
});
如果构建x3d:indexedFaceSet
,设置其属性和子级,然后将其附加到形状中,该怎么办?