gruzin Opublikowano 12 Lutego 2011 Zgłoś Udostępnij Opublikowano 12 Lutego 2011 Zaczynam się uczyć DCLa i jak to na początku nauki nowych rzeczy mam problem z podstawami. Jak mam odczytać które wartości w oknie są pozaznaczane? Próbowałem to zrobić samemu ale poddałem się. ideałem byłoby zapisanie w lispie zaznaczonego LABEL gazomierza do jednej zmiennej a LABEL widoku do drugiej. dcl: metrixgaz : dialog { label = "Gazomierze METRIX"; :boxed_radio_column { label = "Gazomierz" ; : radio_button { key = "gm1" ; label = "Gazomierz - UG (G1,6 G2,5 G4)" ; } :radio_button { key = "gm2" ; label = "Gazomierz - 6G4, 6G6" ; value = "1" ; } :radio_button { key = "gm3" ; label = "Gazomierz - 6G4-250" ; } :radio_button { key = "gm4" ; label = "Gazomierz - G10" ; } :radio_button { key = "gm5" ; label = "Gazomierz - G16, G25" ; } :radio_button { key = "gm6" ; label = "Gazomierz - G40, G65" ; } } :boxed_radio_column { label = "Widok" ; : radio_button { key = "ww1" ; label = "Widok z przodu" ; value = "1" ; } :radio_button { key = "ww2" ; label = "Widok z boku" ; } } :button { label = "Wstaw"; key = "Wstaw"; is_cancel = true; width = 20; fixed_width = true; } } lisp: (defun c:metrix_gaz() (setq dcl_id(load_dialog "profilek.dcl")) (new_dialog "metrixgaz" dcl_id) (start_dialog) (unload_dialog dcl_id) ) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tomasz79 Opublikowano 12 Lutego 2011 Zgłoś Udostępnij Opublikowano 12 Lutego 2011 Proszę ściągnąć sobie ten plik w zip-ie. http://www.tomaszjankowski.webpark.pl/strony.zip Tam znajdzie Pan odpowiedź, zeskanowałem przykład z książki do tego przypadku A tu mała pomoc do projektowania okienek "tester okienek DCL" może się przydać: ;;; TESTDCL.LSP .... by M.P.Saju. ;;; This is a freeware. License for use of this application is granted for ;;; distribution, provided it is not mutilated. If there are problems please ;;; feel free to contact the author at mpsaju@yahoo.com ;;; ;;; Testing *.DCL files becomes a necessity when developing a good sized lisp ;;; application for easy input and understanding. This routine in lisp was ;;; written for just such a necessity. ;;; ;;; Usage is very simple... Just type "Testdcl" in Autocad text screen and press ;;; "enter". A file selection dialog box will open up to select the DCL file. ;;; On entering, the DCL under test will open. This application works under ;;; the assumption that there is an active "accept" or "cancel" button. ;;; ;;; I have tried to solve all problems that I have encountered. However if there ;;; are any further issues please feel free to contact me. (defun c:testdcl (/ nam$ nam id loop) ;;; lisp for checking dialogboxes at the beginning of their design (setq nam$ (getfiled "Select a DCL file" "" "dcl" 0)) (setq nam (identify nam$)) ) (defun identify (nam$ / file x dd dd$) (setq file (open nam$ "r") dd$ nil dd nil x 0 ) (while (setq dd (read-line file)) (if (wcmatch dd "*: dialog {") (progn (setq dd$ (substr dd 1 (- (strlen dd) 11))) (if (wcmatch dd$ " *") (setq dd$ (substr dd$ 2 (strlen dd$))) ;; added for eliminating blank ) (rundcl nam$ dd$) ) ) ) (close file) dd$ ) (defun rundcl (nam$ nam) (setq id (load_dialog nam$)) (if (not (new_dialog nam id)) (exit) ) (action_tile "cancel" "(done_dialog 0)") ;;; cancel button dialog.. normally in all DCLs (action_tile "accept" "(done_dialog 0)") ;;; accept button dialog.. normally in all DCLs (setq loop (start_dialog)) ) Pozdrawiam Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
gruzin Opublikowano 13 Lutego 2011 Autor Zgłoś Udostępnij Opublikowano 13 Lutego 2011 ten skan mi wszystko wyjaśnił. dzięki podejrzewam, że to z tej książki: http://helion.magazyn.pl/AutoCAD-LSP-i-DCL-Programowanie-okien-dialogowych-w-przykladach/LSPDCL/ksiazka.html wie ktoś może czy można gdzieś zdobyć ta książkę (drukowaną, pdf lub jpg). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tomasz79 Opublikowano 13 Lutego 2011 Zgłoś Udostępnij Opublikowano 13 Lutego 2011 Książka praktycznie nie do zdobycia. Chyba że po znajomościach lub allegro. Ja do zdobycia tej książki 2 lata temu zatrudniłem żonę, wiedząc że jej nigdzie w żadnym sklepie (internetowym lub w księgarni) nie kupi obiecałem jej za nią :mrgreen: srebrny zegarek . I któregoś pięknego dnia przyszła paczka do mnie z książką z fakturą z jakiejś księgarni internetowej. Ale co było najśmieszniejsze w tym wszystkim że ta książka miała na okładce ślady po butach, jakby ktoś po niej chodził i trochę zmiętolona była, tak jakby leżała gdzieś długo i czekała na mnie. Więc od tamtej pory ta książka jest bardzo cenna dla mnie, bo kosztowała mnie 40zł + srebrny zegarek :lol: . A to strona, która może coś ci pomoże. http://www.afralisp.net/dialog-control-language/tutorials/dialog-boxes-and-autolisp-part-2.php A tu jakieś przykłady z jedne książki z Helionu. http://www.tomaszjankowski.webpark.pl/przyklady_dlc.zip Pozdrawiam Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
gruzin Opublikowano 13 Lutego 2011 Autor Zgłoś Udostępnij Opublikowano 13 Lutego 2011 Stronę afralisp.net znam (wiem że istnieje). Zastanawiam się, czy moja ślubna też zacznie węszyć po necie jak jej coś obiecam w nagrodę... Trzeźwo myśląc, chyba jednak czeka mnie wycieczka do czytelni na politechnice. Tak będzie szybciej... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tomasz79 Opublikowano 13 Lutego 2011 Zgłoś Udostępnij Opublikowano 13 Lutego 2011 Jeszcze pamiętać należy o tej książce: Tworzenie okien dialogowych (LSP i DCL). Ćwiczenia praktyczne Dariusz Frenki http://helion.pl/ksiazki/tworzenie_okien_dialogowych_lsp_i_dcl_cwiczenia_praktyczne_dariusz_frenki,cwtwok.htm Tak do kompletu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jason Opublikowano 13 Lutego 2011 Zgłoś Udostępnij Opublikowano 13 Lutego 2011 rzucilem sobie znowu okiem na twoj PROFILEk (metrix). pare zmian w kodzie plus zapamietanie ostatnich pozycji w okienku. kod ponizej jesli zainteresowany: (defun C:METRIX_GAZ (/ DCL ACT NAZWA WIDOK PT) (setq DCL (load_dialog "profilek-gaz.dcl")) (if (not (new_dialog "metrixgaz" DCL)) (alert "Nie znaleziono pliku profilek-gaz.dcl") (progn (if (not *metrix_gaz*) (setq *metrix_gaz* (list "gazomierz_1" "front")) ) (setq NAZWA (car *metrix_gaz*) WIDOK (last *metrix_gaz*) ) (foreach % (list "NAZWA" "WIDOK") (set_tile % (eval (read %))) (action_tile % (strcat "(setq " % " $value)")) ) (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (setq ACT (start_dialog)) (unload_dialog DCL) (if (zerop ACT) (princ "\nAnulowano. ") (progn (if (setq PT (getpoint "\nPodaj punkt wstawienia gazomierza: ")) (progn (kr:BLK_InsertBlock PT (strcat "Profilek-metrix_" NAZWA "_" WIDOK) 1 1 1 0 ) (setq *metrix_gaz* (list NAZWA WIDOK)) ) (princ "\nNiepoprawny punkt. ") ) ) ) ) ) (princ) ) ; ============================================================ ; ; Insert block ; ; InPt [list] - insertion point (3D point) ; ; Name [sTR] - block name or drawing name (support path) ; ; X [REAL] - X scale factor ; ; Y [REAL] - Y scale factor ; ; Z [REAL] - Z scale factor ; ; Rot [REAL] - angle of rotation in radians ; ; ------------------------------------------------------------ ; ; (kr:BLK_InsertBlock '(0 0 0) "ldef" 1 1 1 0) ; ; ============================================================ ; (defun kr:BLK_InsertBlock (InPt Name X Y Z Rot) (vl-catch-all-apply 'vla-InsertBlock (list (vlax-get-property (vla-get-ActiveDocument (vlax-get-acad-object) ) (if (= 1 (getvar 'CVPORT)) 'PaperSpace 'ModelSpace ) ) (vlax-3d-point InPt) (if (tblsearch "BLOCK" Name) Name (findfile (strcat Name ".dwg")) ) X Y Z Rot ) ) ) metrixgaz : dialog { label = "Gazomierze METRIX"; :boxed_radio_column { key = "NAZWA"; label = "Gazomierz" ; : radio_button { key = "gazomierz_1" ; label = "Gazomierz - UG (G1,6 G2,5 G4)" ; } :radio_button { key = "gazomierz_2" ; label = "Gazomierz - 6G4, 6G6" ; } :radio_button { key = "gazomierz_3" ; label = "Gazomierz - 6G4-250" ; } :radio_button { key = "gazomierz_4" ; label = "Gazomierz - G10" ; } :radio_button { key = "gazomierz_5" ; label = "Gazomierz - G16, G25" ; } :radio_button { key = "gazomierz_6" ; label = "Gazomierz - G40, G65" ; } } : boxed_radio_column { label = "Widok" ; key = "WIDOK"; : radio_button { key = "front" ; label = "Widok z przodu" ; } :radio_button { key = "bok" ; label = "Widok z boku" ; } } ok_cancel; } jakies pytania, wal smialo j. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jason Opublikowano 14 Lutego 2011 Zgłoś Udostępnij Opublikowano 14 Lutego 2011 a tu jeszcze swietny material do DCL http://web2.airmail.net/terrycad/Tutorials/MyDialogs.htm j. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
gruzin Opublikowano 20 Lutego 2011 Autor Zgłoś Udostępnij Opublikowano 20 Lutego 2011 Zapamiętanie ustawień okna DCL w liście bardzo mi się spodobało. Co prawda nie jest to w tym przypadku funkcjonalność niezbędna, ale przeanalizowałem i zaadoptowałem twoją część kodu. Zrobiłem w Profilku kolejne okienko, tym razem do starego polecenia "pks" i tu zapamiętanie ustawień jest bardzo przydatne. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jason Opublikowano 20 Lutego 2011 Zgłoś Udostępnij Opublikowano 20 Lutego 2011 widze ze dochodza kolejne okienka, fajne :) te radio sprawiaja ze okno jest troche rozlazle (moim zdaniem) moze jakby jakos tak zakombinowac: //// MAIN //// profil : dialog { label = "Opisywanie profili podłużnych"; : boxed_column { label = "Dane:"; : EDIT_BOX_10 { key = "DCL_POZIOM"; label = "Wpisz wartość poziomu por. [m]: "; } : EDIT_BOX_10 { key = "DCL_odl0"; label = "Odległość dla punktu \"0\" [m]: "; } : EDIT_BOX_10 { key = "DCL_srednica"; label = "Średnica rurociągu [mm]: "; } : EDIT_BOX_10 { key = "DCL_skalapoziom"; label = "Skala pozioma <1:xxx>: "; } : EDIT_BOX_10 { key = "DCL_skalapion"; label = "Skala pionowa <1:yyy>: "; } : EDIT_BOX_10 { key = "DCL_nrwezla"; label = "Numer pierwszego węzła: "; } spacer; } : boxed_column { label = "Ustawienia:"; : POP_UP_10 { label = "Opisywanie kolizji:"; list = "Opisywanie kolizji"; } : POP_UP_10 { list = "Rysuj metrykę tabeli:" ; label = "Metryka tabelki"; } : POP_UP_10 { list = "Spód" ; label = "Sposób rysowania sieci:"; } : POP_UP_10 { list = "PVC" ; label = "Materiał rurociągu:"; } : POP_UP_10 { list = "S" ; label = "Oznaczenie węzłów:"; } spacer; } ok_cancel; } //// SUB //// EDIT_BOX_10 : edit_box { edit_limit = 10; edit_width = 10; } POP_UP_10 : popup_list { edit_width = 20; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
gruzin Opublikowano 21 Lutego 2011 Autor Zgłoś Udostępnij Opublikowano 21 Lutego 2011 Masz rację. Twój wzór okienka wygląda lepiej od mojego. Nie pozostaje mi zatem nic innego tylko opanować ":popup_list". Mam też pytanie: co to jest :POP_UP_10 i czy różni się czymś od :popup_list? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jason Opublikowano 21 Lutego 2011 Zgłoś Udostępnij Opublikowano 21 Lutego 2011 Masz rację. Twój wzór okienka wygląda lepiej od mojego. Nie pozostaje mi zatem nic innego tylko opanować ":popup_list".Mam też pytanie: co to jest :POP_UP_10 i czy różni się czymś od :popup_list? POP_UP_10 to zdefiniowana pod_funkcja. jesli cos sie powtarza kilka razy w tym samym wycinku to mozna to zgrupowac. w moim wypadku jest edit_width = 20. zamiast zmieniac wartosc 20 w 5 miejscach robisz tylko podmiane w jedym. POP_UP_10 : popup_list { edit_width = 20; } jesli gdzies to chcesz uzyc to robisz: : POP_UP_10 { list = "S" ; label = "Oznaczenie węzłów:"; } i jest to pop_up z list, label i pobiera edit_width z POP_UP_10 chyba nie zamieszalem. w zalaczniku pliczek jak mozna wykorzystywac pod_funkcje (zmien rozsz. z zip na dcl bo chyba nie mozna dodawac dcl) j. Atx.zip Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jason Opublikowano 21 Lutego 2011 Zgłoś Udostępnij Opublikowano 21 Lutego 2011 Masz rację. Twój wzór okienka wygląda lepiej od mojego. Nie pozostaje mi zatem nic innego tylko opanować ":popup_list".Mam też pytanie: co to jest :POP_UP_10 i czy różni się czymś od :popup_list? jakiegos szalenstwa nie ma. wiekszosc wycinkow opeira sie na tym samym. - wypelnianie wycinka (start_list "TU NAZWA WYCINKA") (mapcar 'add_list TUTUAJLISTA) (end_list) - i obsluga (action_tile "POPUP" "(setq POS $value)") - zwraca numer pozycjii jako string "0" "1" itd (action_tile "POPUP" "(setq POS (nth $value LISTA))") - zwraca wartosc z pozycji jako string "cos na pozycji 0" "cos na pozycji 0" itd j. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
gruzin Opublikowano 21 Lutego 2011 Autor Zgłoś Udostępnij Opublikowano 21 Lutego 2011 (action_tile "POPUP" "(setq POS (nth $value LISTA))") - zwraca wartość z pozycji jako string "cos na pozycji 0" "cos na pozycji 1" itd trochę przysypiam ale chyba powinno być tak: (chyba atoi i atof będą dobrze działać): :-) (action_tile "POPUP" "(setq POS (nth (atoi $value) LISTA))") a czy jest jakaś funkcja do odczytania na której pozycji w liście jest znany element? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jason Opublikowano 21 Lutego 2011 Zgłoś Udostępnij Opublikowano 21 Lutego 2011 oczywiscie ze atoi powinno byc, maly babol sie wkradl :grin: (setq L (list "a" "b" "c" "d")) najkrocej (vl-position "b" L) bez vl: (setq C 0) (foreach % L (if (= "b" %) (setq P C) ) (setq C (1+ C)) ) (princ P) atof nie moze byc gdyz nth nie przyjmuje real (nth 1.0 (list "a" "b")) -> bad argument (nth 1 (list "a" "b")) -> "b" j. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
gruzin Opublikowano 22 Lutego 2011 Autor Zgłoś Udostępnij Opublikowano 22 Lutego 2011 (vl-position "b" list) jest OK. Robi dokładnie to o co mi chodziło. Dzięki. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
gruzin Opublikowano 23 Lutego 2011 Autor Zgłoś Udostępnij Opublikowano 23 Lutego 2011 mam plik dcl oraz do tego plik sld i lsp (wszytko w katalogu głównym Zwcada) Nie wiem czemu w oknie dialogowym nie wyświetla mi sie obrazek. Co robię nie tak? /////////////////////////////////// // okno główne komendy STUDNIA // /////////////////////////////////// studnia : dialog { label = "Studnia w przekroju"; : boxed_column { label = "Dane:"; : edit_box { edit_limit = 10; edit_width = 10; key = "DCL_srednica_studni"; label = "Średnica studni [cm]: "; } : edit_box { edit_limit = 10; edit_width = 10; key = "DCL_osadnik"; label = "Głębokość osadnika [cm]: "; } spacer; } : image { height = 20 ; width = 20 ; key = "profilek_studnia" ; value = "profilek_studnia.sld" ; color = 0 ; } ok_cancel; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jason Opublikowano 23 Lutego 2011 Zgłoś Udostępnij Opublikowano 23 Lutego 2011 slide wypelniasz z lispa. ponizszy kod z kursy zwcad\lisp\dcl 1. (defun DCL_WriteToImage (slide Key / War width height) 2. (setq width (dimx_tile Key)) 3. (setq height (dimy_tile Key)) 4. (start_image Key) 5. (fill_image 0 0 width height 0) 6. (slide_image 0 0 width height slide) 7. (end_image) 8. ) jason Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi