jjatho 发表于 2022-7-6 06:37:58

cond故障

我不知道为什么,但在这段代码中忽略了cond。其想法是将所有页码设为三位数,即001、020、100等。
 
(setq sheetnumber 1)

(foreach tab (_layoutlist)
(setq row 0)
(setq column (+ column 1))

(princ "Test 1\n")

(cond
(> sheetnumber 99)(
(setq sheetnumber (itoa sheetnumber)))
(> sheetnumber 9)(
(setq sheetnumber (itoa (strcat "0" (itoa sheetnumber)))))
(> sheetnumber 0)(
(setq sheetnumber (itoa (strcat "00" (itoa sheetnumber)))))
)

(setq sheetnumber (itoa sheetnumber));Remove this when possible.
(vla-setCellValue table column row sheetnumber)
(setq newname (strcat sheetnumber "-" (substr tab 5 50)))
(setq sheetnumber (atoi sheetnumber))
(setq sheetnumber (+ sheetnumber 1))
(setq row 1)
(setvar 'ctab tab)
(setq tab (substr tab 5 50))
(vla-setCellValue table column row tab)
(command "-layout" "R" "" newname)
)

MSasu 发表于 2022-7-6 06:48:21

我对你的语法做了一些更正:
(cond
((> sheetnumber 99)(
(setq sheetnumber (itoa sheetnumber)))
((> sheetnumber 9)(
(setq sheetnumber (itoa (strcat "0"(itoa sheetnumber)))))
((> sheetnumber 0)(
(setq sheetnumber (itoa (strcat "00" (itoa sheetnumber)))))
)

Lee Mac 发表于 2022-7-6 07:04:30

如果您还没有这样做,我强烈建议您参考AutoLISP开发人员文档,以了解AutoLISP函数的正确语法、参数和返回。
 
以下是cond函数的文档:
 
http://exchange.autodesk.com/autocad/enu/online-help/browse#WS1a9193826455f5ff1a32d8d10ebc6b7ccc-6a7a。htm
 
以下是主要文档的链接:
 
http://exchange.autodesk.com/autocad/enu/online-help/browse#WS73099cc142f48755a52158612bd434e551-7fe9.htm
 
下面是一个教程,解释如何从Visual LISP IDE(VLIDE)中访问此文档:
 
http://lee-mac.com/functioninfo.html

jjatho 发表于 2022-7-6 07:09:41

致MSasu:
 
http://i.imgur.com/heL96ah.jpg
 
李,我正在逐渐学习,但我似乎从实际的书籍中学习编程语言比从在线教程中学习要好得多。不知道为什么。你能推荐一本好书吗?

MSasu 发表于 2022-7-6 07:20:04

Jjatho,我们都是来学习的,所以更有趣的是知道我对你的代码提出的更改是否是你想要的,以及你是否理解它们。

jjatho 发表于 2022-7-6 07:31:28

确实如此。这是我今天工作的全部代码。你的帮助为我想要的行为画上了句号。
 
(defun _layoutlist (/ layouts)
;; List of layouts (VLA-Objects) in drawing (in correct order)
;; Alan J. Thompson, 10.05.09
(setq layouts (vla-get-layouts
        (cond (*AcadDoc*)
                ((setq *AcadDoc* (vla-get-activedocument (vlax-get-acad-object))))
        )
)
)
(vl-sort (layoutlist)
        (function (lambda (a b)
                (< (vla-get-taborder (vla-item layouts a))
                        (vla-get-taborder (vla-item layouts b))
                )
        )
        )
)
)

(defun C:DIRECTORY()

(setq sheetcount (length (layoutlist))) ;Gives count of paper space sheets

(setq directorysheetcount (itoa sheetcount))

(setq location (list -1.75 )

(command "-table" "2" sheetcount location) ;Creates table.
; Note that the variable sheetcount corresponds with the number of data rows
; a title and header row will be created above the data rows.

(setq EN (entlast))

(setq table (vlax-ename->vla-object EN))

(setq column 0)
(setq row 0)

(vla-setCellValue table column row "Contents")

(setq column 1)
(setq row 0)

(vla-setCellValue table column row "Sheet")

(setq column 1)
(setq row 1)

(vla-setCellValue table column row "Description")

(setq sheetnumber 1)

(foreach tab (_layoutlist)
(setq row 0)
(setq column (+ column 1))

(princ "Test 1\n")

(cond
((> sheetnumber 99)
(setq sheetnumber (itoa sheetnumber)))
((> sheetnumber 9)
(setq sheetnumber (strcat "0"(itoa sheetnumber))))
((> sheetnumber 0)
(setq sheetnumber (strcat "00" (itoa sheetnumber))))
)


(vla-setCellValue table column row sheetnumber)
(setq newname (strcat sheetnumber "-" (substr tab 5 50)))
(setq sheetnumber (atoi sheetnumber))
(setq sheetnumber (+ sheetnumber 1))
(setq row 1)
(setvar 'ctab tab)
(setq tab (substr tab 5 50))
(vla-setCellValue table column row tab)
(command "-layout" "R" "" newname)
)

(setq titlepage (car (_layoutlist)))

(setvar 'ctab (car (_layoutlist)))

(princ)
) ;End defun DIRECTORY

neophoible 发表于 2022-7-6 07:44:43

你真的应该看看李的链接,并将其加入书签。本教程只是介绍如何以另一种方式访问。这些链接主要用于快速参考。如果有,那么可以快速检查函数的语法。在LISP的情况下,您肯定想看看括号是如何排列的。如果你想让你的程序发挥作用,这是至关重要的。
页: [1]
查看完整版本: cond故障