home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AMOS PD CD
/
amospdcd.iso
/
451-475
/
apd463
/
amos1.34_progs
/
structured_drawing.amos
/
structured_drawing.amosSourceCode
Wrap
AMOS Source Code
|
1993-01-17
|
13KB
|
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