mwade93 发表于 2022-7-5 16:28:03

插入布局LISP

我创建了下面的lisp。它会插入给定纸张大小的所有可用布局选项卡,或者用户可以选择单个布局选项卡。问题是,当用户尝试在30x42页上选择All时,它表示没有函数定义。其他一切都很完美。我似乎想不出是什么错误。
 

(defun c:TMLAY ( / LAYOUT SHEETSIZE)
   (setq
       SHEETSIZE
       (assoc
         (progn
               (initget "B D E")
               (getkword "What Sheet Size? :")
         )
         '(("B" . "2016 TM 11x17 Template") ("D" . "2016 TM 24x36 Template") ("E" . "2016 TM 30x42 Template"))
       )
   )
   (if (= (cdr SHEETSIZE) "2016 TM 11x17 Template")
       (command "layout" "template" (cdr SHEETSIZE) "QF100" "imageframe" "1" "imageframe" "0")

   )
   (if (= (cdr SHEETSIZE) "2016 TM 24x36 Template")
       (setq
         layout
         (assoc
               (progn
                   (initget "All 001D 001K 002D 002K 003 100 200 201 300 400 500 600 700")
                   (getkword "Which Sheet or All? :")
               )
               '(("All" . "All") ("001D" . "QF001-DES") ("001K" . "QF001-KEC") ("002D" . "QF002-DES") ("002K" . "QF002-KEC") ("003" . "QF003") ("100" . "QF100") ("200" . "QF200") ("201" . "QF201") ("300" . "QF300") ("400" . "QF400-D") ("500" . "QF500") ("600" . "QF600") ("700" . "QF700"))
         )
       )

   )
   (if (= (cdr SHEETSIZE) "2016 TM 30x42 Template")
       (setq
         layout
         (assoc
               (progn
                   (initget "All 001D 001K 100 200 201 300 500 600 700")
                   (getkword "Which Sheet or All? :")
               )
               '(("All" . "All") ("001D" . "QF001-DES") ("001K" . "QF001-KEC") ("100" . "QF100") ("200" . "QF200") ("201" . "QF201") ("300" . "QF300") ("500" . "QF500") ("600" . "QF600") ("700" . "QF700"))
         )
       )

   )
   (if (wcmatch (cdr layout) "All")
       (
         (if (wcmatch (cdr SHEETSIZE) "2016 TM 24x36 Template")
               (command "layout" "template" "2016 TM 24x36 Template" "QF001-DES,QF001-KEC,QF002-DES,QF002-KEC,QF003,QF100,QF200,QF201,QF300,QF400-D,QF500,QF600,QF700" "imageframe "1" "imageframe" "0")
                   (if (wcmatch (cdr SHEETSIZE) "2016 TM 30x42 Template")
                     (command "layout" "template" "2016 TM 30x42 Template" "QF001-DES,QF001-KEC,QF100,QF200,QF201,QF300,QF500,QF600,QF700" "imageframe "1" "imageframe" "0")
                   )
               )
         )

       (
       (command "layout" "template" (cdr SHEETSIZE) (cdr layout) "imageframe" "1" "imageframe" "0")
   )
(princ))

Roy_043 发表于 2022-7-5 16:41:05

您有(2倍):
"imageframe "1"

mwade93 发表于 2022-7-5 16:44:18

 
你这是什么意思?我正在将imageframe设置为0。这是我确保TBLOCK中的图像上没有帧的方法。

OMEGA-ThundeR 发表于 2022-7-5 16:54:08

罗伊说的。在这两个“imageframe”命令之后需要有一个“。
 
(@cadtutor,代码标签中什么时候会有行号?)

Tharwat 发表于 2022-7-5 16:58:43

额外支架。
 

(if (wcmatch (cdr layout) "All")
       (
      ..........
       )
)

Grrr 发表于 2022-7-5 17:01:46

 
Op在这里也有类似的括号问题。
至少我很高兴他学会了如何使用assoc progn initget getkword块,也许现在是时候学习cond如何工作了?

BIGAL 发表于 2022-7-5 17:08:22

使用命令的有趣imageframe接受“1”或1,但对于setvar,它必须是数字。我倾向于使用setvars而不是command。
 
命令:(setvar“imageframe”1)
; 错误:AutoCAD变量设置被拒绝:“imageframe”“1”
命令:(setvar“imageframe”1)
1.

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

移除额外的支架,并将其设置为setvar imageframe。现在,当我做30x42尺寸的时候,它只是说零。
 

(defun c:TMLAY ( / LAYOUT SHEETSIZE)
   (setq
       SHEETSIZE
       (assoc
         (progn
               (initget "B D E")
               (getkword "What Sheet Size? :")
         )
         '(("B" . "2016 TM 11x17 Template") ("D" . "2016 TM 24x36 Template") ("E" . "2016 TM 30x42 Template"))
       )
   )
   (if (= (cdr SHEETSIZE) "2016 TM 11x17 Template")
       (command "layout" "template" (cdr SHEETSIZE) "QF100" "setvar" "imageframe" "1" "setvar" "imageframe" "0")

   )
   (if (= (cdr SHEETSIZE) "2016 TM 24x36 Template")
       (setq
         layout
         (assoc
               (progn
                   (initget "All 001D 001K 002D 002K 003 100 200 201 300 400 500 600 700")
                   (getkword "Which Sheet or All? :")
               )
               '(("All" . "All") ("001D" . "QF001-DES") ("001K" . "QF001-KEC") ("002D" . "QF002-DES") ("002K" . "QF002-KEC") ("003" . "QF003") ("100" . "QF100") ("200" . "QF200") ("201" . "QF201") ("300" . "QF300") ("400" . "QF400-D") ("500" . "QF500") ("600" . "QF600") ("700" . "QF700"))
         )
       )

   )
   (if (= (cdr SHEETSIZE) "2016 TM 30x42 Template")
       (setq
         layout
         (assoc
               (progn
                   (initget "All 001D 001K 100 200 201 300 500 600 700")
                   (getkword "Which Sheet or All? :")
               )
               '(("All" . "All") ("001D" . "QF001-DES") ("001K" . "QF001-KEC") ("100" . "QF100") ("200" . "QF200") ("201" . "QF201") ("300" . "QF300") ("500" . "QF500") ("600" . "QF600") ("700" . "QF700"))
         )
       )

   )
   (if (wcmatch (cdr layout) "All")
       (if (wcmatch (cdr SHEETSIZE) "2016 TM 24x36 Template")
         (command "layout" "template" "2016 TM 24x36 Template" "QF001-DES,QF001-KEC,QF002-DES,QF002-KEC,QF003,QF100,QF200,QF201,QF300,QF400-D,QF500,QF600,QF700" "setvar" "imageframe "1" "setvar" "imageframe" "0")
               (if (wcmatch (cdr SHEETSIZE) "2016 TM 30x42 Template")
                   (command "layout" "template" "2016 TM 30x42 Template" "QF001-DES,QF001-KEC,QF100,QF200,QF201,QF300,QF500,QF600,QF700" "setvar" "imageframe "1" "setvar" "imageframe" "0")
               )
         )
       )
       (command "layout" "template" (cdr SHEETSIZE) (cdr layout) "imageframe" "1" "imageframe" "0")
   )
(princ))

mwade93 发表于 2022-7-5 17:25:28

我想出来了。我在wcmatch if的第一个命令行中有一个额外的括号。我正在结束一个不需要的命令。
 
(defun c:TMLAYS ( / LAYOUT SHEETSIZE)
   (setq
       SHEETSIZE
       (assoc
         (progn
               (initget "B D E")
               (getkword "What Sheet Size? :")
         )
         '(("B" . "2016 TM 11x17 Template") ("D" . "2016 TM 24x36 Template") ("E" . "2016 TM 30x42 Template"))
       )
   )
   (if (= (cdr SHEETSIZE) "2016 TM 11x17 Template")
       (command "layout" "template" (cdr SHEETSIZE) "QF100" "imageframe" "1" "imageframe" "0")
   )
   (if (= (cdr SHEETSIZE) "2016 TM 24x36 Template")
       (setq
         layout
         (assoc
               (progn
                   (initget "All 001D 001K 002D 002K 003 100 200 201 300 400 500 600 700")
                   (getkword "Which Sheet or All? :")
               )
               '(("All" . "All") ("001D" . "QF001-DES") ("001K" . "QF001-KEC") ("002D" . "QF002-DES") ("002K" . "QF002-KEC") ("003" . "QF003") ("100" . "QF100") ("200" . "QF200") ("201" . "QF201") ("300" . "QF300") ("400" . "QF400-D") ("500" . "QF500") ("600" . "QF600") ("700" . "QF700"))
         )
       )
   )
   (if (= (cdr SHEETSIZE) "2016 TM 30x42 Template")
       (setq
         layout
         (assoc
               (progn
                   (initget "All 001D 001K 100 200 201 300 500 600 700")
                   (getkword "Which Sheet or All? :")
               )
               '(("All" . "All") ("001D" . "QF001-DES") ("001K" . "QF001-KEC") ("100" . "QF100") ("200" . "QF200") ("201" . "QF201") ("300" . "QF300") ("500" . "QF500") ("600" . "QF600") ("700" . "QF700"))
         )
       )
   )
   (if (wcmatch (cdr layout) "All")
       (if (wcmatch (cdr SHEETSIZE) "2016 TM 24x36 Template")
         (command "layout" "template" "2016 TM 24x36 Template" "QF001-DES,QF001-KEC,QF002-DES,QF002-KEC,QF003,QF100,QF200,QF201,QF300,QF400-D,QF500,QF600,QF700" "setvar" "imageframe" "1" "setvar" "imageframe" "0")
         (if (wcmatch (cdr SHEETSIZE) "2016 TM 30x42 Template")
               (command "layout" "template" "2016 TM 30x42 Template" "QF001-DES,QF001-KEC,QF100,QF200,QF201,QF300,QF500,QF600,QF700" "setvar" "imageframe" "1" "setvar" "imageframe" "0")
         )
       )
       (command "layout" "template" (cdr SHEETSIZE) (cdr layout) "setvar" "imageframe" "1" "setvar" "imageframe" "0")
   )
(princ))

BIGAL 发表于 2022-7-5 17:28:48

这就是我,我相信其他人在我写代码时会有一些提示,如果说我添加了一个(defun,我按enter键几次,然后添加结束符),这样我就可以跟上匹配对,特别是如果使用一个程序,其中可能会丢失括号数。
 
我知道我已经贴过几次了,但无论如何,这里有一个小助手,看看你的最后一行,如果不是0,你有一个括号错误。
CHKBRK。LSP
页: [1]
查看完整版本: 插入布局LISP