sjw8304 发表于 2014-1-7 23:10:07

请教高手,该段程序哪里出错了,请教

(defun c:xx()
(setq zx-ent (ssget ))
   (setq zx-ls (ssadd))    ;设置空选集
   (setq zx-n1 0)
   (repeat (sslength zx-ent)
    (if (= (cdr (assoc 0 (entget (ssname zx-ent zx-n1)))) "LINE")
      (PROGN
(setq zx-ls(ssadd (ssname zx-ent zx-n1) zx-ls))
(setq zx-ent (ssdel (ssname zx-ent zx-n1) zx-ent))
)
      )
    (setq zx-n1 (1+ zx-n1))
)
(princ zx-ent)
(princ zx-ls)
      )

sjw8304 发表于 2014-1-8 07:41:28

反复试验,出错的应该在(setq zx-ent (ssdel (ssname zx-ent zx-n1) zx-ent)),这句,请问是什么问题

ll_j 发表于 2014-1-8 07:48:51

(defun c:xx ()
(setq zx-ent (ssget))
(setq zx-ls(ssadd)                  ;设置空选集
      zx-ls2 (ssadd)                  ;setq可以连续写
      zx-n10
)
(repeat (sslength zx-ent)
    (if (= (cdr (assoc 0 (entget (setq en (ssname zx-ent zx-n1)))))
         "LINE"
      )
      (ssadd en zx-ls)
      (ssadd en zx-ls2)
    )
    (setq zx-n1 (1+ zx-n1))
)
(princ zx-ent)
(princ zx-ls)
(princ)
)
几个问题:
1.对选择集的ssname操作,选择集在操作过程中应该保持不变,否则i值会和总长度不匹配。
2.选择集的变量和普通的变量不同,在使用ssadd和ssdel时会直接“修改”选择集本身,不需要使用setq来“回收”返回值。
3.如果仅仅要选择某种类型的选择集,可尝试ssget的过滤表。

ysq101 发表于 2014-1-8 17:04:47

ll_j 发表于 2014-1-8 07:48 static/image/common/back.gif
几个问题:
1.对选择集的ssname操作,选择集在操作过程中应该保持不变,否则i值会和总长度不匹配。
2.选 ...

ll_j    就是热心      而且详尽

sjw8304 发表于 2014-1-8 20:42:51

非常感谢楼主,昨晚苦思冥想了一晚上,衷心感谢!
页: [1]
查看完整版本: 请教高手,该段程序哪里出错了,请教