説明

サーマルリライタブルメディア描画装置

【課題】複数のストロークが接近する場合であってもストロークが寸断されることなく、描画品質の低下を防止する。
【解決手段】描画文字を構成する複数のストロークから、連続するストロークをグループ化した1もしくは複数のストローク群を生成する手段と、各ストローク群に属するストローク間の重複を検出し、当該重複をストロークの配置順に従って除去する手段と、異なるストローク群に属するストローク間の重複を検出し、当該重複をストローク群を単位に除去する手段とを備える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、熱により発色する性質を持つサーマルリライタブルメディアにレーザ光で描画する技術に関する。
【背景技術】
【0002】
リライタブル表示技術は、その利便性や環境負荷低減の点から注目度の高い技術分野として各種方式が提案されている。それらの中で、熱を利用したサーマルリライタブルメディア(TRM:Thermal Rewritable Media)はいち早く実用化に至っている。
【0003】
従来、サーマルリライタブルメディアにはサーマルヘッドによる加熱記録が用いられてきたが、レーザ光により加熱して記録するレーザ記録についても検討されている(例えば、特許文献1を参照。)。レーザ記録では従来のサーマルヘッド記録と異なり非接触であるために、メディアから離れた位置からレーザ光を照射して記録が可能であり、ベルトコンベア上を移動するコンテナのような移動体への記録も容易となる。これにより、サーマルリライタブルメディアの用途が広がる可能性がある。なお、レーザによる画像形成は従来から知られている(例えば、特許文献2を参照)。
【0004】
ところで、サーマルリライタブルメディアは、ある温度の熱で発色が消去され、さらに高熱をかけると発色する性質を持っている。しかし、過大な熱負荷を加えるとサーマルリライタブルメディアが変質し、メディアの寿命が短くなったり、消去が完全に行えなくなったりするなどの劣化が現れやすくなる。
【0005】
描画時において過大な熱負荷が加えられるのは、所定の線幅を持ったレーザ光が重複して照射される場合であり、具体的にはストローク(レーザ光を照射しながら移動する軌跡を示す線分)の「交叉」「折り返し」「接近」がある。
【0006】
図1および図2はサーマルリライタブルメディアにレーザ光で描画された文字の例を示す図である。
【0007】
図1は、例えば数字の「7」を変形(斜めの線を付加)したものであるが、ストロークの交叉により重複部分P1が発生している。重複部分P1が発生すると、直前に描いたストロークの余熱があるうちに、再度レーザ光があたることになり、結果として重複部分P1がより高熱になってしまうため、サーマルリライタブルメディアに悪影響が出てしまう。
【0008】
また、図1では折り返しによる重複部分P2が存在する。レーザ光の照射方向を制御するミラーの慣性の影響により、折り返し部分では比較的長時間にわたってレーザ光が照射されるため、高熱になってしまい、サーマルリライタブルメディアに悪影響をもたらす。
【0009】
図2は、例えば文字の「にんべん」を描画したものであり、レーザ光の中心がなぞるストロークに重複はないが、レーザ光の線幅により重複部分P3が発生している。
【0010】
このような重複部分によるサーマルリライタブルメディアへの悪影響を防止するため、本発明者らはストロークの分割・消去・短縮等による重複の除去を試みている。例えば、2つのストロークに重複がある場合、除去量の小さい方のストロークを分割・消去・短縮等の対象とすることにより重複を除去する。除去量が同じ場合は描画順(先もしくは後)によって分割・消去・短縮等の対象となるストロークを決定する。
【発明の概要】
【発明が解決しようとする課題】
【0011】
線幅を含めたストロークの重複の除去を上述したようにして行う場合、複数のストロークが接近する場合にストロークが寸断され、描画品質の低下を招くという問題があった。
【0012】
図3(a)は筆記体の小文字のエックスを描画する場合の重複除去前の状態を示しており、一筆書きとして連続するストロークST1〜ST7とストロークST8〜ST14により描画するものとしている。
【0013】
この場合、上述した手法で重複除去を行うと、図3(b)に示すような状態になる。すなわち、ストロークST3、ST6、ST9、ST12は一端が短縮されてストロークST3'、ST6'、ST9'、ST12'となり、ストロークST4、ST11は消去され、ストロークST10、ST5は両端が短縮されてストロークST10'、ST5'となる。
【0014】
このようなストロークの寸断による描画品質の低下は、一筆書きとして連続するストロークが複数に分かれる場合だけではなく、図4に示すような一筆書きで描画される文字「α」における交叉部分や、文字「す」のループ部分等でも生じる。
【0015】
本発明は上記の問題点に鑑み提案されたものであり、その目的とするところは、複数のストロークが接近する場合であってもストロークが寸断されることなく、描画品質の低下を防止することのできるサーマルリライタブルメディア描画装置を提供することにある。
【課題を解決するための手段】
【0016】
上記の課題を解決するため、本発明にあっては、請求項1に記載されるように、描画文字を構成する複数のストロークから、連続するストロークをグループ化した1もしくは複数のストローク群を生成する手段と、各ストローク群に属するストローク間の重複を検出し、当該重複をストロークの配置順に従って除去する手段と、異なるストローク群に属するストローク間の重複を検出し、当該重複をストローク群を単位に除去する手段とを備えるサーマルリライタブルメディア描画装置を要旨としている。
【0017】
また、請求項2に記載されるように、サーマルリライタブルメディア描画装置の制御装置が、描画文字を構成する複数のストロークから、連続するストロークをグループ化した1もしくは複数のストローク群を生成する工程と、前記制御装置が、各ストローク群に属するストローク間の重複を検出し、当該重複をストロークの配置順に従って除去する工程と、前記制御装置が、異なるストローク群に属するストローク間の重複を検出し、当該重複をストローク群を単位に除去する工程とを備えるサーマルリライタブルメディア描画制御方法として構成することができる。
【0018】
また、請求項3に記載されるように、サーマルリライタブルメディア描画装置の制御装置を構成するコンピュータを、描画文字を構成する複数のストロークから、連続するストロークをグループ化した1もしくは複数のストローク群を生成する手段、各ストローク群に属するストローク間の重複を検出し、当該重複をストロークの配置順に従って除去する手段、異なるストローク群に属するストローク間の重複を検出し、当該重複をストローク群を単位に除去する手段として機能させるサーマルリライタブルメディア描画制御プログラムとして構成することができる。
【発明の効果】
【0019】
本発明のサーマルリライタブルメディア描画装置にあっては、複数のストロークが接近する場合であってもストロークが寸断されることなく、描画品質の低下を防止することができる。
【図面の簡単な説明】
【0020】
【図1】サーマルリライタブルメディアにレーザ光で描画された文字の例を示す図(その1)である。
【図2】サーマルリライタブルメディアにレーザ光で描画された文字の例を示す図(その2)である。
【図3】ストロークの寸断が生じる場合の例を示す図(その1)である。
【図4】ストロークの寸断が生じる場合の例を示す図(その2)である。
【図5】本発明の一実施形態にかかるサーマルリライタブルメディア描画装置の構成例を示す図である。
【図6】全体制御装置の構成例を示す図である。
【図7】ユーザの指定するパラメータのデータ構造例を示す図である。
【図8】描画文字管理データの構造例を示す図である。
【図9】フォントデータの構造例を示す図である。
【図10】ストロークフォントのデータ構造例を示す図である。
【図11】アウトラインフォントのデータ構造例を示す図である。
【図12】ストローク群管理データの構造例を示す図である。
【図13】交点列データの構造例を示す図である。
【図14】フラグ等データの構造例を示す図である。
【図15】実施形態の処理の概要を示すフローチャートである。
【図16】処理の例を示す図である。
【図17】実施形態の処理例を示すフローチャートである。
【図18】ストロークの重複除去の処理例を示すフローチャートである。
【図19】ストロークのグループ化の処理例を示すフローチャートである。
【図20】始点・終点が一致する2つのストロークと判断する角度の例を示す図である。
【図21】グループ化するための角度条件による描画結果の例を示す図である。
【図22】太くする分だけ並行ストロークを生成の処理例を示すフローチャートである。
【図23】平行ストロークの生成途中の状態の例を示す図である。
【図24】グループ内の重複除去の処理例を示すフローチャートである。
【図25】ストローク間の最小距離を導出の処理例を示すフローチャートである。
【図26】ストロークが平行な場合の例を示す図である。
【図27】ストロークが平行でなく交点がストローク内に存在しない場合の例を示す図である。
【図28】平行の場合のストローク分割等の処理例を示すフローチャートである。
【図29】平行なストロークの短縮および削除の例を示す図である。
【図30】非平行の場合のストローク分割等の処理例を示すフローチャートである。
【図31】2つのストロークが交わる場合の例を示す図である。
【図32】ストロークが平行でない場合の処理の例を示す図である。
【図33】消滅可能性のあるストロークにマークを付与の処理例を示すフローチャートである。
【図34】ストロークの交叉角度による交点間距離の補正の例を示す図である。
【図35】ストローク群同士の重複除去の処理例を示すフローチャート(その1)である。
【図36】ストローク群同士の重複除去の処理例を示すフローチャート(その2)である。
【図37】ストロークがわずかに他のストロークに接触する例を示す図である。
【図38】フラグ群からどちらのストローク群を短縮・分割するかを選択の処理例を示すフローチャートである。
【図39】太文字の場合の描画例を示す図である。
【図40】従来の問題点が改善された例を示す図である。
【発明を実施するための形態】
【0021】
以下、本発明の好適な実施形態につき説明する。
【0022】
<構成>
図5は本発明の一実施形態にかかるサーマルリライタブルメディア描画装置1の構成例を示す図である。
【0023】
図5において、サーマルリライタブルメディア描画装置1は、装置全体を制御する全体制御装置11と、レーザ光を照射するレーザ照射部12とを有する。また、レーザ照射部12は、レーザ光を発生するレーザ発振器13と、レーザ光のスポット径を調整(スポット径を大きくする)するスポット径調整レンズ14と、レーザ光の照射方向を変える方向制御ミラー15と、方向制御ミラー15を駆動する方向制御用モータ16と、方向制御ミラー15により方向の変えられたレーザ光をサーマルリライタブルメディア2上に収束させる焦点距離調整レンズ17とを有している。
【0024】
レーザ発振器13は、半導体レーザ(LD(Laser Diode))が一般に用いられるが、気体レーザ発振器、固体レーザ発振器、液体レーザ発振器等であってもよい。方向制御用モータ16は、方向制御ミラー15の反射面の向きを2軸に制御する例えばサーボモータである。方向制御用モータ16と方向制御ミラー15とによりガルバノミラーを構成する。
【0025】
サーマルリライタブルメディア2は、例えばロイコ染料と顕色剤が分離した状態で膜を形成し、そこに所定温度Taの熱を加え急冷することでロイコ染料と顕色在が結合して発色し、所定温度Taよりも低い所定温度Tbを加えるとロイコ染料と顕色剤が分離した状態に戻ることで消色するメディア、例えば書き換え可能な感熱タイプの紙である。本実施形態では、このような書き換え可能なサーマルリライタブルメディア2の劣化抑制を可能とするが、サーマルペーパのように書き換えが可能でないメディアに対しても適用することができる。
【0026】
図6は全体制御装置11の構成例を示す図である。ここでは、主にソフトウェアによって全体制御装置11を実装する場合のハードウェア構成を示しており、コンピュータを実体としている。コンピュータを実体とせず全体制御装置11を実現する場合、ASIC(Application Specific Integrated Circuit)等の特定機能向けに製造されたICを利用する。
【0027】
全体制御装置11は、CPU111、メモリ112、記憶装置113、入力装置114、ディスプレイ115、CD/DVDドライブ116およびネットワーク装置117を有している。ハードディスクドライブ等の記憶装置113には、ストロークフォントおよびアウトラインフォントの一連の文字のフォントデータを記憶するフォントデータDB1131と、フォントデータから重複を排除した描画命令を生成しレーザ照射部12(図5)を制御する文字描画プログラム1132が記憶されている。
【0028】
CPU111は、記憶装置113から文字描画プログラム1132を読み出して実行し、後述する手順で、サーマルリライタブルメディア2に文字を描画する。メモリ112は、DRAMなどの揮発性メモリで、CPU111が文字描画プログラム1132を実行する際の作業エリアとなる。入力装置114は、マウスやキーボードなどレーザ照射部12を制御する指示をユーザが入力するための装置である。ディスプレイ115は、例えば文字描画プログラム1132が指示する画面情報に基づき所定の解像度や色数で、GUI(Graphical User Interface)画面を表示するユーザインタフェースとなる。例えば、サーマルリライタブルメディア2に描画する文字の入力欄等が表示される。
【0029】
CD/DVDドライブ116は、CD/DVD31を脱着可能に構成され、CD/DVD31からデータを読み出し、また、データを書き込む。フォントデータDB1131および文字描画プログラム1132は、CD/DVD31に記憶された状態で配布され、CD/DVD31から読み出されて記憶装置113にインストールされる。CD/DVD31は、この他、ブルーレイディスク、SDカード、メモリースティック(登録商標)、マルチメディアカード、xDカード等、不揮発性のメモリで代用することができる。
【0030】
ネットワーク装置117は、LANやインターネットなどのネットワークに接続するためのインターフェイス(例えばイーサネット(登録商標)カード)であり、OSI基本参照モデルの物理層、データリンク層に規定されたプロトコルに従う処理を実行して、レーザ照射部12に文字コードに応じた描画命令を送信することを可能とする。フォントデータDB1131および文字描画プログラム1132は、ネットワークを介して接続した所定のサーバからダウンロードすることができる。なお、ネットワーク経由でなく、USB(Universal Serial Bus)、IEEE1394、ワイヤレスUSB、Bluetooth等で直接、全体制御装置11とレーザ照射部12を接続してもよい。
【0031】
サーマルリライタブルメディア2に描画される描画対象の文字は、例えばリスト状に記憶装置113に記憶されているか、入力装置114から入力される。文字は、UNICODEやJISコードなどの文字コードで特定され、全体制御装置11は文字コードに対応する文字のフォントデータをフォントデータDB1131から読み出し、それを描画命令に変換することでレーザ照射部12を制御する。
【0032】
図7〜図14はサーマルリライタブルメディア描画装置1の全体制御装置11における処理に際して用いられるデータ例を示したものである。
【0033】
図7はユーザの指定するパラメータのデータ構造例を示す図であり、「文字種」「文字列 (文字コード列)」「太文字(平行ストロークの本数、重なり幅)」「文字サイズ(幅、高さ)」「文字間隔」「行間隔」「行方向」「描画範囲」「描画可能範囲」「回転」等の項目を有している。
【0034】
図8は描画文字管理データの構造例を示す図であり、描画対象文字ごとに、「通番(描画順)」「文字コード」「描画位置(X座標、Y座標)」「描画倍率」等の項目を有している。
【0035】
図9はフォントデータの構造例を示す図であり、文字の線芯の軌跡で表現したストロークフォントデータと、文字の輪郭の軌跡で表現したアウトラインフォントデータとを含んでいる。ストロークフォントデータは、文字ごとに「文字コード」に「ストロークフォントデータ」が対応付けられている。アウトラインフォントデータは、「文字コード」に「アウトラインフォントデータ」が対応付けられている。
【0036】
図10(a)はストロークフォントのデータ構造例を示す図であり、文字コードを表わす「c」で始まる行に続き、移動を表わす「m」で始まる行と、直線描画を表わす「d」で始まる行と、この例では出現しないが、曲線描画を表わす「b」で始まる行とが列記されている。図10(a)のストロークフォントデータに対応する文字を図9(b)に示している。
【0037】
図11(a)はアウトラインフォントのデータ構造例を示す図であり、文字コードを表わす「c」で始まる行に続き、移動を表わす「m」で始まる行と、直線描画を表わす「d」で始まる行と、曲線描画を表わす「b」で始まる行とが列記されている。図11(a)のアウトラインフォントデータに対応する文字を図11(b)に示している。
【0038】
図12(a)はストローク群管理データの構造例を示す図であり、ストローク群の通し番号を表わす「GN」で始まる行と、属するストロークの総数を表わす「NM」で始まる行に続き、このストローク群に属するストロークのデータが列記されている。各ストロークのデータは、ストローク番号を表わす「SN」で始まる行と、始点のX座標を表わす「XS」で始まる行と、始点のY座標を表わす「YS」で始まる行と、終点のX座標を表わす「XE」で始まる行と、終点のY座標を表わす「YE」で始まる行とを含んでいる。図12(a)に対応するストローク群の例を図12(b)に示している。
【0039】
図13は各ストローク群に対応付けられた交点列データの構造例を示す図であり、各交点につき、「第1のストローク群番号」「第1のストローク群のストローク番号」「第2のストローク群番号」「第2のストローク群のストローク番号」「交点座標」「交叉角度」等の項目を有している。
【0040】
図14は各ストローク群に対応付けられたフラグ等データの構造例を示す図であり、「消滅可能性マーク」「フラグterm」「フラグvanish」「フラグflag」「フラグother」「合計削除面積」等の項目を有している。
【0041】
<動作>
図15は上記の実施形態の処理の概要を示すフローチャートである。また、図16(a)は通常文字描画の例を示しており、図16(b)は太文字描画の例を示している。
【0042】
図15において、処理を開始すると、各描画対象文字について、1もしくは複数のストロークから構成されるフォント線芯情報を取得する(ステップS11)。図16(a)の(i)はその状態を示している。太文字描画の場合も同様である。
【0043】
次いで、図15に戻り、ストロークが連続するストローク群を抽出する(ステップS12)。図16(a)の(ii)はその状態を示している。太文字描画の場合も同様である。
【0044】
次いで、図15に戻り、太文字描画の場合は、線幅を増やすための平行ストロークを生成する(ステップS13)。図16(b)の(iii)はその状態を示している。
【0045】
次いで、図15に戻り、ストローク群内の重複除去を行う(ステップS14)。図16(a)(b)の(iv)はその状態を示している。この例では、文字「す」の上から下に書き下ろす途中のループ部分の根元の重複部分が除去される。
【0046】
次いで、図15に戻り、ストローク群間の重複除去を行う(ステップS15)。図16(a)(b)の(v)はその状態を示している。この例では、文字「す」の上部の左から右に直線的に伸びるストロークと上から下に書き下ろすストロークとの交叉における重複部分が除去される。
【0047】
次いで、図15に戻り、重複の除去された描画データを出力し(ステップS16)、描画が行われて処理を終了する。
【0048】
図17は上記の実施形態の処理例を示すフローチャートである。
【0049】
図17において、処理を開始すると、ユーザが与えたパラメータに形式的な不備がないか否かチェックを行う(ステップS101)。
【0050】
次いで、ユーザが与えたパラメータから文字コード、文字間隔、行間隔等を取得し、1文字ずつ描画位置を導出し、描画文字管理データに設定する(ステップS102)。
【0051】
次いで、描画倍率を文字ごとに導出し、描画文字管理データに設定する(ステップS103)。フォントは例えば256×256画素のメッシュ上の座標値として定義されている。これをユーザが与えた文字サイズ(例えば、横3センチ、縦2.5センチ)に拡大するための倍率を導出する。ストロークは太さ(線幅)を持つので、ユーザが与えた文字サイズよりも、上下左右を線幅の半分だけ文字サイズを小さく考えて、描画倍率を導出する。太文字を描く場合は、ユーザにより指定された平行ストロークの本数に従い、ストロークを例えば3本〜9本、平行に描くため、線幅が3〜9倍になったとみなし、描画倍率をその分小さく設定する。
【0052】
次いで、先頭から1文字ずつ、文字がユーザ指定の描画範囲や、描画可能範囲(≒媒体の広さ)を超えていないか判断する(ステップS104)。回転が指定されている場合があるので、回転した場合にはみ出ないことを確認する。
【0053】
次いで、はみ出る文字は描画対象文字から抹消(描画文字管理データを削除)する(ステップS105)。
【0054】
次いで、全ての文字について処理したか否か判断し(ステップS106)、処理していない場合(ステップS106のNo)は、はみだしの判断(ステップS104)に戻る。
【0055】
全ての文字について処理した場合(ステップS106のYes)は、文字の描画順を、高速になるように並べ替える(ステップS107)。文字列は例えば横書きで描画され、左から右、上から下の順に描画するように初期定義されるが、ある文字行の右端から1段下の文字行の左端までの距離が遠いため、描画時間が多くかかる。そのため、1行おきに左から右、右から左と描画の向きを変える処理を行う。
【0056】
次いで、設定された描画順に従い、1文字ずつ、フォントデータからストローク情報を取得する(ステップS108)。すなわち、フォントデータから、先に定義された描画倍率に従ってストロークの座標を取得する。通常の文字を描画するならストロークフォントからストローク情報を取得し、袋文字を描画するならアウトラインフォントからストローク情報を取得する。
【0057】
次いで、ストロークの重複除去を行う(ステップS109)。ストロークが重複すると過熱するため、これを防ぐために、ストロークを過不足なく分割したり、短縮したり、削除したりする処理である。ストロークは線分情報であるが、実際には線幅を持つため、ストローク同士が交叉する場合だけでなく、ストローク同士が接近するだけでも重複除去を行う必要がある。処理内容の詳細は後述する。
【0058】
次いで、全ての文字について処理したか否か判断し(ステップS110)、処理していない場合(ステップS110のNo)は、ストローク情報の取得(ステップS108)に戻る。
【0059】
全ての文字について処理した場合(ステップS110のYes)は、白抜き文字への変換処理を行う(ステップS111)。白抜き文字を描画する場合に限り行われる処理である。
【0060】
次いで、ストロークをパラメータにしたがって回転する(ステップS112)。ストロークは線分の端点座標で定義されるので、これを単純に回転させればよい。
【0061】
次いで、内部で扱っているストロークのデータ形式を、描画コントローラ(下位コントローラ)で解釈可能な、描画データの形式に変換し(ステップS113)、処理を終了する。
【0062】
図18はストロークの重複除去(図17のステップS109)の処理例を示すフローチャートである。
【0063】
図18において、処理を開始すると、処理対象の文字1つに対し、これが塗りつぶし文字であるかどうかを判定する(ステップS201、S202)。塗りつぶし文字とは、「●」、「★」など、通常のストロークでは表現しづらい文字を、塗りつぶしを行う平行ストロークによって定義した文字である。きわめて細かいピッチの線分データがフォントデータに格納されているため、描画対象の線幅にあわせて間引く必要がある。判断は、ストロークがほぼすべて平行であるかどうかで行う。
【0064】
塗りつぶし文字の場合(ステップS202のYes)は、いったんビットマップ化し、そのビットマップを内部でスキャンすることで改めてストロークを定義する(ステップS203)。そして、処理を終了する。
【0065】
塗りつぶし文字でない場合(ステップS202のNo)は、ストロークの統合を行う(ステップS204)。フォントデータに格納されているストロークは、同一直線上にありながら、複数の線分が重複して定義されていることがある。これを1本の直線にまとめて処理の効率化を図る。
【0066】
次いで、ストロークすべてについて、端点が同一であるストローク同士は隣り合って格納されるよう、格納順を並べ替える(ステップS205)。
【0067】
次いで、反転文字描画であるか否か判断する(ステップS206)。
【0068】
反転文字描画の場合(ステップS206のYes)は、処理をここで終了する。まだ重複が残っているが、格納された文字データ自体は描画対象ではないので、以降の重複除去処理は不要になる。
【0069】
反転文字描画でない場合(ステップS206のNo)は、ストロークのグループ(群)化を行う(ステップS207)。端点が同一となる複数のストロークは連続しているとみなしてグループ化する処理である。描画の際、連続するストロークはレーザをOFFにせず続けて描画する。このグループは、連続した一群のストロークの単位である。処理内容の詳細は後述する。
【0070】
次いで、ストローク群の一つ一つについて、グループ内で重複があるかどうかを判断し、あればストロークの分割、短縮、削除を行う(ステップS208)。処理内容の詳細は後述する。
【0071】
次いで、消滅可能性のあるストローク群にマークを付ける(ステップS209)。分割・短縮・削除を行った場合に、ストローク全体が消えてしまったり、2つのストロークにはさまれた部分が消えてしまったりすると、情報量が欠落して視認性が大きく低下すると考えられるので、こうしたストロークは分割や短縮が行われにくいよう、判別してマークをつけておく処理である。処理内容の詳細は後述する。
【0072】
次いで、ストローク群を2つ選び、それらが重複している場合は重複除去を行う(ステップS210)。処理内容の詳細は後述する。
【0073】
次いで、ストローク群の端点を延長する(ステップS211)。端点部は熱が逃げやすいため、実際に描画すると狙いより線が短くなってしまう。そこで、ストローク群の端点部を少し延長して長めに描画することで、結果として狙い通りの長さの線を描くことができる。
【0074】
次いで、文字内ストローク順を並べ替える(ステップS212)。効率の良い順番で描くことで、無駄なジャンプ(空走)を減らして、実際にレーザマーカで描く際の描画時間を短縮することができる。
【0075】
次いで、交点ジャンプ設定を行う(ステップS213)。交点ジャンプとは、マーク速度と同じ速度でジャンプを行うことを指す。通常、ジャンプはマーク(描画)よりも高速で行われるため、その前後にはミラーを安定させるためにある程度の待ち時間(ディレイ)を置かなければならない。マークとマークにはさまれたジャンプの速度をマークと同じにすることで、待ち時間の挿入が不要になるため、描画にかかる時間を節約できる。その後、処理を終了する。
【0076】
図19はストロークのグループ化(図18のステップS207)の処理例を示すフローチャートである。
【0077】
図19において、処理を開始すると、処理対象が太文字かどうかを判断する(ステップS301)。これはユーザにより与えられたパラメータから判断する。
【0078】
太文字の場合(ステップS301のYes)は、以下の太文字についての処理(ステップS302〜S307)を行う。太文字でない場合(ステップS301のNo)は、太文字についての処理(ステップS302〜S307)を行わない。
【0079】
太文字についての処理では、まず、2つのストロークを選び(ステップS302)、始点・終点が一致するかどうかを判断する(ステップS303)。
【0080】
一致する場合(ステップS303のYes)、更に、一致点を中心とする角度が85度を越えるか否か判断する(ステップS304)。図20は始点・終点が一致する2つのストロークと判断する角度の例を示している。角度「85度」の意味については後述する。
【0081】
図19に戻り、一致点を中心とする角度が85度を超える場合(ステップS304のNo)、両者を同一グループとしてまとめる(ステップS305)。
【0082】
始点・終点が一致しない場合(ステップS303のNo)もしくは始点・終点が一致する2つのストロークの角度が85度を越えない場合(ステップS304のYes)は、グループ化(ステップS305)を行わない。
【0083】
次いで、すべての組み合わせを吟味したか否か判断し(ステップS306)、吟味していない場合(ステップS306のNo)は2つのストロークの選択(ステップS302)に戻る。
【0084】
すべての組み合わせについて吟味した場合(ステップS306のYes)は、太くする分だけ、平行ストロークを発生させる(ステップS307)。例えば3本線で太線を表現する場合には、ストロークの脇に1本ずつ、計2本の平行なストロークを発生させる。処理内容の詳細は後述する。
【0085】
次いで、太文字の場合も、そうでない場合も、2つのストロークを選び(ステップS308)、始点・終点が一致するかどうかを判断する(ステップS309)。
【0086】
一致する場合(ステップS309のYes)、更に、一致点を中心とする角度が135度を越えるか否か判断する(ステップS310)。角度「135度」の意味については後述する。
【0087】
一致点を中心とする角度が135度を超える場合(ステップS310のNo)、両者を同一グループとしてまとめる(ステップS311)。
【0088】
始点・終点が一致しない場合(ステップS309のNo)もしくは始点・終点が一致する2つのストロークの角度が135度を越えない場合(ステップS310のYes)は、グループ化(ステップS311)を行わない。
【0089】
次いで、すべての組み合わせを吟味したか否か判断し(ステップS312)、吟味していない場合(ステップS312のNo)は2つのストロークの選択(ステップS308)に戻る。
【0090】
すべての組み合わせについて吟味した場合(ステップS312のYes)は、処理を終了する。
【0091】
以上の処理で角度が重要になるのは、急角度での折れ曲がりを別のストローク群にするためである(例えば、文字「ヌ」の右上部分)。ミラーの慣性により、折れ曲がり部は向きを変えるのに時間がかかり、長い時間レーザが照射され、過熱してしまう。よって、この部分は別のストローク群にしていったんレーザをOFFにする必要がある。
【0092】
太文字の場合は、新たに生成した平行ストロークをグループ化する必要があることと、グループ化するための角度条件が異なるので、2度のグループ化が必要である。
【0093】
角度条件を仮に設けないとすると、急角度の折れ曲がり部分は図21(a)のような結果になってしまう。もし、角度条件を後段の処理の135度と同じにすると、図21(b)のような結果となり、文字「5」の左上の見栄えが良くない。そこで、適正な角度(85度)で処理を行うことで、図21(c)のような結果が得られる。
【0094】
図22は太くする分だけ並行ストロークを生成(図19のステップS307)の処理例を示すフローチャートである。
【0095】
図22において、処理を開始すると、ストローク群を新たに生成するため、格納に必要なストローク群配列(ストローク群管理データ)を新たに確保する(ステップS401)。
【0096】
次いで、元ストローク群番号の修正を行う(ステップS402)。ストローク群には番号を付けて識別に利用しているが、現時点では「0」から始まる1刻みの値が入っている。これを、ユーザによって指定された平行ストロークの本数にあわせて変更する。例えば、太線を3本のストロークを並べて表現する場合は、現在あるストローク群番号を「0,1,2,3,・・,n」から「1,4,7,10,・・,3n+1」に変更する。5本の場合は、「2,7,12,17,・・,5n+2」と変更する。つまり、平行ストロークがi本ある場合は、同一ストローク群から派生した平行ストローク群が連続して格納されるようにし、その連続の中心に現在あるストロークが位置するようにする。これは、後段で、どれが中心ストロークかを判断できるようにするための処理である。
【0097】
次いで、1つのストローク群を取得し(ステップS403)、そのストローク群の1つのストロークを取得し(ステップS404)、このストロークの単位法線ベクトルを求める(ステップS405)。単位法線ベクトルはストロークの始点・終点を通る直線の式から求められる。
【0098】
次いで、単位法線ベクトルの方向に線幅分だけシフトした位置に、注目しているストロークと同じ長さの新たなストロークを生成する(ステップS406)。正確には、ユーザが指定する重なり幅(Fill Overlap)分だけ、シフト位置は小さくする。
【0099】
次いで、注目しているストローク群に含まれる全てのストロークを吟味したか否か判断し(ステップS407)、吟味していない場合(ステップS407のNo)はストロークの取得(ステップS404)に戻る。
【0100】
全てのストロークを吟味した場合(ステップS407のYes)は、ユーザにより指定された平行ストロークの本数に基づいて他に発生させる平行ストロークはないか判断し(ステップS408)、ある場合(ステップS408のNo)はストロークの取得(ステップS404)に戻る。
【0101】
他に発生させる平行ストロークはない場合(ステップS408のYes)は、次の処理に移行する。
【0102】
この時点では、図23(a)に示すように、平行ストロークは互いに正しくつながっておらず、折れ曲がりの内側では重複、外側ではストロークの断絶が発生している。そこで、その修正の処理を続行する。
【0103】
図22に戻り、同一のストローク群に属する平行ストローク(例えば、図23(a)の一番上のストローク)で隣接しているものを選び(ステップS409)、その交点を求める(ステップS410)。
【0104】
次いで、求めた交点までストロークを短縮あるいは延長する(ステップS411)。
【0105】
次いで、全ての組み合わせを吟味したか否か判断し(ステップS412)、してない場合(ステップS412のNo)は隣接ストロークの選択(ステップS409)に戻る。
【0106】
全ての組み合わせを吟味した場合(ステップS412のYes)は、全てのストローク群を吟味したか否か判断し(ステップS413)、していない場合(ステップS413のNo)はストローク群の取得(ステップS403)に戻る。
【0107】
全てのストローク群を吟味した場合(ステップS413のYes)は、処理を終了する。
【0108】
図24はグループ内の重複除去(図18のステップS208)の処理例を示すフローチャートである。
【0109】
図24において、処理を開始すると、1つのストローク群を取得する(ステップS501)。
【0110】
次いで、そのストローク群の内部の2本のストロークを取得する(ステップS502)。
【0111】
次いで、その2本のストローク間の最小距離を求める(ステップS503)。処理内容の詳細は後述する。
【0112】
次いで、求めた最小距離が線幅以下であるか否か判断する(ステップS504)。
【0113】
最小距離が線幅以上である場合(ステップS504のNo)は、2本のストロークは重複しないので、次のストロークの組の判断に移行する。
【0114】
最小距離が線幅以下である場合(ステップS504のYes)は、2本のストロークは重複するとわかり、更に、それらが平行であるかどうかを判断する(ステップS505)。
【0115】
平行である場合(ステップS505のYes)は、格納順が後のストロークに対して平行の場合のストローク分割等を行う(ステップS506)。処理内容の詳細は後述する。
【0116】
平行でない場合(ステップS505のNo)は、格納順が後のストロークに対して非平行の場合のストローク分割等を行う(ステップS507)。処理内容の詳細は後述する。
【0117】
ここで、平行の場合および平行でない場合の両者とも、格納順が後のストロークを分割等の対象とすることで、一つのストローク群内で重複する場合における複数のストロークの近接部分での寸断を防止することができる。
【0118】
最小距離が線幅以上である場合(ステップS504のNo)と、ストローク分割等(ステップS506、S507)の後、注目しているストローク群内の全てのストロークの組を吟味したか否か判断し(ステップS508)、吟味していない場合(ステップS508のNo)はストロークの組の取得(ステップS502)に戻る。
【0119】
注目しているストローク群内の全てのストロークの組を吟味した場合(ステップS508のYes)は、全てのストローク群を吟味したか否か判断し(ステップS509)、吟味していない場合(ステップS509のNo)はストローク群の取得(ステップS501)に戻り、吟味している場合(ステップS509のYes)は分割処理が行われたか否か判断する(ステップS510)。
【0120】
分割処理が行われた場合(ステップS510のYes)は分割されたストロークを境に別グループに分割し(ステップS511)、処理を終了する。分割処理が行われなかった場合(ステップS510のNo)はそのまま処理を終了する。
【0121】
図25はストローク間の最小距離を導出(図24のステップS503)の処理例を示すフローチャートである。
【0122】
図25において、処理を開始すると、距離を求める2本のストロークの端点が明らかに線幅以上であるか、すなわち、そのX座標同士、Y座標同士の差が線幅以上であるか否か判断する(ステップS601)。
【0123】
明らかに線幅以上である場合(ステップS601のYes)は、2本のストロークは重複しないので、正確な距離を求めることなく、非常に大きな距離を設定し(ステップS602)、処理を終了する。本処理の目的は、重複するかどうかの判定なので、線幅より遠い場合に計算は不要である。
【0124】
明らかに線幅以上でない場合(ステップS601のNo)は、両ストロークが平行かどうかを判断する(ステップS603)。平行であるかどうかは、各ストロークの始点・終点を通る直線の式の傾きを比較することで行うことができる。
【0125】
平行であれば(ステップS603のYes)、後段の処理を簡単にするために、両ストロークをX軸方向に平行になるように回転する(ステップS604)。
【0126】
次いで、回転したストローク同士が、X方向に重なりがあるかどうかを見る(ステップS605)。
【0127】
X方向に重なりがある場合(ステップS605のYes)、直線同士の距離(Y方向の差異)がストローク間距離の最小値なので、その値を距離として返し(ステップS606)、処理を終了する。図26(a)に示すような場合が該当する。
【0128】
図25に戻り、X方向に重なりがある場合(ステップS605のNo)、端点同士の距離の最小値が、ストローク間距離の最小値なので、それを計算して返し(ステップS607)、処理を終了する。図26(b)に示すような場合が該当する。
【0129】
図25に戻り、ストローク同士が平行でない場合(ステップS603のNo)は、両ストロークの交点を求め、交点がストローク内にあるか否か判断する(ステップS608)。
【0130】
交点がストローク内に存在する場合(ステップS608のYes)は、距離を「0」として返し(ステップS609)、処理を終了する。
【0131】
交点がストローク内に存在せず、その延長線上に存在する場合(ステップS608のNo)は、まず、端点間の距離の最小値αを求める(ステップS610)。
【0132】
次いで、ある端点から、他方のストロークを通る直線上に垂線を下ろすことを考え、その足の座標を求める(ステップS611)。
【0133】
次いで、垂線の足がストローク内にあるか否か判断する(ステップS612)。
【0134】
足がストローク内にある場合(ステップS612のYes)は、足までの距離βを求める(ステップS613)。図27はα、βの例を示している。
【0135】
図25に戻り、足がストローク内にない場合(ステップS612のNo)はなにもしない。
【0136】
次いで、全ての端点について吟味したか判断し(ステップS614)、まだである場合(ステップS614のNo)は垂線の足の導出(ステップS611)に戻る。
【0137】
全ての端点について吟味した場合(ステップS614のYes)は、α、βの最小値をストローク間距離の最小値として返し(ステップS615)、処理を終了する。
【0138】
図28は平行の場合のストローク分割等(図24のステップS506)の処理例を示すフローチャートである。
【0139】
図28において、処理を開始すると、2本のストロークをX軸と平行になるように回転する(ステップS701)。具体的には次のように処理を行う。
【0140】
先ず、X軸に対するそれぞれのストロークの回転角度を求める。回転角度に対するsin、cosをそれぞれsint、costとおき、ストロークの直線の式を
ax + by + c = 0
とすると、
sint = -a / sqrt(a * a + b * b)
cost = b / sqrt(a * a + b * b)
となる。
【0141】
それぞれのストロークを逆方向に回してX軸と平行にするが、ストロークの端点の座標値を(xs, ys)とし、回転後のストローク端点の座標値を(xs0, ys0)とおけば、
xs0 = cost * xs + sint * ys
ys0 = -sint *xs + cost *ys
となる。
【0142】
次いで、端点間距離が線幅となるように、一方を短縮可能か判断する(ステップS702)。具体的には次のように処理を行う。
【0143】
先ず、ストローク間の最短距離を求める。回転した2つのストロークの端点のX座標に重なりがあれば、最短距離は平行な線分間の距離である。また、重なりがなければ、各ストロークの端点間距離(端点はそれぞれ2つずつあるから計4とおりの距離がある)のうち、一番短いものがストローク間の最短距離となる。
【0144】
そして、最短距離が線幅tより小さい場合は、回転した2つのストロークの端点のX座標の重なり状態を吟味し、重ならない部分があれば一方を短縮可能と判断する。また、重ならない部分がなければ短い方のストロークを削除すると判断する。
【0145】
一方を短縮可能な場合(ステップS702のYes)は、短縮処理を行う(ステップS703)。つまり、図29(a)に示すように、X方向にずれており、短縮してもストロークが消滅しないだけの長さが残る場合には、短縮処理を行う。分割対象のストローク上にあり、他方のストロークの端点からの距離がtである点を求めて、ここを分割対象のストロークの新たな端点とする。
【0146】
図28に戻り、短縮不可能な場合(ステップS702のNo)は、短いほうのストロークを削除する(ステップS704)。つまり、図29(b)に示すような場合には、短い方のストロークは長い方のストロークとの重複なしでは存在できないので、短いほうのストロークを削除する。
【0147】
図28に戻り、次いで、削除したストロークの長さを算出して格納しておく(ステップS705)。
【0148】
次いで、処理した結果のストロークを、前述したsint、costを利用して、最初の処理とは逆方向に回転してもとの向きに戻し(ステップS706)、処理を終了する。
【0149】
図30は非平行の場合のストローク分割等(図24のステップS507)の処理例を示すフローチャートである。ストロークの分割等を行う場合のストロークの端点の位置算出にあたっては、図31に示すようにストローク同士の角度の考慮が必要である.図31(a)のような直交する場合は線幅分をカットすればよいので簡単であるが、図31(b)のように斜めに交叉している場合は角度を含めた考慮が必要である。
【0150】
なお、図31、図32に示すように、2本のストロークをストローク#0、#1と呼ぶこととし、ストローク#1によりストローク#0が分割・短縮されると仮定して処理を行う。
【0151】
図30において、処理を開始すると、ストローク#0上のストローク#1からの距離が線幅tとなる点A0、B0の座標を取得する(ステップS801)。具体的には次のように処理を行う。
【0152】
ストローク#0(分割対象)の直線の式を
a0x + b0y + c0 = 0
とし、ストローク#1(参照)の直線の式を
a1x + b1y + c1 = 0
とし、線幅をtとおく。また、ストローク#0上の点で、ストローク#1からの距離がtである点をP(xp, yp)とおく。
【0153】
Pはストローク#0上の点であるから
a0xp + b0yp + c0 = 0・・・・(1)
となる。
【0154】
A0からストローク#1へおろした垂線の足までの長さがtであるから、点と直線の距離の公式により、
(a1xp + b1yp + c1)2 = t2(a12 + b12)・・・・(2)
となる。
【0155】
式(1)(2)を連立方程式として解くと、ストローク#0、#1は平行でないから、
a1b0 - a0b1 ≠ 0
となるので、
【0156】
【数1】

となる。2組の解のうちの一方がA0、他方がB0である。
【0157】
次いで、点A0,B0からストローク#1におろした垂線の足A1、B1を求める(ステップS802)。図32(a)はこの状態における例を示している。ストロークを直線で示し、描画される線幅の限界位置を破線で表現している。
【0158】
具体的には次のように処理を行う。
【0159】
垂線の足をQ(xq, yq)とおく。
【0160】
垂線の式を
a2x + b2y + c2 = 0
とおくと、これはストローク#1と直交するから、
-b1x +a1y + c2 = 0・・・・(4)
と置き直せる。
式(4)は点A0、B0を通るから、
-b1xp +a1yp + c2 = 0
となるので、c2が求まり、式(4)は、
-b1x + a1y + b1xp -a1yp = 0・・・・(5)
となる。
垂線の式とストローク#1の交点が垂線の足だから、式(5)とストローク#1の連立方程式
【0161】
【数2】

を(x, y)について解けば、それが垂線の足の座標(xq, yq)である。よって、
【0162】
【数3】

により求められる。
【0163】
図30に戻り、次いで、A1がストローク#1の範囲内にあるか否か判断する(ステップS803)。ストローク#1の端点座標を(x1s, y1s)、(x1e, y1e)とおけば、この座標値の範囲内に(xq, yq)があれば、範囲内にあることになる。
【0164】
A1がストローク#1の範囲内にあるなら(ステップS803のYes)、A0がストローク#0の新たな端点となる(ステップS804)。
【0165】
A1がストローク#1の範囲内になければ(ステップS803のNo)、A0は新たな端点としては短縮しすぎである。そこで、ストローク#1の端点から距離t(線幅)にある、ストローク#0上の点A3を求める(ステップS805)。具体的には次のように処理を行う。
【0166】
ストローク#1の端点の座標をH(xh, yh)とおく。点A3の座標を(xr, yr)とおく。
【0167】
A3は分割対象ストロークであるストローク#0上にあるから、
a0xr + b0yr + c0 = 0・・・・(7)
となる。
【0168】
点A3とHの距離がtであるから、
(xr - xh2 +(yr -yh2 = t2・・・・(8)
となる。
【0169】
式(7)(8)を連立方程式として解くと(xr, yr)を求めることができる。
【0170】
また、
ca = a02 + b02
cb = -b02xh + a0b0yh + a0c0
cc = b02(xh2 - t2)+(b0yh + c0)2
とおき、さらに、
【0171】
【数4】

とおく。
【0172】
b0 ≠ 0のとき
【0173】
【数5】

となり、求めたxrを使って、
【0174】
【数6】

を得られる。
【0175】
b0 = 0のときa0 ≠ 0ゆえ,
【0176】
【数7】

を得られる。
【0177】
そして、A3を分割されたストロークの新しい端点とする(ステップS806)。図32(b)はこの状態における例を示している。
【0178】
図30に戻り、B側についても同様に処理を行って新しい端点を求め(ステップS807)、削除したストローク長を求め(ステップS808)、処理を終了する。
【0179】
図33は消滅可能性のあるストロークにマークを付与(図18のステップS209)の処理例を示すフローチャートである。
【0180】
図33において、処理を開始すると、ストローク群#0、#1として1つずつ選び(ステップS901、S902)、ストローク群#0、#1から1つずつストロークを選び(ステップS903)、両者のストロークに交点があるかどうか判断する(ステップS904)。
【0181】
交点があるなら(ステップS904のYes)、交点座標と交叉角度を、ストローク群#0に関連付けて交点配列(交点列データ)に格納する(ステップS905、S906)。交点がない場合(ステップS904のNo)はなにも行わない。
【0182】
次いで、全てのストロークの組み合わせについて吟味したか否か判断し(ステップS907)、吟味していない場合(ステップS907のNo)はストロークの組の選択(ステップS903)に戻る。
【0183】
全てのストロークの組み合わせについて吟味した場合(ステップS907のYes)は、ストローク群#1として全てのストローク群を吟味したか否か判断し(ステップS908)、吟味していない場合(ステップS908のNo)は、ストローク群#1の選択(ステップS902)に戻る。
【0184】
ストローク群#1として全てのストローク群を吟味した場合(ステップS908のYes)は、取得したストローク群#0の交点座標群を、ストローク群#1の始点に近い順にソートする(ステップS909)。
【0185】
次いで、隣接する交点間の距離を求める(ステップS910)。
【0186】
次いで、一つの交点間に注目し、その交点間の側にストローク#1が存在するか否か判断する(ステップS911)。図34(a)は、交点A、Bの真ん中にストローク#1との交点Cが存在し、今、交点A、C間に注目しているとすると、ストローク#1は左下に傾いているため、交点C、B間ではなく、交点A、C側に存在すると判断される。
【0187】
図33に戻り、注目する交点間の側にストローク#1が存在する場合(ステップS911のYes)は、交点間距離に対し、交叉角度による補正を行う(ステップS912)。図34(a)のような場合、交点Cとその脇にある別のストロークとの交点A、Bの距離はそれぞれ等しい。しかし、線には幅があるために、図34(b)のように交点A側の実質的な距離d1は反対側の交点B側の距離d2よりも実質的には小さいとみなされる。仮に距離d1が0になるとその間のストロークは消滅する可能性があるといえるので、角度による補正は重要である。もし、求める交点間距離が交点Aの側であれば、角度による補正を行う。元の距離から距離d3だけ差し引けばよいから、交叉角度をθ、線幅をtとすると、
d3 = t/2sinθ
となる。
【0188】
図33に戻り、注目する交点間の側にストローク#1が存在しない場合(ステップS911のNo)は、線幅の半分、すなわち、t/2だけ交点間距離から差し引く(ステップS913)。図34(b)における交点C、B間についてはこの処理が行われる。
【0189】
図33に戻り、次いで、補正後の距離が線幅以下であるか否か判断する(ステップS914)。
【0190】
もし距離が線幅以下となったら(ステップS914のYes)、これら交点の両方でストローク#0が分割された場合、この間にストロークは描画できない。従って、消滅可能性ありと判断してストローク群#0にマークをつける(ステップS915)。線幅以下でない場合(ステップS914のNo)はマークを行わない。
【0191】
次いで、ストローク群#0として全ての群を吟味したか否か判断し(ステップS916)、吟味していない場合(ステップS916のNo)は最初の処理(ステップS901)に戻り、吟味した場合(ステップS916のYes)は処理を終了する。
【0192】
図35および図36はストローク群同士の重複除去(図18のステップS210)の処理例を示すフローチャートである。
【0193】
図35において、処理を開始すると、ストローク群#0、#1として別々のストローク群を選ぶ(ステップS1001、S1002)。
【0194】
次いで、ストローク群#0、#1から1つずつストロークを選ぶ(ステップS1003)。
【0195】
次いで、2つのストロークに重複部があるかどうか判定する(ステップS1004)。
【0196】
重複があれば(ステップS1004のYes)、一方のストロークを短縮・分割すると仮定して、削除長、残存ストロークをそれぞれ計算する(ステップS1005)。この処理は、図24に示したものと同様になる。
【0197】
図35に戻り、重複がなければ(ステップS1004のNo)、上記の処理(ステップS1005)は行わない。
【0198】
次いで、ストローク群#0,1に属する全てのストロークについて吟味したか否か判断し(ステップS1006)、吟味していない場合(ステップS1006のNo)は、ストロークの組の選択(ステップS1003)に戻る。
【0199】
全てのストロークについて吟味した場合(ステップS1006のYes)は、一方のストローク群を短縮・分割する場合の合計削除面積をそれぞれ算出する(ステップS1007)。削除長に線幅をかけることによって合計削除面積が取得できる。
【0200】
次いで、一方のストローク群を短縮・分割する場合に、注目するストローク群が完全に消える場合にはフラグtermに「2」を、先頭部が短縮される場合にはフラグtermに「1」を、その他はフラグtermに「0」を立てる(ステップS1008)。
【0201】
次いで、ストローク群同士(ストローク群#0、#1)が重複しないか否か判断する(ステップS1009)。
【0202】
重複しない場合(ステップS1009のYes)は以下の重複する場合の処理(ステップS1010〜S1015)をスキップする。
【0203】
重複がある場合(ステップS1009のNo)は、一方のストローク群を短縮・分割する場合の交点と消滅可能性のあるストロークにマークを付ける処理(図33)で得られた交点列を照合する(ステップS1010)。
【0204】
次いで、ストロークが消滅する可能性がある交点で一致したらフラグvanishを立てる(ステップS1011)。
【0205】
次いで、消滅可能性のあるストロークで既に分割が行われていたらフラグflagを立てる(ステップS1012)。
【0206】
次いで、ストローク群が別のストローク群と重複し、その別のストローク群に消滅可能性があればフラグotherを立てる(ステップS1013)。別のストローク群に消滅可能性があるか否かは、図33の処理により付されたマークの有無により判断する。
【0207】
次いで、図35に戻り、フラグ群からどちらのストローク群を短縮・分割するかを選択する(ステップS1014)。処理内容の詳細は後述する。
【0208】
次いで、選択されたストローク群のストロークを先に計算しておいたデータに基づき短縮・分割する(ステップS1015)。
【0209】
次いで、ストローク群#1と異なるストローク群は全て吟味したか否か判断し(ステップS1016)、吟味していない場合(ステップS1016のNo)はストローク群#1の選択(ステップS1002)に戻る。
【0210】
全て吟味した場合(ステップS1016のYes)は、ストローク群#0としてストローク群は全て吟味したか否か判断し(ステップS1017)、吟味していない場合(ステップS1017のNo)は最初の処理(ステップS1001)に戻る。
【0211】
全て吟味した場合(ステップS1017のYes)は、再度の重複の判断および短縮の処理を行う。すなわち、わずかに他のストロークに接触していた場合に分割が発生した場合、それらの端点間の距離が線幅以下になる場合がある。こうした場合、ここに重複が残ることになるので、再度吟味し、短縮する。例えば、図37(a)に示すように、もともと上下にあるストローク群同士の重複を除去するに際し、下のストローク群を分割して図37(b)のようになった場合に、こんどは連続しなくなったストロークによって重複が発生している。このような場合は、下部のストロークをさらに短縮する必要がある。
【0212】
図36において、短縮・分割の対象として選択されたストローク群から、ストローク#0として1つのストロークを選び(ステップS1018)、ストローク#1としてストローク#0と異なるストロークを選ぶ(ステップS1019)。
【0213】
次いで、2つのストロークが連続するか否か判断し(ステップS1020)、連続しない場合(ステップS1020のNo)は、更に、端点間距離が線幅未満であるか否か判断する(ステップS1021)。
【0214】
線幅未満である場合(ステップS1021のYes)は、ストローク#1を短縮する(ステップS1022)。
【0215】
ストロークが連続しない場合(ステップS1020のYes)と端点間距離が線幅未満でない場合(ステップS1021のNo)は、ストローク#1の短縮(ステップS1022)は行わない。
【0216】
次いで、全てのストローク#1について吟味したか否か判断し(ステップS1023)、吟味していない場合(ステップS1023のNo)はストローク#1の選択(ステップS1019)に戻る。
【0217】
全てのストローク#1について吟味した場合(ステップS1023のYes)は、全てのストローク#0について吟味したか否か判断し(ステップS1024)、吟味していない場合(ステップS1024のNo)はストローク#0の選択(ステップS1018)に戻る。
【0218】
全てのストローク#0について吟味した場合(ステップS1024のYes)は処理を終了する。
【0219】
図38はフラグ群からどちらのストローク群を短縮・分割するかを選択(図35のステップS1014)の処理例を示すフローチャートである。
【0220】
図38において、処理を開始すると、フラグtermから判断して、ストローク群#1が残存し、ストローク群#0のみ完全に消去され、1本のストロークも残らない場合(ステップS1101のYes)は、ストローク群#1側を分割・短縮する(ステップS1117)。
【0221】
逆に、ストローク#0が残存し、ストローク群#1のみが完全に消去される場合(ステップS1102のYes)は、ストローク群#0を分割・短縮する(ステップS1116)。
【0222】
ストローク群#0のみが、群の端だけの短縮となる場合(ステップS1103のYes)は、ストローク群#0を短縮する(ステップS1116)。これは、分割よりも短縮の方が見栄えに影響が少ないためである。
【0223】
逆の場合(ステップS1104)は、ストローク群#1を短縮する(ステップS1117)。
【0224】
太文字の場合(ステップS1105のYes)は、ストローク群#0の方が、中心部のストロークに近い場合(ステップS1106のYes)は、ストローク群#1を分割・短縮する(ステップS1117)。これは、中心線を残したほうが見栄えが良いためである。図39は太文字の場合の描画例を示しており、(a)は中心線を残す配慮をしない場合、(b)は中心線を残す配慮をした場合である。
【0225】
図38に戻り、ストローク群#1の方が、中心部のストロークに近い場合(ステップS1107のYes)は、ストローク#0を分割、短縮する(ステップS1116)。
【0226】
次いで、フラグvanishから判断して、ストローク群#0のみが、一部消滅の可能性がある場合(ステップS1108のYes)は、ストローク群#1を分割・短縮する(ステップS1117)。
【0227】
逆の場合(ステップS1109のYes)は、ストローク群#0を分割・短縮する(ステップS1116)。
【0228】
両方のストローク群ともvanishによって消滅の可能性がある場合(ステップS1110のYes)は、フラグflagを使い、既に一部消滅につながる分割をしているかどうかを判断する。あるストローク群で隣り合う交点の距離が線幅より小さい場合、どちらか一方の交点で既に分割が行われている場合に相当する。仮に、もう一方でも分割が行われた場合、この交点間のストロークは消滅する。
【0229】
したがって、ストローク群#0のみで既に分割が行われている場合(ステップS1111のYes)は、ストローク群#1を分割・短縮する(ステップS1117)。
【0230】
逆の場合(ステップS1112のYes)は、ストローク群#0を分割、短縮する(ステップS1116)。
【0231】
次いで、フラグotherを使い、ストローク群#0のみが、別のストロークと交わっており、その別のストロークに一部消滅の可能性がある場合(ステップS1113のYes)に、ストローク#1を分割対象とする(ステップS1117)。これは、別ストロークで消滅がおきないよう、ストローク#0に分割・短縮を行う余裕を残しておきたいためである。
【0232】
逆の場合(ステップS1114のYes)はストローク#0を分割・短縮する(ステップS1116)。
【0233】
次いで、削除面積を比較し、ストローク群#0の方が小さければ(ステップS1115のYes)、ストローク#0を分割、短縮する(ステップS1116)。
【0234】
そうでなければ(ステップS1115のNo)、ストローク#1を短縮・分割する(ステップS1117)。
【0235】
図40は従来の問題点が改善された例を示す図である。すなわち、従来は図3(b)で説明したように、複数のストロークが接近する場合にストロークが寸断され、描画品質の低下を招いていた。しかし、本実施形態によれば、同じ文字について図40(a)に示すように、ストローク群間の重複除去により、ストローク群の単位で分割等が行われるため、複数のストロークが接近する部分でストロークが寸断されることがなくなり、描画品質の低下を防止することができる。
【0236】
また、図40(b)に示すように、文字「α」のような一つのストローク群内で重複部分が存在する場合については、ストローク群内の重複除去により、ストローク群内のストロークの配置順序から別のストローク群に属するのと同様に重複除去が行われ、複数のストロークが接近する部分でストロークが寸断されることがなくなり、描画品質の低下を防止することができる。
【0237】
<総括>
以上説明したように、本実施形態によれば、複数のストロークが接近する場合であってもストロークが寸断されることなく、描画品質の低下を防止することができる。
【0238】
以上、本発明の好適な実施の形態により本発明を説明した。ここでは特定の具体例を示して本発明を説明したが、特許請求の範囲に定義された本発明の広範な趣旨および範囲から逸脱することなく、これら具体例に様々な修正および変更を加えることができることは明らかである。すなわち、具体例の詳細および添付の図面により本発明が限定されるものと解釈してはならない。
【符号の説明】
【0239】
1 サーマルリライタブルメディア描画装置
11 全体制御装置
111 CPU
112 メモリ
113 記憶装置
1131 フォントデータDB
1132 文字描画プログラム
114 入力装置
115 ディスプレイ
116 CD/DVDドライブ
117 ネットワーク装置
12 レーザ照射部
13 レーザ発振器
14 スポット径調整レンズ
15 方向制御ミラー
16 方向制御用モータ
17 焦点距離調整レンズ
2 サーマルリライタブルメディア
31 CD/DVD
【先行技術文献】
【特許文献】
【0240】
【特許文献1】特開2004−90026号公報
【特許文献2】特開2004−341373号公報

【特許請求の範囲】
【請求項1】
描画文字を構成する複数のストロークから、連続するストロークをグループ化した1もしくは複数のストローク群を生成する手段と、
各ストローク群に属するストローク間の重複を検出し、当該重複をストロークの配置順に従って除去する手段と、
異なるストローク群に属するストローク間の重複を検出し、当該重複をストローク群を単位に除去する手段と
を備えたことを特徴とするサーマルリライタブルメディア描画装置。
【請求項2】
サーマルリライタブルメディア描画装置の制御装置が、描画文字を構成する複数のストロークから、連続するストロークをグループ化した1もしくは複数のストローク群を生成する工程と、
前記制御装置が、各ストローク群に属するストローク間の重複を検出し、当該重複をストロークの配置順に従って除去する工程と、
前記制御装置が、異なるストローク群に属するストローク間の重複を検出し、当該重複をストローク群を単位に除去する工程と
を備えたことを特徴とするサーマルリライタブルメディア描画制御方法。
【請求項3】
サーマルリライタブルメディア描画装置の制御装置を構成するコンピュータを、
描画文字を構成する複数のストロークから、連続するストロークをグループ化した1もしくは複数のストローク群を生成する手段、
各ストローク群に属するストローク間の重複を検出し、当該重複をストロークの配置順に従って除去する手段、
異なるストローク群に属するストローク間の重複を検出し、当該重複をストローク群を単位に除去する手段
として機能させるサーマルリライタブルメディア描画制御プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図25】
image rotate

【図26】
image rotate

【図27】
image rotate

【図28】
image rotate

【図29】
image rotate

【図30】
image rotate

【図31】
image rotate

【図32】
image rotate

【図33】
image rotate

【図34】
image rotate

【図35】
image rotate

【図36】
image rotate

【図37】
image rotate

【図38】
image rotate

【図40】
image rotate

【図16】
image rotate

【図21】
image rotate

【図39】
image rotate


【公開番号】特開2012−126120(P2012−126120A)
【公開日】平成24年7月5日(2012.7.5)
【国際特許分類】
【出願番号】特願2011−46861(P2011−46861)
【出願日】平成23年3月3日(2011.3.3)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.Bluetooth
【出願人】(000006747)株式会社リコー (37,907)
【Fターム(参考)】