取多个对象的顶点并依次在命令行输出 程序只能输出最后对象的点 帮忙看看
(defun c:zxx(/ lst k i j ent qb lst dbf ss bcd aa)(setq ss (ssget))
(setq sscd (sslength ss))
(setq k -1 g -1 i -1 lst nil)
(setq aa nil bb nil)
(while (<(setq k (1+ k)) sscd);;取出选择集中的各个对象
(setq en (ssname ss k))
(setq aa (append (list en) aa));;把对象名称放到表中
)
;;; (princ aa) ;;用于编程测试用
;;; (princ)
(setq bcd (length aa))
(while (< (setq g (1+ g)) bcd);;表中的对象名称依次求对象数据列表
(setq ent(entget (nth g aa)))
;;; (princ ent) ;;用于编程测试用
;;; (princ)
(setq encd (length ent))
;;; (princ ent);;这句中的ent是随着循环变化的
(princ)
(while (<(setq i (1+ i))encd);;取出对象的顶点放到表lst中
(setq qb (nth i ent))
(if(=(car qb)10)
(progn
(setq dbf (list(cdr qb)))
(setq lst (append dbf lst))
)
)
)
(princ lst);;这句中的lst为什么老是最后一个对象的点呢?
(princ)
)
)
这句错了:
(setq aa (append (list en) aa))
应改成:
(setq aa (append aa (list en))) 本帖最后由 taylorzhang 于 2011-4-5 21:56 编辑
版主 我改了还是不行啊
(defun c:zxx(/ lst k i j ent qb lst dbf ss bcd aa)
(setq ss (ssget))
(setq sscd (sslength ss))
(setq k -1 g -1 i -1 lst nil)
(setq aa nil bb nil)
(while (<(setq k (1+ k)) sscd);;取出选择集中的各个对象
(setq en (ssname ss k))
(setq aa (append aa (list en)));;把对象名称放到表中
)
;;; (princ aa) ;;用于编程测试用
;;; (princ)
(setq bcd (length aa))
(while (< (setq g (1+ g)) bcd);;表中的对象名称依次求对象数据列表
(setq ent(entget (nth g aa)))
;;; (princ ent) ;;用于编程测试用
;;; (princ)
(setq encd (length ent))
;;; (princ ent);;这句中的ent是随着循环变化的
(princ)
(while (<(setq i (1+ i))encd);;取出对象的顶点放到表lst中
(setq qb (nth i ent))
(if(=(car qb)10)
(progn
(setq dbf (list(cdr qb)))
(setq lst (appendlst dbf))
)
)
)
(princ lst);;这句中的lst为什么老是最后一个对象的点呢?
(princ)
)
)
选择对象:
(<图元名: 7ef94418> <图元名: 7ef94410>)((3178.6 658.258 0.0))((3178.6 658.258 0.0)) 本帖最后由 Gu_xl 于 2011-4-5 21:56 编辑
回复 taylorzhang 的帖子
(defun c:zxx(/ lst k i j ent qb lst dbf ss bcd aa)
(setq ss (ssget))
(setq sscd (sslength ss))
(setq k -1 g -1lst nil)
(setq aa nil bb nil)
(while (<(setq k (1+ k)) sscd);;取出选择集中的各个对象
(setq en (ssname ss k))
(setq aa (append (list en) aa ));;把对象名称放到表中
)
;;; (princ aa) ;;用于编程测试用
;;; (princ)
(setq bcd (length aa))
(while (< (setq g (1+ g)) bcd);;表中的对象名称依次求对象数据列表
(setq ent(entget (nth g aa)))
;;; (princ ent) ;;用于编程测试用
;;; (princ)
(setq encd (length ent))
;;; (princ ent);;这句中的ent是随着循环变化的
(princ)
(setq i -1) ;_ 重置i,问题在这里
(while (<(setq i (1+ i))encd);;取出对象的顶点放到表lst中
(setq qb (nth i ent))
(if(=(car qb)10)
(progn
(setq dbf (list(cdr qb)))
(setq lst (appendlst dbf))
)
)
)
(princ)
)
(princ lst);;移除到最后打印
(princ)
)
谢谢 Gu_xl版主 ZZXXQQ 版主终于解决了 原来是对i没有重置 第二次循环时候第二个while 跳过了 呵呵
谢谢 回复 Gu_xl 的帖子
此程序有点问题,当容差大于两点差时候,会少点,比如一共有二十点,容差为1时候,输出20个点,当容差变大时例如10,就输出12个点了,另外8个点在容差范围内的点,没有输出!!!!
页:
[1]