View this PageEdit this PageAttachments to this PageHistory of this PageHomeRecent ChangesSearch the SwikiHelp Guide

funfunfun22

PREV ------ ● TOP ● ------ NEXTUploaded Image: fmrph.jpg


スケッチポリゴンモーフ

ってなわけでさっそく作ってみまする。
1)モーフを左クリックするとスタートします。
2)左クリックで黒い点を打ち、点と点は赤いラインで結ばれます。
3)好みの形が出来たら右クリックで終了。
4)ポリゴンモーフがその形に変更されます。
5)モーフを右ドラッグで移動できます。
・・・・ってなやつね。

■クラスを作る

PlygonMorphを親にして新しくクラスを定義しましょう。
--------------------------------------------
PolygonMorphsss subclass: #TestMorph11
	instanceVariableNames: ''
	classVariableNames: ''
	poolDictionaries: ''
	category: 'MyMorph'
--------------------------------------------
アクセプト。
Alt + s ( Cmd + s )

Uploaded Image: image25.jpg



■メソッドを追加

モーフの形は十字架にしよっと。(深い意味はないよ〜ン)
と軽く始めたんだけど、実はこれってけっこう苦労したです。なぜかというと・・・

vertices _ Array with: 0@0 with: 100@0 〜〜

みたくポイントの座標を繋げていったんだけどうまくいかないんだよね。
で、いろいろと調べてみて下のようにしたらうまくいったです。
(お馬鹿なおいらはいまだによくわかってないんだけどね・・・)
--------------------------------------------
initialize
	super initialize.
	vertices _ {50@50. 70@50. 70@30. 90@30. 90@50. 110@50. 110@70. 90@70. 90@90. 70@90. 70@70. 50@70}.
	borderWidth _ 1.
	color _ Color red darker.
	borderColor _ Color black.
	closed _ true.
	smoothCurve _ false.
	arrows _ #none.
	self computeBounds.
--------------------------------------------
アクセプト。
Alt + s ( Cmd + s )

Uploaded Image: image26.jpg



■インスタンスをだしてみる

確認の為Workspaceに下記のコードを書いてドゥーイット。

--------------------------------------------
TestMorph12 new openInWorld
--------------------------------------------
Alt + d ( Cmd + d )

Uploaded Image: image27.jpg


ちゃんと十字架になってるね。

Uploaded Image: image28.jpg



■マウスアップメソッドだしょ。

モーフを左クリックすると仮の描画モードになるです。
ポイントとラインの描画は準備体操でやったやつね。(緑色のとこだよん)
各ポイントを配列のptsにどんどん入れてってまするな。
右クリックで仮の描画モードを終了させ
ptsに入った各ポイントの座標をsetVerticesで入れ替えてまする。
--------------------------------------------
mouseUp: evt
	| pts fc lastPt nextPt flag |
	fc _ FormCanvas on: Display.
	pts _ StrokeSimplifier new.
	lastPt _ Sensor waitClickButton.
	(Form dotOfSize: 5) displayAt: lastPt.
	pts add: lastPt.
	flag _ true.
	[flag] whileTrue:
		[Sensor waitButton.
		 Sensor redButtonPressed 
		ifTrue: [
			nextPt _ Sensor waitClickButton.
			(Form dotOfSize: 5) displayAt: nextPt.
			pts add: nextPt.
			fc line: lastPt to: nextPt width: 1 color: Color red.
			lastPt _ nextPt]
		ifFalse: [
			flag_false]
	].
	pts closeStroke.
	self setVertices: pts finalStroke.
	self makeClosed; addHandles	
--------------------------------------------
アクセプト。
Alt + s ( Cmd + s )

Uploaded Image: image29.jpg


今回もモーフを右クリックでドラッグ移動出来るようにしました。
--------------------------------------------
handlesMouseDown: evt
	^ evt yellowButtonPressed not.
--------------------------------------------


Uploaded Image: image30.jpg


実際にやってみるとこんな感じになりまするです。

Uploaded Image: image31.jpg



問題は仮描画のとき、ゆっくりとマウスダウンして点を打たないとだめってとこですな。
(なんかもったりとしちゃうのが難点でする)
それとモーフを左クリックで描画モードにするより、右クリックでってのがいいかも・・・
ま、テスト版なのでいいか。改めて今度はそこら辺を考えてちゃんとつくろっと。

PREV ------ ● TOP ● ------ NEXT







■ MEMO ■

Monday, 16 February 2004, 3:34:26 am
それにしてももうすこしちゃんとCollectionクラスを勉強しなくちゃだわ。--thoru

Links to this Page