Скрип Круг - PullRequest
       34

Скрип Круг

0 голосов
/ 06 декабря 2011

Я пытаюсь нарисовать четверть круга с Морфиком в Squeak-Smalltalk.Как это работает?

Заранее спасибо!

1 Ответ

2 голосов
/ 06 декабря 2011

Лучшим учителем является само изображение. Если вы откроете браузер в CircleMorph, вы увидите, что его суперкласс, EllipseMorph, определяет #drawOn:, то есть, как морфы рисуют сами. Оттуда вы можете получить всю информацию и вдохновение, чтобы сделать свой собственный морф.

Обновление: Моей первой мыслью было нарисовать его вручную (полностью переопределить #drawOn :), но в Canvas не было никаких очевидных кандидатов. Позволяя окружности нарисоваться при установке прямоугольника отсечения на четверть, он стал почти однострочным.

Обновление 2: Уловка с четвертью кругом заключается в том, что 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. Потому что вы не можете выйти за его реальные границы, все работает. нотабене в реальном коде комментарии были бы излишними (за исключением, может быть, 4х, но это знак для рефакторинга:))

...