[ Pobierz całość w formacie PDF ]
.\n""Przerwanie wykonywania programu.");strcat);alert(exit));progn);if;-------------------------------------------------;wylaczenie echa komend(setvar "cmdecho" 0);wlaczenie identyfikatorow(command "_handles" "_on");-------------------------------------------------;ustawienie zmiennych globalnych(command "_zoom" "_window" "0,0" "12,9")(setvar "blipmode" 0) ;wylaczenie znacznikow punktow(setvar "pdmode" 33) ;wyglad punktu(setvar "pdsize" 0.08) ;rozmiar punktu(setq*lista_wezlow (list)*numer_wezla 1*h_tekstu 0.10*delta_tekstu 0.10);setq;-------------------------------------------------;Funkcja tworzaca poszczegolne wezly ukladu;(defun UTWORZ_WEZLY ( / jeszcze punkt lista_dxf id_wzwsp_op_wz id_op_wz opis_wezla)(progn;----------;wejscie w petle WHILE;tworzenie poszczegolnych wezlow ukladu(setq jeszcze T)(while jeszcze(progn;----------;sprawdzenie, czy koniec wprowadzania danych(initget 1 "E e")(setqpunkt (getpoint(strcat"\nPodaj wspolrzedne dla wezla numer "(rtos *numer_wezla 2 0)" (E - koniec): ");strcat);getpoint21/!E{jb bojb!ob!mjtubdi 374);setq(if (or (= punkt "E")(= punkt "e"))(progn(setq jeszcze nil));progn);if;----------;gdy podano wspolrzedne(if jeszcze(progn;----------;wykreslenie wezla(command"_point" punkt);command;----------;pobranie identyfikatora wezla(setqlista_dxf (entget (entlast))id_wz (cdr (assoc 5 lista_dxf)));setq;----------;opisanie wezla(setqwsp_op_wz(list(- (car punkt) *delta_tekstu)(+ (cadr punkt) *delta_tekstu)(caddr punkt));list);setq(command"_text" wsp_op_wz *h_tekstu "0" *numer_wezla);command;----------;pobranie identyfikatora opisu wezla(setqlista_dxf (entget (entlast))id_op_wz (cdr (assoc 5 lista_dxf)));setq;----------;utworzenie listy opisujacej wezel(setqopis_wezla(list*numer_wezla ;numer wezlaid_wz ;identyfikator wezlaid_op_wz ;identyfikator opisu wezlapunkt ;wspolrzedne wezla);list);setq;----------;dodanie opisu wezla do listy *lista_wezlow(setq375 BvupMJTQ! !q3bluzd{oz!lv3t*lista_wezlow(append *lista_wezlow (list opis_wezla)));setq;----------;zwiekszenie numeru wezla o 1(setq *numer_wezla (1+ *numer_wezla));----------);progn);if jeszcze;----------);progn);while jeszcze;----------(princ);----------);progn);UTWORZ_WEZLY;-------------------------------------------------;Funkcja wyswietlajaca aktualna liste wezlow;(defun WYSWIETL_LISTE (_nazwa_listy)(progn;----------(prin1 _nazwa_listy);----------(princ);----------);progn);WYSWIETL_LISTE;;-------------------------------------------------;Funkcja kasujaca podany wezel;(defun KASUJ_WEZLY ( / jeszcze_1 jeszcze_2 numer opisid_wz id_op_wz)(progn;----------(setq jeszcze_1 T)(while jeszcze_1 ;dopoki T - kasujemy wezly(progn;----------;pobranie numeru wezla do skasowania(setq jeszcze_2 T)(while jeszcze_2 ;dopoki T - podajemy numer wezla(progn(initget (+ 2 4))(setqnumer (getint(strcat"Podaj numer wezla do skasowania ""lub ENTER gdy koniec : ");strcat);getint21/!E{jb bojb!ob!mjtubdi 376);setq(if (= numer nil)(progn(setqjeszcze_1 niljeszcze_2 nil);setq);progn);if(if (/= numer nil)(progn(setq opis (assoc numer *lista_wezlow))(if opis(progn ;kasuj element, opis elementu;oraz opis elementu na liscie DXF(setqid_wz (nth 1 opis)id_op_wz (nth 2 opis));setq(command "_erase" (handent id_wz) "")(command "_erase" (handent id_op_wz) "")(USUN_OBIEKT numer "*lista_wezlow" 2)(setq jeszcze_2 nil));progn(progn ;else - elementu nie ma na liscie(princ(strcat"Element o numerze "(rtos numer 2 0)" nie wystepuje na liscie.\n");strcat);princ);progn);if);progn);if);progn);while jeszcze_2;----------);progn);while jeszcze_1;----------(princ);----------);progn);KASUJ_WEZLY;;-------------------------------------------------;Ten fragment programu zostanie wykonany;automatycznie po jego zaladowaniu;;utworzenie wezlow(UTWORZ_WEZLY);wyswietlenie listy wezlow377 BvupMJTQ! !q3bluzd{oz!lv3t(textpage)(princ "Oto twoja lista wezlow:")(princ"\n\n\n")(WYSWIETL_LISTE *lista_wezlow)(princ "\n\n\n")(getstring T "Nacisnij ENTER.")(graphscr);kasowanie wybranych wezlow(KASUJ_WEZLY);-------------------------------------------------(princ);-------------------------------------------------;*************************************************KONIECOmówmy teraz wyróżnione bloki programu.W bloku tym, wyst¹pujÄ…cym w funkcji UTWORZ_WEZLY, pobieramyidentyfikator w¹zÅ‚a (obiekt typu "POINT").Pod zmiennÄ… lista_dxf podstawiamylist¹ DXF opisujÄ…cÄ… dany punkt, pod zmiennÄ… id_wz podstawiamy identyfikatorelementu (drugi element pary kropkowej o kodzie 5).W bloku tym, wyst¹pujÄ…cym w funkcji UTWORZ_WEZLY, pobieramyidentyfikator opisu w¹zÅ‚a (obiekt typu "TEXT").W bloku tym, wyst¹pujÄ…cym w funkcji UTWORZ_WEZLY, tworzymy zmo-dyfikowanÄ… list¹ opisujÄ…cÄ… w¹zeÅ‚.W bloku tym, wyst¹pujÄ…cym w funkcji KASUJ_WEZLY, pobieramy numerw¹zÅ‚a do skasowania.Za pomocÄ… funkcji initget ustalamy możliwe odpowiedziużytkownika akceptujemy naciÅ›ni¹cie samego klawisza ENTER, nie pozwala-my jednak na wprowadzenie wartoÅ›ci zerowej lub ujemnej.Nast¹pnie przy użyciufunkcji getint, pobieramy numer w¹zÅ‚a i podstawiamy go pod zmiennÄ… numer.Ten blok instrukcji, wyst¹pujÄ…cy w funkcji KASUJ_WEZLY, jest wykonywanywówczas, gdy użytkownik w odpowiedzi na pytanie o numer w¹zÅ‚a do skasowa-nia, naciÅ›nie sam klawisz ENTER.Ustawiamy wówczas wartoÅ›ci zmiennychjeszcze_1 i jeszcze_2 na nil, umożliwiajÄ…c tym samym zakoÅ„czenie wykony-wania funkcji.Ten blok instrukcji, wyst¹pujÄ…cy w funkcji KASUJ_WEZLY, jest wykonywanywówczas, gdy użytkownik podaÅ‚ numer w¹zÅ‚a akceptowany przez funkcj¹ getint(uwzgl¹dniajÄ…cy ograniczenia naÅ‚ożone poprzez funkcj¹ initget).Na samympoczÄ…tku pobieramy opis danego w¹zÅ‚a.Jeżeli w¹zeÅ‚ o danym numerze istniejena liÅ›cie w¹złów, kasujemy element, opis elementu oraz opis elementu na liÅ›cie*lista_wezlow.Dodatkowo ustawiamy wartość zmiennej jeszcze_2 na nil,umożliwiajÄ…c tym samym pobranie numeru nast¹pnego w¹zÅ‚a do skasowania.Jeżeli w¹zÅ‚a o danym numerze nie ma na liÅ›cie, wypisujemy odpowiednikomunikat po czym ponawiamy pytanie o numer w¹zÅ‚a do skasowania.21/!E{jb bojb!ob!mjtubdi 378Zwróć uwagÄ™ na kolejność kasowania.Najpierw kasujemy elementy rysunkowe(wÄ™zeÅ‚ i opis wÄ™zÅ‚a), posÅ‚ugujÄ…c siÄ™ ich identyfikatorami pobranymi z listy*lista_wezlow.Dopiero potem możemy skasować opis wÄ™zÅ‚a na liÅ›cie*lista_wezlow.21/6/3/!Npezgjlbdkb!fmfnfouv21/6/3/!Npezgjlbdkb!fmfnfouv21/6/3/!Npezgjlbdkb!fmfnfouv21/6/3/!Npezgjlbdkb!fmfnfouvLista DXF opisu elementu jest szczególnie przydatna wtedy, gdy chcemy dokonaćmodyfikacji elementu
[ Pobierz całość w formacie PDF ]