マップ・オブジェクトのシェイプの種類の変更

シェイプの変更は、マップ・オブジェクト(PMapObject)のchangeShape() メソッドを呼び出すことで行います。chageShape() メソッドの引数は、シェイプの名前の文字列か、IObjectShapeTypeオブジェクトです。changeShape()メソッドは、オブジェクトがモデルに追加された状態で呼び出す必要があります。

使用可のなシェイプの名前や、IObjectShapeTypeオブジェクトは、PMapModelのobjectShapeTypeTableプロパティから読み出せる、PObjectShapeTypeTableオブジェクトを使って列挙できます。

現時点で使用可能なシェイプは、次の通りです。ノード・オブジェクトのシェイプ

  • rectangle:矩形
  • roundrect:角丸矩形
  • oval:楕円
  • diamond:菱形
  • 拡張シェイプ
    • ext.cylinder:円柱
    • ext.star:星
    • ext.classクラス
    • ext.trapezoid:台形
    • ext.homebase:ホームベース
    • ext.blockArrow:ブロック矢印
    • ext.cloud:雲
    • ext.explosion:爆発
    • ext.roundrectBalloon:吹き出し
    • ext.ovalBalloon:楕円の吹き出し
    • ext.cloudBalloon:雲の吹き出し
    • ext.explosionBalloon:爆発の吹き出し
関連・オブジェクトのシェイプ
  • polyline:直線(折れ線)
  • rightangle:かぎ型線
  • curve:曲線
  • 拡張シェイプext.balloonLink:吹き出しの接続用の不可視シェイプ

形が変更されると、オブジェクトの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演算子で、オブジェクトの種類を判定しています。

関連するクラス/インタフェース