(57)【特許請求の範囲】
【請求項１】
ポリゴンの集合として表現された立体物造形用のポリゴンモデルを、複数に分離する装置であって、
前記ポリゴンモデルの各ポリゴンの各稜線と共有する他のポリゴンとの対応関係を記録した隣接ポリゴンテーブルを作成する隣接ポリゴンテーブル作成手段と、
新規なグループＩＤを定義して、前記ポリゴンモデルの中でグループＩＤが未設定のポリゴンを１つ抽出し、抽出されたポリゴンに対して前記定義された新規なグループＩＤを仮設定するようにしているグループＩＤ仮設定手段と、
前記ポリゴンモデルの中でグループＩＤが仮設定されているポリゴンを全て抽出し、抽出されたポリゴンに対して前記グループＩＤを本設定するとともに、前記隣接ポリゴンテーブルを参照し、前記本設定されたポリゴンに隣接しグループＩＤが未設定の他のポリゴンに対して、前記本設定されたポリゴンに対応するグループＩＤと同一のグループＩＤを仮設定するグループＩＤ本設定手段と、
本設定されたポリゴンＩＤをグループＩＤごとに分離するポリゴンモデル分離手段と、を有し、
前記ポリゴンモデルの中でグループＩＤが仮設定されているポリゴンが存在する場合は、前記グループＩＤ本設定手段による処理を実行し、前記ポリゴンモデルの中でグループＩＤが未設定のポリゴンが存在する場合は、前記グループＩＤ仮設定手段による処理、および前記グループＩＤ本設定手段による処理を、全てのポリゴンが本設定されるまで繰り返し実行することを特徴とする立体物造形用データ分離装置。
【請求項２】
前記ポリゴンモデルを構成する各ポリゴンの各稜線に対して、同一の稜線を共有する異なるポリゴンを探索し、前記同一の稜線を同一の稜線ＩＤで表現し、各稜線を含むポリゴンと対応付けて記録した稜線構成テーブルを作成するポリゴン稜線構造化手段をさらに備え、
前記隣接ポリゴンテーブル作成手段は、
前記稜線構成テーブルに対して、各ポリゴンに稜線順に記録されている稜線ＩＤを、当該稜線ＩＤをもつ異なるポリゴンＩＤに置換することにより、隣接ポリゴンテーブルを作成することを特徴とする請求項１に記載の立体物造形用データ分離装置。
【請求項３】
前記ポリゴンモデルを構成する各ポリゴンの各頂点に対して、同一の座標値をもつ異なるポリゴンの共有頂点を探索し、取得された一連の共有頂点を同一の頂点ＩＤで表現し、各ポリゴンと頂点順に対応付けて記録した頂点構成テーブルを作成するポリゴンモデル構造化手段をさらに備え、
前記ポリゴン稜線構造化手段は、
前記頂点構成テーブルの各ポリゴンの各頂点ＩＤと頂点順において隣接する頂点ＩＤとで構成される頂点ＩＤペアと、同一の構成の頂点ＩＤペアをもつ異なるポリゴンを探索し、前記同一の構成の頂点ＩＤペアに対して同一の稜線ＩＤを付与することにより、前記頂点構成テーブルの各ポリゴンの頂点順の各頂点ＩＤを稜線順の稜線ＩＤに対応付けて置換し、前記稜線構成テーブルを作成することを特徴とする請求項２に記載の立体物造形用データ分離装置。
【請求項４】
前記隣接ポリゴンテーブル作成手段は、
稜線ＩＤ別にポリゴンＩＤと稜線順を記録できる稜線ＩＤ別ポリゴンテーブルを備え、
前記ポリゴン稜線構造化手段により作成された前記稜線構成テーブルを用いて、ポリゴンＩＤのポリゴンの所定の稜線順に記録されている稜線ＩＤに対応する前記稜線ＩＤ別ポリゴンテーブルに当該ポリゴンのポリゴンＩＤと当該稜線順を書き込むポリゴンテーブル登録手段と、
前記ポリゴンテーブル登録手段において、既に稜線ＩＤに対応する前記稜線ＩＤ別ポリゴンテーブルに他のポリゴンＩＤと稜線順が書き込まれている場合、前記隣接ポリゴンテーブルのポリゴンＩＤの稜線順の位置にポリゴンＩＤを書き込む隣接ポリゴンテーブル登録手段を備え、
前記ポリゴンテーブル登録手段と隣接ポリゴンテーブル登録手段を繰り返し実行し、前記隣接ポリゴンテーブルを作成することを特徴とする請求項２に記載の立体物造形用データ分離装置。
【請求項５】
前記ポリゴンモデル構造化手段は、
前記頂点構成テーブルを作成するとともに、前記頂点構成テーブルに頂点順に記録された各頂点ＩＤと座標値を対応付けて記録した頂点座標テーブルとを作成するものであり、
前記ポリゴンＩＤに対応付けて、ポリゴンを構成する各頂点の座標値が記録された頂点座標配列データから各ポリゴンごとに頂点順に座標値を抽出し、当該抽出された座標値からハッシュ値を算出するハッシュ値算出手段と、
前記算出されたハッシュ値を用いて前記頂点座標テーブルを参照し、前記ハッシュ値で特定される既登録の頂点ＩＤに対応する頂点座標テーブル上の座標値と、前記抽出された座標値を照合する座標値照合手段と、
前記座標値照合手段による照合の結果、両座標値が一致する場合は、前記頂点構成テーブルの前記抽出した座標値のポリゴンＩＤと頂点順の位置に、前記既登録の頂点ＩＤを記録するようにし、前記座標値照合手段による照合の結果、両座標値が一致しない場合は、前記頂点構成テーブルの前記抽出した座標値のポリゴンＩＤと頂点順の位置に、新規な頂点ＩＤを記録するようにしている頂点構成テーブル処理手段と、
前記頂点構成テーブル処理手段が新規な頂点ＩＤを記録した場合、前記頂点座標テーブル上の頂点ＩＤの位置に前記座標値を前記ハッシュ値で特定可能な形態で記録するようにしている頂点座標テーブル処理手段と、
を有することを特徴とする請求項３に記載の立体物造形用データ分離装置。
【請求項６】
前記頂点座標テーブルには、頂点ＩＤに対応して座標値が記録されるとともに、当該座標値をもとに前記ハッシュ値算出手段により算出されるハッシュ値が同一の他の座標値を前記頂点ＩＤより最近傍に記録した単一の頂点ＩＤがリンク先として対応付けられていることを特徴とする請求項５に記載の立体物造形用データ分離装置。
【請求項７】
前記頂点座標テーブルに加え先頭頂点テーブルを設け、前記先頭頂点テーブルには、前記ハッシュ値算出手段により算出されるハッシュ値に対応して、前記頂点座標テーブル上に最初に記録されている前記ハッシュ値になる頂点ＩＤがリンク先として対応付けられていることを特徴とする請求項５または請求項６のいずれか一項に記載の立体物造形用データ分離装置。
【請求項８】
前記ハッシュ値算出手段は、前記座標値が（ｘ、ｙ、ｚ）なる３次元の値で構成され、かつ各々の成分が、ＸｍｉｎからＸｍａｘ、ＹｍｉｎからＹｍａｘ、ＺｍｉｎからＺｍａｘの範囲の実数値をもつ場合、各成分をｈｘ＝（ｘ−Ｘｍｉｎ）・Ｓ／（Ｘｍａｘ−Ｘｍｉｎ），ｈｙ＝（ｙ−Ｙｍｉｎ）・Ｓ／（Ｙｍａｘ−Ｙｍｉｎ），ｈｚ＝（ｚ−Ｚｍｉｎ）・Ｓ／（Ｚｍａｘ−Ｚｍｉｎ）なる式で所定の整数Ｓ段階(ｈｘ, ｈｙ, ｈｚ)に分類し、ハッシュ値ｈ＝ｈｘ＋ｈｙ・Ｓ＋ｈｚ・Ｓ2として算出することを特徴とする請求項５から請求項７のいずれかに記載の立体物造形用データ分離装置。
【請求項９】
前記ポリゴン稜線構造化手段は、
前記頂点構成テーブルの各ポリゴンの各頂点ＩＤと頂点順において隣接する頂点ＩＤとで構成される頂点ＩＤペアに対して稜線ＩＤで表現し、各ポリゴンの頂点順と対応付けて稜線順に稜線ＩＤを記録した前記稜線構成テーブルを作成するとともに、前記稜線構成テーブルに記録された稜線ＩＤと頂点ＩＤペアを対応付けて記録した稜線テーブルとを作成するものであり、
前記頂点構成テーブルの前記ポリゴンのポリゴンＩＤおよび頂点順の位置の頂点ＩＤと頂点順において隣接する頂点ＩＤで構成される頂点ＩＤペアＸの中で小さい方の頂点ＩＤＳを用いて、前記稜線テーブル上で既登録の稜線ＩＤに対応する頂点ＩＤペアのうち小さい方の頂点ＩＤが前記頂点ＩＤＳである稜線ＩＤの頂点ＩＤペアを抽出し、前記頂点ＩＤペアＸと照合する頂点ＩＤ照合手段と、
前記頂点ＩＤ照合手段により前記頂点ＩＤペアＸが既登録の稜線ＩＤの頂点ＩＤペアと一致する場合は、前記稜線構成テーブル上の前記ポリゴンＩＤおよび前記頂点順に対応する稜線順の位置に前記稜線ＩＤを記録するようにし、前記頂点ＩＤ照合手段により前記頂点ＩＤペアＸがいずれの既登録の稜線ＩＤの頂点ＩＤペアとも一致しない場合は、前記頂点構成テーブル上の前記ポリゴンＩＤおよび前記頂点順に対応する稜線順の位置に前記稜線テーブルに記録されていない新規な稜線ＩＤを作成して記録する稜線構成テーブル更新手段と、
前記稜線構成テーブル更新手段で新規な稜線ＩＤを記録した場合、前記稜線テーブル上の前記稜線ＩＤの位置に前記頂点ＩＤペアＸを前記頂点ＩＤＳで抽出可能な形態で記録するようにしている稜線テーブル更新手段と、
を有することを特徴とする請求項３に記載の立体物造形用データ分離装置。
【請求項１０】
前記稜線テーブルには、稜線ＩＤに対応して頂点ＩＤペアが記録されるとともに、当該頂点ＩＤペアのうち小さい方の頂点ＩＤが同一である他の頂点ＩＤペアを最近傍に記録した単一の稜線ＩＤがリンク先として対応付けられていることを特徴とする請求項９に記載の立体物造形用データ分離装置。
【請求項１１】
前記稜線テーブルに加え先頭稜線テーブルを設け、前記先頭稜線テーブルには、頂点ＩＤに対応付けて、前記頂点ＩＤペアのうち小さい方の頂点ＩＤが同一となり、前記稜線テーブル上で最初に記録されている稜線ＩＤがリンク先として対応付けられていることを特徴とする請求項９または請求項１０のいずれかにに記載の立体物造形用データ分離装置。
【請求項１２】
コンピュータを、請求項１から請求項１１のいずれか一項に記載の立体物造形用データ分離装置として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、立体物を表すデータを基に、樹脂等を加工して立体物を造形する３Ｄプリンタ等の立体物造形装置の利用に際して、立体物造形装置への出力用データを複数に分離するための技術に関する。
【背景技術】
【０００２】
近年、立体物を表すデータをもとに、樹脂や石膏等を加工して造形する３Ｄプリンタが立体物造形装置として普及してきている。３Ｄプリンタの医療応用として、医療診断で撮影されるCT/MRI画像（DICOM形式３次元ボクセルデータ）を基に３Ｄプリンタ出力用モデリングデータを作成し、手術シミュレーション・医学教育・インフォームドコンセント向けの臓器模型を出力したり、体内埋め込み用の人工臓器（血管、骨、関節など）を作成したりする試みが始まっている。
【０００３】
立体物造形用データである３Ｄプリンタ出力用モデリングデータは、ポリゴンの集合体で表現されたポリゴンモデルである。CT/MRI画像から臓器模型の３Ｄプリンタ出力用モデリングデータを作成する方法としては、特許文献１、特許文献２に示されるように、対象とする臓器領域のボクセルを抽出し、Marching Cube法（特許文献３など）により臓器領域の境界面を多面体（三角形の集合）で近似したサーフェースに変換して表面形状を表現したサーフェースデータを得る手法が一般的である。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第３６９０５０１号公報
【特許文献２】特開２０１２−２１６１０２号公報
【特許文献３】米国特許第７２０９１３６号公報
【特許文献４】特開平８−１５３２１１号公報
【特許文献５】特許第３３５０４７３号公報
【特許文献６】特許第４４６３５９７号公報
【特許文献７】特許第５０１８７２１号公報
【特許文献８】特開平１１−２３２４８９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上記のサーフェース変換手法では５１２の３乗程度のボクセルを基に、３次元的に三角形を生成する方法をとるため、三角形ポリゴンが膨大になり、ＣＧ分野においては、画面描画の際に時間がかかり対話操作の応答性が悪くなるという問題が指摘されている。これは３Ｄプリンタ出力においても問題を起こし、プリンタ出力前処理（ポリゴンから積層造形用のデータに変換する処理）に時間がかかり、場合によりワークメモリーオーバーフローを引き起こして出力不能になる。
【０００６】
これに対してＣＧ分野においては、画面の解像度に合せてポリゴン分割を粗くして曲面を表現したり、可視化に供しないポリゴンを事前に削除したりする方法がとられる。例えば、平板オブジェクトでは、単一面だけで表現し裏面を構成するポリゴンを省略したり、特許文献４のように、視点方向から隠面にあたり可視化に供しないポリゴンを事前に削除したり、特許文献５のように、他のポリゴンによって隠される内側のポリゴンを判定して事前に削除し、描画対象ポリゴンを削減する方法が提案されている。また、特許文献６のように、微細な凹凸表現に対してポリゴンを用いず、テクスチャやバンプマッピングで代用する方法が提案されている。
【０００７】
しかし、３Ｄプリンタ出力においては、画面より細かい解像度が要求され、ポリゴンにより閉空間を構成する必要があるため、平板オブジェクトにおいて、裏面を構成するポリゴンを省略することはできない。また、造形物は種々のアングルから鑑賞されるため基本的に隠面は存在せず、造形物内部にも別の形状を造形可能なため、ＣＧ分野で提案されているオクルージョンカリングという手法は意味をもたない。微細な凹凸に対しても陰影などで視覚的に擬似表現することはできず、ポリゴン形状で表現せざるを得ない。特許文献７のように、建築模型においては極端にポリゴンを削減したデフォルメされた表現が要望される場合もあるが、医療応用ではそれなりにリアリティが要求される。そのため、特許文献８のように、造形物の外観を損なわない程度に、三角形ポリゴン自体を削減する手法をとらざるを得ない。
【０００８】
三角形ポリゴンの削減にあたっては、特許文献８の手法が基本になる。これは、(1)与えられたポリゴンから削減しても全体形状にあまり影響を与えない三角形および稜線を探索する処理と、(2)対象稜線を削減するとともにそれと頂点を共有する隣接三角形を探索し補正を行う処理との２種の探索処理を所望のデータ量に削減されるまで繰り返す。特許文献８の手法では、双方の処理において削除候補とする稜線と頂点を共有する隣接三角形を探索する処理を必要とし、与えられたポリゴン数の２乗に比例して処理負荷が増大するという問題を抱えていた。
【０００９】
ポリゴンモデルの削減の際、分離可能な位置においてポリゴンモデルを分離しておくことが望ましい。全体のポリゴンモデルをポリゴン数の少ない複数のポリゴンモデルに分離しておき、分離されたポリゴンモデルごとにポリゴンを削除することにより、全体として効率的なデータ量の削減が可能となるためである。
【００１０】
ポリゴン分離とは、例えば、ポリゴンが三角形の場合、ある集合に属する全ての三角形の３辺に共有する隣接三角形が、同一集合内に重複せずに１つずつ存在するように、複数の三角形の集合に分離する処理である。従来、このポリゴン分離を行うためには、多くの処理負荷を要していた。ポリゴン分離は、ポリゴン削減の際だけでなく、複数の部品からなる物体を３Ｄプリンタ等で出力する用途において、その処理を効率的に行う際にも有用である。
【００１１】
そこで、本発明は、立体物造形用データであるポリゴンモデルを効率的に複数のポリゴンモデルに分離することが可能な立体物造形用データ分離装置を提供することを課題とする。
【課題を解決するための手段】
【００１２】
上記課題を解決するため、本発明第１の態様では、
ポリゴンの集合として表現された立体物造形用のポリゴンモデルを、複数に分離する装置であって、
前記ポリゴンモデルの各ポリゴンの各稜線と共有する他のポリゴンとの対応関係を記録した隣接ポリゴンテーブルを作成する隣接ポリゴンテーブル作成手段と、
新規なグループＩＤを定義して、前記ポリゴンモデルの中でグループＩＤが未設定のポリゴンを１つ抽出し、抽出されたポリゴンに対して前記定義された新規なグループＩＤを仮設定するようにしているグループＩＤ仮設定手段と、
前記ポリゴンモデルの中でグループＩＤが仮設定されているポリゴンを全て抽出し、抽出されたポリゴンに対して前記グループＩＤを本設定するとともに、前記隣接ポリゴンテーブルを参照し、前記本設定されたポリゴンに隣接しグループＩＤが未設定の他のポリゴンに対して、前記本設定されたポリゴンに対応するグループＩＤと同一のグループＩＤを仮設定するグループＩＤ本設定手段と、
本設定されたポリゴンＩＤをグループＩＤごとに分離するポリゴンモデル分離手段と、を有し、
前記ポリゴンモデルの中でグループＩＤが仮設定されているポリゴンが存在する場合は、前記グループＩＤ本設定手段による処理を実行し、前記ポリゴンモデルの中でグループＩＤが未設定のポリゴンが存在する場合は、前記グループＩＤ仮設定手段による処理、および前記グループＩＤ本設定手段による処理を、全てのポリゴンが本設定されるまで繰り返し実行することを特徴とする立体物造形用データ分離装置を提供する。
なお、「グループＩＤが未設定」とは、本設定も仮設定も行われていない状態を意味する。
【００１３】
本発明第１の態様によれば、ポリゴンモデルの各ポリゴンの各稜線と共有する他のポリゴンとの対応関係を記録した隣接ポリゴンテーブルを作成し、新規なグループＩＤを定義して、ポリゴンモデルの中でグループＩＤが未設定のポリゴンを１つ抽出し、抽出されたポリゴンに対して定義された新規なグループＩＤを仮設定し、ポリゴンモデルの中でグループＩＤが仮設定されているポリゴンを全て抽出し、抽出されたポリゴンに対してグループＩＤを本設定するとともに、隣接ポリゴンテーブルを参照し、本設定されたポリゴンに隣接しグループＩＤが未設定の他のポリゴンに対して、本設定されたポリゴンに対応するグループＩＤと同一のグループＩＤを仮設定し、ポリゴンモデルの中でグループＩＤが仮設定されているポリゴンが存在する場合は、グループＩＤ本設定手段による処理を実行し、ポリゴンモデルの中でグループＩＤが未設定のポリゴンが存在する場合は、前記グループＩＤ仮設定手段による処理、および前記グループＩＤ本設定手段による処理を、全てのポリゴンが本設定されるまで繰り返し実行し、本設定されたポリゴンＩＤをグループＩＤごとに分離するようにしたので、ポリゴンモデルを高速に分離することが可能となる。
【００１４】
また、本発明第２の態様では、
前記ポリゴンモデルを構成する各ポリゴンの各稜線に対して、同一の稜線を共有する異なるポリゴンを探索し、前記同一の稜線を同一の稜線ＩＤで表現し、各稜線を含むポリゴンと対応付けて記録した稜線構成テーブルを作成するポリゴン稜線構造化手段をさらに備え、
前記隣接ポリゴンテーブル作成手段は、
前記稜線構成テーブルに対して、各ポリゴンに稜線順に記録されている稜線ＩＤを、当該稜線ＩＤをもつ異なるポリゴンＩＤに置換することにより、隣接ポリゴンテーブルを作成することを特徴とする。
【００１５】
本発明第２の態様によれば、ポリゴンモデルを構成する各ポリゴンの各稜線に対して、同一の稜線を共有する異なるポリゴンを探索し、同一の稜線を同一の稜線ＩＤで表現し、各稜線を含むポリゴンと対応付けて記録した稜線構成テーブルを作成し、稜線構成テーブルに対して、各ポリゴンに稜線順に記録されている稜線ＩＤを、その稜線ＩＤをもつ異なるポリゴンＩＤに置換することにより、隣接ポリゴンテーブルを作成するようにしたので、ポリゴンモデルを高速に分離するために必要な隣接ポリゴンテーブルを高速に作成することが可能となる。
【００１６】
また、本発明第３の態様では、
前記ポリゴンモデルを構成する各ポリゴンの各頂点に対して、同一の座標値をもつ異なるポリゴンの共有頂点を探索し、取得された一連の共有頂点を同一の頂点ＩＤで表現し、各ポリゴンと頂点順に対応付けて記録した頂点構成テーブルを作成するポリゴンモデル構造化手段をさらに備え、
前記ポリゴン稜線構造化手段は、
前記頂点構成テーブルの各ポリゴンの各頂点ＩＤと頂点順において隣接する頂点ＩＤとで構成される頂点ＩＤペアと、同一の構成の頂点ＩＤペアをもつ異なるポリゴンを探索し、前記同一の構成の頂点ＩＤペアに対して同一の稜線ＩＤを付与することにより、前記頂点構成テーブルの各ポリゴンの頂点順の各頂点ＩＤを稜線順の稜線ＩＤに対応付けて置換し、前記稜線構成テーブルを作成することを特徴とする。
【００１７】
本発明第３の態様によれば、ポリゴンモデルを構成する各ポリゴンの各頂点に対して、同一の座標値をもつ異なるポリゴンの共有頂点を探索し、取得された一連の共有頂点を同一の頂点ＩＤで表現し、各ポリゴンと頂点順に対応付けて記録した頂点構成テーブルを作成し、頂点構成テーブルの各ポリゴンの各頂点ＩＤと頂点順において隣接する頂点ＩＤとで構成される頂点ＩＤペアと、同一の構成の頂点ＩＤペアをもつ異なるポリゴンを探索し、同一の構成の頂点ＩＤペアに対して同一の稜線ＩＤを付与することにより、頂点構成テーブルの各ポリゴンの頂点順の各頂点ＩＤを稜線順の稜線ＩＤに対応付けて置換し、稜線構成テーブルを作成するようにしたので、隣接ポリゴンテーブルを作成するために用いる稜線構成テーブルを高速に作成することが可能となる。
【００１８】
また、本発明第４の態様では、
前記隣接ポリゴンテーブル作成手段は、
稜線ＩＤ別にポリゴンＩＤと稜線順を記録できる稜線ＩＤ別ポリゴンテーブルを備え、
前記ポリゴン稜線構造化手段により作成された前記稜線構成テーブルを用いて、ポリゴンＩＤのポリゴンの所定の稜線順に記録されている稜線ＩＤに対応する前記稜線ＩＤ別ポリゴンテーブルに当該ポリゴンのポリゴンＩＤと当該稜線順を書き込むポリゴンテーブル登録手段と、
前記ポリゴンテーブル登録手段において、既に稜線ＩＤに対応する前記稜線ＩＤ別ポリゴンテーブルに他のポリゴンＩＤと稜線順が書き込まれている場合、前記隣接ポリゴンテーブルのポリゴンＩＤの稜線順の位置にポリゴンＩＤを書き込む隣接ポリゴンテーブル登録手段を備え、
前記ポリゴンテーブル登録手段と隣接ポリゴンテーブル登録手段を繰り返し実行し、前記隣接ポリゴンテーブルを作成することを特徴とする。
【００１９】
本発明第４の態様によれば、稜線ＩＤ別にポリゴンＩＤと稜線順を記録できる稜線ＩＤ別ポリゴンテーブルを備え、稜線構成テーブルを用いて、ポリゴンＩＤＮのポリゴンの所定の稜線順Ｎに記録されている稜線ＩＤに対応する稜線ＩＤ別ポリゴンテーブルにそのポリゴンのポリゴンＩＤと稜線順を書き込み、既に稜線ＩＤに対応する稜線ＩＤ別ポリゴンテーブルに他のポリゴンＩＤＰと稜線順Ｐが書き込まれている場合、隣接ポリゴンテーブルのポリゴンＩＤＰの稜線順Ｐの位置にポリゴンＩＤＮを書き込むとともに、隣接ポリゴンテーブルのポリゴンＩＤＮの稜線順Ｎの位置にポリゴンＩＤＰを書き込むようにしたので、少ない処理負荷で、隣接ポリゴンテーブルを作成することが可能となる。
【００２０】
また、本発明第５の態様では、
前記ポリゴンモデル構造化手段は、
前記頂点構成テーブルを作成するとともに、前記頂点構成テーブルに頂点順に記録された各頂点ＩＤと座標値を対応付けて記録した頂点座標テーブルとを作成するものであり、
前記ポリゴンＩＤに対応付けて、ポリゴンを構成する各頂点の座標値が記録された頂点座標配列データから各ポリゴンごとに頂点順に座標値を抽出し、当該抽出された座標値からハッシュ値を算出するハッシュ値算出手段と、
前記算出されたハッシュ値を用いて前記頂点座標テーブルを参照し、前記ハッシュ値で特定される既登録の頂点ＩＤに対応する頂点座標テーブル上の座標値と、前記抽出された座標値を照合する座標値照合手段と、
前記座標値照合手段による照合の結果、両座標値が一致する場合は、前記頂点構成テーブルの前記抽出した座標値のポリゴンＩＤと頂点順の位置に、前記既登録の頂点ＩＤを記録するようにし、前記座標値照合手段による照合の結果、両座標値が一致しない場合は、前記頂点構成テーブルの前記抽出した座標値のポリゴンＩＤと頂点順の位置に、新規な頂点ＩＤを記録するようにしている頂点構成テーブル処理手段と、
前記頂点構成テーブル処理手段が新規な頂点ＩＤを記録した場合、前記頂点座標テーブル上の頂点ＩＤの位置に前記座標値を前記ハッシュ値で特定可能な形態で記録するようにしている頂点座標テーブル処理手段と、
を有することを特徴とする。
【００２１】
本発明第５の態様によれば、頂点座標配列データから各ポリゴンごとに頂点順に座標値を抽出し、抽出された座標値からハッシュ値を算出し、算出されたハッシュ値を用いて頂点座標テーブルを参照し、ハッシュ値で特定される既登録の頂点ＩＤに対応する頂点座標テーブル上の座標値と、抽出された座標値を照合し、照合の結果、両座標値が一致する既登録の頂点ＩＤが存在する場合は、頂点構成テーブルの抽出した座標値のポリゴンＩＤと頂点順の位置に、既登録の頂点ＩＤを記録するようにし、照合の結果、両座標値が一致する既登録の頂点ＩＤが存在しない場合は、頂点構成テーブルの抽出した座標値のポリゴンＩＤと頂点順の位置に、新規な頂点ＩＤを記録するようにし、新規な頂点ＩＤを記録した場合、頂点座標テーブル上の頂点ＩＤの位置に座標値をハッシュ値で特定可能な形態で記録するようにしたので、ハッシュ値が異なる既登録の頂点ＩＤの座標値とは一致する可能性が無いため、照合対象から外すことができ、ハッシュ値が同一となる既登録の頂点ＩＤだけに照合対象を絞り込むことができ、ポリゴンと当該ポリゴンを構成する頂点の座標値との対応関係で表現した頂点座標配列データを、ポリゴンを特定するポリゴンＩＤと、ポリゴンモデル内で各頂点を特定する頂点ＩＤを対応付けた頂点構成テーブルと、各頂点ＩＤと座標値を対応付けた頂点座標テーブルで表現される形態に効率的に構造化することが可能となる。
【００２２】
また、本発明第６の態様では、前記頂点座標テーブルには、頂点ＩＤに対応して座標値が記録されるとともに、当該座標値をもとに前記ハッシュ値算出手段により算出されるハッシュ値が同一の他の座標値を前記頂点ＩＤより最近傍に記録した単一の頂点ＩＤがリンク先として対応付けられていることを特徴とする。
【００２３】
本発明第６の態様によれば、頂点座標テーブルには、頂点ＩＤに対応して座標値が記録されるとともに、座標値をもとに算出されるハッシュ値が同一の他の座標値を前記頂点ＩＤより最近傍に記録した単一の頂点ＩＤがリンク先として対応付けられているので、同一のハッシュ値を持つ頂点ＩＤに対応する座標値だけを迅速に抽出することができ、効率的な照合を行うことが可能となる。
【００２４】
また、本発明第７の態様では、前記頂点座標テーブルに加え先頭頂点テーブルを設け、前記先頭頂点テーブルには、前記ハッシュ値算出手段により算出されるハッシュ値に対応して、前記頂点座標テーブル上に最初に記録されている前記ハッシュ値になる頂点ＩＤがリンク先として対応付けられていることを特徴とする。
【００２５】
本発明第７の態様によれば、頂点座標テーブルに加え先頭頂点テーブルを設け、先頭頂点テーブルには、算出されるハッシュ値に対応して、頂点座標テーブル上に最初に記録されているハッシュ値になる頂点ＩＤがリンク先として対応付けられているので、頂点座標テーブル内で照合対象となる同一ハッシュ値を持つ頂点ＩＤに対応する座標値だけを迅速に抽出することが可能となる。
【００２６】
また、本発明第８の態様では、前記ハッシュ値算出手段は、前記座標値が（ｘ、ｙ、ｚ）なる３次元の値で構成され、かつ各々の成分が、ＸｍｉｎからＸｍａｘ、ＹｍｉｎからＹｍａｘ、ＺｍｉｎからＺｍａｘの範囲の実数値をもつ場合、各成分をｈｘ＝（ｘ−Ｘｍｉｎ）・Ｓ／（Ｘｍａｘ−Ｘｍｉｎ），ｈｙ＝（ｙ−Ｙｍｉｎ）・Ｓ／（Ｙｍａｘ−Ｙｍｉｎ），ｈｚ＝（ｚ−Ｚｍｉｎ）・Ｓ／（Ｚｍａｘ−Ｚｍｉｎ）なる式で所定の整数Ｓ段階(ｈｘ, ｈｙ, ｈｚ)に分類し、ハッシュ値ｈ＝ｈｘ＋ｈｙ・Ｓ＋ｈｚ・Ｓ2として算出することを特徴とする。
【００２７】
本発明第８の態様によれば、座標値が（ｘ、ｙ、ｚ）なる３次元の値で構成され、かつ各々の成分が、ＸｍｉｎからＸｍａｘ、ＹｍｉｎからＹｍａｘ、ＺｍｉｎからＺｍａｘの範囲の実数値をもつ場合、各成分をｈｘ＝（ｘ−Ｘｍｉｎ）・Ｓ／（Ｘｍａｘ−Ｘｍｉｎ），ｈｙ＝（ｙ−Ｙｍｉｎ）・Ｓ／（Ｙｍａｘ−Ｙｍｉｎ），ｈｚ＝（ｚ−Ｚｍｉｎ）・Ｓ／（Ｚｍａｘ−Ｚｍｉｎ）なる式で所定の整数Ｓ段階(ｈｘ, ｈｙ, ｈｚ)に分類し、ハッシュ値ｈ＝ｈｘ＋ｈｙ・Ｓ＋ｈｚ・Ｓ2として算出するようにしているので、３次元のポリゴンモデルにおける各頂点を空間的に均等分類して偏りのないハッシュ値を求めることが可能となる。
【００２８】
また、本発明第９の態様では、
前記ポリゴン稜線構造化手段は、
前記頂点構成テーブルの各ポリゴンの各頂点ＩＤと頂点順において隣接する頂点ＩＤとで構成される頂点ＩＤペアに対して稜線ＩＤで表現し、各ポリゴンの頂点順と対応付けて稜線順に稜線ＩＤを記録した前記稜線構成テーブルを作成するとともに、前記稜線構成テーブルに記録された稜線ＩＤと頂点ＩＤペアを対応付けて記録した稜線テーブルとを作成するものであり、
前記頂点構成テーブルの前記ポリゴンのポリゴンＩＤおよび頂点順の位置の頂点ＩＤと頂点順において隣接する頂点ＩＤで構成される頂点ＩＤペアＸの中で小さい方の頂点ＩＤＳを用いて、前記稜線テーブル上で既登録の稜線ＩＤに対応する頂点ＩＤペアのうち小さい方の頂点ＩＤが前記頂点ＩＤＳである稜線ＩＤの頂点ＩＤペアを抽出し、前記頂点ＩＤペアＸと照合する頂点ＩＤ照合手段と、
前記頂点ＩＤ照合手段により前記頂点ＩＤペアＸが既登録の稜線ＩＤの頂点ＩＤペアと一致する場合は、前記稜線構成テーブル上の前記ポリゴンＩＤおよび前記頂点順に対応する稜線順の位置に前記稜線ＩＤを記録するようにし、前記頂点ＩＤ照合手段により前記頂点ＩＤペアＸがいずれの既登録の稜線ＩＤの頂点ＩＤペアとも一致しない場合は、前記頂点構成テーブル上の前記ポリゴンＩＤおよび前記頂点順に対応する稜線順の位置に前記稜線テーブルに記録されていない新規な稜線ＩＤを作成して記録する稜線構成テーブル更新手段と、
前記稜線構成テーブル更新手段で新規な稜線ＩＤを記録した場合、前記稜線テーブル上の前記稜線ＩＤの位置に前記頂点ＩＤペアＸを前記頂点ＩＤＳで抽出可能な形態で記録するようにしている稜線テーブル更新手段と、
を有することを特徴とする。
【００２９】
本発明第９の態様によれば、頂点構成テーブルのポリゴンＩＤおよび頂点順の位置の頂点ＩＤと頂点順において隣接する頂点ＩＤで構成される頂点ＩＤペアＸの中で小さい方の頂点ＩＤＳを用いて、稜線テーブル上で既登録の頂点ＩＤペアのうち小さい方の頂点ＩＤが頂点ＩＤＳである稜線ＩＤの頂点ＩＤペアを抽出し、頂点ＩＤペアＸと照合し、頂点ＩＤペアＸが既登録の稜線ＩＤの頂点ＩＤペアと一致する場合は、稜線構成テーブル上のポリゴンＩＤおよび頂点順に対応する稜線順の位置に稜線ＩＤを記録するようにし、頂点ＩＤペアＸがいずれの既登録の稜線ＩＤの頂点ＩＤペアとも一致しない場合は、頂点構成テーブル上のポリゴンＩＤおよび頂点順に対応する稜線順の位置に稜線テーブルに記録されていない新規な稜線ＩＤを作成して記録し、稜線構成テーブル更新手段で新規な稜線ＩＤを記録した場合、稜線テーブル上の稜線ＩＤの位置に頂点ＩＤペアＸを頂点ＩＤＳで抽出可能な形態で記録するようにしたので、小さい方の頂点ＩＤが異なる既登録の頂点ＩＤペアに対応する稜線ＩＤとは一致する可能性が無いため、照合対象から外すことができ、小さい方の頂点ＩＤが同一となる既登録の稜線ＩＤだけに照合対象を絞り込むことができ、ポリゴンＩＤに対して頂点順に頂点ＩＤを対応付けた頂点構成テーブルを基に、頂点ＩＤと頂点順において隣接する頂点ＩＤとで構成される頂点ＩＤペアに対して稜線ＩＤで表現し、ポリゴンＩＤと頂点順に対応する稜線順に対応付けて稜線ＩＤを記録した稜線構成テーブルと、稜線構成テーブルに記録された稜線ＩＤと頂点ＩＤペアを対応付けて記録した稜線テーブルで表現される形態に効率的に構造化することが可能となる。
【００３０】
また、本発明第１０の態様では、前記稜線テーブルには、稜線ＩＤに対応して頂点ＩＤペアが記録されるとともに、当該頂点ＩＤペアのうち小さい方の頂点ＩＤが同一である他の頂点ＩＤペアを最近傍に記録した単一の稜線ＩＤがリンク先として対応付けられていることを特徴とする。
【００３１】
本発明第１０の態様によれば、稜線テーブルには、稜線ＩＤに対応して頂点ＩＤペアが記録されるとともに、頂点ＩＤペアのうち小さい方の頂点ＩＤが同一である他の頂点ＩＤペアを最近傍に記録した単一の稜線ＩＤがリンク先として対応付けられているので、同一頂点ＩＤを持つ稜線ＩＤに対応する頂点ＩＤペアだけを迅速に抽出することができ、効率的な照合を行うことが可能となる。
【００３２】
また、本発明第１１の態様では、前記稜線テーブルに加え先頭稜線テーブルを設け、前記先頭稜線テーブルには、頂点ＩＤに対応付けて、前記頂点ＩＤペアのうち小さい方の頂点ＩＤが同一となり、前記稜線テーブル上で最初に記録されている稜線ＩＤがリンク先として対応付けられていることを特徴とする。
【００３３】
本発明第１１の態様によれば、稜線テーブルに加え先頭稜線テーブルを設け、先頭稜線テーブルには、頂点ＩＤに対応付けて、頂点ＩＤペアのうち小さい方の頂点ＩＤが同一となり、稜線テーブル上で最初に記録されている稜線ＩＤがリンク先として対応付けられているので、稜線テーブル内で照合対象となる同一頂点ＩＤペアを持つ稜線ＩＤに対応する頂点ＩＤペアだけを迅速に抽出することが可能となる。
【発明の効果】
【００３４】
本発明によれば、立体物造形用データであるポリゴンモデルを効率的に複数のポリゴンモデルに分離することが可能となる。
【図面の簡単な説明】
【００３５】
【図１】本発明の一実施形態に係る立体物造形用データ分離装置のハードウェア構成図である。
【図２】本発明の一実施形態に係る立体物造形用データ分離装置の構成を示す機能ブロック図である。
【図３】DICOM形式ボクセルデータからポリゴンモデルへの変換の様子を示す図である。
【図４】DICOM形式ボクセルデータを、複数のスライス画像として示した図である。
【図５】DICOM形式ボクセルデータを、４つの形態で表示した例である。
【図６】図５に示したDICOM形式ボクセルデータを「3D-Slicer」により変換して得られたＳＴＬデータを示す図である。
【図７】ポリゴンモデル（ＳＴＬデータ）を示す図である。
【図８】領域別ＳＴＬデータを合成したポリゴンモデル（ＳＴＬデータ）のレンダリング像を示す図である。
【図９】本発明の一実施形態に係る立体物造形用データ分離装置の処理概要を示すフローチャートである。
【図１０】処理対象とするポリゴン群の一例を示す図である。
【図１１】図１０に示したポリゴン群を実現するための頂点座標配列データを示す図である。
【図１２】ポリゴンモデルの構造化の詳細を示すフローチャートである。
【図１３】ポリゴン群とハッシュ値の関係を示す図である。
【図１４】初期化時の各テーブルの状態を示す図である。
【図１５】各テーブルの変化の様子を示す図である。
【図１６】各テーブルの変化の様子を示す図である。
【図１７】各テーブルの変化の様子を示す図である。
【図１８】各テーブルの変化の様子を示す図である。
【図１９】各テーブルの変化の様子を示す図である。
【図２０】ポリゴンモデルの構造化の結果を示す図である。
【図２１】ステップＳ２０のポリゴン稜線の構造化の詳細を示すフローチャートである。
【図２２】ポリゴンＰ１の稜線構成が記録された時点の各テーブルの状態を示す図である。
【図２３】ポリゴンＰ２の稜線構成が記録された時点の各テーブルの状態を示す図である。
【図２４】ポリゴンＰ３の稜線構成が記録された時点の各テーブルの状態を示す図である。
【図２５】ポリゴンＰ１８の稜線構成が記録された時点の各テーブルの状態を示す図である。
【図２６】完成した稜線構成テーブル、稜線テーブルを示す図である。
【図２７】ステップＳ３０の隣接ポリゴンテーブルの作成の詳細を示すフローチャートである。
【図２８】ポリゴンＰ２のポリゴン別稜線ＩＤが記録された時点の各テーブルの状態を示す図である。
【図２９】ポリゴンＰ４のポリゴン別稜線ＩＤが記録された時点の各テーブルの状態を示す図である。
【図３０】ポリゴンＰ１８のポリゴン別稜線ＩＤが記録された時点の各テーブルの状態を示す図である。
【図３１】ステップＳ１０で完成した頂点構成テーブル、ステップＳ２０で完成した稜線構成テーブル、ステップＳ３０で完成した隣接ポリゴンテーブルを示す図である。
【図３２】ステップＳ４０のポリゴンモデルの分離の詳細を示すフローチャートである。
【発明を実施するための形態】
【００３６】
以下、本発明の好適な実施形態について図面を参照して詳細に説明する。
＜１．装置構成＞
図１は、本発明の一実施形態に係る立体物造形用データ分離装置２００を含む立体物造形システムのハードウェア構成図である。本実施形態に係る立体物造形用データ分離装置２００は、汎用のコンピュータで実現することができ、図１に示すように、ＣＰＵ（Central Processing Unit）１と、コンピュータのメインメモリであるＲＡＭ（Random Access Memory）２と、ＣＰＵ１が実行するプログラムやデータを記憶するためのハードディスク、フラッシュメモリ等の大容量の記憶装置３と、キーボード、マウス等のキー入力Ｉ／Ｆ（インターフェース）４と、３Ｄプリンタやデータ記憶媒体等の外部装置とデータ通信するためのデータ入出力Ｉ／Ｆ（インターフェース）５と、液晶ディスプレイ等の表示デバイスである表示部６と、を備え、互いにバスを介して接続されている。
【００３７】
３Ｄプリンタ７は、汎用の３Ｄプリンタであり、立体物の三次元形状をポリゴンの集合で表現したポリゴンモデルである立体物造形用データを基に樹脂、石膏等の素材を加工して立体物を造形する立体物造形装置である。３Ｄプリンタ７は、データ処理部７ａと出力部７ｂを有している。３Ｄプリンタ７のデータ処理部７ａは、データ入出力Ｉ／Ｆ５に接続されており、データ入出力Ｉ／Ｆ５から受け取った削減された立体物造形用データを基に、出力部７ｂが立体物を造形するようになっている。
【００３８】
図１では、立体物造形用データ分離装置２００と３Ｄプリンタ７は分離した形態で示されているが、現在市販されている殆どの３Ｄプリンタ製品には立体物造形用データ分離装置２００の構成要素である、ＣＰＵ１、ＲＡＭ２、記憶装置３、キー入力Ｉ／Ｆ４（汎用コンピュータ向けキーボード・マウスではなく、テンキーレベルの数種のボタン）、データ入出力Ｉ／Ｆ５、表示部６（数行の文字を表示可能な小型液晶パネル、タッチパネルを重畳させキー入力Ｉ／Ｆ４を兼ねることも多い）も小規模ながら重複して備えている。従って、３Ｄプリンタ７自体が外部記憶媒体経由で立体物造形用データを直接受け取り、単独で立体物を造形する運用も可能になっている（特に民生用の３Ｄプリンタではこちらの形態の方が多い）。すなわち、図１に示した立体物造形システムを１つの筐体に収めて、“３Ｄプリンタ”という製品として流通することも多い。
【００３９】
図２は、本実施形態に係る立体物造形用データ分離装置の構成を示す機能ブロック図である。図２において、１０は制御手段、３０はポリゴンモデル構造化手段、４０はポリゴン稜線構造化手段、５０は隣接ポリゴンテーブル作成手段、６０はグループＩＤ仮設定手段、７０はグループＩＤ本設定手段、８０はポリゴンモデル分離手段、１２０はポリゴンモデル記憶手段、１３０は分離ポリゴンモデル記憶手段である。
【００４０】
制御手段１０は、立体物造形用データ分離装置全体の制御を行う。ポリゴンモデル構造化手段３０は、ポリゴンモデルから、各ポリゴンに含まれる各頂点を、同一座標の共有頂点を同一値とする頂点ＩＤで表現し、ポリゴンを構成する各頂点を共有頂点の頂点ＩＤで表現してポリゴンと対応付けて頂点順に記録した頂点構成テーブルと、頂点構成テーブルに付与された頂点ＩＤと座標値を対応付けて記録した頂点座標テーブルを作成する。ポリゴン稜線構造化手段４０は、各ポリゴンに含まれる各稜線を、共有する同一稜線を同一値とする稜線ＩＤで表現し、ポリゴンを構成する各稜線を稜線ＩＤで表現してポリゴンと稜線順に対応付けて記録した稜線構成テーブルと、稜線構成テーブルに付与された稜線ＩＤと、稜線ＩＤで特定される稜線の両端を特定する頂点ＩＤペアを対応付けて記録した稜線テーブルを作成する。
隣接ポリゴンテーブル作成手段５０は、ポリゴンモデルの各ポリゴンの各稜線と共有する他のポリゴンとの対応関係を稜線順に記録した隣接ポリゴンテーブルを作成する。
【００４１】
グループＩＤ仮設定手段６０は、新規なグループＩＤを定義して、ポリゴンモデルの中でグループＩＤが未設定のポリゴンを抽出し、抽出されたポリゴンに対して定義された新規なグループＩＤを仮設定する。グループＩＤ本設定手段７０は、ポリゴンモデルの中でグループＩＤが仮設定されているポリゴンを抽出し、抽出されたポリゴンに対してグループＩＤを本設定するとともに、隣接ポリゴンテーブルを参照し、本設定されたポリゴンに隣接しグループＩＤが未設定の他のポリゴンに対して、本設定されたポリゴンに対応するグループＩＤと同一のグループＩＤを仮設定する。ポリゴンモデル分離手段８０は、各ポリゴンに本設定されたグループＩＤごとに当該ポリゴンを所定のグループに分離する。
【００４２】
制御手段１０、ポリゴンモデル構造化手段３０、ポリゴン稜線構造化手段４０、隣接ポリゴンテーブル作成手段５０、グループＩＤ仮設定手段６０、グループＩＤ本設定手段７０、ポリゴンモデル分離手段８０は、ＣＰＵ１が、記憶装置３に記憶されているプログラムを実行することにより実現される。
【００４３】
ポリゴンモデル記憶手段１２０は、分離前のポリゴンモデルを記憶した記憶手段であり、記憶装置３により実現される。分離ポリゴンモデル記憶手段１３０は、ポリゴンモデルを複数ファイルに分離した分離ポリゴンモデルを記憶する記憶手段であり、記憶装置３により実現される。分離ポリゴンモデル記憶手段１３０に記憶される分離ポリゴンモデルは、３Ｄプリンタ７への出力用の立体物造形用データとなる。ポリゴンモデル記憶手段１２０に記憶されたポリゴンモデル、分離ポリゴンモデル記憶手段１３０に記憶される分離ポリゴンモデルは、いずれもポリゴンの集合体であり、ポリゴン単位で各ポリゴンが有する頂点を記録した形式となっている。
【００４４】
図２に示した各構成手段は、現実には図１に示したように、コンピュータおよびその周辺機器等のハードウェアに専用のプログラムを搭載することにより実現される。すなわち、コンピュータが、専用のプログラムに従って各手段の内容を実行することになる。なお、本明細書において、コンピュータとは、ＣＰＵ等の演算処理部を有し、データ処理が可能な装置を意味し、パーソナルコンピュータなどの汎用コンピュータだけでなく、製品としての“３Ｄプリンタ”に組み込まれたボードコンピュータも含む。
【００４５】
図１に示した記憶装置３には、ＣＰＵ１を動作させ、コンピュータを、立体物造形用データ分離装置として機能させるための専用のプログラムが実装されている。この専用のプログラムを実行することにより、ＣＰＵ１は、制御手段１０、ポリゴンモデル構造化手段３０、ポリゴン稜線構造化手段４０、隣接ポリゴンテーブル作成手段５０、グループＩＤ仮設定手段６０、グループＩＤ本設定手段７０、ポリゴンモデル分離手段８０としての機能を実現することになる。また、記憶装置３は、ポリゴンモデル記憶手段１２０、分離ポリゴンモデル記憶手段１３０として機能するだけでなく、立体物造形用データ分離装置としての処理に必要な様々なデータを記憶する。
【００４６】
＜２．処理動作＞
＜２．１．前処理＞
次に、図１、図２に示した立体物造形用データ分離装置の処理動作について説明する。まず、医療用ボクセルデータからサーフェースデータであるポリゴンモデルを作成する前処理について説明する。サーフェースデータとは、サーフェースモデリングにより立体構造を表面形状として表現したデータであり、多角形のデータであるポリゴンにより構成されるポリゴンモデルである。前処理は、コンピュータが公知のプログラムを実行することにより行われる。ここでは、公知のプログラムとして、米国ハーバード大学が中心に開発したオープンソースソフトウェアである「3D-Slicer」を用いた場合を例にとって説明する。まず、コンピュータが、全体ボクセルデータから、特定臓器領域のボクセルデータを抽出する。次に、コンピュータが、特定臓器領域のボクセルデータをポリゴンモデルであるサーフェースデータに変換する。このようにして得られたポリゴンモデルは、ポリゴンモデル記憶手段１２０に格納される。前処理は、図１に示した立体物造形用データ分離装置を実現するコンピュータに、上記プログラムを実行させることにより行ってもよいし、図１に示した立体物造形用データ分離装置を実現するコンピュータとは別のコンピュータにより実行し、得られたポリゴンモデルを記憶装置３により実現されるポリゴンモデル記憶手段１２０に格納するようにしてもよい。
【００４７】
本実施形態では、医療用ボクセルデータとして医用画像データ交換に関する国際標準規格であるDICOM形式のボクセルデータを用いる。また、ポリゴンモデルであるサーフェースデータとしてＳＴＬ（Standard Triangulated Language）データを用いる。ＳＴＬデータとは、元来３Ｄグラフィックス分野におけるモデリングデータ交換に関する業界標準で、最近では３Ｄプリンタでも標準的に使用されるようになったもので、三次元形状を三角形のポリゴンの集合体で表現したデータである。そして、コンピュータが上記「3D-Slicer」を実行することにより、図３（ａ）に示すようなDICOM形式ボクセルデータから、図３（ｂ）に示すような領域別のボクセルデータを抽出し、サーフェースモデル変換を行って図３（ｃ）に示すようなポリゴンモデル（ＳＴＬデータ）が得られる。領域別のボクセルデータの抽出、サーフェースモデル変換には、特許文献３等に記載されたMarching Cube法が用いられている。
【００４８】
図４〜図８に、「3D-Slicer」による処理画面の一例を示す。図４は、「3D-Slicer」の処理対象となるDICOM形式ボクセルデータを、複数のスライス画像として示した図である。図４の例では、人体頭部のサジタル像を２５６枚のスライス画像で示している。各スライス画像は、５１２×５１２画素で構成されている。
【００４９】
図５は、DICOM形式ボクセルデータを、４つの形態で表示した例である。図５において、上部に表示されているのは、ボリュームレンダリング像である。下部に表示されているのは、左側から順にアキシャル像、サジタル像、コロナル像である。
【００５０】
図６は、図５に示したDICOM形式ボクセルデータを「3D-Slicer」により変換して得られたポリゴンモデルのＳＴＬデータを示す図である。図６において、上部に表示されているのは、ＳＴＬデータのサーフェースレンダリング像である。図６の例では、眼球・脳領域しきい値：626.75以上（MRI撮影でボクセル値10bits幅の場合）、眼球結合組織Ｌしきい値：298.36-458.74、眼球結合組織Ｒしきい値：298.36-431.32を設定することにより、領域（組織）別に分類された領域別ＳＴＬデータをサーフェースレンダリングしたものを示している。
【００５１】
図７は、「3D-Slicer」により得られた領域別ＳＴＬデータをシェーディングにより陰影表現した図である。図８は、領域別ＳＴＬデータを合成したポリゴンモデル（ＳＴＬデータ）のサーフェースレンダリング像を示す図である。図８に示すFront Viewは、図６の上部に示したものと同一である。前処理の後は、図７に示したようなポリゴンモデルがポリゴンモデル記憶手段１２０に記憶される。
【００５２】
＜２．２．処理概要＞
次に、図１、図２に示した立体物造形用データ分離装置の処理動作について説明する。図９は、本発明の一実施形態に係る立体物造形用データ分離装置の処理概要を示すフローチャートである。まず、ポリゴンモデル構造化手段３０が、ポリゴンモデル記憶手段１２０から、分離前のポリゴンモデルを読み込み、ポリゴンモデルの構造化を行う（ステップＳ１０）。次に、ポリゴン稜線構造化手段４０が、ポリゴン稜線の構造化を行う（ステップＳ２０）。次に、隣接ポリゴンテーブル作成手段５０が、隣接ポリゴンテーブルの作成を行う（ステップＳ３０）。そして、ポリゴンモデル分離手段８０が、隣接ポリゴンテーブルが作成されたポリゴンモデルを、複数のグループに分離する（ステップＳ４０）。
【００５３】
まず、処理対象とするポリゴンモデルについて説明する。ポリゴンモデルは、空間における三次元の値をもち、数万個単位のポリゴンからなることもあるが、本実施形態では、説明の便宜上、二次元空間に投影したポリゴン群を用いる。図１０は、処理対象とするポリゴン群の一例を示す図である。図１０の例では、１８個の三角形のポリゴンからなるポリゴン群を示している。図１０において、大文字のアルファベットＡ〜Ｎは特定のポリゴンに属する形式でなく、複数のポリゴンで共有される共有頂点を識別するために示している。大文字のアルファベットＡ〜Ｎは、ポリゴン群全体において共有頂点を識別するために、便宜上付されたものであり、後述する頂点座標配列データや、頂点構成テーブル、先頭頂点テーブル、頂点座標テーブル、稜線構成テーブル、先頭稜線テーブル、稜線テーブル、稜線ＩＤ別ポリゴンテーブル、隣接ポリゴンテーブルには記録されていない（一部記載されているものは、理解を容易にするために便宜上用いられている。）。
【００５４】
図１１は、図１０に示したポリゴン群を実現するための頂点座標配列データを示す図である。頂点座標配列データは、ポリゴンモデルを規定するデータであり、ポリゴンの集合体であるポリゴンモデルを配列構造で定義している。すなわち、図１１は、ＳＴＬデータより法線ベクトルの情報を削除した構造を示している。図１１に示すように、頂点座標配列データは、ポリゴンを識別するポリゴン識別情報であるポリゴンＩＤＰ１〜Ｐ１８に対応付けて、ポリゴンを構成する第１頂点、第２頂点、第３頂点の３つの頂点順に各座標値が記録されている。
【００５５】
また、図１０、図１１には、各ポリゴンおよび各ポリゴンを構成する３つの頂点を各ポリゴンＩＤＰ１〜Ｐ１８と頂点順に対応付けて表現されたポリゴン別頂点ＩＤ“Ｖ１ａ”〜“Ｖ１８ｃ”が記載されている。ポリゴン別頂点ＩＤ“Ｖ１ａ”〜“Ｖ１８ｃ”は、説明の便宜上設けたものであり、頂点座標配列データ、先頭頂点テーブル、頂点構成テーブル、頂点座標テーブル、稜線構成テーブル、先頭稜線テーブル、稜線テーブル、稜線ＩＤ別ポリゴンテーブル、隣接ポリゴンテーブルには記録されていない。
【００５６】
ポリゴン別頂点ＩＤは、その頂点が属するポリゴンのポリゴンＩＤと当該ポリゴンにおける頂点順が特定される形式で頂点を表現したものである。具体的には、図１０に示すように、頂点を示すＶの後に、対応するポリゴンＩＤに含まれる数字、そして第１頂点、第２頂点、第３頂点の頂点順を示すａ、ｂ、ｃのいずれかの小文字のアルファベットで表現する。例えば、図１１の１行目に示すように、ポリゴンＩＤ“Ｐ１”のポリゴン（ポリゴンＰ１）の第１頂点は、“Ｖ１ａ”と表現される。頂点順“Ｖ１ａ”に数字“１”が入っているため、ポリゴンＰ１の頂点であることが明確になっている。このポリゴン別頂点ＩＤは、実際にはシリアル番号で表現され、そのシリアル番号に従って各頂点の座標値が頂点座標配列データに記録されているが、図１０との対応関係、頂点がどのポリゴンに所属するかを明らかにするため、便宜上ポリゴン別頂点ＩＤに記号を付加して図面に掲載したものである。また、図１１の頂点座標配列データにおいて、各頂点の座標は、図１０で示した共有頂点Ａ〜Ｎのいずれかに対応するため、各頂点の座標値が対応する共有頂点Ａ〜Ｎを識別するアルファベットの小文字を添えて表現している。例えば、図１１の１行目に示すように、ポリゴンＰ１の第１頂点Ｖ１ａの座標値は、図１０において“Ｄ”と表示されているので、“（Ｘｄ，Ｙｄ，Ｚｄ）”と表現される。各ポリゴンごとに、構成される３つの頂点に対応付けて３つの頂点の座標値が記録されている。
【００５７】
上記のような規則に従って作成されるため、頂点座標配列データにおいては、同一座標の頂点が複数箇所に重複して記録されることになる。例えば、図１０に示した頂点Ｄは、６つのポリゴンＰ１，Ｐ２，Ｐ４，Ｐ５，Ｐ６，Ｐ７に共有されるため、座標値“（Ｘｄ，Ｙｄ，Ｚｄ）”は、頂点Ｖ１ａ，Ｖ２ａ，Ｖ４ｂ，Ｖ５ｃ，Ｖ６ｃ，Ｖ７ｃとして６箇所に記録される。
【００５８】
＜２．３．ポリゴンモデルの構造化＞
ステップＳ１０のポリゴンモデルの構造化について説明する。ポリゴンモデルの構造化とは、ポリゴンモデルを実現するデータである頂点座標配列データを、頂点構成テーブルおよび頂点座標テーブルで構成される構造に変換することにより、ポリゴンモデルにおける頂点関係（トポロジー・位相情報）が座標値（数値データ）から分離され、あるポリゴンの頂点の修正により影響を受ける周辺のポリゴンの頂点の探索が容易になり、編集し易い構造に組み替えることを意味する。
【００５９】
図１２は、ステップＳ１０のポリゴンモデルの構造化の詳細を示すフローチャートである。ステップＳ１０のポリゴンモデルの構造化は、ポリゴンモデル構造化手段３０により行われる。まず、頂点構成テーブル、頂点座標テーブル、頂点ＩＤの初期化を行う（Ｓ１０１）。頂点構成テーブルは、各ポリゴンに含まれる各頂点を、同一座標の共有頂点を同一値とする頂点ＩＤで表現し、ポリゴンを構成する各頂点を共有頂点の頂点ＩＤで表現して当該ポリゴンのポリゴンＩＤと頂点順とで対応付けて記録したテーブルである。頂点ＩＤは、共有頂点を識別するための頂点識別情報であり、共有頂点を一意に特定することができれば、どのようなものを用いてもよいが、演算処理の効率化のため、本実施形態では、０から始まるシリアルな整数値を用いている。頂点座標テーブルは、頂点構成テーブルに記録された頂点ＩＤと座標値を対応付けて記録したテーブルである。頂点構成テーブル、頂点座標テーブルの初期化は、各項目が記録されていない状態にすることを意味する。また、頂点ＩＤの初期化として現在の頂点ＩＤ＝０に設定する。さらに、ハッシュ値とリンク先頂点ＩＤを対応付けた先頭頂点テーブルも初期化する。先頭頂点テーブルの初期化は、リンク先頂点ＩＤを全て“−１”に設定することにより行われる。頂点座標テーブルと先頭頂点テーブルの２つのテーブルによりハッシュ値別頂点座標テーブルを実現する。
【００６０】
次に、頂点座標配列データより頂点座標値を抽出するにあたり、ポリゴンＩＤを“Ｐ１”に、頂点順を“０”に初期化する（Ｓ１０１）。そして、頂点座標配列データより現在のポリゴンＩＤと頂点順に対応する１つの頂点座標値を抽出する（Ｓ１０２）。例えば、図１１に示した頂点座標配列データからは、ポリゴンＩＤ“Ｐ１”と第１頂点の頂点座標値（Ｘｄ，Ｙｄ，Ｚｄ）が抽出される。
【００６１】
続いて、抽出された頂点座標値（Ｘｄ，Ｙｄ，Ｚｄ）よりハッシュ値を算出する（Ｓ１０３）。具体的には、まず、ポリゴンモデル内の全てのポリゴンの３次元座標値ｘ，ｙ，ｚの最大値Ｘｍａｘ，Ｙｍａｘ，Ｚｍａｘ、最小値Ｘｍｉｎ，Ｙｍｉｎ，Ｚｍｉｎを求める。これは、図１１に示したような頂点配列データの座標ごとの最大値、最小値を求めることになる。そして、座標値ｘ，ｙ，ｚの値を均等なＳ段階に分類し、整数値ｈｘ，ｈｙ，ｈｚ（０≦ｈｘ，ｈｙ，ｈｚ≦Ｓ−１）に変換する。整数Ｓとしては、例えばＳ＝３２を設定することができる。具体的には、以下の〔数式１〕に従った処理を実行することにより、ｈｘ，ｈｙ，ｈｚを算出する。ただし、〔数式１〕に従った処理の後、小数点以下を切り捨てた値を、整数値ｈｘ，ｈｙ，ｈｚとして得るものとする。
【００６２】
〔数式１〕
ｈｘ＝（ｘ−Ｘｍｉｎ）・Ｓ／（Ｘｍａｘ−Ｘｍｉｎ）
ｈｙ＝（ｙ−Ｙｍｉｎ）・Ｓ／（Ｙｍａｘ−Ｙｍｉｎ）
ｈｚ＝（ｚ−Ｚｍｉｎ）・Ｓ／（Ｚｍａｘ−Ｚｍｉｎ）
【００６３】
そして、以下の〔数式２〕に従った処理を実行することにより、ハッシュ値ｈを算出する。
【００６４】
〔数式２〕
ｈ＝ｈｘ＋ｈｙ・Ｓ＋ｈｚ・Ｓ2（０≦ｈ≦Ｓ3−１）
【００６５】
次に、算出されたハッシュ値を用いて先頭頂点テーブルを参照する（Ｓ１０４）。そして、そのハッシュ値に対応するリンク先頂点ＩＤが先頭頂点テーブルに登録されているか否かを判定する（Ｓ１０５）。ハッシュ値に対応するリンク先頂点ＩＤ（図中“リンク頂点ＩＤ”と表示）が“−１”、すなわち初期状態である場合は、そのハッシュ値に対応するリンク先頂点ＩＤが未登録、すなわち既登録でないことを意味する。
【００６６】
この場合、先頭頂点テーブルに頂点ＩＤの記録を行う（Ｓ１０６）。具体的には、先頭頂点テーブルのハッシュ値に対応するリンク先頂点ＩＤに、現在の頂点ＩＤ（初期状態では“０”）を書き込む。続いて、頂点座標テーブルの現在の頂点ＩＤの位置にステップＳ１０２で抽出した座標値を書き込む（Ｓ１０７）。この時、頂点座標テーブルにもリンク先頂点ＩＤを書き込む欄があるが、初期状態の“−１”のままにする。また、頂点構成テーブルにステップＳ１０２で抽出したポリゴンＩＤと頂点順の位置に対応付けて、現在の頂点ＩＤを書き込む。ここでは、新規な頂点ＩＤとして記録されることになる。そして、現在の頂点ＩＤをインクリメントする。
【００６７】
一方、ステップＳ１０５において、ハッシュ値に対応するリンク先頂点ＩＤが“−１”でない場合は、そのハッシュ値に対応するリンク先頂点ＩＤが既登録であることを意味する。この場合、ステップＳ１０２で抽出した座標値と、頂点座標テーブルにおける既登録のリンク先頂点ＩＤに対応する座標値が一致するか否かを判定する（Ｓ１０８）。判定の結果、両座標値が一致する場合は、頂点構成テーブルのポリゴンＩＤ、頂点順の位置に、既登録のリンク先頂点ＩＤを記録する（Ｓ１０９）。ステップＳ１０８における判定の結果、両座標値が異なる場合は、頂点座標テーブルのリンク先頂点ＩＤを参照し、リンク先頂点ＩＤが０以上であるか否かを確認する（Ｓ１１０）。
【００６８】
確認の結果、リンク先頂点ＩＤが０以上である場合は、その値を頂点ＩＤとし、ステップＳ１０８に戻って、その頂点ＩＤに対応する頂点座標テーブルにおける既登録の座標値とステップＳ１０２で抽出した座標値を照合する。ステップＳ１１０における確認の結果、リンク先頂点ＩＤが負値（例えば“−１”）である場合は、頂点座標テーブルのその頂点ＩＤに対応するリンク先頂点ＩＤに現在の頂点ＩＤを記録し、ステップＳ１０７に戻って、頂点座標テーブルの現在の頂点ＩＤの位置にステップＳ１０２で抽出した座標値を記録する。この時、頂点座標テーブルの現在の頂点ＩＤにおけるリンク先頂点ＩＤについては、初期状態の“−１”のままにする。また、頂点構成テーブルにステップＳ１０２で抽出したポリゴンＩＤと頂点順の位置に現在の頂点ＩＤを記録する。そして、頂点ＩＤをインクリメントする。
【００６９】
ステップＳ１０７またはＳ１０９の処理を終えたら、全ポリゴンに対して処理を終えたか否かを判定する（Ｓ１１１）。具体的には、まず、頂点順をインクリメントし、頂点順が“２”を超えたら、ポリゴンＩＤをインクリメントして頂点順を“０”にする。例えば、現在のポリゴンＩＤが“Ｐ１”の場合、ポリゴンＩＤをインクリメントすると、ポリゴンＩＤは“Ｐ２”になる。ポリゴンＩＤがポリゴン総数を超えていなければ、ステップＳ１０２に戻って処理を繰り返す。ポリゴンＩＤがポリゴン総数を超えていれば、全ポリゴンに対して処理を終えたと判定して処理を終了する。
【００７０】
ポリゴンモデル構造化手段３０は、ハッシュ値算出手段、座標値照合手段、頂点構成テーブル処理手段、頂点座標テーブル処理手段を備えており、図１２に示したポリゴンモデルの構造化処理は、これらの手段が連携することにより実現される。
【００７１】
図１２に示したステップＳ１０のポリゴンモデルの構造化処理の具体例について説明する。図１０に示したポリゴン群が、その頂点の座標値により図１３に示すようなハッシュ値をとる場合を例にとって説明する。図１３の例では、説明の都合上２次元で表現し、上記〔数式２〕においてＳ＝２とすると、ｈ＝ｈｘ＋ｈｙ・２となり、頂点Ａ，Ｂ，Ｄ，Ｅのハッシュ値がｈ＝０、頂点Ｃ，Ｆのハッシュ値がｈ＝１、頂点Ｇ，Ｈ，Ｊ，Ｌ，Ｍのハッシュ値がｈ＝２、頂点Ｉ，Ｋ，Ｎのハッシュ値がｈ＝３であることを示している。実際には上記〔数式２〕において、Ｓ＝３２に設定し、ｈ＝ｈｘ＋ｈｙ・３２＋ｈｚ・１０２４となり、ハッシュ値ｈは、０〜３２７６７の値をとるが、以下では、説明を簡略化するため、ハッシュ値は前述の０〜３の値をとるものとして説明していく。
【００７２】
図１４は、Ｓ１０１における初期化時の各テーブルの状態を示す図である。図１４（ａ）は頂点構成テーブル、図１４（ｂ）は先頭頂点テーブル、図１４（ｃ）は頂点座標テーブルを示している。先頭頂点テーブルには、ハッシュ値に頂点ＩＤが対応付けられてリンク先頂点ＩＤとして記録されている。ここでは、図１３に示したようにハッシュ値が０〜３の値をとるため、先頭頂点テーブルには、全てのハッシュ値０〜３に対応付けてリンク先頂点ＩＤとして“−１”が記録されている。頂点座標テーブルには、頂点ＩＤに対応付けられて頂点座標が記録されるとともに、リンク先頂点ＩＤが記録されている。
【００７３】
図１４（ａ）に示すように、頂点構成テーブルは、ポリゴンＩＤと頂点順に対応付けて３つの頂点ＩＤが記録されるようになっているが、頂点順は、左から０，１，２となっており、図１１に示した第１頂点、第２頂点、第３頂点に対応している。ステップＳ１０１における初期化の際、頂点順＝０に初期化される。ステップＳ１０２において、頂点座標配列データより、ポリゴンＰ１の第１頂点の座標値（Ｘｄ，Ｙｄ，Ｚｄ）を抽出して、ステップＳ１０３において、ハッシュ値“０”が算出されたものとする。ステップＳ１０４において、ハッシュ値“０”で先頭頂点テーブルを参照すると、ステップＳ１０５において、リンク先の頂点ＩＤが登録されていないため、先頭頂点テーブルのハッシュ値“０”に対応付けて、ステップＳ１０６において、現在の頂点ＩＤ“０”をリンク先として記録する。
【００７４】
そして、ステップＳ１０７において、頂点座標テーブルにおける現在の頂点ＩＤ“０”の位置に、ステップＳ１０２において抽出した座標値（Ｘｄ，Ｙｄ，Ｚｄ）を記録し、リンク先頂点ＩＤとして“−１”を記録する。さらに、ステップＳ１０７において、現在のポリゴンＩＤ“Ｐ１”の現在の頂点順“０”の位置に、現在の頂点ＩＤ“０”を記録する。この結果、各テーブルは、図１５に示すような状態となる。そして、頂点ＩＤをインクリメントして現在の頂点ＩＤを“０”→“１”とする。また、頂点順をインクリメントして現在の頂点順を“０”→“１” とする。現在のポリゴンＩＤは“Ｐ１”であり、“Ｐ１３”を超えていないため、ステップＳ１１１において、全ポリゴンに対して処理終了していないと判断され、ステップＳ１０２に戻る。
【００７５】
ステップＳ１０２において、頂点座標配列データより、現在のポリゴンＩＤ“Ｐ１”、現在の頂点順“１”に基づき、ポリゴンＰ１の第２頂点の座標値（Ｘｂ，Ｙｂ，Ｚｂ）を抽出する。そして、ステップＳ１０３において、座標値（Ｘｂ，Ｙｂ，Ｚｂ）に対してハッシュ値“０”が算出されたものとする。ステップＳ１０４において、ハッシュ値“０”で先頭頂点テーブルを参照すると、ステップＳ１０５において、リンク先の頂点ＩＤとして“０”が既登録であるため、ステップＳ１０８において、既登録の頂点ＩＤ“０”に対応する頂点座標テーブルの座標値（Ｘｄ，Ｙｄ，Ｚｄ）と、ステップＳ１０２で抽出した座標値（Ｘｂ，Ｙｂ，Ｚｂ）を照合する。照合の結果、不一致であるので、ステップＳ１１０において、頂点座標テーブルのリンク先の頂点ＩＤが０以上であるか負の値であるかを確認する。
【００７６】
図１５に示すように、リンク先の頂点ＩＤが“−１”であるので、ステップＳ１０７において、頂点座標テーブルの現在の頂点ＩＤ“１”の位置に、ステップＳ１０２において抽出した座標値（Ｘｂ，Ｙｂ，Ｚｂ）を記録し、リンク先頂点ＩＤとして“−１”を記録する。さらに、ステップＳ１０７において、頂点構成テーブルの、現在のポリゴンＩＤ“Ｐ１”の現在の頂点順“１”の位置に、現在の頂点ＩＤ“１”を記録する。この結果、各テーブルは、図１６に示すような状態となる。そして、頂点ＩＤをインクリメントして現在の頂点ＩＤを“１”→“２”とする。また、頂点順をインクリメントして現在の頂点順を“１”→“２” とする。現在のポリゴンＩＤは“Ｐ１”であり、“Ｐ１３”を超えていないため、ステップＳ１１１において、全ポリゴンに対して処理終了していないと判断され、ステップＳ１０２に戻る。
【００７７】
ポリゴンＩＤ“Ｐ１”、頂点ＩＤ“２”、頂点順“２”の場合は、ポリゴンＩＤ“Ｐ１”、頂点ＩＤ“１”、頂点順“１”の場合と同様に処理され、各テーブルは、図１７に示すような状態となる。そして、頂点ＩＤをインクリメントして現在の頂点ＩＤを“２”→“３”とする。また、頂点順は、１つのポリゴンについて“０”“１”“２”の３つの値のみをとるため、ポリゴンＩＤをインクリメントして“Ｐ１”→“Ｐ２”とし、頂点順をリセットして現在の頂点順を“２”→“０” とする。現在のポリゴンＩＤは“Ｐ２”となり、“Ｐ１８”を超えていないため、ステップＳ１１１において、全ポリゴンに対して処理終了していないと判断され、ステップＳ１０２に戻る。
【００７８】
ステップＳ１０２において、頂点座標配列データより、現在のポリゴンＩＤ“Ｐ２”、現在の頂点順“０”に基づき、ポリゴンＰ２の第１頂点の座標値（Ｘｄ，Ｙｄ，Ｚｄ）を抽出する。そして、ステップＳ１０３において、座標値（Ｘｄ，Ｙｄ，Ｚｄ）に対してハッシュ値“０”が算出されたものとする。ステップＳ１０４において、ハッシュ値“０”で先頭頂点テーブルを参照すると、ステップＳ１０５において、リンク先の頂点ＩＤとして“０”が既登録であるため、ステップＳ１０８において、既登録の頂点ＩＤ“０”に対応する頂点座標テーブルの座標値（Ｘｄ，Ｙｄ，Ｚｄ）と、ステップＳ１０２で抽出した座標値（Ｘｄ，Ｙｄ，Ｚｄ）を照合する。照合の結果、一致するので、ステップＳ１０９において、頂点座標テーブルの座標値が一致した頂点ＩＤ“０”を、頂点構成テーブルの、現在のポリゴンＩＤ“Ｐ２”の現在の頂点順“０”の位置に記録する。この結果、各テーブルは、図１８に示すような状態となる。
【００７９】
上記のようにして、ポリゴンＰ１８まで処理を行ってステップＳ１１１の判定により処理を終了する。このとき、各テーブルは、図１９に示すような状態となる。すなわち、ハッシュ値が同一の他の座標値を頂点ＩＤより最近傍に記録した単一の頂点ＩＤがリンク先として対応付けられているものとなる。上記説明のように、ポリゴンモデルの構造化処理においては、ステップＳ１０８において座標値の照合を行い、不一致であれば頂点座標テーブルに登録するが、一致している場合は、次々に照合を繰り返していく。この処理は、頂点座標テーブルが大きくなり、既登録の座標値が多くなる程、負荷が高くなることになる。本実施形態では、ハッシュ値を用いてハッシュ値別頂点座標テーブルを参照することにより、頂点座標テーブルの全ての座標値の照合を行うことなく、ハッシュ値が異なる座標値とは一致しないことが自明なため照合対象から除外することができ、同一ハッシュ値の頂点座標テーブルのみを参照すればよいことになる。頂点座標テーブルの中で同一ハッシュ値をもつ座標値は、本実施形態では高々１／４程度であるが、前述の通り実際には上記〔数式２〕において、Ｓ＝３２に設定することが多く、そうすると頂点座標テーブルの中で同一ハッシュ値をもつ座標値は１／３２７６７程度に削減され、全件と照合する場合に比べ照合時間も１／３２７６７程度に短縮されることになる。このため、ポリゴンモデルの構造化処理を桁違いに高速に行うことが可能となる。
【００８０】
図１９の例で、ハッシュ値が“０”の場合、図１９（ｃ）の頂点座標テーブルでは、リンク先頂点ＩＤに従って、頂点ＩＤ“０”“１”“２”“６”のものだけ照合すれば、頂点座標の登録が可能となる。図１９（ｂ）に示した先頭頂点テーブルを削除し、図１９（ｃ）に示した頂点座標テーブルよりリンク先頂点ＩＤの欄を削除することにより、図２０に示したような頂点構成テーブルと頂点座標テーブルを得ることができ、ポリゴンモデルの構造化は完了する。
【００８１】
＜２．４．ポリゴン稜線の構造化＞
ステップＳ２０のポリゴン稜線の構造化について説明する。ポリゴン稜線の構造化とは、与えられたポリゴン内の頂点順において隣接する２つの頂点の頂点ＩＤペアに対して稜線ＩＤを付与し、ポリゴンを構成する各稜線を稜線ＩＤで表現してポリゴンＩＤと稜線順とで対応付けて記録した稜線構成テーブルと、稜線構成テーブルに付与された稜線ＩＤに対する頂点ＩＤペアを対応付けて記録した稜線テーブルに分離する処理である。ここで、稜線順は頂点順に対応し、例えば、頂点順で“０”と“１”の隣接する２つの頂点は稜線順“０”に対応し、頂点順で“１”と“２”の隣接する２つの頂点は稜線順“１”に対応し、頂点順で“２”と“０”の隣接する２つの頂点は稜線順“２”に対応させる。この時、稜線テーブルの複数の稜線ＩＤに同一の頂点ＩＤペアが重複して記録されないようにすることがポイントになる。同一の頂点ＩＤペアを共有する隣接するポリゴンの稜線は、頂点ＩＤペアの順番が逆になることが原則になるため、頂点ＩＤペアは番号が小さい（若い）順に設定するようにする。そして、各頂点ＩＤペアに稜線ＩＤを付与する際、稜線テーブルに既に登録されているか否かを探索し、既登録であれば該当する稜線ＩＤを付与し、未登録であれば新規の稜線ＩＤを付与し、稜線テーブルに追加登録するという処理を繰り返す。
【００８２】
図２１は、ステップＳ２０のポリゴン稜線の構造化の詳細を示すフローチャートである。ステップＳ２０のポリゴン稜線の構造化は、ポリゴン稜線構造化手段４０により行われる。まず、稜線構成テーブル、頂点ＩＤ別稜線テーブル、稜線ＩＤの初期化を行う（Ｓ２０１）。稜線構成テーブルは、各ポリゴンに含まれる各稜線を稜線ＩＤで表現してポリゴンと稜線順とで対応付けて記録したテーブルである。稜線ＩＤは、稜線を識別するための稜線識別情報であり、稜線を一意に特定することができれば、どのようなものを用いてもよいが、演算処理の効率化のため、本実施形態では、０から始まるシリアルな整数値を用いている。稜線テーブルは、稜線構成テーブルに付与された稜線ＩＤと頂点ＩＤペアを対応付けて記録したテーブルである。稜線構成テーブル、稜線テーブルの初期化は、各項目が記録されていない状態にすることを意味する。また、稜線ＩＤの初期化として現在の稜線ＩＤ＝０に設定する。さらに、頂点ＩＤペアの小さい方の頂点ＩＤとリンク先稜線ＩＤを対応付けた先頭稜線テーブルも初期化する。先頭稜線テーブルの初期化は、リンク先稜線ＩＤを全て“−１”に設定することにより行われる。稜線テーブルと先頭稜線テーブルの２つのテーブルにより頂点ＩＤ別稜線テーブルを実現する。
【００８３】
次に、頂点構成テーブルより頂点ＩＤペアを抽出するにあたり、ポリゴンＩＤを“Ｐ１”に、頂点順を“０”に初期化する（Ｓ２０１）。そして、頂点構成テーブルより現在のポリゴンＩＤと頂点順に対応する頂点ＩＤと、次の頂点順に対応する隣接する頂点ＩＤからなる２つの頂点ＩＤペアを抽出する（Ｓ２０２）。次の頂点順は現在の頂点順に１を加えたものであるが、頂点順が“２”の場合、次の頂点順は“０”とする。例えば、図２０に示した頂点構成テーブルからは、ポリゴンＩＤ“Ｐ１”と頂点ＩＤ“０”と“１”のペアが抽出される。
【００８４】
次に、抽出された頂点ＩＤペアのうち小さい方の頂点ＩＤを用いて先頭稜線テーブルを参照する（Ｓ２０４）。そして、その頂点ＩＤに対応するリンク先稜線ＩＤが先頭稜線テーブルに登録されているか否かを確認する（Ｓ２０５）。頂点ＩＤに対応するリンク先稜線ＩＤ（図中“リンク稜線ＩＤ”と表示）が“−１”、すなわち初期状態である場合は、その頂点ＩＤに対応するリンク先稜線ＩＤが未登録、すなわち既登録でないことを意味する。
【００８５】
この場合、先頭稜線テーブルに稜線ＩＤの記録を行う（Ｓ２０６）。具体的には、先頭稜線テーブルの頂点ＩＤに対応するリンク先稜線ＩＤに、現在の稜線ＩＤ（初期状態では“０”）を書き込む。続いて、稜線テーブルの現在の稜線ＩＤの位置にステップＳ２０２で抽出した頂点ＩＤペアを書き込む（Ｓ２０７）。この時、稜線テーブルにもリンク先稜線ＩＤを書き込む欄があるが、初期状態の“−１”のままにする。また、稜線構成テーブルにおける、ステップＳ２０２で抽出したポリゴンＩＤと頂点順と同値の稜線順の位置に、現在の稜線ＩＤを書き込む。ここでは、新規な稜線ＩＤとして記録されることになる。そして、現在の稜線ＩＤをインクリメントする。
【００８６】
一方、ステップＳ２０５において、頂点ＩＤに対応するリンク先稜線ＩＤが“−１”でない場合は、その頂点ＩＤに対応するリンク先稜線ＩＤが既登録であることを意味する。この場合、ステップＳ２０２で抽出した頂点ＩＤペアと、頂点座標テーブルにおける既登録のリンク先稜線ＩＤに対応する頂点ＩＤペアが一致するか否かを判定する（Ｓ２０８）。判定の結果、両頂点ＩＤペアが一致する場合は、稜線構成テーブルのポリゴンＩＤ、頂点順と同値の稜線順の位置に、現在の稜線ＩＤを記録する（Ｓ２０９）。ステップＳ２０８における判定の結果、両座標値が異なる場合は、稜線テーブルのリンク先稜線ＩＤを参照し、リンク先稜線ＩＤが０以上であるか否かを確認する（Ｓ２１０）。確認の結果、リンク先稜線ＩＤが０以上である場合は、その値を稜線ＩＤとし、ステップＳ２０８に戻って、その稜線ＩＤに対応する頂点ＩＤペアとステップＳ２０２で抽出した頂点ＩＤペアを照合する。ステップＳ２１０における確認の結果、リンク先稜線ＩＤが負値（例えば“−１”）である場合は、稜線テーブルのその稜線ＩＤに対応するリンク先稜線ＩＤに現在の稜線ＩＤを記録し、ステップＳ２０７に戻って、稜線テーブルの現在の稜線ＩＤの位置にステップＳ２０２で抽出した頂点ＩＤペアを記録する。この時、稜線テーブルの現在の稜線ＩＤにおけるリンク先稜線ＩＤについては、初期状態の“−１”のままにする。また、稜線構成テーブルにおける、ステップＳ２０２で抽出したポリゴンＩＤと頂点順と同値の稜線順の位置にと現在の稜線ＩＤを記録する。そして、稜線ＩＤをインクリメントする。
【００８７】
ステップＳ２０７またはＳ２０９の処理を終えたら、全ポリゴンに対して処理を終えたか否かを判定する（Ｓ２１１）。具体的には、まず、頂点順をインクリメントし、頂点順が“２”を超えたら、ポリゴンＩＤをインクリメントして頂点順を“０”にする。ポリゴンＩＤがポリゴン総数を超えていなければ、ステップＳ２０２に戻って処理を繰り返す。ポリゴンＩＤがポリゴン総数を超えていれば、全ポリゴンに対して処理を終えたと判定して処理を終了する。
【００８８】
ポリゴン稜線構造化手段４０は、頂点ＩＤ照合手段、稜線構成テーブル更新手段、稜線テーブル更新手段を備えており、図２１に示したポリゴン稜線の構造化処理は、これらの手段が連携することにより実現される。
【００８９】
図２２は、ポリゴンＰ１の稜線構成が記録された時点の各テーブルの状態を示す図である。図２２（ａ）は頂点構成テーブル、図２２（ｂ）は稜線構成テーブル、図２２（ｃ）は先頭稜線テーブル、図２２（ｄ）は稜線テーブルを示している。先頭稜線テーブルには、頂点ＩＤペアの小さい方の頂点ＩＤに稜線ＩＤが対応付けられてリンク先稜線ＩＤとして記録されている。ここでは、頂点ＩＤが０〜１３の値をとるが、最終の頂点ＩＤ１３を小さい方の頂点ＩＤとする頂点ＩＤペアは存在しないため、先頭稜線テーブルには、最終の頂点ＩＤ１３を除く全ての頂点ＩＤ０〜１２に対応付けてリンク先稜線ＩＤが記録される。初期状態では、全て“−１”が記録される。稜線テーブルには、稜線ＩＤに対応付けられて頂点ＩＤペア（図中“頂点ペア”と表示）が記録されるとともに、リンク先稜線ＩＤが記録されている。
【００９０】
図２２（ｂ）に示すように、稜線構成テーブルは、ポリゴンＩＤと稜線順に対応付けて３つの稜線ＩＤが記録されるようになっているが、稜線順は頂点順と同値で、左から０，１，２となっている。ステップＳ２０１における初期化の際、頂点順＝稜線順＝０に初期化される。
【００９１】
図２３は、ポリゴンＰ２の稜線構成が記録された時点の各テーブルの状態を示す図である。図２４は、ポリゴンＰ３の稜線構成が記録された時点の各テーブルの状態を示す図である。図２５は、ポリゴンＰ１８の稜線構成が記録された時点の各テーブルの状態を示す図である。図２１に示したフローチャートに従って処理を実行していくことにより、図２５に示したような状態まで処理が行われることになる。
【００９２】
図２５の例で、頂点ＩＤペアの小さい方の頂点ＩＤが“０”の場合、図２５（ｄ）の稜線テーブルでは、リンク先稜線ＩＤに従って、稜線ＩＤ“０”“２”“３”“８”“１０”“１２”のものだけ照合すれば、頂点ＩＤペアの登録が可能となる。図２５（ｃ）に示した先頭稜線テーブルを削除し、図２５（ｄ）に示した稜線テーブルよりリンク先稜線ＩＤの欄を削除することにより、図２６に示したような稜線構成テーブルと稜線テーブルを得ることができ、ポリゴン稜線の構造化は完了する。
【００９３】
＜２．５．隣接ポリゴンテーブルの作成＞
ステップＳ３０の隣接ポリゴンテーブルの作成について説明する。隣接ポリゴンテーブルの作成は、ポリゴンの各稜線（隣接する頂点ペア）と共有する稜線をもつ隣接するポリゴンを探索し、頂点座標配列データをポリゴンＩＤと稜線順に対応付けて隣接ポリゴンのポリゴンＩＤで記述した隣接ポリゴンテーブルを作成する処理である。この探索処理はポリゴン数の２乗に比例して処理時間がかかるという問題があった。ステップＳ２０において、稜線構成テーブルを作成しておくことにより、高速に隣接ポリゴンテーブルを作成することができる。
【００９４】
図２７は、ステップＳ３０の隣接ポリゴンテーブルの作成の詳細を示すフローチャートである。ステップＳ３０の隣接ポリゴンテーブルの作成は、隣接ポリゴンテーブル作成手段５０により行われる。まず、隣接ポリゴンテーブル、稜線ＩＤ別ポリゴンテーブル、ポリゴンＩＤ、稜線順の初期化を行う（Ｓ３０１）。隣接ポリゴンテーブルは、各ポリゴンと隣接するポリゴンのポリゴンＩＤを対応付けて記録したテーブルである。稜線ＩＤ別ポリゴンテーブルは、稜線ＩＤと稜線を含むポリゴンと当該ポリゴンにおける当該稜線の稜線順を識別するポリゴン別稜線ＩＤを対応付けて記録したテーブルである。隣接ポリゴンテーブルの初期化は、各項目が記録されていない状態にすることを意味する。また、ポリゴンＩＤと稜線順の初期化として現在のポリゴンＩＤを“Ｐ１”に稜線順を“０”に設定する。稜線ＩＤ別ポリゴンテーブルの初期化は、ポリゴン別稜線ＩＤを全て“−１”に設定することにより行われる。
【００９５】
次に、稜線構成テーブルよりポリゴンＩＤと、そのポリゴンＩＤに対応する現在の稜線順の稜線ＩＤを抽出する（Ｓ３０２）。例えば、図２８に示した稜線構成テーブルからは、ポリゴンＩＤ“Ｐ１”と稜線ＩＤ“０”が抽出される。
【００９６】
次に、抽出された稜線ＩＤを用いて稜線ＩＤ別ポリゴンテーブルを参照する（Ｓ３０４）。そして、その稜線ＩＤに対応するポリゴン別稜線ＩＤが稜線ＩＤ別ポリゴンテーブルに登録されているか否かを確認する（Ｓ３０５）。稜線ＩＤに対応するポリゴン別稜線ＩＤが“−１”、すなわち初期状態である場合は、その稜線ＩＤに対応するポリゴン別稜線ＩＤが未登録、すなわち既登録でないことを意味する。
【００９７】
この場合、稜線ＩＤ別ポリゴンテーブルに現在のポリゴン別稜線ＩＤの記録を行う（Ｓ３０６）。具体的には、稜線ＩＤ別ポリゴンテーブルの稜線ＩＤに対応して、現在のポリゴンＩＤ（初期状態では“Ｐ１”）と稜線順（初期状態では“０”）により特定されるポリゴン別稜線ＩＤを書き込む。
【００９８】
一方、ステップＳ３０５において、稜線ＩＤに対応するポリゴン別稜線ＩＤが“−１”でない場合は、その稜線ＩＤに対応するポリゴン別稜線ＩＤが既登録であることを意味し、既登録のポリゴン別稜線ＩＤに対応する稜線と、現在のポリゴンＩＤと稜線順に対応する稜線とが、その稜線ＩＤで共有することを意味する。この場合、その稜線ＩＤに対応するポリゴン別稜線ＩＤを取得し、隣接ポリゴンテーブルにおける、そのポリゴン別稜線ＩＤにより特定されるポリゴンＩＤと稜線順の位置に、現在のポリゴンＩＤを記録する（Ｓ３０７）。ステップＳ３０７においては、さらに、隣接ポリゴンテーブルにおける、現在のポリゴンＩＤと現在の稜線順の位置に、ポリゴン別稜線ＩＤにより特定されるポリゴンＩＤを記録する。
【００９９】
ステップＳ３０６またはＳ３０７の処理を終えたら、全ポリゴンに対して処理を終えたか否かを判定する（Ｓ３０８）。具体的には、まず、稜線順をインクリメントし、稜線順が“２”を超えたら、ポリゴンＩＤをインクリメントして稜線順を“０”にする。ポリゴンＩＤがポリゴン総数を超えていなければ、ステップＳ３０２に戻って処理を繰り返す。ポリゴンＩＤがポリゴン総数を超えていれば、全ポリゴンに対して処理を終えたと判定して処理を終了する。
【０１００】
隣接ポリゴンテーブル作成手段５０は、ポリゴンテーブル登録手段と、隣接ポリゴンテーブル登録手段を備えており、図２７に示した隣接ポリゴンテーブルの作成処理は、これらの手段が連携することにより実現される。
【０１０１】
図２８は、ポリゴンＰ２のポリゴン別稜線ＩＤが記録された時点の各テーブルの状態を示す図である。図２８（ａ）は稜線構成テーブル、図２８（ｂ）は稜線ＩＤ別ポリゴンテーブル、図２８（ｃ）は隣接ポリゴンテーブルを示している。図２８（ａ）の稜線構成テーブルは、図２６（ａ）の稜線構成テーブルと同一である。稜線ＩＤ別ポリゴンテーブルには、稜線ＩＤに対応付けて、ポリゴン別稜線ＩＤが記録されている。ここでは、稜線ＩＤが０〜３０の値をとるため、稜線ＩＤ別ポリゴンテーブルには、全ての稜線ＩＤ０〜３０に対応付けてポリゴン別稜線ＩＤが記録される。稜線ＩＤ別ポリゴンテーブルにおいては、初期状態では、ポリゴン別稜線ＩＤとして全て“−１”が記録される。図２８（ｂ）の空欄においては、実際には、初期値であるポリゴン別稜線ＩＤとして全て“−１”が記録されている。隣接ポリゴンテーブルには、ポリゴンＩＤに対応付けられて隣接ポリゴンＩＤが記録される。
【０１０２】
図２８（ｃ）に示すように、隣接ポリゴンテーブルは、ポリゴンＩＤに対応付けて３つの隣接ポリゴンのポリゴンＩＤが記録されるようになっているが、稜線順は、左から０，１，２となっている。ステップＳ３０１における初期化の際、稜線順＝０に初期化される。隣接ポリゴンテーブルにおいては、必ず、対になるようにポリゴンＩＤの記録が行われる。すなわち、図２８（ｃ）に示すように、ポリゴンＰ１に対応付けて隣接ポリゴンとしてポリゴンＰ２が記録された場合、ポリゴンＰ２に対応付けて隣接ポリゴンとしてポリゴンＰ１も記録されることになる。
【０１０３】
図２９は、ポリゴンＰ４のポリゴン別稜線ＩＤが記録された時点の各テーブルの状態を示す図である。図３０は、ポリゴンＰ１８のポリゴン別稜線ＩＤが記録された時点の各テーブルの状態を示す図である。図２７に示したフローチャートに従って処理を実行していくことにより、図３０に示したような状態まで処理が行われることになる。これにより、図３０（ｃ）に示したような隣接ポリゴンテーブルが完成する。
【０１０４】
図３１は、ステップＳ１０で完成した頂点構成テーブル、ステップＳ２０で完成した稜線構成テーブル、ステップＳ３０で完成した隣接ポリゴンテーブルを示す図である。
【０１０５】
＜２．６．ポリゴンモデルの分離＞
ステップＳ４０のポリゴンモデルの分離について説明する。ポリゴンモデルの分離においては、ステップＳ３０で作成された隣接ポリゴンテーブルを用いる。隣接ポリゴンテーブルを用いることにより、高速にポリゴンモデルの分離を行うことができる。
【０１０６】
図３２は、ステップＳ４０のポリゴンモデルの分離の詳細を示すフローチャートである。ステップＳ４０のポリゴンモデルの分離は、ポリゴンモデル分離手段８０により行われる。まず、グループＩＤの仮設定を行う（Ｓ４０１）。具体的には、グループを識別するグループ識別情報であるグループＩＤを新規に定義し、グループＩＤが未設定のポリゴンを１つ抽出し、そのポリゴンのポリゴンＩＤに新規なグループＩＤを仮設定する。ここで、「グループＩＤが未設定」とは、本設定も仮設定も行われていない状態を意味する。
【０１０７】
次に、グループＩＤの本設定を行う（Ｓ４０２）。具体的には、まず、グループＩＤが仮設定されているポリゴンを全て抽出し、抽出された各ポリゴンのポリゴンＩＤに対して、仮設定されているグループＩＤを本設定する。そして、隣接ポリゴンテーブルを参照し、本設定がなされた各ポリゴンに隣接するグループＩＤが未設定のポリゴンを全て抽出し、本設定されたグループＩＤと同一のグループＩＤを、抽出された全てのポリゴンのポリゴンＩＤに仮設定する。
【０１０８】
次に、グループＩＤが仮設定されているポリゴンが存在するか否かを判定する（Ｓ４０３）。判定の結果、グループＩＤが仮設定されているポリゴンが存在する場合は、ステップＳ４０２に戻って、グループＩＤが仮設定されているポリゴンのポリゴンＩＤに対して、仮設定されているグループＩＤを本設定し、隣接ポリゴンテーブルを参照し、隣接するグループＩＤが未設定のポリゴンのポリゴンＩＤに同一のグループＩＤを仮設定する処理を繰り返す。
【０１０９】
ステップＳ４０３における判定の結果、グループＩＤが仮設定されているポリゴンが存在しない場合は、全ポリゴンについてグループＩＤの本設定を終了したか否かを判定する（Ｓ４０４）。判定の結果、全てのポリゴンにグループＩＤが本設定されていない、即ちグループＩＤが未設定のポリゴンが存在する場合は、ステップＳ４０１に戻って、グループＩＤを新規に定義し、グループＩＤが未設定のポリゴンＩＤを１つ抽出し、そのポリゴンＩＤに新規なグループＩＤを仮設定する。
【０１１０】
ステップＳ４０４における判定の結果、全てのポリゴンにグループＩＤが本設定されている場合は、ポリゴンＩＤとグループＩＤの関係を用いて、ポリゴンモデルを分離する（Ｓ４０５）。具体的には、図１１に示した頂点座標配列データのポリゴンＩＤと座標値を、同一グループＩＤごとに、異なるファイルに分離する。また、バイナリＳＴＬ形式のファイルを使用する場合、ポリゴンごとに色情報を指示できる識別フラグを設定できるため、ファイル分離せず同一ファイルのまま、ポリゴンごとの識別フラグにグループＩＤを設定する方法もとれる。分離された複数のＳＴＬ形式ファイルまたはポリゴンごとにグループＩＤが設定された単一のＳＴＬ形式ファイルを３Ｄプリンタに出力すると、グループＩＤごとに異なる材料（サポート材を含む）あるいは異なる色の材料（透明材を含む）を指定でき、多色または中身が透けて見える造形物を作成することができる。このように、ポリゴンモデルの分離とは、頂点座標配列データのポリゴンＩＤと座標値を、同一グループＩＤごとに、異なるファイルに分離するだけでなく、１つのファイル内で、明確に区別することも含む概念である。
【０１１１】
＜５．変形例等＞
以上、本発明の好適な実施形態について説明したが、本発明は上記実施形態に限定されず、種々の変形が可能である。例えば、上記実施形態では、処理対象のポリゴンを三角形としたが、四角形以上の多角形であってもよい。
【符号の説明】
【０１１２】
１・・・ＣＰＵ（Central Processing Unit）
２・・・ＲＡＭ（Random Access Memory）
３・・・記憶装置
４・・・キー入力Ｉ／Ｆ
５・・・データ入出力Ｉ／Ｆ
６・・・表示部
７・・・３Ｄプリンタ（立体物造形装置）
７ａ・・・データ処理部
７ｂ・・・出力部
１０・・・制御手段
３０・・・ポリゴンモデル構造化手段
４０・・・ポリゴン稜線構造化手段
５０・・・隣接ポリゴンテーブル作成手段
６０・・・グループＩＤ仮設定手段
７０・・・グループＩＤ本設定手段
８０・・・ポリゴンモデル分離手段
１２０・・・ポリゴンモデル記憶手段
１３０・・・分離ポリゴンモデル記憶手段
２００・・・立体物造形用データ分離装置
【図１】
0006565495.tif 000002
【図２】
0006565495.tif 000003
【図３】
0006565495.tif 000004
【図４】
0006565495.tif 000005
【図５】
0006565495.tif 000006
【図６】
0006565495.tif 000007
【図７】
0006565495.tif 000008
【図８】
0006565495.tif 000009
【図９】
0006565495.tif 000010
【図１０】
0006565495.tif 000011
【図１１】
0006565495.tif 000012
【図１２】
0006565495.tif 000013
【図１３】
0006565495.tif 000014
【図１４】
0006565495.tif 000015
【図１５】
0006565495.tif 000016
【図１６】
0006565495.tif 000017
【図１７】
0006565495.tif 000018
【図１８】
0006565495.tif 000019
【図１９】
0006565495.tif 000020
【図２０】
0006565495.tif 000021
【図２１】
0006565495.tif 000022
【図２２】
0006565495.tif 000023
【図２３】
0006565495.tif 000024
【図２４】
0006565495.tif 000025
【図２５】
0006565495.tif 000026
【図２６】
0006565495.tif 000027
【図２７】
0006565495.tif 000028
【図２８】
0006565495.tif 000029
【図２９】
0006565495.tif 000030
【図３０】
0006565495.tif 000031
【図３１】
0006565495.tif 000032
【図３２】
0006565495.tif 000033