Contributed by Chris Rathman
| scribble aRectangle |
"toss the different shapes into a collection"
scribble := Bag new.
scribble add: (CMRRectangle x:10 y:20 width:5 height:6).
scribble add: (CMRCircle x:15 y:25 radius:8).
"use the shapes polymorphically"
scribble do: [:each |
each draw.
each rMoveToX: 100 rMoveToY: 100.
each draw].
"call a rectangle specific function"
aRectangle := CMRRectangle x:0 y:0 width:15 height:15.
aRectangle width: 30.
aRectangle draw.
|
Object subclass: #CMRShape
instanceVariableNames: 'x y '
classVariableNames: ''
poolDictionaries: ''
category: 'Chris-Objects'
|
x
"get the origin x value"
^x.
y
"get the origin y value"
^y.
x: aNumber
"set the origin x value"
^x := aNumber.
y: aNumber
"set the origin y value"
^y := aNumber.
|
"transforming"
moveToX: newX moveToY: newY
"shift the origen based on the (x,y) point"
self x: newX.
self y: newY.
^(self x) @ (self y).
rMoveToX: deltaX rMoveToY: deltaY
"shift the origen based on the delta (x,y) point"
self x: (self x + deltaX).
self y: (self y + deltaY).
^(self x) @ (self y).
|
CMRShape subclass: #CMRRectangle
instanceVariableNames: 'width height '
classVariableNames: ''
poolDictionaries: ''
category: 'Chris-Objects'
|
x: xValue y: yValue width: aWidth height: aHeight
"construct a rectangle"
| rectangle |
rectangle := super new.
rectangle x: xValue.
rectangle y: yValue.
rectangle width: aWidth.
rectangle height: aHeight.
^rectangle.
|
height
"get the height of the rectangle"
^height.
width
"get the width of the rectangle"
^width.
height: aNumber
"set the height of the rectangle"
^height := aNumber.
width: aNumber
"set the width of the rectangle"
^width := aNumber.
|
draw
"draw the rectangle"
Transcript show:
'Drawing a rectangle at:(' ,
self x printString , ',' ,
self y printString ,
'), width ' ,
self width printString ,
', height ' ,
self height printString;
cr.
|
CMRShape subclass: #CMRCircle
instanceVariableNames: 'radius '
classVariableNames: ''
poolDictionaries: ''
category: 'Chris-Objects'!
|
x: xValue y: yValue radius: aRadius
"construct a circle"
| circle |
circle := super new.
circle x: xValue.
circle y: yValue.
circle radius: aRadius.
^circle.
|
radius
"get the radius value"
^radius.
radius: aNumber
"set the radius of the circle"
^radius := aNumber.
|
draw
"draw the circle"
Transcript show:
'Drawing a circle at:(' ,
self x printString , ',' ,
self y printString ,
'), radius ' ,
self radius printString;
cr.
|
Drawing a circle at:(15,25), radius 8 Drawing a circle at:(115,125), radius 8 Drawing a rectangle at:(10,20), width 5, height 6 Drawing a rectangle at:(110,120), width 5, height 6 Drawing a rectangle at:(0,0), width 30, height 15 |