mwade93 发表于 2022-7-5 16:37:47

删除命令Nil和命令

这段代码工作得很好,但每次发出时,我都会收到一条错误消息。我知道这很简单,但我想不出来。缺少什么?非常感谢。
 

(defun c:PSTAMPA ( / cl vb ll)
   (setq
       CL (getvar 'clayer)
       vb
       (assoc
         (progn
               (initget "Preliminary NFC")
               (getkword "Enter Orientation :")
         )
         '(("Preliminary" . "NOTE_PRELIM") ("NFC" . "NOTE_NFC"))
       )
   )
   (if (tblsearch "BLOCK" (cdr vb))
       (
         (progn
               (setq TAB (getvar "CTAB"))
               (foreach LL (layoutlist)
                   (setvar "ctab" LL)
                   (command "layer" "set" "QF-ANNO-NOTE" "" "_.INSERT" (cdr VB) "0,0" "1" "1" "0")
                   (command "mview" "lock" "on" "all" "" (setvar "CTAB" TAB)
                   )
               )
         )
       )
   )
   (alert "Plot stamps are not loaded, please use the load blocks button.")
   (princ)
   (command "layer" "s" CL "")
)

Lee Mac 发表于 2022-7-5 17:16:48

除其他问题外,在第二个progn表达式周围还有一组额外的括号-
 
乍一看,这:
(if (tblsearch "BLOCK" (cdr vb))
   (
       (progn
         (setq TAB (getvar "CTAB"))
         (foreach LL (layoutlist)
               (setvar "ctab" LL)
               (command "layer" "set" "QF-ANNO-NOTE" "" "_.INSERT" (cdr VB) "0,0" "1" "1" "0")
               (command "mview" "lock" "on" "all" "" (setvar "CTAB" TAB)
               )
         )
       )
   )
)可能应该是:
(if (tblsearch "BLOCK" (cdr vb))
   (progn
       (setq TAB (getvar "CTAB"))
       (foreach LL (layoutlist)
         (setvar "ctab" LL)
         (command "layer" "set" "QF-ANNO-NOTE" "" "_.INSERT" (cdr VB) "0,0" "1" "1" "0")
         (command "mview" "lock" "on" "all" "")
       )
       (setvar "CTAB" TAB)
   )
)

BIGAL 发表于 2022-7-5 17:18:23

这是一个检查括号lisp方便地找到不平衡点,如李指出。Like Lee(命令“mview”“lock”“on”“all”“(setvar“CTAB”选项卡))
 


(defun c:chkbrk (/ opf bkt chekdfile rdctl wkfile currentln wln ltr ncln)
(setvar "cmdecho" 0)
(prompt "\nlook at end of line")
;(setq chekdfile (getstring "enter name of file :"))
(SETQ chekdfile (getfiled "Enter file name:" " " "LSP" 4))

(setq opf (open chekdfile "r"))
(setq bkt 0)
(setq blkl 0)
(setq rdctl 1)
(setq wkfile (open "c:\temp\wow.lsp" "w"))

(setq currentln "a")
(while (/= blkl 6)
(setq currentln (read-line opf))
(if (= currentln nil)(setq currentln ""))
(if (= currentln "")(setq blkl (+ 1 blkl))(setq blkl 1))
(setq wln currentln)                                                      
(while (/= wln "")
       (setq ltr (substr wln 1 1))
       (setq wln (substr wln 2))
       (cond ((= (ascii ltr) 34) (if (= rdctl 0)(setq rdctl 1)(setq rdctl 0)))
               ((and (= ltr "(")(= rdctl 1))(setq bkt (+ bkt 1)))
               ((and (= ltr ")")(= rdctl 1))(setq bkt (- bkt 1)))
               ((and (= ltr ";")(= rdctl 1))(setq wln ""))
               ;(t (prompt ltr))
       )
)
(setq ncln (strcat currentln ";" (itoa bkt)
(princ (itoa bkt))
(if (= rdctl 0) "string open" "")))
(if (/= currentln "")(write-line ncln wkfile))
)
(close wkfile)
(close opf)
(prompt (strcat "open brakets= " (itoa bkt) "."))
)

(setq ang1 nil
   pt1 nil
   pt2 nil
   pt3 nil
   pt4 nil
   pt5 nil)

(command "chkbrk")
(princ)

mwade93 发表于 2022-7-5 17:55:24

不确定我到底做了什么,但我成功了。
 
(defun c:PSTAMPA ( / cl vb ll)
   (setq
       CL (getvar 'clayer)
       vb
       (assoc
         (progn
               (initget "Preliminary NFC")
               (getkword "Enter Orientation :")
         )
         '(("Preliminary" . "NOTE_PRELIM") ("NFC" . "NOTE_NFC"))
       )
   )
   (if (tblsearch "BLOCK" (cdr vb))
       (
         (progn
               (setq TAB (getvar "CTAB"))
               (foreach LL (layoutlist)
                   (setvar "ctab" LL)
                   (command "layer" "set" "QF-ANNO-NOTE" "" "_.INSERT" (cdr VB) "0,0" "1" "1" "0")
                   (command "mview" "lock" "on" "all" "" (setvar "CTAB" TAB))
               )
         )
       )
       (alert "Plot stamps are not loaded, please use the load blocks button.")
   )
   (command "layer" "s" CL "")
(princ))
页: [1]
查看完整版本: 删除命令Nil和命令