Personal tools
You are here: Home サポート PASSCELL Personal 入門用マニュアル 4. 計算や処理を行わせる 4. 計算や処理を行わせる: 7) 高度なスクリプト記述 (6)スクリプトでノードの複製を接続するuse()関数
Document Actions

4. 計算や処理を行わせる: 7) 高度なスクリプト記述 (6)スクリプトでノードの複製を接続するuse()関数



■このページで説明している内容

h) スクリプトでノードの複製を接続するuse()関数



h) スクリプトでノードの複製を接続するuse()関数

手作業によってノードをコピー・貼り付けを行うことで
既に作成したノードを再利用したりツリーを変更することができますが、
こうした操作をスクリプトによって自動的に行うことができます。

このような場合、use()関数を利用します。

そのプロジェクトに含まれている任意のノードは、
use()関数を実行したノードの子ノードとして接続することができます。

具体的な例をみてみましょう。
サンプルとして、以下のような3つのツリーからなるプロジェクトをご紹介します。

図4.7.h-1.jpg

(図4.7.h-1) サンプルプロジェクト


ここでは、「条件設定」というノードでuse()関数を実行し、
「Case1」で始まるツリーと「Case2」で始まるツリーを変数"条件"の値で
どちらかのツリーを繋いでいます。

図4.7.h-2.jpg

(図4.7.h-2) "条件"=1を指定した時


図4.7.h-3.jpg

(図4.7.h-3) "条件"=2を指定した時



このように、use()関数にフルネームを指定したノードとその子孫ノードが接続されます。
この時注意すべき点がいくつかあります。

    ⅰ) 元のノードはそのまま残る
        use()されるノードは、そのまま元の位置に残り、変化しません。

    ⅱ) 元のノードの複製が接続される
        use()によって接続されるノードは、元のノードの完全な複製です。

    ⅲ) use()関数に指定したノードに子孫ノードが接続されている場合、一緒に複製される
        use()関数に指定したコピー元ノードだけではなく、そのノードの子孫ノードも
        一緒に複製され接続されます。

    ⅳ) 元のノードの値やスクリプトが変更されると、複製されたノードも変更される
        複製・接続されたノードは、元のノードの一時的な複製でしかありません。
        したがって、元のノードの値や子孫ノードを変更すると、複製されたノードも
        同様に変化します。

    ⅴ) 複製されたノードに値を手作業で入力することができない
        ⅳ)と同じ理由(複製されたノードは一時的な複製である、という理由)のため、
        複製されたノードには、値を手作業で入力することができません。

    ⅵ) プロジェクトファイルに保存した内容にも保存されていない
        さらに、ⅳと同じ理由によって、複製されたノードはプロジェクトファイルに保存されません。

    ⅶ)) スクリプトによる値の代入は可能
        このように、複製されたノードへの値入力を手作業で行うことはできません。
        しかし、スクリプトによる値の設定は可能です。

    ⅷ) 元のノードが無い場合エラーとなる
        当然ですが、use()関数の引数に指定したフルネームを持つノードが
        同一プロジェクト上に存在しなければ、エラーとなります。



PASSCELL Personal 1.2β 2006/11/06版から、use()関数の動作が変更になりました。


これまでのuse()関数では、接続する子ノードがどこにあってもノードのショートカットを生成し、親ノードの下に接続していました。
しかし新しいuse()関数では、接続しようとする子ノードが同一ページにあるか別ページにあるかによって動作が異なります。

まず、接続する子ノードが、同一ページにある場合です。

図4.7.h-4.jpg

(図4.7.h-4) 子ノードが、同一ページにある場合

この場合、use()関数でノードを接続しようとすると、これまでのようにノードのショートカットは生成されず、子ノードに直接関係線が接続されます。

図4.7.h-5.jpg

(図4.7.h-5) 同一ページの子ノードは、直接接続される(1)


図4.7.h-6.jpg

(図4.7.h-6) 同一ページの子ノードは、直接接続される(2)


一方、接続しようとする子ノードが、別ページにある場合にはこれまでどおり、ショートカットが同一ページに生成され、このショートカットへ関係線が接続されます。


図4.7.h-7.jpg

(図4.7.h-7) 別ページの子ノード

図4.7.h-8.jpg

(図4.7.h-8) 別ページの子ノードは、ショートカットが生成された上で接続される(1)


図4.7.h-9.jpg

(図4.7.h-9) 別ページの子ノードは、ショートカットが生成された上で接続される(2)

同一ページにある子ノードを接続する場合には、複数の親ノードがこの子ノードをuse()しても、すべて同じ子ノードに直接関係線が接続されます。 このため、親ノードの値によってuse()で接続した子ノードの値を変化させようとする場合には、子ノードがどの親ノードの値を利用するか特定できなく なってしまいます。この場合子ノードの値は不定になってしまうので、注意が必要です。

このように、子ノードに親ノードの値を反映させたい場合には、接続先の子ノードを別ページに配置する必要があります。



Powered by Plone, the Open Source Content Management System

This site conforms to the following standards: