Closed21

context について

nikogolinikogoli

◇ context の要素の状態:4つの状態がある

  1. key があり、意味のある値 (真偽判定で True になる値) を value として持つ
  2. key があり、空のリストを value として持つ
  3. key があり、Noneを value として持つ
  4. key がない

ただし、対象が単数のものは 2 のように value = []となることはない

上記の4つは、以下のような状態にそれぞれ対応していると考えられる

  • 対象が単数の context 要素

    1. 条件を満たす要素が存在する
    2. --
    3. 条件を満たす要素が存在しない
    4. context 要素の対象外の状態

  • 対象が複数の context 要素

    1. 条件を満たす要素が1つ以上存在する
    2. 条件を満たす要素の存在が可能だが、存在しない
    3. 条件を満たす要素の存在が不可能
    4. context 要素の対象外の状態

selected_bones:オブジェクトモードでは3、編集モード+未選択では2、編集モード+選択では1となる

nikogolinikogoli

しかし現状では、上記の法則に従わず状態3(None) にならない要素が、Screen Context において2つ確認されている

  1. "objects"系:
    visible_objectsselectable_objectsselected_objectseditable_objectsselected_editable_objectsobjects_in_modeobjects_in_mode_unique_data
  2. "sequences"系:
    sequencesselected_sequencesselected_editable_sequences

対象が複数の Screen Context 要素は他に以下が存在するが、これらはNoneになる

  • bones系、selected_nla_strips
  • gpencil_layers系、editable_gpencil_strokes系、
  • fcurve系、selected_editable_keyframes
nikogolinikogoli

◇ context の Global と Local の話

The context members available depend on the area of Blender which is currently being accessed.

これを前提に、Global context と、それ以外の、表示条件が限定された context がある

  • Screen Context :条件は不明、どのエディターでも確認できる
  • View3D:3Dビューポート限定
  • Buttons:プロパティエディター限定
  • Image:画像 / UV エディター限定
  • Node:ノード系エディター限定
  • Text:テキストエディター限定
  • Clip:クリップエディター限定
  • Sequencer:シーケンサー限定

ただし Local な context 同士で重複する名前も多く、完全に隔離されているのは Text Context のみ

nikogolinikogoli

なお Global Context のうち、 region_dataは3Dビューポート以外では Noneとなる
View3D Context に入れないのは、どういう理由があるんだろうか? 何かの判定に使っている?

nikogolinikogoli

親スクラップを消したらどうなるんだろという軽い気持ちで実行して6個ぐらい吹き飛ばした記念の跡地

nikogolinikogoli

◇ 初期プロジェクト by コマンドラインの context
以下のような変化が確認できた

  1. Global Context

    • area<bpy_struct Area ...None
    • region<bpy_struct Region ...None
    • space_data<bpy_struct 何か ...None
    • しかし、 screenは通常起動時と同じく<bpy_struct Screen...
  2. Screen Context:

    • annotation_data_ownerNone
    • 変化というか、「3D View (や Topbar)ではない」って結果
    • (area = Noneなんだから当たり前? そもそも Space 持たないものと Space 依存のデータを比べて良いのか?)
  3. その他の Local Context は、全て項目なし

状態としては、

  • 紐付いた Local Context もなく、annotation のような特別なデータにアクセスすることもない、Info のようなもので
  • Area 系のデータがない状態

という感じだろうか?

nikogolinikogoli

「コマンドラインから動かしたとき = Screen Context が消えるとき」という期待通りにはならず
いやまあコマンドラインから動かすときこそcontext.active_objectが必要なわけだし、考えてみれば当然の結果なわけだが・・・

nikogolinikogoli

Screen Context でリストを取るもの

visible / selected / selected_editable / editable

表示 選択 選択+編集可 編集可 特殊
_objects objects_in_mode / in_mode_unique_data
_bones
_pose_bones selected_pose_bones_from_active_object
_gpencil_layers editable_gpencil_strokes
_fcurves selected_visible_fcurves
_sequences sequences
_nla_strips
_keyframes
nikogolinikogoli
  • オブジェクト:わかる
  • ボーン:わかる
  • ポーズボーン:編集する対象でないので、わかる (特殊はマルチ対策)
  • グリペンのレイヤー:アクティブはあっても選択/非選択の概念がないので、まあわかる
    ストロークを分ける理由は?
  • Fカーブ:なぜわざわざ visible をつける?
  • シーケンス:hide の概念がないので、sequencesが実質 visible に対応している? ロックの概念があったはずなので editable がある?
  • NLA :アクティブの概念がない(はず)なので、selected で代用している?
  • キーフレーム:わからん アクティブってなかったっけ?
nikogolinikogoli

この辺の話はいまんとこ脇に置かれているので、一旦閉じておく

このスクラップは2021/09/03にクローズされました