Andrzej Boroweck Wybrane zagadnena z programowana dla geodetów. Kraków 2009 1
1. Programowane w Vsual Bascu Programy w Vsual Basc dla McroStaton można tworzyć na różne sposoby: zarejestrować wykonywane ręczne czynnośc lub napsać program według własnego pomysłu. Rejestracja czynnośc wykonywanych ręczne tak utworzony program powtarza jeden dentyczny cąg czynnośc, ale dla początkujących programstów jest podstawą do napsana bardzej zaawansowanej procedury. Po wybranu opcj Utwórz makro Basc podaje sę nazwę ops: 2
Na ekrane pojawa sę paleta przycsków znanych z welu urządzeń (Play Pauza Stop). Kedy wcśnęty jest przycsk Play każda czynność, którą wykonujemy w McroStaton jest rejestrowana zapsywana w postac cągu poleceń w języku Vsual Basc. Tu narysowano lnę. Po zakończenu rysunku nacska sę przycsk STOP. Tak program można następne modyfkować. Program psany samodzelne ma zwykle nną strukturę występują w nm funkcje procedury. 3
PRZYKŁAD PROGRAMU ZAREJESTROWANEGO AUTOMATYCZNIE I NASTĘPNIE MODYFIKOWANEGO. Wybrano narzędze do rysowana ln połączono dwa dowolne wybrane punkty. W wynku rejestracj tych czynnośc powstał następujący program: ' program łączy lną 2 punkty Sub man Dm startpont As MbePont Dm pont As MbePont, pont2 As MbePont ' Wyślj polecene MbeSendCommand "PLACE SMARTLINE " ' Współrzędne w jednostkach głównych startpont.x = 0.626387# startpont.y = 1.851924# startpont.z = 0.000000# ' Wyślj punkt danych do beŝącego polecena pont.x = startpont.x pont.y = startpont.y pont.z = startpont.z MbeSendDataPont pont, 1% pont.x = startpont.x + 0.965968# pont.y = startpont.y + 0.657395# pont.z = startpont.z MbeSendDataPont pont, 1% ' Wyślj przywrócene do beŝącego polecena MbeSendReset End Sub Ważną rolę odgrywają tu zmenne typu MbePont: startpont, pont pont2. Pozwalają one określć lokalzację punktu ze współrzędnych. W welu zadanach wystarczy tylko jedna z nch np. pont. Zmenna typu MbePont określa 3 współrzędne x, y z. Jeżel rysujemy mapę wystarczają tylko dwe x y. W uproszczonej wersj program łączący 2 punkty o współrzędnych np. (0,0) (100,200) można napsać tak: ' program łączy lną 2 punkty Sub man Dm pont As MbePont ' Wyślj polecene MbeSendCommand "PLACE SMARTLINE " ' Wyślj punkt danych do beŝącego polecena pont.x = 0 pont.y = 0 MbeSendDataPont pont, 1% pont.x = 200 pont.y = 100 MbeSendDataPont pont, 1% ' Wyślj przywrócene do beŝącego polecena MbeSendReset End Sub Kończące program polecene MbeSendReset oznacza zakończene pracy z narzędzem tu narzędzem jest Place Smartlne służące do rysowana ln. 4
WPROWADZANIE DANYCH Z KLAWIATURY Tak program wykonuje tylko jedną czynność łączy lną punkty o współrzędnych (0,0) (100,200), jednak mmo swej prostoty może być bardzo przydatny pod warunkem, że będze w nm możlwość zmany współrzędnych łączonych punktów. Współrzędne można wprowadzać ręczne z klawatury wykorzystując polecene MbeInputBox: x1s = MbeInputBox("Podaj x1", "0.00", "Podaj X dla perwszego punktu ") y1s= MbeInputBox("Podaj y1", "0.00", "Podaj Y dla perwszego punktu ") x2s = MbeInputBox("Podaj x2", "0.00", "Podaj X dla drugego punktu ") y2s = MbeInputBox("Podaj y2", "0.00", "Podaj Y dla drugego punktu ") x1=val(x1s) y1=val(y1s) x2=val(x2s) y2=val(y2s) Funkcja val zamena wczytany cąg znaków na lczbę. 5
Program w tej postac pozwala łączyć lną dowolne dwa punkty, których współrzędne podajemy z klawatury: Zadane 1. Wykorzystując powyższy program narysować kwadrat, prostokąt trójkąt. Przed przystąpenem do rysowana należy przygotować na kartce współrzędne narożnków. 6
RYSOWANIE OKRĘGU: MbeSendCommand "PLACE CIRCLE ICON " Okrąg można narysować klkoma metodam: 1a. względem środka - wskazując na środek okręgu na punkt na obwodze jeżel ne jest zaznaczona średnca: MbeSendCommand "PLACE CIRCLE ICON " MbeSendCommand "IGEN CONSTRAIN RADIUS UNLOCK " MbeSetAppVarable "IGEN", "tcb->mstoolsettngs.gen.placecrclemode", 0& MbeSendCommand "PLACE CIRCLE ICON " pont.x = ys pont.y = xs MbeSendDataPont pont, 1% pont.x = y1 pont.y = x1 MbeSendDataPont pont, 1% 7
1b. względem środka - wskazując tylko na środek okręgu, jeżel wpsana jest średnca MbeSendCommand "PLACE CIRCLE ICON " MbeSetAppVarable "IGEN", "tcb->mstoolsettngs.gen.placecrclemode", 0& MbeSendCommand "IGEN CONSTRAIN RADIUS LOCK " MbeSendCommand "IGEN CONSTRAIN RADIUS 1.0000" ' Wyślj punkt danych do beżącego polecena pont.x = ys pont.y = xs MbeSendDataPont pont, 1% 2. względem krawędz wskazując 3 punkty na obwodze, przez które mus przejść okrąg MbeSendCommand "PLACE CIRCLE ICON " MbeSetAppVarable "IGEN", "tcb->mstoolsettngs.gen.placecrclemode", 1& MbeSendCommand "PLACE CIRCLE ICON " pont.x = y1 pont.y = x1 MbeSendDataPont pont, 1% pont.x = y2 pont.y = x2 MbeSendDataPont pont, 1% pont.x = y3 pont.y = x3 MbeSendDataPont pont, 1% 3. względem średncy wskazując dwa punkty wyznaczające średncę MbeSendCommand "PLACE CIRCLE ICON " MbeSetAppVarable "IGEN", "tcb->mstoolsettngs.gen.placecrclemode", 2& MbeSendCommand "PLACE CIRCLE ICON " pont.x = y1 pont.y = x1 MbeSendDataPont pont, 1% pont.x = y2 pont.y = x2 MbeSendDataPont pont, 1% Wyboru metody dokonuje sę za pomocą polecena: - względem środka: MbeSetAppVarable "IGEN", "tcb->mstoolsettngs.gen.placecrclemode", 0& - względem krawędz MbeSetAppVarable "IGEN", "tcb->mstoolsettngs.gen.placecrclemode", 1& - względem średncy MbeSetAppVarable "IGEN", "tcb->mstoolsettngs.gen.placecrclemode", 2& 8
Przykład: Program rysuje trójkąt w oparcu o współrzędne wprowadzone z klawatury, a następne rysuje okrąg opsany na tym trójkące: Struktura programu: Program składa sę z klku procedur: czytanexy - procedura pozwala wprowadzć z klawatury współrzędne werzchołków trójkąta rysunek3 - procedura wykonująca rysunek trójkąta; okrąg procedura wykonująca rysunek okręgu opsanego na trójkące sr - środek okręgu promeń 9
Główna część programu (znajduje sę zawsze na końcu): '*********************************** MAIN ********************************* sub man czytanexy rysunek3 okrag sr end sub 10
Na początku programu zadeklarowane są zmenne typu Publc, które są dostępne w całym programe w każdej procedurze. W procedurach czytanexy sr zadeklarowane są zmenne lokalne tekstowe typu strng rzeczywste podwójnej precyzj double. Zmenne lokalne dostępne są tylko w tej procedurze, w której zostały zadeklarowane. Zadane 3. Uzupełnć program o procedurę, która oblczy wyśwetl na ekrane pole trójkąta pole koła o promenu r. 11
CZYTANIE DANYCH Z PLIKU I ZAPISYWANIE WYNIKÓW DO PLIKU RAPORTU Nazwa plku jest zmenną typu strng, może zawerać równeż śceżkę dostępu, np. D:\młocn\dane.txt Program pownen umożlwć każdorazowo podane nazwy plku: plk_dane = MbeInputBox("Podaj nazwę plku z danym ", "D:\dane.txt", "WCZYTYWANIE DANYCH ") Otwarce plku wykonuje sę za pomocą nstrukcj OPEN: OPEN plk_dane for Input as #1 OPEN plk_dane for Output as #1 OPEN plk_dane for Append as #1 Input czytane danych Output zapsywane danych do plku Append dopsywane do plku Po zakończenu pracy z plkem należy go zamknąć nstrukcją: Close #1 Czytane danych z plku umożlwa nstrukcja Input: Input #1, nr, x, y 12
Otwarce plku tekstowego Jeżel chcemy czytać dane z plku tekstowego, na przykład o nazwe plkd otweramy go do czytana (Input) nstrukcją: OpenplkdFor InputAs #1 Jeżel chcemy zapsywać wynk do plku tekstowego, na przykład o nazwe plkw otweramy go do psana (Output) nstrukcją: Open plkwfor Output As #2 Czytane danych z plku tekstowego W dalszym cągu programu każdy otwarty plk jest dentyfkowany przez swój numer. Na przykład nstrukcja czytana danych z plku o numerze 1 ma następującą postać: Input #1, Nr, x, y Zamykane plku tekstowego Każdy plk tekstowy po wykorzystanu należy zamknąć nstrukcją Close zawerającą numer tego plku. Na przykład: Close #1 13
Przeglądane plku tekstowego o neokreślonej długośc: Instrukcja Whle Not EOF(n) Wend Perwsza jej część: Whle Not EOF(1) oznacza: Dopók Ne Konec plku (1). Jeżel program ne natraf na konec plku nr 1, wykonywane są dalsze nstrukcje aż do ln zawerającej Wend, po czym program wraca na początek pętl do ln Whle Not EOF(1). Ważne jest, żeby wewnątrz pętl Whle Not EOF(1)... Wend znajdowała sę nstrukcja czytana z plku (INPUT #1, lsta zmennych ) na przykład: Input#1, nr, x,y która czyta kolejne wersze plku tekstowego, co prowadz w efekce do natrafena na konec plku. Bez tej nstrukcj pętla WhleNot EOF(1)... Wendbędze dzałała w neskończoność. Whle Not EOF(1).. Input#1, nr, x,y Wend 14
Instrukcja powtarzana: For... To... Next Zaps For = 1 To pk oznacza: Dla zmenającego sę od 1 do pk. Dla kaŝdej, kolejnej wartośc wykonywane są wszystke nstrukcje programu zawarte mędzy lną For lną Next. Czyl zostaną one wykonane pk razy. Open PLIKD For Input As #1 For = 1 To pk.. Input #1, Nr, X, Y XP()=X YP()=Y.. Next Zmenną nazywamy zmenną sterującą. Mus ona być zmenną całkowtą typu nteger. Ta sama operacja wykonana za pomocą nstrukcj Whle Not EOF Open PLIKD For Input As #1 =0 Whle Not EOF(1) =+1 Input #1, nr, x, y XP()=X YP()=Y Wend 15
Struktura programu: Program może być bardzo dług. (na przykład program - stosowany w amerykańskch łodzach podwodnych - do rozpoznawana dochodzących z otoczena dźwęków - ma ponad 2 mlony werszy). Aby ogarnąć tak dług program nezbędne jest dzelene go na procedury funkcje. Informatycy uważają, że procedura pownna sę w całośc meścć na montorze komputera. Jeżel sę ne meśc trzeba ją podzelć na częśc. Główna część programu - procedura sub Man - mogłaby w każdym programe wyglądać tak samo: '*********************** MAIN ******************* sub Man dane przetwarzane wynk end sub Procedura dane będze zawerać odwołane do procedur zależne od rozwązywanego zadana. Na przykład w zadanu kedy oblczamy kartujemy pkety pomerzone metodą ortogonalną musmy wczytać współrzędne punktów osnowy, wynk pomarów, oraz schemat połączeń. Ważne jest żeby każda procedura lub funkcja była zdefnowana przed jej perwszym wywołanem. Dlatego z funkcjonowanem programu zapoznajemy sę czytając go od końca: 16
Kartowane pket pomerzonych metodą ortogonalną B α l h P A X Y P P = = X Y A A + l cosα + l snα AB AB h + h snα cosα AB AB 17
'*********************** DANE***************** sub dane osnowa pkety lne end sub '*********************** MAIN ******************* sub Man dane przetwarzane wynk end sub Dane dla programu są zapsane w plkach tekstowych, dlatego ch czytane zaczyna sę zawsze od pytana o nazwę plku. Welkość plku ne jest z góry narzucona dlatego zmenne tablcowe, w których zapsuje sę wartośc odczytane z plku, są na beżąco dopasowywane do lczby danych za pomocą nstrukcj Redm, opcja Preserve zabezpecza wczytane wcześnej dane przed skasowanem. redm preserve xo(os) Zmenne w programe można podzelć na globalne dostępne w całym programe deklarowane za pomocą nstrukcj Publc Publc nro() as nteger, xo() as double, yo() as double lokalne deklarowane dostępne tylko w określonej procedurze za pomocą nstrukcj Dm: sub lne Dm plk_ln as strng Dm as nteger 18
Przykładowa procedura czytająca numery współrzędne punktów osnowy: '*********************** OSNOWA ************************* sub osnowa dm plk_osn as strng dm as nteger plk_osn = MbeInputBox("Podaj nazwę plku z danym osnowy", "D:\osnxy.txt", "WCZYTYWANIE DANYCH OSNOWY ") open plk_osn for nput as #1 os=0 whle not eof(1) os=os+1 redm preserve nro(os) redm preserve xo(os) redm preserve yo(os) nput #1, nro(os), xo(os), yo(os) wend close #1 end sub Zmenna globalna os określa lczbę punktów osnowy, jej wartość jest zwększana o 1 po odczytanu kolejnego wersza z plku tekstowego, równocześne zwększany jest rozmar tabel nstrukcją redm. Plk tekstowy z danym osnxy.txt, zapsanym w formace ANSI może wyglądać na przykład tak: 1001 1000.00 1000.00 1002 1040.00 1000.00 19
Druga procedura czyta wynk pomarów, np. rzędne odcęte, z plku pomort.txt : 1 1.98 9.02 2 3.04 5.96 3 5.99 6.98 4 7.02 4.01 5 9.97 5.03 '*********************** PIKIETY ************************* sub pkety dm plk_pk as strng dm as nteger plk_pk = MbeInputBox("Podaj nazwę plku z wynkam pomarów", "D:\pomort.txt", "WCZYTYWANIE WYNIKÓW POMIARÓW ") open plk_pk for nput as #1 pk=0 whle not eof(1) pk=pk+1 redm preserve nrp(pk) redm preserve odc(pk) redm preserve rze(pk) nput #1, nrp(pk),odc(pk),rze(pk) wend close #1 end sub 20
Trzec plk z danym zawera numery punktów, które należy połączyć: lne.txt (lne do narysowana od punktu do punktu): 1 2 2 3 3 4 4 5 td. Procedura sub lne wczytuje dane dotyczące ln do narysowana: '*********************** LINIE ************************* sub lne dm plk_ln as strng dm as nteger plk_ln = MbeInputBox("Podaj nazwę plku połączeń", "D:\lne.txt", "WCZYTYWANIE PLIKU POŁĄCZEŃ ") open plk_ln for nput as #1 ln=0 whle not eof(1) ln=ln+1 redm preserve odp(ln) redm preserve dop(ln) nput #1, odp(ln),dop(ln) wend close #1 end sub 21
Kolejnym etapem dzałana programu jest przetwarzane danych: '*********************** PRZETWARZANIE ********************* sub przetwarzane xy_pket kartowane lne end sub Kolejne procedury wykonują następujące czynnośc: xy_pket - oblczene współrzędnych pket z metody ortogonalnej B α l h P A X Y P P = = X Y A A + l cosα + l snα AB AB h + h snα cosα AB AB kartowane punktów osnowy pket, łączne z ch opsanem lne połączene wskazanych punktów lną 22
'***************************** XY_PIKIET **************************************** sub xy_pket Dm xa as double, ya as double, l as double, s as double,cs as double, sn as double Dm az as double Redm xp(pk): Redm yp(pk) xa=xo(1):ya=yo(1) az= azymut(xo(1),yo(1),xo(2),yo(2)) for =1 to pk l=odc():h=rze() sn=sn(az/200*p) cs=cos(az/200*p) xp()=xa+l*cs-h*sn yp()=ya+l*sn+h*cs next end sub W procedurze sub xy_pket do oblczena azymutu boku osnowy pomarowej wykorzystana została funkcja azymut: Functon Azymut(xa as double, ya as double, xb as double, yb as double) as double Dm dx as double, dy as double, az as double dx=xb-xa: dy=yb-ya f dx=0 then f dy<0 then az=300 f dy>0 then az=100 else az=atn(dy/dx)*200/p end f f dx<0 then az=az+200 f az<0 then az=az+400 azymut=az end functon 23
Kartowane punktów osnowy pket składa sę z dwóch czynnośc: - narysowane kółka na punkce o określonych współrzędnych - wstawene napsu zaczeponego na tych samych współrzędnych MbeSendCommand "PLACE CIRCLE ICON " MbeSendCommand "IGEN CONSTRAIN RADIUS 0.3" pont.x = yo() pont.y = xo() MbeSendDataPont pont, 1% MbeSendReset MbeSendCommand "PLACE TEXT" MbeSendCommand cstr(nro()) pont.x = yo() pont.y = xo() MbeSendDataPont pont, 1% MbeSendReset 24
'*********************** KARTOWANIE OSNOWY *********************************** sub kart_osnowy Dm pont As MbePont Dm as nteger for = 1 to os MbeSendCommand "PLACE CIRCLE ICON " MbeSendCommand "IGEN CONSTRAIN RADIUS 0.3" pont.x = yo() pont.y = xo() MbeSendDataPont pont, 1% MbeSendReset MbeSendCommand "PLACE TEXT" MbeSendCommand cstr(nro()) pont.x = yo() pont.y = xo() MbeSendDataPont pont, 1% MbeSendReset next end sub '*********************** KARTOWANIE PIKIET ********************************* sub kart_pket Dm pont As MbePont Dm as nteger for = 1 to pk MbeSendCommand "PLACE CIRCLE ICON " MbeSendCommand "IGEN CONSTRAIN RADIUS 0.1" pont.x = yp() pont.y = xp() MbeSendDataPont pont, 1% MbeSendReset MbeSendCommand "PLACE TEXT" MbeSendCommand cstr(nrp()) pont.x = yp() pont.y = xp() MbeSendDataPont pont, 1% MbeSendReset next end sub 25
Rysunek powstaje przez połączene lną punktów wymenonych w plku połączeń: '************************* RYSOWANIE LINII************************** sub rys_lne Dm pont As MbePont Dm 1 as nteger, 2 as nteger for = 1 to ln 1=odp(): 2=dop() MbeSendCommand "PLACE SMARTLINE pont.x = yp(1) pont.y = xp(1) MbeSendDataPont pont, 1% pont.x = yp(2) pont.y = xp(2) MbeSendDataPont pont, 1% MbeSendReset next end sub 26
Wynkem dzałana programu jest - oprócz mapy plk tekstowy raportu zawerający nformacje o wykonanym zadanu: '************************ WYNIKI - RAPORT **************** sub wynk raport_plk raport_osnowa raport_pomary raport_xy close #1 end sub Plk raportu zawera nformacje o punktach osnowy pomarowej, wykonanych pomarach oblczonych współrzędnych pket. '*************** RAPORT NAZWA PLIKU ****************************** sub raport_plk() Dm plkr as strng ' Pytane o nazwę plku raportu plkr=mbeinputbox("podaj nazwę plku raportu","d:\raport1.txt","plik RAPORTU") Open plkr for Output as #1 end sub '*************** RAPORT OSNOWA ****************************** sub raport_osnowa() Dm as nteger Prnt #1, "Dane punkty osnowy" Prnt #1, "Nr X Y" for =1 to os prnt #1,nro(), format$(xo(),"0.00"), format$(yo(),"0.00") next Prnt #1," " end sub '*************** RAPORT POMIARY ****************************** sub raport_pomary() Dm as nteger Prnt #1, "Mary ortogonalne" Prnt #1, "Nr Odceta Rzedna" for =1 to pk prnt #1,nrp(), format$(odc(),"0.00"), format$(rze(),"0.00") next Prnt #1," " end sub 27
'*************** RAPORT WSPÓŁRZĘDNE PIKIET ************************* sub raport_xy() Dm as nteger Prnt #1, "Oblczone współrzędne pket" Prnt #1, "Nr X Y" for =1 to pk prnt #1,nrp(), format$(xp(),"0.00"), format$(yp(),"0.00") next Prnt #1," " end sub Raport: Dane punkty osnowy Nr X Y 1001 1000.00 1000.00 1002 1040.00 1040.00 Mary ortogonalne Nr Odceta Rzedna 1 1.98 9.02 2 3.04 5.96 3 5.99 6.98 4 7.02 4.01 5 9.97 5.03 6 11.03-5.98... Oblczone współrzędne pket Nr X Y 1 995.04 1007.76 2 997.91 1006.39 3 999.29 1009.19 4 1002.14 1007.79 5 1003.51 1010.59 6 1012.04 1003.56... 28
Kartowane pket pomerzonych metodą begunową g 0 B β α 0 AB β P = α AB β0 α + β AP A l X Y P P = = X Y A A + l cosα + l snα AP AP Pomaram są kąty β oraz długośc l. Program jest bardzo podobny do programu dla pomaru metodą ortogonalną, mus jednak uwzględnać różnce w sposobe pomaru pket we wzorach na oblczene ch współrzędnych. 29
Oblczane mar ortogonalnych B α l h P A l h = y = AP y snα AP AB cosα + x AB AP x cosα AP AB snα AB 30
Oblczane mar begunowych B A α α AP AB β l β = α AP α P AB l = y 2 AP + x 2 AP 31
Czytane numerów puktów ch współrzędnych z mapy Program ten pozwala na odczytane z rysunku mapy współrzędnych zaprojektowanych punktów. Numery punktów ch współrzędne zapsywane są we wskazanym plku tekstowym. Znajduje to zastosowane w przygotowanu mar realzacyjnych dla wynesena w teren projektu. 32
Zapsane w plku tekstowym numery współrzędne punktów projektu posłużą następne do oblczena: -mar ortogonalnych lub -mar begunowych które pozwolą wytyczyć projektowane punkty w oparcu o snejącą osnowę realzacyjną. '******************************* MAIN ************************ Sub Man Dm plkxy as strng plkxy=mbeinputbox("podaj nazwę plku do zapsana współrzędnych", "D:\pketyxy.txt","WSPÓŁRZĘDNE PIKIET") Open plkxy For Output As #1 pkety close #1 MbeMessageBox "Dane w plku "+plkxy End Sub 33
34
W procedurze tej występuje zmenna o nazwe: pketa zadeklarowana na wstępe programu jako zmenna globalna, typu MbePont: Type MbePont x as double y as double z as double End Type Publc pketa as MbePont 35
36
'************************* WSKAŻ PUNKT ************************************ Sub Wskaz_Punkt (Nr as strng, Pkt as MbePont, ops as strng) Dm accepted As Integer Dm elem As New MbeElement 'defnes an object called elem n whch we 'wll keep our element Dm flepos As Long Dm status As Integer MbeSendCommand "NOECHO" MbeWrteCommand ops accepted = FALSE Whle NOT accepted MbeStartLocate MbeWrtePrompt "Select element..." MbeGetInput MBE_DataPontInput, _ MBE_ResetInput, _ MBE_CommandInput, _ MBE_KeyInInput Select Case MbeState.InputType Case MBE_CommandInput MbeSendLastInput Ext Sub Case MBE_KeynInput MbeSendLastInput Ext Sub End Select MbeSendLastInput flepos = elem.fromlocate() f elem.type<>17 then ext sub 'Whle we've found an element that we haven't yet accepted Whle MbeState.CmdResult = MBE_AcceptQuery AND _ NOT accepted MbeWrtePrompt "Accept/Reject" MbeGetInput MBE_DataPontInput, _ MBE_ResetInput, _ MBE_CommandInput, _ MBE_KeyInInput MbeSendLastInput 37
Select Case MbeState.InputType Case MBE_ResetInput flepos = elem.fromlocate() 'Because MbeStartLocate automatcally fnds another 'element f there s one at the same place. Case MBE_DataPontInput accepted = TRUE Case MBE_CommandInput MbeSendLastInput Ext Sub Case MBE_KeynInput MbeSendLastInput Ext Sub End Select Wend Wend f elem.type=17 then f elem.getstrng(nr)=mbe_success then If elem.getorgn (pkt) = MBE_Success Then 'prnt pont.x 'prnt pont.y 'prnt Ops end f end f end f MbeSendCommand "Null" MbeSendCommand "ECHO" MbeWrteCommand "" MbeWrtePrompt "" MbeWrteStatus "Fnshed MACRO " End Sub 38
Po uruchomenu procedury Wskaż_punkt - w lewym dolnym rogu ekranu wyśwetlane są komunkaty: Pketa>Select element Należy wtedy klknąć myszą na numer pkety. Pketa>Accept/Reject Jeżel akceptujemy zaznaczoną pketę należy klknąć po raz drug. Jeżel odrzucamy pketę klkamy prawym klawszem myszy. Aby zakończyć program wystarczy klknąć na element ne będący numerem pkety pojaw sę wtedy komunkat: 39
Na konec program wyśwetla nformację o mejscu zapsana plku: Fragment plku tekstowego z zapsanym danym odczytanym z rysunku: 40