home *** CD-ROM | disk | FTP | other *** search
- "======================================================================
- |
- | Copyright (C) 1990, 1991 Free Software Foundation, Inc.
- | Written by Steve Byrne.
- |
- | This file is part of GNU Smalltalk.
- |
- | GNU Smalltalk is free software; you can redistribute it and/or modify it
- | under the terms of the GNU General Public License as published by the Free
- | Software Foundation; either version 1, or (at your option) any later version.
- |
- | GNU Smalltalk is distributed in the hope that it will be useful, but WITHOUT
- | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- | FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- | details.
- |
- | You should have received a copy of the GNU General Public License along with
- | GNU Smalltalk; see the file COPYING. If not, write to the Free Software
- | Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
- |
- ======================================================================"
-
-
- "
- | Change Log
- | ============================================================================
- | Author Date Change
- | sbyrne 24 May 90 created.
- |
- "
-
- Object subclass: #Pen
- instanceVariableNames: 'gc direction marking location'
- classVariableNames: ''
- poolDictionaries: ''
- category: nil
- !
-
-
-
- !Pen class methodsFor: 'instance creation'!
-
- new: gc
- ^super new init: gc
- !!
-
-
- !Pen methodsFor: 'accessing'!
-
- direction
- ^direction
- !
-
- location
- ^location
- !
-
- gc
- ^gc
- !!
-
-
-
- !Pen methodsFor: 'moving'!
-
- down
- marking _ true
- !
-
- up
- marking _ false
- !
-
- turn: degrees
- direction _ direction + degrees
- !
-
- north
- direction _ 0
- !
-
- go: distance
- | dest dirRad |
- dirRad _ direction degreesToRadians.
- dest _ location + ((distance * dirRad sin) negated @ (distance * dirRad cos)).
- self goto: dest rounded
- !
-
- goto: aPoint
- marking
- ifTrue: [ gc polyLine: location to: aPoint coordMode: #Origin ].
- location _ aPoint
- !
-
-
- place: aPoint
- location _ aPoint
- !
-
- home
- location _ 0@0
- !!
-
-
- !Pen methodsFor: 'examples'!
-
- spiral: n angle: a
- 1 to: n do:
- [ :i | self go: i.
- self turn: a ]
- !
-
- dragon: n
- n = 0
- ifTrue: [ self go: 10 ]
- ifFalse:
- [ n > 0
- ifTrue:
- [ self dragon: n - 1.
- self turn: 90.
- self dragon: 1 - n ]
- ifFalse:
- [ self dragon: -1 - n.
- self turn: -90.
- self dragon: 1 + n ] ]
- !!
-
-
-
- !Pen methodsFor: 'private'!
-
- init: aGC
- marking _ false.
- location _ 0@0.
- direction _ 0.
- gc _ aGC
- !!
-
-