本文へスキップ

BeginEditor

<imkit/node_editor.h>で宣言されています。

namespace imkit::node_editor {
EditorFrame BeginEditor(const char *id, GraphView graph, EditorState &state,
RequestBuffer &requests, const NodeStyle &style,
EditorOptions options = {});
}

これは公開ヘッダーとdocs/node-editor-api.jsonのimkit::node_editor::BeginEditor宣言です。

引数 型 意味と扱い
id const char* 同じImGui ID範囲でeditor領域を識別する文字列です。呼び出し時に読み取られます。
graph GraphView グラフIDとrevision、node・pin・linkの参照データ、callbackを含む値です。spanとcallbackの参照先は借用です。
state EditorState& 選択、表示位置、操作状態などをフレーム間で保つアプリ所有の状態です。同じeditorとContextで再利用します。
requests RequestBuffer& UI操作を書き込む有限容量のアプリ所有bufferです。アプリ側で読み取り、検証した後にclearします。
style const NodeStyle& このフレームへ適用するnode-editor styleです。EditorFrameへ値コピーされます。
options EditorOptions size、grid、snap、minimap、read-only等のフレーム設定です。省略時はdefault member valueを使います。

EditorFrameを値で返します。visibleで領域を描画できるか確認し、この値をDrawLinks、DrawNodes、NodePalette等へ渡します。graph、style、optionsも値に含まれ、stateとrequestsは呼び出し元を指す非所有ポインターです。戻り値は同じContextの同じフレーム内で使い終え、保存したり別Contextへ移したりしません。

#include <imkit/node_editor.h>
namespace ne = imkit::node_editor;
void DrawGraph(ne::GraphView graph, ne::EditorState& state,
ne::RequestBuffer& requests, const ne::NodeStyle& style) {
auto frame = ne::BeginEditor("material-graph", graph, state, requests, style);
ne::DrawLinks(frame); // reserve link drawing once; EndEditor draws after rows
if (frame.visible) {
ne::DrawNodes(frame);
}
ne::EndEditor(frame);
}

例の種別: 既存アプリから呼び出す関数です。graph、state、requests、styleはアプリ側で用意し、Dear ImGuiのフレーム内から呼びます。

BeginEditorはDear ImGui Contextや渡されたデータモデルを初期化しません。GraphViewのspan、文字列、callbackとuserデータ、および参照するstyle領域は借用です。少なくともEndEditorまで有効にし、NodeInspectorやDrawDetachedPreviewsが同じデータを使う場合は、それらの描画が終わるまで参照先を保ってください。callbackの実行中に参照先の配列などを再確保しないでください。

EditorStateはアプリ側が所有し、同じContext上のeditorへフレームをまたいで渡します。RequestBufferは渡されたspanの容量まで操作を記録します。容量不足やrevision不一致で操作の一部だけが記録された場合は適用せず、グラフIDとrevisionを照合して全体を受理または拒否してください。

Node Editorはv3.2.0の開発中APIです。操作要求の検証と適用はアプリ側で行います。OS入力、IME、DPIや配布SDKの受け入れ確認はこの関数の契約外です。