吹き出しシェイプが設定されているノード・オブジェクトは、他のノード・オブジェクトと接続することができます。この特別な機能は、不可視のext.balloonLinkという関連・シェイプによって実現されています。吹き出しシェイプが設定されたオブジェクトを始点とし、吹き出しの接続先を終点とする関連オブジェクトを作成し、そのシェイプをext.balloonLinkにすると、吹き出しが他のノード・オブジェクトと接続されます。
吹き出しとそれにつながるオブジェクトを作成し、吹き出しの先端を接続するサンプルです。
function extendUI(event) { inkpod.ui.actions.addAction({ id : "SAMPLE_ADD_BALLOON_LINK_OBJECT", text : "接続された吹き出しオブジェクトの追加のサンプル", action : function(frame, event) { var model = frame.model; var point = frame.contextMenuClickPoint; var balloonType = model.objectShapeTypeTable.getObjectShapeType("ext.roundrectBalloon"); var object1 = model.createNodeObject(balloonType); object1.shape.text = "balloon"; object1.shape.location = point; var object2 = model.createNodeObject(); object2.shape.text = "sample"; point.x += (object1.shape.width + 100); point.y += (object1.shape.height + 100); object2.shape.location = point; object1 = model.addObject(object1); object2 = model.addObject(object2); var balloonLinkType = model.objectShapeTypeTable.getObjectShapeType("ext.balloonLink"); var relationObject = model.createRelationObject(balloonLinkType, object1, object2); model.addObject(relationObject); } }); inkpod.ui.backgroundPopupMenu.addMenuItem("SAMPLE_ADD_BALLOON_LINK_OBJECT"); } function init() { inkpod.ui.addUIExtensionListener(extendUI); } function dispose() { } plugin = { init : init, dispose : dispose }
model.objectShapeTypeTable.getObjectShapeType() で、シェイプ型オブジェクトが得られます。それをmodel.createNodeObject(), model, createRelationObject()に渡すことで、指定のシェイプがあらかじめ設定されたオブジェクトを作ることができます。
ここでは、ext.roundrectBalloonシェイプのノード・オブジェクトともう一つのノード・オブジェクトを、ext.balloonLinkシェイプの関連・オブジェクトで、接続しています。これで、吹き出しが他のオブジェクトにつながります。
ext.balloonLinkシェイプは、他の用途には使用しないでください。まったく見えない関連になってしまいます。