TechNote 11: How to use the MakePict() and MakeShape functions -- November 5,1997 --------------------------------------------------------------------------------- Example of MakePict: [Note: This was contributed by Stefen Kienecker (kienecker© mail.ppp.net) of Hamburg, Germany] I send you a non optimized program for drawing a verhulst diagram using makepict(). It needs at least 52 kb free heap space and runs about two hours on an MP100. 0010 rem verhulst 0011 dim an[40] 0012 dim xn[40] 0013 let w1spec = {viewbounds: {left: 0, right:100, top: 0, bottom: 100},viewfill:nofill} 0015 GOSUB 8020 //call preload array an 0016 GOSUB 8045 //call preload array xn 0080 rem calculating section 0090 for i = 1 to 39 0100 let const = i*((4-2.7)/39)+2.7 0110 let x = random(0,100)/100 0120 for z = 1 to 139 0130 let x = const * x * (1-x) 0140 let j = ceiling(x*100) 0150 if z>=100 then gosub 0190 0160 next z 0170 next i 0180 end 0190 rem drawroutine 0200 let an[z-100]=makeline(i-1,j-1,i,j) 0210 let xn[i]=makepict(an,nil) 0230 wdraw wr,xn 0240 return 8010 rem preload of the arrays 8020 for ans = 0 to 39 8030 let an[ans]=makeline(3,3,3,3) 8040 next ans 8042 return 8045 for xns = 0 to 39 8050 let xn[xns]=makepict(an,nil) 8052 window wr,w1spec 8053 show wr 8054 wdraw wr,xn[xns] 8060 next xns 8070 return any attempt to choose a higher dim - say 60 - causes a memory out. [Additional information: makePict(shapeArray, StyleFrame) returns a picture shape created from a series of drawing operations, as a single entity. The picture shape returned is in PICT format.] Example of MakeShape: [Note: This was contributed by Len Lutz (lenlutz© dca.net) of Philadelphia, PA] 0010 rem newarrow 0020 cls 0030 LET ars_x := 280 0040 LET ars_y := 200 0050 LET y_diff = 40 0120 gosub draw_up_arrow // 0130 gosub draw_down_arrow // 0140 for i = 1 to 8 0150 wait 1000 0160 next i 0170 hide 0180 end 0500 draw_up_arrow: REM 0510 LET win_up_spec := { Gosub: 'up_hit, viewbounds:Setbounds(ars_x,ars_y,ars_x + 20,ars_y + 25), Viewformat: Vfframewhite} 0520 window up_win, win_up_spec 0530 show up_win 0540 LET Ar_ar := [3,8,10,0, 0,10, 5,10, 5,24, 15,24, 15,10, 20,10,10,0] 0550 LET points := Arraytopoints(ar_ar) 0560 LET shape := makeshape(points) 0570 wdraw up_win,shape 0580 return 0590 draw_down_arrow: REM 0600 LET win_down_spec := { Gosub: 'down_hit, viewbounds:Setbounds(ars_x,ars_y + y_diff,ars_x + 20,ars_y + y_diff + 25),viewformat: Vfframewhite} 0610 window down_win, win_down_spec 0620 show down_win 0630 LET Ar_ar := [3,8, 5,1, 5,15, 0,15, 10,25, 20,15, 15,15, 15,1, 5,1] 0640 LET points := Arraytopoints(ar_ar) 0650 LET shape := makeshape(points) 0660 wdraw down_win,shape 0670 return 0680 up_hit: REM 0690 print "HIT UP" 0700 return 0710 down_hit: REM 0720 print "HIT DOWN" 0730 return