ノード位置調整プログラム、ノード位置調整装置、およびノード位置調整方法
【課題】 ノードとそれを接続するエッジからなるグラフ構造の図形をページ単位で分割表示または印刷する際に生じるページ区切り位置におけるノードの重なりを調整する技術を提供する。
【解決手段】
本発明は、ノードとエッジからなるグラフ構造図を処理する装置において、グラフ構造図を表示または印刷する際に、ページ区切り位置において重なるノードに接続するエッジの有無を判定し、接続するエッジがある場合に、該エッジが接続された方向に重なりノードを移動し、接続するエッジがない場合には、重なりノードを内側のページに移動することを特徴とする。
【解決手段】
本発明は、ノードとエッジからなるグラフ構造図を処理する装置において、グラフ構造図を表示または印刷する際に、ページ区切り位置において重なるノードに接続するエッジの有無を判定し、接続するエッジがある場合に、該エッジが接続された方向に重なりノードを移動し、接続するエッジがない場合には、重なりノードを内側のページに移動することを特徴とする。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ノード(画像要素)とそれを接続するエッジ(接続要素)からなるグラフ構造の図形をページ単位で分割表示または印刷する際に生じるページ区切り位置におけるノードの重なりを調整する技術に関する。
【背景技術】
【0002】
従来、モデリングツールや描画ソフトなどにおいて、図形の整列機能によってページ単位で図形をレイアウトする技術が提案され、一般に提供されている。しかしながら、描画ソフトなどにおける従来の図形整列機能は、ページ区切りを意識した処理を行わないため、整列操作を実行した後にページ区切り位置に図形が重なることがある。その場合、紙面に印刷を行った場合、ある1つの図形が途中で分割されて複数のページに印刷されてしまい、図の内容を理解することが困難になるという問題があった。
【0003】
これに対し、図形全体を1ページに縮小印刷するレイアウト処理の技術が提案されている(例えば、特許文献1参照)。その場合は、図形が縮小されることにより、図中の文字がつぶれて見づらくなるなどの問題が生じる。
【特許文献1】特開2007−18413号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
そこで、上述した問題を解決するため、本発明では、ノードとそれを接続するエッジからなるグラフ構造の図形をページ単位で分割表示または印刷する際に、ページ区切り位置において重なったノードを左右上下のページに移動することによって個々のノードの大きさを変えずに見やすくするようなグラフ構造図の処理技術を提供する。
【課題を解決するための手段】
【0005】
一つの実施形態は、ノードとエッジからなるグラフ構造図を処理するグラフ構造図処理装置においてページ区切りで重なったノードの位置を調整するノード位置調整プログラムに関し、グラフ構造図を表示または印刷する際に、ページ区切り位置において重なるノードに接続するエッジの有無を判定するエッジ判定ステップと、該エッジ判定ステップにおいて、接続するエッジがある場合、該エッジが接続された方向に重なりノードを移動し、接続するエッジがない場合、重なりノードを内側のページに移動するノード移動ステップとをコンピュータに実行させる構成とすることによって、従来のようにグラフ構造図が縮小して表示させるのではなく、グラフ構造図の内のページ区切り位置に重なったノードがそのままのページ内に移動させるため、1ページ内に同じ大きさで表示されることとなり、見易さが大きく改善される。
【発明の効果】
【0006】
以上、上述した本発明によって、1つのノードが複数ページに分割されることが少なくなるため、図形が大変見やすくなる。また、1つのノードが複数ページに分割されると、一方のページを確認するだけでは、そのノードが本来表す内容全体を理解することができず、もう一方のページの内容を補完して理解する必要があるという従来の欠点を解消することができる。
【発明を実施するための最良の形態】
【0007】
以下、図面にもとづいて本発明の実施形態を説明する。本発明では、対象の図がノード(図形要素)とそれを接続するエッジ(ノード間を繋ぐ接続線)からなるグラフ構造であることを前提とし、ページ区切り位置において図形が重ならないようにノードの位置を移動することを特徴としている。そして、図形を移動する際に、グラフ構造の特徴に応じて移動処理を実行するものである。
【0008】
移動方法として、実施例1において、ページ区切りに重なっているノードを1つずつ移動し、ノードの移動方向をノード間の接続に基づいて決定する例を示し、実施例2において、ページ区切りにノードが重ならないようにページ内の全てのノードを移動する例を示す。
(実施例1)
図1は、本発明の実施の形態になるグラフ構造図処理装置の基本構成を示す。本システムは、グラフ構造図のページ区切り位置において重なるノードの位置を移動して重なりを解消するグラフ構造図処理装置1と、その処理結果を表示あるいは印刷するディスプレイ装置/印刷装置2から構成され、また、グラフ構造図処理装置1は、OS(オペレーティングシステム)10、そのOS10上で動作し、ノード位置調整プログラム100によってページ区切り部分の重なりノードの位置の変更を接続するエッジなどグラフ構造の特徴に応じて移動処理が行われ、ディスプレイ装置/印刷装置2への結果の出力を制御するユーザインタフェース処理部11、およびページ区切り部におけるノード情報、ノードに接続するエッジ情報などグラフ構造の特徴を表す情報が格納されたテーブルを管理するグラフデータ管理部12から構成されている。
【0009】
なお、グラフ構造図処理装置1は、図示していないが、CPU(Central Processing Unit )およびメモリを備えたコンピュータであり、ハードディスク等の補助記憶装置に記録されたノード位置調整プログラム100は、起動時に、メモリに展開され、CPUによって処理される。
【0010】
図2、図3は、本発明の実施の形態になるページ区切り位置におけるノードの移動処理パターンを示す。ページ区切り位置の重なりノードの移動処理について、以下、5つのパターンを適用する。図2にパターン1〜3、図3にパターン4、5を示す。
パターン1(基本処理):ページ区切りの上に重なっているノードは、(a)エッジが接続されている場合、エッジが接続されている方向に、また、(b)エッジが接続されていない場合、内側のページに移動する。上図は移動処理の考え方を示し、処理によって得られる印刷結果を示している。パターン2以下のパターンは、パターン1に追加されるオプションとしての移動処理パターンである。
パターン2(オプション1):重なりノードに2方向( 例えば右方向と左方向) にエッジが接続されていた場合、重なりノードを両方向( 例えば、右方向と左方向) に移動し、エッジは同一ページ内のノード間のみ接続する。この例では、ノード1とノード3、ノード1とノード2の接続が左右の両方のページで確認できるようにするものである。
パターン3(オプション2):オプション1と同様、重なりノードを2 方向( 例えば、右方向と左方向) に移動し、エッジは同一ページ内の範囲のみ表示する。例えば、ノード1からノード3へ伸びているエッジの一部を表示することにより、ノード1に、ノード2以外にも、ノードが接続されていることが右ページだけで確認できるようにする。
パターン4(オプション3):重なりノードに接続されているエッジの種類を調べ、エッジ種別に応じて優先的に移動する。例えば、点線と実線で実線を優先するならば、点線で接続されたノード1とノード3よりも、実線で接続されたノード1とノード2の方が、同一ページに表示することが望ましいと判断して、ノード1を右に移動する。
パターン5(オプション4):重なりノードの情報(例: ノード名の文字列) が、ページ区切りと重ならないようになる最小限の量だけノードを移動する。最小限の量だけノードを移動することにより、図全体の外観をあまり変えずに移動可能とするものである。
【0011】
図4は、本発明の実施の形態になるページ区切り位置の座標を示す。本例は、ページ区切り位置の座標を定義したものである。縦向きのページ区切りは、x座標=0,250,500,750,・・・(250間隔で区切り)、横向きのページ区切りは、y座標=0,200,400,600,・・・(200間隔で区切り)と設定している。
【0012】
図5は、本発明の実施の形態になるノード情報テーブルのデータ構成例を示す。ノード情報テーブルは、ノードの「名前」、「x座標」、「y座標」、ノードの「幅」、「高さ」、ノードに接続する「エッジ」、および「その他」の項目からなる複数のレコードから構成されている。例えば、第一のレコードには、ノードAは、座標(100, 50)の位置にある幅50、高さ50の大きさの図形であり、接続するエッジはエッジa、その他はノード種別などが示されている。
【0013】
図6は、本発明の実施の形態になるエッジ情報テーブルのデータ構成例を示す。エッジ情報テーブルは、エッジの「名前」、エッジの「種別」、片側端点の「x1座標」、「y1座標」、それに接続する「接続ノード1」、他側端点の「x2座標」、「y2座標」、それに接続する「接続ノード2」、および「その他」の項目からなる複数のレコードで構成されている。例えば、第一のレコードでは、エッジaは、種別が汎化であり、座標(150,75)でノード1と、座標(200,85)でノード2に接続しており、折曲点情報などの接続情報が付加されていることが分かる。
【0014】
なお、エッジの「種別」は、ノード移動処理のパターン4(オプション3)を有効とした場合にのみ利用可能な情報となる。
【0015】
図7は、本発明の実施の形態になるエッジ種別毎の重み情報テーブルのデータ構成例を示す。エッジ種別の重み情報テーブルは、オプション3 を有効にしたときに利用するデータであり、UML(Unified Modeling Language :統一モデリング言語)クラス図を対象とした場合を例としている。
【0016】
各「エッジ種別」に対する「重み情報」が設定され、例えば、各種別の重みは、汎化→3、実現→2、添付ノート→5、関連→1、依存→1となっている。オプション3を有効にすると、2 つのノード間のエッジの種類に応じて、より近傍に表示した方が好ましいノード同士が近づく方向にノードが移動処理される。
【0017】
図8は、本発明の実施の形態になるノード移動処理の全体フローを示す。まず、第一のループにおいて、ページ区切り位置で図全体を分割し、x軸方向にNx個、y軸方向にNy個の升目状にする。左上のページをP(1,1)、右下のページをP(Nx,Ny)と表現すると、P(1,1)、P(2,1)、・・・、P(Nx,1)、・・・、P(1,2)、・・・、P(Nx,Ny)のように左上から右下の方向に順番に1 ページずつ選択する。
【0018】
つぎに、第二のループにおいて、選択中のページ領域に存在するノード(一部でもページ領域と重なりがあるノード)全てについて、x座標の値が小さい順番に1 つずつ選択する。x座標が等しい場合、y座標の値が小さい順番に選択する。
【0019】
ステップS11において、上下左右の4方向のページ区切り線(禁止領域)のいずれかと選択中のノードとが重なっているかどうか判定する。
【0020】
禁止領域であるページ区切り線とノード( 図形要素) が重なっている場合には、ステップS12において、重なったノードについてページ区切り位置から移動し、かつページ内の他のノードとの重なりをなくすようなノードの移動処理を行う。以下、図9〜14を用いて、ページ区切り位置にあるノードの重なり状態に応じた移動処理の詳細を説明する。
【0021】
図9、10は、本発明の実施の形態になるノードの移動処理の詳細フロー(その1:ノードが右のページ区切りと重なる場合)を示す。本例では、右のページ区切り上にあるノードの位置を変更する処理を行う。
【0022】
まず、図9のステップS21において、ノードに接続する左右のエッジの重み値el、er(el、erは、それぞれ左方向、右方向に伸びるエッジの重みの合計値を表す)を初期化(ゼロセット)する。
【0023】
ステップS22において、ノードに接続されているエッジが1本以上存在するか否かを判定する。エッジが1本以上存在する場合、接続されているエッジを1つ選択するループ処理を行う。
【0024】
ステップS23において、エッジの選択ノード側の端点のx座標値をxa、接続先ノード側の端点のx座標値をxb、エッジの重み情報をαとしたときに、xa>xbであればelにαを加え、また、xb>xaであればerにαを加える。つまり、エッジが左に伸びているならば左向きの重みが増し、右に伸びているならば右向きの重みが増すこととなる。このことは、オプション3をONにすると、エッジの種類に応じて、右向きまたは左向きに移動させる重みの大きさが異なることを意味する。また、オプション3がOFFの場合には、常にα=1となる。
【0025】
なお、xa=xb、または、エッジの両端が同じノードに接続されているならば何も処理しないこととする。
【0026】
つぎに、図10のステップS24において、追加のオプション1としてページ区切りの上に重なっているノードについて、複数のページに向けてエッジが接続されている場合、同一のノードをそれらの複数のページに表示させるかどうかを判定する。
【0027】
オプション1がONであれば、ステップS25において、重なりノードに接続する左右エッジの重みを表すel、erの値を判定する。
【0028】
判定の結果、ノードが左右エッジを持つ場合(el>0かつer>0)、ステップS26において、左側ページへの移動処理を行う。重なりノードを複製して、ノードがページ区切りから右方向にはみ出ている分だけ左方向にノードを移動し、他のノードと重なる場合は、上または下方向に、定数値Dだけさらに移動する。それでも他のノードと重なる場合は,複製したノードを削除する。
【0029】
同様に、ステップS27において、右側ページへの移動処理を行う。重なりノードを複製して、ノードがページ区切りから左方向にはみ出ている分だけ右方向にノードを移動し、他のノードと重なる場合は、上または下方向に、定数値Dだけさらに移動する。それでも他のノードと重なる場合は,複製したノードを削除する。
【0030】
なお、上記ステップS26、27における重なりノードのページ区切り位置からの移動量は、例えば、ノード名が見える程度に最小限に抑えるようにしてもよい(図3のオプション4参照)。
【0031】
ステップS28において、上記左右の移動処理で、いずれかが成功(ノードが削除されないで処理終了) していたら、元のノードを削除する。さらに、オプション2のON/OFFに応じて、ノードに接続されているエッジを表示する。
【0032】
つぎに、ステップS25の判定結果から片側にエッジを持つ場合またはエッジを持たない場合には、以降のノード移動処理が実行される。また、ステップS 24でオプション1がOFFだった場合には、ステップS29以降に進む。
【0033】
ステップS29において、el及びerの値を判定する。er≧elであれば、ステップS30において、移動方向の候補は、変数d1(第一候補)に「右方向」を代入し、変数d2(第二候補)に「左方向」を代入する。また、er<elであれば、ステップS31において、d1に「左方向」、d2に「右方向」を代入する。
【0034】
そして、ステップS32において、ノードがページ区切りからd2方向にはみ出ている分だけd1方向にノードを移動し、他のノードと重なる場合は、上または下方向に定数値Dだけさらに移動する。
【0035】
さらに、ステップS33において、他のノードと重なっている場合、一旦ノードの位置を戻す。ノードがページ区切りからd1方向にはみ出ている分だけd2方向にノードを移動し、他のノードと重なる場合は、上または下方向に定数値Dだけさらに移動する。それでも他のノードと重なる場合は、元の位置に戻す。
【0036】
なお、上記ステップS32、33における重なりノードのページ区切り位置からの移動量は、例えば、ノード名が見える程度に最小限に抑えるようにしてもよい(図3のオプション4参照)。
【0037】
以上、図9、10では、ノードが右のページ区切りと重なる場合について示してきたが、左のページ区切りと重なる場合についても、同様な移動処理が適用される。
【0038】
図11、12は、本発明の実施の形態になるノードの移動処理の詳細フロー(その2:ノードが下のページ区切りと重なる場合)を示す。本例では、下のページ区切り上にあるノードの位置を変更する処理を行う。
【0039】
まず、図11のステップS41において、ノードに接続する上下のエッジの重み値et、eb(et、ebは、それぞれ上方向、下方向に伸びるエッジの重みの合計値を表す)を初期化(ゼロセット)する。
【0040】
ステップS42において、ノードに接続されているエッジが1本以上存在するか否かを判定する。エッジが1本以上存在する場合、接続されているエッジを1つ選択するループ処理を行う。
【0041】
ステップS43において、エッジの選択ノード側の端点のy座標値をya、接続先ノード側の端点のy座標値をyb、エッジの重み情報をαとしたときに、ya>ybであればebにαを加え、また、yb>yaであればetにαを加える。つまり、エッジが上に伸びているならば上向きの重みが増し、下に伸びているならば下向きの重みが増す。このことは、オプション3をONにすると、エッジの種類に応じて、上向きまたは下向きに移動させる重みの大きさが異なることを意味する。また、オプション3がOFFの場合は、常にα=1となる。
【0042】
なお、ya=yb、または、エッジの両端が同じノードに接続されているならば何も処理しないこととする。
【0043】
つぎに、図12のステップS44において、追加のオプション1としてページ区切りの上に重なっているノードについて、複数のページに向けてエッジが接続されている場合、同一のノードをそれらの複数のページに表示させるかどうかを判定する。
【0044】
オプション1がONであれば、ステップS45において、重なりノードに接続する上下エッジの重みを表すet、ebの値を判定する。
【0045】
判定の結果、ノードが上下にエッジを持つ場合(et>0かつeb>0)、ステップS46において、下側ページへの移動処理を行う。重なりノードを複製して、ノードがページ区切りから上方向にはみ出ている分だけ下方向にノードを移動し、他のノードと重なる場合は、左または右方向に、定数値Dだけさらに移動する。それでも他のノードと重なる場合は,複製したノードを削除する。
【0046】
同様に、ステップS47において、上側ページへの移動処理を行う。重なりノードを複製して、ノードがページ区切りから下方向にはみ出ている分だけ上方向にノードを移動し、他のノードと重なる場合は、左または右方向に、定数値Dだけさらに移動する。それでも他のノードと重なる場合は,複製したノードを削除する。
【0047】
ステップS48において、上記上下の移動処理で、いずれかが成功(ノードが削除されないで処理終了) していたら、元のノードを削除する。さらに、オプション2のON/OFFに応じて、ノードに接続されているエッジを表示する。
【0048】
つぎに、ステップS45の判定結果から片側にエッジを持つ場合、またはエッジを持たない場合には、以降のノード移動処理が実行される。また、ステップS44でオプション1がOFFだった場合には、ステップS49以降に進む。
【0049】
ステップS49において、et及びebの値を判定する。et≧ebであれば、ステップS50において、移動方向の候補は、変数d1(第一候補)に「下方向」を代入し、変数d2(第二候補)に「上方向」を代入する。また、et<ebであれば、ステップS51において、d1に「上方向」、d2に「下方向」を代入する。
【0050】
そして、ステップS52において、ノードがページ区切りからd2方向にはみ出ている分だけd1方向にノードを移動し、他のノードと重なる場合は、上または下方向に定数値Dだけさらに移動する。
【0051】
さらに、ステップS53において、他のノードと重なっている場合、一旦ノードの位置を戻す。ノードがページ区切りからd1方向にはみ出ている分だけd2方向にノードを移動し、他のノードと重なる場合は、左または右方向に定数値Dだけさらに移動する。それでも他のノードと重なる場合は、元の位置に戻す。
【0052】
以上、図11、12では、ノードが下のページ区切りと重なる場合について示してきたが、上のページ区切りと重なる場合についても、同様な移動処理が適用される。
【0053】
図13、14は、本発明の実施の形態になるノードの移動処理の詳細フロー(その3:ノードが右下のページ区切りと重なる場合)を示す。本例では、右下隅のページ区切り上にあるノードの位置を変更する処理を行う。
【0054】
まず、図13のステップS61において、右下のページ区切り上の重なりノードに接続するエッジの重みの合計値、ex(右方向)、ey(下方向)、ert(右上方向)、erb(右下方向)、elt(左上方向)、elb(左下方向)を初期化(ゼロセット)する。
【0055】
ステップS62において、ノードに接続されているエッジが1本以上存在するか否かを判定する。エッジが1本以上存在する場合、接続されているエッジを1つ選択するループ処理を行う。
【0056】
ステップS63において、エッジの選択ノード側の端点A(xa,ya)、接続先ノード側の端点B(xb,yb)、及びエッジの重み情報をαとすると、xa>xbならexからαを引き、xb>xaならexにαを加える。なお、xa=xb、または、エッジの両端が同じノードに接続されているならば何もしない。
【0057】
また、ya>ybならeyからαを引き、yb>yaならeyにαを加える。なお、ya=yb、またはエッジの両端が同じノードに接続されているならば何もしない。
【0058】
また、Aから見てBが右上にあるならertにαを加え、右下ならerbにαを加え、左上ならeltにαを加え、左下ならelbにαを加える。
【0059】
ここで、αは、オプション3がONの場合、エッジの種類に応じて可変となり、オプション3がOFFの場合は、常にα=1とする。
【0060】
つぎに、図14のステップS64において、追加のオプション1としてページ区切りの上に重なっているノードについて、複数のページに向けてエッジが接続されている場合、同一のノードをそれらの複数のページに表示させるかどうかを判定する。
【0061】
オプション1がONであれば、ステップS65において、重なりノードに接続するエッジの重みを表すert、erb、elt、elbの値を判定する。
【0062】
判定の結果、ノードが2方向以上にエッジを持つ場合(ert、erb、elt、elbのいずれか2個以上の値が0でない)、以降の移動処理を行う。
【0063】
ステップS66において、ert>0ならノードを複製して、ノードがページ区切りから左下方向にはみ出ている分だけ右上方向にノードを移動する。他のノードと重なる場合は複製したノードを削除する。
【0064】
ステップS67において、erb>0ならノードを複製して、ノードがページ区切りから左上方向にはみ出ている分だけ右下方向にノードを移動。他のノードと重なる場合は複製したノードを削除する。
【0065】
ステップS68において、elt>0ならノードを複製して、ノードがページ区切りから右下方向にはみ出ている分だけ左上方向にノードを移動。他のノードと重なる場合は複製したノードを削除する。
【0066】
ステップS69において、elb>0ならノードを複製して、ノードがページ区切りから右上方向にはみ出ている分だけ左下方向にノードを移動。他のノードと重なる場合は複製したノードを削除する。
【0067】
ステップS70において、上記S66からS69の処理のいずれかが成功(ノードが削除されないで処理終了) していたら、元のノードを削除し、さらに、オプション2のON/OFFに応じてノードに接続されているエッジを表示する。
【0068】
つぎに、ステップS64でオプション1がOFFである場合、または、ステップS65で片側にエッジを持つ場合のノード移動処理が以下のステップで実行される。
【0069】
ステップS71において、exの値を判定し、exの値が0以上(右向きの重みの合計が左向きの重みの合計以上の場合)であれば、ステップS72でeyの値を判定し、また、exの値が0未満(右向きの重みの合計が左向きの重みの合計未満の場合)であれば、ステップS73でeyの値を判定する。
【0070】
ステップS72において、eyの値が0以上であれば、ステップS74において、移動方向の候補として、変数d1に「右下方向」、d2に「左下方向」、d3に「右上方向」、d4に「左上方向」を代入する。また、eyの値が0未満であれば、ステップS75において、d1に「右上方向」、d2に「左上方向」、d3に「左下方向」、d4に「右下方向」を代入する。
【0071】
また、ステップS73において、eyの値が0以上であれば、ステップS76において、移動方向の候補として、d1に「左下方向」、d2に「右下方向」、d3に「左上方向」、d4に「右上方向」を代入する。また、eyの値が0未満であれば、ステップS77において、d1に「左上方向」、d2に「右上方向」、d3に「右下方向」、d4に「左下方向」を代入する。
【0072】
そして、ステップS78において、ノードがページ区切りから移動方向d1の反対側にはみ出ている分だけ移動方向d1の向きにノードを移動し、他のノードと重なる場合は、d2、d3、d4順に同様の移動を行う。但し、d4による移動によっても、他のノードと重なる場合は移動しないこととする。
【0073】
以上、図13、14では、ノードが右下のページ区切りと重なる場合について示してきたが、左上、左下、右上のページ区切りと重なる場合についても、同様な移動処理が適用される。
【0074】
図15は、本発明の実施の形態になるノード移動処理による表示結果例(複数のエッジを有する場合の例)を示す。実施例は、UMLのクラス図を対象としたものである。(1)は、ノード移動処理を適用する前の状態を示しており、「Class1」について、左方向に移動させる原因となるノードは「Class2」と「Class3」の2つであり、それらのエッジは「依存」と「関連」であるため、エッジの重み合計値は2である。右方向に移動させる原因となるノードは、「Class4」の1つであり、そのエッジは汎化であるため、重み値は3となっている。(2)は、右方向に移動させる重みの合計値が大きいため、右方向に移動させる移動処理が適用された結果を示している。
(実施例2)
実施例2では、ページ区切りの上に重なっているすべてのノードをページ内におさめるためにノードを移動する処理を扱う。その際、ノード間の相対的な位置関係をできるだけ維持するために全てのノードの位置を一定の割合で移動することとする。
【0075】
図16は、本発明の実施の形態になる全ノードシフトによるノード移動を説明する図である。本例は、ページ区切り(禁止領域)に重なったノード1、ノード3の移動だけでなく、ページ内にある他のノード2、ノード4も移動対象とし、結果的に1つのページ内に全ノードの位置を調整して納めることを目的としている。
【0076】
図17は、本発明の実施の形態になるノード移動処理の全体フロー (実施例2:全ノードシフト)を示す。
【0077】
図8の実施例1における全体フローと同様に、ループ処理名「ページを選択」において、ページ区切り位置で図全体を分割し、x軸方向にNx個、y軸方向にNy個の升目状にする。左上のページをP(1,1)、右下のページをP(Nx,Ny)と表現すると、P(1,1)、P(2,1)、・・・、P(Nx,1)、・・・、P(1,2)、・・・、P(Nx,Ny)のように左上から右下の方向に順番に1 ページずつ選択する。
【0078】
ステップS81において、上下左右の4方向のページ区切り線のいずれかとページ内のノードとが重なっているかどうか判定する。
【0079】
その結果、重なりノードがあれば、ステップS82において、当該ノードの移動処理を行う。
【0080】
図18は、本発明の実施の形態になる全ノードシフトによるノード移動処理フローを示す。まず、ステップS91において、左右のページ区切りとノードが重なっている場合を判定し、重なったノードがあれば、ステップS92において、左右方向のノードの移動処理を行う。
【0081】
つぎに、ステップS93において、上下のページ区切りとノードが重なっている場合を判定し、重なったノードがあれば、ステップS94において、上下方向のノードの移動処理を行う。
【0082】
図19は、本発明の実施の形態になる全ノードシフトによるノード移動処理の詳細フロー(その1)を示す。本フローは、図18のステップS92の左右方向のノードの移動処理の詳細フローを示している。
【0083】
まず、ステップS101において、ページ内の全てのノードの位置を保存する。つぎに、ステップS102において、ノードの左端のX座標値が最小のノードを探す。X座標が左のページ区切り位置より小さいならば、ページ区切りから左に出ている量a(≧0) を算出する。
【0084】
ステップS103において、ノードの右端のX座標値が最大のノードを探す。X座標が右のページ区切り位置より大きいならば、ページ区切りから左に出ている量b(≧0) を算出する。
【0085】
そして、ステップS104において、ページ内の全てのノードを右方向にaだけ移動する。
【0086】
つぎに、ループ処理「ノードを選択」において、ページ内の全ノードについて1つずつ選択して、ループ内の処理を行う。
【0087】
ステップS105において、ノードを左方向にx(a+b)/(L+a+b)だけ移動する。ここで、Lは、ページの横幅、xは、ノードの右端のx座標値を示す。但し、ノード左端がページ区切り左端より左になる場合、ノード左端をページ区切り左端に合わせる。
【0088】
ループ処理後、ステップS106において、ページ内のノード間に重なりが生じた場合は、ノードの位置を全て元に戻す。
【0089】
図20は、本発明の実施の形態になる全ノードシフトによるノード移動処理の詳細フロー(その2)を示す。本フローは、図18のステップS94の上下方向のノードの移動処理の詳細フローを示している。
【0090】
まず、ステップS111において、ページ内の全てのノードの位置を保存する。つぎに、ステップS112において、ノードの上端のY座標値が最小のノードを探す。Y座標が上のページ区切り位置より小さいならば、ページ区切りから上に出ている量a(≧0) を算出する。
【0091】
ステップS113において、ノードの下端のX座標値が最大のノードを探す。X座標が下のページ区切り位置より大きいならば、ページ区切りから下に出ている量b(≧0) を算出する。
【0092】
そして、ステップS114において、ページ内の全てのノードを下方向にaだけ移動する。
【0093】
つぎに、ループ処理「ノードを選択」において、ページ内の全ノードについて1つずつ選択して、ループ内の処理を行う。
【0094】
ステップS115において、ノードを上方向にy(a+b)/(L+a+b)だけ移動する。ここで、Lは、ページの縦幅、yは、ノードの下端のy座標値を示す。但し、ノード上端がページ区切り上端より上になる場合、ノード上端をページ区切り上端に合わせる。
【0095】
ループ処理後、ステップS116において、ページ内のノード間に重なりが生じた場合は、ノードの位置を全て元に戻す。
【図面の簡単な説明】
【0096】
【図1】本発明の実施の形態になるグラフ構造図処理装置の基本構成を示す図である。
【図2】本発明の実施の形態になるページ区切り位置におけるノードの移動処理パターンを示す図である。
【図3】本発明の実施の形態になるページ区切り重なりノードの移動処理パターン(続き)を示す図である。
【図4】本発明の実施の形態になるページ区切り位置の座標を示す図である。
【図5】本発明の実施の形態になるノード情報テーブルのデータ構成例を示す図である。
【図6】本発明の実施の形態になるエッジ情報テーブルのデータ構成例を示す図である。
【図7】本発明の実施の形態になるエッジ種別毎の重み情報テーブルのデータ構成例を示す図である。
【図8】本発明の実施の形態になるノード移動処理の全体フロー(実施例1)を示す図である。
【図9】本発明の実施の形態になるノードの移動処理の詳細フロー(その1:ノードが右のページ区切りと重なる場合)を示す図である。
【図10】本発明の実施の形態になるノードの移動処理の詳細フロー(その1−続き)を示す図である。
【図11】本発明の実施の形態になるノードの移動処理の詳細フロー(その2:ノードが下のページ区切りと重なる場合)示す図である。
【図12】本発明の実施の形態になるノードの移動処理の詳細フロー(その2−続き)を示す図である。
【図13】本発明の実施の形態になるノードの移動処理の詳細フロー(その3:ノードが右下のページ区切りと重なる場合)を示す図である。
【図14】本発明の実施の形態になるノードの移動処理の詳細フロー(その3−続き)を示す図である。
【図15】本発明の実施の形態になるノード移動処理による結果表示例(複数のエッジを有する場合の例)を示す図である。
【図16】本発明の実施の形態になる全ノードシフトによるノード移動を説明する図である。
【図17】本発明の実施の形態になるノード移動処理の全体フロー (実施例2:全ノードシフト)を示す図である。
【図18】本発明の実施の形態になる全ノードシフトによるノード移動処理フローを示す図である。
【図19】本発明の実施の形態になる全ノードシフトによるノード移動処理の詳細フロー(その1)を示す図である。
【図20】本発明の実施の形態になる全ノードシフトによるノード移動処理の詳細フロー(その2)を示す図である。
【符号の説明】
【0097】
1 グラフ構造図処理装置
2 ディスプレイ装置/印刷装置
10 OS(オペレーティングシステム)
11 ユーザインタフェース処理部
12 グラフデータ管理部
100 ノード位置調整プログラム
【技術分野】
【0001】
本発明は、ノード(画像要素)とそれを接続するエッジ(接続要素)からなるグラフ構造の図形をページ単位で分割表示または印刷する際に生じるページ区切り位置におけるノードの重なりを調整する技術に関する。
【背景技術】
【0002】
従来、モデリングツールや描画ソフトなどにおいて、図形の整列機能によってページ単位で図形をレイアウトする技術が提案され、一般に提供されている。しかしながら、描画ソフトなどにおける従来の図形整列機能は、ページ区切りを意識した処理を行わないため、整列操作を実行した後にページ区切り位置に図形が重なることがある。その場合、紙面に印刷を行った場合、ある1つの図形が途中で分割されて複数のページに印刷されてしまい、図の内容を理解することが困難になるという問題があった。
【0003】
これに対し、図形全体を1ページに縮小印刷するレイアウト処理の技術が提案されている(例えば、特許文献1参照)。その場合は、図形が縮小されることにより、図中の文字がつぶれて見づらくなるなどの問題が生じる。
【特許文献1】特開2007−18413号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
そこで、上述した問題を解決するため、本発明では、ノードとそれを接続するエッジからなるグラフ構造の図形をページ単位で分割表示または印刷する際に、ページ区切り位置において重なったノードを左右上下のページに移動することによって個々のノードの大きさを変えずに見やすくするようなグラフ構造図の処理技術を提供する。
【課題を解決するための手段】
【0005】
一つの実施形態は、ノードとエッジからなるグラフ構造図を処理するグラフ構造図処理装置においてページ区切りで重なったノードの位置を調整するノード位置調整プログラムに関し、グラフ構造図を表示または印刷する際に、ページ区切り位置において重なるノードに接続するエッジの有無を判定するエッジ判定ステップと、該エッジ判定ステップにおいて、接続するエッジがある場合、該エッジが接続された方向に重なりノードを移動し、接続するエッジがない場合、重なりノードを内側のページに移動するノード移動ステップとをコンピュータに実行させる構成とすることによって、従来のようにグラフ構造図が縮小して表示させるのではなく、グラフ構造図の内のページ区切り位置に重なったノードがそのままのページ内に移動させるため、1ページ内に同じ大きさで表示されることとなり、見易さが大きく改善される。
【発明の効果】
【0006】
以上、上述した本発明によって、1つのノードが複数ページに分割されることが少なくなるため、図形が大変見やすくなる。また、1つのノードが複数ページに分割されると、一方のページを確認するだけでは、そのノードが本来表す内容全体を理解することができず、もう一方のページの内容を補完して理解する必要があるという従来の欠点を解消することができる。
【発明を実施するための最良の形態】
【0007】
以下、図面にもとづいて本発明の実施形態を説明する。本発明では、対象の図がノード(図形要素)とそれを接続するエッジ(ノード間を繋ぐ接続線)からなるグラフ構造であることを前提とし、ページ区切り位置において図形が重ならないようにノードの位置を移動することを特徴としている。そして、図形を移動する際に、グラフ構造の特徴に応じて移動処理を実行するものである。
【0008】
移動方法として、実施例1において、ページ区切りに重なっているノードを1つずつ移動し、ノードの移動方向をノード間の接続に基づいて決定する例を示し、実施例2において、ページ区切りにノードが重ならないようにページ内の全てのノードを移動する例を示す。
(実施例1)
図1は、本発明の実施の形態になるグラフ構造図処理装置の基本構成を示す。本システムは、グラフ構造図のページ区切り位置において重なるノードの位置を移動して重なりを解消するグラフ構造図処理装置1と、その処理結果を表示あるいは印刷するディスプレイ装置/印刷装置2から構成され、また、グラフ構造図処理装置1は、OS(オペレーティングシステム)10、そのOS10上で動作し、ノード位置調整プログラム100によってページ区切り部分の重なりノードの位置の変更を接続するエッジなどグラフ構造の特徴に応じて移動処理が行われ、ディスプレイ装置/印刷装置2への結果の出力を制御するユーザインタフェース処理部11、およびページ区切り部におけるノード情報、ノードに接続するエッジ情報などグラフ構造の特徴を表す情報が格納されたテーブルを管理するグラフデータ管理部12から構成されている。
【0009】
なお、グラフ構造図処理装置1は、図示していないが、CPU(Central Processing Unit )およびメモリを備えたコンピュータであり、ハードディスク等の補助記憶装置に記録されたノード位置調整プログラム100は、起動時に、メモリに展開され、CPUによって処理される。
【0010】
図2、図3は、本発明の実施の形態になるページ区切り位置におけるノードの移動処理パターンを示す。ページ区切り位置の重なりノードの移動処理について、以下、5つのパターンを適用する。図2にパターン1〜3、図3にパターン4、5を示す。
パターン1(基本処理):ページ区切りの上に重なっているノードは、(a)エッジが接続されている場合、エッジが接続されている方向に、また、(b)エッジが接続されていない場合、内側のページに移動する。上図は移動処理の考え方を示し、処理によって得られる印刷結果を示している。パターン2以下のパターンは、パターン1に追加されるオプションとしての移動処理パターンである。
パターン2(オプション1):重なりノードに2方向( 例えば右方向と左方向) にエッジが接続されていた場合、重なりノードを両方向( 例えば、右方向と左方向) に移動し、エッジは同一ページ内のノード間のみ接続する。この例では、ノード1とノード3、ノード1とノード2の接続が左右の両方のページで確認できるようにするものである。
パターン3(オプション2):オプション1と同様、重なりノードを2 方向( 例えば、右方向と左方向) に移動し、エッジは同一ページ内の範囲のみ表示する。例えば、ノード1からノード3へ伸びているエッジの一部を表示することにより、ノード1に、ノード2以外にも、ノードが接続されていることが右ページだけで確認できるようにする。
パターン4(オプション3):重なりノードに接続されているエッジの種類を調べ、エッジ種別に応じて優先的に移動する。例えば、点線と実線で実線を優先するならば、点線で接続されたノード1とノード3よりも、実線で接続されたノード1とノード2の方が、同一ページに表示することが望ましいと判断して、ノード1を右に移動する。
パターン5(オプション4):重なりノードの情報(例: ノード名の文字列) が、ページ区切りと重ならないようになる最小限の量だけノードを移動する。最小限の量だけノードを移動することにより、図全体の外観をあまり変えずに移動可能とするものである。
【0011】
図4は、本発明の実施の形態になるページ区切り位置の座標を示す。本例は、ページ区切り位置の座標を定義したものである。縦向きのページ区切りは、x座標=0,250,500,750,・・・(250間隔で区切り)、横向きのページ区切りは、y座標=0,200,400,600,・・・(200間隔で区切り)と設定している。
【0012】
図5は、本発明の実施の形態になるノード情報テーブルのデータ構成例を示す。ノード情報テーブルは、ノードの「名前」、「x座標」、「y座標」、ノードの「幅」、「高さ」、ノードに接続する「エッジ」、および「その他」の項目からなる複数のレコードから構成されている。例えば、第一のレコードには、ノードAは、座標(100, 50)の位置にある幅50、高さ50の大きさの図形であり、接続するエッジはエッジa、その他はノード種別などが示されている。
【0013】
図6は、本発明の実施の形態になるエッジ情報テーブルのデータ構成例を示す。エッジ情報テーブルは、エッジの「名前」、エッジの「種別」、片側端点の「x1座標」、「y1座標」、それに接続する「接続ノード1」、他側端点の「x2座標」、「y2座標」、それに接続する「接続ノード2」、および「その他」の項目からなる複数のレコードで構成されている。例えば、第一のレコードでは、エッジaは、種別が汎化であり、座標(150,75)でノード1と、座標(200,85)でノード2に接続しており、折曲点情報などの接続情報が付加されていることが分かる。
【0014】
なお、エッジの「種別」は、ノード移動処理のパターン4(オプション3)を有効とした場合にのみ利用可能な情報となる。
【0015】
図7は、本発明の実施の形態になるエッジ種別毎の重み情報テーブルのデータ構成例を示す。エッジ種別の重み情報テーブルは、オプション3 を有効にしたときに利用するデータであり、UML(Unified Modeling Language :統一モデリング言語)クラス図を対象とした場合を例としている。
【0016】
各「エッジ種別」に対する「重み情報」が設定され、例えば、各種別の重みは、汎化→3、実現→2、添付ノート→5、関連→1、依存→1となっている。オプション3を有効にすると、2 つのノード間のエッジの種類に応じて、より近傍に表示した方が好ましいノード同士が近づく方向にノードが移動処理される。
【0017】
図8は、本発明の実施の形態になるノード移動処理の全体フローを示す。まず、第一のループにおいて、ページ区切り位置で図全体を分割し、x軸方向にNx個、y軸方向にNy個の升目状にする。左上のページをP(1,1)、右下のページをP(Nx,Ny)と表現すると、P(1,1)、P(2,1)、・・・、P(Nx,1)、・・・、P(1,2)、・・・、P(Nx,Ny)のように左上から右下の方向に順番に1 ページずつ選択する。
【0018】
つぎに、第二のループにおいて、選択中のページ領域に存在するノード(一部でもページ領域と重なりがあるノード)全てについて、x座標の値が小さい順番に1 つずつ選択する。x座標が等しい場合、y座標の値が小さい順番に選択する。
【0019】
ステップS11において、上下左右の4方向のページ区切り線(禁止領域)のいずれかと選択中のノードとが重なっているかどうか判定する。
【0020】
禁止領域であるページ区切り線とノード( 図形要素) が重なっている場合には、ステップS12において、重なったノードについてページ区切り位置から移動し、かつページ内の他のノードとの重なりをなくすようなノードの移動処理を行う。以下、図9〜14を用いて、ページ区切り位置にあるノードの重なり状態に応じた移動処理の詳細を説明する。
【0021】
図9、10は、本発明の実施の形態になるノードの移動処理の詳細フロー(その1:ノードが右のページ区切りと重なる場合)を示す。本例では、右のページ区切り上にあるノードの位置を変更する処理を行う。
【0022】
まず、図9のステップS21において、ノードに接続する左右のエッジの重み値el、er(el、erは、それぞれ左方向、右方向に伸びるエッジの重みの合計値を表す)を初期化(ゼロセット)する。
【0023】
ステップS22において、ノードに接続されているエッジが1本以上存在するか否かを判定する。エッジが1本以上存在する場合、接続されているエッジを1つ選択するループ処理を行う。
【0024】
ステップS23において、エッジの選択ノード側の端点のx座標値をxa、接続先ノード側の端点のx座標値をxb、エッジの重み情報をαとしたときに、xa>xbであればelにαを加え、また、xb>xaであればerにαを加える。つまり、エッジが左に伸びているならば左向きの重みが増し、右に伸びているならば右向きの重みが増すこととなる。このことは、オプション3をONにすると、エッジの種類に応じて、右向きまたは左向きに移動させる重みの大きさが異なることを意味する。また、オプション3がOFFの場合には、常にα=1となる。
【0025】
なお、xa=xb、または、エッジの両端が同じノードに接続されているならば何も処理しないこととする。
【0026】
つぎに、図10のステップS24において、追加のオプション1としてページ区切りの上に重なっているノードについて、複数のページに向けてエッジが接続されている場合、同一のノードをそれらの複数のページに表示させるかどうかを判定する。
【0027】
オプション1がONであれば、ステップS25において、重なりノードに接続する左右エッジの重みを表すel、erの値を判定する。
【0028】
判定の結果、ノードが左右エッジを持つ場合(el>0かつer>0)、ステップS26において、左側ページへの移動処理を行う。重なりノードを複製して、ノードがページ区切りから右方向にはみ出ている分だけ左方向にノードを移動し、他のノードと重なる場合は、上または下方向に、定数値Dだけさらに移動する。それでも他のノードと重なる場合は,複製したノードを削除する。
【0029】
同様に、ステップS27において、右側ページへの移動処理を行う。重なりノードを複製して、ノードがページ区切りから左方向にはみ出ている分だけ右方向にノードを移動し、他のノードと重なる場合は、上または下方向に、定数値Dだけさらに移動する。それでも他のノードと重なる場合は,複製したノードを削除する。
【0030】
なお、上記ステップS26、27における重なりノードのページ区切り位置からの移動量は、例えば、ノード名が見える程度に最小限に抑えるようにしてもよい(図3のオプション4参照)。
【0031】
ステップS28において、上記左右の移動処理で、いずれかが成功(ノードが削除されないで処理終了) していたら、元のノードを削除する。さらに、オプション2のON/OFFに応じて、ノードに接続されているエッジを表示する。
【0032】
つぎに、ステップS25の判定結果から片側にエッジを持つ場合またはエッジを持たない場合には、以降のノード移動処理が実行される。また、ステップS 24でオプション1がOFFだった場合には、ステップS29以降に進む。
【0033】
ステップS29において、el及びerの値を判定する。er≧elであれば、ステップS30において、移動方向の候補は、変数d1(第一候補)に「右方向」を代入し、変数d2(第二候補)に「左方向」を代入する。また、er<elであれば、ステップS31において、d1に「左方向」、d2に「右方向」を代入する。
【0034】
そして、ステップS32において、ノードがページ区切りからd2方向にはみ出ている分だけd1方向にノードを移動し、他のノードと重なる場合は、上または下方向に定数値Dだけさらに移動する。
【0035】
さらに、ステップS33において、他のノードと重なっている場合、一旦ノードの位置を戻す。ノードがページ区切りからd1方向にはみ出ている分だけd2方向にノードを移動し、他のノードと重なる場合は、上または下方向に定数値Dだけさらに移動する。それでも他のノードと重なる場合は、元の位置に戻す。
【0036】
なお、上記ステップS32、33における重なりノードのページ区切り位置からの移動量は、例えば、ノード名が見える程度に最小限に抑えるようにしてもよい(図3のオプション4参照)。
【0037】
以上、図9、10では、ノードが右のページ区切りと重なる場合について示してきたが、左のページ区切りと重なる場合についても、同様な移動処理が適用される。
【0038】
図11、12は、本発明の実施の形態になるノードの移動処理の詳細フロー(その2:ノードが下のページ区切りと重なる場合)を示す。本例では、下のページ区切り上にあるノードの位置を変更する処理を行う。
【0039】
まず、図11のステップS41において、ノードに接続する上下のエッジの重み値et、eb(et、ebは、それぞれ上方向、下方向に伸びるエッジの重みの合計値を表す)を初期化(ゼロセット)する。
【0040】
ステップS42において、ノードに接続されているエッジが1本以上存在するか否かを判定する。エッジが1本以上存在する場合、接続されているエッジを1つ選択するループ処理を行う。
【0041】
ステップS43において、エッジの選択ノード側の端点のy座標値をya、接続先ノード側の端点のy座標値をyb、エッジの重み情報をαとしたときに、ya>ybであればebにαを加え、また、yb>yaであればetにαを加える。つまり、エッジが上に伸びているならば上向きの重みが増し、下に伸びているならば下向きの重みが増す。このことは、オプション3をONにすると、エッジの種類に応じて、上向きまたは下向きに移動させる重みの大きさが異なることを意味する。また、オプション3がOFFの場合は、常にα=1となる。
【0042】
なお、ya=yb、または、エッジの両端が同じノードに接続されているならば何も処理しないこととする。
【0043】
つぎに、図12のステップS44において、追加のオプション1としてページ区切りの上に重なっているノードについて、複数のページに向けてエッジが接続されている場合、同一のノードをそれらの複数のページに表示させるかどうかを判定する。
【0044】
オプション1がONであれば、ステップS45において、重なりノードに接続する上下エッジの重みを表すet、ebの値を判定する。
【0045】
判定の結果、ノードが上下にエッジを持つ場合(et>0かつeb>0)、ステップS46において、下側ページへの移動処理を行う。重なりノードを複製して、ノードがページ区切りから上方向にはみ出ている分だけ下方向にノードを移動し、他のノードと重なる場合は、左または右方向に、定数値Dだけさらに移動する。それでも他のノードと重なる場合は,複製したノードを削除する。
【0046】
同様に、ステップS47において、上側ページへの移動処理を行う。重なりノードを複製して、ノードがページ区切りから下方向にはみ出ている分だけ上方向にノードを移動し、他のノードと重なる場合は、左または右方向に、定数値Dだけさらに移動する。それでも他のノードと重なる場合は,複製したノードを削除する。
【0047】
ステップS48において、上記上下の移動処理で、いずれかが成功(ノードが削除されないで処理終了) していたら、元のノードを削除する。さらに、オプション2のON/OFFに応じて、ノードに接続されているエッジを表示する。
【0048】
つぎに、ステップS45の判定結果から片側にエッジを持つ場合、またはエッジを持たない場合には、以降のノード移動処理が実行される。また、ステップS44でオプション1がOFFだった場合には、ステップS49以降に進む。
【0049】
ステップS49において、et及びebの値を判定する。et≧ebであれば、ステップS50において、移動方向の候補は、変数d1(第一候補)に「下方向」を代入し、変数d2(第二候補)に「上方向」を代入する。また、et<ebであれば、ステップS51において、d1に「上方向」、d2に「下方向」を代入する。
【0050】
そして、ステップS52において、ノードがページ区切りからd2方向にはみ出ている分だけd1方向にノードを移動し、他のノードと重なる場合は、上または下方向に定数値Dだけさらに移動する。
【0051】
さらに、ステップS53において、他のノードと重なっている場合、一旦ノードの位置を戻す。ノードがページ区切りからd1方向にはみ出ている分だけd2方向にノードを移動し、他のノードと重なる場合は、左または右方向に定数値Dだけさらに移動する。それでも他のノードと重なる場合は、元の位置に戻す。
【0052】
以上、図11、12では、ノードが下のページ区切りと重なる場合について示してきたが、上のページ区切りと重なる場合についても、同様な移動処理が適用される。
【0053】
図13、14は、本発明の実施の形態になるノードの移動処理の詳細フロー(その3:ノードが右下のページ区切りと重なる場合)を示す。本例では、右下隅のページ区切り上にあるノードの位置を変更する処理を行う。
【0054】
まず、図13のステップS61において、右下のページ区切り上の重なりノードに接続するエッジの重みの合計値、ex(右方向)、ey(下方向)、ert(右上方向)、erb(右下方向)、elt(左上方向)、elb(左下方向)を初期化(ゼロセット)する。
【0055】
ステップS62において、ノードに接続されているエッジが1本以上存在するか否かを判定する。エッジが1本以上存在する場合、接続されているエッジを1つ選択するループ処理を行う。
【0056】
ステップS63において、エッジの選択ノード側の端点A(xa,ya)、接続先ノード側の端点B(xb,yb)、及びエッジの重み情報をαとすると、xa>xbならexからαを引き、xb>xaならexにαを加える。なお、xa=xb、または、エッジの両端が同じノードに接続されているならば何もしない。
【0057】
また、ya>ybならeyからαを引き、yb>yaならeyにαを加える。なお、ya=yb、またはエッジの両端が同じノードに接続されているならば何もしない。
【0058】
また、Aから見てBが右上にあるならertにαを加え、右下ならerbにαを加え、左上ならeltにαを加え、左下ならelbにαを加える。
【0059】
ここで、αは、オプション3がONの場合、エッジの種類に応じて可変となり、オプション3がOFFの場合は、常にα=1とする。
【0060】
つぎに、図14のステップS64において、追加のオプション1としてページ区切りの上に重なっているノードについて、複数のページに向けてエッジが接続されている場合、同一のノードをそれらの複数のページに表示させるかどうかを判定する。
【0061】
オプション1がONであれば、ステップS65において、重なりノードに接続するエッジの重みを表すert、erb、elt、elbの値を判定する。
【0062】
判定の結果、ノードが2方向以上にエッジを持つ場合(ert、erb、elt、elbのいずれか2個以上の値が0でない)、以降の移動処理を行う。
【0063】
ステップS66において、ert>0ならノードを複製して、ノードがページ区切りから左下方向にはみ出ている分だけ右上方向にノードを移動する。他のノードと重なる場合は複製したノードを削除する。
【0064】
ステップS67において、erb>0ならノードを複製して、ノードがページ区切りから左上方向にはみ出ている分だけ右下方向にノードを移動。他のノードと重なる場合は複製したノードを削除する。
【0065】
ステップS68において、elt>0ならノードを複製して、ノードがページ区切りから右下方向にはみ出ている分だけ左上方向にノードを移動。他のノードと重なる場合は複製したノードを削除する。
【0066】
ステップS69において、elb>0ならノードを複製して、ノードがページ区切りから右上方向にはみ出ている分だけ左下方向にノードを移動。他のノードと重なる場合は複製したノードを削除する。
【0067】
ステップS70において、上記S66からS69の処理のいずれかが成功(ノードが削除されないで処理終了) していたら、元のノードを削除し、さらに、オプション2のON/OFFに応じてノードに接続されているエッジを表示する。
【0068】
つぎに、ステップS64でオプション1がOFFである場合、または、ステップS65で片側にエッジを持つ場合のノード移動処理が以下のステップで実行される。
【0069】
ステップS71において、exの値を判定し、exの値が0以上(右向きの重みの合計が左向きの重みの合計以上の場合)であれば、ステップS72でeyの値を判定し、また、exの値が0未満(右向きの重みの合計が左向きの重みの合計未満の場合)であれば、ステップS73でeyの値を判定する。
【0070】
ステップS72において、eyの値が0以上であれば、ステップS74において、移動方向の候補として、変数d1に「右下方向」、d2に「左下方向」、d3に「右上方向」、d4に「左上方向」を代入する。また、eyの値が0未満であれば、ステップS75において、d1に「右上方向」、d2に「左上方向」、d3に「左下方向」、d4に「右下方向」を代入する。
【0071】
また、ステップS73において、eyの値が0以上であれば、ステップS76において、移動方向の候補として、d1に「左下方向」、d2に「右下方向」、d3に「左上方向」、d4に「右上方向」を代入する。また、eyの値が0未満であれば、ステップS77において、d1に「左上方向」、d2に「右上方向」、d3に「右下方向」、d4に「左下方向」を代入する。
【0072】
そして、ステップS78において、ノードがページ区切りから移動方向d1の反対側にはみ出ている分だけ移動方向d1の向きにノードを移動し、他のノードと重なる場合は、d2、d3、d4順に同様の移動を行う。但し、d4による移動によっても、他のノードと重なる場合は移動しないこととする。
【0073】
以上、図13、14では、ノードが右下のページ区切りと重なる場合について示してきたが、左上、左下、右上のページ区切りと重なる場合についても、同様な移動処理が適用される。
【0074】
図15は、本発明の実施の形態になるノード移動処理による表示結果例(複数のエッジを有する場合の例)を示す。実施例は、UMLのクラス図を対象としたものである。(1)は、ノード移動処理を適用する前の状態を示しており、「Class1」について、左方向に移動させる原因となるノードは「Class2」と「Class3」の2つであり、それらのエッジは「依存」と「関連」であるため、エッジの重み合計値は2である。右方向に移動させる原因となるノードは、「Class4」の1つであり、そのエッジは汎化であるため、重み値は3となっている。(2)は、右方向に移動させる重みの合計値が大きいため、右方向に移動させる移動処理が適用された結果を示している。
(実施例2)
実施例2では、ページ区切りの上に重なっているすべてのノードをページ内におさめるためにノードを移動する処理を扱う。その際、ノード間の相対的な位置関係をできるだけ維持するために全てのノードの位置を一定の割合で移動することとする。
【0075】
図16は、本発明の実施の形態になる全ノードシフトによるノード移動を説明する図である。本例は、ページ区切り(禁止領域)に重なったノード1、ノード3の移動だけでなく、ページ内にある他のノード2、ノード4も移動対象とし、結果的に1つのページ内に全ノードの位置を調整して納めることを目的としている。
【0076】
図17は、本発明の実施の形態になるノード移動処理の全体フロー (実施例2:全ノードシフト)を示す。
【0077】
図8の実施例1における全体フローと同様に、ループ処理名「ページを選択」において、ページ区切り位置で図全体を分割し、x軸方向にNx個、y軸方向にNy個の升目状にする。左上のページをP(1,1)、右下のページをP(Nx,Ny)と表現すると、P(1,1)、P(2,1)、・・・、P(Nx,1)、・・・、P(1,2)、・・・、P(Nx,Ny)のように左上から右下の方向に順番に1 ページずつ選択する。
【0078】
ステップS81において、上下左右の4方向のページ区切り線のいずれかとページ内のノードとが重なっているかどうか判定する。
【0079】
その結果、重なりノードがあれば、ステップS82において、当該ノードの移動処理を行う。
【0080】
図18は、本発明の実施の形態になる全ノードシフトによるノード移動処理フローを示す。まず、ステップS91において、左右のページ区切りとノードが重なっている場合を判定し、重なったノードがあれば、ステップS92において、左右方向のノードの移動処理を行う。
【0081】
つぎに、ステップS93において、上下のページ区切りとノードが重なっている場合を判定し、重なったノードがあれば、ステップS94において、上下方向のノードの移動処理を行う。
【0082】
図19は、本発明の実施の形態になる全ノードシフトによるノード移動処理の詳細フロー(その1)を示す。本フローは、図18のステップS92の左右方向のノードの移動処理の詳細フローを示している。
【0083】
まず、ステップS101において、ページ内の全てのノードの位置を保存する。つぎに、ステップS102において、ノードの左端のX座標値が最小のノードを探す。X座標が左のページ区切り位置より小さいならば、ページ区切りから左に出ている量a(≧0) を算出する。
【0084】
ステップS103において、ノードの右端のX座標値が最大のノードを探す。X座標が右のページ区切り位置より大きいならば、ページ区切りから左に出ている量b(≧0) を算出する。
【0085】
そして、ステップS104において、ページ内の全てのノードを右方向にaだけ移動する。
【0086】
つぎに、ループ処理「ノードを選択」において、ページ内の全ノードについて1つずつ選択して、ループ内の処理を行う。
【0087】
ステップS105において、ノードを左方向にx(a+b)/(L+a+b)だけ移動する。ここで、Lは、ページの横幅、xは、ノードの右端のx座標値を示す。但し、ノード左端がページ区切り左端より左になる場合、ノード左端をページ区切り左端に合わせる。
【0088】
ループ処理後、ステップS106において、ページ内のノード間に重なりが生じた場合は、ノードの位置を全て元に戻す。
【0089】
図20は、本発明の実施の形態になる全ノードシフトによるノード移動処理の詳細フロー(その2)を示す。本フローは、図18のステップS94の上下方向のノードの移動処理の詳細フローを示している。
【0090】
まず、ステップS111において、ページ内の全てのノードの位置を保存する。つぎに、ステップS112において、ノードの上端のY座標値が最小のノードを探す。Y座標が上のページ区切り位置より小さいならば、ページ区切りから上に出ている量a(≧0) を算出する。
【0091】
ステップS113において、ノードの下端のX座標値が最大のノードを探す。X座標が下のページ区切り位置より大きいならば、ページ区切りから下に出ている量b(≧0) を算出する。
【0092】
そして、ステップS114において、ページ内の全てのノードを下方向にaだけ移動する。
【0093】
つぎに、ループ処理「ノードを選択」において、ページ内の全ノードについて1つずつ選択して、ループ内の処理を行う。
【0094】
ステップS115において、ノードを上方向にy(a+b)/(L+a+b)だけ移動する。ここで、Lは、ページの縦幅、yは、ノードの下端のy座標値を示す。但し、ノード上端がページ区切り上端より上になる場合、ノード上端をページ区切り上端に合わせる。
【0095】
ループ処理後、ステップS116において、ページ内のノード間に重なりが生じた場合は、ノードの位置を全て元に戻す。
【図面の簡単な説明】
【0096】
【図1】本発明の実施の形態になるグラフ構造図処理装置の基本構成を示す図である。
【図2】本発明の実施の形態になるページ区切り位置におけるノードの移動処理パターンを示す図である。
【図3】本発明の実施の形態になるページ区切り重なりノードの移動処理パターン(続き)を示す図である。
【図4】本発明の実施の形態になるページ区切り位置の座標を示す図である。
【図5】本発明の実施の形態になるノード情報テーブルのデータ構成例を示す図である。
【図6】本発明の実施の形態になるエッジ情報テーブルのデータ構成例を示す図である。
【図7】本発明の実施の形態になるエッジ種別毎の重み情報テーブルのデータ構成例を示す図である。
【図8】本発明の実施の形態になるノード移動処理の全体フロー(実施例1)を示す図である。
【図9】本発明の実施の形態になるノードの移動処理の詳細フロー(その1:ノードが右のページ区切りと重なる場合)を示す図である。
【図10】本発明の実施の形態になるノードの移動処理の詳細フロー(その1−続き)を示す図である。
【図11】本発明の実施の形態になるノードの移動処理の詳細フロー(その2:ノードが下のページ区切りと重なる場合)示す図である。
【図12】本発明の実施の形態になるノードの移動処理の詳細フロー(その2−続き)を示す図である。
【図13】本発明の実施の形態になるノードの移動処理の詳細フロー(その3:ノードが右下のページ区切りと重なる場合)を示す図である。
【図14】本発明の実施の形態になるノードの移動処理の詳細フロー(その3−続き)を示す図である。
【図15】本発明の実施の形態になるノード移動処理による結果表示例(複数のエッジを有する場合の例)を示す図である。
【図16】本発明の実施の形態になる全ノードシフトによるノード移動を説明する図である。
【図17】本発明の実施の形態になるノード移動処理の全体フロー (実施例2:全ノードシフト)を示す図である。
【図18】本発明の実施の形態になる全ノードシフトによるノード移動処理フローを示す図である。
【図19】本発明の実施の形態になる全ノードシフトによるノード移動処理の詳細フロー(その1)を示す図である。
【図20】本発明の実施の形態になる全ノードシフトによるノード移動処理の詳細フロー(その2)を示す図である。
【符号の説明】
【0097】
1 グラフ構造図処理装置
2 ディスプレイ装置/印刷装置
10 OS(オペレーティングシステム)
11 ユーザインタフェース処理部
12 グラフデータ管理部
100 ノード位置調整プログラム
【特許請求の範囲】
【請求項1】
ノードとエッジからなるグラフ構造図を処理するグラフ構造図処理装置においてページ区切りで重なったノードの位置を調整するノード位置調整プログラムであって、
前記グラフ構造図を表示または印刷する際に、ページ区切り位置において重なるノードに接続するエッジの有無を判定するエッジ判定ステップと、
前記エッジ判定ステップにおいて、接続するエッジがある場合、該エッジが接続された方向に前記重なりノードを移動し、接続するエッジがない場合、重なりノードを内側のページに移動するノード移動ステップと、
をコンピュータに実行させるノード位置調整プログラム。
【請求項2】
前記ノード移動ステップは、ページ区切り上の前記重なりノードが複数のページに向けて接続するエッジを持つ場合に、同一の前記重なりノードを当該複数のページに移動して表示または印刷させることを特徴とする請求項1に記載のノード位置調整プログラム。
【請求項3】
前記ノード移動ステップは、前記同一の重なりノードに接続する複数のページに向けて接続するエッジにつき、前記ページの外に伸びているエッジの一部のみを表示または印刷させることを特徴とする請求項2に記載のノード位置調整プログラム。
【請求項4】
前記ノード移動ステップは、前記重なりノードに接続するエッジの種別に応じてノードを移動する方向を調整することを特徴とする請求項1乃至3のいずれかに記載のノード位置調整プログラム。
【請求項5】
ノードとエッジからなるグラフ構造図を処理するグラフ構造図処理装置においてページ区切りで重なったノードの位置を調整するノード位置調整装置であって、
前記グラフ構造図を表示または印刷する際に、ページ区切り位置において重なるノードに接続するエッジの有無を判定するエッジ判定手段と、
前記エッジ判定手段において、接続するエッジがある場合、該エッジが接続された方向に前記重なりノードを移動し、接続するエッジがない場合、重なりノードを内側のページに移動するノード移動手段と、
を有することを特徴とするノード位置調整装置。
【請求項6】
ノードとエッジからなるグラフ構造図を処理するグラフ構造図処理装置においてページ区切りで重なったノードの位置を調整するノード位置調整方法であって、
前記グラフ構造図を表示または印刷する際に、ページ区切り位置において重なったノードに接続するエッジの有無を判定するエッジ判定ステップと、
前記エッジ判定ステップにおいて、接続するエッジがある場合、該エッジが接続された方向に前記重なりノードを移動し、接続するエッジがない場合、前記重なりノードを内側のページに移動するノード移動ステップと、
を有することを特徴とするノード位置調整方法。
【請求項7】
ノードとエッジからなるグラフ構造図のグラフ構造図処理装置においてページ区切りで重なったノードの位置を調整するノード位置調整プログラムであって、
前記ページ区切り位置の重なりノードにおける他ページへのはみ出し量のページ幅に対する割合を算出するステップと、
前記割合にしたがって、重なりノードを含むページ内の全てのノードの位置を調整するステップと、
をコンピュータに実行させるノード位置調整プログラム。
【請求項1】
ノードとエッジからなるグラフ構造図を処理するグラフ構造図処理装置においてページ区切りで重なったノードの位置を調整するノード位置調整プログラムであって、
前記グラフ構造図を表示または印刷する際に、ページ区切り位置において重なるノードに接続するエッジの有無を判定するエッジ判定ステップと、
前記エッジ判定ステップにおいて、接続するエッジがある場合、該エッジが接続された方向に前記重なりノードを移動し、接続するエッジがない場合、重なりノードを内側のページに移動するノード移動ステップと、
をコンピュータに実行させるノード位置調整プログラム。
【請求項2】
前記ノード移動ステップは、ページ区切り上の前記重なりノードが複数のページに向けて接続するエッジを持つ場合に、同一の前記重なりノードを当該複数のページに移動して表示または印刷させることを特徴とする請求項1に記載のノード位置調整プログラム。
【請求項3】
前記ノード移動ステップは、前記同一の重なりノードに接続する複数のページに向けて接続するエッジにつき、前記ページの外に伸びているエッジの一部のみを表示または印刷させることを特徴とする請求項2に記載のノード位置調整プログラム。
【請求項4】
前記ノード移動ステップは、前記重なりノードに接続するエッジの種別に応じてノードを移動する方向を調整することを特徴とする請求項1乃至3のいずれかに記載のノード位置調整プログラム。
【請求項5】
ノードとエッジからなるグラフ構造図を処理するグラフ構造図処理装置においてページ区切りで重なったノードの位置を調整するノード位置調整装置であって、
前記グラフ構造図を表示または印刷する際に、ページ区切り位置において重なるノードに接続するエッジの有無を判定するエッジ判定手段と、
前記エッジ判定手段において、接続するエッジがある場合、該エッジが接続された方向に前記重なりノードを移動し、接続するエッジがない場合、重なりノードを内側のページに移動するノード移動手段と、
を有することを特徴とするノード位置調整装置。
【請求項6】
ノードとエッジからなるグラフ構造図を処理するグラフ構造図処理装置においてページ区切りで重なったノードの位置を調整するノード位置調整方法であって、
前記グラフ構造図を表示または印刷する際に、ページ区切り位置において重なったノードに接続するエッジの有無を判定するエッジ判定ステップと、
前記エッジ判定ステップにおいて、接続するエッジがある場合、該エッジが接続された方向に前記重なりノードを移動し、接続するエッジがない場合、前記重なりノードを内側のページに移動するノード移動ステップと、
を有することを特徴とするノード位置調整方法。
【請求項7】
ノードとエッジからなるグラフ構造図のグラフ構造図処理装置においてページ区切りで重なったノードの位置を調整するノード位置調整プログラムであって、
前記ページ区切り位置の重なりノードにおける他ページへのはみ出し量のページ幅に対する割合を算出するステップと、
前記割合にしたがって、重なりノードを含むページ内の全てのノードの位置を調整するステップと、
をコンピュータに実行させるノード位置調整プログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【公開番号】特開2010−113422(P2010−113422A)
【公開日】平成22年5月20日(2010.5.20)
【国際特許分類】
【出願番号】特願2008−283635(P2008−283635)
【出願日】平成20年11月4日(2008.11.4)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
【公開日】平成22年5月20日(2010.5.20)
【国際特許分類】
【出願日】平成20年11月4日(2008.11.4)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
[ Back to top ]