📔

DaVinci Resolveのsettingファイルの再編集(空白、区切り線編)

に公開

インスペクタの空白と区切り線について新たな知見

先日海外フォーラムを見ていたら興味深い内容の投稿を見かけました。
私の目を引いたのは以下の一行です。

Spacer = { INPID_InputControl = "SpacerControl", },

INPID_InputControl = "xxx"はコントロールを追加した時等にコントロールの種類を指定するものでsettingファイル内ではUserControls = ordered() {...}ブロック内に記述されるコントロールの属性値の一つで、値としてはSliderControlCheckboxControl等があります。
DaVinci Resolveのコントロールの編集ダイアログではSpacerControlというのは選択肢として与えられていません。当然私もその存在を知りませんでした。

検証と仮設

IDと値からインスペクタに空白を挿入するコントロールである事は容易に想像できます。
実際に試してみた所思った通り空白を挿入する事ができました。

私はこれまでマクロのインスペクタに空白を挿入する時にはマクロ内で使用しているノードのApplyBlankをコピーして利用していましたが、それと全く同じ高さの空白です。
この方法であればマクロ内のノードに依存する事無くUserControls = ordered() {...}ブロック内に記述すれば良いので使い勝手が良いです。
ApplyBlankも内部的にはこの空白を利用しているのだと思います。

また、以前の記事でラベルコントロールを利用した空白の挿入について触れていましたが、この方法ではApplyBlankと比べて高さが大きくなってしまうという難点がありました。
https://zenn.dev/2ndillness/articles/f9d00918f1b27e


そして、空白が存在するという事は当然区切り線も存在するに違いないという仮説を建てました。

いくつかのモデルのAIDeep Searchを依頼してこの辺の情報の収集を試みましたが求めている情報には辿り着けませんでした。

仕方が無いのでそれっぽい単語をいくつか試しました。Border,Horizontal,Divider,Blank,Separatorと試した所でヒットしました。

INPID_InputControl = "SeparatorControl",

これで区切り線を指定する事ができました。
SpacerControlの例と同じくLINKS_Nameの属性値を記述していなくても問題ありませんでした。

サンプル

上記のような方法で実際にどのようになるかのサンプルを用意しました。

黄色い部分は分かり易くするために画像にマーカーを入れているだけです
ソース全体は以下のようになっています。

{
    Tools = ordered() {
        sample = GroupOperator {
            Inputs = ordered() {
                Input1 = InstanceInput {
                    SourceOp = "Background1",
                    Source = "slider01",
                },
                Spacer1 = InstanceInput {
                    SourceOp = "Background1",
                    Source = "Spacer",
                },
                Input2 = InstanceInput {
                    SourceOp = "Background1",
                    Source = "slider02",
                },
                Spacer2 = InstanceInput {
                    SourceOp = "Background1",
                    Source = "SpaceLabel",
                },
                Input3 = InstanceInput {
                    SourceOp = "Background1",
                    Source = "slider03",
                },
                Spacer3 = InstanceInput {
                    SourceOp = "Background1",
                    Source = "SpaceLabelMultiLine",
                },
                Input4 = InstanceInput {
                    SourceOp = "Background1",
                    Source = "slider04",
                },
                Separator1 = InstanceInput {
                    SourceOp = "Background1",
                    Source = "Separator",
                },
                Input5 = InstanceInput {
                    SourceOp = "Background1",
                    Source = "slider05",
                },				
            },
            Outputs = {
                MainOutput1 = InstanceOutput {
                    SourceOp = "Background1",
                    Source = "Output",
                }
            },
            ViewInfo = GroupInfo { Pos = { 0, 0 } },
            Tools = ordered() {
                Background1 = Background {
                    CtrlWZoom = false,
                    Inputs = {
                        Width = Input { Value = 1920, },
                        Height = Input { Value = 1080, },
                        UseFrameFormatSettings = Input { Value = 1, },
                        ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
                    },
                    ViewInfo = OperatorInfo { Pos = { 1045, -16.5 } },
                    UserControls = ordered() {
                        slider01 = {
                            LINKS_Name = "slider01",
                            INPID_InputControl = "SliderControl",
                        },
                        slider02 = {
                            LINKS_Name = "slider02",
                            INPID_InputControl = "SliderControl",
                        },
                        slider03 = {
                            LINKS_Name = "slider03",
                            INPID_InputControl = "SliderControl",
                        },
                        slider04 = {
                            LINKS_Name = "slider04",
                            INPID_InputControl = "SliderControl",
                        },
                        slider05 = {
                            LINKS_Name = "slider05",
                            INPID_InputControl = "SliderControl",
                        },
                        Spacer = {
                            INPID_InputControl = "SpacerControl",
                        },
                        SpaceLabel = {
                            INPID_InputControl = "LabelControl",
                            LINKS_Name = "",
                            INP_External = false
                        },
                        SpaceLabelMultiLine = {
                            INPID_InputControl = "LabelControl",
                            LINKS_Name = "<br><br><br>",
                            LBLC_MultiLine = true,
                            INP_External = false
                        },
                        Separator = {
                            INPID_InputControl = "SeparatorControl",
                        },
                    }
                }
            },
        }
    },
    ActiveTool = "sample"
}

まとめ

開閉式のラベルコントロールを使用すれば上下に区切り線が自動で入るのですが、それ以外の所でも単純な区切り線が欲しい場合もあると思います。また、コントロールが沢山並ぶと見辛い場合もあるので空白を挿入したい場合もあります。

これまで私はそうした時にマクロで使用しているノードに元から存在するBlankApplyBlankを利用したりラベルコントロールの名前を空文字にして利用したりしていましたが、この方法を知った事でマクロのUIをより簡単に整え易くなりました。
https://zenn.dev/2ndillness/articles/b1fdd7663a0081

興味がある方はぜひ試してみてください。
今回の情報は私が見つけることができていないだけかもしれませんが、公式ドキュメントでも見つけられませんでした。
この辺りの情報は本当に少なくて知らない事が沢山あります。

Discussion