home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1993-01-17 | 12.4 KB | 626 lines |
- ' Structured Drawing
- '
- ' AMOS Basic 1992
- '
- ' ==================
- '
- ' This program needs a lot of work done on it
- ' you will have to work this one out for yourself!
- '
- Set Buffer 20
- '
- Degree
- Dim X(1000),Y(1000),GRIDX(500),GRIDY(500)
- '
- Global X(),Y(),GRIDX(),GRIDY(),NP,SNAP,GDN,PN,SXY,LE,SW
- Global AJ,OP
- LE=1
- '
- Close Editor
- '
- Screen Open 0,640,512,8,Hires+Laced
- Screen Display 0,,48,,
- Flash Off : Curs Off : Cls
- Palette $0,$888,,$999
- Change Mouse 2
- Ink 0
- '
- INITMENU
- GRID1
- '
- Do
- '
- Limit Mouse
- '
- If Key State(69) Then QUIT
- If Key State(89) Then REDRAW
- If Mouse Key=1 and LE=1 Then LINEDRAW
- If Mouse Key=1 and LE=2 Then ARC
- If Mouse Key=1 and LE=3 Then CIRCL
- '
- SXY
- '
- Loop
- '
- Procedure INITMENU
- Menu$(1)=" Project "
- Menu$(1,1)="---------"
- Menu$(1,2)=" New "
- Menu$(1,3)="---------"
- Menu$(1,4)=" Load "
- Menu$(1,5)="---------"
- Menu$(1,6)=" Save "
- Menu$(1,7)=" Save As "
- Menu$(1,8)="---------"
- Menu$(1,9)=" About "
- Menu$(1,10)="---------"
- Menu$(1,11)=" Quit "
- Menu$(1,12)="---------"
- '
- Menu$(2)=" Grid "
- Menu$(2,1)="-----------"
- Menu$(2,2)=" Off "
- Menu$(2,3)=" Fine "
- Menu$(2,4)=" Coarse "
- Menu$(2,5)=" Isometric "
- Menu$(2,6)="-----------"
- Menu$(2,7)=" Snap "
- Menu$(2,7,1)="-----------------"
- Menu$(2,7,2)=" No Snap "
- Menu$(2,7,3)="-----------------"
- Menu$(2,7,4)=" Snap To Grid "
- Menu$(2,7,5)="-----------------"
- Menu$(2,7,6)=" Snap To Drawing "
- Menu$(2,7,7)="-----------------"
- '
- Menu$(3)=" Options "
- Menu$(3,1)="---------"
- Menu$(3,2)=" Show XY "
- Menu$(3,2,1)=" Yes "
- Menu$(3,2,2)="-----"
- Menu$(3,2,3)=" No "
- '
- Menu$(4)=" Draw "
- Menu$(4,1)="--------"
- Menu$(4,2)=" Line "
- Menu$(4,3)=" Arc "
- Menu$(4,4)=" Circle "
- '
- Menu$(5)=" Edit "
- Menu$(5,1)="--------------"
- Menu$(5,2)=" Edit Point "
- Menu$(5,3)=" Insert Point "
- Menu$(5,4)=" Delete Point "
- '
- On Menu Proc MNU1,MNU2,MNU3,MNU4,MNU5
- Menu On
- On Menu On
- End Proc
- Procedure REDRAW
- Cls
- If GDN=1 Then GRID1
- If GDN=2 Then GRID2
- If GDN=3 Then GRID3
- Ink 0
- For N=0 To NP Step 2
- If X(N)+Y(N)>0 and X(N+1)+Y(N+1)>0
- Draw X(N),Y(N) To X(N+1),Y(N+1)
- End If
- Next N
- End Proc
- Procedure GRID1
- Ink 3
- For A=0 To 640 Step 60
- Draw A,0 To A,512
- Next A
- For B=0 To 512 Step 60
- Draw 0,B To 640,B
- Next B
- Ink 0
- If DRW=1 Then REDRAW
- GRIDCOORDS[60]
- GDN=1
- End Proc
- Procedure GRID2
- Ink 3
- For A=0 To 640 Step 30
- Draw A,0 To A,512
- Next A
- For B=0 To 512 Step 30
- Draw 0,B To 640,B
- Next B
- Ink 0
- GRIDCOORDS[30]
- GDN=2
- End Proc
- Procedure GRID3
- Ink 3
- O=Tan(30)*640
- For A=0 To 870 Step 30
- Draw 640,A To 0,A-O
- Next A
- For B=0 To 870 Step 30
- Draw 0,B To 640,B-O
- Next B
- For N=8 To 640 Step 26
- Draw N,0 To N,512
- Next N
- Ink 0
- ISOGRID
- GDN=3
- End Proc
- Procedure GRIDCOORDS[SP]
- PN=0
- For B=0 To 512 Step SP
- For A=0 To 640 Step SP
- GRIDX(PN)=A : GRIDY(PN)=B
- Inc PN
- Next A
- Next B
- End Proc
- Procedure ISOGRID
- For B=10 To 512 Step 30
- For A=34 To 640 Step 52
- GRIDX(U)=A : GRIDY(U)=B
- Inc U
- Next A
- Next B
- For B=25 To 512 Step 30
- For A=8 To 640 Step 52
- GRIDX(U)=A : GRIDY(U)=B
- Inc U
- Next A
- Next B
- End Proc
- Procedure MNU1
- T=Choice(2)
- If T=2 Then _NEW
- If T=9 Then ABOUT
- If T=11 Then QUIT
- On Menu On
- End Proc
- Procedure MNU2
- I=Choice(2)
- If I=2
- GDN=0
- REDRAW
- End If
- If I=3
- GDN=2
- REDRAW
- End If
- If I=4
- GDN=1
- REDRAW
- End If
- If I=5
- GDN=3
- REDRAW
- End If
- T=Choice(3)
- If T=2 Then SNAP=0
- If T=4 Then SNAP=1
- If T=6 Then SNAP=2
- On Menu On
- End Proc
- Procedure MNU3
- T=Choice(3)
- If T=1 Then SXY=1
- If T=3
- SXY=0
- REDRAW
- End If
- On Menu On
- End Proc
- Procedure MNU4
- T=Choice(2)
- If T=2 Then LE=1
- If T=3 Then LE=2
- If T=4 Then LE=3
- End Proc
- Procedure MNU5
- I=Choice(2)
- If I=2 Then EDPNT
- If I=3 Then ADPNT
- If I=4 Then DTPNT
- End Proc
- Procedure SNAP1[DP]
- If SW=1 Then Goto PT2
- For A=0 To PN
- If Abs(GRIDX(A)-X(DP))<5 and Abs(GRIDY(A)-Y(DP))<5
- X(DP)=GRIDX(A) : Y(DP)=GRIDY(A)
- Exit
- End If
- Next A
- PT2:
- If SW=0 Then Goto PT3
- For A=0 To PN
- If Abs(GRIDX(A)-X(DP+1))<5 and Abs(GRIDY(A)-Y(DP+1))<5
- X(DP+1)=GRIDX(A) : Y(DP+1)=GRIDY(A)
- Exit
- End If
- Next A
- PT3:
- End Proc
- Procedure SNAP2[DP]
- If SW=1 Then Goto PT2
- For A=0 To PN
- If Abs(X(A)-X(DP))<5 and Abs(Y(A)-Y(DP))<5
- X(DP)=X(A) : Y(DP)=Y(A)
- Exit
- End If
- Next A
- PT2:
- If SW=0 Then Goto PT3
- For A=0 To PN
- If Abs(X(A)-X(DP+1))<5 and Abs(Y(A)-Y(DP+1))<5
- X(DP+1)=X(A) : Y(DP+1)=Y(A)
- Exit
- End If
- Next A
- PT3:
- End Proc
- Procedure SXY
- If SXY=0 Then Pop Proc
- L=Sqr((AJ*AJ)+(OP*OP))
- Locate 2,62 : Print Using "X:###";X Screen(X Mouse)
- Locate 12,62 : Print Using "Y:###";Y Screen(Y Mouse)
- Locate 20,62 : Print Using "L/R:###";L
- End Proc
- Procedure CIRCL
- Menu Off
- Repeat
- SXY
- CX1=X Screen(X Mouse) : CY1=Y Screen(Y Mouse)
- Until Mouse Key=0
- If SNAP=1
- For A=0 To PN
- If Abs(GRIDX(A)-CX1)<5 and Abs(GRIDY(A)-CY1)<5
- CX1=GRIDX(A) : CY1=GRIDY(A)
- Exit
- End If
- Next A
- End If
- If SNAP=2
- For A=0 To PN
- If Abs(X(A)-CX1)<5 and Abs(Y(A)-CY1)<5
- CX1=X(A) : CY1=Y(A)
- Exit
- End If
- Next A
- End If
- Gr Writing 3
- Repeat
- SXY
- CX2=X Screen(X Mouse) : CY2=Y Screen(Y Mouse)
- Draw CX1,CY1 To CX2,CY2
- Wait 2
- Draw CX1,CY1 To CX2,CY2
- AJ=CX2-CX1 : OP=CY2-CY1
- Until Mouse Key=2
- Gr Writing 1
- If SNAP=1
- For A=0 To PN
- If Abs(GRIDX(A)-CX2)<5 and Abs(GRIDY(A)-CY2)<5
- CX2=GRIDX(A) : CY2=GRIDY(A)
- Exit
- End If
- Next A
- End If
- If SNAP=2
- For A=0 To PN
- If Abs(X(A)-CX2)<5 and Abs(Y(A)-CY2)<5
- CX2=X(A) : CY2=Y(A)
- Exit
- End If
- Next A
- End If
- AJ=0 : OP=0
- Repeat
- Until Mouse Key=0
- A=Abs(CX1-CX2) : O=Abs(CY1-CY2)
- R=Sqr((A*A)+(O*O))
- DRWCURVE[CX1,CY1,0,360,R]
- Menu On
- On Menu On
- End Proc
- Procedure ARC
- Menu Off
- Repeat
- SXY
- CX1=X Screen(X Mouse) : CY1=Y Screen(Y Mouse)
- Until Mouse Key=0
- If SNAP=1
- For A=0 To PN
- If Abs(GRIDX(A)-CX1)<5 and Abs(GRIDY(A)-CY1)<5
- CX1=GRIDX(A) : CY1=GRIDY(A)
- Exit
- End If
- Next A
- End If
- If SNAP=2
- For A=0 To PN
- If Abs(X(A)-CX1)<5 and Abs(Y(A)-CY1)<5
- CX1=X(A) : CY1=Y(A)
- Exit
- End If
- Next A
- End If
- Gr Writing 3
- Repeat
- SXY
- AX1=X Screen(X Mouse) : AY1=Y Screen(Y Mouse)
- Draw CX1,CY1 To AX1,AY1
- Wait 2
- Draw CX1,CY1 To AX1,AY1
- Until Mouse Key=2
- If SNAP=1
- For A=0 To PN
- If Abs(GRIDX(A)-AX1)<5 and Abs(GRIDY(A)-AY1)<5
- AX1=GRIDX(A) : AY1=GRIDY(A)
- Exit
- End If
- Next A
- End If
- If SNAP=2
- For A=0 To PN
- If Abs(X(A)-AX1)<5 and Abs(Y(A)-AY1)<5
- AX1=X(A) : AY1=Y(A)
- Exit
- End If
- Next A
- End If
- Draw CX1,CY1 To AX1,AY1
- Wait 10
- Repeat
- SXY
- AX2=X Screen(X Mouse) : AY2=Y Screen(Y Mouse)
- Draw CX1,CY1 To AX2,AY2
- Wait 2
- Draw CX1,CY1 To AX2,AY2
- Until Mouse Key=2
- Draw CX1,CY1 To AX1,AY1
- Gr Writing 1
- If SNAP=1
- For A=0 To PN
- If Abs(GRIDX(A)-AX1)<5 and Abs(GRIDY(A)-AY1)<5
- AX1=GRIDX(A) : AY1=GRIDY(A)
- Exit
- End If
- Next A
- End If
- If SNAP=2
- For A=0 To PN
- If Abs(X(A)-AX1)<5 and Abs(Y(A)-AY1)<5
- AX1=X(A) : AY1=Y(A)
- Exit
- End If
- Next A
- End If
- Repeat
- Until Mouse Key=0
- '
- R#=Sqr(Abs(((AX1-CX1)*(AX1-CX1))+((AY1-CY1)*(AY1-CY1))))
- '
- TS#=Acos(Abs((AX1-CX1)/R#))
- TE#=Acos(Abs((AX2-CX1)/R#))
- '
- TS=TS# : TE=TE# : R=R#
- '
- If AX1=CX1 and AX2=CX1 and AY1<CY1
- TS=TS-90 : TE=TE+90
- Goto P3
- End If
- '
- If AX1=CX1 and AX2=CX1 and AY1>CY1
- TS=TS+90 : TE=TE+270
- Goto P3
- End If
- '
- If AY1=CY1 and AY2=CY1 and AX1<CX1
- TS=TS+270 : TE=TE+450
- Goto P3
- End If
- '
- If AY1=CY1 and AY2=CY1 and AX1>CX1
- TS=TS+270 : TE=TE+90
- Goto P3
- End If
- '
- If AY1=CY1 and AY2>CY1
- TS=TS+180
- Goto P2
- End If
- '
- If AX1=CX1 and AX2<CX1
- TS=TS+180
- TE=TE+180
- Goto P3
- End If
- '
- If AY1=CY1 and AY2<CY1
- TS=TS+270
- TE=TE+270
- Goto P3
- End If
- '
- If AX1>CX1 and AY1>CY1 Then TS=TS+90
- If AX1<CX1 and AY1>CY1 Then TS=TS+180
- If AX1<CX1 and AY1<CY1 Then TS=TS+270
- '
- P2:
- '
- If AX2>CX1 and AY2>CY1 Then TE=TE+90
- If AX2<CX1 and AY2>CY1 Then TE=TE+180
- If AX2<CX1 and AY2<CY1 Then TE=TE+270
- '
- P3:
- '
- If TS>TE Then Swap TS,TE
- '
- DRWCURVE[CX1,CY1,TS,TE,R]
- Menu On
- On Menu On
- End Proc
- Procedure LINEDRAW
- Menu Off
- Repeat
- SXY
- X(NP)=X Screen(X Mouse) : Y(NP)=Y Screen(Y Mouse)
- Until Mouse Key=0
- If SNAP=1
- SNAP1[NP]
- End If
- If SNAP=2
- SNAP2[NP]
- End If
- SW=1
- Gr Writing 3
- Repeat
- SXY
- X(NP+1)=X Screen(X Mouse) : Y(NP+1)=Y Screen(Y Mouse)
- Draw X(NP),Y(NP) To X(NP+1),Y(NP+1)
- Wait 2
- Draw X(NP),Y(NP) To X(NP+1),Y(NP+1)
- AJ=X(NP+1)-X(NP) : OP=Y(NP+1)-Y(NP)
- Until Mouse Key=2
- Gr Writing 1
- SW=1
- If SNAP=1
- SNAP1[NP]
- End If
- If SNAP=2
- SNAP2[NP]
- End If
- Draw X(NP),Y(NP) To X(NP+1),Y(NP+1)
- Add NP,2
- SW=0 : AJ=0 : OP=0
- Repeat
- Until Mouse Key=0
- Menu On
- On Menu On
- End Proc
- Procedure DRWCURVE[X,Y,S,E,R]
- X(NP)=X+Sin(180-S)*R : Y(NP)=Y+Cos(180-S)*R
- Inc NP
- OLDNP=NP
- For N=S To E Step 10
- X(NP)=X+Sin(180-N)*R : Y(NP)=Y+Cos(180-N)*R
- Add NP,2
- Next N
- NP=OLDNP
- For N=S To E Step 10
- X(NP+1)=X+Sin(180-N)*R : Y(NP+1)=Y+Cos(180-N)*R
- Add NP,2
- Next N
- Dec NP
- REDRAW
- End Proc
- Procedure EDPNT
- Menu Off
- For N=0 To NP
- Plot X(N),Y(N),5
- Next N
- Do
- Repeat
- If Key State(69) Then Goto OUT2
- SXY
- EX=X Screen(X Mouse) : EY=Y Screen(Y Mouse)
- Until Mouse Key=1
- For N=0 To NP
- If Abs(X(N)-EX)<5 and Abs(Y(N)-EY)<5
- PFND=1
- OLDX=X(N) : OLDY=Y(N)
- Exit
- End If
- Next N
- If PFND=1
- If PFND=1
- If N mod 2=0
- WW=1
- Else
- WW=-1
- End If
- Ink 1
- Draw X(N+WW),Y(N+WW) To X(N),Y(N)
- Ink 0
- Gr Writing 3
- End If
- Wait 10
- Repeat
- If Key State(70)
- X(N)=0 : Y(N)=0
- Gr Writing 1
- Goto OUT
- End If
- If Key State(95)
- Gr Writing 1
- X(N)=OLDX : Y(N)=OLDY
- Draw X(N-1),Y(N-1) To X(N),Y(N)
- Plot X(N-1),Y(N-1),5 : Plot X(N),Y(N),5
- Goto OUT
- End If
- SXY
- X(N)=X Screen(X Mouse) : Y(N)=Y Screen(Y Mouse)
- Draw X(N+WW),Y(N+WW) To X(N),Y(N)
- Wait 2
- Draw X(N+WW),Y(N+WW) To X(N),Y(N)
- AJ=X(N)-X(N+WW) : OP=Y(N)-Y(N+WW)
- Until Mouse Key=2
- Gr Writing 1
- If SNAP=1
- SNAP1[N]
- End If
- If SNAP=2
- SNAP2[N]
- End If
- Draw X(N+WW),Y(N+WW) To X(N),Y(N)
- PFND=0
- End If
- OUT:
- Loop
- OUT2:
- REDRAW
- Wait 10
- Menu On
- On Menu On
- End Proc
- Procedure ADPNT
- For N=0 To NP
- Plot X(N),Y(N),5
- Next N
- Add NP,2
- Repeat
- Until Mouse Key=1
- X(NP)=X Screen(X Mouse) : Y(NP)=Y Screen(Y Mouse)
- Plot X(NP),Y(NP),5
- REDRAW
- On Menu On
- End Proc
- Procedure DTPNT
- End Proc
- Procedure ABOUT
- Menu Off
- Cls 0,100,100 To 300,250
- Ink 4 : Box 105,105 To 295,245
- Ink 5,0 : Text 160,130,"Simple CAD"
- Ink 4,0 : Text 118,160,"Written in AMOS Basic"
- Text 153,190,"By G. Albrow"
- Ink 5,0 : Text 157,220,"August 1992"
- Repeat
- Until Mouse Key
- REDRAW
- Menu On
- On Menu On
- End Proc
- Procedure _NEW
- For N=0 To NP
- X(N)=0 : Y(N)=0
- Next N
- NP=0
- REDRAW
- End Proc
- Procedure QUIT
- Default
- Edit
- End Proc