CADsite forum

AutoCAD => Autolisp => Topic gestart door: zone2000 op di 17 06 2008, 11:45:44

Titel: Krijg steeds 'Unknown command' terug in text window (Opgelost)
Bericht door: zone2000 op di 17 06 2008, 11:45:44
Hallo,

Ik heb deze LISP gemaakt. Deze LISP maakt een cirkel aan met daarin een getal zodat ik snel onderdelen kan nummeren.
Het werkt opzich goed alleen geeft AutoCAD in het 'text window' (via f2) iedere keer de tekst: 'Unknown command "K".  Press F1 for help.' Waarom is dat? Ik kan de oorzaak hiervan niet vinden. Zit er een foutje in deze LISP?

En als tweede vraag, ik ben beginnend LISP schrijver, kan deze code korter, simpeler of overzichtelijker opgezet worden?

Alvast bedankt,
Groeten Lars

(defun c:k (/ applic a b s1 s2 s3 s4 ~CMD)
 (vl-load-com)
 (setq applic (vlax-get-acad-object))
 (setq   ~CMD (getvar "CMDECHO")
   a    (getpoint "\nSelect midpoint to place number:")
   b    (getint "\nSpecify a positive number less than 100:")
 )

 (setvar "CMDECHO" 0)
 (if (> b -1)            ;b mag niet kleiner dan 0, als dat wel zo is, dan onderaan deze code errorbox van kracht.
   (progn
     (if
   (< b 100)         ;b mag niet hoger dan 100, zowel dan onderaan deze code errorbox boven vorige errorbox van kracht.
    (progn
      (command "circle" a "10.00")
      (setq s1 (entlast))
      (command "circle" a "8.00")
      (setq s2 (entlast))
      (command "-hatch" "p" "s" "s" s1 s2 "" "")
      (setq s3 (entlast))

      (if (< b 10)         ;Als b lager is dan 10, dan kan het getal groter weergegeven worden in de cirkel. Zoniet dan tekstgrootte kleiner.
               ;if yes
        (progn
          (command "text" "j" "mc" a "12.00" "0" b "")
          (setq s4 (entlast))
          (princ)
          (command "scale" s1 s2 s3 s4 "" a "r" "20.00" pause)
          (princ)
          (setvar "CMDECHO" ~CMD)
        )

               ;if not
        (progn
          (command "text" "j" "mc" a "8.00" "0" b "")
          (setq s4 (entlast))
          (princ)
          (command "scale" s1 s2 s3 s4 "" a "r" "20.00" pause)
          (princ)
          (setvar "CMDECHO" ~CMD)
        )
      )
    )
    (progn
      (vla-eval applic      ;errobox zodra b groter is dan 100.
           (strcat
             "MsgBox \"Please enter a value less than 100\""
             ", "
             "vbCritical"
             ", "
             "\"Value error\""
            )
      )
    )
     )               ;sluit if af van (< b 100)
   )
   (progn
     (vla-eval   applic         ;errorbox zodra b kleiner is dan 0.
      (strcat
        "MsgBox \"Please enter a positive value\""
        ", "
        "vbCritical"
        ", "
        "\"Value error\""
       )
     )
   )
 )               ;sluit if af van (> b -1)
)
Titel: Re: Krijg steeds 'Unknown command' terug in text window
Bericht door: EddyBeerke op di 17 06 2008, 12:41:23
Als je de lisp routine in een andere LEESBARE kleur zet wordt het voor de lezer ook een stukje makkelijker.

(defun c:k (/ applic a b s1 s2 s3 s4 ~CMD)
  (vl-load-com)
  (setq applic (vlax-get-acad-object))
  (setq   ~CMD (getvar "CMDECHO")
   a    (getpoint "\nSelect midpoint to place number:")
   b    (getint "\nSpecify a positive number less than 100:")
  )

  (setvar "CMDECHO" 0)
  (if (> b -1)            ;b mag niet kleiner dan 0, als dat wel zo is, dan onderaan deze code errorbox van kracht.
    (progn
      (if
   (< b 100)         ;b mag niet hoger dan 100, zowel dan onderaan deze code errorbox boven vorige errorbox van kracht.
    (progn
      (command "circle" a "10.00")
      (setq s1 (entlast))
      (command "circle" a "8.00")
      (setq s2 (entlast))
      (command "-hatch" "p" "s" "s" s1 s2 "" "")
      (setq s3 (entlast))

      (if (< b 10)         ;Als b lager is dan 10, dan kan het getal groter weergegeven worden in de cirkel. Zoniet dan tekstgrootte kleiner.
               ;if yes
        (progn
          (command "text" "j" "mc" a "12.00" "0" b "")
          (setq s4 (entlast))
          (princ)
          (command "scale" s1 s2 s3 s4 "" a "r" "20.00" pause)
          (princ)
          (setvar "CMDECHO" ~CMD)
        )

               ;if not
        (progn
          (command "text" "j" "mc" a "8.00" "0" b "")
          (setq s4 (entlast))
          (princ)
          (command "scale" s1 s2 s3 s4 "" a "r" "20.00" pause)
          (princ)
          (setvar "CMDECHO" ~CMD)
        )
      )
    )
    (progn
      (vla-eval applic      ;errobox zodra b groter is dan 100.
           (strcat
             "MsgBox \"Please enter a value less than 100\""
             ", "
             "vbCritical"
             ", "
             "\"Value error\""
            )
      )
    )
      )               ;sluit if af van (< b 100)
    )
    (progn
      (vla-eval   applic         ;errorbox zodra b kleiner is dan 0.
      (strcat
        "MsgBox \"Please enter a positive value\""
        ", "
        "vbCritical"
        ", "
        "\"Value error\""
       )
      )
    )
  )               ;sluit if af van (> b -1)
)
Titel: Re: Krijg steeds 'Unknown command' terug in text window
Bericht door: HofCAD op di 17 06 2008, 12:46:45
Beste Lars,

Als men tegenwoordig het commando TEXT of DTEXT gebruikt via de
commando regel van AutoCAD krijgt men eigenlijk het commando DTEXT.
In een script en in een AutoLisp programma is dat bij TEXT anders, dan krijgt men
het echte commando TEXT waarbij slechts een regel tekst 'getekend' wordt.
De regel met TEXT moet dus worden:
(command "text" "j" "mc" a "12.00" "0" b)

Met vriendelijke groet, HofCAD CSI
Titel: Re: Krijg steeds 'Unknown command' terug in text window
Bericht door: zone2000 op di 17 06 2008, 16:24:12
Hey HofCAD,

Dat was de fout. Ik wist niet dat text anders reageerde in LISP.

En voor EddyBeerke, ik dacht dat de LISP zo juist duidelijk te onderscheiden was van de gewone tekst in dit topic.

Groeten, Lars.
Titel: Re: Krijg steeds 'Unknown command' terug in text window (Opgelost)
Bericht door: Joop op wo 18 06 2008, 07:20:55
Als je de code tussen "" en "" zet heb je dit resultaat.
Gebruik hiervoor de knop met #.

(defun c:k (/ applic a b s1 s2 s3 s4 ~CMD)
  (vl-load-com)
  (setq applic (vlax-get-acad-object))
  (setq   ~CMD (getvar "CMDECHO")
   a    (getpoint "\nSelect midpoint to place number:")
   b    (getint "\nSpecify a positive number less than 100:")
  )

  (setvar "CMDECHO" 0)
  (if (> b -1)            ;b mag niet kleiner dan 0, als dat wel zo is, dan onderaan deze code errorbox van kracht.
    (progn
      (if
   (< b 100)         ;b mag niet hoger dan 100, zowel dan onderaan deze code errorbox boven vorige errorbox van kracht.
    (progn
      (command "circle" a "10.00")
      (setq s1 (entlast))
      (command "circle" a "8.00")
      (setq s2 (entlast))
      (command "-hatch" "p" "s" "s" s1 s2 "" "")
      (setq s3 (entlast))

      (if (< b 10)         ;Als b lager is dan 10, dan kan het getal groter weergegeven worden in de cirkel. Zoniet dan tekstgrootte kleiner.
               ;if yes
        (progn
          (command "text" "j" "mc" a "12.00" "0" b "")
          (setq s4 (entlast))
          (princ)
          (command "scale" s1 s2 s3 s4 "" a "r" "20.00" pause)
          (princ)
          (setvar "CMDECHO" ~CMD)
        )

               ;if not
        (progn
          (command "text" "j" "mc" a "8.00" "0" b "")
          (setq s4 (entlast))
          (princ)
          (command "scale" s1 s2 s3 s4 "" a "r" "20.00" pause)
          (princ)
          (setvar "CMDECHO" ~CMD)
        )
      )
    )
    (progn
      (vla-eval applic      ;errobox zodra b groter is dan 100.
           (strcat
             "MsgBox \"Please enter a value less than 100\""
             ", "
             "vbCritical"
             ", "
             "\"Value error\""
            )
      )
    )
      )               ;sluit if af van (< b 100)
    )
    (progn
      (vla-eval   applic         ;errorbox zodra b kleiner is dan 0.
      (strcat
        "MsgBox \"Please enter a positive value\""
        ", "
        "vbCritical"
        ", "
        "\"Value error\""
       )
      )
    )
  )               ;sluit if af van (> b -1)
)