シェイプの変更は、マップ・オブジェクト(PMapObject)のchangeShape() メソッドを呼び出すことで行います。chageShape() メソッドの引数は、シェイプの名前の文字列か、IObjectShapeTypeオブジェクトです。changeShape()メソッドは、オブジェクトがモデルに追加された状態で呼び出す必要があります。
使用可のなシェイプの名前や、IObjectShapeTypeオブジェクトは、PMapModelのobjectShapeTypeTableプロパティから読み出せる、PObjectShapeTypeTableオブジェクトを使って列挙できます。
現時点で使用可能なシェイプは、次の通りです。ノード・オブジェクトのシェイプ
形が変更されると、オブジェクトのshapeプロパティの型が変更先の形のものに変わります。このとき、共通のプロパティは引き継がれます。引き継ぎ先のないプロパティは無視されます。例えば、角丸の矩形(roundrect)には、arcSizeという角の半径を指定するプロパティがありますが、これを矩形(rectangle)に変更すると、arcSizeの値は無視されます。
「オブジェクト」メニューに「矩形に変更」と「かぎ型に変更」のメニュー項目を追加します。それぞれ、選択しているオブジェクトのうち、ノードオブジェクトの形を矩形に、関連オブジェクトの形をかぎ型に変更します。すでにその形の場合は、何も起こりません。
function extendUI(event) { inkpod.ui.actions.addAction({ id : "SAMPLE_CHANGE_NODE_SHAPE", text : "矩形に変更", action : function(frame, event) { var model = frame.model; var objects = inkpod.toFlat(model.selectedObjects); for(var i=0; i < objects.length; ++i) { if(objects[i] instanceof Packages.jp.carabiner.inkpod.pi.model.PNodeObject) { objects[i].changeShape("rectangle"); } } } }); inkpod.ui.actions.addAction({ id : "SAMPLE_CHANGE_RELATION_SHAPE", text : "かぎ型に変更", action : function(frame, event) { var model = frame.model; var objects = inkpod.toFlat(model.selectedObjects); for(var i=0; i < objects.length; ++i) { if(objects[i] instanceof Packages.jp.carabiner.inkpod.pi.model.PRelationObject) { objects[i].changeShape("rightangle"); } } } }); inkpod.ui.menuBar.objectMenu.addMenuItem("SAMPLE_CHANGE_NODE_SHAPE"); inkpod.ui.menuBar.objectMenu.addMenuItem("SAMPLE_CHANGE_RELATION_SHAPE"); } function init() { inkpod.ui.addUIExtensionListener(extendUI); } function dispose() { } plugin = { init : init, dispose : dispose }
複数選択されたオブジェクトを全て取得し、順番にchangeShape()オブジェクトを呼び出して、シェイプを変更しています。ただし、ノード・オブジェクト用のシェイプをノード・オブジェクト以外に設定すること、関連・オブジェクト用のシェイプを関連・オブジェクト以外に設定することはできないため、instanceof演算子で、オブジェクトの種類を判定しています。