Skip to main content
要素に対する仮説は、見つかった場合と見つからなかった場合のいずれかです。見つかった仮説は、原則として 1 つまたは複数の画像オブジェクトまたはその断片に基づいて定義されます (例外は White Gap 要素で、画像オブジェクトをまったく含まない場合があります) 。 単純な要素に対する見つかった仮説は、常に連続した Region です。White Gap、Separator、Barcode 要素の仮説は、常に 1 つの Rectangle です。 仮説が検出された画像オブジェクトの集合 (例:Paragraph 要素の仮説) に基づいて定義される場合、仮説の Region は検出されたオブジェクトの Rectangle 配列に基づいて構築されます。この方法で作成された Region は、仮説の Region メソッドで取得できます。画像上に仮説の Region を表示する場合や、仮説に基づいてブロックを作成する場合、Region の境界は各 Rectangle の境界に厳密には一致しません。可視性を高めるため、検索領域の境界は平滑化されます。このように作成された Region は、仮説の SimplifiedRegion メソッドでも取得できます。Region と SimplifiedRegion は、Search Conditions セクション (要素の検索領域の記述時) でも、ブロックのプロパティを記述し既に見つかった要素を使用する場合でも利用できます。 仮説が見つからなかった場合、その仮説は検索領域のファジー矩形と一致します。未検出の仮説を画像上に表示する際、プログラムはそのファジー矩形の外接Rectangleを描画します。 任意の仮説の Left、Top、Right、Bottom の境界は「範囲」です。見つかった仮説では、範囲は点へと縮退します。すなわち、Left.Start = Left.End、Top.Start = Top.End などです。未検出の仮説では、各境界の範囲はその検索領域の範囲と一致します。 ブロックや要素の対応するダイアログボックスのコードで、生成済みの仮説とそのプロパティにアクセスすることで、FlexiLayout の設定に追加の手段を得られます。要素の仮説には、要素名でアクセスできます。Hypotheses Evaluation セクションで現在の要素の仮説にアクセスする場合は、プロパティ名のみを使用できます。 仮説およびそのプロパティへのアクセスは読み取り専用です。要素の仮説には、Search Conditions と Hypotheses Evaluation の各セクション、ならびに field の Code Editor セクションからアクセスできます。Search Conditions では、Elements ツリーで現在の要素より上にあるすべての要素について、生成済みの仮説 (およびそのプロパティ) にアクセスできます。Hypotheses Evaluation では、Elements ツリーで現在の要素より上にある要素の生成済み仮説に加えて、現在の要素自体の仮説にもアクセスできます。field の Code Editor では、すべての要素の仮説 (およびそのプロパティ) にアクセスできます。 以下の表に、すべての種類の要素に対する仮説のプロパティを示します。

仮説プロパティを呼び出すためのサンプルコード

単純要素または Group 要素の仮説のプロパティにアクセスする前に、対象の仮説がヌル仮説ではないことを確認してください (IsNull プロパティを呼び出します) 。ヌル仮説 (検出されなかった要素に対応) のプロパティにアクセスするとエラーになります。 Document 上にバーコード形式の識別子があり、バーコードの値が 1556897142240 のものにのみ FlexiLayout を一致させたいとします。これを実現するには次の手順に従います。バーコードのプロパティと検索制約を定義している要素の Hypotheses Evaluation セクションに、次のコードを記述します。
「Apply」または「Check Code」をクリックします。コンパイラは構文エラーを検出しません。コードは問題ないように見えます。しかし、Sample 1 の任意のページで FlexiLayout の照合を試みると、次のエラーメッセージが表示されます: “Error in element “MainGroup.IdentityNumber”, Advanced relations section: Attempt to access undefined hypothesis MainGroup.IdentityNumber.” エラーの原因は次のとおりです。プログラムはバーコード要素の仮説を検出します。続いて、バーコードの値をコードで指定された値と比較します。値が異なる場合、Quality: 0; のコードによって仮説のスコアは 0 にリセットされます。すると、この要素にはヌル仮説が生成され、プログラムはこの仮説に対しても条件 value != "1556897142240" をチェックします。ヌル仮説の値へアクセスすることは許可されていない (そのプロパティが存在しない) ため、プログラムは “…undefined hypothesis…” というエラーメッセージを出力します。 したがって、コードを次のように調整する必要があります。
上記のコードが機能するのは必須要素のみです。任意要素の場合は、次のようにコードを調整してください。
そうでない場合は、実際の仮説の品質だけが 0 にリセットされます。これによりプログラムはヌル仮説を生成し、このヌル仮説に対しては「if not IsNull」が実行されません。したがって、最終的な (ヌル) 仮説の品質は、その要素のプロパティで指定された値 (デフォルト値のままなら 0.97) のままで、当該要素がなくてもプログラムは FlexiLayout のマッチングを継続します。 コードに else {Quality: 0;} を追加すると、その文はすべての仮説 (ヌル仮説を含む) に対して実行され、この要素で仮説の連鎖全体が 0 にリセットされるため、FlexiLayout のマッチングは停止します。

メソッド Region Region() と Region SimplifiedRegion() の比較

メソッド Region Region() と Region SimplifiedRegion() を使用すると、要素の Region を取得できますが、Region Region() メソッドでは正確な Region を取得できる一方、Region SimplifiedRegion() メソッドでは境界の座標に基づいて作成された Rectangle を取得します。