Java Drawing DrawTop

Language

JP  US  UK

 

図形の接続点リスナー

 H. Jyounishi, Tokyo Japan
 

Frame (Index), No frame                 version:0.3(latest)  

要旨:このクラスは、マウスを図形境界に近づけると、境界上の点または境界上の特徴点を表示する機能と、 マウスクリックによってそれらの点を取り出す機能を提供する。
このページで説明するクラス:ConnectionLS, ConnectionListener, ConnectionEvent

1.概要

このクラスは、マウスを図形境界に近づけると、境界上の点または境界上の特徴点を表示する機能と、 マウスクリックによってそれらの点を取り出す機能を提供する。 これによりMouseListener,MouseMotionListenerをインプリメントしていないクラス(Rotate, Translate)でも、 簡単に図形境界上の点を取り出すことができる。 MouseListener, MouseMotionListenerをインプリメントしているクラス(CreateShapeLS, MoveResizeShapeLS)は、MouseListener, MouseMotionListenerが定義するメソッドを使わないが、 このクラスのdrawMouseHitPTメソッドを使うことによって、マウス接近時の処理の同一性を保障する。
具体的には、マウスが図形の境界線に近いか否かをチェックし 、 近ければマーク()を表示する。 さらにマウスが境界線の特徴点に近いときは、マークの形を変えて ()を表示する (図1図2)。

=> CreateShapeLS - Connector enableオプション, MoveResizeShapeLS - 図2.1, 図2.2, Rotate, Translate.


図1. 特徴点: 直線/曲線セグメントの端点と中間点、楕円/円の東西南北点


図2. 表示されるマークと位置の例



2.ConnectionLSクラス 戻る=>page top

フィールド 説明
listenerList
protected EventListenerList listenerList = new EventListenerList();
ConnectionListenerを格納するリスト。
startPoint Point2D startPoint
ドラッグ開始点
endPoint Point2D endPoint
ドラッグ終了点。ドラッグ中は現在点。
mouseHitPoint CurvePT mouseHitPoint
drawMouseHitPTメソッドの戻り値を格納する。
clicked boolean clicked
一回のマウスクリックに対し、mousePressed -> mouseReleased -> mouseClickedが全て呼ばれたかどうかを記録する。 mousePressedでfalseをセット、mouseClickedでtrueをセットする。

メソッド 説明
isMouseListener boolean isMouseListener(MouseListener listener)
ListenerPanelにMouseListenerが設定されているかの問い合わせ。
isMouseMotionListener public boolean isMouseMotionListener(MouseMotionListener listener)
ListenerPanelにMouseMotionListenerが設定されているかの問い合わせ。
activateListener private void activateListener(boolean activate)
MouseListener, MouseMotionListenerをListenerPanelに設定する/解除する。
addConnection
Listener
public void addConnectionListener(ConnectionListener listener)
ConnectionLSオブジェクトが図形を選択したときにイベントを受け取るために、ConnectionListenerをインプリメントしたオブジェクトを登録する。
removeConnection
Listener
public void removeConnectionListener(ConnectionListener listener)
上記登録したオブジェクトをlistenerListから削除する。
removeConnection
Listener
public void removeConnectionListener()
listenerListからすべてのオブジェクトを削除する。
fireEvent public void fireEvent(ConnectionEvent event)
ConnectionLSオブジェクトが図形を選択したときに、listenerListに登録されているオブジェクトに通知する。
mousePressed public void mousePressed(MouseEvent e)
drawMouseHitPTメソッドを呼んで戻り値をmouseHitPointにセットする。
startPointを設定する。
mouseDragged public void mouseDragged(MouseEvent e)
drawMouseHitPTメソッドを呼んで戻り値をmouseHitPointにセットする。
endPointを設定する。
mouseReleased public void mouseReleased(MouseEvent e)
fireEventメソッドでマウスの現在点または mouseHitPointの点を ConnectionListenerをインプリメントしたオブジェクトへ送る。
mouseClicked public void mouseClicked(MouseEvent e)
fireEventメソッドでマウスの現在点または mouseHitPointの点をConnectionListenerを インプリメントしたオブジェクトへ送る。
mouseEntered public void mouseEntered(MouseEvent e)
なにもしない
mouseExited public void mouseExited(MouseEvent e)
なにもしない
mouseMoved public void mouseMoved(MouseEvent e)
なにもしない
drawMouseHitPT public CurvePT drawMouseHitPT(int ctrl, Point2D mousePT, Vector2D vec, ShapeContainer movingContainer)
引数:
ctrl - Shift/Ctrl/Alt keyキーを押しながらマウスドラッグすると, 1/2/3の値が渡される。
mousePT - マウス位置。
vec - マウス位置から接続点を探す方向。この引数がnullならばマウス位置から図形境界への最短点を探す。
boundaryTol - mousePTが境界上にありと見なすトレランス
pointTol - mousePTが図形の特徴点に一致すると見なすトレランス
movingContainer - この図形は接続点探索の対象としない。
drawMouseHitPT private CurvePT drawMouseHitPT(Point2D mousePT, Vector2D vec, double boundaryTol,
double pointTol, ShapeContainer[] exculudingContainers)

引数:
mousePT - マウス位置。
vec - マウス位置から接続点を探す方向。この引数がnullならばマウス位置から図形境界への最短点を探す。
boundaryTol - mousePTが境界上にありと見なすトレランス
pointTol - mousePTが図形の特徴点に一致すると見なすトレランス
movingContainer - この図形は接続点探索の対象としない。
: 図形作成の場合、作成されている図形は除外される。また図形を移動/リサイズする場合、 その対象となっている図形は除外される、など。
戻り値:
もし接続点が図形境界上に見つかったらその点をCurvePTオブジェクトで返す。 見つからなければnullを返す、
処理:
MousePsotionLSgetAllMousePositionInfoメソッドを呼ぶ。

マウスが十分に図形境界に近ければ、 MousePositionInfoオブジェクトが戻る。

MousePositionInfoオブジェクトから マウスに近い図形を取り出しgetHitPTメソッドを呼んで接続点を取得する。
∙ 接続点が見つかればDrawShapeUtilオブジェクトの drawTempShapeメソッドで マーク( または)を描画する。 どちらのマークを描くかは、getCloseCharacteristicPointメソッド の戻り値で判断する。
getHitPT private CurvePT getHitPT(Point2D mousePT, Vector2D vec, double boundaryTol,
ShapeContainer target)

引数:
mousePT - マウス位置。
vec - マウス位置から接続点を探す方向。この引数がnullならばマウス位置から図形境界への最短点を探す。
boundaryTol - mousePTが境界上にありと見なすトレランス
target - 接続点探索の対象図形。
戻り値:
もし接続点が図形境界上に見つかったらその点をCurvePTオブジェクトで返す。 見つからなければnullを返す。
処理:
∙ もしvecがnullでなく0ベクトルでもないならば、 Curve2DUtil.getProjectionLinesメソッド でmousePTのvec方向投影点をtarget境界上のに求める。投影点がないときはnullを返す。
∙ もしvecがnullか0ベクトルならば、 Curve2DUtil.getShortestLineメソッドで mousePTからtarget境界上の最短点を計算する最短点は必ず存在する。
getCloseCharacteristic
Point
public double getCloseCharacteristicPoint(ShapeContainer container, double t, double pointTol)
引数:
container - 対象図形
t - 対象図形境界上の点を表す曲線パラメータ値。
pointTol - mousePTが図形の特徴点に一致すると見なすトレランス
戻り値:
tで表される点が、その図形の特徴点に近ければ、特徴点の曲線パラメータ値を返す。近くなければ-1.0を返す。
処理:
Curve2D.getCharacteristicPointsメソッドで 境界の特徴点を取得。tで表される点と特徴点との距離が、 DrawParameters.ConnectionSmallTolerance以下ならば、 その特徴点の曲線パラメータを返す。
drawMark private void drawMark(Point2D connectionPT, int type)

type=0ならばマークを、 type=1ならばマークを connectionPTの位置に表示する。描画メソッドはDrawPanelUtil.drawTempShapel。



3. Interface ConnectionListener 戻る=>page top

アクションイベントを受け取るためのリスナーインタフェース。 アクションイベントを受け取り処理するクラスは、このインタフェースを実装する。 アクションイベントが発生すると、 ConnectionLSがインタフェースをインプリメントしたクラスの オブジェクトの connectedメソッドを呼び出す。

Method Description
connected
public void connected(ConnectionEvent event)
アクションが発生したときにConnectionLSから呼び出されるメソッド。.


4. Class ConnectionEvent 戻る=>page top
public class ConnectionEvent extends EventObject
Field Description
curvePT protected CurvePT curvePT=null
図形をクリックしたときの点を表すCurvePTオブジェクト。

Method Description
Constructor public ConnectionEvent(Object source, CurvePT curvePT) パラメータ: source - イベントを発生されたオブジェクト。 curvePT - 図形上の点を表すCurvePTオブジェクト。
getCurvePT public CurvePT getCurvePT()
curvePTフィールドの値を返す。




Copyright (c) 2009-2013
All other trademarks are property of their respective owners.