InfoVis / JITを使用して、ネットワークを視覚化する力指向グラフをレンダリングしようとしています。私はJavaスクリプトとJITの両方の初心者です。jsファイルで次のコードを使用して独自のカスタムノードタイプを作成しました。これにより、ノードに画像を表示できます。
$jit.ForceDirected.Plot.NodeTypes.implement({
'icon1': {
'render': function(node, canvas){
var ctx = canvas.getCtx();
var img = new Image();
img.src='magnify.png';
var pos = node.pos.getc(true);
img.onload = function() {
ctx.drawImage(img, pos.x, pos.y);
};
},
'contains': function(node,pos){
var npos = node.pos.getc(true);
dim = node.getData('dim');
return this.nodeHelper.circle.contains(npos, pos, dim);
//return this.nodeHelper.square.contains(npos, pos, dim);
}
}
jsonデータオブジェクトで「$type」:「icon1」を使用して、このカスタムノードタイプをノードに割り当てています。ノード上で画像を取得しますが、問題は、必要なときに画像を非表示にできないことです。次のコードを使用して、円、正方形などの組み込みノードタイプを非表示にすることができます。
node.setData('alpha', 0);
node.eachAdjacency(function(adj) {
adj.setData('alpha', 0);
});
fd.fx.animate({
modes: ['node-property:alpha',
'edge-property:alpha'],
duration: 2000
});
ただし、同じコードはカスタムノードでは機能しません。そのため、ノードのタイプを一時的に組み込みの「円」タイプに変更し、それを非表示にしてから、ノードのタイプを元の、つまりカスタムノードであるicon1に再設定しようとしました。
function hideNode( ){
var typeOfNode = node.getData('type');
node.setData( 'type','circle');
node.setData('alpha', 0);
node.eachAdjacency(function(adj) {
adj.setData('alpha', 0);
});
fd.fx.animate({
modes: ['node-property:alpha',
'edge-property:alpha'],
duration: 2000
});
node.setData('type',typeOfNode );
}
これはうまくいくはずですが、カスタムイメージがしばらくするとキャンバスに戻ってきます。ノードのタイプを元のタイプにリセットしない場合、つまり上記のコードで次のステートメントをコメントアウトしてhide関数を呼び出すと、ノードは非表示になります。
node.setData('type',typeOfNode );
ノードのタイプをカスタムタイプに設定するだけでは、ノードがどのようにレンダリングされるのか理解できません。この質問の助けをいただければ幸いです。
unhide関数を呼び出して必要なときにノードを復元したいので、ノードのタイプを元にリセットする必要があります。ノードのタイプを元にリセットしないと、復元時に円としてレンダリングされます。
APIとJITのGoogleグループを調べましたが、答えが見つかりませんでした。誰か助けてもらえますか?