私はかなり抽象的なツリー描画システムを作成していますが、必要なすべての描画機能を形式化するのに非常に苦労しています。残念ながら私の検索は無駄だったので、誰かがこのトピックについて読むべきものを私に指摘してくれたらとてもありがたいです.
木を表示するためのメタ言語を探しています/作成しようとしています。これらのツリーでは、各ノードは、ユーザー定義のグラフィカル表現を持つユーザー定義オブジェクトのインスタンスです。
各オブジェクトは、グラフィカルな表現である名前に関連付けられており、有限数の子 ( 0+ ) を持ち、オブジェクト自体であることが知られています。オブジェクトの再帰は許可されていません。各オブジェクトには、(ユーザー定義の方法で) グラフィック表現を変更する条件をトリガーするために使用されるユーザー定義のオプションがあります。一部のオプションは自動的に適用されますが、他のオプションはユーザーの操作が必要になる場合があります (「このオブジェクトを A または B にしますか?」)。これにより、オブジェクト ツリーをインスタンス化する必要がある理由が説明されます。
Object
Name // The Object Name
Childs // List of Object Childs
ContextName // The Name of the Child within this context
Types // List of Objects' names. This child may be only one of them. Decided by the user during instancing.
Options // List of Options assigned to this child. Some of them may require user interaction, and apply other Options to the Child's childs.
*Priority // This is an integer which is used to decide the order in which childs are drawn.
Symbol Name // The Graphical representation of the Object
オブジェクト ツリーがインスタンス化されると、常習的なユーザー入力なしで描画する必要があり、ここで問題が発生します。オブジェクト ツリーのインスタンス化により、各オブジェクトに特定のグラフィック表現が割り当てられます (これを Symbol と呼びましょう)。ただし、割り当てはインスタンス化の前にはわかりません。異なるオブジェクトが同じシンボルを持つこともあり、オブジェクトのオプションに応じて異なる方法で描画される場合があります。
このため、シンボルはオブジェクトとは別に定義する必要があり、ユーザー指定の規則に従って、シンボル自体 (および割り当てられた子) を正しく描画できる一連の抽象メカニズムが必要です。
各シンボルは、画像 (または画像なし) と有限数の添付ファイルによって表されます。アタッチメントは、オブジェクトの子のシンボルを描画する場所を描画コードに指示する、シンボルの座標に対する相対位置です。それらのそれぞれには、使用される特定の条件があります (たとえば、このアタッチメントは、特定のオプションを持つシンボルによってのみ使用されるか、または N 個のシンボルが既に描画されている場合、既に描画されたシンボルとの衝突がないなど)。
アルゴリズムは、優先度によって指定された順序に従って、各オブジェクトの子に対して空きの添付ファイルを見つける必要があります。子の添付ファイルを見つけることができない場合、ユーザーは自動再試行を許可するルールを事前に指定できますが、それらも失敗すると、ツリーの描画全体が失敗します。これらのルールのいくつかは、中毒性のある子シンボルを追加したり、子シンボルを他の子に割り当てたりする (それらを grandChildren にする) などを許可します。
Symbol
Name
Main Image // Image Path, Height, Width
Attachments // List of the attachments, their position, requirements and addictional infos
Fail Rules // List of actions to do if it is not possible to successfully assign each Child to an Attachment
私の主な問題は、Symbol がアクセスできる変数の数がかなり多いことです。各シンボルは、このメタ言語を使用して定義する必要があることを再度思い出しますが、その子シンボルの情報にアクセスできる必要があります (デッドロックや循環参照を避けるために、他のシンボルにはアクセスできません)。すべての子のシンボルの高さと幅の合計に等しいシンボル、または同じ画像を使用するシンボルなど。これは、ユーザーがシンボルのルールを最終的な構造とは別に記述することにも起因します。
同時に、ツリーは上から下に描画する必要があるため、これらの情報の一部は最初から利用できない場合があり、大量のバックトラックが必要になる場合があります。
また、これらはすべて、形式化して解析できるメタ言語内で定義する必要があるため、言語に最大限の自由度を与えるためにメタ言語が必要とする機能を定義する必要があります。過度に複雑にならないように user を記述します (これはあいまいな制限ですが、基本的には Tikz をメタ言語のサブセットとして使用したくありません)。しかし、私はそれらを特定するのにかなり苦労しています。
前に言ったように、この種のトピックや、このようなプロジェクトを完了する方法についての情報を探しています。メタ言語を完全に完成させることができれば、コードを実装してこれらすべてを実行するのにそれほど問題はないと思います。私の問題はほとんど理論的なものです。