Flag レンダラーの以下の
private メソッドは、ノード上のフラグを処理します。
checkNode
cleanNode
moveNode
以下のコード例で、
checkNode
のコードを示します。フラグの検査
////////////// // local method The checkNode method fetches the graphic property to see if a flag is defined for the node in its current state. // manage graphic props private void checkNode(IlvSDMEngine engine, Object obj, IlvGraphic graphic) { Object rawFlag = IlvRendererUtil.getGraphicProperty(engine, obj, FLAG, REND_CLASS, null); if (rawFlag != null && rawFlag instanceof IlvGraphic) { IlvGraphic g = (IlvGraphic) rawFlag; // set flag location at top left corner IlvRect r = graphic.boundingBox(null); g.move(r.x, r.y); // add object engine.getGrapher().addObject(g, _flagLayer, true); // save flag in the graphic itself graphic.addProperty(FLAG_GRAPHICS, g); } }
checkNode
メソッドは、フラグが要求されているかどうかを検査して、必要な場合はオブジェクトの左上にフラグを追加してレンダリングします。以下のコード例で、
cleanNode
のコードを示します。フラグの削除
// remove previous flag private void cleanNode(IlvSDMEngine engine, IlvGraphic graphic) { // get the flag object from the source Object previous = graphic.getProperty(FLAG_GRAPHICS); if (previous != null) { // remove it and clear the property engine.getGrapher().removeObject((IlvGraphic)previous,true); graphic.removeProperty(FLAG_GRAPHICS); } }
不要になったフラグを削除するには、
cleanNode
メソッドを使用します。以下のコード例で、
moveNode
のコードを示します。ノードのフラグの移動
// adjust flag position private void moveNode(IlvRect newBBox, IlvGraphic flag) { if (flag == null) return; flag.move(newBBox.x, newBBox.y); }
moveNode
メソッドは、フラグが表示されるノードの新しいバウンディング・ボックスに従って、フラグのみを移動する場合に使用します。