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