1. 図形要素の種類
矩形(RectangleElement)、コーナーR矩形(RoundRectangleElement)、楕円/円(EllipseElement)、
直線(LineElement)、折れ線(PolylineElement)、三次曲線(CubicCurveElement)、
一般曲線(GeneralCurveElement)など。GeneralCurveElementは
図形の切断、
曲線の結合の結果得られる曲線で、
直線、楕円/円弧、折れ線、三次曲線を任意に接続した形式をしている。
特殊な図形要素としてはImageElementがある。これは画面上で選択した図形のイメージ(画像)を要素とするもので、
他のアプリケーションとCopy and Pasteでimageのやり取りを行うために用意した要素である。
MS Word, MS PowerPointへのPasteやその逆のPasteもできる。
もうひとつの特殊な図形要素はグループ要素で、図形データは持たず子要素(ShapeContainer)のリストを持っている。
2. ShapeElement抽象クラス
戻る=>page top
public abstract class ShapeElement
ShapeElement抽象クラスが図形要素のベースであり、各種の図形要素はこのクラスの拡張クラスとして定義される。
フィールド
|
説明
|
shapeContainer
|
ShapeContainer shapeContainer
この図形要素を保有するShapeContainerを設定する。
|
curve2D
|
Curve2D curve2D
図形要素の直線、曲線を表すパラメトリック曲線(Curve2D)。
|
curve2DSave
|
Curve2D curve2DSave
mouseStartメソッドで設定される。
mouseDraggedメソッドで図形の移動・リサイズなどを行うとき、初期状態を記録する。
このフィールドにはCurve2Dデータを記録する。
|
textAreaSave |
Rectangle2D textAreaSave
ShapeContainerが保持するTextBoxオブジェクトの領域< A href="TextBox.php#TextBox.textArea" target="_self">textAreaをストアする。
|
startPoint
|
Point2D startPoint
通常はマウスドラッグの開始点を設定する。
|
startBox
|
Rectangle2D startBox
mouseStartメソッドで設定される。
mouseDraggedメソッドで図形の移動・リサイズなどを行うとき、初期状態を記録する。
このフィールドには図形要素を囲む矩形を記録する。
|
discreteAngledLine |
DiscreteAngledLine discreteAngledLine
mouseStartメソッドで設定される。
このフィールドにはDiscreteAngledLine オブジェクトを記録する。 |
workVector
|
Vector workVector
作業用Vector
|
メソッド
|
説明
|
getTypeE
(abstract)
|
public abstract int getTypeE()
Commandクラスで定義されている図形要素の種類を表す定数を返す。
Command.RECTANGLE/ROUNDRECTAGLE/ELLIPSE/IMAGE/LINE/POLYLINEなど
|
getShapeIdString
(abstract)
|
public abstract String getShapeIdString
図形要素を表す文字列を返す。"Rectangle、"Round_Rectangle"、"Line"、"Polyline"など
|
getShapeContainer
|
public ShapeContainer getShapeContainer()
フィールド変数shapeContainerを返す。
|
setShapeContainer
|
public void setShapeContainer(ShapeContainer container){
フィールド変数shapeContainerに引数を設定する。
|
isClosed
|
public boolean isClosed()
閉図形のときtrueを返す。Curve2DのisClosedメソッドを呼ぶ。
|
getShape
|
public Shape getShape()
java.awtに含まれるShapeインタフェースをインプリメントしたデータを取り出す。
ある点がShape図形の内部にあるかどうかをチェックするために良く使われる。
Shapeデータの取り出し方 => java.awt.geomの機能拡張
|
getCurve2D
|
public Curve2D getCurve2D()
フィールド変数curve2Dを返す。
|
setCurve2D
|
public void setCurve2D(Curve2D curve2D)
フィールド変数curve2Dに引数の値を設定する。
|
getGeneralCurveElement |
public GeneralCurveElement getGeneralCurveElement()
一般図形要素を GeneralCurveElementに変換して返す。
曲線を切断・分割を伴う処理で1本の曲線がマルチパス(サブパス)になる場合に、
それらが取り扱いできるGeneralCurveElementに変換するために使われる。
このメソッドの逆操作はGeneralCurveElement.getSimpleShapeElementsメソッド。
|
getSerializableCurve2D
|
public abstract SerializableCurve2D getSerializableCurve2D()
ファイル書き込み用のデータだけからなる(メソッドを持たない)オブジェクトを取り出す。
Curve2D.getSerializableCurve2Dを呼ぶ。
|
setSerializableCurve2D
|
public void setSerializableCurve2D(SerializableCurve2D sdata)
ファイル書き込み用のデータSerializableCurve2Dをこの図形要素オブジェクトにセットする。
図形要素をSerializableCurve2Dから再構成する場合に使う。
・SerializableCurve2D.serializableSegments
フィールドに設定されているSerializableSegment2Dの配列データを取り出す。
・SerializableSegment2Dの配列データから、Segment2Dの配列データを作成する
このSegment2Dの配列データからCurve2Dデータを作成し、この図形要素オブジェクトにセットする。
Curve2Dは抽象クラスなのでコンストラクターは直接呼べない。Curve2Dの拡張クラスのコンストラクターを呼んでCurve2Dデータを作成する。
=> SerializableCurve2DからCurve2Dを作成する方法
|
getBoundingBox
|
public Rectangle2D getBoundingBox()
図形要素を囲むBoundingBoxを返す。
|
getEndPTs
|
public abstract Point2D[] getEndPTs()
閉じていない図形要素の場合に両端の点を返す。閉じた図形要素の場合は長さ0の配列を返す。
|
createTextArea
(abstract)
|
public abstract Rectangle2D createTextArea()
ShapeContainer.addTextBoxメソッドから呼ばれる。
戻り値:
TextBoxオブジェクトのテキスト領域(textArea)を決めるRectangle2Dオブジェクトを返す。
処理:
この図形要素を保持するShapeContainerオブジェクトに
ShapeContainer.addTextBoxメソッドでTextBoxを追加するとき、
このメソッドでテキスト領域(textArea)を表すRectangle2D取得する。
テキスト領域(textArea)はこのクラスが保持するcurve2Dに内接する矩形(Rectangle2D)である。
基本図形(RectangleElement,
RoundRectangleElement,
EllipseElement,...)に内接する矩形は簡単に求まるが、
折れ線(PolylineElement)、
三次曲線(CubicCurveElement)などの場合は少し面倒である。
特に凹部を持つ場図形の場合は厄介である。
この場合、ShapeElementUtil.getInscribedBoxで内接する矩形を取得する。
: このメソッドの実装はこのクラスの拡張クラスで行う。
=> 操作説明書
テキストボックス作成、追加、削除
|
getSegmentModifiers
(abstract)
|
public abstract SegmentModifier[] getSegmentModifiers()
|
getModifierPTs
(abstract)
|
public abstract Point2D[] getModifierPTs()
|
getSegmentModifiers
(abstract)
|
public abstract SegmentModifier[] getSegmentModifiers()
図形を変形するModifyShapeクラスで使う、制御点、接線ベクトルなどの制御用図形(SegmentModifier)を作成する。
ModifyShapeで変形できる図形要素は限定されているので注意。変形できない図形要素の場合、長さ0の配列を返す。
=> ModifyShape、SegmentModifier |
getModifierPTs
(abstract)
|
public abstract Point2D[] getModifierPTs()
MousePositionLSで参照する。
マウスがこの制御点にヒットするとMousePositionInfo.CONTROL_POINTの位置情報を返す。
ここで言う制御点は制御用図形(SegmentModifier)
から得られる全ての制御点で、例えば、折れ線の線分の中点、接線方向表示の線分の両端点などを含む。
|
mouseStart
|
public void mouseStart(int ctrl, Point2D starPoint)
引数:
ctrl - マウスドラッグでShftキー/Ctrlキーを押している時、1または2、マウス右ボタンが押されるとctrl=3が渡される。
startPoint - ラッグ開始点マウスドラッグの開始時に呼ばれ、ドラッグ開始点を受け取る。
処理:
このメソッドはマウスボタンが押された時に
MoveResizeShapeLS.init,
ModifyShapeLS.mousePressed メソッドから呼ばれ、
マウスドラッグの間に書き換えられるデータをストアしておく。
これらのデータはマウスドラッグの間に初期データとして参照される。
|
mouseEnd
|
public abstract void mouseEnd()
現在のところ何もしない。
|
create
(abstract)
|
public abstract void create (Point2D startPoint, Point2D currentPoint)
CreateShapeLS.mouseDraggedメソッドから呼ばれる
引数:
startPoint - ドラッグ開始点
currentPoint - ドラッグ現在点
処理:
このメソッドは直線を作る場合に呼ばれる。
|
create
(abstract)
|
public abstract void create(Point2D[] points)
CreateShapeLS.mouseMovedメソッドから呼ばれる。
節点列を受け取り、折れ線、三次曲線を作成する。
|
create
(abstract)
|
public abstract void create(Rectangle2D boundingBox)
CreateShapeLS.mouseDraggedメソッドから呼ばれる。
引数:
boundingBox - 作成中の閉図形を囲むBoxが渡される。
処理:
引数のBoxにフィットする閉図形を作る。
|
move
|
public void move(int ctrl, Point2D currentPoint, boolean moveTextBox)
引数:
ctrl - Shift /Ctrlキーを押しなががらドラッグすると1 or 2が渡される。
currentPoint - マウスドラッグの現在点。
moveTextBox - trueならばテキストボックスも移動する。
処理:
MoveResizeShapeLSの
mouseDraggedから呼ばれ、この図形要素を移動する。
:
このメソッドを呼ぶ前に mouseStart メソッドを呼ぶ必要がある。
|
resize |
public void resize(int ctrl, Point2D currentPoint, int mousePositionCode,
boolean resizeTextBox)
引数:
ctrl - Shift /Ctrlキーを押しなががらドラッグすると1 or 2が渡される。
currentPoint - マウスドラッグの現在点。
mousePositionCode - MousePositionInfo
が定義している位置情報で、この場合 NW_RESIZE - SW_RESIZE, N_RESIZE- W_RESIZEなど。
resizeTextBox - trueならばテキストボックスもリサイズする。
処理:
MoveResizeShapeLSの
mouseDraggedから呼ばれ、
この図形要素をリサイズする。
ShapeElementUtil.resizeRectangle スタテックメソッドで処理する。
:
(1) このメソッドを呼ぶ前に mouseStart メソッドを呼ぶ必要がある。
(2) このメソッドは UNRESIZABLE、
KEEP_ASPECT_RATIOのプロパティを考慮して動作する。
|
moveResize
|
public void resize(Rectangle2D oldBox, Rectangle2D newBox, boolean resizeTextBox)
引数
oldBox: - 古いboxデータ。
newBox: - 現在のboxデータ。
resizeTextBox - trueならばテキストボックスもリサイズする。
処理:
oldBoxとnewBoxから移動量、拡大または縮小率を計算して、この図形要素に対し移動とリサイズの両方を実行する。
Segment2D.resizeSegmentメソッドで変換を行う。
この図形要素を持つShapeContainerがTextBoxを持てば、TextBoxもリサイズする。
|
moveEndPoint
(abstract)
|
public abstract void moveEndPoint(int ctrl, int movePtIndex, Point2D currentPoint)
MoveResizeShapeLS.mouseDraggedから呼ばれる。
引数:
ctrl - マウスドラッグでShftキー/Ctrlキーを押している時、1/2が渡される。
movingPtIndex - この引数が0のとき始点を動かす。0でないときは終点を動かす。
currentPoint - 現在のドラッグ点
処理:
曲線の端点をマウスで動かす場合に呼ばれる。
|
moveEndPoint
(abstract)
|
public abstract void moveEndPoint(int ctrl, int movePtIndex, Point2D oldPoint, Point2D newPoint)
引数:
ctrl - 移動方向を水平・垂直に限定するときは1/2を設定する。
movingPtIndex - この引数が0のとき始点を動かす。0でないときは終点を動かす。
oldPoint - 動かす点の位置。
newPoint - 動かす点の新しい位置。
処理:
このメソッドはマウスドラッグ情報なしに端点を移動するときに使う。
|
modify
(abstract) |
public abstract void modify(int ctrl, Point2D oldPoint, Point2D currentPoint)
RoundRectangleElement, PolylineElement, CubicCureveElement, GeneralCurveElement |
transform
|
public void transform(Matrix2D M)
この図形要素の輪郭線を表すCurve2Dデータに対して座標変換を施す。
引数:
M - Matrix2Dの変換マトリックス。
処理:
Segment2D.transformSegmentメソッドで変換を行う。
|
clone
(abstract)
|
public abstract Object clone()
図形要素のクローンを作成して返す。
|
toString
(abstract)
|
public abstract String toString()
図形要素の文字列表現を返す。
|
:
SerializableCurve2DからCurve2Dを作成する方法
int curve2Dtype=sdata.type;
switch(curve2Dtype){
case Curve2D.RECTANGLE :{
this.curve2D=new Rectangle2DE(segments); break;
}
case Curve2D.ROUND_RECTANGLE :{
this.curve2D=new RoundRectangle2DE(segments); break;
}
case Curve2D.ELLIPSE :{
this.curve2D=new Ellipse2DE(segments); break;
}
case Curve2D.LINE:{
this.curve2D=new Line2DE(segments); break;
}
case Curve2D.POLYLINE:{
this.curve2D=new Polyline2DE(segments); break;
}
case Curve2D.CUBIC_CURVE :{
this.curve2D=new CubicCurve2DE(segments); break;
}
case Curve2D.GENERAL_CURVE :{
this.curve2D=new GeneralCurve2DE(segments); break;
}
} //switch
3. RectangleElement(矩形要素)クラス
戻る=>page top
public class RectangleElement extends ShapeElement
メソッド
|
説明
|
getTypeE
|
public int getTypeE()
Command.RECTANGLEを返す。
|
getShapeIdString
|
public String getShapeIdString()
"Rectangle"を返す。
|
createTextArea
|
public Rectangle2D createTextArea()
このRectangleElementと同じ大きさのRectangle2Dを返す。
|
getSegmentModifiers
|
public SegmentModifier[] getSegmentModifiers()
この図形要素は変形できない。長さ0の配列を返す。
|
getModifierPTs
|
public CurvePT[] getModifierPTs()
この図形要素は変形できない。長さ0の配列を返す。
|
create
|
public void create(Rectangle2D boundingBox)
boundingBoxのデータを使いRectangle2DEコンストラクタでオブジェクトを作成し、フィールド変数curve2Dに設定する。
=> ShapeElement.create
|
moveEndPoint
|
public void moveEndPoint(int ctrl, int movePtIndex, Point2D currentPoint)
現在のところ使っていない
|
moveEndPoint
|
public void moveEndPoint(int ctrl, Point2D oldPoint, Point2D currentPoint)
現在のところ使っていない
|
modify |
public void modify(int ctrl, Point2D oldPoint, Point2D currentPoint)
なにもしない。 |
modifyPoint |
public void modifyPoint(Point2D point, String command){}
なにもしない。 |
clone
|
public abstract Object clone()
図形要素のクローンを作成して返す。
|
toString
|
public abstract String toString()
図形要素の文字列表現を返す。
|
4. RoundRectangleElement(コーナーR矩形要素)クラス
戻る=>page top
public class RoundRectangleElement extends ShapeElement
メソッド
|
説明
|
getTypeE
|
public int getTypeE()
Command.ROUND_RECTANGLEを返す。
|
getShapeIdString
|
public String getShapeIdString()
"Round_Rectangle"を返す。
|
createTextArea
|
public Rectangle2D createTextArea()
このRoundRectangleElementに内接するRectangle2Dを返す。
|
getSegmentModifiers
|
public SegmentModifier[] getSegmentModifiers()
この図形要素はコーナーRの半径を変更することができる。
左下隅のコーナーRの端点をSegmentModifierにセットして返す。
コーナーRの端点は2個なのでSegmentModifierも2個返す。
|
getModifierPTs
|
public CurvePT[] getModifierPTs()
左下隅のコーナーRの両端点を返す。
|
mouseStart
|
public void mouseStart(int ctrl, Point2D startPoint)
このメソッドは ShapeElement.mouseStartをオーバーライドする。
引数:
ctrl - 1 または 2 (Shift またはCtrl keyを押しているとき), 3 (マウス右ボタンを押したとき)
startPoint - マウスドラッグの開始点(mousePressedメソッドで取得).
処理:
• getSegmentModifiers メソッドを呼んで、
その戻り値をsegmentModifiers フィールドにセットする。
• SegmentModifier.getHitSegmentModifier
メソッドを呼んで、その戻り値を hitSegmentModifier フィールドにセットする。
|
create
|
public void create(Rectangle2D boundingBox)
boundingBoxのデータを使いRoundRectangle2DEコンストラクタでオブジェクトを作成し、フィールド変数curve2Dに設定する。
=> ShapeElement.create
|
moveEndPoint
|
public void moveEndPoint(int ctrl, int movePtIndex, Point2D currentPoint)
現在のところ使っていない
|
moveEndPoint
|
public void moveEndPoint(int ctrl, Point2D oldPoint, Point2D currentPoint)
現在のところ使っていない
|
modify |
public void modify(int ctrl, Point2D oldPoint, Point2D currentPoint)
引数:
ctrl - この図形要素では使用しない。
oldPoint - 一回前に呼ばれたときのドラッグ点。
currentPoint - 現在のドラッグ点。
処理:
コーナRの半径を変更する処理を行う。
マウスボタンを押した点に近い制御点を持つSegmentModifierはフィールド変数
hitSegmentModifierに設定されている。
このSegmentModifierから制御点を取り出し、この制御点が引数のcurrentPointに一致するようにコーナーRの半径を変える。
コーナR 半径が最大に達すると、それ以上は処理しない。
=> コーナーR矩形要素のR部変更
|
modifyPoint |
public void modifyPoint(Point2D point, String command){}
なにもしない。 |
clone
|
public abstract Object clone()
図形要素のクローンを作成して返す。
|
toString
|
public abstract String toString()
図形要素の文字列表現を返す。
|
5. EllipseElement(楕円/円要素)クラス
戻る=>page top
public class EllipseElement extends ShapeElement
メソッド
|
説明
|
getTypeE
|
public int getTypeE()
Command.ELLIPSEを返す。
|
getShapeIdString
|
public String getShapeIdString()
"Ellipse"を返す。
|
createTextArea
|
public Rectangle2D createTextArea()
このEllipseElementに内接するRectangle2Dを返す。
|
getSegmentModifiers
|
public SegmentModifier[] getSegmentModifiers()
この図形要素は変形できない。長さ0の配列を返す。
|
getModifierPTs
|
public CurvePT[] getModifierPTs()
この図形要素は変形できない。長さ0の配列を返す。
|
mouseStart
|
public void mouseStart(int ctrl, Point2D startPoint)
なにもしない。
|
create
|
public void create(Rectangle2D boundingBox)
boundingBoxのデータを使いRoundRectangle2DEコンストラクタでオブジェクトを作成し、フィールド変数curve2Dに設定する。
=> ShapeElement.create
|
moveEndPoint
|
public void moveEndPoint(int ctrl, int movePtIndex, Point2D currentPoint)
現在のところ使っていない
|
moveEndPoint
|
public void moveEndPoint(int ctrl, Point2D oldPoint, Point2D currentPoint)
現在のところ使っていない
|
modify |
public void modify(int ctrl, Point2D oldPoint, Point2D currentPoint)
なにもしない。 |
modifyPoint |
public void modifyPoint(Point2D point, String command){}
なにもしない。 |
clone
|
public abstract Object clone()
図形要素のクローンを作成して返す。
|
toString
|
public abstract String toString()
図形要素の文字列表現を返す。
|
6. ImageElement(イメージ要素)
戻る=>page top
public class ImageElement extends ShapeElement
ImageElementは他の図形要素と異なり、クリップボードから画像をペースト(paste)した時に作成される。
ペーストすると左上隅に小さく表示されるが、画素数は元の画像と同じなので画像の品質は保たれている。
フィールドはShapeElementが宣言するフィールドに次のフィールドが追加になる。
フィールド
|
説明
|
bufferedImage
|
private BufferedImage bufferedImage
イメージデータを記録する。
|
矩形領域にイメージを表示するのでメソッドはRectangleElementとほとんど同じである。
但しimageを扱うための固有のメソッドを持つ。
メソッド
|
説明
|
getTypeE
|
public int getTypeE()
Command.IMAGEを返す。
|
getShapeIdString
|
public String getShapeIdString()
"Image"を返す。
|
createTextArea
|
public Rectangle2D createTextArea()
nullを返す。
|
getBufferedImage
|
public Image getBufferedImage()
フィールド変数bufferedImageを返す。
|
getByteImage
|
public byte[] getByteImage()
Image, BufferedImageクラスはSerializableではないのでファイルに書き込めない。
このメソッドでBufferedImageのデータをByteArrayOutputStreamでbyte配列に書き込む。
|
setByteImage
|
public void setByteImage(byte[] byteData) :ImageElement固有メソッド
getByteImage メソッドの逆操作。byte配列のデータをByteArrayInputStreamでBufferedImageに書き込む。
|
getSamplingPTs
|
public Point2D[] getSamplingPTs(Rectangle2D box)
RectangleElementと同じ。
|
getSamplingCurvePTs
|
public CurvePT[] getSamplingCurvePTs(Rectangle2D box)
RectangleElementと同じ。
|
getSegmentModifiers
|
public SegmentModifier[] getSegmentModifiers()
この図形要素は変形できない。長さ0の配列を返す。
|
getModifierPTs
|
public CurvePT[] getModifierPTs()
この図形要素は変形できない。長さ0の配列を返す。
|
mouseStart
|
public void mouseStart(int ctrl, Point2D startPoint){
現在のところ使っていない
|
create
|
public void create(Rectangle2D boundingBox)
boundingBoxのデータを使いRectangle2DEコンストラクタでオブジェクトを作成し、フィールド変数curve2Dに設定する。
=> ShapeElement.create
|
moveEndPoint
|
public void moveEndPoint(int ctrl, int movePtIndex, Point2D currentPoint)
現在のところ使っていない
|
moveEndPoint
|
public void moveEndPoint(int ctrl, Point2D oldPoint, Point2D currentPoint)
現在のところ使っていない
|
modify |
public void modify(int ctrl, Point2D oldPoint, Point2D currentPoint)
なにもしない。 |
modifyPoint |
public void modifyPoint(Point2D point, String command){}
なにもしない。 |
clone
|
public abstract Object clone()
図形要素のクローンを作成して返す。
|
toString
|
public abstract String toString()
図形要素の文字列表現を返す。
|
7. LineElement(直線要素)
戻る=>page top
public class LineElement extends ShapeElement
メソッド
|
説明
|
getTypeE
|
public int getTypeE()
Command.LINEを返す。
|
getShapeIdString
|
public String getShapeIdString()
"Line"を返す。
|
createTextArea
|
public Rectangle2D createTextArea()
textBoxは付けられない。nullを返す。
|
getSegmentModifiers
|
public SegmentModifier[] getSegmentModifiers()
使用していない。長さ0の配列を返す。
|
getModifierPTs
|
public CurvePT[] getModifierPTs()
使用していない。長さ0の配列を返す。
|
mouseStart
|
public void mouseStart(int ctrl, Point2D startPoint){
ShapeElement.mouseStart メソッドを呼ぶ。
|
create
|
public void create(Point2D startPoint, Point2D currentPoint)
CreateShapeLS.mouseDraggedから呼ばれる。
Line2DEコンストラクタでオブジェクトを作成し、フィールド変数curve2Dに設定する。
=> ShapeElement.create
|
moveEndPoint
|
public void moveEndPoint(int ctrl, int movePtIndex, Point2D currentPoint)
引数:
ctrl - マウスをドラッグするときShift/Ctrlキーを押していると1または2の値が渡される。
movingPtIndex - この引数が0のとき始点を動かす。0でないときは終点を動かす。
currentPoint - 現在のドラッグ点。
処理:
MoveResizeShapeLSのmouseDraggedメソッドから呼ばれる。
=> ShapeElement.moveEndPoint
|
moveEndPoint
|
public void moveEndPoint(int ctrl, int movePtIndex, Point2D oldPoint, Point2D currentPoint)
引数:
ctrl - マウスをドラッグするときShift/Ctrlキーを押していると1または2の値が渡される。
movingPtIndex - この引数が0のとき始点を動かす。0でないときは終点を動かす。
oldPoint - ひとつ前のドラッグ点。
currentPoint - 現在のドラッグ点。
処理:
(注)このメソッドはConnectionクラスのresizeConnectorメソッドからも呼ばれる。 このメソッドはマウスドラッグによらず、一回の操作で直線の端点を動かすために用意してある。
ctrl>0の時は動かす方向を水平/垂直方向に限定する。 |
modify |
public void modify(int ctrl, Point2D oldPoint, Point2D currentPoint)
なにもしない。 |
modifyPoint |
public void modifyPoint(Point2D point, String command){}
なにもしない。 |
clone
|
public abstract Object clone()
図形要素のクローンを作成して返す。
|
toString
|
public abstract String toString()
図形要素の文字列表現を返す。
|
8. PolylineElement(折れ線要素)クラス
戻る=>page top
public class PolylineElement extends ShapeElement
メソッド
|
説明
|
getTypeE
|
public int getTypeE()
Command.POLYLINEを返す。
|
getShapeIdString
|
public String getShapeIdString()
"Polyline"を返す。
|
createTextArea
|
public Rectangle2D createTextArea()
textBoxは付けられない。nullを返す。
|
getSegmentModifiers
|
public SegmentModifier[] getSegmentModifiers()
使用していない。長さ0の配列を返す。
|
getModifierPTs
|
public CurvePT[] getModifierPTs()
使用していない。長さ0の配列を返す。
|
mouseStart
|
public void mouseStart(int ctrl, Point2D startPoint){
ShapeElement.mouseStart メソッドを呼ぶ。
|
create
|
public void create(Point2D[] points)
Polyline2DEコンストラクタでオブジェクトを作成し、フィールド変数curve2Dに設定する。
=>ShapeElement.create
|
moveEndPoint
|
public void moveEndPoint(int ctrl, int movePtIndex, Point2D currentPoint)
引数:
ctrl - マウスをドラッグするときShift/Ctrlキーを押していると1/2の値が渡される。
movePtIndex - 動かす点の識別子、0ならば始点、1ならば終点
currentPoint - 現在のドラッグ点。
処理:
MoveResizeShapeLSのmouseDraggedから呼ばれる。
moveLineSegmentを使って処理する。
|
moveEndPoint
|
public void moveEndPoint(int ctrl, int movePtIndex, Point2D oldPoint, Point2D
currentPoint)
引数:
ctrl - マウスをドラッグするときShift/Ctrlキーを押していると1/2の値が渡される。
movePtIndex - 動かす点の識別子、0ならば始点、1ならば終点
oldPoint - ひとつ前のドラッグ点。
currentPoint - 現在のドラッグ点。
処理:
このメソッドは折れ線をコネクターとして扱うときに便利なリサイズである。
MoveResizeShapeLSのmouseDraggedから呼ばれる。 ctrl>0の時は動かす方向を水平/垂直方向に限定する。
・折れ線の節点数が2点(直線)のときは、movingPointをcurrentPointとoldPointの差分量だけ動かす。
・折れ線の節点が3点以上のとき
movingPointとその隣の点を結ぶ線分を作成してmoveLineSegmentメソッドを呼び、線分を平行移動する。
=>moveEndPointの動作,
図形の移動・リサイズ Polyline 図3, 4
|
moveLineSegment
|
private Line2D moveLineSegment(Line2D line, double moveX, double moveY)
引数:
line - 移動される直線
moveX - x方向移動量
moveY - y方向移動量
戻り値:
下図のnewLineを返す。
処理:
上のmoveEndPointメソッドから呼ばれ、引数lineを長さを変えて平行移動する。
lineの始点は(moveX, moveY)だけ移動し、lineの終点は線分の垂直方向にのみ動かす。
つまりlineの長さは変わるが方向は変わらず、lineの始点は指定量だけ動くのでマウスの動きに追随する。
=> moveEndPointの動作
|
modify
|
public void modify(int ctrl, Point2D oldPoint, Point2D currentPoint)
なにもしない。
|
modifyPoint |
public void modifyPoint(Point2D point, String command){}
なにもしない。 |
clone
|
public abstract Object clone()
図形要素のクローンを作成して返す。
|
toString
|
public abstract String toString()
図形要素の文字列表現を返す。
|
:
moveEndPointの動作
戻る=>page top
四角マークの端点をマウスで動かす。動かす端点の隣の点は、その点と端点を結ぶ線分の垂直方向に動かす。
端点とその隣の点を結ぶ線分の長さは変わるが、平行移動なので方向は変わらない。
Original
|
右端の端点を、右上へ移動
|
Original
|
右下の端点を、右上へ移動
|
元の図形
|
右の楕円を、右下へ移動
接続するコネクターの端点が移動する。
|
9. CubicCurveElement(三次曲線要素)クラス
戻る=>page top
public class CubicCurveElement extends ShapeElement
メソッド
|
説明
|
getTypeE
|
public int getTypeE()
CUBIC_CURVEを返す。
|
getShapeIdString
|
public String getShapeIdString()
"CubicCurve"を返す。
|
createTextArea
|
public Rectangle2D createTextArea()
textBoxは付けられない。nullを返す。
|
getSegmentModifiers
|
public SegmentModifier[] getSegmentModifiers()
使用していない。長さ0の配列を返す。
|
getModifierPTs
|
public CurvePT[] getModifierPTs()
使用していない。長さ0の配列を返す。
|
mouseStart
|
public void mouseStart(int ctrl, Point2D startPoint)
引数:
ctrl - マウスをドラッグするときShift/Ctrlキーを押していると1/2の値が渡される。
startPoint - マウスドラッグ開始点
処理:
ShapeElement.mouseStart メソッドを呼ぶ。
|
create
|
public void create(Point2D[] points)
CubicCurve2DEコンストラクタでオブジェクトを作成し、フィールド変数curve2Dに設定する。
|
moveEndPoint
|
public void moveEndPoint(int ctrl, int movePtIndex, Point2D currentPoint)
何もしない。
|
moveEndPoint
|
public void moveEndPoint(int ctrl, int movePtIndex, Point2D oldPoint, Point2D
currentPoint)
引数:
ctrl - マウスをドラッグするときShift/Ctrlキーを押していると1/2の値が渡される。
movingPoint - 0ならば始点を動かし、1ならば終点を動かす。
oldPoint - 一回前のドラッグ点。
currentPoint - 現在のドラッグ点。
処理:
このメソッドは折れ線の場合と異なり、回転と拡大/縮小変換で図形要素を変換する。
変換マトリックスはMatrix2D.getRotationMatrix
メソッドで作成する。
・CubicCurve2DE.getCtrlPointsで
CubicCurveElementの制御点を全て取り出し、変換マトリックスを作用させる。
|
modify
|
public void modify(int ctrl, Point2D oldPoint, Point2D currentPoint)
なにもしない。
|
modifyPoint |
public void modifyPoint(Point2D point, String command){}
なにもしない。 |
clone
|
public abstract Object clone()
図形要素のクローンを作成して返す。
|
toString
|
public abstract String toString()
図形要素の文字列表現を返す。
|
10. GeneralCurveElementクラス
戻る=>page top
public class GeneralCurveElement extends ShapeElement
:
任意の曲線セグメントを接続した曲線要素。曲線の切断・接続操作の結果として作成される。マウスドラッグ、マウスクリックなどの操作では作られないのでcreateメソッドはダミーにしている。
複数本の曲線からなるマルチパス(サブパス)を扱うことができる。
11. GroupElement(グループ要素)クラス
戻る=>page top
public class GroupElement extends ShapeElement
ShapeElementの拡張クラス。
グループ図形はGroupElementに子要素(ShapeContainer)へのリンクを持たせる。
グループ図形をさらにグループ化することもあるので、次の図のような階層構造になる。
Groupはグループ図形、Elementは単一図形、
ContainerListはContainerManagerが管理する1ページ分の図形データのリストである。
ここでElementはRectangleElement, RoudRectangleElement, PolylineElement..など単一図形要素を持つShapeContainerを表し、
GroupはGroupElementを持つShapeContainerを表している。
図11.1 グループ図形
フィールド変数には子要素のリストを追加する。図形データを持たないのでほとんどが無効なメソッドである。
フィールド
|
説明
|
childrenList
|
private ArrayList childrenList
子要素(ShapeContainer)を格納するリスト。子要素はクループ図形でも良い。
|
メソッド
|
説明
|
getTypeE
|
public int getTypeE()
Command.GROUPを返す。
|
getShapeIdString
|
public String getShapeIdString()
"Group"を返す。
|
isClosed
|
public boolean isClosed():falseを返す。
|
getShape
|
public Shape getShape():nullを返す。
|
getCurve2D
|
public Curve2D getCurve2D():nullを返す。
|
setCurve2D
|
public void setCurve2D(Curve2D curve2D):なにもしない
|
getSerializableCurve2D
|
public SerializableCurve2D getSerializableCurve2D():nullを返す。
|
setSerializableCurve2D
|
public void setSerializableCurve2D(SerializableCurve2D curve2D) :何もしない。
|
getBoundingBox
|
public Rectangle2D getBoundingBox()
・図形要素を囲むBoundingBoxを返す。図形要素のタイプに依存するメソッド。
ShapeContainerやGroupcontainerにも同名のメソッドがある。
ShapeContainerのgetBoundingBoxはこのメソッドの戻り値をそのまま返し、
GroupcontainerのgetBoundingBoxはGroupElement.getBoundingBoxで所属する図形要素のBoundingBoxを全て囲むBoundingBoxを作って返す。
いずれにしろこのメソッドがベースとなっている。
|
getEndPTs
|
public Point2D[] getEndPTs():長さ0の配列を返す。
|
createTextArea
|
public Rectangle2D createTextArea():nullを返す。
|
getSegmentModifiers
|
public SegmentModifier[] getSegmentModifiers():nullを返す。
|
getModifierPTs
|
public Point2D[] getModifierPTs():長さ0の配列を返す。
|
mouseStart
(override)
|
public void mouseStart(int ctrl, Point2D startPoint)
このメソッドは ShapeElement.mouseStartをオーバーライドする。
引数:
ctrl - 1 or 2 (with holding down the Shift or Ctrl key).
startPoint - The start point of the mouse drag.
処理:
Calls the mouseStart method of each child shape element.
|
create
|
public void create (Point2D startPoint, Point2D currentPoint):何もしない。
|
create
|
public void create(Point2D[] points):何もしない。
|
create
|
public void create(Rectangle2D boundingBox):何もしない。
|
move
(override)
|
public void resize(Rectangle2D oldBox, Rectangle2D newBox)
このメソッドはShapeElement.move メソッドをオーバーライドする。
グループに含まれている非グループ要素をgetGroupedSingleShapeContainers で取得し、
各要素のmoveResizeメソッドを使ってを移動する。
|
resize (override)
|
public void resize(Rectangle2D oldBox, Rectangle2D newBox)
このメソッドはShapeElement.resize メソッドをオーバーライドする。
グループに含まれている非グループ要素を getGroupedSingleShapeContainers で取得し、
各要素のmoveResizeメソッドを使ってを移動する。
|
moveResize (override)
|
public void resize(Rectangle2D oldBox, Rectangle2D newBox, boolean resizeTextBox)
このメソッドはShapeElement.resize メソッドをオーバーライドする。
グループに含まれている非グループ要素を getGroupedSingleShapeContainers で取得し、
各要素のmoveResizeメソッドを使ってを移動する。
|
resize
|
public void resize(Rectangle2D oldBox, Rectangle2D newBox)
getGroupedSingleShapeContainersメソッドでグループ要素に属する全ての
単一図形を取り出しリサイズを行う。
|
moveEndPoint
|
public void moveEndPoint(int ctrl, Point2D oldPoint, Point2D currentPoint):何もしない。
|
getChildrenList
(proprietary)
|
public ArrayList getChildrenList()
グループの子要素リストを返す。
|
setChildrenList
(proprietary)
|
public void setChildrenList(ArrayList childrenList)
子要素リストを設定する。
|
getChildren
(proprietary)
|
public ShapeContainer[] getChildren()
グループ直下の子要素を配列で返す。
|
addChildren
(proprietary)
|
public void addChildren(ShapeContainer container)
子要素をグループに追加する。
|
getGroupedContainers
(proprietary)
|
public ShapeContainer[] getGroupedContainers()
このグループ要素の下位に存在する全ての子要素を再帰的に検索して配列で返す。次の同名メソッドを呼ぶ。
|
getGroupedContainers
(proprietary)
|
protected void getGroupedContainers(Vector vector)
このグループ要素の下位に存在する全ての子要素を再帰的に検索してvectorに格納する。
|
getGroupedSingleShape
Containers
(proprietary)
|
public ShapeContainer[] getGroupedSingleShapeContainers()
このグループ要素の下位に存在する図形データを持つ全ての子要素を再帰的に検索して配列で返す。
次の同名メソッドを呼ぶ。
|
getGroupedSingleShape
Containers
(proprietary)
|
protected void getGroupedSingleShapeContainers(Vector vector)
このグループ要素の下位に存在する図形データを持つ全ての子要素を再帰的に検索してvectorに格納する。
|
clone
|
public Object clone():何もしない
|
toString
|
public String toString()
文字列表現を返す。
|
|