| [ Teach ] in KIDS 글 쓴 이(By): choiyg (나~랑께롱!) 날 짜 (Date): 1996년04월19일(금) 18시23분16초 KST 제 목(Title): [Re] Digitizing Program ! 다음의 베이직 프로그램은 저희 실험실에서 제작, 사용하고 있는 디지타이저용 프로그램입니다. 처음에는 다른 디지타이저용이었는데 제가 SummaSketch III에서 사용할 수 있게 수정한 겁니다. 45번 라인에 있는 UIOF.COM은 SummaSketch III를 사실 때 같이 오는 디스켓에 있는 화일입니다. 원래 SummaSketch III는 디폴트가 MM format이라서 이것을 UIOF format으로 바꿔주기 위한 프로그램이지요. 처음에는 이 베이직 프로그램만으로 수행될 수 있게 MM format에서 할려고 했었는데 open할 때 문제가 있어서 할 수 없이 UIOF format으로 할 수 밖에 없었습니다. 따라서 UIOF.COM과 이 프로그램을 적당한 디렉토리에 놓고 (지금 현재 이 프로그램은 C:\DIGITIZE\ 에 있는걸로 가정하고 있읍니다. 45번라인 참조) 실행하시면 됩니다. pointing tool은 버튼 4개짜리로서 실행 중에 나타나는 Y, W, B, G는 각각 해당되는 색깔의 첫글자입니다. 사용법은 간단하므로 경험으로 터득해도 충분할 것입니다. 아울러 그 쪽에서 사용하려고 했던 프로그램은 어떤식으로 되어 있는지 궁금하군요. 어디가 문제인지 알려면 프로그램을 봐야하니까 제게 메일로 보내주셨으면합니다. 물론 제가 그 것을 고치겠다고 약속하는 것은 아니고요. 한 번 보고자 하는 겁니다. 간단한거면 고칠수도 있고요. 아무튼 아래프로그램이 도움이 되었으면 합니다. 저희 실험실에서는 별 문제없이 쓰고 있습니다. 그럼 이만.... 저의 E-mail address는 cyg@sys712.kaist.ac.kr 입니다. kids ID는 choiyg이고요. 지금부터 아래줄은 베이직 프로그램이며 저는 Quick Basic을 사용했습니다. ============================================================================= 1 REM ========================================================== 2 REM ======= Digitizing Program Using a SummaSketch III ======= 3 REM ======= Edited by Yong-Gie Choi ======= 4 REM ======= Mech. Eng., KAIST ======= 5 REM ========================================================== 6 SHELL "CLS" 10 PRINT "PROGRAM DGTZ TO GET DITIZE DATA POINT USING SummaSketch III" 20 REM BUTTON CODE (YELLOW="01", WHITE="02", BLUE="03", GREEN="04") 30 Y$ = "01": W$ = "02": B$ = "03": G$ = "04" 40 DIM X(1000), Y(1000) 44 INPUT "PORT NO. TO WHICH SummaSketch III IS CONNECTED (1/2) "; COM$ 46 IF COM$ <> "1" AND COM$ <> "2" GOTO 44 45 SHELL "C:\DIGITIZE\UIOF.COM /" + COM$ 50 OPEN "COM" + COM$ + ":9600,E,7,2" FOR RANDOM AS #1 51 PRINT #1, CHR$(27) + "M1" + CHR$(27) + "M5" 52 PRINT #1, CHR$(27) + "MA" + CHR$(27) + "MC" 60 COUNT = 0 70 CLS 80 PRINT 90 PRINT "***** DEFINE PICTURE COORD AND SCALE FACTORS *****" 100 INPUT "GIVE (X,Y) COORD OF ORIGIN "; RX0, RY0: PRINT RX0; RY0 110 INPUT "GIVE X-COORD OF X_AXIS END POINT "; RX1: PRINT RX1 120 INPUT "GIVE Y-COORD OF Y_AXIS END POINT "; RY1: PRINT RY1 130 PRINT "" 140 INPUT "ENTER OUTPUT FILE NAME >", F$ 150 COUNT = COUNT + 1 160 OPEN F$ FOR OUTPUT AS #2 170 REM-------------GET SCALE FACTOR--------------------- 180 IF COUNT = 1 GOTO 220 190 PRINT "" 200 INPUT " REPEAT SCALE FACTOR(ORIGIN, X-END, OR Y-END) (Y/n) ? "; SCALE$ 210 IF SCALE$ = "N" OR SCALE$ = "n" GOTO 420 220 PRINT "GET SYSTEM COORD (COORD TILT ANGLE BE LESS THAN +/-90 DEGREE)" 230 PRINT "DIGITIZE THE ORIGIN OF THE COORDINATE ( W=DIGITIZE )" 240 LINE INPUT #1, A$: T$ = MID$(A$, 18, 2): IF T$ <> W$ GOTO 240 250 ORGX = VAL(MID$(A$, 2, 7)): ORGY = VAL(MID$(A$, 10, 7)): PRINT "", ORGX, ORGY 260 REM-------X-AXIS----------- 270 PRINT "DIGITIZE THE X-END OF THE COORDINATE ( W=DIGITIZE )" 280 LINE INPUT #1, A$: T$ = MID$(A$, 18, 2): IF T$ <> W$ GOTO 280 290 XX = VAL(MID$(A$, 2, 7)): XY = VAL(MID$(A$, 10, 7)): PRINT "", XX, XY 300 REM---------Y-AXIS------------------------- 310 PRINT "DIGITIZE THE Y-END OF THE COORDINATE ( W=DIGITIZE )" 320 LINE INPUT #1, A$: T$ = MID$(A$, 18, 2): IF T$ <> W$ GOTO 320 330 YX = VAL(MID$(A$, 2, 7)): YY = VAL(MID$(A$, 10, 7)): PRINT "", YX, YY 340 REM---------GET SCALES------------------- 350 XDX = XX - ORGX: XDY = XY - ORGY 360 ANG = ATN(XDY / XDX) 370 CA = COS(ANG): SA = SIN(ANG) 380 PRINT "TILTED ANGLE =", ANG * 180 / 3.14159 390 XF = (RX1 - RX0) / SQR(XDX ^ 2 + XDY ^ 2) 400 YDX = YX - ORGX: YDY = YY - ORGY 410 YF = (RY1 - RY0) / SQR(YDX ^ 2 + YDY ^ 2) 420 REM-------------DIGITIZE----------------- 430 PRINT "" 440 INPUT " STARTING POINT NUMBER = "; NS% 450 N% = 0 460 PRINT " DIGITIZE POINTS ( W=DIGITIZE, Y=END, G=REDO )" 470 LINE INPUT #1, A$: T$ = MID$(A$, 18, 2) 480 IF T$ = Y$ GOTO 560 ELSE IF T$ <> W$ AND T$ <> G$ GOTO 470 490 IF T$ = G$ THEN PRINT "RE-DIGITIZE "; N% + NS% - 1: N% = N% - 1: GOTO 470 500 PRINT ""; 510 N% = N% + 1: XN = VAL(MID$(A$, 2, 7)): YN = VAL(MID$(A$, 10, 7)) 520 X(N%) = (CA * (XN - ORGX) + SA * (YN - ORGY)) * XF + RX0 530 Y(N%) = (-SA * (XN - ORGX) + CA * (YN - ORGY)) * YF + RY0 540 PRINT N% + NS% - 1; X(N%); Y(N%); " ( W=DIGITIZE, Y=END, G=REDO )" 550 GOTO 470 560 PRINT #2, N%, "3" 570 FOR K% = 1 TO N%: PRINT #2, K% + NS% - 1, X(K%), Y(K%): NEXT K% 580 PRINT N%; " POINTS ARE SAVED ON FILE "; F$ 590 CLOSE #2 600 PRINT "" 610 INPUT " CONTINUE (y/N) ? = "; CON$ 620 IF CON$ = "Y" OR CON$ = "y" GOTO 140 630 STOP 640 END |