'From Squeak3.8 of ''5 May 2005'' [latest update: #6665] on 15 May 2007 at 10:16:04 am'! PasteUpMorph subclass: #DessinsLogo instanceVariableNames: 'pen form menu' classVariableNames: '' poolDictionaries: '' category: 'Cours-Smalltalk-GUI'! !DessinsLogo methodsFor: 'initialization' stamp: 'hw 2/28/2006 23:44'! defaultBorderColor ^ Color red ! ! !DessinsLogo methodsFor: 'initialization' stamp: 'hw 2/28/2006 23:45'! defaultBorderWidth ^ 2 ! ! !DessinsLogo methodsFor: 'initialization' stamp: 'hw 3/5/2006 13:51'! defaultBounds ^ (0 @ 0 corner: 300 @ 400). ! ! !DessinsLogo methodsFor: 'initialization' stamp: 'hw 2/28/2006 23:41'! defaultColor ^Color gray! ! !DessinsLogo methodsFor: 'initialization' stamp: 'hw 2/28/2006 23:45'! initialize super initialize. ! ! !DessinsLogo methodsFor: 'as yet unclassified' stamp: 'hw 2/25/2006 20:40'! drawOn1: aCanvas "Draws the receiver on the given canvas" super drawOn: aCanvas. cachedForm ifNil: [ [self drawCachedApp] forkAt: Processor userBackgroundPriority. ^self ]. aCanvas paintImage: cachedForm at: bounds origin sourceRect: cachedForm boundingBox! ! !DessinsLogo methodsFor: 'menu' stamp: 'hw 2/21/2006 16:08'! arbre1 7 tree1: 60 ! ! !DessinsLogo methodsFor: 'menu' stamp: 'hw 2/28/2006 14:01'! arbre2 | random angleG angleD niveau | self initImage. random := Random new. angleG := (FillInTheBlank request: 'angle gauche?' initialAnswer: '20') asNumber. angleD := (FillInTheBlank request: 'angle droite?' initialAnswer: '30') asNumber. niveau := (FillInTheBlank request: 'profondeur d''iteration?' initialAnswer: '7') asNumber. pen place: (form width / 2) @ (form height *2 / 3). niveau dessineBranche: 10 angleG: angleG angleD: angleD ind: false rand: random pen: pen. self afficheImage! ! !DessinsLogo methodsFor: 'menu' stamp: 'hw 2/21/2006 16:20'! arbre3 7 tree3: 10 angle: 20! ! !DessinsLogo methodsFor: 'menu' stamp: 'hw 2/25/2006 17:59'! handlesMouseDown: evt ^evt yellowButtonPressed! ! !DessinsLogo methodsFor: 'menu' stamp: 'hw 2/28/2006 22:44'! koch | niveau | self initImage. niveau := (FillInTheBlank request: 'profondeur d''iteration?' initialAnswer: '5') asNumber. pen place: 5 @ (280/2 -5); turn: 90. niveau koch: 280 pen: pen. self afficheImage! ! !DessinsLogo methodsFor: 'menu' stamp: 'hw 3/5/2006 13:41'! mouseDown: evt menu := MenuMorph new defaultTarget: self. menu addTitle: 'Choississez un dessin'; add: 'courbe de Koch' action: #koch; add: 'triangle de Sierpinski' action: #sierpinski; add: 'polygone' action: #polyferme; add: 'arbre' action: #arbre2; addLine; add: 'test' action: #test; addLine; add: 'inspect' action: #inspect; add: 'suicide' action: #suicide; addStayUpItem; popUpAt: Sensor cursorPoint forHand: evt hand in: self world! ! !DessinsLogo methodsFor: 'menu' stamp: 'hw 2/28/2006 14:22'! polyferme | angle long total | self initImage. total := 0. long := (FillInTheBlank request: 'Longueur d''une c^oté?' initialAnswer: '100') asNumber. angle := (FillInTheBlank request: 'angle?' initialAnswer: '114') asNumber. pen place: ((form width / long + 40) min: 100) @ (form height * 3/ 5). [pen go: long; turn: angle. (total := total + angle) \\ 360 = 0] whileFalse. self afficheImage! ! !DessinsLogo methodsFor: 'menu' stamp: 'hw 2/26/2006 12:52'! sierpinski | long niveau| self initImage. long := (FillInTheBlank request: 'Longueur initial?' initialAnswer: '280') asNumber. niveau := (FillInTheBlank request: 'profondeur d''iteration?' initialAnswer: '6') asNumber. pen place: 20 @ long + 10. long sierp: pen niveau: niveau color: 1. self afficheImage! ! !DessinsLogo methodsFor: 'menu' stamp: 'hw 2/26/2006 02:27'! suicide self delete. ^true! ! !DessinsLogo methodsFor: 'images' stamp: 'hw 3/8/2006 09:24'! afficheImage "les comments pour AlignmentMorphMorph" self submorphsDo: [:each | each delete]. self addCenteredAtBottom: form asMorph offset: bounds origin y! ! !DessinsLogo methodsFor: 'images' stamp: 'hw 3/1/2006 01:05'! initImage form := Form extent: self extent - 4 depth: Display depth. form fillColor: Color white. pen := Pen newOnForm: form. pen roundNib: 1; color: Color black; home! ! 'From Squeak3.8 of ''5 May 2005'' [latest update: #6665] on 26 February 2006 at 10:52:27 am'! !Number methodsFor: 'cours' stamp: 'hw 2/25/2006 15:23'! dessineBranche: long angleG: angleG angleD: angleD ind: ind pen: pen pen go: long. self noeud: (ind ifTrue: [long / 2] ifFalse: [long]) angleG: angleG angleD: angleD pen: pen. pen go: 0 - long! ! !Number methodsFor: 'cours' stamp: 'hw 2/25/2006 15:34'! dessineBranche: long angleG: angleG angleD: angleD ind: ind rand: rand pen: pen | x | x := (rand nextInt: long) + (long / 2). pen go: x. self noeud: (ind ifTrue: [long / 2] ifFalse: [long]) angleG: angleG angleD: angleD rand: rand pen: pen. pen go: 0 - x! ! !Number methodsFor: 'cours' stamp: 'hw 2/25/2006 13:42'! dessineBranche: long angle: angle ind: ind pen: pen pen go: long. self noeud: (ind ifTrue: [long / 2] ifFalse: [long]) angle: angle pen: pen. pen go: 0 - long! ! !Number methodsFor: 'cours' stamp: 'hw 2/25/2006 13:34'! dessineBranche: long angle: angle pen: pen pen go: long. self noeud: long / 2 angle: angle pen: pen. pen go: 0 - long! ! !Number methodsFor: 'cours' stamp: 'hw 2/22/2006 15:09'! hexa | form pen | form := Form extent: self * 3 @ (self * 3) depth: Display depth. form fillColor: Color white. pen := Pen newOnForm: form. pen roundNib: 1; color: Color black. pen place: self / 2 @ (self * 2). pen fill: [:each | 6 timesRepeat: [each go: self; turn: 60]] color: Color yellow. form asMorph openInWorld! ! !Number methodsFor: 'cours' stamp: 'hw 2/22/2006 19:10'! koch: long | form pen | form := Form extent: long + 20 @ (long / 2) depth: Display depth. form fillColor: Color white. pen := Pen newOnForm: form. pen roundNib: 1; color: Color black. pen place: 10 @ (long/2 -5); turn: 90. self koch: long pen: pen. form asMorph openInWorld! ! !Number methodsFor: 'cours' stamp: 'hw 2/22/2006 00:16'! koch: long pen: pen self = 0 ifTrue: [pen go: long] ifFalse: [self - 1 koch: long / 3 pen: pen. pen turn: -60. self - 1 koch: long / 3 pen: pen. pen turn: 120. self - 1 koch: long / 3 pen: pen. pen turn: -60. self - 1 koch: long / 3 pen: pen]! ! !Number methodsFor: 'cours' stamp: 'hw 2/25/2006 14:25'! noeud1: long angleG: angleG angleD: angleD pen: pen "8 tree2: 10 angleG: 20 angleD: 29" self = 0 ifFalse: [pen turn: 0 - angleG. self - 1 dessineBranche: 2 * long angleG: angleG angleD: angleD ind: true pen: pen. pen turn: angleG; turn: angleD. self - 1 dessineBranche: long angleG: angleG angleD: angleD ind: false pen: pen. pen turn: 0 - angleD]! ! !Number methodsFor: 'cours' stamp: 'hw 2/25/2006 15:11'! noeud1: long angleG: angleG angleD: angleD rand: rand pen: pen "8 tree2: 10 angleG: 20 angleD: 29" self = 0 ifFalse: [pen turn: 0 - angleG. self - 1 dessineBranche: 2 * long angleG: angleG angleD: angleD ind: true rand: rand pen: pen. pen turn: angleG; turn: angleD. self - 1 dessineBranche: long angleG: angleG angleD: angleD ind: false rand: rand pen: pen. pen turn: 0 - angleD]! ! !Number methodsFor: 'cours' stamp: 'hw 2/25/2006 13:46'! noeud1: long angle: angle pen: pen self = 0 ifFalse: [pen turn: 0 - angle. self - 1 dessineBranche: 2 * long angle: angle ind: true pen: pen. pen turn: 2 * angle. self - 1 dessineBranche: long angle: angle ind: false pen: pen. pen turn: 0 - angle]! ! !Number methodsFor: 'cours' stamp: 'hw 2/25/2006 14:24'! noeud: long angleG: angleG angleD: angleD pen: pen "8 tree2: 10 angleG: 20 angleD: 29" self = 0 ifFalse: [pen turn: 0 - angleG. self - 1 dessineBranche: 2 * long angleG: angleG angleD: angleD ind: true pen: pen. pen turn: angleG; turn: angleD. self - 1 dessineBranche: long angleG: angleG angleD: angleD ind: false pen: pen. pen turn: 0 - angleD]! ! !Number methodsFor: 'cours' stamp: 'hw 2/25/2006 19:30'! noeud: long angleG: angleG angleD: angleD rand: rand pen: pen "8 tree2: 10 angleG: 20 angleD: 29" | x | x := (rand nextInt: angleG abs) + (angleG/2). angleG < 0 ifTrue: [x := 0 - x]. self = 0 ifFalse: [pen turn: 0 - x. self - 1 dessineBranche: 2 * long angleG: angleG angleD: angleD ind: true rand: rand pen: pen. pen turn: x. x := (rand nextInt: angleD abs) + (angleD/2). pen turn: angleD. angleD < 0 ifTrue:[x := 0 - x]. self - 1 dessineBranche: long angleG: angleG angleD: x ind: false rand: rand pen: pen. pen turn: 0 - angleD]! ! !Number methodsFor: 'cours' stamp: 'hw 2/25/2006 14:11'! noeud: long angle: angle pen: pen "7 tree2: 20 angle: 20" | ang | ang := -45. self = 0 ifFalse: [pen turn: 0 - angle. self - 1 dessineBranche: 2 * long angle: angle ind: true pen: pen. pen turn: 2 * angle + ang. self - 1 dessineBranche: long angle: angle ind: false pen: pen. pen turn: 0 - angle - ang]! ! !Number methodsFor: 'cours' stamp: 'hw 2/22/2006 16:59'! polyFerme: nbC | form pen | form := Form extent: self * (nbC/2) @ (self * (nbC/2)) depth: Display depth. form fillColor: Color white. pen := Pen newOnForm: form. pen roundNib: 1; color: Color black. pen place: self /(nbC/3) @ (self * (nbC/3)). pen fill: [:each | nbC timesRepeat: [each go: self; turn: 360/nbC]] color: Color yellow. form asMorph openInWorld! ! !Number methodsFor: 'cours' stamp: 'hw 2/22/2006 17:07'! poly: long | form pen total| total := 0. form := Form extent: long * (360/self) /2 @ (long * (360/self)/2) depth: Display depth. form fillColor: Color white. pen := Pen newOnForm: form. pen roundNib: 1; color: Color black. pen place: long / ((360/self) ) @ (long * ((360/self)/2 ) - 30). [pen go: long; turn: self. ((total := total + self) \\ 360) = 0] whileFalse. form asMorph openInWorld! ! !Number methodsFor: 'cours' stamp: 'hw 2/22/2006 20:05'! sierp1: long pen: pen pen roundNib: 1. self > 0 ifTrue: [self - 1 sierpi: long pen: pen. pen go: long; turn: 60. self-1 sierp1: long pen: pen. pen go: long; turn: 60. self -1 sierpi: long pen: pen]! ! !Number methodsFor: 'cours' stamp: 'hw 2/25/2006 11:31'! sierpiAux: long angle: angle pen: pen pen roundNib: (angle > 0 ifTrue: [1] ifFalse: [2]). self > 0 ifTrue: [self - 1 sierpiAux: long angle: -1 * angle pen: pen. pen go: long; turn: 60 * angle. self - 1 sierpiAux: long angle: angle pen: pen. pen go: long; turn: 60 * angle. self - 1 sierpiAux: long angle: -1 * angle pen: pen]! ! !Number methodsFor: 'cours' stamp: 'hw 2/22/2006 23:04'! sierpinsk1: long "2 sierpinsk1: 8" | form pen | form := Form extent: 300 @ 300 depth: Display depth. form fillColor: Color white. pen := Pen newOnForm: form. pen roundNib: 1; color: Color black. pen place: (self odd ifTrue: [290] ifFalse: [10]) @ 290. self odd ifTrue: [pen turn: -30. self sierpi: long pen: pen] ifFalse: [pen turn: 90. self sierp1: long pen: pen]. pen go: long. form asMorph openInWorld! ! !Number methodsFor: 'cours' stamp: 'hw 2/25/2006 11:36'! sierpinskII: long "4 sierpinskII: 12" | form pen | form := Form extent: 300 @ 300 depth: Display depth. form fillColor: Color white. pen := Pen newOnForm: form. pen roundNib: 1; color: Color black. pen place: (self odd ifTrue: [290] ifFalse: [10]) @ 290. self odd ifTrue: [pen turn: -30] ifFalse: [pen turn: 90]. self sierpiAux: long angle: (self odd ifTrue: [-1] ifFalse: [1]) pen: pen. pen go: long. form asMorph openInWorld! ! !Number methodsFor: 'cours' stamp: 'hw 2/22/2006 21:23'! sierpinskI: long "4 sierpinskI: 12" | form pen | form := Form extent: 300 @ 300 depth: Display depth. form fillColor: Color white. pen := Pen newOnForm: form. pen roundNib: 1; color: Color black. pen place: ((self odd) ifTrue: [290] ifFalse:[10]) @ 290. self odd ifTrue:[pen turn: -30]. self sierpi: long pen: pen. pen go: long. form asMorph openInWorld! ! !Number methodsFor: 'cours' stamp: 'hw 2/25/2006 11:41'! sierpinski "200 sierpinski" | form pen | form := Form extent: 300 @ 300 depth: Display depth. form fillColor: Color white. pen := Pen newOnForm: form. pen roundNib: 1; color: Color black. pen place: 20 @ 290. self sierp: pen. form asMorph openInWorld! ! !Number methodsFor: 'cours' stamp: 'hw 2/25/2006 13:19'! sierpinski: long "8 sierpinski: 200" | form pen | form := Form extent: 300 @ 300 depth: Display depth. form fillColor: Color white. pen := Pen newOnForm: form. pen roundNib: 1; color: Color black. pen place: 20 @ 290. self sierp: long pen: pen. form asMorph openInWorld! ! !Number methodsFor: 'cours' stamp: 'hw 2/22/2006 20:04'! sierpi: long pen: pen pen roundNib:3. self > 0 ifTrue: [self - 1 sierp1: long pen: pen. pen go: long; turn: -60. self-1 sierpi: long pen: pen. pen go: long; turn: -60. self -1 sierp1: long pen: pen]! ! !Number methodsFor: 'cours' stamp: 'hw 2/25/2006 11:40'! sierp: pen self < 1 ifFalse: [3 timesRepeat: [self / 2 sierp: pen. pen go: self; turn: 120]] ! ! !Number methodsFor: 'cours' stamp: 'hw 2/25/2006 17:51'! sierp: pen niveau: niv color: col (niv < 1) ifFalse: [3 timesRepeat: [self / 2 sierp: pen niveau: niv - 1 color: col +1. pen color: col; go: self; turn: 120]] ! ! !Number methodsFor: 'cours' stamp: 'hw 2/25/2006 13:21'! sierp: long pen: pen self > 0 ifTrue:[3 timesRepeat: [self - 1 sierp: long / 2 pen: pen. pen go: long; turn: 120]] ! ! !Number methodsFor: 'cours' stamp: 'hw 2/25/2006 14:17'! tree2: long angleG: angleG angleD: angleD "7 tree2: 10 angleG: 20 angleD: -45" | form pen | form := Form extent: 300 @ 300 depth: Display depth. form fillColor: Color white. pen := Pen newOnForm: form. pen roundNib: 1; color: Color black. pen place: 200 @ 200. self dessineBranche: long angleG: angleG angleD: angleD ind: false pen: pen. form asMorph openInWorld! ! !Number methodsFor: 'cours' stamp: 'hw 2/25/2006 17:41'! tree2: long angle: angle "8 tree2: 10 angle: 40" | form pen random angleG angleD | random := Random new. angleG := "angle + "(random nextInt: angle / 2). angleD := "angle + "(random nextInt: angle / 3). form := Form extent: 300 @ 300 depth: Display depth. form fillColor: Color white. pen := Pen newOnForm: form. pen roundNib: 1; color: Color black. pen place: 200 @ 200. self dessineBranche: long angleG: angleG angleD: angleD ind: false rand: random pen: pen. form asMorph openInWorld! !