_

LISP przestał działać w nowszej wersji AutoCad

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 przestał działać w nowszej wersji AutoCad

Postprzez cilip » cze 14, 2017 07:34

Witam,
Mam problem z lispem, który przestał działać, kiedy przerzuciłem się na AutoCada 2016 PL (wcześniej miałem AutoCada 2011 EN). Lisp służył do wyrzucania współrzędnych punktu. Wstawiał numer punktu, a później zestawienie współrzędnych w tabelce.
Aplikacja wczytuje się poprawnie i uruchamia po wpisaniu komendy w wierszu poleceń, ale w momencie pierwszego kliknięcia w przestrzeni roboczej pojawia się komunikat:
Niewłaściwe słowo kluczowe.
; błąd: Funkcję anulowano


Ktoś może wie co jest przyczyną?

Tak wygląda kod LISPu:
Kod: Zaznacz cały
(defun c:pg()
 (setq oldosmode (getvar "osmode") oldcolor (getvar "cecolor"))
 
 (setvar "cmdecho" 0)
 (setvar "osmode" 0)
 (setq przebieg 0)
 (setq lista_pktow nil)
 (if (null nr) (setq nr 1))
 (setq koniec "N")

 (while (= koniec "N")   
   (setq txt (strcat "(NR=" (itoa nr) ")"))
   (initget "N Z")
    (setq odp1 (getkword (strcat "\n" txt " Nowy numer | Zestawienie | [wskaż punkt] ")))
   ;;;;;;;;;
     (if (= odp1 "N")                             ;podaj nr)
      (progn      
      (princ "\n(NR=")(princ nr)(princ ") ")
      (initget 7) (setq nr (getint " Podaj nr punktu: "))
      )   
     )
   ;;;;;;;;;;;;;;;;;;;;;;
     (if (null odp1)
      (progn
       (print)
       (setvar "osmode" oldosmode)
       (initget 1)(setq aktP (getpoint " Wskaz punkt do sczytania:"))
       (setvar "osmode" 0)
       (blk aktP NR)
       ;(command "_.text" aktP (* 2.5 (getvar "dimscale")) "0" (strcat "NR "(itoa nr)))
       (setq aktP (cal "u2w(aktP)/1"))
       (setq aktPy (nth 0 aktP))
       (setq aktPx (nth 1 aktP))
       (setq aktP (list aktPx aktPy))        
       (setq Pkti (list nr aktP))
       (princ "\nWsp X [N]= ")       (princ aktPx)
       (princ "      Wsp Y [E]=")  (princ aktPy)   
       (if (= przebieg 0)
          (progn
       (setq przebieg (+ 1 przebieg))
       (setq lista_pktow (list Pkti))
     ) 
       
    ;;else
     (progn (setq lista_pktow (cons Pkti lista_pktow))
     )
    )
    ;;end
       (setq nr (+ nr 1))
     ) ;;end if null odp1 progn
     ) ;;end if =null odp1
   
     (if (= odp1 "Z")
      (progn
   (setvar "osmode" oldosmode)
        (initget 1)(setq ptab (getpoint "\nWskaz 'lewy górny' punkt wstawienia tabelki: "))
        (setq ptab (list (nth 0 ptab)
          (- (nth 1 ptab)
             (* 5.5 (getvar "dimscale"))
          )
          (nth 2 ptab)
         )
           )
   (setvar "osmode" 0)
   (setq skal (getvar "dimscale"))
        (setq liczn 1)
        (setq licznMax (length lista_pktow))     
   (setq xt1 (+ (nth 0 ptab) (* skal 10)))                          ;kolejne Xy kolejnych kolumn
        (setq xt2 (+ (nth 0 ptab) (* skal 45)))               
        (setq xt3 (+ (nth 0 ptab) (* skal 80)))         
        (setq yt1 (+ (nth 1 ptab)(* skal 1.5)))         ; y wiersza 1
   
               
        (setq koniec "T")
        (setvar "cecolor" "3")
   (Command "_.text" "_r" (list (+ xt1 (* skal 5)) yt1) (* skal 2.5) "0" "NR PKTU")
   (setvar "cecolor" "2")
   ;linia pion
   (command "_.line" (cal "[xt1+10*skal,yt1+4*skal]") (list (cal "xt1+10*skal")  (- (nth 1 ptab) (* skal 5 licznmax) (* skal 1))) "")        ;;;;;;;;;;dddddddd
   (setvar "cecolor" "3")
   (Command "text" (list (cal "xt2-10*skal") yt1) (* skal 2.5) "0" "X [N]")

   (setvar "cecolor" "2")
   ;linia pion
   (command "_.line" (cal "[xt2+10*skal,yt1+4*skal]");;;;
       (list (cal "xt2+10*skal")  (- (nth 1 ptab) (* skal 5 licznmax) (* skal 1))) "")        ;;;;;;;;;;dddddddd
   (setvar "cecolor" "3")
   (Command "text" (list (cal "xt3-10*SKAL") yt1) (* skal 2.5) "0" "Y [E]")

   (setvar "cecolor" "2")
   ;rec text górny
   (command "_rectang"
       (list (nth 0 ptab) (- (nth 1 ptab) skal))
       (cal "[xt3+10*skal,yt1+4*skal]"))
   (setvar "cecolor" "2")
   ;rec dolny
   (command "_rectang"
         (list (nth 0 ptab) (- (nth 1 ptab) skal))
         (list (+ xt3 (* skal 10)) (- (nth 1 ptab) (* skal 5 licznmax) (* skal 1 ))))
        (
          repeat licznmax
      (setvar "cecolor" "3")
      (command "_.text" "_r" (list xt1 (- (nth 1 ptab) (* 5 liczn skal))) (* skal 2.5) "0"        (nth 0 (nth (- licznmax liczn) lista_pktow)))
      (setvar "cecolor" "1")
      (command "_.text" "_r" (list xt2 (- (nth 1 ptab) (* 5 liczn skal))) (* skal 2.5) "0" (rtos (nth 0 (nth 1 (nth (- licznmax liczn) lista_pktow))) 2 3))
      (command "_.text" "_r" (list xt3 (- (nth 1 ptab) (* 5 liczn skal))) (* skal 2.5) "0" (rtos (nth 1 (nth 1 (nth (- licznmax liczn) lista_pktow))) 2 3))    
         (setq liczn (+ 1 liczn))
      (If (<= liczn licznmax)            ;rysowanie linii
             (progn
                      (setvar "cecolor" "9")
            (command "._line" (list (nth 0 ptab)        (- (nth 1 ptab) (- (* 5 liczn skal) (* 4 skal))))
                              (list (cal "xt3+10*skal") (- (nth 1 ptab) (- (* 5 liczn skal) (* 4 skal)))) ""))
                 (setvar "cecolor" "1")
             )    ;progn  rysowanie linii
   )              ;if <=liczn licznmax rysowanie linii

    ;(setq yt2 (cal"(nth 1 ptab)-3.5*skal*2-(licznMax-liczn)*skal*3.5"))
 ;        (command "text" )
;    )
   
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;     trzeba wyłuszczyc z listy po kolei elementy i wpisywac je do tabelki.
        ;(rtos liczba 2 2 ) zamienia Liczbe rzecz na cyfre z prec. 2 mpoprzec
        ; tabelka =- wys 1. wiersza 4 pkty * skal nastepne po 3.5 *skal
        ;  szerokosc 1. 12,5 2. i 3. po 30
         ;(setq pkt (car lista_pktow))
    ;(setq lista_pktow (cdr lista_pktow))
       
   ;    );;;repeat dlugosc listy
      ) ;;end progn
     ) ;;end if odp1=z
   )  ;; end while koniec <>0

(print lista_pktow)
(print (length lista_pktow))
(setvar "osmode" oldosmode)
(setvar "cecolor" oldcolor)
)

(defun blk(pkt nr / oldcolor oldosmode oldlayer ourset pktx pkty )

 ;(setq pkt (getpoint))
 
  (setq oldcolor (getvar "cecolor") oldosmode (getvar "osmode")  oldlayer (getvar "clayer"))
  (setvar "osmode" 0) 


  (if (null (tblsearch "block" "zz_pkt-wytycz"))
    (progn
     
       (Command "._-layer" "A" "s" "zzPKTGEO" "" "" "T" "0" "on" "0" "M" "0" "")
       (graphscr)
       (setvar "cecolor" "7")
       (command "_.circle" pkt (* 1 (getvar "dimscale")))
       (setvar "cecolor" "8")
       (setq ourset (ssadd (entlast)))
       (setq pktx (car pkt) pkty (nth 1 pkt))
       (command "line" (list (cal "pktx-1.5*(getvar(dimscale))") pkty) (list (cal "pktx+1.5*(getvar(dimscale))") pkty) "")
       (setq ourset (ssadd (entlast) ourset))
       (command "._line" (list pktx (cal "pkty-1.5*(getvar(dimscale))") ) (list pktx (cal "pkty+1.5*(getvar(dimscale))")) "")
       (setq ourset (ssadd (entlast) ourset)) 
       (setvar "cecolor" "3")
       (command "_.attdef" "" "PKT" "Nr pktu:" "0" (cal "pkt+[2,2]*(getvar(dimscale))") (* 2.5 (getvar "dimscale")) "0")
       (setq ourset (ssadd (entlast) ourset))     
       (command "._scale" ourset "" pkt "r" (getvar "dimscale") "1")
       (command "_.-block" "zz_pkt-wytycz" pkt ourset "")   
       (setvar "clayer" oldlayer)
       (Command "._-layer" "A" "R" "zzPKTGEO" "D" "zzpktgeo" "" "")
       (command "._-insert" "zz_pkt-wytycz" pkt (getvar "dimscale") (getvar "dimscale") "0" NR)
    ) ;progn if yes
    (command "._-insert" "zz_pkt-wytycz" pkt (getvar "dimscale") (getvar "dimscale") "0" NR)     ;else

  ) ;endIF
  (setvar "cecolor" oldcolor)
  (setvar "osmode" oldosmode) 
)

cilip
 
Posty: 2
Dołączył(a): cze 14, 2017 07:25

Re: LISP przestał działać w nowszej wersji AutoCad

Postprzez Lukaszs85 » cze 20, 2017 14:30

Najprawdopodobniej problemem są linie kodu:
Kod: Zaznacz cały
(Command "text" (list (cal "xt2-10*skal") yt1) (* skal 2.5) "0" "X [N]")
...
(Command "._-layer" "A" "R" "zzPKTGEO" "D" "zzpktgeo" "" "")


Polecenia command lub ich opcje są dla wersji angielskiej i będą działały tylko na angielskiej. Trzeba je poprawić na wersję uniwersalną:
- "text" na "_text"
- "line" na "_line"
To samo tyczy się wyboru opcji poleceń które trzeba albo przerobić na polecenia dla polskiej wersji albo na wersję uniwersalną. LISP powinien dalej śmigać. Przejrzyj jeszcze raz cały skrypt w poszukiwaniu poleceń tylko do wersji angielskiej i dodaj _.

PS.Mniej żmudną robotą moim zdaniem od konwersji poleceń command na wersją multilanguage było by przepisanie ich na nowo korzystając z poleceń enmake albo VL.

Pozdrawiam
Łukasz
Lukaszs85
 
Posty: 21
Dołączył(a): lut 24, 2017 00:24

Re: LISP przestał działać w nowszej wersji AutoCad

Postprzez agregu » cze 21, 2017 08:10

Mam podobną historię za sobą.
W programie który napisałem i uiżywałem przez kolejne wersje od 2008 aż do 2014 było wszytsko ok
Gdy zaisntaklowany zaostał na wersji 2016 i 2017 i obecnie na 2018. Okazalo się że nie fungował.
Problemem okazało się
(command "_insert".....................
po zmianie na
(command-s "_insert".................
zaczeło hulać.

nie wgryzałem się w arkana przewagi jednego polecenia nad drugim (ale ktos kiedyś zwreacal mi na to uwagę)......
_____________________________________________________________________________________
agregu
agregu
 
Posty: 45
Dołączył(a): kwi 22, 2011 08:35

Re: LISP przestał działać w nowszej wersji AutoCad

Postprzez cilip » cze 27, 2017 12:42

Wielkie dzięki Panowie za pomoc! Co prawda nie znam się na tym kompletnie, ale wprowadziłem i jedne i drugie zalecenia i zaczęło coś funkcjonować, mam jeszcze problem ze skalą tych opisów, ale jakoś do tego dojdę metodą prób i błędów!
cilip
 
Posty: 2
Dołączył(a): cze 14, 2017 07:25


Powrót do AutoCAD

Kto przegląda forum

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