熙城故事 发表于 2014-9-2 14:16:06

lisp在运行过程中显示 'VLIDE 参数太少:问题

(defun C:jqpt()
(setq num 0)
(prompt "\n请选择所要剪切的喷头: ")
(setq ss1 (ssget '((0 . "INSERT"))));;;获得多个喷头
(repeat (sslength ss1);;;选择对象的数目进行赋值
          (setq ent(ssname ss1 num));;;找到这个第num个对象,并进行循环
          (setq num(1+ num))
(if
          (and ent
             (and (= (cdr (assoc 0 (entget ent)))"INSERT")
                  (= (cdr (assoc 2 (entget ent)))"喷淋头")
             )
           )
          ) ;;;如果第num个对象存在,并且是块,且块名是喷淋头的话进行下面操作

(princ) )
主要程序是这些,但是cad显示,图中红色的区域参数
'VLIDE 参数太少: (IF (AND ENT (AND (= (CDR (ASSOC 0 (ENTGET ENT))) "INSERT") (= (CDR (ASSOC 2 (ENTGET ENT))) "喷淋头")))),

请哪位大神看看程序错在什么地方了,谢谢

maiko 发表于 2014-9-2 14:59:21

本帖最后由 maiko 于 2014-9-2 15:02 编辑

把代码发全 过滤块好像重复了

熙城故事 发表于 2014-9-2 15:16:09

OK,编码在附件中,请看

maiko 发表于 2014-9-2 15:20:58

熙城故事 发表于 2014-9-2 15:16 static/image/common/back.gif
OK,编码在附件中,请看

没看你代码,我写了个简单的过滤块名的例子,参照改吧(Defun C:tt (/ i s1 ss)
(setq        i-1 ss (ssget '((0 . "INSERT"))))
(while (setq s1 (ssname ss (setq i (1+ i))))
    (cond
      ((= (cdr (Assoc 2 (entget s1))) "喷淋头")
       (print "选择了喷淋头")
      )
      ((= (cdr (Assoc 2 (entget s1))) "中心线符号")
       (print "选择了中心线符号")
      )
    )
)
(princ)
)

熙城故事 发表于 2014-9-2 15:29:32

谢谢!!我修改下看看

nzl1116 发表于 2014-9-2 18:52:48

if函数只有条件表达式,没有thanexpr,也没有elseexpr
页: [1]
查看完整版本: lisp在运行过程中显示 'VLIDE 参数太少:问题