Значок ресурса

Spectrum Pantograph

Нет прав на скачивание
Автор: Chris Somerville
Год: 1985
Издатели: Your Spectrum
Языки: 🇬🇧 Английский
Формат: 📼 TAP лента
Требования: 🖥️ ZX Spectrum 48K

Ссылки:
Страница на ZXArt
Страница на World Of Spectrum
Страница на Spectrum Computing

Скриншоты:
SpectrumPantograph.gif


!0.......^.........^.........^..


!B


\H11\H07\H10\H01 EVERY PICTURE


\H11\H07\H10\H01 TELLS A STORY





!2.......^.........^.........^.........^.........^.........^....


Anyone can be an artist on the Spectrum - it's just a matter of


co-ordination. Let Chris Somerville tell you where to draw the


line.


!1.......^.........^.........^.........^........





Everyone must remember using a pantograph at one


time or another ... but for those who don't,


it's a mechanical instrument used to translate a


copy of a drawing to any scale. It may be


cheating to use a pantograph but if, like me,


you don't have the artistic flair of Rembrandt


then it's a worthwhile principle to keep in


mind.





!0.......^.........^.........^..


ALTERNATIVE ART


!1.......^.........^.........^.........^........


Now there are many excellent programs that allow


you to create screen graphics by manipulating


the cursor on-screen. Unfortunately, not


everyone's endowed with the necessary artistic


talent that's needed to draw directly to the


screen - whether you're using a keyboard,


joystick or light pen to control the cursor.


There's another method of transferring an


original drawing to the screen, and that's to


trace the picture on to a piece of transparent


plastic material and tape it on the screen as a


drawing guide. Trouble is, the original drawing


can't be bigger than your TV screen, and the


distortion caused by the thickness of the screen


precludes accurate work.


There are, of course, mechanical/ electronic


graph pads and digi-tracers, ranging in price


from \H6050 to over \H60100. These, however, cannot


cope with large sized drawings; certainly, a pop


poster or large scale map would be way beyond


them.





!0.......^.........^.........^..


!B


SQUARING UP


!1.......^.........^.........^.........^........


The program included in this article allows you


to transfer any drawing - a map, a book


illustration, or whatever - in scaled outline,


regardless of size. The only restriction on size


is that the graphic you wish to enter must lie


in the same proportions as the computer screen;


this means that any picture, or part of the


same, that you intend transferring must be


roughly in the proportions three units wide to


two units high.


Having chosen your subject, you now need to


overlay it with a grid of squares; on something


like a map these are already there - providing


the necessary grid references. In most cases,


though, you'll need to draw a pattern of squares


in pencil over the original illustration. A more


flexible system, and one that'll save your


drawings from being covered with squares, is to


draw the grid on an acetate sheet (obtained from


any good stationer or art shop - just ask for a


few pieces of overhead projector film). This can


then be placed over the drawing; you should use


a fine line marker pen to square up the acetate


sheet - I'd suggest the Staedtler Lumocolour 313


Permanent.


The grid should be numbered from the bottom


left-hand corner, both vertically (Y-axis) and


horizontally (X-axis). Normally, it's best to


number the co-ordinates of the bottom left-hand


corner as X=0, Y=0 (or simply 0,0); if you have


a grid numbered in some other fashion - a map


for example - or if you're using only a portion


of a larger grid, it doesn't matter as the


program adjusts the co-ordinates and scales the


square to match the screen.





!0.......^.........^.........^..


!B


YOU GET THE PICTURE


!1.......^.........^.........^.........^........


Once you've run the program you'll be asked


whether you require a printout of the final plot


and draw positions of your creation; you may


need these for inclusion in another program.


(It's worth noting that these are not the


co-ordinates as you enter them, but rather their


positions after translation.) If you answer


'Yes' to this option, you'll need to have your


printer (ZX Printer, Alphacom 32, or any other


printer that recognises LPRINT) connected.


You'll then be asked to enter the X and Y


co-ordinates of the bottom left and bottom right


of the X-axis. The program will then work out


the scale, and tell you how many squares high it


can allow the picture to be (so that the whole


of the picture can be fitted to scale on the


TV's screen). If the maximum height of the


picture area fits in with your scaled drawing,


then you can continue; if it doesn't, you'll


have to start again, juggling the X-axis to suit


(increasing the number of squares in the X-axis


proportionally increases the number of squares


in the Y-axis).


Now you've decided on the correct scale,


you'll be given a number to remember - this acts


as an escape number bringing you back to the


menu at any time. Normally, the number allocated


to this will be '999' (just like the police


emergency number), but if '999' is a number that


you could tap in as a co-ordinate, the program


will assign you a different escape number. If


you have trouble with numbers, write it down so


you won't forget it at a vital moment in your


artistic creation.





!0.......^.........^.........^..


!B


THE FINAL TOUCHES


!1.......^.........^.........^.........^........


I'd suggest that once you've scaled your


picture, you save it to tape. You could then


re-load it into one of the many graphics


packages (Melbourne Draw, for instance) and play


around with colour, fill in the outlines, and so


on.


This program is not intended to compete with


other graphics programs, but it's hoped that it


will prove a useful addition to the facilities


they offer. The program will operate with both


the 16K and 48K Spectrum; 48K owners may like to


elaborate their version with a 'Paint Fill'


option, or even a cursor controlled 'touch-up'


routine for correcting minor errors. Any


additional routines would need to be entered as


subroutines and called from lines 290 to 294.


The menu, k$, would also have to he altered (see


lines 8000 to 8070) to incorporate additional


command letters.


Geographical maps prove eminently suitable for


display on-screen, but any artwork that can he


seen as a series of outlines (rather than tones)


can be treated effectively. Book covers, pop


posters and comic book illustrations all offer


possible material. Even photographs can be


tackled after a fashion - just make sure you


choose only those prints that have strong


contrast, that is ones that have bold areas of


black and white. The best way to approach a


photo is to trace around the bold areas of


contrast - reducing the photo to a sort of


contour map showing the light and dark areas -


and then square up and enter it as an ordinary


outline drawing. The outlines can later be


filled in, using one of the commercial graphics


packages, to give an 'impressionist'


interpretation of the original photograph.


But by far the best way to tackle the program


is to just wade in and start drawing. I'm no


artist, but I'm well proud of some of my


creations ...





!0.......^.........^.........^..


\H11\H07\H10\H00SPECTRUM PANTOGRAPH


!2.......^.........^.........^.........^.........^.........^....


Once you've typed in the listing and RUN it, have a look through


the menu options available with the package; the various options


are tabulated on the last page of this article.





!0.......^.........^.........^..


5 CLEAR 30548


10 RESTORE : FOR i=USR "A" TO


USR "A"+11: READ a: POKE i,a: NE


XT i


20 DATA 17,0,72,33,86,119,1,0,


8,237,176,201


!2.......^.........^.........^.........^.........^.........^....


Lines 5-20 Clear memory for the program and POKE the data


required for the user-defined graphic.





!0.......^.........^.........^..


25 GO SUB 8000


30 LET code=USR "A"


50 GO TO 100


!2.......^.........^.........^.........^.........^.........^....


Lines 25-50 Set the variable 'code' and jump to the 'start'


routine.





!0.......^.........^.........^..


60 POKE code+1,0: POKE code+2,


72: POKE code+4,86: POKE code+5,


119: RANDOMIZE USR code: RETURN


: REM reprint


70 POKE code+1,86: POKE code+2


,119: POKE code+4,0: POKE code+5


,72: RANDOMIZE USR code: RETURN


: REM copy middle block


80 IF print=1 THEN LPRINT "PL


OT ";x;",";y


85 RETURN


90 IF print=1 THEN LPRINT "DR


AW ";x;",";y


95 RETURN


97 IF print=1 THEN LPRINT "CO


RRECTION": LPRINT "PLOT ";cx;","


;cy


98 RETURN


!2.......^.........^.........^.........^.........^.........^....


Lines 60-98 Set up the printer routines.





!0.......^.........^.........^..


100 PAPER 6: INK 0: BORDER 7: C


LS


101 LET print=0: LET cflag=0: L


ET xcor=0: LET ycor=0


102 PRINT AT 10,0;" DO YOU REQU


IRE A PRINTOUT OF THE CO-ORDI


NATES ?": PRINT " ENTER Y(Yes) o


r N (No)": PRINT '" NB: PRINTER


MUST BE ATTACHED.": INPUT i$: IF


i$="Y" THEN LET print=1


!2.......^.........^.........^.........^.........^.........^....


Lines 100-102 Set up the start variables and 'printer toggle'


variable.





!0.......^.........^.........^..


103 CLS


105 PRINT '" YOUR DRAWING CAN B


E OVERLAID WITH A GRID OF SQU


ARES OF ANY CONVENIENT SIZE. T


HESE SHOULD BE NUMBERED UP AND


ACROSS FROM THE BOTTOM LEFT CO


RNER."


106 PRINT '" THE NUMBERS ACROSS


ARE THE ""X"" CO-ORDIN


ATES": PRINT " THE NUMBERS UPWAR


DS ARE THE ""Y"" CO-ORDI


NATES": PRINT '" ""X"" CO-ORDINA


TES (ACROSS) ARE": PRINT " ALWAY


S ENTERED FIRST."


!2.......^.........^.........^.........^.........^.........^....


Lines 103-106 Print up some brief instructions on-screen.





!0.......^.........^.........^..


107 PRINT '' PAPER 7;" PLEASE E


NTER THE X AND Y CO-ORDIN


ATES OF THE BOTTOM LEFT HAN


D CORNER. ": PLOT 2


,2: DRAW 0,171: DRAW 251,0: DRAW


0,-171: DRAW -251,0


108 INPUT "X = ";xcor;" Y = ";y


cor


109 CLS


!2.......^.........^.........^.........^.........^.........^....


Lines 107-109 Request the first set of X and Y coordinates.





!0.......^.........^.........^..


110 LET ux=0: LET uy=0


150 PRINT '" NOW ENTER THE X CO


-ORDINATE OF THE BOTTOM RIGHT H


AND CORNER."


160 INPUT "X = ";tux: LET tux=t


ux-xcor: IF tux<=ux THEN BEEP .


1,60: GO TO 160


!2.......^.........^.........^.........^.........^.........^....


Lines 110-160 Request the second set of X and Y coordinates.





!0.......^.........^.........^..


170 LET tuy=(tux-ux)*175/(255-u


y)


175 LET ttuy=tuy+ycor: LET ttux


=tux+xcor


176 CLS


180 PRINT ''''''" TOP RIGHT


CORNER WILL BE ";t


tux;" ACROSS": PRINT "


";ttuy;" UP"


190 PRINT ' PAPER 7;" IS T


HAT SATISFACTORY? PRESS


Y (Yes) or N (No) "


200 IF INKEY$<>"" THEN GO TO 2


00


210 LET i$=INKEY$: IF i$="" THE


N GO TO 210


220 IF i$="n" OR i$="N" THEN G


O TO 1


!2.......^.........^.........^.........^.........^.........^....


Lines 170-220 Print the grid size, and ask if the size is


suitable for the illustration you wish to copy


on-screen.





!0.......^.........^.........^..


225 LET prop=175/tuy


230 LET escape=0: IF ux<=0 OR u


y<=0 THEN LET escape=999


235 IF tux>=escape THEN LET es


cape=INT (tux+10)


240 PRINT '" PLEASE REMEMB


ER THIS NUMBER "


; BRIGHT 1;escape


250 PRINT " WHICH WILL RET


URN YOU TO THE MENU"


255 LET escape=escape+xcor


260 PRINT AT 21,0;" PRESS ANY


LETTER TO START"


265 IF INKEY$<>"" THEN GO TO 2


65


270 LET i$=INKEY$: IF i$="" THE


N GO TO 270


280 CLS


!2.......^.........^.........^.........^.........^.........^....


Lines 225-280 Evaluate and print the escape number.





!0.......^.........^.........^..


290 POKE 23658,8: GO SUB 70: PR


INT AT 8,0;k$: INPUT "MENU INSTR


UCTION LETTER? "


291 IF INKEY$<>"" THEN GO TO 2


91


293 LET m$=INKEY$: IF m$="" THE


N GO TO 293


!2.......^.........^.........^.........^.........^.........^....


Lines 290-293 This routine marks the beginning of the main


program.





!0.......^.........^.........^..


294 IF m$<>"W" AND m$<>"J" AND


m$<>"R" AND m$<>"K" AND m$<>"D"


AND m$<>"C" AND m$<>"S" AND m$<>


"L" AND m$<>"P" AND m$<>"F" THEN


GO TO 291


!2.......^.........^.........^.........^.........^.........^....


Line 294 Checks to see if the menu input is valid.





!0.......^.........^.........^..


296 GO SUB 60


297 IF m$="R" THEN GO TO 460


298 IF m$="J" THEN LET print=1


: GO TO 1010


300 IF m$="C" OR m$="c" THEN L


ET cflag=1: PLOT OVER 1;cx,cy:


LET x=cex: GO TO 1070


310 IF m$="D" THEN GO TO 1000


315 IF m$="K" THEN LET print=0


: GO TO 1010


320 IF m$="P" THEN COPY : GO T


O 290


330 GO TO (CODE m$*10)+9000


!2.......^.........^.........^.........^.........^.........^....


Lines 296-330 Send the program to the relevant subroutine


depending on which key you pressed.





!0.......^.........^.........^..


400 FOR i=1 TO LEN x$: IF CODE


x$(i)<>46 AND CODE x$(i)<48 OR


CODE x$>57 THEN LET x=ux-1: RET


URN


405 NEXT i


410 LET x=VAL x$: RETURN


420 FOR i=1 TO LEN y$: IF CODE


y$(i)<>46 AND CODE y$(i)<48 OR


CODE y$>57 THEN LET y=uy-1: RET


URN


425 NEXT i


430 LET y=VAL y$: RETURN


455 STOP


460 INPUT "ARE YOU SURE? Y or N


";i$: IF i$="Y" THEN RUN


470 GO TO 290


1000 REM PLOT ROUTINE


1010 INPUT "START POINT ACROSS="


;x$: GO SUB 400: LET x=x-xcor: I


F x<ux OR x>tux AND x<>escape-xc


or-xcor THEN BEEP 1,55: GO TO 1


010


1011 IF x=escape-xcor-xcor THEN


GO TO 290


1012 INPUT "START POINT UPWARDS=


";y$: GO SUB 420: LET y=y-ycor:


IF y<uy OR y>tuy THEN BEEP 1,55


: GO TO 1011


1015 LET x=x*prop


1020 LET y=y*prop


1030 PLOT x,y: LET oldx=x: LET o


ldy=y: GO SUB 80


1040 INPUT "NEXT POINT ACROSS ";


x$: GO SUB 400: LET x=x-xcor: IF


x<ux OR x>tux AND x<>escape-xco


r-xcor THEN BEEP 1,55: GO TO 10


40


1045 IF x=escape-xcor-xcor THEN


GO TO 290


1046 INPUT "NEXT POINT UPWARDS "


;y$: GO SUB 420: LET y=y-ycor: I


F y<uy OR y>tuy THEN BEEP 1,55:


GO TO 1046


1050 LET x=x*prop: LET x=x-oldx


1060 LET y=y*prop: LET y=y-oldy


1065 LET cx=oldx: LET cy=oldy


1066 LET cex=x


1070 DRAW OVER 1;x,y: LET oldx=


PEEK 23677: LET oldy=PEEK 23678:


IF cflag=1 THEN PLOT cx,cy: LE


T oldx=cx: LET oldy=cy: LET cfla


g=0: GO SUB 97: GO TO 1080


1071 GO SUB 90


1080 GO TO 1040


!2.......^.........^.........^.........^.........^.........^....


Lines 400-1080 Contain the subroutines for all the menu


options.





!0.......^.........^.........^..


8000 LET k$="\H8b\H83\H83\H83\H83\H83\H83\H83\H83\H83\H83\H83\H83\H83\H83\H83\H83\H83\H83


\H83\H83\H83\H83\H83\H83\H83\H83\H83\H83\H83\H83\H87"


8010 LET k$=k$+"\H8a R = RESTART J


= START LPRINT\H85"


8020 LET k$=k$+"\H8a P = COPY K =


CANCEL LPRINT \H85"


8040 LET k$=k$+"\H8a C = CANCEL LAS


T LINE DRAWN \H85"


8050 LET k$=k$+"\H8a S = SAVE THE P


ICTURE TO TAPE \H85"


8060 LET k$=k$+"\H8a L = LOAD A PIC


TURE FROM TAPE \H85"


8065 LET k$=k$+"\H8a D=DRAW W=WO


RDS F=FINISH \H85"


8070 LET k$=k$+"\H8e\H8c\H8c\H8c\H8c\H8c\H8c\H8c\H8c\H8c\H8c\H8c\H8c\H8c\H8c\H8c


\H8c\H8c\H8c\H8c\H8c\H8c\H8c\H8c\H8c\H8c\H8c\H8c\H8c\H8c\H8c\H8d"


8080 RETURN


9494 STOP


9495 INPUT i$: IF i$<>"KAMTIN" T


HEN RUN


9496 STOP


9700 CLS : PRINT AT 10,0; PAPER


7; INK 2;" \H7f 1984 CHRIS SOMER


VILLE ": PRINT AT 20,0;"


PRESS R TO RESTART": PRINT "


PRESS C TO CLEAR"


9710 IF INKEY$<>"" THEN GO TO 9


710


9720 LET i$=INKEY$: IF i$="" THE


N GO TO 9720


9730 IF i$="C" THEN RANDOMIZE U


SR 0


9740 RUN


!2.......^.........^.........^.........^.........^.........^....


Lines 8000-9740 Print up the menu table on-screen requesting


the option you want to use.





!0.......^.........^.........^..


9760 INPUT "PICTURE NAME ?";i$:


IF LEN i$>10 THEN GO TO 9760


9770 LOAD i$SCREEN$ : GO TO 290


9830 INPUT "PICTURE NAME =";i$:


IF LEN i$>10 THEN GO TO 9830


9840 SAVE i$SCREEN$ : GO TO 290


!2.......^.........^.........^.........^.........^.........^....


Lines 9760-9840 Contain the 'load' and 'save' routines.





!0.......^.........^.........^..


9870 INPUT "LINE(0-21)=";l$;"ROW


(0-31)=";r$: FOR i=1 TO LEN r$:


IF CODE r$(i)<48 OR CODE r$(i)>5


7 THEN BEEP .5,55: GO TO 9870


9871 NEXT i


9872 FOR i=1 TO LEN l$: IF CODE


l$(i)<48 OR CODE l$(i)>57 THEN


BEEP .5,55: GO TO 9870


9873 NEXT i


9874 LET r=VAL r$: LET l=VAL l$:


IF l<0 OR l>21 OR r<0 OR r>31 T


HEN BEEP 1,55: GO TO 9870


9875 INPUT "TEXT=";t$: PRINT OV


ER 1;AT l,r;t$: INPUT "IS THAT O


K Y? N?";i$: IF i$="N" THEN PRI


NT OVER 1;AT l,r;t$: GO TO 9870


9878 GO TO 290


!2.......^.........^.........^.........^.........^.........^....


Lines 9870-9878 Provide the 'test printing' subroutine.





!0.......^.........^.........^..


9980 SAVE "D" LINE 1


9982 SAVE "D" LINE 1


9983 STOP


!2.......^.........^.........^.........^.........^.........^....


Lines 9980-9983 Save two copies of the program.


!0.......^.........^.........^..


!B





\H11\H07\H10\H00 MENU OPTIONS


!2.......^.........^.........^.........^.........^.........^....


KEY COMMENT


C Pressing 'C' (the 'CORRECTION' key) simply deletes the


previous drawing position. Thus, if you make a mistake, you


can return to the menu, press 'C' and continue where you


left off.


D Once you press 'D' (the 'DRAW' key) you'll be asked to


provide the coordinates of the starting position, and of


each subsequent position you want to draw a line to. It's


rather like those 'join the dots' mystery pictures in


childrens' books, only in this case you're specifying where


each dot is to go and the Spectrum's connecting them


together. It's unlikely that all the points you'll want to


draw to will fall conveniently on your grid lines, but the


program will happily accept positions like X=1222.5, Y=16.8.


At this point, it's worth making a note that when you're


planning the initial grid of squares, the finer your grid


the more detail you can introduce to the final on-screen


drawing. On the other hand, if all you're after is a broad


outline, then a relatively small number of large squares


should suffice. Once you reach the end of a line and want to


move on to a new starting position, simply type in the


escape number and return to the menu to start over. (Unlike


the normal Spectrum DRAW procedure, there's no calculation


involved - you read off the coordinates for each point


that's connected on the original drawing and it'll be


reproduced to the scale you want.)


F Press this key when you want to stop using the program.


J/K These two keys are used to activate ('J') or cancel ('K')


the instruction to print out coordinates to the printer.


L This command loads back a previously saved picture. If


you're planning to load back a partially finished picture,


you'll have to enter the original coordinates applicable


before you can continue drawing.


P The 'P' key allows you to print the picture on-screen to the


ZX Printer (or any other printer that accepts the COPY


command).


R This key is used to restart the program once you've finished


with one drawing and want to start on another.


S Making use of the SAVE SCREEN$ function, the 'S' key saves


the screen picture to cassette.


W The 'W' key allows you to print a text label at any speci-


fied position on the screen. This function uses the screen


PRINT AT positions for line (0 to 21) and row (0 to 31).


!1.......^.........^.........^.........^........


!B





--


from Your Spectrum #11 (Feb.1985)


--


!$
Автор
Verter_bot
Загрузки
0
Просмотры
2
Расширение
zip
Размер
10.5 КБ
Хэш
aadf0137c55d9547bc0d4743a8ad4818
Первый выпуск
Последнее обновление

Оценки

0.00 звезд(ы) 0 оценок
Назад
Вверх