funfunfun22
スケッチポリゴンモーフ
ってなわけでさっそく作ってみまする。
1)モーフを左クリックするとスタートします。
2)左クリックで黒い点を打ち、点と点は赤いラインで結ばれます。
3)好みの形が出来たら右クリックで終了。
4)ポリゴンモーフがその形に変更されます。
5)モーフを右ドラッグで移動できます。
・・・・ってなやつね。
■クラスを作る
PlygonMorphを親にして新しくクラスを定義しましょう。
--------------------------------------------
PolygonMorphsss subclass: #TestMorph11
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'MyMorph'
--------------------------------------------
アクセプト。
Alt + s ( Cmd + s )
■メソッドを追加
モーフの形は十字架にしよっと。(深い意味はないよ〜ン)
と軽く始めたんだけど、実はこれってけっこう苦労したです。なぜかというと・・・
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 )
■インスタンスをだしてみる
確認の為Workspaceに下記のコードを書いてドゥーイット。
--------------------------------------------
TestMorph12 new openInWorld
--------------------------------------------
Alt + d ( Cmd + d )
ちゃんと十字架になってるね。
■マウスアップメソッドだしょ。
モーフを左クリックすると仮の描画モードになるです。
ポイントとラインの描画は準備体操でやったやつね。(緑色のとこだよん)
各ポイントを配列の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 )
今回もモーフを右クリックでドラッグ移動出来るようにしました。
--------------------------------------------
handlesMouseDown: evt
^ evt yellowButtonPressed not.
--------------------------------------------
実際にやってみるとこんな感じになりまするです。
問題は仮描画のとき、ゆっくりとマウスダウンして点を打たないとだめってとこですな。
(なんかもったりとしちゃうのが難点でする)
それとモーフを左クリックで描画モードにするより、右クリックでってのがいいかも・・・
ま、テスト版なのでいいか。改めて今度はそこら辺を考えてちゃんとつくろっと。
▲PREV ------ ● TOP ● ------ NEXT▼
■ MEMO ■
Monday, 16 February 2004, 3:34:26 am
それにしてももうすこしちゃんとCollectionクラスを勉強しなくちゃだわ。--thoru
Links to this Page
- FunFunFunMorphic last edited on 25 March 2004 at 5:25:44 am by tk0005-202x210x196x109.ap-TK.usen.ad.jp
- funfunfun21 last edited on 30 November 2009 at 9:49:08 am by localhost.localdomain
- funfunfun23 last edited on 17 June 2007 at 7:03:48 am by localhost.localdomain