LlSetLinkPrimitiveParams/ja

From Second Life Wiki
Jump to: navigation, search

要約

関数: llSetLinkPrimitiveParams( integer linknumber, list rules );

ルールに沿って、リンクナンバーのプリムにプリミティブのパラメータを設定します。

• integer linknumber リンク 番号 (0: リンクなし, 1: ルートプリム, >1: 子プリム) または LINK_* フラグ
• list rules
フラグ 説明
LINK_ROOT 1 リンクセットの中のルートプリムに送ります
LINK_SET -1 全プリムに送ります
LINK_ALL_OTHERS -2 自分以外の全プリムに送ります
フラグ 説明
LINK_ALL_CHILDREN -3 (ルートプリム以外の全ての)子プリムに送ります
LINK_THIS -4 スクリプトの入った自プリムに送ります
フラグ 説明 使い方
PRIM_NAME 27 プリムの名前を設定します。 PRIM_NAME, string name ]
PRIM_DESC 28 プリムの説明を設定します。 PRIM_DESC, string description ]
PRIM_TYPE 9 プリムの形状を設定します。 PRIM_TYPE, integer flag ] + フラグパラメータ
PRIM_SLICE 35 プリム属性のスライスを設定します。 PRIM_SLICE, vector slice ]
PRIM_PHYSICS_SHAPE_TYPE 30 プリムの物理形状タイプを設定します。 PRIM_PHYSICS_SHAPE_TYPE, integer type ]
PRIM_MATERIAL 2 プリムの素材を設定します。 PRIM_MATERIAL, integer flag ]
PRIM_PHYSICS 3 プリムの物理状態を設定します。 PRIM_PHYSICS, integer boolean ]
PRIM_TEMP_ON_REZ 4 臨時 属性を設定します。 PRIM_TEMP_ON_REZ, integer boolean ]
PRIM_PHANTOM 5 オブジェクトのファントム状態を設定します。 PRIM_PHANTOM, integer boolean ]
PRIM_POSITION 6 プリムの位置を設定します。 PRIM_POSITION, vector position ]
PRIM_POS_LOCAL 33 プリムのローカル位置を設定します。 PRIM_POS_LOCAL, vector position ]
PRIM_ROTATION 8 プリムの回転を設定します。 PRIM_ROTATION, rotation rot ]
PRIM_ROT_LOCAL 29 プリムのローカル回転を設定します。 PRIM_ROT_LOCAL, rotation rot ]
PRIM_SIZE 7 プリムの大きさを設定します。 PRIM_SIZE, vector size ]
PRIM_TEXTURE 17 プリムのテキスチャ属性を設定します。 PRIM_TEXTURE, integer face, string texture, vector repeats, vector offsets, float rotation_in_radians ]
PRIM_TEXT 26 プリムのフローティングテキストを設定します。 PRIM_TEXT, string text, vector color, float alpha ]
PRIM_COLOR 18 面の色を設定します。 PRIM_COLOR, integer face, vector color, float alpha ]
PRIM_BUMP_SHINY 19 面の輝きと凹凸を設定します。 PRIM_BUMP_SHINY, integer face, integer shiny, integer bump ]
PRIM_POINT_LIGHT 23 プリムをポイントライトとして設定します。 PRIM_POINT_LIGHT, integer boolean, vector color, float intensity, float radius, float falloff ]
PRIM_FULLBRIGHT 20 表面の明るさ全開フラグを設定します。 PRIM_FULLBRIGHT, integer face, integer boolean ]
PRIM_FLEXIBLE 21 プリムをフレキシブルに設定します。 PRIM_FLEXIBLE, integer boolean, integer softness, float float, float float, float float, float float, vector force ]
PRIM_TEXGEN 22 表面のテクスチャモードを設定します。 PRIM_TEXGEN, integer face, integer type ]
PRIM_GLOW 25 表面のグロー属性を設定します。 PRIM_GLOW, integer face, float intensity ]
PRIM_OMEGA 32 プリムの回転軸と回転速度を設定します。 PRIM_OMEGA, vector axis, float spinrate, float gain ]
PRIM_NORMAL 37 ノーマルマップを設定します PRIM_NORMAL, integer face, string texture, vector repeats, vector offsets, float rotation_in_radians ]
PRIM_SPECULAR 36 スペキュラーマップを設定します PRIM_SPECULAR, integer face, string texture, vector repeats, vector offsets, float rotation_in_radians, vector color, integer glossiness, integer environment ]
PRIM_ALPHA_MODE 38 アルファーレンダリングモードを設定します PRIM_ALPHA_MODE, integer face, integer alpha_mode, integer mask_cutoff ]
PRIM_LINK_TARGET 34 リンクセットの中で使用するリンク番号を設定します。 PRIM_LINK_TARGET, integer link_target ]
PRIM_CAST_SHADOWS 24 プリムのキャストシャドウ属性を設定します。(廃止予定) PRIM_CAST_SHADOWS, integer boolean ]
PRIM_TYPE_LEGACY 1 プリムの形状を設定します。(レガシー項目, 廃止予定) [ 1, integer flag ] + flag_parameters
パラメータ 付与パラメータ 説明
PRIM_NAME ] 27 [ string name ] プリムの名前を設定します。
PRIM_DESC ] 28 [ string description ] プリムの説明を設定します。
PRIM_TYPE ] 9 [ integer flag ] プリムの形状を設定します。
フラグ定数 set
PRIM_TYPE_BOX 0 [ integer hole_shape, vector cut, float hollow, vector twist, vector top_size, vector top_shear ]
PRIM_TYPE_CYLINDER 1 [ integer hole_shape, vector cut, float hollow, vector twist, vector top_size, vector top_shear ]
PRIM_TYPE_PRISM 2 [ integer hole_shape, vector cut, float hollow, vector twist, vector top_size, vector top_shear ]
PRIM_TYPE_SPHERE 3 [ integer hole_shape, vector cut, float hollow, vector twist, vector dimple]
PRIM_TYPE_TORUS 4 [ integer hole_shape, vector cut, float hollow, vector twist, vector hole_size, vector top_shear, vector advanced_cut, vector taper, float revolutions, float radius_offset, float skew ]
PRIM_TYPE_TUBE 5 [ integer hole_shape, vector cut, float hollow, vector twist, vector hole_size, vector top_shear, vector advanced_cut, vector taper, float revolutions, float radius_offset, float skew ]
PRIM_TYPE_RING 6 [ integer hole_shape, vector cut, float hollow, vector twist, vector hole_size, vector top_shear, vector advanced_cut, vector taper, float revolutions, float radius_offset, float skew ]
PRIM_TYPE_SCULPT 7 [ string mapinteger type ] Sculpted_Prims:_FAQ
  hole_shape フラグ 形状 hole_shape フラグ 形状
PRIM_HOLE_DEFAULT 0x00 デフォルト PRIM_HOLE_SQUARE 0x20 正方形
PRIM_HOLE_CIRCLE 0x10 サークル PRIM_HOLE_TRIANGLE 0x30 三角形
type フラグ 形状 説明
PRIM_SCULPT_TYPE_SPHERE 1 球形 上端と下端で収束し、左端が右端に縫合される
PRIM_SCULPT_TYPE_TORUS 2 トーラス 上端が下端に縫合され、左端が右端に縫合される
PRIM_SCULPT_TYPE_PLANE 3 平面 収束や縫合は行われない
PRIM_SCULPT_TYPE_CYLINDER 4 シリンダー 左端が右端に縫合される
PRIM_SCULPT_FLAG_ZZZZZZZZ 63
PRIM_SCULPT_FLAG_INVERT 64 裏返し 裏返しに表示 (法線を逆転させる)
PRIM_SCULPT_FLAG_MIRROR 128 ミラー スカルプトされたプリムを X 軸上で反転する
PRIM_SLICE ] 35 [ vector slice ] プリム属性のスライスを設定します。
PRIM_PHYSICS_SHAPE_TYPE ] 30 [ integer type ] プリムの物理形状タイプを設定します。
typeフラグ 説明 ノート
PRIM_PHYSICS_SHAPE_PRIM 0 ノーマルプリム形状の物理に使います メッシュでないオブジェクトのデフォルト値です
PRIM_PHYSICS_SHAPE_CONVEX 2 プリムの凸包形状の物理に使います メッシュオブジェクトのデフォルト値です
PRIM_PHYSICS_SHAPE_NONE 1 プリムの物理形状を無視します これをルートプリム、アバターに適用することはできません

このプリムは、他のオブジェクトやアバターが衝突せずに通り抜けます("ファントム"のように)

PRIM_MATERIAL ] 2 [ integer material] プリムの素材を設定します。素材は標準の 衝突音スプライト を決定します。
素材 フラグ 説明
PRIM_MATERIAL_STONE 0 石材
PRIM_MATERIAL_METAL 1 金属
PRIM_MATERIAL_GLASS 2 ガラス
PRIM_MATERIAL_WOOD 3 木材
PRIM_MATERIAL_FLESH 4
PRIM_MATERIAL_PLASTIC 5 プラスチック
PRIM_MATERIAL_RUBBER 6 ゴム
PRIM_MATERIAL_LIGHT 7 光, 廃止済み: [ PRIM_FULLBRIGHT, ALL_SIDES, TRUE ] と同じように見えます
PRIM_PHYSICS ] 3 [ integer boolean ] 物理状態を設定します。
PRIM_TEMP_ON_REZ ] 4 [ integer boolean ] テンポラリ属性
PRIM_PHANTOM ] 5 [ integer boolean ] ファントム状態を設定します。
PRIM_POSITION ] 6 [ vector position ] 位置を設定します。
PRIM_POS_LOCAL ] 33 [ vector position ] ローカル位置を設定します。
PRIM_ROTATION ] 8 [ rotation rot ] 回転を設定します。
PRIM_ROT_LOCAL ] 29 [ rotation rot ] ローカル回転を設定します。
PRIM_SIZE ] 7 [ vector size ] 大きさを設定します。
PRIM_TEXTURE, integer face ] 17 [ string texture, vector repeats, vector offsets, float rotation_in_radians ]
テクスチャ: llSetTexture
繰り返し: llScaleTexture
オフセット: llOffsetTexture
回転: llRotateTexture
PRIM_TEXT ] 26 [ string text, vector color, float alpha ]
テキスト: llSetText
PRIM_COLOR, integer face ] 18 [ vector color, float alpha ]
透過: llSetAlpha
: llSetColor
PRIM_BUMP_SHINY, integer face ] 19 integer shiny, integer bump ]
shinybump のフラグ 説明
PRIM_SHINY_NONE 0 なし
PRIM_SHINY_LOW 1
PRIM_SHINY_MEDIUM 2
PRIM_SHINY_HIGH 3
PRIM_BUMP_NONE 0 なし: 凹凸なし
PRIM_BUMP_BRIGHT 1 明るさ:明るい光で生成されるもの
PRIM_BUMP_DARK 2 暗さ:暗い光で生成されるもの
PRIM_BUMP_WOOD 3 木目調
PRIM_BUMP_BARK 4 木の皮
PRIM_BUMP_BRICKS 5 レンガ
PRIM_BUMP_CHECKER 6 チェッカー
PRIM_BUMP_CONCRETE 7 コンクリート
PRIM_BUMP_TILE 8 クラスティ・タイル
PRIM_BUMP_STONE 9 カットストーン:ブロック
PRIM_BUMP_DISKS 10 ディスク:束ねた輪っか
PRIM_BUMP_GRAVEL 11 砂利
PRIM_BUMP_BLOBS 12 ペトリ: 簡単なアメーバのような形状
PRIM_BUMP_SIDING 13 羽目板
PRIM_BUMP_LARGETILE 14 ストーン・タイル
PRIM_BUMP_STUCCO 15 しっくい
PRIM_BUMP_SUCTION 16 吸い込み:リング
PRIM_BUMP_WEAVE 17 織目
PRIM_FULLBRIGHT, integer face ] 20 [ integer boolean ]
PRIM_FLEXIBLE ] 21 [ integer boolean, integer softness, float float, float float, float float, float float, vector force ]
PRIM_TEXGEN, integer face ] 22 [ integer mode ]
モード定数 説明
PRIM_TEXGEN_DEFAULT 0
PRIM_TEXGEN_PLANAR 1
PRIM_POINT_LIGHT ] 23 [ integer boolean, vector color, float intensity, float radius, float falloff ]
PRIM_GLOW, integer face ] 25 [ float intensity ]
PRIM_OMEGA ] 32 vector axis, float spinrate, float gain ] llTargetOmega
PRIM_NORMAL, integer face ] 37 string texture, vector repeats, vector offsets, float rotation_in_radians ]
PRIM_SPECULAR, integer face ] 36 string texture, vector repeats, vector offsets, float rotation_in_radians, vector color, integer glossiness integer environment ]
PRIM_ALPHA_MODE, integer face ] 38 integer alpha_mode, integer mask_cutoff ]
34 integer link_target ] 複数のllSetLinkPrimitiveParamsを呼び出します。
PRIM_CAST_SHADOWS ] 24 [ integer boolean ] 廃止予定: プリミティブに影を割り付ける
[ 1 ]
PRIM_TYPE_LEGACY
1 [ integer flag, paramaters ]
flag 定数 フラグパラメータ
PRIM_TYPE_BOX 0 [ vector cut, float hollow, float twist_end, vector top_size, vector top_shear ]
PRIM_TYPE_CYLINDER 1 [ vector cut, float hollow, float twist_end, vector top_size, vector top_shear ]
PRIM_TYPE_PRISM 2 [ vector cut, float hollow, float twist_end, vector top_size, vector top_shear ]
PRIM_TYPE_SPHERE 3 [ vector cut, float hollow, vector dimple ]
PRIM_TYPE_TORUS 4 [ vector cut, float hollow, float twist_end, float hole_size_y, vector top_shear, vector advanced_cut ]
PRIM_TYPE_TUBE 5 [ vector cut, float hollow, float twist_end, float topshear_x ]

警告

  • この関数は 0.2 秒間、スクリプトを停止します。
  • texture がプリムの中で見つからない場合、かつこれが UUID でない場合、またはこれがtextureでない場合、エラーが DEBUG_CHANNEL 上で叫ばれます。
  • textureUUID である場合、オブジェクト自体に新たな アセット権限 が発生するようなことはありません。
    • アセットをプリムのインベントリの中に置いた場合、これまで発生していた使用制限は新しいオブジェクトで新たに作成されません。
  • ストレージ媒体として フローティングテキスト の機能が使えると思わないでください。これは不完全ですし、安全なものでもありません。
    • フローティングテキストはサーバの更新時に変更になったことが過去にあり、その際に既に設定されている内容は消去されていました。将来も変更が発生する可能性があります。
    • 「不可視」[1] のフローティングテキストもクライアントに送信されます。
      • 不可視にしているテキストを表示することのできるクライアントを持っている人が見れてしまう可能性があります。
      • テキストが含まれている通信パケットが盗聴され、テキストが読まれる可能性があります。
  • top_size とクライアントの値は異なります。範囲は一致しておらず、変換が必要です。シンプルな計算式は、結果 = 1.0 - value です。詳細は top_size Explained をご覧ください。
  • map がプリムの中で見つからない場合、かつこれが UUID でない場合、またはこれがtextureでない場合、エラーが DEBUG_CHANNEL 上で叫ばれます。
  • mapUUID である場合、オブジェクト自体に新たな アセット権限 が発生するようなことはありません。
    • アセットをプリムのインベントリの中に置いた場合、これまで発生していた使用制限は新しいオブジェクトで新たに作成されません。
  • PRIM_POSITION caveats
    • 状況によって positionローカル座標リージョン座標 のどちらかを指定する必要があります。詳細は llSetPosの仕様 を参照してください。
    • アタッチされていないルートプリムの場合、プリムが動ける範囲は限られています。PRIM_POSITION 1 コールあたり 10m に制限されています。WarpPos を参照してください。これは非常に特殊なケースです。 Do not rely on rule duplication of other flags - 結果は不定で、将来 きっと 壊れます。
    • PRIM_POSITIONアバター を動かすときは、
      • アバターが座っているプリムを動かしてもアバターは動きません。
      • アバターを動かしても、アバターが座っているプリムは動きません。
      • 座っている位置の座標はプリムの座標に素直に連動しません。SitTargetを更新 を使ってください。
      • position が中心から 54 メートルを超えると、エラーを出さずに失敗します。
  • If texture is missing from the prim's inventory and it is not a UUID or it is not a texture then an error is shouted on DEBUG_CHANNEL.
  • If texture is a UUID then there are no new asset permissions consequences for the object.
    • The resulting object develops no new usage restrictions that might have occurred if the asset had been placed in the prims inventory.
  • repeats is not only used to set the number of repeats but the sign of the individual components is also used to set the "Flip" attribute.
  • To clear the normal map parameters from the face (and possibly remove the material), set texture to NULL_KEY (the other parameters must be supplied in this case but will be ignored).
  • Note that whenever any face in a linkset contains a material (i.e. has a non-default PRIM_NORMAL, PRIM_SPECULAR, or PRIM_ALPHA_MODE), the linkset will use the new accounting system.
  • In the default texture mapping mode the texture repeats units are in texture repeats per face. In the planar texture mapping mode the texture repeats units are in texture repeats per half meter. This is in contrast to the in-world editing tool, in which the planar texture scaling units are repeats per meter.
  • If texture is missing from the prim's inventory and it is not a UUID or it is not a texture then an error is shouted on DEBUG_CHANNEL.
  • If texture is a UUID then there are no new asset permissions consequences for the object.
    • The resulting object develops no new usage restrictions that might have occurred if the asset had been placed in the prims inventory.
  • repeats is not only used to set the number of repeats but the sign of the individual components is also used to set the "Flip" attribute.
  • To clear the specular map parameters from the face (and possibly remove the material), set texture to NULL_KEY (the other parameters must be supplied in this case but will be ignored).
  • Note that whenever any face in a linkset contains a material (i.e. has a non-default PRIM_NORMAL, PRIM_SPECULAR, or PRIM_ALPHA_MODE), the linkset will use the new accounting system.
  • In the default texture mapping mode the texture repeats units are in texture repeats per face. In the planar texture mapping mode the texture repeats units are in texture repeats per half meter. This is in contrast to the in-world editing tool, in which the planar texture scaling units are repeats per meter.
  • PRIM_PHANTOM, PRIM_PHYSICSPRIM_TEMP_ON_REZ はオブジェクト全体(リンクセット)に適用されます。
  • 値はズレたり、切り捨てられたり、上限があったりすることもあります。描画の前にデシリアライゼーションの過程でクライアントがかける制限もあれば、SIM が値を格納する前にかける制限もあります。
  • faceALL_SIDES であれば flag は全ての面に作用します。
  • face が存在しない面を指している場合、 flag はエラーを出さずに復帰します。
  • LINK_SETへの演算の適用は、ルートプリムが最初に適用され、次にそれぞれの子プリムになります。
  • 現在llGetLinkPrimitiveParamsに相当するものはありません。.
    • リンクされたプリムから多くのパラメータを取得する唯一の方法は、それぞれの子プリムに別々にスクリプトをいれて、llMessageLinkedを使うことです。

Important Issues

~ All Issues ~ Search JIRA for related Bugs
   We need PRIM_ALPHA_MODE_DEFAULT to revert alpha to old "if the texture has an alpha mask, use alpha. If not, don't" behavior.

サンプル

全てのLINK_SETにスクリプトが含まれている時、llSetLinkPrimitiveParamsを使って、タッチした時にLINK_SETのプリムを点灯させ、最後にタッチした時に消灯する単純なスクリプトです。

default
{
    touch_start(integer total_number)
    {
        // 全てのプリムのフルブライトを消します
        llSetLinkPrimitiveParams(LINK_SET,[PRIM_FULLBRIGHT,ALL_SIDES,FALSE]);
        // タッチされたプリムをフルブライトにします
        llSetLinkPrimitiveParams(llDetectedLinkNumber(0),[PRIM_FULLBRIGHT,ALL_SIDES,TRUE]);        
    }
}

注意点

リンク番号

オブジェクトを構成するそれぞれのプリムにはアドレスがあります。それがリンク番号です。オブジェクトの特定のプリムにアクセスするには、そのプリムのリンク番号を知らなければなりません。リンク番号はプリムに振られますが、オブジェクトに座っているアバターにも振られます。

  • オブジェクトが単一のプリムで構成されていて、アバターが座っていないとき、(ルート)プリムのリンク番号は 0 です。
  • しかし、オブジェクトが複数のプリムで構成されていたり、オブジェクトに座っているアバターがいたりすると、ルートプリムのリンク番号は 1 となります。

アバターがオブジェクトに座ると、リンクセットの末尾に追加され、いちばん大きなリンク番号が振られることになります。さらに、アバターがオブジェクトに座っている場合、アバターを立たせないと、プリムのリンク・リンク解除ができません。

プリムやアバターの数え方

オブジェクトのプリムや、プリムに座っているアバターの数を調べるのに、2つの関数があります。

  • llGetNumberOfPrims() - プリムと座っているアバターの数を返します。
  • llGetObjectPrimCount(llGetKey()) - オブジェクトのプリムの数だけを返しますが、アタッチメントとなっている場合は 0 を返します。
integer GetPrimCount() { //常にプリムの数だけを返します。
    if(llGetAttached())//装着されているか?
        return llGetNumberOfPrims();//アバターとプリムの数を返しますが、アタッチメントの上には座れないのでこれでいいです。
    return llGetObjectPrimCount(llGetKey());//プリムの数だけを返しますが、アタッチメントの場合ここは通りません。
}

PRIM_POSITION

オブジェクトに座っているアバターを、llSetLinkPrimitiveParamsPRIM_POSITION を使って動かすことができます。もともとは予定していなかった特性ですが、Andrew Linden により、リンデンはこの特性をサポートすることにしました。

下の例では、座っているプリムの位置を動かさずに x,y,z の方向にアバターを動かします。x,y,z が呼び出し元から 54 メートルを超えると、何もエラーを出さずに失敗します。x,y,z は他のリンクされているオブジェクトのプリム同様、オブジェクトの相対座標であることに注意してください。

アバターは常にリンクセットの中の最後のプリムです。このため、llGetNumberOfPrims は乗り物に座っている 1 人のアバターにも使用できます。

例:
llSetLinkPrimitiveParams(llGetNumberOfPrims(), [PRIM_POSITION, <x,y,z>]);

関連項目

関数

•  llGetLinkNumber スクリプトが入っているプリムのリンク番号を取得します。
•  llGetLinkPrimitiveParams 複数のリンクプリミティブのパラメータを取得します
•  llSetPrimitiveParams 複数のプリミティブのパラメータを設定します
•  llGetPrimitiveParams 複数のプリミティブのパラメータを取得します
•  llSetLinkAlpha
•  llSetLinkColor
•  llSetLinkTexture

記事

•  各種制限 SL の制限と制約
•  LSL での色
•  透明度
•  LSL での色
•  透明度

特記事項

PRIM_TYPE の top_size とクライアントのテーパー変換
範囲 尖る 尖らない 底が尖る
クライアント [-1, 1] 1.0 0.0 -1.0
PRIM_TYPE [0, 2] 0.0 1.0 2.0
LEGACY [0, 1] 0.0 1.0 なし
1.11 以前 [0, 1] 0.0 1.0 なし

top_size について解説

もともとの PRIM_TYPE のインターフェースが廃止されたとき (PRIM_TYPE_LEGACY, SL 1.5)、新しい PRIM_TYPE インターフェースはプリムの底を尖らせる機能がまだサポートされておらず、SL 1.11 (2年後) になってようやく導入されました。これが導入され新しい PRIM_TYPE が廃止されたときに、top_size の範囲が拡張されました。 それまでの間、クライアントの中で属性とその定義値が再定義されていました。この再定義と範囲の拡張により、異なる値で同じことをする2つのインターフェースが存在することになりました。それまでの間 PRIM_TYPE_LEGACY のインターフェースは更新されず、プリムの底を尖らせるのはサポートされないままでした。その結果、3つのインターフェースがそれぞれ異なる範囲をもつことになり、いじわるな警告をつけるはめになってしまいました。

All Issues

~ Search JIRA for related Issues
   CHANGED_TEXTURE is not triggered when texture is changed via script
   llSetRot and llSetPrimitiveParams (using PRIM_ROTATION) incorrectly implemented for child prims.
   We need PRIM_ALPHA_MODE_DEFAULT to revert alpha to old "if the texture has an alpha mask, use alpha. If not, don't" behavior.

脚注

  1. ^ フローティングテキストの alpha を 1.0 に設定すると「不可視」になります。
  2. ^ 記事中の範囲は、 実数空間 に記載されているものです。

Signature

function void llSetLinkPrimitiveParams( integer linknumber, list rules );
この翻訳は 原文 と比べて古いですか?間違いがありますか?読みにくいですか?みんなで 修正 していきましょう! (手順はこちら)
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。