ログイン
検索
メインメニュー
フォーラム一覧   -   トピック一覧
   astah*の使い方
     astah* APIでアクティビティ図の要素の座標を取得する方法
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 トピック
nopuhiko
投稿日時: 2017-10-26 18:55
新米
登録日: 2017-10-26
居住地:
投稿: 2
astah* APIでアクティビティ図の要素の座標を取得する方法
初めて投稿させていただきます。

astah* APIを用いて、astah上で予め作成したモデル(アクティビティ図)に記述されたアクションノードなどの要素の座標、位置情報を取得したいと思っています。

INodePresentationクラスに、座標を取得するメソッドとしてgetLocation()というものがあるということは分かりましたが、読み込んだモデルからどのようにINodePresentationを定義できるかが分かりません。
IDiagramのgetPresentations()でプレゼンテーションを取得できるように、INodePresentationを得る方法はあるのでしょうか。
あるいは、別の方法でモデルの要素の座標を取得する方法はあるでしょうか。

lily
投稿日時: 2017-10-27 14:40
開発者
登録日: 2017-2-10
居住地:
投稿: 10
Re: astah* APIでアクティビティ図の要素の座標を取得する方法
astah*開発チームの松田と申します。
ご質問ありがとうございます。

IElement#getPresentations()を用いると、
IPresentation#getModel() == element となるプレゼンテーションをすべて取得できます。
アクティビティ図の要素はモデルとプレゼンテーションの数が必ず1:1となっていますので、
IActivityNode#getPresentations()[0]でプレゼンテーションを取得できます。
なお、IActivityNodeIActionの親です。

APIForReadingActivityDiagramModelsSample.javaより引用:

    private static void printActivityDiagramInfo(IActivityDiagram diagram)
            throws InvalidUsingException {
        System.out.println(String.format("ActivityDiagram Name: %s", diagram.getName()));
        IActivity activity = diagram.getActivity();
        IActivityNode[] activityNodes = activity.getActivityNodes();
        for (IActivityNode activityNode : activityNodes) {
            INodePresentation presentation = getPresentation(activityNode);
            Point2D location = getLocation(presentation);
            System.out.println(String.format("   %s (X:%f, Y:%f)", presentation.getLabel(),
                    location.getX(), location.getY()));
        }
    }

    private static Point2D getLocation(INodePresentation presentation) {
        if (presentation == null) {
            throw new IllegalArgumentException("presentation is null.");
        }
        return presentation.getLocation();
    }

    private static INodePresentation getPresentation(IActivityNode activityNode)
            throws InvalidUsingException {
        if (activityNode == null) {
            throw new IllegalArgumentException("action is null.");
        }
        return (INodePresentation) activityNode.getPresentations()[0];
    }
nopuhiko
投稿日時: 2017-10-27 18:52
新米
登録日: 2017-10-26
居住地:
投稿: 2
Re: astah* APIでアクティビティ図の要素の座標を取得する方法
松田様

ご返信ありがとうございます。

お教えいただいた方法で実行してみたところ、無事に座標を取得することができました。
ありがとうございました!
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を