ログイン
検索
メインメニュー
フォーラム一覧   -   トピック一覧
   astah*の使い方
     astah* APIによる複合フラグメントの入れ子構造の取得
投稿するにはまず登録を

フラット表示 前のトピック | 次のトピック
投稿者 トピック
tiwa___
投稿日時: 2021-4-13 14:51
開発者
登録日: 2019-7-29
居住地:
投稿: 8
Re: astah* APIによる複合フラグメントの入れ子構造の取得
申し訳ありませんが、入れ子構造を直接取得するような
APIはございません。

入れ子構造を取得するには
ModelFinderで同じ図上にある複合フラグメントを取得し
プレゼンテーションの矩形から親子関係を推測する必要があります。

下記は図上で選択した複合フラグメントの親を表示する
サンプルスクリプトです。



infNamespace = 'com.change_vision.jude.api.inf'
var ModelFinder = Java.type(infNamespace + '.project.ModelFinder');
var ICombinedFragment = Java.type(infNamespace + '.model.ICombinedFragment');
var Point2D = Java.type('java.awt.geom.Point2D')

run()

function run() {
    
    var selectedPresentations = getSelectedPresentations()
    if (selectedPresentations.length == 0) {
        print('Please select an element in a diagram')
        return
    }

    var selectedPresentation = selectedPresentations[0]
    var currentDiagram = selectedPresentation.getDiagram()
    var selectedModel = selectedPresentation.getModel()
    
    var combinedFragments = astah.findElements(new ModelFinder() {
	    isTarget : function (element) {
            if (element instanceof ICombinedFragment
                && element.getPresentations()[0].getDiagram() == currentDiagram
                && element != selectedModel) {
                return true;
            }
        }
    })

    var parents = new Array()
    var targetRect = selectedPresentation.getRectangle()
    for (var i in combinedFragments) {
        var parentRect = combinedFragments[i].getPresentations()[0].getRectangle()
        if (parentRect.contains(targetRect)) {
            parents.push(combinedFragments[i])
        }
    }

    parents.sort(function(a, b){
        var aH = a.getPresentations()[0].getRectangle().getHeight()
        var bH = b.getPresentations()[0].getRectangle().getHeight()
        return aH - bH
    })

    print(parents[0])
}


function getSelectedPresentations() {
    var viewManager = astah.getViewManager()
    var diagramViewManager = viewManager.getDiagramViewManager()
    var selectedPresentations = diagramViewManager.getSelectedPresentations()
    return Java.from(selectedPresentations)
}
フラット表示 前のトピック | 次のトピック

題名 投稿者 日時
   astah* APIによる複合フラグメントの入れ子構造の取得 muryo13 2021-4-12 23:41
   » Re: astah* APIによる複合フラグメントの入れ子構造の取得 tiwa___ 2021-4-13 14:51

投稿するにはまず登録を