mostafa badran 发表于 2022-7-5 23:13:51

IF函数存在问题

大家好,谁能澄清一下这段代码中的问题是什么,我该如何修复它。
(setq lnam (getstring"\nEnter lay name:"))
(if ( = lnam t)
   (setvar "clayer" lnam))
(if ( = lnam nil)
   (setvar "clayer" "0"))

MSasu 发表于 2022-7-5 23:20:01

lnam变量应包含字符串,因此无法将其与T进行比较;也可能有助于验证用户输入的层的存在性:
(if (and (setq lnam (getstring"\nEnter lay name:"))
      (tblsearch "LAYER" lnam))
(setvar "CLAYER" lnam)
(setvar "CLAYER" "0")
)

Lee Mac 发表于 2022-7-5 23:28:38

由于getstring将在用户按enter键时返回空字符串,因此可以使用:
 
(if (tblsearch "layer" (setq l (getstring t "\nLayer name: ")))
   (setvar 'clayer l)
   (setvar 'clayer "0")
)

mostafa badran 发表于 2022-7-5 23:33:28

 
谢谢大家的回复,
它工作得很好。我需要另一件事,我想用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")))
)

MSasu 发表于 2022-7-5 23:36:50

这样地?
(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")
)
)

mostafa badran 发表于 2022-7-5 23:42:39

我错过什么了吗?
 

MSasu 发表于 2022-7-5 23:48:02

请注意,如果aleady已关闭,则只需关闭DEFUN语句。

mostafa badran 发表于 2022-7-5 23:52:40

 
很抱歉,我想是不是有什么问题,这对我不起作用。

MSasu 发表于 2022-7-5 23:54:57

希望这能帮助您理解这个问题:
(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)
)

mostafa badran 发表于 2022-7-6 00:02:31

我真的很感谢你的努力。
你测试过了吗?不再工作!!
页: [1] 2
查看完整版本: IF函数存在问题