Forum użytkowników programów ZWCAD, KOMPAS-3D, Scan2CAD, PDF2CAD Strona Główna Forum użytkowników programów ZWCAD, KOMPAS-3D, Scan2CAD, PDF2CAD
Forum CAD.

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj

Poprzedni temat «» Następny temat
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
Wysłany: Nie Lut 13, 11 09:39   

ten skan mi wszystko wyjaśnił. dzięki

podejrzewam, że to z tej książki:
http://helion.magazyn.pl/...CL/ksiazka.html

wie ktoś może czy można gdzieś zdobyć ta książkę (drukowaną, pdf lub jpg).
_________________
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 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ą :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/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
Wysłany: Pon Lut 14, 11 08:48   

a tu jeszcze swietny material do DCL
http://web2.airmail.net/t...s/MyDialogs.htm
j.
 
     
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 :grin:

Kod:
(setq L (list "a" "b" "c" "d"))

najkrocej
Kod:
(vl-position "b" L)


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.
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Strona wygenerowana w 0,33 sekundy. Zapytań do SQL: 14