IF函数存在问题
大家好,谁能澄清一下这段代码中的问题是什么,我该如何修复它。(setq lnam (getstring"\nEnter lay name:"))
(if ( = lnam t)
(setvar "clayer" lnam))
(if ( = lnam nil)
(setvar "clayer" "0")) lnam变量应包含字符串,因此无法将其与T进行比较;也可能有助于验证用户输入的层的存在性:
(if (and (setq lnam (getstring"\nEnter lay name:"))
(tblsearch "LAYER" lnam))
(setvar "CLAYER" lnam)
(setvar "CLAYER" "0")
) 由于getstring将在用户按enter键时返回空字符串,因此可以使用:
(if (tblsearch "layer" (setq l (getstring t "\nLayer name: ")))
(setvar 'clayer l)
(setvar 'clayer "0")
)
谢谢大家的回复,
它工作得很好。我需要另一件事,我想用entmake创建层,并将其添加到以前的代码中。我正在尝试,但它不起作用。它创建层,但不是当前层。我如何解决这个问题。
谢谢你的帮助。
试试这个
(defun c:test (/)
(if (and (setq lnam (getstring"\nEnter lay name:"))
(tblsearch "LAYER" lnam))
(setvar "CLAYER" lnam)
(setvar "CLAYER" "0")
)
(entmake
(list
(cons 0 "LAYER")
(cons 100 "AcDbSymbolTableRecord")
(cons 100 "AcDbLayerTableRecord")
(cons 2 lnam)
'(70 . 0)
'(62 . 2)
'(6 . "Continuous")))
)或此
(defun c:test (/)
(if (tblsearch "layer" (setq l (getstring t "\nLayer name: ")))
(setvar 'clayer l)
(setvar 'clayer "0")
)
(entmake
(list
(cons 0 "LAYER")
(cons 100 "AcDbSymbolTableRecord")
(cons 100 "AcDbLayerTableRecord")
(cons 2 lnam)
'(70 . 0)
'(62 . 2)
'(6 . "Continuous")))
) 这样地?
(if (not (tblsearch "layer" (setq lnam (getstring t "\nLayer name: "))))
(if (entmake (list (cons 0 "LAYER")
(cons 100 "AcDbSymbolTableRecord")
(cons 100 "AcDbLayerTableRecord")
(cons 2 lnam)
'(70 . 0)
'(62 . 2)
'(6 . "Continuous")))
(setvar "CLAYER" lnam)
(setvar "CLAYER" "0")
)
) 我错过什么了吗?
请注意,如果aleady已关闭,则只需关闭DEFUN语句。
很抱歉,我想是不是有什么问题,这对我不起作用。 希望这能帮助您理解这个问题:
(defun c:test( / lnam )
(if (not (tblsearch "layer" (setq lnam (getstring t "\nLayer name: "))))
(if (entmake (list (cons 0 "LAYER")
(cons 100 "AcDbSymbolTableRecord")
(cons 100 "AcDbLayerTableRecord")
(cons 2 lnam)
'(70 . 0)
'(62 . 2)
'(6 . "Continuous")))
(setvar "CLAYER" lnam)
(setvar "CLAYER" "0")
)
)
(princ)
) 我真的很感谢你的努力。
你测试过了吗?不再工作!!
页:
[1]
2