さて、さらに多くの作業を行った結果、カスタム DirectiveProcessor 内からダイアグラムにアクセスする必要はないと判断しました。
ドメイン モデルをロードするときに、標準で生成されたものは既存のダイアグラムをロードしないため、カスタムの DirectiveProcessor をまだ取得しています。
ダイアグラムとモデルを同時にロードするカスタム DirectiveProcessor を取得するのは簡単です。標準で生成された DirectiveProcessor 基本クラスをサブクラス化し、オーバーライドします。
protected override bool LoadDiagramData
{
get
{
return true;
}
}
さて、ダイアグラムがロードされたので、元の質問に戻りますが、どのようにアクセスすればよいでしょうか? このような:
using (Transaction t = partition.Store.TransactionManager
.BeginTransaction("MyTxn", true))
{
MyDslDiagram diagram = partition.ElementDirectory
.FindElements<MyDslDiagram>(true).SingleOrDefault();
/*
* Now, do stuff with your diagram.
*
*/
}
ダイアグラムがロードされている場合、このコードは問題なく機能します。そうしないと、ダイアグラムはnullとして返されます。その場合、ダイアグラムを明示的にロードするか、ダイアグラムを動的に作成する必要があります。
ここでは、そのことには触れません。寝てたらブログに書いてるかも!