_

[LISP] CADPL - Lisp Symbol Explorer [Tool_007]

Forum poświęcone flagowemu produktowi oraz aplikacjom pochodnym Autodesku. To jedyne forum mające w tytule nazwę programu, a to ze względu na jego olbrzymią popularność w Polsce. Można tutaj umieszczać również posty z ogólnie pojętej tematyki "Kreślarskie 2D".

[LISP] CADPL - Lisp Symbol Explorer [Tool_007]

Postprzez kojacek » wrz 25, 2012 19:14

Temat kiedyś poruszany tu: http://kojacek.republika.pl/symbols.html
Z powodu odświeżenia na własne potrzeby działania prezentowanego tam SE, okazja wykorzystania CADPL-Pack-v1.lsp Parę zmian w działaniu:
1) Inne okno a w nim:
2) Dwie dynamiczne listy filtrów (filtr typów / filtr nazw) zamiast jednej statycznej
3) Zmiana polecenia SE na LSE
lsedialog.png

i teraz pytanie: robimy narzędzie do CADPL (chyba 007)? Trzeba by zrobić:
1) ustawienia w rejestrach - analogicznie jak reszta CADPL
2) dynamicznie tworzone okno (z obsługą innych jezyków)
3) jakaś optymalizacja - coś do biblioteki?
Teraz póki co z osobnym dcl-em, polecenie LSE
lse.zip
(1.6 KiB) Pobrane 167 razy

kojacek
Avatar użytkownika
kojacek
 
Posty: 5501
Dołączył(a): paź 03, 2005 20:17

Re: [LISP] CADPL - Lisp Symbol Explorer [Tool_007]

Postprzez kruuger » wrz 25, 2012 19:42

kojacek napisał(a):Temat kiedyś poruszany tu: http://kojacek.republika.pl/symbols.html
Z powodu odświeżenia na własne potrzeby działania prezentowanego tam SE, okazja wykorzystania CADPL-Pack-v1.lsp Parę zmian w działaniu:
1) Inne okno a w nim:
2) Dwie dynamiczne listy filtrów (filtr typów / filtr nazw) zamiast jednej statycznej
3) Zmiana polecenia SE na LSE
lsedialog.png

i teraz pytanie: robimy narzędzie do CADPL (chyba 007)? Trzeba by zrobić:
1) ustawienia w rejestrach - analogicznie jak reszta CADPL
2) dynamicznie tworzone okno (z obsługą innych jezyków)
3) jakaś optymalizacja - coś do biblioteki?
Teraz póki co z osobnym dcl-em, polecenie LSE
lse.zip

kojacek

narzadko sie przyda. mozna zrobic jak najbardziej 007
kruuger
Avatar użytkownika
kruuger
 
Posty: 4860
Dołączył(a): paź 27, 2005 20:14
Lokalizacja: Kraków

Re: [LISP] CADPL - Lisp Symbol Explorer [Tool_007]

Postprzez kojacek » wrz 26, 2012 11:01

Na początek bym wyodrebnił i ubibliotecznił funkcję usuwania duplikatów na liście. To chyba najprostsza forma dla listy prostej (niezagnieżdżonej):
Kod: Zaznacz cały
(defun _lse_listdeldup (Lst / i r)
  (while Lst
    (setq i (car Lst)
          r (cons i r)
          Lst (vl-remove i Lst)
    )
  )
  (reverse r)
)

Mogła by być biblioteczną, ze wzgledu na swoją ogólność. Nie mamy chyba czegoś takiego?
Kod: Zaznacz cały
(_lse_listdeldup '(1 2 3 1 2 3 1 1 1 1 1 4 5 6 1 2 7 5 6))
daje
Kod: Zaznacz cały
(1 2 3 4 5 6 7)

a
Kod: Zaznacz cały
(vl-list->string (_lse_listdeldup (vl-string->list "Matematyko")))
zwraca
Kod: Zaznacz cały
 "Mateyko"

kojacek
Avatar użytkownika
kojacek
 
Posty: 5501
Dołączył(a): paź 03, 2005 20:17

Re: [LISP] CADPL - Lisp Symbol Explorer [Tool_007]

Postprzez kruuger » wrz 26, 2012 17:48

mozna jakies krotkie strzeszczenie jak to dziala. jakos nie moge sie wczytac w kod :?
co i jak sie tam filtruje.
k.
Avatar użytkownika
kruuger
 
Posty: 4860
Dołączył(a): paź 27, 2005 20:14
Lokalizacja: Kraków

Re: [LISP] CADPL - Lisp Symbol Explorer [Tool_007]

Postprzez kojacek » wrz 26, 2012 17:49

kruuger napisał(a):mozna jakies krotkie strzeszczenie jak to dziala. jakos nie moge sie wczytac w kod :?
co i jak sie tam filtruje.
k.

ale które - całe LSE?
kojacek
Avatar użytkownika
kojacek
 
Posty: 5501
Dołączył(a): paź 03, 2005 20:17

Re: [LISP] CADPL - Lisp Symbol Explorer [Tool_007]

Postprzez kruuger » wrz 26, 2012 17:54

kojacek napisał(a):
kruuger napisał(a):mozna jakies krotkie strzeszczenie jak to dziala. jakos nie moge sie wczytac w kod :?
co i jak sie tam filtruje.
k.

ale które - całe LSE?
kojacek

tak. widze ze czytamy atoms-family a potem jakas obrobka do filtrow jest. nie moge jakos przez to przejsc.
program sporo tam chyba robi bo troche sie przymula. jak lepiej zrozumie to moze sie wyduma cos do przyspieszenia.
jedyne ze nie ma innej drogi to wtedy musi byc jak jest.
k.
Avatar użytkownika
kruuger
 
Posty: 4860
Dołączył(a): paź 27, 2005 20:14
Lokalizacja: Kraków

Re: [LISP] CADPL - Lisp Symbol Explorer [Tool_007]

Postprzez kojacek » wrz 26, 2012 18:09

kruuger napisał(a):tak. widze ze czytamy atoms-family a potem jakas obrobka do filtrow jest. nie moge jakos przez to przejsc.
program sporo tam chyba robi bo troche sie przymula. jak lepiej zrozumie to moze sie wyduma cos do przyspieszenia.
jedyne ze nie ma innej drogi to wtedy musi byc jak jest.

Ok. Od początku. Wyjmij funkcję _lse_setdata na zewnątrz, aby można ją było ogladać...
Zwraca listę 3 elementową:
1) Posortowana lista z atoms-family jako lista stringów
2) na podstawie (1) lista par kropkowych (czyli taki dxf) czyli nazwa + wartość
3) analogicznie jak (2) pary: nazwa + typ (tu jest jedna sztuczka - podmiana stałej bez wartości (nil na list))
Wszystkie te dane są zapisywane jako STRING (z myślą o wyświetlaniu w oknie)
Kod: Zaznacz cały
(_lse_setdata)
lseatomsdata.png

kojacek
Avatar użytkownika
kojacek
 
Posty: 5501
Dołączył(a): paź 03, 2005 20:17

Re: [LISP] CADPL - Lisp Symbol Explorer [Tool_007]

Postprzez kojacek » wrz 26, 2012 18:30

teraz jak to działa. Mamy jakąś zmienną:
Kod: Zaznacz cały
(setq #lst (_lse_setdata))

teraz przykładowo badamy 1052 element (pierwszej) listy:
Kod: Zaznacz cały
(nth 1052 (car #lst))
daje np. "ACLNWT000"
oraz skojarzone z tą nazwą wartość drugiej listy:
Kod: Zaznacz cały
(cdr (assoc (nth 1052 (car #lst))(cadr #lst)))
zwraca
Kod: Zaznacz cały
"0"
i trzeciej:
Kod: Zaznacz cały
(cdr (assoc (nth 1052 (car #lst))(caddr #lst)))
daje
Kod: Zaznacz cały
"INT"

czyli (nazwa) "ACLNWT000" to (wartość) "0" i (typ) "INT"

Ponieważ druga i trzecia lista będą w przyszłości filtrowane nie mogą być prostymi listami (z wyszukiwaniami polegającymi na pozycji elementu) tylko muszą to być listy dla skojarzeń (assoc), tak jak dane DXF

kojacek
Avatar użytkownika
kojacek
 
Posty: 5501
Dołączył(a): paź 03, 2005 20:17

Re: [LISP] CADPL - Lisp Symbol Explorer [Tool_007]

Postprzez kojacek » wrz 26, 2012 19:37

Zajmijmy się teraz pierwszą listą filtrów, czyli lista typów symboli. To lista dynamiczna, bowiem oprócz spodziewanych typów (SUBR USUBR INT... itp.) mogą być równie inne (PICKSET, VLA_OBJECT ... itd.) Dane z typami to trzeci element listy. Sprawdźmy co się na niej znajduje:
Kod: Zaznacz cały
(mapcar 'cdr (caddr #lst))
zwraca:
Kod: Zaznacz cały
("SUBR" "SUBR" "SUBR" "SYM" "SUBR" "SUBR" "SUBR" "SUBR" "SUBR" "SUBR" "SUBR" "SYM" "SYM" "SYM" "SYM" "EXRXSUBR" "SUBR" "EXRXSUBR" "SUBR" "EXRXSUBR" "EXRXSUBR" "SUBR" "SUBR" ... ... ... )

Używając wspomnianej funkcji usuwania duplikatów:
Kod: Zaznacz cały
(acad_strlsort (_lse_listdeldup (mapcar 'cdr (caddr #lst))))

mamy listę wszystkich typów:
Kod: Zaznacz cały
("EXRXSUBR" "INT" "LIST" "REAL" "STR" "SUBR" "SYM" "USUBR")


kojacek
Avatar użytkownika
kojacek
 
Posty: 5501
Dołączył(a): paź 03, 2005 20:17

Re: [LISP] CADPL - Lisp Symbol Explorer [Tool_007]

Postprzez kojacek » wrz 26, 2012 20:36

Prześledźmy jak działa filtrowanie typów. Przykładowo chcemy wybrać wszystkie symbole typu "SUBR".
Działanie przeprowadzamy na trzecim elemencie listy danych. Wywołanie:
Kod: Zaznacz cały
(vl-remove-if-not '(lambda (%)(= "SUBR" (cdr %)))(caddr #lst))

daje:
lsefilter1.png
to lista par kropkowych. Tak zaś uzyskujemy listę nazw symboli typu SUBR:
Kod: Zaznacz cały
(mapcar 'car (vl-remove-if-not '(lambda (%)(= "SUBR" (cdr %)))(caddr #lst)))
lsefilter2.png
Taka lista wyświetlana jest w oknie.

kojacek
Avatar użytkownika
kojacek
 
Posty: 5501
Dołączył(a): paź 03, 2005 20:17

Następna strona

Powrót do AutoCAD

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników