1. 平行移動
戻る=>page top
ダイアログで移動量を設定しGoボタンを押すと実行する。
∙ ダイアログ表示前に図形を選択(複数可)しておく。
ダイアログを開いたときに図形が選択されていないと、 "select shapes before this command!"
のメッセージが表示される(図1.1)。
∙ 平行移動のx,y成分はスピナーか画面をクリックすることで指定できる。
単位は "pixel"、"mm" (ミリメータ)で選択できる。
また"click two point"を選択すると、2点の差分で平行移動のx,y成分を指定できる
(図1.2、 1.3)。
∙ "copy" noボタンを選ぶと、図形のコピーは行わず移動する。
∙ "GO"ボタンを押すたびに図形が移動(コピー)される。
平行移動&コピー
|
図1.1 Dialog
|
"click two point"を選択し、キャンバスまたは図形上の点を2点クリックすることで、平行移動のx,y成分を指定できる。
図1.2はキャンバス上の2点を指定した場合、
図1.3は図形上の2点をクリックした場合を示す。
=>
ConnectionLS 概要
1.1 Translateクラス
戻る=>page top
public class Translate extends JDialog implements SelectionListener,
ConnectionListener
1.2 TranslateActionクラス
戻る=>page top
フィールド
|
説明
|
dialog
|
Translate dialog
Translateオブジェクトをセット。
|
メソッド
|
説明
|
actionPerformed
|
public void actionPerformed(ActionEvent e)
ボタンが押されたときに、アクション処理を実行する。
∙ "Click two points"チェックボックス
チェックボックスが選択されていれば addConnectionListenerメソッドを呼ぶ。
選択されていなければ removeConnectionListenerメソッドを呼ぶ。
∙ "pixel" or "mm" ボタン
Calls the setValuesToTranslateSpinners method.
∙ Goボタン:translateContainerメソッドで図形を平行移動する。Copy yesボタンが押されているときはコピーする。
∙ Cancelボタン: closeDialogメソッドを呼んでダイアログを閉じる。
|
translateContainer
|
private ShapeContainer translateContainer(ShapeContainer container,
boolean copy)
図形を平行移動する。copy=trueのときはcontainerのcloneを作成して平行移動する。
|
closeDialog
|
private void closeDialog()
setVisible(false)でダイアログを閉じる。
SelectionLSのresetreceiverを呼んでSelectionLSから選択図形
を受け取るのをやめる。
|
windowClosing |
public void windowClosing(WindowEvent e)
closeDialog メソッドを呼ぶ。 |
1.3 Class TranslateSpinnerListener
戻る=>page top
class TranslateSpinnerListener implements ChangeListenerr
フィールド
|
説明
|
dialog
|
Translate dialog
Translateオブジェクトをセット。
|
2. 回転移動
戻る=>page top
"click the rotation center"ボックスをチェックし、
キャンバス上または図形上でマウスをクリックすることで回転の中心を指定できる。
図1.2は回転の中心を図形上の点をクリックして指定した場合である。
=>
ConnectionLS概要,
また 図1.2, 1.3 も参照のこと
図2.2 図形上の点をクリックして回転中心を指定
2.1 Rotateクラス
戻る=>page top
public class Rotate extends JDialog
メソッド
|
説明
|
コンストラクタ
|
次のメソッドを呼ぶ。
super(ObjectTable.getDrawMain(), "rotate");
this.setName("rotate");
this.action=new RotateAction(this);
createDialog();
|
createDialog
|
public void createDialog()
∙ ダイアログの表示位置:左上隅に表示する。
∙ ダイアログにWindowListenerを設定する。WindowListenerはRotateAction。
ウインドウが閉じる時に、このダイアログの終了処理を行う。
∙ ダイアログにパネル、ボタン等を設定
上段:メッセージラベルを貼り付けたメッセージパネル
中段:移動量を指示するスピナーとCopy yes/noのラジオボタンを 貼り付けた入力パネル
下段:ボタンを貼り付けたボタンパネル。
∙ positionSpinners[0],[1]にはChangeListenerを設定する。回転の中心が変更されたときに、画面に回転の中心点を表示。
∙ 下段のボタンにはアクションリスナーを設定。ボタンが押された時に
RotateActionで受けられるようにする。
|
showDialog
|
public void showDialog(int commandId)
∙ setVisibleで表示。
∙ 選択されている図形をshapesVectorに登録する。
|
isSuitable
|
private boolean isSuitable(ShapeContainer container)
変換される図形が適切かどうかチェックする。TextBoxを持っている図形は不可。
|
selected
|
public void selected(SelectionEvent event)
このメソッドはSelectionListenerが定義するメソッド。
このメソッドは現在使われていない。
パラメータ:
event - SelectionEvent object.
処理:
SelectionLSで図形が選択されると、このメソッドが呼ばれる。
受け取った図形をshapeVectorに登録する。
|
addConnection
Listener |
public void addConnectionListener()
このオブジェクトをConnectionLS.addConnectionListenerメソッドで
ConnectionLSに登録する。
|
removeConnectionListener
Listener |
public void removeConnectionListener()
このオブジェクトをConnectionLS.removeConnectionListenerメソッドで
ConnectionLSから削除する。
|
connected |
public void connected(ConnectionEvent event)
このメソッドはConnectionListenerが定義するメソッド。
引数:
event - ConnectionEventオブジェクト
|
showMessage
|
protected void showMessage(String message)
ラベルにメッセージを表示する。
|
getSelectedContainers
|
public ShapeContainer[] getSelectedContainers()
shapeVectorに登録されている図形を配列で返す。
|
setRotationCenterpPoint
|
public void setRotationCenterpPoint()
選択されている図形(複数)の中心点を求め、positionSpinnersに値を設定する。
drawTempShapeメソッドで画面に回転の中心を赤マークで表示する。
これは図形を選択したときのデフォールトの回転中心であり、スピナーに書き込まれた場合は、SpinnerListenerオブジェクトで画面に表示する。
|
setValuesTo
PositionSpinners |
public void setValuesToTPositionSpinners()
rotationCenterPの(x,y)を positionSpinnersに設定する。 |
getPositionSpinners
|
public JSpinner[] getPositionSpinners()
回転の中心を設定するスピナーを2個の配列で返す。
|
getPositionSpinnerModels
|
public SpinnerNumberModel[] getPositionSpinnerModels()
回転の中心を設定するスピナーモデルを2個の配列で返す。
|
getAngleSpinner
|
public JSpinner getAngleSpinner()
回転角を設定するスピナーを返す。
|
getAngleSpinnerModel
|
public SpinnerNumberModel getAngleSpinnerModel()
回転角を設定するスピナーモデルを返す。
|
getCopyButton
|
public JRadioButton getCopyButton()
Copy yesボタンを返す。
|
getShapesVector
|
public Vector getShapesVector()
shapeVectorを返す。
|
2.2 RotateActionクラス
戻る=>page top
class RotateAction extends AbstractAction implements WindowListener
2.3 RotateSpinnerListenerクラス
戻る=>page top
class RotateSpinnerListener implements ChangeListener
メソッド
|
説明
|
stateChanged
|
public void stateChanged(ChangeEvent e)
スピナーの設定値が変更されたときに呼ばれる。
positionSpinnerModelsの値を取り出し、回転の中心点を画面に表示する。
|
3. 鏡映変換
戻る=>page top
水平方向、垂直方向の鏡映変換
ダイアログで方向とCopyの可否を設定し"GO"ボタンを押すと実行する。
∙ ダイアログ表示前に図形を選択しておく。
ダイアログを開いたときに図形が選択されていないと、
"select shapes before this command!"のメッセージが表示される(図3.1)。
∙ "copy yes"ボタンを選ぶと、図形のコピーを変換する。
変換された図形は見易さのため少しずらして配置する。copy noの場合は元の位置に配置する。
(a)元の図形
(b) Copy yesで変換
|
図3.1
|
3.1 Flipクラス
戻る=>page top
public class Flip extends JDialog
フィールド
|
説明
|
action
|
FlipAction action
FlipActionを設定する。
|
messageLabel
|
JLabel messageLabel
ダイアログの一番上のメッセージラベルを設定。showMessageメソッドで書き込む。
|
hButton
|
JRadioButton hButton
ダイアログでHorizontallyを指示するボタン
|
vButton
|
JRadioButton vButton
ダイアログでVerticallyを指示するボタン
|
copyButton
|
JRadioButton copyButton: Copy yesボタンオブジェクトを設定。
|
goButton
|
JButton goButton:Goボタンオブジェクトを設定。
|
cancelButton
|
JButton cancelButton:Cancelボタンオブジェクトを設定。
|
shapeVector
|
Vector shapeVector
選択された図形を格納する。
|
メソッド
|
説明
|
コンストラクタ
|
public Flip()
フィールド変数mainにこのオブジェクトを設定。
createDialogを呼んでダイアログオブジェクトを作成。
|
createDialog
|
public void createDialog()
処理:
∙ ダイアログの表示位置:左上隅に表示する。
∙ ダイアログにWindowListenerを設定する。WindowListenerはFlipAction。
ウインドウが閉じる時に、このダイアログの終了処理を行う =>
closeDialog。
∙ ダイアログにパネル、ボタン等を設定
上段にメッセージラベルを貼り付けたメッセージパネル、
Horizontally, VerticallyのボタンとCopy yes/noのラジオボタンを貼り付けた入力パネル、
下段にボタンを貼り付けたボタンパネルを配置する。
∙ 下段のボタンにはアクションリスナーを設定。ボタンが押された時にFlipActionで受けられるようにする。
|
showDialog |
public void showDialog(int commandId)
∙ pack、setVisibleで表示。
∙ 選択されている図形
をshapesVectorに登録する。
|
selected
|
public void selected(SelectionEvent event)
このメソッドはSelectionListenerが定義するメソッドである。
このメソッドは現在使われていない。
引数:
event - SelectionEvent object.
処理:
SelectionLSで図形が選択されると、このメソッドが呼ばれる。
受け取った図形をshapeVectorに登録する。
|
showMessage
|
protected void showMessage(String message, Color color)
ラベルにメッセージを表示する。
|
getSelectedContainers
|
public ShapeContainer[] getSelectedContainers()
shapeVectorに登録されている図形を配列で返す。
|
getHorizontalButton
|
public JRadioButton getHorizontalButton()
フィールド変数hButtonを返す。
|
getCopyButton
|
public JRadioButton getCopyButton()
Copy yesボタンを返す。
|
getShapeVector
|
public Vector getShapeVector()
shapeVectorを返す。
|
3.2 FlipActionクラス
戻る=>page top
class FlipAction extends AbstractAction implements WindowListener
メソッド
|
説明
|
actionPerformed
|
public void actionPerformed(ActionEvent e)
処理:
ボタンが押されたときに、アクション処理を実行する。
∙ Goボタン:this.flipContainerメソッドで図形を鏡映変換する。Copy yesボタンが押されているときはコピーする。
this.rotateContainerで変換を行う。変換マトリックスは
Matrix2D.getFlipMatrixで作成する。
Undoの設定を行う。
∙ Cancelボタン: closeDialogメソッドを呼んでダイアログを閉じる。
|
flipContainer
|
private ShapeContainer flipContainer(Matrix2D flipMatrix, ShapeContainer
container, boolean copy)
処理:
図形を鏡映変換する。copy=trueのときはcontainerのcloneを作成して鏡映変換する。
グループ図形の場合の処理を行う。
|
closeDialog
|
private void closeDialog()
処理:
setVisible(false)でダイアログを閉じる。
SelectionLSのresetSelectionReceiverを呼んでSelectionLSから
選択図形を受け取るのをやめる。
|
windowClosing
|
public void windowClosing(WindowEvent e)
closeDialogメソッドを呼ぶ。
|
|