_

[LISP] CADPL - Utwórz blok [Tool]

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 - Utwórz blok [Tool]

Postprzez kojacek » lut 17, 2012 09:53

kruuger napisał(a):
kojacek napisał(a):
kruuger napisał(a):to juz lepiej:
MBL
Kod: Zaznacz cały
Utworz blok [Anonim/Nazwa] <Anonim>:
A
Wybierz obiekty:
Punkt (albo na odwrot)

oczywiscie po skonczeniu zapamietanie wyboru.
moze byc wsparcie MAB, MNB ale juz bez zadnych zapytach (obiekty, punkt i sru).

Na poczatek (ze zmienną globalną):
Kod: Zaznacz cały
(defun C:MB (/ in)
  (if (not *cd-MakeBlockType*)(setq *cd-MakeBlockType* 0))
  (initget "Anonimowy Nazwa")
  (setq in
    (getkword
      (strcat
        "\nUtwórz blok [Anonimowy/Nazwa]<"
        (nth *cd-MakeBlockType*
          (list "Anonimowy" "Nazwa")
        )
        ">: "
      )
    )
  )
  (cond
    ((= in "Anonimowy")(setq *cd-MakeBlockType* 0))
    ((= in "Nazwa")(setq *cd-MakeBlockType* 1))
    (t *cd-MakeBlockType*)
  )
  *cd-MakeBlockType*
)

Na marginesie: Może osobny wątek dla tego?
kojacek

pieknie. dajby spacje:
Kod: Zaznacz cały
[Anonimowy/Nazwa] tu <

jakis
[LISP] CADPL - Utwórz blok [Tool]

z Pack-owego wątku.
Pytanie od razu - wersję anglojęzyczną też od razu robim? I jak (jeśli już)? Wybór czy automat?
kojacek
Avatar użytkownika
kojacek
 
Posty: 5507
Dołączył(a): paź 03, 2005 20:17

Re: [LISP] CADPL-Pack-v1.lsp [Dyskusja]

Postprzez harasimowicz » lut 17, 2012 10:08

Kod: Zaznacz cały
;=========================================================================
(defun mh:GetChoisText (msg opcje DefVal / msg2 msg3 SelDist OutVal)
;=========================================================================
; msg = tekst zapytania
; opcje = LISTA tekstów możliwych do wyboru
; DefVal = wartość TEKSTU wybierana domyślnie
; example: (mh:GetChoisText "\nPodaj wartosc?" '("aaa" "bbb" "ccc" "ddd" "eee") "ddd")
;=========================================================================

      (setq msg2 "")
      (foreach % opcje
      (setq msg2 (strcat msg2 % " "))
      );foreach
      (setq msg2 (substr msg2 1 (- (strlen msg2) 1))) ;usunięcie oststniej spacji
      
      (setq msg3 "")
      (foreach % opcje
      (setq msg3 (strcat msg3 % "/"))
      );foreach
      (setq msg3 (substr msg3 1 (- (strlen msg3) 1))) ;usunięcie oststniego ukośnika "/"
   
   (initget 0 msg2)
   (setq SelDist (vl-catch-all-apply 'getkword (list (strcat msg " [" msg3 "] <"  DefVal ">: "))))
 
  (if (not (vl-catch-all-error-p SelDist))
      (progn
         (if SelDist
            (setq OutVal SelDist)
            (setq OutVal DefVal)
         );if
      );progn
      (setq OutVal DefVal)
  );if
OutVal
);defun mh:GetChoisText
;=========================================================================


Ja używam czegoś takiego jak mam coś do wyboru.
harasimowicz
 
Posty: 110
Dołączył(a): gru 01, 2010 11:09
Lokalizacja: Białystok

Re: [LISP] CADPL - Utwórz blok [Tool]

Postprzez kruuger » lut 17, 2012 10:09

kojacek napisał(a):Pytanie od razu - wersję anglojęzyczną też od razu robim? I jak (jeśli już)? Wybór czy automat?
kojacek

ja bym zrobil.
automat na starcie, ale z mozliwoscia przestawienia ?
k.
Avatar użytkownika
kruuger
 
Posty: 4863
Dołączył(a): paź 27, 2005 20:14
Lokalizacja: Kraków

Re: [LISP] CADPL-Pack-v1.lsp [Dyskusja]

Postprzez kojacek » lut 17, 2012 10:25

harasimowicz napisał(a):
Kod: Zaznacz cały
;=========================================================================
(defun mh:GetChoisText (msg opcje DefVal / msg2 msg3 SelDist OutVal)
;=========================================================================
; msg = tekst zapytania
; opcje = LISTA tekstów możliwych do wyboru
; DefVal = wartość TEKSTU wybierana domyślnie
; example: (mh:GetChoisText "\nPodaj wartosc?" '("aaa" "bbb" "ccc" "ddd" "eee") "ddd")
;=========================================================================

      (setq msg2 "")
      (foreach % opcje
      (setq msg2 (strcat msg2 % " "))
      );foreach
      (setq msg2 (substr msg2 1 (- (strlen msg2) 1))) ;usunięcie oststniej spacji
      
      (setq msg3 "")
      (foreach % opcje
      (setq msg3 (strcat msg3 % "/"))
      );foreach
      (setq msg3 (substr msg3 1 (- (strlen msg3) 1))) ;usunięcie oststniego ukośnika "/"
   
   (initget 0 msg2)
   (setq SelDist (vl-catch-all-apply 'getkword (list (strcat msg " [" msg3 "] <"  DefVal ">: "))))
 
  (if (not (vl-catch-all-error-p SelDist))
      (progn
         (if SelDist
            (setq OutVal SelDist)
            (setq OutVal DefVal)
         );if
      );progn
      (setq OutVal DefVal)
  );if
OutVal
);defun mh:GetChoisText
;=========================================================================


Ja używam czegoś takiego jak mam coś do wyboru.


Funkcja wygląda zachęcająco, ale trzeba ją zmienić, przy naciśnięciu ESC zwraca wartość domyślną. ESC zwykle uzywany jest to przerwania działania programu a nie akceptacji wyboru.
kojacek
Avatar użytkownika
kojacek
 
Posty: 5507
Dołączył(a): paź 03, 2005 20:17

Re: [LISP] CADPL-Pack-v1.lsp [Dyskusja]

Postprzez kruuger » lut 17, 2012 10:30

harasimowicz napisał(a):Ja używam czegoś takiego jak mam coś do wyboru.

chyba cza sie temu przyjrzec. moze byc przydatne.
k.
Avatar użytkownika
kruuger
 
Posty: 4863
Dołączył(a): paź 27, 2005 20:14
Lokalizacja: Kraków

Re: [LISP] CADPL-Pack-v1.lsp [Dyskusja]

Postprzez kojacek » lut 17, 2012 10:33

kruuger napisał(a): chyba cza sie temu przyjrzec. moze byc przydatne.

Niewątpliwie może. Wzbogaci Pack-a.
kojacek
Avatar użytkownika
kojacek
 
Posty: 5507
Dołączył(a): paź 03, 2005 20:17

Re: [LISP] CADPL - Utwórz blok [Tool]

Postprzez harasimowicz » lut 17, 2012 10:40

Pisałem ta funkcję wieki temu więc zoptymalizowana to ona nie jest raczej, ale działa i często z niej korzystam.
harasimowicz
 
Posty: 110
Dołączył(a): gru 01, 2010 11:09
Lokalizacja: Białystok

Re: [LISP] CADPL - Utwórz blok [Tool]

Postprzez kojacek » lut 17, 2012 11:05

harasimowicz napisał(a):Pisałem ta funkcję wieki temu więc zoptymalizowana to ona nie jest raczej, ale działa i często z niej korzystam.

No tak trochę pozmieniałem. W przypadku ESC zwraca #<%catch-all-apply-error%>. Można się zastanowić czy nie zmienic tego na nil - wtedy funkcja zwracałby wybrane słowo kluczowe lub nil. Wyglada tak:
Kod: Zaznacz cały
(defun cd:GET_KeyWord (Msg Keys Def / key res)
  (setq key
    (mapcar
      (function
        (lambda (%)
          (vl-string-right-trim %
            (apply
              (quote strcat)
              (mapcar
                (function
                  (lambda (%1)(strcat %1 %))
                ) Keys
              )
            )
          )
        )
      )(list " " "/")
    )
  )
  (initget (car key))
  (setq Res
    (vl-catch-all-apply
      (quote getkword)
      (list
        (strcat Msg " [" (cadr key) "] <"  Def ">: ")
      )
    )
  )
  (if (not res) Def res)
)

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

Re: [LISP] CADPL - Utwórz blok [Tool]

Postprzez kruuger » lut 17, 2012 11:30

kojacek napisał(a):No tak trochę pozmieniałem.
kojacek

hehe. troche :wink:
error chyba nam niepotrzebny, raczej nil.
k.
Avatar użytkownika
kruuger
 
Posty: 4863
Dołączył(a): paź 27, 2005 20:14
Lokalizacja: Kraków

Re: [LISP] CADPL - Utwórz blok [Tool]

Postprzez kojacek » lut 17, 2012 11:37

kruuger napisał(a): hehe. troche :wink:
error chyba nam niepotrzebny, raczej nil.

Też tak myslę. Zatem teraz całość:
Kod: Zaznacz cały
(defun cd:GET_KeyWord (Msg Keys Def / res key)
  (setq key
    (mapcar
      (function
        (lambda (%)
          (vl-string-right-trim %
            (apply
              (quote strcat)
              (mapcar
                (function
                  (lambda (%1)(strcat %1 %))
                ) Keys
              )
            )
          )
        )
      )(list " " "/")
    )
  )
  (initget (car key))
  (setq Res
    (vl-catch-all-apply
      (quote getkword)
      (list
        (strcat Msg " [" (cadr key) "] <" Def ">: ")
      )
    )
  )
  (if res
    (if (= (type res)(quote STR)) res)
    Def
  )
)

Potestujcie, jak dobrze chodzi bedzie do Pack-a nowa funkcyjka. Trochu tez nazwę zmieniłem ;)
kojacek
Avatar użytkownika
kojacek
 
Posty: 5507
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