フィルタプラグイン

グラフ

概要

折れ線・棒・円・N角形グラフを作成・編集

詳細説明

SYNC グラフ

AviUtl2用のグラフフィルター。Delphi 37 / VCL / Win64。
分類は SYNC、名称は グラフ。

実装内容

  • N角形、折れ線、棒、積み重ね棒、円。棒・折れ線の縦横切替。
  • 構造・配置、文字・値、装飾を右側の縦スクロール領域に並べて編集する。
  • 表題・要素名・単位・値はAviUtl2側を正本として読み書きする。
  • 値の初期値は空欄。空欄のセルだけ仮データを自動生成し、明示された0はそのまま使用する。初期状態はグラフ未設定。値書式の空欄は非表示。
  • 自動/手動の目盛、系列ごとの線色・塗色・透明度、折れ線のマーク。
  • 4分類のフォント、サイズ、太字・斜体、色、縁取り・影・ぼかし。
  • 共通線の線種・太さ・縁取り。系列線と円区切り線にも適用する。
  • 枠内の移動・周囲8点のハンドルによるリサイズ、文字の相対位置編集、初期化。
  • 枠のドラッグ中は描画済みのグラフ画像を追従表示し、操作終了時に再描画する。
  • タイトル・要素名などの文字も優先選択でき、共通の8点ハンドルで個別に移動・拡大縮小する。ドラッグ中は文字画像が追従する。
  • 文字選択時は枠下の縁取り・影位置・縁ぼかし・影ぼかしアイコンをドラッグして装飾する。0は無効、影位置は0付近に吸着する。
  • 文字選択時だけ上部に文字ツールバーを表示する。Skiaで利用できるフォント、太字・斜体、文字・縁取り・影の色を編集し、右側の装飾群は線・系列の設定に絞る。文字サイズはキャンバス上のハンドルで調整する。
  • 参考元の共通ColorPickerPanelを右ペイン下部に配置し、選択中の線色・縁取り色・系列線色・塗色へ反映する。色コードはHEX表示で、HEXとカンマ区切りRGB十進を入力できる。既存のアルファ値は保持する。
  • 数値欄では数字にカーソルを重ねたホイール操作でその桁を増減する。右ペインの他の場所では設定を縦スクロールする。
  • 編集前へ戻すアイコンと要素名配置のUndoアイコン。フォームの×で採用。入力エラー中は理由を表示する。
  • 古い設定で省略された項目は初期値で補完する。設定JSONが壊れていても初期状態の編集画面を開き、理由を表示する。
  • 編集背景の透明部分は黒、範囲外は灰色。影とトンボで範囲を表示する。
  • グラフは透過RGBAへ描画してホストの入力映像に合成する。編集用の影・トンボ・枠は出力しない。
  • AviUtl2側の「推移方法」なし・列・行・セル列方向・セル行方向、「アニメーション」なし・フェード・伸長、「進行」、進行位置へ追従する「演出 拡大率」100~300%。伸長開始時は短くフェードし、値ラベルは途中値に追従する。

ソース構成

Source/Core、Persistence、Rendering、Editor、UI、Shell、Hostへ責務を分離した。描画種類はRendering/Charts、装飾ハンドルはEditor/Interaction、設定パネルと数値入力はUI/Settings/Panels・Controlsへ配置した。
専用処理は汎用ライブラリ化せず、既存Libを利用する。
詳細は 設計と検証、設定画面UI改善仕様、開発ルールは note.md、採用部品は Lib一覧 を参照。

ビルド・検証

.\Source\Lib\AviUtl2Canvas\Tools\build.ps1 -Config Debug
.\Source\Lib\AviUtl2Canvas\Tools\build.ps1 -Config Release
.\Tests\run.ps1 -Config Debug

通常ビルドでC:\ProgramData\aviutl2\Plugin\SYNC_Graphにauf2とsk4d.dllを自動配置する。AviUtl2を終了してからビルドする。

.\Source\Lib\AviUtl2Canvas\Tools\build.ps1 -Config Release -Install

-Installは旧コマンドとの互換引数。使用中のプラグインを上書きできなければビルドエラーになる。

操作

  1. AviUtl2で「SYNC → グラフ」をフィルターとして追加して設定を開く。
  2. 右側の縦並び設定でグラフ種類、要素数、データ数を指定し、行ごとに要素名と値を入力する。
  3. 文字を選択して上部の文字ツールバーから書体や色を編集する。要素一覧の下の色一覧から対象を選び、下部の共通カラーピッカーで変更する。軸・枠は装飾群で編集する。
  4. 枠内ドラッグで全体移動、周囲8点のハンドルでリサイズ、文字ドラッグで個別位置を調整する。
  5. Ctrl+ドラッグまたは中央ドラッグでキャンバス移動、ホイールで拡大縮小する。
  6. 値書式欄で右クリックすると書式プリセットを選べる。要素名配置を変更すると個別位置をリセットし、Undoアイコンで直前の配置へ戻せる。
  7. ×で閉じると採用する。編集前に戻すアイコンは編集を開いた時点の内容に戻す。

「進行」の終点は要素数×データ数×100。列・行では同じ組のセルが同時に進み、その組にセル数×100を割り当てる。セル列方向・セル行方向では1セルずつ100で完成する。「なし」は進行値に関係なく全セルを表示する。進行の初期値は0、演出拡大率の初期値は100%。フェード・伸長を選び、AviUtl2で進行にキーフレームを付けるとアニメーションする。ワイプ・ズーム・スライドは仕様書上の追加候補であり、現在は選択肢に含めない。
背景は編集開始時のスナップショット。同一位置の複数効果の識別には既存Libの制約がある。

確認結果(2026-09-29)

  • 最新コードのWin64 Debug / Release: 警告0・エラー0でビルド成功。
  • GraphTests: 27項目成功。数値行列、不正入力、数値書式、積み重ねスケール、JSON復元、位置保持、旧版移行、進行・フェード、4種の透過描画、アルファ合成。
  • EditorSmoke: 空のフォーム生成・読み込み、グラフ付きフォーム生成・描画に成功。編集APIの改行エスケープを含む初期値から、4種類のグラフのモーダル終了と複数行の保存も検証済み。
  • PluginSmoke: 生成したauf2のDLLロード、エクスポート、初期化、SYNC登録、nilコールバック、4種の映像合成、終了に成功。人工ホストによる検証。
  • 独立した編集画面: 日本語表示、黒背景・灰色作業面・影・トンボ、グラフ移動、アイコンでの復元、折れ線から棒への変更、装飾ページの表示を実操作で確認。
  • 既存ToolbarIconのマウスクリック不発を修正し、クリックで復元できることを確認。
  • 実AviUtl2: 新しい共有項目とアニメーション項目の登録を確認。初回の設定フォーム生成エラーは修正し、独立フォームテストで再確認済み。
  • 設定フォームの親ウィンドウ未設定エラーが再報告されたため配置先を照合し、修正前のauf2が残っていたことを確認。AviUtl2終了後に最新Releaseとsk4d.dllを配置し、生成物とのSHA256一致を確認した。配置済みauf2のPluginSmokeと独立EditorSmokeも成功。実AviUtl2上での再確認は未実施。
  • グラフ種類選択後に閉じられない問題: 編集APIが返す複数行項目のリテラル \n を生の値として解釈していたため修正。要素名・値の読み込みと保存で改行変換を行う。実ホストで修正前の数値エラーを確認し、修正版は配置済み。修正後の実ホスト操作確認はユーザーが行う。
  • 最新修正版での実AviUtl2上の設定採用、プロジェクト保存・再読込、推移操作、複数DPI、長時間性能は未確認。
  • 旧最小キャンバス版では実AviUtl2で背景取得・パン・ズーム・メモ保存を確認していたが、新グラフ実装の確認結果とは区別する。
  • Git管理下。文書変更後に git diff --check を実施。

編集UIの改良(2026-09-29)

Windows Modern Darkを編集フォームと色選択画面に適用。右ペインを460px、表の項目列を220pxへ拡張し、フォント実測に基づく行高・余白を設定した。入力欄・ページタブ・ヘルプの寸法も調整。共通処理は参考元のDarkEditorライブラリへ登録済み。独立フォームの描画画像とモーダル終了を検証し、実AviUtl2での確認はユーザーが行う。

現在の設定画面はページを廃止し、構造・目盛り、行ごとの文字・値、装飾を縦並びにした。要素数・データ数・目盛・相対角度は専用数値欄で編集し、グラフ枠の位置と寸法はキャンバス上の8点ハンドルとドラッグで調整する。相対角度はN角形と円の描画で使用するため残す。線種は描画付きコンボ、線太さ・縁取り太さはスライダーを利用する。共通カラーピッカーは線・系列と文字ツールバーの色対象に接続した。縦スクロール、桁ホイール、行入力のカーソル移動、要素名配置のUndo、色反映はEditorSmokeで検証した。実AviUtl2での操作と異なるDPIでの表示はユーザー確認対象。

設定欄は幅312pxへ縮小し、各入力欄を配置し直した。線種リストの行高と展開幅を指定し、数値欄と線幅スライダーへのホイール操作をEditorSmokeで確認した。Debug/Releaseビルドと配置は成功。実AviUtl2での見た目と操作は未確認。

線種コンボの破線・点線が実線に見える問題を、線分の間隔を明示的に描く方式で修正し、線種名も併記した。Debug/Releaseビルド、既存スモークテスト、配置は成功。数値入力欄のホイール操作は実ホストで動作していないとの報告があり、別途検討する。

数値入力欄を表示用の描画コントロールと編集時のみ表示するTEditに変更した。数字上のホイールは桁単位で増減し、それ以外の位置では設定欄をスクロールする。クリックで全選択編集、Enterで確定、Escで取消、フォーカス喪失で確定する。EditorSmokeではクリック・ホイールのWindowsメッセージ、各編集終了操作を検証した。実AviUtl2での操作は未確認。

位置・寸法の数値欄を削除し、設定の再適用でキャンバス上の枠変更を上書きしないようにした。設定欄の配置・スクロールは Source/UI/Settings/GraphSettingsPane.pas、枠の共通計算は Source/Editor/Geometry/GraphViewBounds.pas、ドラッグ中の画像キャッシュは Source/Editor/Preview/GraphViewBitmapCache.pas に分割した。UIユニットは Settings と Text に整理した。EditorSmokeで枠値の保持を検証し、96DPIのフォーム画像で上部・下部の配置を確認した。Debug/Releaseビルドと配置に成功。実AviUtl2上の最終操作は未確認。

ビルド後処理(SYNC_ScreenLayout準拠)

Debug/Releaseともプロジェクト直下にDLLを生成する。標準のビルド前イベントで配置先フォルダーを作成し、ビルド後イベントのcopy /Yでauf2名へのコピーとLib/Skia/Win64/sk4d.dllのコピーを行う。両コピー成功後に元DLLだけを削除する。参照元自体には削除処理はない。

配置先はC:\ProgramData\aviutl2\Plugin\SYNC_Graph。独自の後処理スクリプト、GraphInstall、NoInstall、Win64/Pluginへの二重出力は廃止した。RSM・DCUは保持する。使用中のプラグインへのコピー失敗はビルドエラーとなる。旧Win64/Pluginの過去生成物は未清掃。

AviUtl2側アニメーション(2026-09-30)

設定画面へ項目を追加せず、ホスト側に「推移方法」「アニメーション」「進行」「演出 拡大率」を登録した。推移方法はなし・列・行・セル列方向・セル行方向の5種類。グラフアニメーションはフェードと伸長を実装し、初期状態を保つ「なし」も選べる。伸長では開始時の短いフェードを共通動作とし、値ラベルを途中値に同期する。拡大率100%超では現在進行中の位置を中心に映像を拡大する。

GraphTestsでは5種の推移方法、途中値・フェード・拡大の描画、4種のグラフでの途中フレームを検証した。PluginSmokeではホスト項目の登録、進行値と拡大率を変更した映像出力を検証した。実AviUtl2でのキーフレーム操作と見た目は未確認。

色・スタイル設定UI(2026-09-30)

要素入力の下に番号付きの色一覧を追加。棒・折れ線・円は要素数、N角形はデータ数に連動し、7色ごとに折り返す。色をクリックすると共通カラーピッカーの対象になる。折れ線では選択した要素のマーク(なし・円・角)と線種(実線・破線・点線)を編集でき、線色をマークにも使用する。系列別線種をJSONに保存する。旧装飾群の系列設定を削除し、共通線の太さ・縁取り・軸色などは残した。透明度のUIは保留し、既存の透明度値は保持する。

Win64 Debug/Releaseは警告0・エラー0でビルド・自動配置成功。GraphTests 52項目、EditorSmoke、PluginSmoke成功。色数の種別切り替え、折れ線専用項目、色選択・保存、構造縮小後の色保持を自動検証した。実AviUtl2での操作・保存再読込・異なるDPIでの見た目は未確認で、ユーザー確認対象。

線設定の行表示・入力エラー時の終了(2026-09-30)

線設定は対象セレクタを廃止し、軸・目盛り・グラフ領域の外枠・データの輪郭を縦に並べた。各対象の色、太さスライダー、描画付き線種コンボを1行に配置し、直下に既存の縁取り色・太さを残す。棒の縁、N角形データの外周、円の扇形の外周・区切りには共通線の色・太さ・線種を反映する。折れ線の色・線種は要素設定を採用し、共通行では非表示にして太さを編集する。線太さ0は線と縁取りを非表示にし、塗りを維持する。

入力検証で閉じる操作を拒否する処理を廃止。不正入力があるときは、生入力、エラー、編集中の設定、最後の有効な設定・共有文字を %LOCALAPPDATA%\SYNC_Graph\Recovery の固有名JSONへ保存し、ホストには最後の有効な状態を返して閉じる。JSONは手動修復用で、自動再適用は行わない。保管失敗は警告を表示するが閉じる操作は許可する。

Debug/Releaseビルドは警告0・エラー0で成功し、Releaseを自動配置。GraphTests 71項目とEditorSmoke・PluginSmoke成功。線色・太さ・線種の4種の描画、0幅の保存、入力エラー時の復旧用JSON内容とモーダル終了を検証。独立フォームの96/144DPI描画で線設定行を確認。実AviUtl2での最新版の操作は未確認。

線設定の整列とスライダー負荷軽減(2026-09-30)

縁取りのキャプションを削除し、通常線・縁取りの色と太さを同じ列へ整列。太さスライダーは94pxへ縮め、線種コンボは132pxへ拡大した。線種名の実測幅で見本線と文字を配置する。スライダー操作中は対象行の表示だけを更新し、プレビューは60ms間隔でまとめて更新する。マウスを離すと最終値を即時描画する。

Debug/Releaseビルドは警告0・エラー0、Releaseを自動配置。GraphTests 71項目とEditorSmoke・PluginSmoke成功。連続スライダー変更の予約、マウス解放での最終描画、列の整列を検証し、独立フォームの96/144DPI画像で線種が収まることを確認。実AviUtl2での操作感・速度は未確認。

線種欄は116pxへ短縮し、名称を左・見本線を右に配置した。要素数/データ数は常時編集できるTEditと右側のTUpDownへ戻した。矢印で現在の入力値を増減し、各上限・下限を守る。不正入力は自動的に捨てず、既存の復旧用保存で保管する。Debug/Releaseは警告0・エラー0でビルド・配置成功、GraphTests 71項目とEditorSmoke・PluginSmoke成功。上下矢印の増減と独立フォームの表示を確認。実AviUtl2での最新版操作は未確認。

N角形の複数データ重なり(2026-09-30)

N角形の描画を全データの面→全データの輪郭→値ラベルの順に変更。最背面の面は通常の不透明度、2つ目以降の面は40%に自動補正する。既存のデータ透明度・アニメーションのフェードを乗算し、設定値自体は変更しない。輪郭は面の自動透過補正を適用せず各データの色を使用し、太さ・線種・縁取りは共通設定を維持する。N角形の共通線色欄は非表示とした。完全一致する輪郭は重なるため、同値データの個別識別には限界がある。

Debug/Releaseは警告0・エラー0でビルドしReleaseを自動配置。GraphTests 75項目、EditorSmoke、PluginSmoke成功。重なり部分の混色、不透明な最背面、手前だけの領域のアルファ、面より後に描く奥の輪郭とデータ色を画素で検証。実AviUtl2での最新版表示は未確認。

フォント解決と文字の初期縁取り(2026-09-30)

一覧のFamilyName完全一致による除外を廃止し、一覧と描画でGraphFontsの書体解決を共有する。Skiaで名前が一致しない場合はWindowsのGDIが選択した実フォントのデータを読み込み、言語別の書体名・別名にも対応する。描画時は実グリフを調べ、指定書体にない文字だけをYu Gothic UI・Meiryo・Segoe UI・Symbol・Emojiの順に代替する。元の指定書体が対応する文字はその書体で描く。書体はスレッド保護したキャッシュで保持する。OS上の候補にもない文字を完全に補う保証はない。

新規の表題・要素名・単位・値の縁取り初期値は1。設定に明示された縁取り0などの既存値は変更しない。一覧外の保存書体を一律に「描画不可」と表示せず「一覧外」と表記する。

Debug/Releaseは警告0・エラー0でビルドしReleaseを自動配置。GraphTests 92項目、EditorSmoke、PluginSmoke成功。MS ゴシックの日本語グリフ、Arial+日本語の混在文字の欠落なし・文字順、新規縁取り1、保存済み縁取り0の維持を検証。ユーザーの問題が出た個別フォントと実AviUtl2の最新版操作は未確認。

文字を最前面へ描画(2026-09-30)

文字の描画要求をGraphPainterで保管し、グラフの面・マーク・全線・外枠の描画完了後にまとめて描く方式へ変更。全グラフ種類で要素名・値・目盛り・表題・単位と、それらの縁取り・影を形状より前面へ表示する。文字の位置補正・アニメーション透明度・個別文字の描画/除外・選択用の範囲情報を維持する。

Debug/Releaseは警告0・エラー0でビルドしReleaseを自動配置。GraphTests 96項目、EditorSmoke、PluginSmoke成功。4種のグラフ内部へ移動した要素名の不透明な画素が面・線に覆われないことを検証した。実AviUtl2での最新版操作は未確認。

完成時点の整理(2026-09-30)

ユーザー確認により現機能を完成とした。編集フォームから開始時の復元・配置Undo・最後の有効状態をGraphEditStateへ、背景画像の保持・プレビュー合成・文字編集レイヤー生成をGraphEditorPreviewへ分離。日本語コメントをnote.mdに合わせ、責務・データ所有・有効期間・スレッド・制約を補足した。フォントデータの参照ストリームをキャッシュが所有し、書体より後に解放するよう整理した。既存の作業ファイルとLibは保持する。

最終Win64 Debug/Releaseは警告0・エラー0で成功、Releaseを自動配置。GraphTests 96項目、EditorSmoke、PluginSmoke成功。復元・配置Undo・入力エラー保管・文字操作・4種描画の既存検証を通した。実AviUtl2上の整理後コードの再確認は未実施。

提示サンプルに合わせたN角形の調整(2026-09-30)

最背面も含む全データの面を不透明度40%へ変更し、同じ基準で重なりを混色する。軸・目盛線を面の後に重ね、最初の放射軸に目盛値を表示する。輪郭は各データ色で面・軸の後に描き、全文字は最前面を維持する。旧「最背面は不透明」の方式を置き換えた。凡例パネルの追加は保留し、全グラフ共通の将来実装予定を検討仕様へ記録した。

Win64 Debug/Releaseは警告0・エラー0でビルドしReleaseを自動配置。GraphTests 97項目、EditorSmoke、PluginSmoke成功。半透明面の混色・アルファ、輪郭と軸の前面表示を画素で検証。実AviUtl2での最新版の表示確認は未実施。

データの縁・塗りの独立設定(2026-09-30)

N角形・棒・円の色一覧は番号ごとの「縁」「塗り」の対に変更した。選択した番号の塗り模様を「なし/ベタ/斜線/逆斜線/交差線」から選べる。なしは面を描かず、縁だけのグラフを作れる。線太さ0では線自体の縁取りも描かない。データ外周の共通色欄は非表示とし、太さ・線種・線の縁取りは既存の行を使用する。折れ線は線色・マーク・線種を表示する。

保存JSONはversion 3。旧版2の外周色をデータの縁色へ移し、塗り模様はベタとして読み込む。模様描画はGraphPatternFillに分離し、図形内に切り抜いた透明背景の線として描く。N角形では三角形に分割した面でも同じ座標基準で模様をつなげる。凡例パネルは将来予定のまま保留する。

Win64 Debug/Releaseは警告0・エラー0でビルドしReleaseを自動配置。GraphTests 120項目、EditorSmoke、PluginSmoke成功。縁と塗りの独立編集、塗りなしと線太さ0、塗りなしで残る縁、模様の空隙とクリップ、保存と旧版移行を検証した。実AviUtl2での操作・見た目と異なるDPIでの表示は未確認。

配布ZIPとカタログ

Releaseビルド後、Setup\make_release_zip.bat を実行すると Setup\SYNC_Graph.zip を作成する。
配置済みの C:\ProgramData\aviutl2\Plugin\SYNC_Graph から SYNC_Graph_Filter.auf2 と sk4d.dll を取得し、README.mdとともにZIP内の SYNC_Graph フォルダへまとめる。必要なファイルがない場合は作成を中止する。

Setup\SYNC_Graph.catalog.json はAviUtl2カタログ用。GitHub Releasesの添付ファイル名は SYNC_Graph.zip とする。配布前に version 配列へ実際のリリース版、公開日、配布したauf2の XXH3_128 を記入する。現時点では未配布のため空配列としている。

Skiaランタイム Lib/Skia/Win64/sk4d.dll はGit管理対象とし、クローン先でもビルド後の配置に利用できるよう同梱する。コピー元は D:\DelphiProg\SYNC_ScreenLayout\Lib\Skia\Win64\sk4d.dll。2026-09-30にコピー元とのSHA256一致、Win64 Debug/Releaseのビルドと配置を確認した。

DPI対応を修正(2026-09-30)。フォームのスタイル・位置を設定した後にハンドルのDPIを確定し、各部品を生成するときに96 DPI基準の寸法をCurrentPPIへ換算する。再読込時の動的入力行、パネル間隔、スクロール量もDPI換算する。100%・150%・200%と再読込の寸法テスト、既存テスト、150%のフォーム画像を確認した。Win64 Debug/Releaseは警告0・エラー0でコンパイル成功。初回の配置は実AviUtl2がDLLを使用中で失敗したが、終了後にReleaseを再ビルドし、auf2とsk4d.dllの標準配置および配置済みプラグインのスモークテストに成功した。実ホストでの見た目は未確認。

初期生成時の高DPI対応を再修正。親へ接続した後の固定ピクセル指定を設定欄、構造・データ・線・色パネル、文字ツールバーから除去した。生成後のScaleForPPIだけでなく、最初から96/144/192 DPIで生成する検証を追加。200%のフォーム画像で入力欄の重なりとカラーピッカーの極端な縮小がないことを確認した。Debug/Releaseの標準ビルドと配置、既存テスト、配置済みプラグインのスモークテストに成功。実AviUtl2上での表示は未確認。

N角形グラフの枠追従を修正(2026-09-30)。回転後の頂点の外接範囲をグラフ枠へ縦横独立に合わせるため、横長・縦長の枠でも最大目盛の外周が四辺に届く。三角形など奇数角形の下側余白も解消する。描画と演出拡大の注目位置はGraphRadarGeometryの同じ座標計算を使用する。3/4/5/8角形と0/17/90度の範囲一致テスト、既存描画・編集・プラグインテストが成功。Debug/Releaseビルドと標準配置も成功。実ホストでの見た目は未確認。

8点サイズ変更ハンドルのホバーとドラッグ開始を緩和(2026-09-30)。共通のHitBoundsHandleで従来の7ピクセルから12論理ピクセルへ拡大し、CurrentPPIで換算する。小さい文字枠で判定範囲が重なった場合は最も近いハンドルを選ぶ。グラフ枠と全文字枠のカーソル表示・ドラッグ開始は同じ判定を使う。Debug/Releaseコンパイルと既存テストが成功し、AviUtl2終了後にReleaseの標準配置も成功。

8点ハンドルの判定幅を再調整(2026-09-30)。DPIに比例する固定幅を廃止し、シーン上の8単位を表示Zoomで換算する。ズーム50%で半幅4px、100%で8px、200%で16pxとなり、ホバーとドラッグ開始で共通使用する。重なり時の最寄りハンドル選択は維持する。Debug/Releaseビルド、既存テスト、標準配置に成功。

文字のスナップを追加(2026-09-30)。全文字枠の移動では他の文字の左端・水平中心・右端、および上端・垂直中心・下端へシーン座標6単位以内で吸着する。拡大縮小では他の文字の実サイズ(分類別サイズ×個別倍率)との差が3%以内なら同じサイズに吸着する。ドラッグ開始時の枠・オフセット・倍率を基準に計算し、吸着後もドラッグ量が閾値を超えると離れる。位置・同サイズ・分類を跨ぐサイズ比較・吸着解除テストと既存テスト、Debug/Releaseビルド、標準配置が成功。

文字スナップの吸着を強化し、編集中のガイドを追加(2026-09-30)。位置の許容距離をシーン6単位から10単位、サイズ差を3%から6%へ拡大。サイズ吸着の相手を黄色の四角で囲み、位置吸着時は一致したX/Y座標に黄色の破線を表示する。ガイドはキャンバスの編集表示だけに描き、映像出力や保存データへ含めない。吸着対象とガイド座標を確認するテスト、既存テスト、Debug/Releaseビルドと標準配置が成功。

等間隔の文字配置スナップを追加(2026-09-30)。同じ分類の2つの文字が同じ行・列にあるとき、中心間距離を基準に、左右・上下への等間隔延長位置と2つの中央位置を候補にする。通常の端・中心揃えと比較して最も近い候補へ吸着し、既存の黄色いガイド線を表示する。行・列から離れた文字へは等間隔候補を適用しない。横・縦・中間挿入・無関係な行のテスト、既存テスト、Debug/Releaseビルドと標準配置が成功。

グラフ種類の選択順を未設定・棒・折れ線・円・レーダーチャートへ変更。旧N角形の表示名はレーダーチャートとし、保存する種類番号は維持する。Debug/Releaseビルド、既存テスト、標準配置が成功。

等間隔スナップ時は、基準となる3つの文字中心の間の2区間を黄色い両矢印で表示する。横並び・縦並びに対応し、移動中に等間隔が成立した場合だけ編集キャンバスへ描く。等間隔表示情報のテスト、既存テスト、Debug/Releaseビルドと標準配置が成功。

凡例の色印を文字の子として実装(2026-09-30)。棒・折れ線の凡例文字の移動、文字サイズ、個別拡大縮小へ色印と距離が追従する。色印は文字サイズの70%幅・50%高さの長方形とし、文字左端を基準に相対配置する。色印そのものをドラッグすると文字サイズを単位とする相対位置だけが変わり、親文字の位置・倍率は変わらない。個別の相対位置はlegendOffsetsへ保存し、省略された旧設定は標準位置で補完する。描画レイヤーの選択・除外にも文字と一緒に対応するため、編集中の移動プレビューで色印が置き去りにならない。描画追従・倍率・保存再読込・旧設定・印の実ドラッグのテストと既存テスト、Debug/Releaseビルドと標準配置が成功。実AviUtl2での操作確認は未実施。

凡例色印の選択枠とスナップを追加。選択中は色印の周囲に枠を表示し、ドラッグ終了後も選択枠を維持する。移動では他の色印の端・中心と、同じ行・列の等間隔候補へ吸着し、座標ガイド線と等間隔の両矢印を表示する。相対位置として保存するため、文字への追従は維持する。凡例の座標揃え・等間隔テスト、既存テスト、Debug/Releaseビルドと標準配置が成功。

完成時の構成整理(2026-09-30)。GraphViewからスナップのガイド描画をEditor/Preview/GraphSnapGuides、文字の拡大縮小計算をEditor/Interaction/GraphTextTransformへ分離し、462行から397行に整理した。各フォルダのPascalユニット数は最大5で、大量の集中がないことを確認。新しい独自汎用Libは作成せず、既存の責務別フォルダと検索パスを利用した。note.mdに従い、役割、借用データの所有者・有効期間、シーン座標、ドラッグ開始値を使う理由、基線補正の理由を日本語で記載し、変更PascalはUTF-8 BOM付きで保存した。Win64 Debug/Releaseは警告0・エラー0、描画・編集・プラグインの既存テスト成功、Releaseの標準配置と配布ZIP作成に成功。今回の整理後の実ホストでの操作確認は未実施。

繰り返し再生時の停止対策(2026-09-30)

毎フレームの編集背景取得でホストのD3D11 immediate contextへ直接CopyResourceと待機付きMapを行う経路を廃止した。この経路はGPU待機・ホスト側とのコンテキスト競合を起こし得るが、報告されたフリーズの原因としては未確定。合成に必要なGetImageDataのRGBAを背景として所有配列へ保存し、ホストの画像取得・出力関数は描画キャッシュのロック外で呼ぶ。編集背景はシーン全体の合成済み画像ではなく、対象効果の入力画像になる。オブジェクト寸法が無効な場合は処理を省略し、シーン寸法を入力バッファ寸法として代用しない。

Win64 Debug/Releaseは警告0・エラー0でビルドし標準配置に成功。GraphTests 137項目、EditorSmoke、PluginSmokeに成功。追加検証は進行値を変えた300回の映像コールバックとGPUコールバック不使用を確認する。修正版配置後、ユーザーが実AviUtl2で再生を繰り返し、報告されたフリーズが解消したことを確認した。

黒フレーム・円グラフ再生停止への追加対策(2026-10-04)

Skiaの初期化で浮動小数点例外をマスクするのは、初期化を行ったスレッドだけだった。修正前のプラグインでは、別の例外マスクを持つ再生スレッドを想定すると描画が失敗し、映像コールバックが0を返すことを人工ホストで再現した。公式SDKでは、この戻り値は後続フィルター・出力処理の中断を意味するため、黒フレームにつながる経路となる。

GraphRendererで描画中だけWin64の浮動小数点例外をマスクする。Skiaの参照解放まで完了してから、呼出元の例外マスク・丸めモード・例外状態を復元する。設定や値の明示的な入力エラーは引き続き例外として扱う。

Win64 Debug/Releaseは警告0・エラー0でビルドし、Releaseを標準配置した。GraphTests 142項目、EditorSmoke、PluginSmokeが両構成で成功。追加テストは描画成功・入力エラー時の浮動小数点状態の復元と、初期化スレッドとは別のスレッドで全4種類・全5推移方法・フェード/伸長・4種類の塗り模様・破線/点線・拡大150%を組み合わせた1,920フレームを検証する。開始・微小進行・区画の切替前後・完了・逆方向の進行で、出力継続、入力背景の保持、描画結果、ホストの例外マスクの保持、GPUコールバック不使用を確認した。既存の300回反復再生も成功し、git diff --checkを通した。

この初回修正版について、ユーザーが実AviUtl2で円グラフのフリーズ解消を確認した。黒フレームも解消したように思うとの報告があった。ほかのグラフへの対策も依頼されたため、下記の追加修正を行った。

全グラフの再生対策と空欄データの自動生成(2026-10-04)

描画前の進行値の文字列化・JSON復元も、ホストスレッドの浮動小数点例外設定に影響されることを追加テストで再現した。GraphRenderContextでこの準備処理から描画までを共通で保護する。ホストの画像取得・出力関数は、呼出元の例外マスク・丸めモード・例外状態を保った状態で呼ぶ。棒・積み重ね棒・折れ線・レーダー・円に適用される。

空欄・空白だけのセルと、入力行・列に存在しないセルには、描画時に20~90の仮データを生成する。行・列ごとに毎回同じ値を使い、再生や構造変更で値を揺らさない。0,,12は中央だけが生成対象で、0・0.0・入力済みの数値は維持する。不正な文字列を仮データに置き換えない。新規の値は空欄とし、編集画面で増えたセルも0で埋めず、空欄のまま保持・保存する。入力行を消した場合は表示中のセルもキャッシュから消し、構造変更で以前の値を復活させない。縮小で隠れたセルの値は保持する。生成値は入力文字列や設定JSONへ書き込まない。範囲外の空欄だけの区切りは無視し、範囲外の非空欄は入力エラーにする。

Win64 Debug/Releaseは警告0・エラー0でビルドし、Releaseを標準配置した。GraphTests 161項目、EditorSmoke、PluginSmokeが両構成で成功。空欄・0・混在・不正入力、フレーム間の値保持、拡張・縮小・再拡張時の空欄と入力値の保持、全4種類の仮データ描画を確認した。別スレッドの1,920フレーム再生検証は、複数列、横向きの折れ線・積み重ね棒、空欄と0の混在、精度例外も有効なマスクへ拡張した。この追加修正版について、ユーザーから正常に動作しているとの報告があった。実AviUtl2での保存再読込は未確認。

軸・目盛線をデータより上に描画(2026-10-04)

棒・積み重ね棒・折れ線では、全データの面・縁・線・マークの後に目盛線、X軸、Y軸を重ねる。レーダーも全データの面・輪郭の後に目盛線と放射軸を描く。外枠はその後、全文字は最前面に描く。

修正前は重なった目盛線がデータ線に覆われることを画素テストで再現した。修正後は縦・横の折れ線とマーク、棒・積み重ね棒の面と縁、レーダーの輪郭との重なり16項目が成功。Win64 Debug/Releaseは警告0・エラー0、GraphTests 177項目、EditorSmoke、PluginSmokeが両構成で成功し、Releaseを標準配置した。文字が最前面に残る検証と既存の反復再生検証も成功。git diff --checkを通した。今回の描画順変更の実AviUtl2での見た目は未確認で、note.mdの方針に従いユーザーが確認する。

データ線の設定を先頭へ移動(2026-10-04)

線設定の「棒の縁」を先頭へ移し、要素ごとの色・スタイル欄のすぐ下へ配置した。折れ線・レーダーのデータ外周・円の扇形外周も、対応する設定行を先頭へ置く。設定行の表示順だけを変更し、保存する線の番号と色・太さ・線種の編集先は維持する。

Win64 Debug/Releaseは警告0・エラー0。GraphTests 177項目、EditorSmoke、PluginSmokeが両構成で成功し、既存のデータ線・色・太さ・線種の編集とDPI検証を通した。100%・150%・200%の編集画面画像で、棒の縁が線設定の先頭に表示されることを確認した。AviUtl2が起動中のため、ビルド後の配置処理をコマンドラインで一時的に無効にして Win64/Tests/StyleOrder/Debug と Release へ出力し、その新しいDLLでプラグイン検証を行った。標準配置はAviUtl2の終了待ちで、実ホストでの操作確認は未実施。

値・目盛の四点選択と共通サイズ変更(2026-10-04)

データ値・目盛を選択すると、選択枠の四隅にだけサイズ変更ハンドルを表示する。ドラッグは「値・目盛」分類の共通文字サイズを変更し、全値・目盛へ反映する。既存の個別位置・倍率は保持し、文字の基線と標準位置を維持する。目盛にも選択用IDを付けるが、個別の位置・倍率の保存領域へは追加しない。表題・要素名・単位・グラフ枠は従来の8点ハンドルを使う。

共通サイズのドラッグは単一文字のキャッシュ移動を使わず、既存の50msタイマーで全体を再描画する。同時に変わる値・目盛はサイズ吸着先から除外し、他の分類とのサイズ吸着を維持する。共通文字サイズは既存の保存範囲1~500へ収める。

Win64 Debug/Releaseは警告0・エラー0、GraphTests 197項目、EditorSmoke、PluginSmokeが両構成で成功。全4種の値・目盛のサイズ追従、個別位置・倍率の保持、共通サイズの保存再読込、上限、四隅それぞれの実イベント操作、辺中央のハンドル除外、ドラッグ中の更新、目盛の選択を検証した。編集画面画像で四点表示と全値・目盛の拡大を確認し、git diff --checkを通した。前節と同じ作業用の出力先で新しいDLLを検証した。前回の設定順変更も含む標準配置はAviUtl2の終了待ち。実ホストでの操作・見た目は未確認。

変更直後の黒フレームへの追加対策(2026-10-04)

ユーザーから、全グラフで背景を含む画面全体が一瞬黒くなり、グラフ変更直後の初回再生で起きやすく、2回目の再生では正常に感じるとの報告があった。画像取得・出力コールバック内にも端数計算を持たせた人工ホストでは、従来版が精度例外を有効にしたスレッドで映像コールバック0を返すことを再現した。実ホストで発生している例外の種類・箇所はまだ取得できておらず、同一原因と確定したものではない。

映像コールバック全体で浮動小数点例外をマスクし、画像取得、設定復元、描画、画像合成、出力転送、例外処理・ログ出力まで保護する。画像取得・出力は引き続き描画ロックの外で呼び、GPUコンテキストへ直接アクセスしない。呼出スレッドのMXCSRはABIを戻る直前に復元する。以前のRTL SetMXCSRは保留中の例外状態を消し、DLL全スレッド共通のDefaultMXCSRも変更していたため、GraphFloatStateのWin64処理へ置き換えた。各スレッドの例外マスク・丸め・保留状態だけを操作し、共有既定値は変更しない。編集画面の描画も同じ処理を使う。ホストが作ったスレッドはDLL側のBeginThreadを通らないため、初期化でIsMultiThreadを有効にし、メモリマネージャーの同期も確保する。

公式SDKのlogger2.h(2026-09-27配布版)の最小ABIをGraphHostLogに定義し、InitializeLoggerを公開した。処理が失敗した場合はAviUtl2のログへ処理段階、例外名・理由、オブジェクトID、効果ID、フレーム、寸法を記録する。ログがないホストでは従来のOutputDebugStringを使用する。入力不正や転送失敗を成功扱いにせず、次の正常フレームで復帰することを確認する。

Win64 Debug/Releaseはコンパイラ警告0・エラー0。GraphTests 205項目、EditorSmoke、PluginSmokeが両構成で成功した。既存の1,920フレーム検証を画像転送内の端数計算へ拡張し、変更直後とキャッシュ再利用の96フレームで背景保持・出力一致・MXCSR全状態の復元、別オブジェクトを2スレッドで同時処理する800フレームで入力背景の混同防止を確認した。共有DefaultMXCSRが保護中にも変わらないこと、転送失敗時の処理段階・フレームログ、状態復元、次フレームでの復帰も検証した。

AviUtl2が起動中のため、標準配置イベントを一時的に無効にした作業用出力先で新しいDLLを検証した。標準Debugビルドはコンパイルに成功したが、使用中のauf2へのコピーが失敗した。配置はAviUtl2の終了待ち。今回の修正による実ホストでの黒フレーム解消は未確認で、note.mdの方針に従いユーザーが確認する。

ホスト項目名の変更(2026-10-04)

AviUtl2側の選択項目名を「グラフアニメーション」から「アニメーション」へ変更した。選択肢「なし/フェード/伸長」と項目の位置・初期値を維持する。登録名に合わせてPluginSmokeの項目取得と現行仕様の説明を更新した。ユーザー作業を含むApu2/sample.aup2やアニメーション仕様検討の文書は変更していない。

Win64 Debug/Releaseはコンパイラ警告0・エラー0。GraphTests 205項目、EditorSmoke、PluginSmokeが両構成で成功し、新しい登録名から取得した値を使う再生テストを通した。AviUtl2が使用中のため、前節と同じ作業用出力先で新しいDLLを検証し、Win64/Tests/Playback/Releaseのauf2を更新した。前節の黒フレーム対策と今回の名称変更を含む標準配置は終了待ち。実ホストの表示と旧プロジェクトの再読込は未確認。