|
DCL - obsługa okien |
| Autor |
Wiadomość |
gruzin
sanitarnik
Pomógł: 5 razy Dołączył: 16 Lip 2009 Posty: 232 Skąd: Białystok
|
Wysłany: Sob Lut 12, 11 17:17 DCL - obsługa okien
|
|
|
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:
| Kod: | 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:
| Kod: | (defun c:metrix_gaz()
(setq dcl_id(load_dialog "profilek.dcl"))
(new_dialog "metrixgaz" dcl_id)
(start_dialog)
(unload_dialog dcl_id)
) |
|
_________________ www.instalacjesanitarne.com
www.profilek.net |
|
|
|
 |
Tomasz79
ZwCad, Arcadia
Pomógł: 1 raz Dołączył: 25 Lis 2008 Posty: 35
|
Wysłany: Sob Lut 12, 11 23:16
|
|
|
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ć:
| Kod: | ;;; 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 |
_________________ Użytkownik ZwCad+dodoatki oraz Arcadii-Architektura+dodatki
 |
|
|
|
 |
gruzin
sanitarnik
Pomógł: 5 razy Dołączył: 16 Lip 2009 Posty: 232 Skąd: Białystok
|
|
|
|
 |
Tomasz79
ZwCad, Arcadia
Pomógł: 1 raz Dołączył: 25 Lis 2008 Posty: 35
|
Wysłany: Nie Lut 13, 11 12:17
|
|
|
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ą 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 .
A to strona, która może coś ci pomoże.
http://www.afralisp.net/d...lisp-part-2.php
A tu jakieś przykłady z jedne książki z Helionu.
http://www.tomaszjankowsk...zyklady_dlc.zip
Pozdrawiam |
_________________ Użytkownik ZwCad+dodoatki oraz Arcadii-Architektura+dodatki
 |
|
|
|
 |
gruzin
sanitarnik
Pomógł: 5 razy Dołączył: 16 Lip 2009 Posty: 232 Skąd: Białystok
|
Wysłany: Nie Lut 13, 11 19:17
|
|
|
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... |
_________________ www.instalacjesanitarne.com
www.profilek.net |
|
|
|
 |
Tomasz79
ZwCad, Arcadia
Pomógł: 1 raz Dołączył: 25 Lis 2008 Posty: 35
|
Wysłany: Nie Lut 13, 11 20:16
|
|
|
Jeszcze pamiętać należy o tej książce:
Tworzenie okien dialogowych (LSP i DCL). Ćwiczenia praktyczne
Dariusz Frenki
http://helion.pl/ksiazki/...enki,cwtwok.htm
Tak do kompletu. |
_________________ Użytkownik ZwCad+dodoatki oraz Arcadii-Architektura+dodatki
 |
|
|
|
 |
Jason
Pomógł: 4 razy Dołączył: 25 Sty 2011 Posty: 33
|
Wysłany: Nie Lut 13, 11 23:34
|
|
|
rzucilem sobie znowu okiem na twoj PROFILEk (metrix). pare zmian w kodzie plus zapamietanie ostatnich pozycji w okienku. kod ponizej jesli zainteresowany:
| Kod: | (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
)
)
) |
| Kod: | 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. |
|
|
|
 |
Jason
Pomógł: 4 razy Dołączył: 25 Sty 2011 Posty: 33
|
|
|
|
 |
gruzin
sanitarnik
Pomógł: 5 razy Dołączył: 16 Lip 2009 Posty: 232 Skąd: Białystok
|
Wysłany: Nie Lut 20, 11 22:26
|
|
|
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.
 |
_________________ www.instalacjesanitarne.com
www.profilek.net |
|
|
|
 |
Jason
Pomógł: 4 razy Dołączył: 25 Sty 2011 Posty: 33
|
Wysłany: Pon Lut 21, 11 00:12
|
|
|
widze ze dochodza kolejne okienka, fajne
te radio sprawiaja ze okno jest troche rozlazle (moim zdaniem)
moze jakby jakos tak zakombinowac:
| Kod: | //// 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;
} |
okno.png
|
 |
| Plik ściągnięto 577 raz(y) 20,5 KB |
|
|
|
|
 |
gruzin
sanitarnik
Pomógł: 5 razy Dołączył: 16 Lip 2009 Posty: 232 Skąd: Białystok
|
Wysłany: Pon Lut 21, 11 08:49
|
|
|
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? |
_________________ www.instalacjesanitarne.com
www.profilek.net |
|
|
|
 |
Jason
Pomógł: 4 razy Dołączył: 25 Sty 2011 Posty: 33
|
Wysłany: Pon Lut 21, 11 09:24
|
|
|
| gruzin napisał/a: | 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.
| Kod: | POP_UP_10
: popup_list {
edit_width = 20;
} |
jesli gdzies to chcesz uzyc to robisz:
| Kod: | : 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
|
Pobierz Plik ściągnięto 36 raz(y) 7,3 KB |
|
|
|
|
 |
Jason
Pomógł: 4 razy Dołączył: 25 Sty 2011 Posty: 33
|
Wysłany: Pon Lut 21, 11 16:20
|
|
|
| gruzin napisał/a: | 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
| Kod: | (start_list "TU NAZWA WYCINKA")
(mapcar 'add_list TUTUAJLISTA)
(end_list) |
- i obsluga
| Kod: | (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. |
|
|
|
 |
gruzin
sanitarnik
Pomógł: 5 razy Dołączył: 16 Lip 2009 Posty: 232 Skąd: Białystok
|
Wysłany: Pon Lut 21, 11 21:09
|
|
|
| Cytat: | | (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ć):
| Kod: | | (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? |
_________________ www.instalacjesanitarne.com
www.profilek.net |
|
|
|
 |
Jason
Pomógł: 4 razy Dołączył: 25 Sty 2011 Posty: 33
|
Wysłany: Pon Lut 21, 11 21:36
|
|
|
oczywiscie ze atoi powinno byc, maly babol sie wkradl
| Kod: | | (setq L (list "a" "b" "c" "d")) |
najkrocej
bez vl:
| Kod: | (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
| Kod: | (nth 1.0 (list "a" "b")) -> bad argument
(nth 1 (list "a" "b")) -> "b" |
j. |
|
|
|
 |
|
|