0

Squeak-Smalltalk の Morphic で円の 4 分の 1 を描こうとしています。それはどのように機能しますか?

前もって感謝します!

4

1 に答える 1

2

最良の教師はイメージそのものです。CircleMorph でブラウザーを開くと、そのスーパークラスである EllipseMorph が #drawOn: を定義していることがわかります。これは、モーフが自身を描画する方法です。そこから、カスタム モーフを作成するためのすべての情報とインスピレーションを得ることができます。

更新:最初に考えたのは、手で描画することでした (#drawOn: を完全にオーバーライドします) が、Canvas には明らかな候補がありませんでした。クリッピング四角形を 4 分の 1 に設定して円自体を描画させることで、ほぼワンライナーになりました。

更新 2: 1/4 円のトリックは、CircleMorph にほとんどの作業を任せることです! 私が思いついた最高のものは次のとおりです。

QuarterCircleMorph>>drawOn: aCanvas

    | realBounds |
    "Save the actual bounds of the morph"
    realBounds := bounds.

    "Pretend the bounds are 4x as big"
    bounds := bounds bottom: bounds bottom + bounds height.
    bounds := bounds right: bounds right + bounds width.

    "Let CircleMorph handle the drawing"
    super drawOn: aCanvas.

    "Restore the actual bounds"
    bounds := realBounds.

QuarterCircleMorph は CircleMorph のサブクラスです。実際の境界を超えて描画することはできないため、すべてがうまくいきます。nb実際のコードでは、コメントはやり過ぎです(おそらく4xのものを除いて、それはおそらくリファクタリングの兆候です:))

于 2011-12-06T19:02:11.797 に答える