コンテンツへスキップ

シミュレーションオプション ​

Pivotick では、パフォーマンスと安定性を確保するために物理シミュレーションが部分的に管理されています。これには次のものが含まれます。

  • 事前計算: グラフがレンダリングされる前にレイアウトがシミュレートされ、ほぼ安定した時点で停止します。
  • 時間指定実行: 実行時間が長すぎる場合、シミュレーションは自動的に停止します。
  • 開始/停止制御: エンジンは、シミュレーションがバックグラウンドで不必要に実行されるのを防ぎます。

この制御された動作のため、シミュレーションの終了後にノードを追加しても、物理演算が自動的に再実行されることはありません。 グラフを動的に変更する場合は、レイアウトを手動で「再加熱」して、新しいシミュレーション パスをトリガーする必要があります。

ts
const graph = new Pivotick(container, data)
// Add nodes
graph.simulation.reheat(0.7) 

自動レイアウト調整 ​

デフォルトでは、Pivotick がレイアウトを調整します。 1 つの固定バンドルを適用するのではなく すべてのグラフに対する力の設定は、実際に画面上に表示されているものから導出されます。 ノードの数、ノードの大きさ、キャンバスの大きさ - そして 変更されるたびにそれらを再導出します。 4 つの小さなノードには呼吸する余地があります。 40 大きいものは触れずに近くに詰め込まれます。

これは Auto プリセットであり、特に指定しない限りオンになっています。

ts
// Auto: no physics configured, so Pivotick tunes the layout as the graph changes.
new Pivotick(container, data)

// Manual: you set a physics option, so your value is kept and nothing re-tunes.
new Pivotick(container, data, { simulation: { d3LinkDistance: 200 } })

// Explicit, either way.
new Pivotick(container, data, { simulation: { physics: 'manual' } })
new Pivotick(container, data, { simulation: { physics: 'auto', d3LinkDistance: 200 } })

このルールは意図的に保守的です。自動運転する 任意 オプションを設定します。 (d3LinkDistance、d3ManyBodyStrength、d3CollideRadiusMultiplier、 d3VelocityDecay、d3GravityStrength、d3GravityStrengthConnected、 d3AlphaDecay、cooldownTime) はそのグラフの自動をオフにするため、既存の 設定が静かに引き継がれることはありません。 physics: 'auto' 明示的なものと並べて オプションは依然として有効です。明示的な値は開始フレームをシードし、自動で取得されます。 そこから。

Auto では、Physics フライアウトが公開するのと同じノブとスライダーのみが動きます。 再調整に従うので、その決定は非表示ではなく表示されます。 スライダー、set* コール、またはタイト/ルーズ プリセットなど、ノブを自分で回すことができます。 それを永久に取り戻します。後で選択を再調整することはありません。

さらに 2 つの注意事項:

  • Auto は強制レイアウトのみです。 tree / egoTree の下では何も行われません。 間隔はレイアウト自身の仕事です。
  • Auto は、一時停止された (またはスローティック ウォッチドッグが停止した) シミュレーションを再開しません。 オフになっています)。それはまだノブを解決します。ただ何も起きません。

ヒント

physics: 'manual' をピン留めすることは、スクリーンショットのテストとサムネイルの正しい呼び出しです。 グラフのサイズに関係なく、毎回同じ画像が必要な場合。

オプション ​

シミュレーション オプションは、グラフ シミュレーション エンジンのノードとエッジの物理およびレイアウト動作を制御します。

詳細については、D3-force 公式ドキュメント を確認してください。

オプション種類デフォルト説明
userWorkerブール値true初期ノード配置計算は Web ワーカーによって実行されるべきか
enabledブール値trueシミュレーションが実行されているかどうか
physics'auto' | 'manual''auto'†誰が力の設定を決定するか — 自動レイアウト調整 を参照してください。
warmupTicks番号 | 'auto''auto'最初のフレームの前に開始レイアウトが実行されるようにチェックマークを付けます。 0 は何も実行しないため、x/y が与えられたノードは元の場所で開き、グラフが変化するまでノードを移動せずに自動物理演算が再調整されます。
d3Alpha番号1.0初期シミュレーションのアルファ版
d3AlphaMin番号0.001シミュレーションが停止する前の最小アルファ値。
d3VelocityDecay番号0.4ノードの速度に適用される摩擦。
d3LinkDistance番号30接続されたノード間のデフォルトの距離。
freezeNodesOnDragブール値trueドラッグ操作から解放されたときにノードをフリーズするかどうか。
callbacksSimulationCallbacksundefinedシミュレーション イベントに応答するためのフック。

† 'auto' 自動ドライブのオプションが設定されていないグラフのみ。参照してください 自動レイアウト調整。

情報

d3AlphaDecay、d3ManyBodyStrength、d3CollideRadius などの他の D3 フォース パラメーターも利用でき、 API リファレンス に文書化されています。

コールバック ​

  • onInit(sim: Simulation): シミュレーションの初期化時に呼び出されます。
  • onStart(sim: Simulation): シミュレーションの実行開始時に呼び出されます。
  • onStop(sim: Simulation): シミュレーションが停止すると呼び出されます。
  • onTick(sim: Simulation): シミュレーションのティックごとに呼び出されます。

API ​

Pivotick は、物理エンジンと直接対話できるシミュレーション コントローラーを公開します。 すべての方法は オンラインで利用可能

停止/開始 ​

ts
pause(): void;
reheat(alpha?: number): void;
restart(): void;
start(): Promise<void>;
stop(): void;

レイアウトの変更 ​

ts
changeLayout(
    type: LayoutType,
    simulationOptions?: DeepPartial<SimulationOptions.SimulationOptions>,
): Promise<void>;
ts
graph.simulation.changeLayout('tree', {
    layout: {
         horizontal: false,
         rootIdAlgorithmFinder: 'FirstZeroInDegree'
    }
})

安定化コールバック ​

ts
waitForSimulationStop(): Promise<void>;
ts
graph.simulation.reheat(0.7)
// Wait until the simulation stops
await graph.simulation.waitForSimulationStop()
graph.renderer.fitAndCenter()