iJero 发表于 2015-11-25 11:13:21

请教:)

(defunC:TT( / LAY I)
   (vl-load-com)
   (vlax-forI(vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))   
       (if (wcmatch (strCase (vla-get-Name I)) "A*,B*,C*,D*")
         (progn
                  (setq LAY (cons (vla-get-Layer I) LAY) )      ;;;;;;;;;;;;;;LINE 1            
                  (princ (strcat "[" (vla-get-Name I) "]\n") )               )                           
       )   

   )         
   (setq LAY (vl-sort LAY '<) )
   (vlax-forI(vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
          (princ (strcat "=" (vla-get-Name I) "=\n") )
   )
   (princ)
)

上述代码的目的是想把A、B、C、D开头的图层全部找出来,
但我只要增加了 LINE1 那句代码,其后面的所有代码均失效,能运行,但不会执行我要的操作(如PRINC之类)

ivde 发表于 2015-11-25 11:31:33


(defun c:tt (/ lyrs)
(vlax-for lyr        (vla-get-layers
                  (vla-get-activedocument (vlax-get-acad-object))
                )
    (if
      (and (wcmatch (strcase (setq name (vla-get-name lyr))) "*")
           (not (member name lyrs))
      )
       (setq lyrs (cons name lyrs))
    )
)
(foreach x (vl-sort lyrs '<)
    (princ (strcat "\nName = " x))
)
(princ)
)

iJero 发表于 2015-11-25 12:53:50

ivde 发表于 2015-11-25 11:31 static/image/common/back.gif


但我在 你的 IF then 后面增加一句            (princ (strcat "\nName **** " lyr))
后 其后的代码也无效了,何解?
         

masterlong 发表于 2015-11-25 12:57:13

问题在(vla-get-Layer I)这一句
查一下vla-get-Layer适用的对象是啥

ivde 发表于 2015-11-25 13:19:17

iJero 发表于 2015-11-25 12:53
但我在 你的 IF then 后面增加一句            (princ (strcat "\nName **** " lyr))
后 其后的代码也无 ...

lyr是OBJECT不是string,自然不能Strcat

iJero 发表于 2015-11-25 13:39:44

ivde 发表于 2015-11-25 13:19 static/image/common/back.gif
lyr是OBJECT不是string,自然不能Strcat

我对lyr 加了(vla-get-Name Lyr)

iJero 发表于 2015-11-25 13:45:53

问题貌似解决了,受ivide的提醒,可能是哪个LIST里混编了OBJECT 和STRING ,在仔细查看中
页: [1]
查看完整版本: 请教:)