グループ化/グループ化解除

マップ・オブジェクトは、グループ化することができます。グループ化とは、グループ化オブジェクトの中にマップ・オブジェクトをまとめ、ひとかたまりとして扱うものです。グループ化されると、グループ化オブジェクト(jp.carabiner.inkpod.pi.model.PGroupObject)という、1つのマップ・オブジェクトとして扱われます。

グループ化は、PMapModel#groupObject(PMapObject[])メソッドで行います。引数は、グループ化したい2つ以上のオブジェクトの配列で、戻り値は、グループ化されたオブジェクト(PGroupObject)です。グループ化するマップ・オブジェクトは、他のどのグループ化オブジェクトにも属していないマップ・オブジェクトである必要があります。グループ化オブジェクトをさらにグループ化することもできます。

グループ化を解除するには、PMapModel#ungroupObject(PGroupObject)を使います。引数は、グループ化を解除したいグループ化オブジェクト(PGroupObject)です。戻り値は、グループ化されていたマップ・オブジェクトの配列です。何重にもグループ化は可能ですが、グループ化解除できるのは、一番外側のグループ化オブジェクトだけです。

グループ化を解除すると、グループ化のサイズ変更や回転の状態が 、グループ化されていた内側のマップ・オブジェクトに反映されます。

サンプル

「オブジェクト」メニューに「グループ化」と「グループ化解除」のメニュー項目が追加されます。それぞれ、選択中のオブジェクトをグループ化、グループ化解除します。

function extendUI(event) {
    inkpod.ui.actions.addAction({
        id     : "SAMPLE_GROUP",
        text   : "グループ化",
        action : function(frame, event) {
            var model = frame.model;
            var objects = model.selectedObjects;
            if(objects.length < 2) {
                frame.alert("2つ以上のオブジェクトを選択してください");
                return;
            }
            
            model.groupObject(objects);
        }
    });
    inkpod.ui.actions.addAction({
        id     : "SAMPLE_UNGROUP",
        text   : "グループ化解除",
        action : function(frame, event) {
            var model = frame.model;
            var objects = model.selectedObjects;
            if(objects.length == 0) {
                frame.alert("オブジェクトを選択してください");
                return;
            }
            for(var i=0; i < objects.length; ++i) {
                if(!(objects[i] instanceof Packages.jp.carabiner.inkpod.pi.model.PGroupObject)) {
                    frame.alert("グループオブジェクトを選択してください");
                    return;
                }
            }
            for(var i=0; i < objects.length; ++i) {
                model.ungroupObject(objects[i]);
            }
        }
    });
    
    inkpod.ui.menuBar.objectMenu.addMenuItem("SAMPLE_GROUP");
    inkpod.ui.menuBar.objectMenu.addMenuItem("SAMPLE_UNGROUP");
}

function init()
{
    inkpod.ui.addUIExtensionListener(extendUI);
}

function dispose()
{
}

plugin = {
    init : init,
    dispose : dispose
}

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