_

[LISP] funkcja lisped

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] funkcja lisped

Postprzez wilda » maja 15, 2019 14:58

Przy pomocy skróconego edytora tekstu przypisuję do zmiennej str listę: (liczby oddzielone spacjami np: 10 20 30)
Kod: Zaznacz cały
(setq str (read (strcat "("(lisped "podaj odległości")")")))

Jak teraz przypisać do innej zmiennej lba, z możliwością zmiany w tym edytorze pobrane wcześniej wartości listy?
Kod: Zaznacz cały
(stq lba (read (strcat "("(lisped str)")")))

Próbuję w różny sposób ale dostaję błąd:
Kod: Zaznacz cały
błąd: zły typ argumentu: stringp (20 50)
lub
błąd: zły typ argumentu: stringp ("20" "50")
wilda
 
Posty: 248
Dołączył(a): gru 18, 2007 21:41

Re: [LISP] funkcja lisped

Postprzez andkal » maja 15, 2019 17:50

Przypuszczam że błąd polega na tym że podajesz tej funkcji listę zamiast Stringa.
Tutaj można poczytać co to za funkcja. Ja akurat nie znałem jej wczesniej.
https://forums.autodesk.com/t5/visual-l ... d-p/879973
andkal
 
Posty: 45
Dołączył(a): paź 01, 2017 22:10

Re: [LISP] funkcja lisped

Postprzez wilda » maja 15, 2019 20:29

Też do wczoraj tej funkcji nie znałem, stronę tą z opisem już widziałem.
Doszedłem, że w jej wyniku otrzymuję listę.
Nie potrafię zamienić listy przypisanej do str (10 20 30),
żeby móc ją później odczytać i przypisać do zmiennej lba

Kod: Zaznacz cały
(setq str (read (strcat "("(lisped "podaj odległości")")")))
(setq str2 --> zamiana na string "10" " " "20" " " "30"
(setq lba (read (strcat "("(lisped str2)")")))
wilda
 
Posty: 248
Dołączył(a): gru 18, 2007 21:41

Re: [LISP] funkcja lisped

Postprzez andkal » maja 15, 2019 22:10

Jeśli chodzi o to by zamienić do STR to można coś w tym stylu:
Kod: Zaznacz cały
(setq ab (list "10" "20" "30") i1 0 txt1 "")
(repeat (length ab)    (setq txt1 (strcat txt1 (nth i1 ab) " ") i1 (1+ i1)) )
(setq txt1 (substr txt1 1 (- (strlen txt1) 1) ));----> Da wynik  "10 20 30"


Nie znam tego lispeda ale ja zwykle dodaje jakieś jeszcze sprawdzenia poprawności wprowadzanych danych w oknie dialogowym. Jak mają to byc liczby to np przez (if (not (numberp
andkal
 
Posty: 45
Dołączył(a): paź 01, 2017 22:10

Re: [LISP] funkcja lisped

Postprzez wilda » maja 16, 2019 00:34

Nie wiem czy to dobrze użyłem ale nie pomaga.
Jest błąd- Błąd aplikacji: Niewłaściwy typ przesłano jako dane wejściowe polecenia.
Może cały kod pomoże wskazać rozwiązanie. Program powinien po wpisaniu odległości kopiować równolegle o podane wartości wskazywane obiekty. W oknie dialogowym edytora tekstu, program powinien pamiętać ostatnio wprowadzone zmiany, tak żeby nie trzeba było za każdym razem wprowadzać jeżeli są te same odległości odsunięcia dla kolejnego obiektu.
Kod: Zaznacz cały
(defun c:mOff(/ ob a si lba )
(if (null str)
   (progn
      (setq aba (strcat "("(lisped "podaj odl")")")) ;odległości oddzielone spacjami
      (setq ab aba i1 0 str "")
      (repeat (length ab)    (setq str (strcat str (nth i1 ab) " ") i1 (1+ i1)) )
      (setq str (substr str 1 (- (strlen str) 1) ));----> Da wynik  "10 20 30"
   )
)

(while str
  (if
      (setq ob (entsel "\nWybierz Obiekt")
         a 0
         sid   (getpoint "\nWskaż stronę")
         lba (read (strcat "("(lisped str)")"))
         lba (mapcar '(lambda(x)(setq a (+ x a))) lba)
      )         
         (mapcar '(lambda(i)(vl-cmdf "_.offset" i ob "_non" si "")) lba)
  )
)

Załączniki
moff..gif
wilda
 
Posty: 248
Dołączył(a): gru 18, 2007 21:41

Re: [LISP] funkcja lisped

Postprzez kojacek » maja 16, 2019 06:07

wilda napisał(a):Nie wiem czy to dobrze użyłem ale nie pomaga.
Jest błąd- ...

Nie rozumiem dlaczego upierasz sie na jakiś lisped. Nieustannie polecam zaprzyjaźnienie się z CADPL-Pack'iem...
A w nim (w tym przypadku) szczególnie z takimi funkcjami:
dynamiczne okno dcl z obsługą błędów i innymi cudami: cd:DCL_StdEditBoxDialog - Okno dialogowe z "edit_box"
Zabawy stringów z separatorami (cokolwiek to znaczy ;) ):
cd:STR_Parse - Dzieli lancuch separatorem cd:STR_ReParse - Laczy liste lancuchow w lancuch z separatorem,
oraz listami:
cd:CON_Value2List - Zmiana lancucha tekstow. na liste, cd:CON_All2Str - Zmiana elem. listy na lancuchy
oraz całą resztę.
Avatar użytkownika
kojacek
 
Posty: 5501
Dołączył(a): paź 03, 2005 20:17

Re: [LISP] funkcja lisped

Postprzez wilda » maja 16, 2019 15:41

To nie jest kwestia uporu tylko braku biegłości w pisaniu lispów takiej by tworzyć coś od zera.
Ta moja próba to modyfikacja istniejącego lispa znalezionego na którymś forum.
I by się pewnie udało, gdyby nie to że korzystałem ze starego pliku z pomocą do cad-packa i nie było tam jeszcze funkcji CON_List2Value
Już wszytko działa nawet z lisped'em.
Dzięki za podpowiedź.
Załączniki
moff2..gif
wilda
 
Posty: 248
Dołączył(a): gru 18, 2007 21:41


Powrót do AutoCAD

Kto przegląda forum

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