HTBasic Help
×
Menu
Index

Example: Wing Stress/Vibration Analysis

 
10     ! *********************************************************************
20     ! Example: Wing Stress/Vibration Analysis
30     !
40     ! This program displays a simulated aircraft
50     ! fuselage. When the user clicks one of the
60     ! four arrows displayed, the appropriate wing
70     ! stress/vibration analysis graph is displayed.
80     !
90     !                   NOTE
100   !
110   ! You may need to maximize the screen to see
120   ! the full picture.
130   !
140   ! ************************************************
150   !
160   INTEGER Num_points
170   ASSIGN @Panel TO WIDGET "PANEL"
180   CONTROL @Panel;SET ("WIDTH":650,"HEIGHT":600)
190   CONTROL @Panel;SET ("TITLE":" Example: Wing Stress/Vibration Analysis","SIZE CONTROL":"RESIZE CHILDREN")
200   CONTROL @Panel;SET ("SIZE CONTROL":"RESIZE CHILDREN")
210   CONTROL @Panel;SET ("SYSTEM MENU":"Quit")
220   ON EVENT @Panel,"SYSTEM MENU" GOTO Finis
230   !
240   ASSIGN @Label TO WIDGET "LABEL";SET ("X":100,"Y":5,"WIDTH":400),PARENT @Panel
250   CONTROL @Label;SET ("VALUE":"Click arrows to display results")
260   !
270   ASSIGN @Bitmap TO WIDGET "BITMAP";SET ("X":15,"Y":40,"BORDER":0,"RETAIN RASTER":1,"BITMAP FILE":"WINGS.BMP","LABEL":"XRJ-711 Wind Tunnel Test"),PARENT @Panel
280   !
290   ON EVENT @Bitmap,"MOUSE CLICKED" GOSUB Mouse_click
300 Looping: GOTO Looping
310   !
320 Mouse_click:                    !
330   INTEGER Mouse_pos(1:2),X,Y
340   STATUS @Bitmap;RETURN ("MOUSE CLICK":Mouse_pos(*))
350   X=Mouse_pos(1)
360   Y=Mouse_pos(2)
370   IF X>=194 AND X<=213 AND Y>=230 AND Y<=260 THEN
380     GOSUB Sbup_disp
390   ELSE
400     IF X>=194 AND X<=213 AND Y>=292 AND Y<=322 THEN
410       GOSUB Sbdn_disp
420     ELSE
430       IF X>=450 AND X<=470 AND Y>=230 AND Y<=260 THEN
440         GOSUB Prup_disp
450       ELSE
460         IF X>=450 AND X<=470 AND Y>=292 AND Y<=322 THEN
470           GOSUB Prdn_disp
480         ELSE
490           DISP
500         END IF
510       END IF
520     END IF
530   END IF
540   RETURN
550   !
560   ! Data Section
570   !
580 Sbup_num_points: DATA 9
590 Sbup_x_data: DATA 0, 50, 100, 150, 200, 250, 300, 350, 400
600 Sbup_y_data: DATA 0, 30, 400,  20, 300,   5,   7,   4,   1
610   !
620 Sbdn_num_points: DATA 9
630 Sbdn_x_data: DATA 0, 50, 100, 150, 200, 250, 300, 350, 400
640 Sbdn_y_data: DATA 0, 60, 300,  40, 250,   5,   7,   4,   1
650   !
660 Prup_num_points: DATA 9
670 Prup_x_data: DATA 0, 50, 100, 150, 200, 250, 300, 350, 400
680 Prup_y_data: DATA 0, 35, 450,  30, 200,   5,   7,   4,   1
690   !
700 Prdn_num_points: DATA 9
710 Prdn_x_data: DATA 0, 50, 100, 150, 200, 250, 300, 350, 400
720 Prdn_y_data: DATA 0, 40, 350,  35, 230,   5,   7,   4,   1
730   !
740   ! Display Section
750   !
760 Sbup_disp:!
770   ASSIGN @Sbup_panel TO WIDGET "PANEL";SET ("X":4,"Y":4,"WIDTH":485,"HEIGHT":345,"SIZE CONTROL":"RESIZE CHILDREN")
780   CONTROL @Sbup_panel;SET ("TITLE":"Starboard Wing: Upper Skin Strain")
790   ASSIGN @Sbup_xy TO WIDGET "XY GRAPH";SET ("X":10,"Y":10,"WIDTH":454,"HEIGHT":265,"VISIBLE":0),PARENT @Sbup_panel
800   CONTROL @Sbup_xy;SET ("CURRENT AXIS":"X","AUTOSCALE":1,"AXIS LABEL":"Vibration Frequency (Hz)")
810   CONTROL @Sbup_xy;SET ("CURRENT AXIS":"Y","AUTOSCALE":1,"AXIS LABEL":"Micro Strain")
820   RESTORE Sbup_num_points
830   READ Num_points
840   ON ERROR GOTO Sbup_alloc
850   DEALLOCATE Sbup_x(*),Sbup_y(*)
860   !
870 Sbup_alloc: OFF ERROR
880   ALLOCATE INTEGER Sbup_x(1:Num_points),Sbup_y(1:Num_points)
890   RESTORE Sbup_x_data
900   READ Sbup_x(*)
910   RESTORE Sbup_y_data
920   READ Sbup_y(*)
930   CONTROL @Sbup_xy;SET ("X DATA":Sbup_x(*),"Y DATA":Sbup_y(*),"VISIBLE":1)
940   ASSIGN @Sbup_button TO WIDGET "PUSHBUTTON";SET ("X":200,"Y":278,"HEIGHT":30,"LABEL":"DONE"),PARENT @Sbup_panel
950   ON EVENT @Sbup_button,"ACTIVATED" GOSUB Sbup_done
960   RETURN !sbup_disp
970   !
980 Sbup_done: ASSIGN @Sbup_panel TO *
990   DEALLOCATE Sbup_x(*),Sbup_y(*)
1000  RETURN
1010  !
1020 Sbdn_disp:!
1030  ASSIGN @Sbdn_panel TO WIDGET "PANEL";SET ("X":4,"Y":420,"WIDTH":485,"HEIGHT":345,"SIZE CONTROL":"RESIZE CHILDREN")
1040  CONTROL @Sbdn_panel;SET ("TITLE":"Starboard Wing: Lower Skin Strain")
1050  ASSIGN @Sbdn_xy TO WIDGET "XY GRAPH";SET ("X":10,"Y":10,"WIDTH":450,"HEIGHT":265,"VISIBLE":0),PARENT @Sbdn_panel
1060  CONTROL @Sbdn_xy;SET ("CURRENT AXIS":"X","AUTOSCALE":1,"AXIS LABEL":"Vibration Frequency (Hz)")
1070  CONTROL @Sbdn_xy;SET ("CURRENT AXIS":"Y","AUTOSCALE":1,"AXIS LABEL":"Micro Strain")
1080  RESTORE Sbdn_num_points
1090  READ Num_points
1100  ON ERROR GOTO Sbdn_alloc
1110  DEALLOCATE Sbdn_x(*),Sbdn_y(*)
1120  !
1130 Sbdn_alloc: OFF ERROR
1140  ALLOCATE INTEGER Sbdn_x(1:Num_points),Sbdn_y(1:Num_points)
1150  RESTORE Sbdn_x_data
1160  READ Sbdn_x(*)
1170  RESTORE Sbdn_y_data
1180  READ Sbdn_y(*)
1190  CONTROL @Sbdn_xy;SET ("X DATA":Sbdn_x(*),"Y DATA":Sbdn_y(*),"VISIBLE":1)
1200  ASSIGN @Sbdn_button TO WIDGET "PUSHBUTTON";SET ("X":200,"Y":278,"HEIGHT":30,"LABEL":"DONE"),PARENT @Sbdn_panel
1210  ON EVENT @Sbdn_button,"ACTIVATED" GOSUB Sbdn_done
1220  RETURN
1230  !
1240 Sbdn_done: ASSIGN @Sbdn_panel TO *
1250  DEALLOCATE Sbdn_x(*),Sbdn_y(*)
1260  RETURN
1270  !
1280 Prup_disp:!
1290  ASSIGN @Prup_panel TO WIDGET "PANEL";SET ("X":535,"Y":4,"WIDTH":485,"HEIGHT":345,"SIZE CONTROL":"RESIZE CHILDREN")
1300  CONTROL @Prup_panel;SET ("TITLE":"Port Wing: Upper Skin Strain")
1310  ASSIGN @Prup_xy TO WIDGET "XY GRAPH";SET ("X":10,"Y":10,"WIDTH":454,"HEIGHT":265,"VISIBLE":0),PARENT @Prup_panel
1320  CONTROL @Prup_xy;SET ("CURRENT AXIS":"X","AUTOSCALE":1,"AXIS LABEL":"Vibration Frequency (Hz)")
1330  CONTROL @Prup_xy;SET ("CURRENT AXIS":"Y","AUTOSCALE":1,"AXIS LABEL":"Micro Strain")
1340  RESTORE Prup_num_points
1350  READ Num_points
1360  ON ERROR GOTO Prup_alloc
1370  DEALLOCATE Prup_x(*),Prup_y(*)
1380  !
1390 Prup_alloc: OFF ERROR
1400  ALLOCATE INTEGER Prup_x(1:Num_points),Prup_y(1:Num_points)
1410  RESTORE Prup_x_data
1420  READ Prup_x(*)
1430  RESTORE Prup_y_data
1440  READ Prup_y(*)
1450  CONTROL @Prup_xy;SET ("X DATA":Prup_x(*),"Y DATA":Prup_y(*),"VISIBLE":1)
1460  ASSIGN @Prup_button TO WIDGET "PUSHBUTTON";SET ("X":200,"Y":278,"HEIGHT":30,"LABEL":"DONE"),PARENT @Prup_panel
1470  ON EVENT @Prup_button,"ACTIVATED" GOSUB Prup_done
1480  RETURN
1490  !
1500 Prup_done: ASSIGN @Prup_panel TO *
1510  DEALLOCATE Prup_x(*),Prup_y(*)
1520  RETURN
1530  !
1540 Prdn_disp:!
1550  ASSIGN @Prdn_panel TO WIDGET "PANEL";SET ("X":535,"Y":420,"WIDTH":485,"HEIGHT":345,"SIZE CONTROL":"RESIZE CHILDREN")
1560  CONTROL @Prdn_panel;SET ("TITLE":"Port Wing: Lower Skin Strain")
1570  ASSIGN @Prdn_xy TO WIDGET "XY GRAPH";SET ("X":10,"Y":10,"WIDTH":450,"HEIGHT":265,"VISIBLE":0),PARENT @Prdn_panel
1580  CONTROL @Prdn_xy;SET ("CURRENT AXIS":"X","AUTOSCALE":1,"AXIS LABEL":"Vibration Frequency (Hz)")
1590  CONTROL @Prdn_xy;SET ("CURRENT AXIS":"Y","AUTOSCALE":1,"AXIS LABEL":"Micro Strain")
1600  RESTORE Prdn_num_points
1610  READ Num_points
1620  ON ERROR GOTO Prdn_alloc
1630  DEALLOCATE Prdn_x(*),Prdn_y(*)
1640  !
1650 Prdn_alloc: OFF ERROR
1660  ALLOCATE INTEGER Prdn_x(1:Num_points),Prdn_y(1:Num_points)
1670  RESTORE Prdn_x_data
1680  READ Prdn_x(*)
1690  RESTORE Prdn_y_data
1700  READ Prdn_y(*)
1710  CONTROL @Prdn_xy;SET ("X DATA":Prdn_x(*),"Y DATA":Prdn_y(*),"VISIBLE":1)
1720  ASSIGN @Prdn_button TO WIDGET "PUSHBUTTON";SET ("X":200,"Y":278,"HEIGHT":30,"LABEL":"DONE"),PARENT @Prdn_panel
1730  ON EVENT @Prdn_button,"ACTIVATED" GOSUB Prdn_done
1740  RETURN
1750  !
1760 Prdn_done: ASSIGN @Prdn_panel TO *
1770  DEALLOCATE Prdn_x(*),Prdn_y(*)
1780  RETURN
1790  !
1800 Finis:  !
1810  ASSIGN @Panel TO *                                ! Delete PANEL widget
1820  END