[reset] Points = 0 Erase = 0 UseModel = 0 WorkBackg = 0 WhiteGrid = 0 NoGrid = 0 Snap = 0 Snap2 = 1 UpperLeftX = 0 ' Til brug på andre pcer med højere skærmopløsning ' To use upon other PC's with higher screen resolution UpperLeftY = 0 if DisplayHeight > 1000 then ' afrund decimal til 0.125-multiplum, så Snap virker ' Rounding decimal to multiple of 0.125, so Snap works WindowWidth = 1280 WindowHeight = 960 WF = 1.25 HF = 1.25 Font0 = 10 Font1 = 12 Font2 = 14 else WindowWidth = 1024 WindowHeight = 768 WF = 1 HF = 1 Font0 = 9 Font1 = 11 Font2 = 12 end if DIM XandY (500, 3) ' array til at holde de klikkede X- og Y-værdier ' Array to hold the clicked X or Y value XandY (0, 3) = 1 DIM Background (500, 3) ' array til at holde tidligere shapes brugt som baggrund for ny tegning ' Array to hold a previous shape to be used as the background for a new drawing Background (0, 3) = 1 nomainwin [undo1] open "PointWriter 1.0 for POV-Ray by Christian Nevado (Last Point) (Current Point) (Mouse Position)" for graphics_nf_nsb as #grid #grid, "trapclose [quit]" [drawgrid] print #grid, "setfocus" scan #grid, "when characterInput [letter]" [background] ' Tilføjet label for at bevare Model background ved brug af Write ' Added to maintain the label background model using the Write if NoGrid = 1 then #grid, "cls" end if if UseModel = 1 then loadbmp "model", "Model.bmp" ' Uden komplet sti søger programmet denne fil i sin egen mappe ' Unless specifying a complete path, Place this file in the PointWriter folder #grid, "backcolor white ; background model" #grid, "drawsprites" end if if NoGrid = 1 then goto [skipgrid] end if gosub [gridcolor] 'extent of axis lines Leftmost = 25 Rightmost = 900 Lower = 675 Upper = 25 ' Draw main axes (X=0 and Y=0) #grid, "size 4 ; color ";GridCol$;" ; up ; place ";50*WF+400*CenterY*WF;" ";25*HF;" ; down ; line ";50*WF+400*CenterY*WF;" ";(Upper+1)*HF;" ";50*WF+400*CenterY*WF;" ";Lower*HF; ' Y-akse ' Y-Axis #grid, "size 4 ; color ";GridCol$;" ; up ; place ";Leftmost*WF;" ";650*HF-300*CenterX*HF;" ; down ; line ";25*WF;" ";650*HF-300*CenterX*HF;" ";Rightmost*WF;" ";650*HF-300*CenterX*HF; ' X-akse ' X-Axis ' Plot out grid and axis labels on screen YAxisOffset = 10 Adjustment = 0 DoubleDigitShift = 10 if WF = 1.25 then ' Large Screen Resolution for DashY = 1 to 13 ' Vandrette markeringer langs y ' Horizontal selections along y if DashY > 9 then Adjustment = 1 end if #grid, "size 2 ; color ";GridCol$;" ; up ; place ";Leftmost*WF;" ";DashY*50*HF;" ; down ; line ";Leftmost*WF;" ";DashY*50*HF;" ";Rightmost*WF;" ";DashY*50*HF;'3 #grid, "size 1 ; color ";GridCol$;" ; up ; place ";Leftmost*WF;" ";DashY*50*HF-10*HF;" ; down ; line ";Leftmost*WF;" ";DashY*50*HF-10*HF;" ";Rightmost*WF;" ";DashY*50*HF-10*HF; ' Kvarte enheder ' Quarter Units #grid, "size 1 ; color ";GridCol$;" ; up ; place ";Leftmost*WF;" ";DashY*50*HF-20*HF;" ; down ; line ";Leftmost*WF;" ";DashY*50*HF-20*HF;" ";Rightmost*WF;" ";DashY*50*HF-20*HF; ' Halve enheder ' Half Units if DashY > 1 then #grid, "size 1 ; color ";GridCol$;" ; up ; place ";Leftmost*WF;" ";DashY*50*HF-30*HF;" ; down ; line ";Leftmost*WF;" ";DashY*50*HF-30*HF;" ";Rightmost*WF;" ";DashY*50*HF-30*HF; 'kvarte enheder ' Quarter Units #grid, "size 1 ; color ";GridCol$;" ; up ; place ";Leftmost*WF;" ";DashY*50*HF-40*HF;" ; down ; line ";Leftmost*WF;" ";DashY*50*HF-40*HF;" ";Rightmost*WF;" ";DashY*50*HF-40*HF; 'kvarte enheder ' Quarter Units end if ' Axis labels #grid, "backcolor white ; font Arial 15 ; color black ; up ; place ";(10*WF)+(415*CenterY*WF)-(DoubleDigitShift*Adjustment*WF);" ";(DashY*50*HF)-(10*HF);" ; down ;\ ";13-6*CenterX-DashY; next DashY else ' Up to 1024 x 768 Screen Resolution for DashY = 1 to 13 ' Vandrette markeringer langs y ' Horizontal selections along y if DashY < 3 then Adjustment = 1 end if #grid, "size 2 ; color ";GridCol$;" ; up ; place ";Leftmost;" ";DashY*50;" ; down ; line ";25;" ";DashY*50;" ";Rightmost;" ";DashY*50;'3 #grid, "size 1 ; color ";GridCol$;" ; up ; place ";Leftmost;" ";DashY*50-12.5;" ; down ; line ";25;" ";DashY*50-12.5;" ";Rightmost;" ";DashY*50-12.5; 'Kvarte enheder ' Quarter Units #grid, "size 1 ; color ";GridCol$;" ; up ; place ";Leftmost;" ";DashY*50-25;" ; down ; line ";25;" ";DashY*50-25;" ";Rightmost;" ";DashY*50-25; 'Halve enheder ' Half Units if DashY > 1 then #grid, "size 1 ; color ";GridCol$;" ; up ; place ";Leftmost;" ";DashY*50-37.5;" ; down ; line ";25;" ";DashY*50-37.5;" ";Rightmost;" ";DashY*50-37.5; 'kvarte enheder ' Quarter Units end if #grid, "backcolor white ; font Arial 15 ; color black ; up ; place ";10+(415*CenterY)-(DoubleDigitShift*Adjustment);" ";(DashY*50)+5;" ; down ;\ ";13-6*CenterX-DashY; next DashY end if XAxisOffset = 10 Adjustment = 0 DoubleDigitShift = 10 if WF = 1.25 then ' Large Screen Resolution #grid, "size 2 ; color ";GridCol$;" ; up ; place ";50*WF;" ";25*HF;" ; down ; line ";50*WF;" ";25*HF;" ";50*WF;" ";675*HF;'3 for DashX = 1 to 17 ' Lodrette markeringer langs x ' Vertical selections along x if DashX > 9 then Adjustment = 1 end if #grid, "size 2 ; color ";GridCol$;" ; up ; place ";((DashX+1)*50*WF);" ";25*HF;" ; down ; line ";(DashX+1)*50*WF;" ";25*HF;" ";(DashX+1)*50*WF;" ";Lower*HF;'3 #grid, "size 1 ; color ";GridCol$;" ; up ; place ";((DashX+1)*50*WF)-10*WF;" ";25*HF;" ; down ; line ";(DashX+1)*50*WF-10*WF;" ";25*HF;" ";(DashX+1)*50*WF-10*WF;" ";Lower*HF; ' Kvarte enheder ' Quarter Units #grid, "size 1 ; color ";GridCol$;" ; up ; place ";((DashX+1)*50*WF)-20*WF;" ";25*HF;" ; down ; line ";(DashX+1)*50*WF-20*WF;" ";25*HF;" ";(DashX+1)*50*WF-20*WF;" ";Lower*HF; ' Halve enheder ' Half Units #grid, "size 1 ; color ";GridCol$;" ; up ; place ";((DashX+1)*50*WF)-30*WF;" ";25*HF;" ; down ; line ";(DashX+1)*50*WF-30*WF;" ";25*HF;" ";(DashX+1)*50*WF-30*WF;" ";Lower*HF; ' Kvarte enheder ' Quarter units #grid, "size 1 ; color ";GridCol$;" ; up ; place ";((DashX+1)*50*WF)-40*WF;" ";25*HF;" ; down ; line ";(DashX+1)*50*WF-40*WF;" ";25*HF;" ";(DashX+1)*50*WF-40*WF;" ";Lower*HF; ' Kvarte enheder ' Quarter Units #grid, "backcolor white ; font Arial 15 ; color black ; up ; place ";((DashX-0.2)*50*WF)-(DoubleDigitShift*Adjustment*WF);" ";700*HF-325*CenterX*HF;" ; down ;\ ";DashX-8*CenterY-1; next DashX else ' Up to 1024 x 768 Screen Resolution #grid, "size 2 ; color ";GridCol$;" ; up ; place ";50*WF;" ";25*HF;" ; down ; line ";50*WF;" ";25*HF;" ";50*WF;" ";675*HF;'3 for DashX = 1 to 17 ' Lodrette markeringer langs x ' Vertical selections along x if DashX > 9 then Adjustment = 1 end if #grid, "size 2 ; color ";GridCol$;" ; up ; place ";(DashX+1)*50;" ";Upper;" ; down ; line ";(DashX+1)*50;" ";Upper;" ";(DashX+1)*50;" ";Lower;'3 #grid, "size 1 ; color ";GridCol$;" ; up ; place ";(DashX+1)*50-12.5;" ";Upper;" ; down ; line ";(DashX+1)*50-12.5;" ";Upper;" ";(DashX+1)*50-12.5;" ";Lower; ' Kvarte enheder ' Quarter Units #grid, "size 1 ; color ";GridCol$;" ; up ; place ";(DashX+1)*50-25;" ";Upper;" ; down ; line ";(DashX+1)*50-25;" ";Upper;" ";(DashX+1)*50-25;" ";Lower; ' Halve enheder ' Half Units #grid, "size 1 ; color ";GridCol$;" ; up ; place ";(DashX+1)*50-37.5;" ";Upper;" ; down ; line ";(DashX+1)*50-37.5;" ";Upper;" ";(DashX+1)*50-37.5;" ";Lower; ' Kvarte enheder ' Quarter Units XShift = 0 if DashX-(8*CenterY)-1.1 < 0 then XShift = -10 else XShift = 10 end if #grid, "backcolor white ; font Arial 15 ; color black ; up ; place ";(DashX-0.2)*50-(DoubleDigitShift*Adjustment)+(CenterY*XShift);" ";700-325*CenterX;" ; down ;\ ";DashX-(8*CenterY)-1; next DashX end if [skipgrid] ' Main Screen Layout ' 900+: text in box ' 1003: Menu shortcut LeftBox = 900 RightBox = 1000 Shortcut = 1003 #grid, "font Arial ";Font0;" ; backcolor white ; color black ; place ";45*WF;" ";17*HF;" ; down ;\ Press arrow key between clicks for V or H lines" ' Menu Item - HELP #grid, "size 1 ; font Arial ";Font1;" bold ; color blue ; backcolor white ; up ; place ";LeftBox*WF;" ";25*HF;" ; down ; boxfilled ";RightBox*WF;" ";100*HF;" ; place ";905*WF;" ";45*HF;" ;\ PointWriter" #grid, "up ; place ";905*WF;" ";65*HF;" ;\ for POVRay" #grid, "backcolor white ; place ";Shortcut*WF;" ";65*HF;" ;\H" ' Points out of 500 Counter #grid, "font Arial ";Font2;" bold ; place ";910*WF;" ";90*HF;" ;\ ";Points;" / ";500-Points ' FØR: #grid, "font Arial ";Font2;" bold ; place ";915*WF;" ";90*HF;" ;\ Left: ";500-Points ' Menu Item - NEW #grid, "color black ; backcolor cyan ; up ; place ";LeftBox*WF;" ";100*HF;" ; down ; boxfilled ";RightBox*WF;" ";125*HF;" ; place ";925*WF;" ";120*HF;" ;\ New" #grid, "backcolor white ; place ";Shortcut*WF;" ";120*HF;" ;\N" ' Menu Item - UNDO #grid, "backcolor yellow ; up ; place ";LeftBox*WF;" ";125*HF;" ; down ; boxfilled ";RightBox*WF;" ";150*HF;" ; place ";925*WF;" ";145*HF;" ;\ Undo" #grid, "backcolor white ; place ";Shortcut*WF;" ";145*HF;" ;\Z" ' Menu Item - EDIT #grid, "backcolor yellow ; up ; place ";LeftBox*WF;" ";150*HF;" ; down ; boxfilled ";RightBox*WF;" ";175*HF;" ; place ";930*WF;" ";170*HF;" ;\Edit" #grid, "backcolor white ; place ";Shortcut*WF;" ";170*HF;" ;\E" ' Menu Item - CENTER X #grid, "backcolor white ; up ; place ";LeftBox*WF;" ";175*HF;" ; down ; boxfilled ";RightBox*WF;" ";200*HF;" ; place ";915*WF;" ";195*HF;" ;\ Center X" #grid, "backcolor white ; place ";Shortcut*WF;" ";195*HF;" ;\X" ' Menu Item - CENTER Y #grid, "backcolor white ; up ; place ";LeftBox*WF;" ";200*HF;" ; down ; boxfilled ";RightBox*WF;" ";225*HF;" ; place ";915*WF;" ";220*HF;" ;\ Center Y" #grid, "backcolor white ; place ";Shortcut*WF;" ";220*HF;" ;\Y" ' Menu Item - MODEL BITMAP FILE #grid, "backcolor lightgray ; up ; place ";LeftBox*WF;" ";225*HF;" ; down ; boxfilled ";RightBox*WF;" ";250*HF;" ; place ";905*WF;" ";245*HF;" ;\'Model.bmp'" #grid, "backcolor white ; place ";(Shortcut-1)*WF;" ";245*HF;" ;\M" ' Menu Item - WHITE GRID #grid, "backcolor lightgray ; up ; place ";LeftBox*WF;" ";250*HF;" ; down ; boxfilled ";RightBox*WF;" ";275*HF;" ; color white ; place ";905*WF;" ";268*HF;" ;\ White" #grid, "color black ; up ; place ";955*WF;" ";268*HF;" ;\ grid" #grid, "backcolor white ; place ";(Shortcut-2)*WF;" ";268*HF;" ;\W" ' Menu Item - NO GRID #grid, "backcolor lightgray ; up ; place ";LeftBox*WF;" ";275*HF;" ; down ; boxfilled ";RightBox*WF;" ";300*HF;" ; place ";915*WF;" ";293*HF;" ;\ No grid" #grid, "backcolor white ; place ";Shortcut*WF;" ";293*HF;" ;\G" ' Menu Item - SAVE WORK #grid, "backcolor white ; up ; place ";LeftBox*WF;" ";300*HF;" ; down ; boxfilled ";RightBox*WF;" ";325*HF;" ; place ";905*WF;" ";320*HF;" ;\ Save work" #grid, "backcolor white ; place ";Shortcut*WF;" ";320*HF;" ;\S" ' Menu Item - RELOAD WORK #grid, "backcolor white ; up ; place ";LeftBox*WF;" ";325*HF;" ; down ; boxfilled ";RightBox*WF;" ";350*HF;" ; place ";907*WF;" ";345*HF;" ;\Load work" #grid, "backcolor white ; place ";Shortcut*WF;" ";345*HF;" ;\R" ' Menu Item - WORK IN BACK #grid, "backcolor white ; up ; place ";LeftBox*WF;" ";350*HF;" ; down ; boxfilled ";RightBox*WF;" ";375*HF;" ; place ";903*WF;" ";370*HF;" ;\WorkBehind" #grid, "backcolor white ; place ";Shortcut*WF;" ";370*HF;" ;\A" ' Menu Item - WRITE SPLINE #grid, "backcolor darkcyan ; up ; place ";LeftBox*WF;" ";375*HF;" ; down ; boxfilled ";RightBox*WF;" ";400*HF;" ; place ";902*WF;" ";395*HF;" ;\ Write spline" #grid, "backcolor white ; place ";Shortcut*WF;" ";395*HF;" ;\V" ' Menu Item - WRITE LATHE #grid, "backcolor green ; up ; place ";LeftBox*WF;" ";400*HF;" ; down ; boxfilled ";RightBox*WF;" ";425*HF;" ; place ";905*WF;" ";420*HF;" ;\ Write lathe" #grid, "backcolor white ; place ";Shortcut*WF;" ";420*HF;" ;\L" ' Menu Item - WRITE CUBIC LATHE #grid, "backcolor green ; up ; place ";LeftBox*WF;" ";425*HF;" ; down ; boxfilled ";RightBox*WF;" ";450*HF;" ; place ";905*WF;" ";445*HF;" ;\W CubLathe" #grid, "backcolor white ; place ";Shortcut*WF;" ";445*HF;" ;\B" ' Menu Item - CLOSE POLYGON #grid, "backcolor 0 175 0 ; up ; place ";LeftBox*WF;" ";450*HF;" ; down ; boxfilled ";RightBox*WF;" ";475*HF;" ; place ";907*WF;" ";470*HF;" ;\Close poly" #grid, "backcolor white ; place ";Shortcut*WF;" ";470*HF;" ;\K" ' Menu Item - WRITE POLYGON #grid, "backcolor green ; up ; place ";LeftBox*WF;" ";475*HF;" ; down ; boxfilled ";RightBox*WF;" ";500*HF;" ; place ";910*WF;" ";495*HF;" ;\Write poly" #grid, "backcolor white ; place ";Shortcut*WF;" ";495*HF;" ;\O" ' Menu Item - CLOSE PRISM #grid, "backcolor 0 175 0 ; up ; place ";LeftBox*WF;" ";500*HF;" ; down ; boxfilled ";RightBox*WF;" ";525*HF;" ; place ";905*WF;" ";520*HF;" ;\Close prism" #grid, "backcolor white ; place ";(Shortcut+3)*WF;" ";520*HF;" ;\I" ' Menu Item - WRITE PRISM #grid, "backcolor green ; up ; place ";LeftBox*WF;" ";525*HF;" ; down ; boxfilled ";RightBox*WF;" ";550*HF;" ; place ";905*WF;" ";545*HF;" ;\Write prism" #grid, "backcolor white ; place ";Shortcut*WF;" ";545*HF;" ;\P" ' Menu Item - CLOSE CUBIC PRISM #grid, "backcolor 0 175 0 ; up ; place ";LeftBox*WF;" ";550*HF;" ; down ; boxfilled ";RightBox*WF;" ";575*HF;" ; place ";904*WF;" ";570*HF;" ;\Cl prismCub" #grid, "backcolor white ; place ";Shortcut*WF;" ";570*HF;" ;\U" ' Menu Item - WRITE CUBIC PRISM #grid, "backcolor green ; up ; place ";LeftBox*WF;" ";575*HF;" ; down ; boxfilled ";RightBox*WF;" ";600*HF;" ; place ";902*WF;" ";595*HF;" ;\WrPrismCub" #grid, "backcolor white ; place ";Shortcut*WF;" ";595*HF;" ;\C" ' Menu Item - SNAP - OFF, 0.1, 0.2 #grid, "backcolor white ; up ; place ";LeftBox*WF;" ";600*HF;" ; down ; boxfilled ";RightBox*WF;" ";625*HF;" ; place ";910*WF;" ";620*HF;" ;\ 'Snap' off" #grid, "backcolor white ; place ";Shortcut*WF;" ";620*HF;" ;\0" #grid, "backcolor white ; up ; place ";LeftBox*WF;" ";625*HF;" ; down ; boxfilled ";RightBox*WF;" ";650*HF; #grid, "backcolor white ; place ";Shortcut*WF;" ";637*HF;" ;\1" #grid, "backcolor white ; place ";Shortcut*WF;" ";653*HF;" ;\2" select case case Snap = 0 and Snap2 = 1 #grid, "backcolor white ; color red ; place ";903*WF;" ";645*HF;" ;\ ";0.125/HF; #grid, "backcolor white ; color lightgray ; place ";950*WF;" ";645*HF;" ;\ ";0.25/HF case Snap = 1 and Snap2 = 0 #grid, "backcolor white ; color lightgray ; place ";903*WF;" ";645*HF;" ;\ ";0.125/HF; #grid, "backcolor white ; color red ; place ";950*WF;" ";645*HF;" ;\ ";0.25/HF case Snap = 0 and Snap2 = 0 #grid, "backcolor white ; color lightgray ; place ";903*WF;" ";645*HF;" ;\ ";0.125/HF; #grid, "backcolor white ; color lightgray ; place ";950*WF;" ";645*HF;" ;\ ";0.25/HF end select ' Menu Item - EXIT #grid, "color black ; backcolor red ; up ; place ";900*WF;" ";650*HF;" ; down ; boxfilled ";RightBox*WF;" ";675*HF;" ; place ";928*WF;" ";670*HF;" ;\ Exit" #grid, "backcolor white ; place ";Shortcut*WF;" ";670*HF;" ;\Q" ' Menu Item - Move Spline Object #grid, "color black ; backcolor white ; up ; place ";900*WF;" ";675*HF;" ; down ; boxfilled ";RightBox*WF;" ";700*HF;" ; place ";903*WF;" ";695*HF;" ;\Lf Up Dn Rg" #grid, "color darkgreen ; backcolor white ; place ";895*WF;" ";715*HF;" ;\(F1, F2, F3, F4)" goto [Undo2] [nextpoint] #grid "when leftButtonDown [drawpoint]" #grid "when mouseMove [writepos]" wait [writepos] gosub [snapto] #grid, "backcolor white ; place ";640*WF;" 0 ; color white ; boxfilled ";790*WF;" ";21*HF; ' display current mouse position #grid, "color blue ; place ";650*WF;" ";18*HF;" ; down ;\M:(";MouseX/(50*WF)-8*CenterY-1;" , "; (650*HF-MouseY)/(50*HF)-6*CenterX;") " ' afrund y her ' rounding y here goto [nextpoint] [drawpoint] if MouseX > LeftBox*WF then ' Mouse click is in Menu area select case case MouseY > 675*HF ' Move spline by 0.25-Unit increments goto [moveit] case MouseY > 650*HF ' QUIT goto [quit] case MouseY > 625*HF ' SNAP if MouseX > 950*WF then ' 0.250-Unit Mode Snap=1 Snap2=0 else ' 0.125-Unit Mode Snap=0 Snap2=1 end if goto [drawgrid] case MouseY > 600*HF ' Toggle SNAP to OFF Snap=0 Snap2=0 goto [drawgrid] case MouseY > 575*HF ' Write Cubic Prism [pressedc] PrismCubic=1 SubPrismCubic=0 Prism=0 SubPrism=0 Polygon=0 SubPoly=0 LatheCubic=0 Lathe=0 Spline=0 Plot=0 goto [makefile] case MouseY > 550*HF ' Close Cubic Prism [pressedu] PrismCubic=0 SubPrismCubic=1 XandY(Points+3,3)=1 Prism=0 SubPrism=0 Polygon=0 SubPoly=0 LatheCubic=0 Lathe=0 Spline=0 Plot=0 goto [Undo2] case MouseY > 525*HF ' Write Prism [pressedp] PrismCubic=0 SubPrismCubic=0 Prism=1 SubPrism=0 Polygon=0 SubPoly=0 LatheCubic=0 Lathe=0 Spline=0 Plot=0 goto [makefile] case MouseY > 500*HF ' Close Prism [pressedi] PrismCubic=0 SubPrismCubic=0 Prism=0 SubPrism=1 XandY(Points+1,3)=1 Polygon=0 SubPoly=0 LatheCubic=0 Lathe=0 Spline=0 Plot=0 goto [Undo2] case MouseY > 475*HF ' Write Polygon [pressedo] PrismCubic=0 SubPrismCubic=0 Prism=0 SubPrism=0 Polygon=1 SubPoly=0 LatheCubic=0 Lathe=0 Spline=0 Plot=0 goto [makefile] case MouseY > 450*HF ' Close Polygon [pressedk] PrismCubic=0 SubPrismCubic=0 Prism=0 SubPrism=0 Polygon=0 SubPoly=1 XandY(Points+1,3)=1 LatheCubic=0 Lathe=0 Spline=0 Plot=0 goto [Undo2] case MouseY > 425*HF ' Write Cubic Lathe [pressedb] PrismCubic=0 SubPrismCubic=0 Prism=0 SubPrism=0 Polygon=0 SubPoly=0 LatheCubic=1 Lathe=0 Spline=0 Plot=0 goto [makefile] case MouseY > 400*HF ' Write Lathe [pressedl] PrismCubic=0 SubPrismCubic=0 Prism=0 SubPrism=0 Polygon=0 SubPoly=0 LatheCubic=0 Lathe=1 Spline=0 Plot=0 goto [makefile] case MouseY > 375*HF ' Write Spline [pressedv] PrismCubic=0 SubPrismCubic=0 Prism=0 SubPrism=0 Polygon=0 SubPoly=0 LatheCubic=0 Lathe=0 Spline=1 Plot=0 goto [makefile] case MouseY > 350*HF ' Load underlay Drawing - "Work in Back" [presseda] WorkBackg = 1-WorkBackg goto [readbackground] case MouseY > 325*HF ' Load Work [pressedr] PrismCubic=0 SubPrismCubic=0 Prism=0 SubPrism=0 Polygon=0 SubPoly=0 LatheCubic=0 Lathe=0 Spline=0 Plot=0 goto [readpoints] case MouseY > 300*HF ' Save work [presseds] PrismCubic=0 SubPrismCubic=0 Prism=0 SubPrism=0 Polygon=0 SubPoly=0 LatheCubic=0 Lathe=0 Spline=0 Plot=1 goto [makefile] case MouseY > 275*HF ' No Grid goto [nogrid] case MouseY > 250*HF ' White Grid goto [wgrid] case MouseY > 225*HF ' Load Model.bmp goto [model] case MouseY > 200*HF ' Center Y-Axis [pressedy] #grid, "cls" CenterY = 1-CenterY goto [drawgrid] case MouseY > 175*HF ' Center X-Axis [pressedx] #grid, "cls" CenterX = 1-CenterX goto [drawgrid] case MouseY > 150*HF ' Edit Edit = (Edit-1)^2 goto [drawgrid] case MouseY > 125*HF ' Undo goto [erase] case MouseY > 100*HF ' New goto [new] case MouseY > 75*HF ' Help goto [helpme] end select end if Points = Points+1 if Snap = 1 or Snap2 = 1 then gosub [snapto] end if if KeepX = 0 then ' Hvis pil op eller ned er trykket ' If arrow up or down is pressed XandY(Points, 1) = MouseX else XandY(Points, 1) = XandY(Points-1, 1) KeepX=0 ' nulstil ' reset end if if KeepY = 0 then ' Hvis pil højre eller venstre er trykket ' If arrow left or right is pressed XandY(Points, 2) = MouseY else XandY(Points, 2) = XandY(Points-1, 2) KeepY=0 ' nulstil ' reset end if [Undo2] if Points < 0 then goto [new] ' Så vi ikke får fejlmeddelelser ved at bruge Undo for meget ' So we do not get error messages by using Undo too many times end if if SubPrismCubic = 1 then FindSub=Points Points = Points + 3 ' Her skaber vi et ekstra punkt, som bliver en kopi af det, der skal lukkes ' Here, we create an additional point, which is a copy of it to be closed while XandY(FindSub,3)=0 FindSub = FindSub-1 wend FindSub = FindSub+3 XandY(Points-2, 1) = XandY(FindSub-2, 1)' PrismCount fandt vi længere nede - et punkt, hvor subprisms skiller ' PrismCount we found further down - a point where subprisms stand XandY(Points-2, 2) = XandY(FindSub-2, 2) XandY(Points-1, 1) = XandY(FindSub-1, 1)' PrismCount fandt vi længere nede - et punkt, hvor subprisms skiller ' PrismCount we found further down - a point where subprisms stand XandY(Points-1, 2) = XandY(FindSub-1, 2) XandY(Points, 1) = XandY(FindSub, 1) ' PrismCount fandt vi længere nede - et punkt, hvor subprisms skiller ' PrismCount we found further down - a point where subprisms stand XandY(Points, 2) = XandY(FindSub, 2) SubPrismCubic = 0 ' reset ' Marker for, om subprism er aktuelt, så vi ikke slæber rundt på det gennem hele programmet ' Mark, on subprism is currently so we carry around with it through the entire program goto [skipline] end if if SubPrism = 1 then FindSub = Points ' Her skaber vi et ekstra punkt, som bliver en kopi af det, der skal lukkes ' Here, we create an additional point, which is a copy of it to be closed Points = Points + 1 while XandY(FindSub, 3) = 0 FindSub = FindSub-1 wend FindSub = FindSub+1 XandY(Points, 1) = XandY(FindSub, 1) ' PrismCount fandt vi længere nede - et punkt, hvor subprisms skiller ' PrismCount we found further down - a point where subprisms stand XandY(Points, 2) = XandY(FindSub, 2) SubPrism = 0 ' reset ' Marker for, om subprism er aktuelt, så vi ikke slæber rundt på det gennem hele programmet ' Mark, on subprism is currently so we carry around with it through the entire program goto [skipline] end if if SubPoly = 1 then FindSub = Points Points = Points + 1 ' Her skaber vi et ekstra punkt, som bliver en kopi af det, der skal lukkes ' Here, we create an additional point, which is a copy of it to be closed while XandY(FindSub, 3)=0 FindSub = FindSub-1 wend FindSub = FindSub+1 XandY(Points, 1) = XandY(FindSub, 1) ' PolyCount fandt vi længere nede - et punkt, hvor subpolys skiller ' PrismCount we found further down - a point where subprisms stand XandY(Points, 2) = XandY(FindSub, 2) SubPoly = 0 ' reset 'Marker for, om subpoly er aktuelt, så vi ikke slæber rundt på det gennem hele programmet ' Mark, on subprism is currently so we carry around with it through the entire program goto [skipline] end if if Edit = 1 then #grid, "size 5 ; font Arial 20 bold ; color green ; backcolor white ; place ";800*WF;" ";80*HF;" ;\EDIT" #grid, "size 2 ; font Arial ";Font1;" bold ; color darkgreen ; backcolor white ; place ";400*WF;" ";725*HF;" ;\Click point to be edited" Edit = 2 goto [skipline] ' Added to redraw line - BW goto [nextpoint] end if if Edit = 2 then for editcheck = 0 to Points-1 if abs (XandY(editcheck, 1) - XandY(Points, 1)) < 10 and abs (XandY(editcheck, 2) - XandY(Points, 2)) < 10 then ' Hvilket gammelt punkt er der nu klikket på? Sammenligner med alle indenfor 0.1 unit ' Which old item is currently clicked? Comparing to all within 0.1 unit #grid, "size 5 ; color green ; set "; XandY(editcheck, 1); " "; XandY(editcheck, 2) ' Sæt en grøn prik hvor punkt der skal rettes ligger ' Put a green dot where the point to be addressed is #grid, "size 2 ; font Arial ";Font1;" bold ; color darkgreen ; backcolor white ; place ";400*WF;" ";725*HF;" ;\Click new position for point" Edit = 3 ' Nu har vi fundet punktet blandt de tegnede og gemt det. Næste skridt er at vælge det nye punkt der skal erstatte det ' Now we have found the point among the undersigned and saved it. The next step is to select the new item to replace it Points = Points-1 goto [nextpoint] end if next editcheck ' Hvis der ikke findes matches med det nye punkt, tilføjes figuren en streg i stedet, men edit mode forbliver ON ' If no matches are found with the new point is added to the figure a line instead, but edit mode remains ON end if if Edit = 3 then XandY(editcheck, 1) = XandY(Points, 1) ' Det gamle punkt udskiftes med det nye ' The existing entry is replaced with the new XandY(editcheck, 2) = XandY(Points, 2) Points = Points-1 Edit = 0 ' Reset Edit Mode to Zero #grid, "cls" goto [drawgrid] end if [skipline] #grid, "size 5 ; color blue ; set "; XandY(Points, 1); " "; XandY(Points, 2) ' Sæt en rød prik hvor det nye punkt ligger ' Put a red dot where the new point is ' Used / remaining point counter #grid, "font Arial ";Font2;" bold ; color red ; backcolor white ; place ";910*WF;" ";90*HF;" ;\ ";Points;" / ";500-Points ' FØR: BEFORE: #grid, "font Arial ";Font2;" bold ; backcolor white ; place ";915*WF;" ";90*HF;" ;\ Left: ";500-Points ' Change menu text color depending on SNAP mode select case case Snap = 0 and Snap2 = 1 #grid, "backcolor white ; color red ; place ";903*WF;" ";645*HF;" ;\ ";0.125/HF; #grid, "backcolor white ; color lightgray ; place ";950*WF;" ";645*HF;" ;\ ";0.25/HF; case Snap = 1 and Snap2 = 0 #grid, "backcolor white ; color lightgray ; place ";903*WF;" ";645*HF;" ;\ ";0.125/HF; #grid, "backcolor white ; color red ; place ";950*WF;" ";645*HF;" ;\ ";0.25/HF; case else #grid, "backcolor white ; color lightgray ; place ";903*WF;" ";645*HF;" ;\ ";0.125/HF; #grid, "backcolor white ; color lightgray ; place ";950*WF;" ";645*HF;" ;\ ";0.25/HF; end select if WorkBackg = 1 then for Back = 2 to PointsB #grid, "size 3 ; color 150 150 150 ; line "; Background(Back-1, 1) ;" "; Background(Back-1, 2);" ";Background(Back, 1);" ";Background(Back, 2) if Background(Back, 3) = 1 then ' Subpoly her? Så spring over ' Subpoly here? So skip Back = Back + 1 end if next Back end if select case Points case 0, -1 case 1 ' display current point coordinates when # of points > 1 #grid, "backcolor white ; color red ; place ";500*WF;" ";18*HF;" ; down ;\C:(";XandY(1, 1)/(50*WF)-8*CenterY-1;" , ";(650*HF-XandY(1,2))/(50*HF)-6*CenterX;")" case else ' Hvis dette ikke er første tegnede punkt, så tegn en streg mellem forrige og dette ' If this is not the first plotted point, then draw a line between the previous and this for Streg = 2 to Points #grid, "size 2 ; color red ; line "; XandY(Streg-1,1) ;" "; XandY(Streg-1,2);" ";XandY(Streg,1);" ";XandY(Streg,2) #grid, "size 5 ; color blue ; set "; XandY(Streg, 1); " "; XandY(Streg,2) ' Sæt en rød prik hvor det nye punkt ligger ' Put a BLUE dot where the new point is Xpos1 = XandY(Points, 1) / (50*WF) -8*CenterY -1 Ypos1 = (650*HF - XandY(Points, 2)) / (50*HF) -6*CenterX Xpos0 = XandY(Points-1,1)/(50*WF) -8*CenterY -1 Ypos0 = (650*HF - XandY(Points-1, 2)) / (50*HF) -6*CenterX Distance = sqr((Xpos1 - Xpos0)^2 + (Ypos1 - Ypos0)^2) if Distance = 0 then Points = Points-1 notice "You have clicked the same point twice" goto [nextpoint] end if Distance$ = using("##.##", Distance) #grid, "backcolor white ; color white ; place ";400*WF;" 0 ; down ; boxfilled ";1020*WF;" ";22*HF; ' sletter alt tidligere ' deletes all previous ' display Last point coordinates #grid, "font Arial ";Font2;" bold ; backcolor white ; color lightgray ; place ";350*WF;" ";18*HF;" ; down ;\L:(";Xpos0;" , ";Ypos0;")" ' display current point coordinates if Angle = 0 or Angle = 45 or Angle = 90 then #grid, "backcolor white ; color 0 175 0 ; place ";500*WF;" ";18*HF;" ; down ;\C:(";Xpos1;" , ";Ypos1;")" else #grid, "backcolor white ; color red ; place ";500*WF;" ";18*HF;" ; down ;\C:(";Xpos1;" , ";Ypos1;")" ' DETTE ER I SKOVEN ' THIS IS IN THE FOREST end if #grid, "backcolor white ; color lightgray ; place ";790*WF;" ";18*HF;" ; down ;\ Distance ";Distance$ if Xpos1<>Xpos0 then AngRad = ATN((Ypos1 - Ypos0) / (Xpos1 - Xpos0)) AngDeg = abs(AngRad * 180/3.14159265) else AngDeg = 90 end if #grid, "backcolor white ; color lightgray ; place ";910*WF;" ";18*HF;" ; down ;\ Angle ";using("##.##", AngDeg) if XandY(Streg, 3)=1 then ' Subpoly her? Så spring over ' Subpoly here? So skip Streg=Streg+1 end if next Streg end select #grid, "flush" goto [nextpoint] [makefile] ' Her kopieres de tegnede punkter til filen "C;\WINDOWS\Skrivebord\POVpoints.txt" med fuld syntaks: ' Here copied the plotted points to the file "C;\WINDOWS\Desktop\POVpoints.txt" with full syntax: if Plot = 1 simply if Plot = 1 then open "Work.txt" for output as #o ' open "POVpoints.txt" for append as #p ' Uden komplet sti søger programmet denne fil i sin egen mappe ' Without the full path it searches this file in its own folder for Count = 0 to Points-1 print #o, XandY(Count, 1);" , ";XandY(Count, 2);" , ";XandY(Count, 3);" , "; next Count print #o, XandY(Points, 1);" , ";XandY(Points, 2);" , ";XandY(Points, 3); ' Vi må hverken starte eller slutte med komma. så speciel linie til slutning ' We must not start or end with a comma. So special line to end close #O close #o goto [nextpoint] end if open "POVpoints.txt" for append as #p ' open "POVpoints.txt" for append as #p ' Uden komplet sti søger programmet denne fil i sin egen mappe ' Without the full path it searches this file in its own folder select case case Spline = 1 print #p, "spline {";Points;", "; case Lathe = 1 print #p, "lathe {linear_spline ";Points;", "; case LatheCubic = 1 print #p, "lathe {cubic_spline ";Points+3;", <";XandY(Points-2,1)/(50*WF)-8*CenterY-1;",";(650*HF-XandY(Points-2,2))/(50*HF)-6*CenterX;">,<";XandY(Points-1,1)/(50*WF)-8*CenterY-1;",";(650*HF-XandY(Points-1,2))/(50*HF)-6*CenterX;">,<";XandY(Points,1)/(50*WF)-8*CenterY-1;",";(650*HF-XandY(Points,2))/(50*HF)-6*CenterX;">,"; case Polygon = 1 print #p, "polygon {";Points;", "; case Prism = 1 print #p, "prism {linear_spline 0, 1, ";Points;", "; case PrismCubic = 1 print #p, "prism {cubic_spline 0, 1, ";Points;", "; end select for Count = 1 to Points-1 print #p, "<";XandY(Count,1)/(50*WF)-8*CenterY-1;",";(650*HF-XandY(Count,2))/(50*HF)-6*CenterX;">,"; next Count print #p, "<";XandY(Points,1)/(50*WF)-8*CenterY-1;",";(650*HF-XandY(Points,2))/(50*HF)-6*CenterX;">}" ' Den sidste skrives uden komma efter og med tuborghat ' The last written without commas after and with curly brace close #p ' ...og samme punkter kopieret direkte til Udklipsholder: ' ...and the same points directly copied to the clipboard: open "Skrivebord" for text as #t ' Denne lille rutine åbner kortvarigt et textvindue, så vi kan få spline-værdierne kopieret til Udklipsholder ' This little routine opens briefly a text window, so we can get the spline values are copied to the clipboard select case case Spline=1 print #t, "spline {";Points;", "; case Lathe=1 print #t, "lathe {linear_spline ";Points;", "; case LatheCubic=1 print #t, "lathe {cubic_spline ";Points+3;", <";XandY(Points-2,1)/(50*WF)-8*CenterY-1;",";(650*HF-XandY(Points-2,2))/(50*HF)-6*CenterX;">,<";XandY(Points-1,1)/(50*WF)-8*CenterY-1;",";(650*HF-XandY(Points-1,2))/(50*HF)-6*CenterX;">,<";XandY(Points,1)/(50*WF)-8*CenterY-1;",";(650*HF-XandY(Points,2))/(50*HF)-6*CenterX;">,"; case Polygon=1 print #t, "polygon {";Points;", "; case Prism=1 print #t, "prism {linear_spline 0, 1, ";Points;", "; case PrismCubic=1 print #t, "prism {cubic_spline 0, 1, ";Points;", "; end select for Count=1 to Points-1 print #t, "<";XandY(Count,1)/(50*WF)-8*CenterY-1;",";(650*HF-XandY(Count,2))/(50*HF)-6*CenterX;">,"; next Count print #t, "<";XandY(Points,1)/(50*WF)-8*CenterY-1;",";(650*HF-XandY(Points,2))/(50*HF)-6*CenterX;">}" ' Den sidste skrives uden komma efter og med tuborghat ' The last written without commas after and with curly brace print #t, "!selectall" print #t, "!copy" close #t ' goto [nextpoint] ' ERROR goto [background] [quit] close #grid stop [new] close #grid goto [reset] [model] UseModel=1-UseModel if UseModel = 0 then #grid, "cls" end if goto [drawgrid] [wgrid] WhiteGrid = 1-WhiteGrid if WhiteGrid = 1 then NoGrid = 0 Snap = 0 Snap2 = 0 #grid, "backcolor white" end if goto [drawgrid] [nogrid] NoGrid = 1-NoGrid if NoGrid = 1 then WhiteGrid = 0 Snap = 0 Snap2 = 0 else Snap = 0 Snap2 = 1 end if goto [drawgrid] [erase] close #grid Erase = 1 XandY(Points,1)=0 XandY(Points,2)=0 XandY(Points,3)=0 Points = Points-1 goto [undo1] [gridcolor] select case case (WhiteGrid=1) and (Snap=0) and (Snap2=0) GridCol$="white" case (WhiteGrid=1) and (Snap2=1) GridCol$="pink" case (WhiteGrid=1) and (Snap=1) GridCol$="pink" case (WhiteGrid=0) and (Snap2=1) GridCol$="darkpink" case (WhiteGrid=0) and (Snap=1) GridCol$="darkpink" case else GridCol$="blue" end select return [snapto] if Snap2 = 1 and Snap = 0 then Xval = MouseX-(100*int(MouseX/100)) select case case Xval>96.875 MouseX=MouseX-Xval+100 case Xval>90.625 MouseX=MouseX-Xval+93.75 case Xval>84.375 MouseX=MouseX-Xval+87.5 case Xval>78.125 MouseX=MouseX-Xval+81.25 case Xval>71.875 MouseX=MouseX-Xval+75 case Xval>65.625 MouseX=MouseX-Xval+68.75 case Xval>59.375 MouseX=MouseX-Xval+62.5 case Xval>53.125 MouseX=MouseX-Xval+56.25 case Xval>46.875 MouseX=MouseX-Xval+50 case Xval>40.625 MouseX=MouseX-Xval+43.75 case Xval>34.375 MouseX=MouseX-Xval+37.5 case Xval>28.125 MouseX=MouseX-Xval+31.25 case Xval>21.875 MouseX=MouseX-Xval+25 case Xval>15.625 MouseX=MouseX-Xval+18.75 case Xval>9.375 MouseX=MouseX-Xval+12.5 case Xval>3.125 MouseX=MouseX-Xval+6.25 case else MouseX=MouseX-Xval end select Yval = MouseY-(100*int(MouseY/100)) select case case Yval>96.875 MouseY=MouseY-Yval+100 case Yval>90.625 MouseY=MouseY-Yval+93.75 case Yval>84.375 MouseY=MouseY-Yval+87.5 case Yval>78.125 MouseY=MouseY-Yval+81.25 case Yval>71.875 MouseY=MouseY-Yval+75 case Yval>65.625 MouseY=MouseY-Yval+68.75 case Yval>59.375 MouseY=MouseY-Yval+62.5 case Yval>53.125 MouseY=MouseY-Yval+56.25 case Yval>46.875 MouseY=MouseY-Yval+50 case Yval>40.625 MouseY=MouseY-Yval+43.75 case Yval>34.375 MouseY=MouseY-Yval+37.5 case Yval>28.125 MouseY=MouseY-Yval+31.25 case Yval>21.875 MouseY=MouseY-Yval+25 case Yval>15.625 MouseY=MouseY-Yval+18.75 case Yval>9.375 MouseY=MouseY-Yval+12.5 case Yval>3.125 MouseY=MouseY-Yval+6.25 case else MouseY=MouseY-Yval end select return end if if Snap = 1 and Snap2 = 0 then Xval = MouseX-(100*int(MouseX/100)) select case case Xval>93.75 MouseX=MouseX-Xval+100 case Xval>81.25 MouseX=MouseX-Xval+87.5 case Xval>68.75 MouseX=MouseX-Xval+75 case Xval>56.25 MouseX=MouseX-Xval+62.5 case Xval>43.75 MouseX=MouseX-Xval+50 case Xval>31.25 MouseX=MouseX-Xval+37.5 case Xval>18.75 MouseX=MouseX-Xval+25 case Xval>6.25 MouseX=MouseX-Xval+12.5 case else MouseX=MouseX-Xval end select Yval = MouseY-(100*int(MouseY/100)) select case case Yval>93.75 MouseY=MouseY-Yval+100 case Yval>81.25 MouseY=MouseY-Yval+87.5 case Yval>68.75 MouseY=MouseY-Yval+75 case Yval>56.25 MouseY=MouseY-Yval+62.5 case Yval>43.75 MouseY=MouseY-Yval+50 case Yval>31.25 MouseY=MouseY-Yval+37.5 case Yval>18.75 MouseY=MouseY-Yval+25 case Yval>6.25 MouseY=MouseY-Yval+12.5 case else MouseY=MouseY-Yval end select return else return end if [readpoints] open "Work.txt" for input as #d Points = -1 dim XandY(500,3) [LæseLoop] Points = Points+1 input #d, XandY(Points,1) input #d, XandY(Points,2) input #d, XandY(Points,3) if eof(#d) < 0 then [Out] ' eof(#d) siger til ved End Of File og siger Stop når alle værdier i filen er læst. Antallet er DateStep ' eof (#d) says to the End Of File and say Stop when all values in the file is read. The number of online Step goto [LæseLoop] [Out] close #d goto [drawgrid] [readbackground] if WorkBackg=1 then open "Work.txt" for input as #b PointsB = -1 dim Background(500,3) [BackgroundLoop] PointsB = PointsB+1 input #b, Background(PointsB,1) input #b, Background(PointsB,2) input #b, Background(PointsB,3) if eof(#b) < 0 then [OutB] ' eof(#d) siger til ved End Of File og siger Stop når alle værdier i filen er læst. Antallet er DateStep ' eof (#d) says to the End Of File and say Stop when all values in the file is read. The number of online Step goto [BackgroundLoop] [OutB] close #b else #grid, "cls" end if goto [drawgrid] [letter] pressed$ = Inkey$ select case pressed$ case "h","H" goto [helpme] case "n","N" goto [new] case "x","X" goto [pressedx] case "y","Y" goto [pressedy] case "z","Z" goto [erase] case "e","E" Edit = (Edit-1)^2 goto [drawgrid] case "m","M" goto [model] case "w","W" goto [wgrid] case "g","G" goto [nogrid] case "s","S" goto [presseds] case "r","R" goto [pressedr] case "a","A" goto [presseda] ' work as background case "v","V" goto [pressedv] ' spline case "l","L" goto [pressedl] ' lathe case "b","B" goto [pressedb] ' lathe cubic case "o","O" goto [pressedo] ' polygon case "k","K" goto [pressedk] ' subpoly case "p","P" goto [pressedp] ' prism case "i","I" goto [pressedi] ' subprism case "c","C" ' prismcubic goto [pressedc] case "u","U" ' subprismcubic goto [pressedu] case "2" Snap = 1 Snap2 = 0 goto [drawgrid] case "1" Snap = 0 Snap2 = 1 ' Precise Snap on goto [drawgrid] case "0" Snap = 0 Snap2 = 0 ' Precise Snap off goto [drawgrid] case "q","Q" ' Quit goto [quit] end select Up$ = chr$(_VK_UP) Down$ = chr$(_VK_DOWN) Rig$ = chr$(_VK_RIGHT) Lef$ = chr$(_VK_LEFT) ScrUp$ = chr$(_VK_F2) ScrDn$ = chr$(_VK_F3) ScrLf$ = chr$(_VK_F1) ScrRg$ = chr$(_VK_F4) Key$ = left$(Inkey$, 2) select case right$(Key$,1) case Up$ KeepX = 1 case Down$ KeepX = 1 case Rig$ KeepY = 1 case Lef$ KeepY = 1 case ScrUp$ gosub [moveup] case ScrDn$ gosub [movedn] case ScrLf$ gosub [movelf] case ScrRg$ gosub [moverg] end select goto [drawgrid] [moveit] select case case MouseX < 925*WF gosub [movelf] case MouseX < 950*WF gosub [moveup] case MouseX < 975*WF gosub [movedn] case MouseX < 1000*WF gosub [moverg] end select goto [drawgrid] [moveup] for MoveU = 1 to Points XandY(MoveU, 2) = XandY(MoveU, 2) -12.5*HF next MoveU #grid, "cls" return [movedn] for MoveD = 1 to Points XandY(MoveD, 2) = XandY(MoveD, 2) +12.5*HF next MoveD #grid, "cls" return [movelf] for MoveL = 1 to Points XandY(MoveL, 1) = XandY(MoveL, 1) -12.5*WF next MoveL #grid, "cls" return [moverg] for MoveR = 1 to Points XandY(MoveR, 1) = XandY(MoveR, 1) +12.5*WF next MoveR #grid, "cls" return [helpme] RUN "NOTEPAD.EXE PointWriterHelp.txt" goto [drawgrid]